# Targets:
#
# gmake release
#   makes the libaldor.al library with the .ao files (release)
#
# gmake debug
#   makes the libaldord.al library with the .ao files (debug)
#
# gmake doc
#   extracts all the .tex files from the sources
#
# gmake test
#   extracts all the test files from the sources

# gmake extract
#   makes the extract executable
#
# gmake aldoc2html
#   makes the aldoc2html executable
#
# External variables:
# ALDORLIBROOT: Root directory of libaldor

COMPILER=aldor
ALDOR=$(COMPILER)
MAKEFILE=NMakefile
MSGFLAGS = -Mno-mactext -M2
AFLAGS=  -fao $(MSGFLAGS) -Y $(LibDir) -I $(IncDir)
AOFLAGS=$(AFLAGS) -q5 -qinline-all
AODFLAGS=$(AFLAGS) -q1 -dDEBUG
ARREPLFLAGS  = rv

DocDir  = $(ALDORLIBROOT)\doc\tex
TestDir = $(ALDORLIBROOT)\test
LibDir  = $(ALDORLIBROOT)\lib
IncDir  = $(ALDORLIBROOT)\include

ALDORLIB=$(LibDir)\$(AldorLibName)

.SUFFIXES: .ao .as

# Implicit rule for building .al file
.as.ao: 
	echo "Compiling $*.as ..."
	$(ALDOR) $(MAKEDIR)\$*
	uniar r $(ALDORLIB) $@
	del $@

# Various default values
AldorLibName=libaldor

# All directories that require building	
DIRS =  lang base arith datastruc gmp util

TESTTARGS  = $(DIRS:%=%.test)
DOCTARGS   = $(DIRS:%=%.doc)
AOTARGS    = lang.aobj base.aobj arith.aobj datastruc.aobj gmp.aobj util.aobj
OBJTARGS   = $(DIRS:%=%.objects)
CLEANTARGS = $(DIRS:%=%.clean)

aldoc2html: flags.o aldoc2html.c
	$(CC) $(CFLAGS) -Fealdoc2html.exe aldoc2html.c flags.o

extract: flags.o extract.c
	$(CC) -Feextract.exe extract.c flags.o

flags.o: flags.c flags.h
	$(CC) -c flags.c

release:
	$(MAKE) -nologo -f$(MAKEFILE) AldorLibName=$(AldorLibName).al FLAGS="$(AOFLAGS)" aobj0

debug:
	$(MAKE) -nologo -f$(MAKEFILE) AldorLibName=$(AldorLibName)d.al FLAGS="$(AODFLAGS)" aobj0

doc: $(DOCTARGS)

test: $(TESTTARGS)

clean: $(CLEANTARGS)

SUBFLAGS = FLAGS="$(FLAGS)" LibDir=$(LibDir) ALDORLIBROOT=$(ALDORLIBROOT) \
	   TestDir=$(TestDir) DocDir=$(DocDir) \
           ALDORLIB=$(ALDORLIB) COMPILER=$(COMPILER)

SUBMAKE = $(MAKE) $(SUBFLAGS)

aobj0: $(AOTARGS)

%.include: $(IncDir)
	@(cd $*; $(SUBMAKE) include)

lang.aobj:
	cd lang
	$(SUBMAKE) -nologo -f$(MAKEFILE) aobj
	cd ..
base.aobj:
	cd base
	$(SUBMAKE) -nologo -f$(MAKEFILE) aobj
	cd ..
arith.aobj:
	cd arith
	$(SUBMAKE) -nologo -f$(MAKEFILE) aobj
	cd ..
datastruc.aobj:
	cd datastruc
	$(SUBMAKE) -nologo -f$(MAKEFILE) aobj
	cd ..
gmp.aobj:
	cd gmp
	$(SUBMAKE) -nologo -f$(MAKEFILE) aobj
	cd ..
util.aobj:
	cd util
	$(SUBMAKE) -nologo -f$(MAKEFILE) aobj
	cd ..

%.doc: $(DocDir)
	@(cd $*; $(SUBMAKE) doc)

%.test: $(TestDir)
	@(cd $*; $(SUBMAKE) test)

%.clean: 
	@(cd $*; $(SUBMAKE) clean)

