# -----------------------------------------------------------------------------
# Ulm's Oberon Library
# Copyright (C) 1989-1994 by University of Ulm, SAI, D-89069 Ulm, Germany
# -----------------------------------------------------------------------------
# This makefile is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This makefile is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# -----------------------------------------------------------------------------
# {stamp: updated by mmo Wed Jul 20 13:21:57 MET DST 1994}
# {options: +a +A +L -P}
# -----------------------------------------------------------------------------
# default settings which are overrided by the parent makefile
# the Oberon library is self-containing, so OBPATH should be "."
OBPATH :=	.
# directory of the compiler and the associated files
OBLIB :=	/usr/local/lib/oberon
# compilation flags (usually -OC -OT to suppress range and conversion checks)
ocflags :=	-OC -OT
# where to install the libraries (usually equivalent to OBLIB)
LIBDIR :=	$(OBLIB)
# -----------------------------------------------------------------------------
.SUFFIXES:
# {macros}
src :=		Internet.od Internet.om Random.od Random.om Resolver.od \
		Resolver.om SMStreams.od SMStreams.om ScanDir.od ScanDir.om \
		UnixArchive.od UnixArchive.om UnixArgList.od UnixArgList.om \
		UnixArgumen.od UnixArgumen.om UnixClock.od UnixClock.om \
		UnixDirecto.od UnixDirecto.om UnixDomainS.od UnixDomainS.om \
		UnixEnviron.od UnixEnviron.om UnixFileCon.od UnixFileCon.om \
		UnixFiles.od UnixFiles.om UnixPipes.od UnixPipes.om \
		UnixProcess.od UnixProcess.om UnixWaitCon.od UnixWaitCon.om
libs :=
liboptions :=	$(patsubst %,-l%,$(libs))
defs :=		$(filter %.od,$(src))
mods :=		$(filter %.om,$(src))
syms :=
refs :=		$(patsubst %.om,%.r,$(mods))
objects :=
lib :=		libo.a
libobjects =	$(patsubst %.om,$(lib)(%.o),$(mods))
defsyms :=
modobjs :=
cyclesyms :=
# {targets}
libdeps :=	SYM(Random.sy) $(lib)(Random.o) SYM(UnixClock.sy) \
		$(lib)(UnixClock.o) SYM(UnixDirecto.sy) $(lib)(UnixDirecto.o) \
		SYM(UnixEnviron.sy) $(lib)(UnixEnviron.o) SYM(UnixFileCon.sy) \
		$(lib)(UnixFileCon.o) SYM(UnixFiles.sy) $(lib)(UnixFiles.o) \
		SYM(Internet.sy) $(lib)(Internet.o) SYM(UnixArchive.sy) \
		$(lib)(UnixArchive.o) SYM(UnixDomainS.sy) \
		$(lib)(UnixDomainS.o) SYM(UnixWaitCon.sy) \
		$(lib)(UnixWaitCon.o) SYM(UnixArgList.sy) \
		$(lib)(UnixArgList.o) SYM(SMStreams.sy) $(lib)(SMStreams.o) \
		SYM(ScanDir.sy) $(lib)(ScanDir.o) SYM(UnixArgumen.sy) \
		$(lib)(UnixArgumen.o) SYM(UnixPipes.sy) $(lib)(UnixPipes.o) \
		SYM(Resolver.sy) $(lib)(Resolver.o) SYM(UnixProcess.sy) \
		$(lib)(UnixProcess.o)
$(lib):		$(libdeps)
T :=
.PHONY:		all
all:		$T $(defsyms) $(lib)
#
OC_CMD :=	OBPATH=$(OBPATH) OBLIB=$(OBLIB) oc
# {rules}
%.o:		%.r
OC :=		$(OC_CMD)
OCFLAGS :=	$(ocflags)
NEWER :=	newer
RM :=		rm -f
TOUCH :=	touch
$(lib)(%.o):	%.om SYM(%.sy)
		@$(TOUCH) $*.ts
		$(OC) $(OCFLAGS) $(liboptions) -c -u -o $(lib) $<
		@[ -z "$(D_$*)" ] || $(NEWER) $*.ts SYM || $(MAKE) $(D_$*)
		@$(RM) $*.ts
SYM(%.sy) $(lib)(%.o): %.od
		$(OC) $(OCFLAGS) $(liboptions) -c -u -o $(lib) $< $*.om
# -----------------------------------------------------------------------------
# {dependencies}
SYM(Internet.sy): ./SYM(Disciplines.sy) ./SYM(RelatedEven.sy) \
		./SYM(Streams.sy) ./SYM(Conditions.sy) ./SYM(Networks.sy)
$(lib)(Internet.o): ./SYM(Disciplines.sy) ./SYM(Events.sy) \
		./SYM(RelatedEven.sy) ./SYM(SysErrors.sy) ./SYM(SysHost.sy) \
		./SYM(Streams.sy) ./SYM(NetIO.sy) ./SYM(PersistentO.sy) \
		./SYM(SysTypes.sy) ./SYM(SysConversi.sy) ./SYM(SysIO.sy) \
		./SYM(SysSockets.sy) ./SYM(Conditions.sy) ./SYM(Networks.sy) \
		SYM(Internet.sy) ./SYM(StreamCondi.sy) ./SYM(Tasks.sy) \
		SYM(UnixFileCon.sy) SYM(UnixFiles.sy)
SYM(Random.sy):
$(lib)(Random.o): SYM(Random.sy) ./SYM(SysProcess.sy)
SYM(Resolver.sy): ./SYM(Events.sy) ./SYM(RelatedEven.sy) SYM(Internet.sy)
$(lib)(Resolver.o): ./SYM(ASCII.sy) ./SYM(Events.sy) ./SYM(Priorities.sy) \
		./SYM(RelatedEven.sy) ./SYM(Sets.sy) ./SYM(SysHost.sy) \
		./SYM(Streams.sy) ./SYM(Comments.sy) ./SYM(Print.sy) \
		./SYM(Read.sy) ./SYM(Scan.sy) ./SYM(StreamDisci.sy) \
		./SYM(Strings.sy) ./SYM(SysConversi.sy) SYM(Internet.sy) \
		SYM(Resolver.sy) SYM(UnixFiles.sy) SYM(UnixPipes.sy) \
		./SYM(Write.sy)
SYM(SMStreams.sy): ./SYM(Events.sy) ./SYM(RelatedEven.sy) ./SYM(Streams.sy) \
		./SYM(SysTypes.sy) ./SYM(Conditions.sy) ./SYM(Networks.sy)
$(lib)(SMStreams.o): ./SYM(Objects.sy) ./SYM(Disciplines.sy) ./SYM(Events.sy) \
		./SYM(Priorities.sy) ./SYM(RelatedEven.sy) \
		./SYM(Assertions.sy) ./SYM(Memory.sy) ./SYM(Streams.sy) \
		./SYM(NetIO.sy) ./SYM(PersistentO.sy) ./SYM(Strings.sy) \
		./SYM(SysTypes.sy) ./SYM(SysIO.sy) ./SYM(SysMemory.sy) \
		./SYM(SysSignals.sy) ./SYM(SysProcess.sy) ./SYM(SysStat.sy) \
		./SYM(SysFile.sy) ./SYM(Times.sy) ./SYM(Clocks.sy) \
		./SYM(Conditions.sy) ./SYM(Networks.sy) SYM(SMStreams.sy) \
		./SYM(Semaphores.sy) ./SYM(LocalSemaph.sy) \
		./SYM(StreamCondi.sy) ./SYM(Tasks.sy) ./SYM(TimeConditi.sy) \
		./SYM(Timers.sy) ./SYM(Write.sy)
SYM(ScanDir.sy): ./SYM(Streams.sy)
$(lib)(ScanDir.o): ./SYM(Lists.sy) ./SYM(RelatedEven.sy) ./SYM(Sets.sy) \
		./SYM(Streams.sy) SYM(ScanDir.sy) ./SYM(StreamDisci.sy) \
		./SYM(Strings.sy) ./SYM(SysStat.sy) ./SYM(Texts.sy) \
		SYM(UnixDirecto.sy) ./SYM(Write.sy)
SYM(UnixArchive.sy): ./SYM(Events.sy) ./SYM(RelatedEven.sy) ./SYM(Streams.sy) \
		./SYM(SysTypes.sy)
$(lib)(UnixArchive.o): ./SYM(ASCII.sy) ./SYM(Events.sy) ./SYM(Priorities.sy) \
		./SYM(RelatedEven.sy) ./SYM(Streams.sy) ./SYM(Read.sy) \
		./SYM(Scan.sy) ./SYM(Strings.sy) ./SYM(SysTypes.sy) \
		./SYM(Texts.sy) SYM(UnixArchive.sy) SYM(UnixFiles.sy)
SYM(UnixArgList.sy): ./SYM(SysArgs.sy) ./SYM(Streams.sy)
$(lib)(UnixArgList.o): ./SYM(SysArgs.sy) ./SYM(Streams.sy) ./SYM(SysTypes.sy) \
		./SYM(Texts.sy) SYM(UnixArgList.sy) ./SYM(UntaggedSto.sy)
SYM(UnixArgumen.sy): ./SYM(Streams.sy)
$(lib)(UnixArgumen.o): ./SYM(Process.sy) ./SYM(SysArgs.sy) ./SYM(Streams.sy) \
		./SYM(Read.sy) ./SYM(Strings.sy) ./SYM(Texts.sy) \
		SYM(UnixArgumen.sy) ./SYM(Write.sy)
SYM(UnixClock.sy):
$(lib)(UnixClock.o): ./SYM(Events.sy) ./SYM(Priorities.sy) \
		./SYM(Operations.sy) ./SYM(SysTypes.sy) ./SYM(SysSignals.sy) \
		./SYM(SysTime.sy) ./SYM(Times.sy) ./SYM(Clocks.sy) \
		SYM(UnixClock.sy)
SYM(UnixDirecto.sy): ./SYM(Events.sy) ./SYM(RelatedEven.sy) ./SYM(Streams.sy)
$(lib)(UnixDirecto.o): ./SYM(Events.sy) ./SYM(Priorities.sy) \
		./SYM(RelatedEven.sy) ./SYM(Assertions.sy) ./SYM(Sys.sy) \
		./SYM(SysErrors.sy) ./SYM(Streams.sy) ./SYM(Strings.sy) \
		./SYM(SysConversi.sy) ./SYM(SysIO.sy) SYM(UnixDirecto.sy)
SYM(UnixDomainS.sy): ./SYM(Disciplines.sy) ./SYM(RelatedEven.sy) \
		./SYM(Streams.sy) ./SYM(Conditions.sy) ./SYM(Networks.sy)
$(lib)(UnixDomainS.o): ./SYM(Disciplines.sy) ./SYM(Events.sy) \
		./SYM(Process.sy) ./SYM(RelatedEven.sy) ./SYM(Streams.sy) \
		./SYM(NetIO.sy) ./SYM(PersistentO.sy) ./SYM(Strings.sy) \
		./SYM(SysTypes.sy) ./SYM(SysConversi.sy) ./SYM(SysIO.sy) \
		./SYM(SysSockets.sy) ./SYM(SysFile.sy) ./SYM(Conditions.sy) \
		./SYM(Networks.sy) ./SYM(StreamCondi.sy) SYM(UnixDomainS.sy) \
		SYM(UnixFileCon.sy) SYM(UnixFiles.sy)
SYM(UnixEnviron.sy): ./SYM(Streams.sy)
$(lib)(UnixEnviron.o): ./SYM(SysArgs.sy) ./SYM(Streams.sy) \
		SYM(UnixEnviron.sy)
SYM(UnixFileCon.sy): ./SYM(RelatedEven.sy) ./SYM(Streams.sy) \
		./SYM(SysTypes.sy) ./SYM(Conditions.sy) ./SYM(StreamCondi.sy)
$(lib)(UnixFileCon.o): ./SYM(RelatedEven.sy) ./SYM(Streams.sy) \
		./SYM(Operations.sy) ./SYM(Scales.sy) ./SYM(SysTypes.sy) \
		./SYM(SysTime.sy) ./SYM(SysSelect.sy) ./SYM(Times.sy) \
		./SYM(Clocks.sy) ./SYM(Conditions.sy) ./SYM(StreamCondi.sy) \
		SYM(UnixFileCon.sy)
SYM(UnixFiles.sy): ./SYM(Events.sy) ./SYM(RelatedEven.sy) ./SYM(Streams.sy) \
		./SYM(SysTypes.sy)
$(lib)(UnixFiles.o): ./SYM(Events.sy) ./SYM(Priorities.sy) \
		./SYM(RelatedEven.sy) ./SYM(SysErrors.sy) ./SYM(Streams.sy) \
		./SYM(SysTypes.sy) ./SYM(SysIO.sy) ./SYM(SysSockets.sy) \
		./SYM(SysStat.sy) ./SYM(Times.sy) ./SYM(Clocks.sy) \
		./SYM(Conditions.sy) ./SYM(StreamCondi.sy) ./SYM(Tasks.sy) \
		./SYM(TimeConditi.sy) SYM(UnixFileCon.sy) SYM(UnixFiles.sy)
SYM(UnixPipes.sy): ./SYM(RelatedEven.sy) ./SYM(Streams.sy) \
		./SYM(SysProcess.sy) SYM(UnixFiles.sy)
$(lib)(UnixPipes.o): ./SYM(Events.sy) ./SYM(Priorities.sy) \
		./SYM(RelatedEven.sy) ./SYM(SysArgs.sy) ./SYM(SysErrors.sy) \
		./SYM(Types.sy) ./SYM(Streams.sy) ./SYM(SysTypes.sy) \
		./SYM(SysIO.sy) ./SYM(SysSignals.sy) ./SYM(SysProcess.sy) \
		./SYM(Conditions.sy) ./SYM(StreamCondi.sy) ./SYM(Tasks.sy) \
		SYM(UnixArgList.sy) SYM(UnixFileCon.sy) SYM(UnixFiles.sy) \
		SYM(UnixPipes.sy) SYM(UnixWaitCon.sy) ./SYM(UntaggedSto.sy) \
		./SYM(Write.sy)
SYM(UnixProcess.sy):
$(lib)(UnixProcess.o): ./SYM(Process.sy) ./SYM(SysProcess.sy) \
		SYM(UnixArgumen.sy) SYM(UnixProcess.sy)
SYM(UnixWaitCon.sy): ./SYM(SysProcess.sy) ./SYM(Conditions.sy)
$(lib)(UnixWaitCon.o): ./SYM(Events.sy) ./SYM(Priorities.sy) \
		./SYM(RelatedEven.sy) ./SYM(SysSignals.sy) \
		./SYM(SysProcess.sy) ./SYM(Times.sy) ./SYM(Conditions.sy) \
		./SYM(Semaphores.sy) ./SYM(LocalSemaph.sy) ./SYM(Tasks.sy) \
		SYM(UnixWaitCon.sy)
# {reversed-dependencies}
D_Internet :=	'SYM(Resolver.sy)' '$(lib)(Resolver.o)'
D_Random :=
D_Resolver :=
D_SMStreams :=
D_ScanDir :=
D_UnixArchive :=
D_UnixArgList := '$(lib)(UnixPipes.o)'
D_UnixArgumen := '$(lib)(UnixProcess.o)'
D_UnixClock :=
D_UnixDirecto := '$(lib)(ScanDir.o)'
D_UnixDomainS :=
D_UnixEnviron :=
D_UnixFileCon := '$(lib)(Internet.o)' '$(lib)(UnixDomainS.o)' \
		'$(lib)(UnixFiles.o)' '$(lib)(UnixPipes.o)'
D_UnixFiles :=	'$(lib)(Internet.o)' '$(lib)(Resolver.o)' \
		'$(lib)(UnixArchive.o)' '$(lib)(UnixDomainS.o)' \
		'SYM(UnixPipes.sy)' '$(lib)(UnixPipes.o)'
D_UnixPipes :=	'$(lib)(Resolver.o)'
D_UnixProcess :=
D_UnixWaitCon := '$(lib)(UnixPipes.o)'
# -----------------------------------------------------------------------------
.PHONY:		install
install:	$(LIBDIR)/$(lib) $(LIBDIR)/REF $(LIBDIR)/SYM

$(LIBDIR)/$(lib): $(lib)
		cp $^ $@
		ranlib -t $@
$(LIBDIR)/REF:	REF
		cp $^ $@
$(LIBDIR)/SYM:	SYM
		cp $^ $@
# -----------------------------------------------------------------------------
.PHONY:		clean
clean:
		$(RM) core PROT PROT.line *.ts
# -----------------------------------------------------------------------------
PR :=		mp -l
SPOOL :=	lpr
.PHONY:		prdefs prmods pr
pr:		prdefs prmods
prdefs:		prdefs.stamp
prmods:		prmods.stamp
prdefs.stamp:	$(defs)
		$(PR) $? | $(SPOOL)
		@-touch $@
prmods.stamp:	$(mods)
		$(PR) $? | $(SPOOL)
		@-touch $@
# -----------------------------------------------------------------------------
OBTAGS :=	obtags
tags:		$(mods)
		$(OBTAGS) $^
# -----------------------------------------------------------------------------
