# -----------------------------------------------------------------------------
.SUFFIXES:
# {stamp: updated by mmo Wed Jul 20 13:22:45 MET DST 1994}
# {options: -a -A -L -P}
# -----------------------------------------------------------------------------
InstallBin :=	/usr/local/bin
InstallLib :=	/usr/local/lib/oberon
# -----------------------------------------------------------------------------
# {macros}
src :=		FileNames.od FileNames.om GenMake.od GenMake.om Imports.od \
		Imports.om ModuleDeps.od ModuleDeps.om Options.od Options.om \
		PrintMake.od PrintMake.om ScanImports.od ScanImports.om \
		ScanLibrari.od ScanLibrari.om ScanMake.od ScanMake.om \
		ScanOptions.od ScanOptions.om Setup.od Setup.om UpdateMake.od \
		UpdateMake.om
libs :=
liboptions :=	$(patsubst %,-l%,$(libs))
defs :=		$(filter %.od,$(src))
mods :=		$(filter %.om,$(src))
syms :=		$(patsubst %.od,%.sy,$(defs))
refs :=		$(patsubst %.om,%.r,$(mods))
objects :=	$(patsubst %.om,%.o,$(mods))
defsyms :=
modobjs :=
cyclesyms :=
# {targets}
C_mmo :=	Setup
T_mmo :=	mmo
T :=		$(T_mmo)
.PHONY:		all
all:		$T $(defsyms)
# {rules}
%.o:		%.r
OC :=		oc
OCFLAGS :=
NEWER :=	newer
RM :=		rm
TOUCH :=	touch
%.o:		%.om %.sy
		@$(TOUCH) $*.ts
		$(OC) $(OCFLAGS) $(liboptions) -c -u $<
		@[ -z "$(D_$*)" ] || $(NEWER) $*.ts $*.sy || $(MAKE) $(D_$*)
		@$(RM) $*.ts
%.sy %.o:	%.od
		$(OC) $(OCFLAGS) $(liboptions) -c -u $< $*.om
# {linkage}
OCLINKFLAGS :=
CL_mmo :=	Imports.sy Imports.o FileNames.sy FileNames.o Options.sy \
		Options.o PrintMake.sy PrintMake.o ScanLibrari.sy \
		ScanLibrari.o ScanImports.sy ScanImports.o ModuleDeps.sy \
		ModuleDeps.o ScanMake.sy ScanMake.o ScanOptions.sy \
		ScanOptions.o UpdateMake.sy UpdateMake.o GenMake.sy GenMake.o \
		Setup.sy Setup.o
OBJS_mmo :=	Imports.o FileNames.o Options.o PrintMake.o ScanLibrari.o \
		ScanImports.o ModuleDeps.o ScanMake.o ScanOptions.o \
		UpdateMake.o GenMake.o Setup.o
$(T_mmo):	$(CL_mmo)
		$(OC) $(OCFLAGS) $(liboptions) $(OCLINKFLAGS) -o $@ \
		$(OBJS_mmo)
# {dependencies}
FileNames.sy:
FileNames.o:	FileNames.sy
GenMake.sy:	Options.sy ModuleDeps.sy ScanMake.sy
GenMake.o:	FileNames.sy Options.sy PrintMake.sy ModuleDeps.sy \
		ScanMake.sy GenMake.sy ScanOptions.sy UpdateMake.sy
Imports.sy:
Imports.o:	Imports.sy
ModuleDeps.sy:	FileNames.sy Imports.sy ScanImports.sy
ModuleDeps.o:	FileNames.sy Imports.sy ScanImports.sy ModuleDeps.sy
Options.sy:
Options.o:	Options.sy
PrintMake.sy:
PrintMake.o:	PrintMake.sy
ScanImports.sy:	FileNames.sy Imports.sy ScanLibrari.sy
ScanImports.o:	FileNames.sy Imports.sy ScanLibrari.sy ScanImports.sy
ScanLibrari.sy:	FileNames.sy
ScanLibrari.o:	FileNames.sy ScanLibrari.sy
ScanMake.sy:
ScanMake.o:	ScanMake.sy
ScanOptions.sy:	Options.sy ScanMake.sy
ScanOptions.o:	Options.sy ScanMake.sy ScanOptions.sy
Setup.sy:
Setup.o:	Setup.sy Options.sy PrintMake.sy ScanLibrari.sy \
		ScanImports.sy ModuleDeps.sy ScanMake.sy GenMake.sy \
		ScanOptions.sy UpdateMake.sy
UpdateMake.sy:	Options.sy ModuleDeps.sy ScanMake.sy
UpdateMake.o:	Options.sy PrintMake.sy ModuleDeps.sy ScanMake.sy \
		UpdateMake.sy
# {reversed-dependencies}
D_FileNames :=	GenMake.o ModuleDeps.sy ModuleDeps.o ScanImports.sy \
		ScanImports.o ScanLibrari.sy ScanLibrari.o
D_GenMake :=	Setup.o
D_Imports :=	ModuleDeps.sy ModuleDeps.o ScanImports.sy ScanImports.o
D_ModuleDeps :=	GenMake.sy GenMake.o Setup.o UpdateMake.sy UpdateMake.o
D_Options :=	GenMake.sy GenMake.o ScanOptions.sy ScanOptions.o Setup.o \
		UpdateMake.sy UpdateMake.o
D_PrintMake :=	GenMake.o Setup.o UpdateMake.o
D_ScanImports := ModuleDeps.sy ModuleDeps.o Setup.o
D_ScanLibrari := ScanImports.sy ScanImports.o Setup.o
D_ScanMake :=	GenMake.sy GenMake.o ScanOptions.sy ScanOptions.o Setup.o \
		UpdateMake.sy UpdateMake.o
D_ScanOptions := GenMake.o Setup.o
D_Setup :=
D_UpdateMake :=	GenMake.o Setup.o
# -----------------------------------------------------------------------------
targets :=	$(patsubst %,$(InstallBin)/%,$T)
libfiles :=	mmo_proto
libtargets :=	$(patsubst %,$(InstallLib)/%,$(libfiles))

.PHONY:		install
install:	$(targets) $(InstallLib)/mmo_proto
$(targets):	$(InstallBin)/%: %
		cp $^ $@
$(libtargets):	$(InstallLib)/%: %
		cp $^ $@
# -----------------------------------------------------------------------------
.PHONY:		clean realclean
clean:
		$(RM) $(syms) $(refs) $(objects) core
realclean:	clean
		$(RM) $(T)
# -----------------------------------------------------------------------------
PR =		mp -l -o
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) $^
# -----------------------------------------------------------------------------
