#
# External variables:
# ALDORLIBROOT: Root directory of libaldor

COMPILER=aldor.exe
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

# Main directory for the sources of the library
!ifndef ALDORLIBROOT
ALDORLIBROOT=$(MAKEDIR)
!endif

# Destination directory taken from top-level Makefile
# uncomment to modify.
# GENERIC_DIR=
!ifndef GENERIC_DIR
GENERIC_DIR=$(ALDORLIBROOT)
!endif

# Directories
LibDir   = $(ALDORLIBROOT)\lib
SrcDir   = $(ALDORLIBROOT)\src
BinDir   = $(ALDORLIBROOT)\bin
IncDir   = $(ALDORLIBROOT)\include
TestDir  = $(ALDORLIBROOT)\test

DIRS = test src
CLEANTARGS = $(DIRS:%=%.clean)

DESTDIR=$(GENERIC_DIR)\lib\aldor

# ----------------------------------------------------------------
# MAIN TARGETS
# ----------------------------------------------------------------

all:
	@echo "Usage:"
	@echo "   make portable => make portable versions of the library (.al)"
	@echo "   make objects  => create binary version from portable version"
	@echo "   make library  => build both portable and binary version"

portable: cleanall init release debug gloop

objects:
	@echo "************** Make objects **************"
	$(MAKE) -f Makefile.generic LIBDIR=$(LibDir) COMPILER=$(COMPILER) objects

library: portable objects

generic: $(DESTDIR)\bin $(DESTDIR)\lib $(DESTDIR)\include $(DESTDIR)\src\util \
		portable \
		$(DESTDIR)\bin\makelibaldor.bat \
		$(DESTDIR)\lib\libaldor.al $(DESTDIR)\lib\libaldord.al \
		$(DESTDIR)\lib\aldor_gloop.ao $(DESTDIR)\lib\aldor_gloopd.ao \
		$(DESTDIR)\include\aldor.as $(DESTDIR)\include\aldorinterp.as \
		$(DESTDIR)\include\aldorio.as $(DESTDIR)\include\aldortest.as \
		$(DESTDIR)\src\util\sal_util.c $(DESTDIR)\NMakefile

$(DESTDIR)\bin\makelibaldor.bat: $(BinDir)\makelibaldor.bat
	copy $(BinDir)\makelibaldor.bat $(DESTDIR)\bin\makelibaldor.bat
$(DESTDIR)\lib\libaldor.al: $(LibDir)\libaldor.al
	copy $(LibDir)\libaldor.al $(DESTDIR)\lib
$(DESTDIR)\lib\libaldord.al: $(LibDir)\libaldord.al
	copy $(LibDir)\libaldord.al $(DESTDIR)\lib
$(DESTDIR)\lib\aldor_gloop.ao: $(LibDir)\aldor_gloop.ao
	copy $(LibDir)\aldor_gloop.ao $(DESTDIR)\lib
$(DESTDIR)\lib\aldor_gloopd.ao: $(LibDir)\aldor_gloopd.ao
	copy $(LibDir)\aldor_gloopd.ao $(DESTDIR)\lib
$(DESTDIR)\include\aldor.as: $(IncDir)\aldor.as
	copy $(IncDir)\aldor.as $(DESTDIR)\include
$(DESTDIR)\include\aldorinterp.as: $(IncDir)\aldorinterp.as
	copy $(IncDir)\aldorinterp.as $(DESTDIR)\include
$(DESTDIR)\include\aldorio.as: $(IncDir)\aldorio.as
	copy $(IncDir)\aldorio.as $(DESTDIR)\include
$(DESTDIR)\include\aldortest.as: $(IncDir)\aldortest.as
	copy $(IncDir)\aldortest.as $(DESTDIR)\include
$(DESTDIR)\src\util\sal_util.c: src\util\sal_util.c
	copy src\util\sal_util.c $(DESTDIR)\src\util
$(DESTDIR)\NMakefile: NMakefile.generic
	copy NMakefile.generic $(DESTDIR)\NMakefile

$(DESTDIR):
	@mkdir $(DESTDIR)
$(DESTDIR)\bin: $(DESTDIR)
	@mkdir $(DESTDIR)\bin
$(DESTDIR)\lib: $(DESTDIR)
	@mkdir $(DESTDIR)\lib
$(DESTDIR)\include: $(DESTDIR)
	@mkdir $(DESTDIR)\include
$(DESTDIR)\src\util: $(DESTDIR)\src
	@mkdir $(DESTDIR)\src\util
$(DESTDIR)\src: $(DESTDIR)
	@mkdir $(DESTDIR)\src

# ----------------------------------------------------------------
# CLEAN
# ----------------------------------------------------------------

clean: $(CLEANTARGS)
	@del /q *~
	-@del /q $(LibDir)\*

cleanall: clean

# ----------------------------------------------------------------
# BUILD
# ----------------------------------------------------------------

gloop:
	@echo "************** Building gloop.ao and gloopd.ao **************";
	$(ALDOR) -R $(LibDir) -I $(IncDir) -Y $(LibDir) -Q5 $(SrcDir)\aldor_gloop.as
	$(ALDOR) -R $(LibDir) -I $(IncDir) -Y $(LibDir) -Q1 -dDEBUG $(SrcDir)\aldor_gloopd.as

release:
	@echo "************** Release build **************"
	@cd $(SrcDir)
	$(MAKE) -nologo -f$(MAKEFILE) ALDORLIBROOT=$(ALDORLIBROOT) \
		GENERIC_DIR=$(GENERIC_DIR) release
	cd $(MAKEDIR)

debug:
	@echo "************** Debug build **************"
	@cd $(SrcDir)
	$(MAKE) -nologo -f$(MAKEFILE) ALDORLIBROOT=$(ALDORLIBROOT) \
		GENERIC_DIR=$(GENERIC_DIR) debug
	cd $(MAKEDIR)

runtest:
	@cd $(SrcDir)
	$(MAKE) -nologo -f$(MAKEFILE) ALDORLIBROOT=$(ALDORLIBROOT) \
		GENERIC_DIR=$(GENERIC_DIR) test
	@cd $(TestDir)
	$(MAKE) -nologo -f$(MAKEFILE) ALDORLIBROOT=$(ALDORLIBROOT) \
		GENERIC_DIR=$(GENERIC_DIR) all 
	$(MAKE) -nologo -f$(MAKEFILE) ALDORLIBROOT=$(ALDORLIBROOT) \
		GENERIC_DIR=$(GENERIC_DIR) clean
	cd $(MAKEDIR)

# ----------------------------------------------------------------
# EXTRAS
# ----------------------------------------------------------------

copydoc: $(GENERIC_DIR)\doc\libaldor\tutorial $(GENERIC_DIR)\doc\libaldor\doc \
		buildtutorial # builddoc
	copy tutorial\*.as $(GENERIC_DIR)\doc\libaldor\tutorial
	copy tutorial\tutorial.pdf $(GENERIC_DIR)\doc\libaldor\tutorial

$(GENERIC_DIR)\doc\libaldor\tutorial:
	mkdir $(GENERIC_DIR)\doc\libaldor\tutorial
$(GENERIC_DIR)\doc\libaldor\doc:
	mkdir $(GENERIC_DIR)\doc\libaldor\doc

buildtutorial:
	cd tutorial
	pdflatex tutorial.tex

# builddoc:

copytests:$(GENERIC_DIR)\tests\libaldor
	copy test\*.as $(GENERIC_DIR)\tests\libaldor
	copy test\testall $(GENERIC_DIR)\tests\libaldor
	copy test\Makefile $(GENERIC_DIR)\tests\libaldor

$(GENERIC_DIR)\tests\libaldor:
	mkdir $(GENERIC_DIR)\tests\libaldor

init: $(LibDir)

$(LibDir):
	mkdir $(LibDir)
