                # Modula-2 library
LIB	= $(HOME)/reuse/src

                # options for modula compiler
MFLAGS	= -nobounds -norange -M. -M$(LIB)

                # option to name linked program
OUT	= ; mv a.out

MD	= m2c $(MFLAGS)		# command to compile definition module
MI	= m2c $(MFLAGS)		# command to compile implementation module
MP	= m2c $(MFLAGS)		# command to compile program module
ML	= m2c $(MFLAGS) -e	# command to link program

ED	= .def	# extension for definition module
EI	= .mod	# extension for implementation module
EP	= .mod	# extension for program module
ES	= .sym	# extension for symbol file (compiled definition)
EO	= .o	# extension for object file (compiled implementation)

SD	= .def	# compiler suffix for definition module
SI	= .mod	# compiler suffix for implementation module
SP	= .mod	# compiler suffix for program module

all	:

# HEAD

Checks$(ES)	: Checks$(ED)	; $(MD) Checks$(SD)

Checks$(EO)	: Checks$(EI)	; $(MI) Checks$(SI)
Checks$(EO)	: Checks$(ES)
Checks$(EO)	: IO$(ES)
Checks$(EO)	: System$(ES)

all	: DynArrDrv
DynArrDrv$(EO)	: DynArrDrv$(EP)	; $(MP) DynArrDrv$(SP)
DynArrDrv$(EO)	: DynArray$(ES)
DynArrDrv$(EO)	: IO$(ES)

DynArray$(ES)	: DynArray$(ED)	; $(MD) DynArray$(SD)

DynArray$(EO)	: DynArray$(EI)	; $(MI) DynArray$(SI)
DynArray$(EO)	: DynArray$(ES)
DynArray$(EO)	: General$(ES)
DynArray$(EO)	: Memory$(ES)
DynArray$(EO)	: IO$(ES)

Errors$(ES)	: Errors$(ED)	; $(MD) Errors$(SD)
Errors$(ES)	: Positions$(ES)
Errors$(ES)	: IO$(ES)

Errors$(EO)	: Errors$(EI)	; $(MI) Errors$(SI)
Errors$(EO)	: Errors$(ES)
Errors$(EO)	: Memory$(ES)
Errors$(EO)	: IO$(ES)
Errors$(EO)	: Positions$(ES)
Errors$(EO)	: StringMem$(ES)
Errors$(EO)	: Strings$(ES)
Errors$(EO)	: Idents$(ES)
Errors$(EO)	: Sets$(ES)
Errors$(EO)	: Sort$(ES)
Errors$(EO)	: System$(ES)
Errors$(EO)	: Strings$(ES)

General$(ES)	: General$(ED)	; $(MD) General$(SD)

General$(EO)	: General$(EI)	; $(MI) General$(SI)
General$(EO)	: General$(ES)
General$(EO)	: System$(ES)

Heap$(ES)	: Heap$(ED)	; $(MD) Heap$(SD)

Heap$(EO)	: Heap$(EI)	; $(MI) Heap$(SI)
Heap$(EO)	: Heap$(ES)
Heap$(EO)	: General$(ES)
Heap$(EO)	: Memory$(ES)

IO$(ES)	: IO$(ED)	; $(MD) IO$(SD)
IO$(ES)	: System$(ES)

IO$(EO)	: IO$(EI)	; $(MI) IO$(SI)
IO$(EO)	: IO$(ES)
IO$(EO)	: General$(ES)
IO$(EO)	: Memory$(ES)
IO$(EO)	: System$(ES)

all	: IODrv
IODrv$(EO)	: IODrv$(EP)	; $(MP) IODrv$(SP)
IODrv$(EO)	: IO$(ES)

Idents$(ES)	: Idents$(ED)	; $(MD) Idents$(SD)
Idents$(ES)	: IO$(ES)
Idents$(ES)	: Strings$(ES)
Idents$(ES)	: StringMem$(ES)

Idents$(EO)	: Idents$(EI)	; $(MI) Idents$(SI)
Idents$(EO)	: Idents$(ES)
Idents$(EO)	: DynArray$(ES)
Idents$(EO)	: Strings$(ES)
Idents$(EO)	: StringMem$(ES)
Idents$(EO)	: IO$(ES)
Idents$(EO)	: Strings$(ES)
Idents$(EO)	: StringMem$(ES)

Layout$(ES)	: Layout$(ED)	; $(MD) Layout$(SD)
Layout$(ES)	: IO$(ES)

Layout$(EO)	: Layout$(EI)	; $(MI) Layout$(SI)
Layout$(EO)	: Layout$(ES)
Layout$(EO)	: IO$(ES)

Lists$(ES)	: Lists$(ED)	; $(MD) Lists$(SD)
Lists$(ES)	: IO$(ES)

Lists$(EO)	: Lists$(EI)	; $(MI) Lists$(SI)
Lists$(EO)	: Lists$(ES)
Lists$(EO)	: Memory$(ES)
Lists$(EO)	: IO$(ES)

all	: Main
Main$(EO)	: Main$(EP)	; $(MP) Main$(SP)
Main$(EO)	: General$(ES)
Main$(EO)	: Memory$(ES)
Main$(EO)	: Heap$(ES)
Main$(EO)	: DynArray$(ES)
Main$(EO)	: Lists$(ES)
Main$(EO)	: Strings$(ES)
Main$(EO)	: Texts$(ES)
Main$(EO)	: StringMem$(ES)
Main$(EO)	: Idents$(ES)
Main$(EO)	: Sets$(ES)
Main$(EO)	: SetsC$(ES)
Main$(EO)	: Relations$(ES)
Main$(EO)	: IO$(ES)
Main$(EO)	: StdIO$(ES)
Main$(EO)	: Layout$(ES)
Main$(EO)	: Positions$(ES)
Main$(EO)	: Errors$(ES)
Main$(EO)	: Sort$(ES)
Main$(EO)	: Source$(ES)
Main$(EO)	: System$(ES)
Main$(EO)	: Checks$(ES)
Main$(EO)	: Times$(ES)

Memory$(ES)	: Memory$(ED)	; $(MD) Memory$(SD)

Memory$(EO)	: Memory$(EI)	; $(MI) Memory$(SI)
Memory$(EO)	: Memory$(ES)
Memory$(EO)	: General$(ES)
Memory$(EO)	: System$(ES)

all	: MemoryDrv
MemoryDrv$(EO)	: MemoryDrv$(EP)	; $(MP) MemoryDrv$(SP)
MemoryDrv$(EO)	: Memory$(ES)
MemoryDrv$(EO)	: IO$(ES)

Positions$(ES)	: Positions$(ED)	; $(MD) Positions$(SD)
Positions$(ES)	: IO$(ES)

Positions$(EO)	: Positions$(EI)	; $(MI) Positions$(SI)
Positions$(EO)	: Positions$(ES)
Positions$(EO)	: IO$(ES)

all	: RelDrv
RelDrv$(EO)	: RelDrv$(EP)	; $(MP) RelDrv$(SP)
RelDrv$(EO)	: IO$(ES)
RelDrv$(EO)	: Sets$(ES)
RelDrv$(EO)	: Relations$(ES)

Relations$(ES)	: Relations$(ED)	; $(MD) Relations$(SD)
Relations$(ES)	: IO$(ES)
Relations$(ES)	: Sets$(ES)

Relations$(EO)	: Relations$(EI)	; $(MI) Relations$(SI)
Relations$(EO)	: Relations$(ES)
Relations$(EO)	: IO$(ES)
Relations$(EO)	: DynArray$(ES)
Relations$(EO)	: Sets$(ES)
Relations$(EO)	: Sets$(ES)

Sets$(ES)	: Sets$(ED)	; $(MD) Sets$(SD)
Sets$(ES)	: IO$(ES)

Sets$(EO)	: Sets$(EI)	; $(MI) Sets$(SI)
Sets$(EO)	: Sets$(ES)
Sets$(EO)	: General$(ES)
Sets$(EO)	: DynArray$(ES)
Sets$(EO)	: IO$(ES)

SetsC$(ES)	: SetsC$(ED)	; $(MD) SetsC$(SD)
SetsC$(ES)	: IO$(ES)
SetsC$(ES)	: Sets$(ES)

SetsC$(EO)	: SetsC$(EI)	; $(MI) SetsC$(SI)
SetsC$(EO)	: SetsC$(ES)
SetsC$(EO)	: Sets$(ES)
SetsC$(EO)	: IO$(ES)

all	: SetsDrv
SetsDrv$(EO)	: SetsDrv$(EP)	; $(MP) SetsDrv$(SP)
SetsDrv$(EO)	: Sets$(ES)
SetsDrv$(EO)	: IO$(ES)

Sort$(ES)	: Sort$(ED)	; $(MD) Sort$(SD)

Sort$(EO)	: Sort$(EI)	; $(MI) Sort$(SI)
Sort$(EO)	: Sort$(ES)

Source$(ES)	: Source$(ED)	; $(MD) Source$(SD)
Source$(ES)	: System$(ES)

Source$(EO)	: Source$(EI)	; $(MI) Source$(SI)
Source$(EO)	: Source$(ES)
Source$(EO)	: System$(ES)

StdIO$(ES)	: StdIO$(ED)	; $(MD) StdIO$(SD)

StdIO$(EO)	: StdIO$(EI)	; $(MI) StdIO$(SI)
StdIO$(EO)	: StdIO$(ES)
StdIO$(EO)	: IO$(ES)
StdIO$(EO)	: IO$(ES)

StringMem$(ES)	: StringMem$(ED)	; $(MD) StringMem$(SD)
StringMem$(ES)	: IO$(ES)
StringMem$(ES)	: Strings$(ES)

StringMem$(EO)	: StringMem$(EI)	; $(MI) StringMem$(SI)
StringMem$(EO)	: StringMem$(ES)
StringMem$(EO)	: DynArray$(ES)
StringMem$(EO)	: Strings$(ES)
StringMem$(EO)	: IO$(ES)

Strings$(ES)	: Strings$(ED)	; $(MD) Strings$(SD)
Strings$(ES)	: IO$(ES)

Strings$(EO)	: Strings$(EI)	; $(MI) Strings$(SI)
Strings$(EO)	: Strings$(ES)
Strings$(EO)	: General$(ES)
Strings$(EO)	: IO$(ES)
Strings$(EO)	: IO$(ES)

all	: SysIODrv
SysIODrv$(EO)	: SysIODrv$(EP)	; $(MP) SysIODrv$(SP)
SysIODrv$(EO)	: System$(ES)
SysIODrv$(EO)	: Checks$(ES)

Texts$(ES)	: Texts$(ED)	; $(MD) Texts$(SD)
Texts$(ES)	: IO$(ES)
Texts$(ES)	: Lists$(ES)
Texts$(ES)	: Strings$(ES)

Texts$(EO)	: Texts$(EI)	; $(MI) Texts$(SI)
Texts$(EO)	: Texts$(ES)
Texts$(EO)	: IO$(ES)
Texts$(EO)	: Lists$(ES)
Texts$(EO)	: Strings$(ES)
Texts$(EO)	: StringMem$(ES)
Texts$(EO)	: Lists$(ES)

Times$(ES)	: Times$(ED)	; $(MD) Times$(SD)

Times$(EO)	: Times$(EI)	; $(MI) Times$(SI)
Times$(EO)	: Times$(ES)
Times$(EO)	: System$(ES)
Times$(EO)	: IO$(ES)

DynArrDrv	: DynArrDrv$(EO) IO$(EO) Memory$(EO) General$(EO) DynArray$(EO)	; $(ML) DynArrDrv $(OUT) DynArrDrv

IODrv	: IODrv$(EO) IO$(EO) Memory$(EO) General$(EO)	; $(ML) IODrv $(OUT) IODrv

Main	: Main$(EO) Times$(EO) IO$(EO) Memory$(EO) General$(EO) Checks$(EO) Source$(EO) Sort$(EO) Errors$(EO) Strings$(EO) Sets$(EO) DynArray$(EO) Idents$(EO) StringMem$(EO) Positions$(EO) Layout$(EO) StdIO$(EO) Relations$(EO) SetsC$(EO) Texts$(EO) Lists$(EO) Heap$(EO)	; $(ML) Main $(OUT) Main

MemoryDrv	: MemoryDrv$(EO) IO$(EO) Memory$(EO) General$(EO)	; $(ML) MemoryDrv $(OUT) MemoryDrv

RelDrv	: RelDrv$(EO) Relations$(EO) Sets$(EO) IO$(EO) Memory$(EO) General$(EO) DynArray$(EO)	; $(ML) RelDrv $(OUT) RelDrv

SetsDrv	: SetsDrv$(EO) IO$(EO) Memory$(EO) General$(EO) Sets$(EO) DynArray$(EO)	; $(ML) SetsDrv $(OUT) SetsDrv

SysIODrv	: SysIODrv$(EO) Checks$(EO) IO$(EO) Memory$(EO) General$(EO)	; $(ML) SysIODrv $(OUT) SysIODrv

# TAIL

# CLEAN	:	; rm -f core *.[dimor] ERRORS LISTING
CLEAN	:	; rm -f core *.sym *.o
