##############################################################################
#
# NMakefile
#
# NMAKE compatible make program to build the Demo library.
#
# Copyright (c) 1990-2007 Aldor Software Organization Ltd (Aldor.org).
#
##############################################################################
#
# Targets: all, junk, clean, quick
#
#    make all	-- make the demo library for the AXIOM-XL compiler
#    make junk	-- list files which are not part of the AXIOM-XL compiler
#    make clean -- remove generated files  (e.g. foo.c~)
#
# Parameters:  AXIOMXLROOT
#
#    To override defaults do, e.g.,
#	 make -e AXIOMXLROOT=\spad\local\aldor\rs all
#    or
#	 setenv AXIOMXLROOT \spad\local\aldor\rs; setenv MAKEFLAGS e; make all
#
##############################################################################

#
# Environment
#
# $(ALDORROOT) is retrieved from the environment
IncDir	= $(ALDORROOT)\include
LibDir	= $(ALDORROOT)\lib
BinDir	= $(ALDORROOT)\bin
ToolDir = $(ALDORROOT)\toolbin
SamDir	= $(ALDORROOT)\samples\libaxldem

DOAXIOMXL=$(ToolDir)\doaldor.bat
LAXLLIB	= $(LibDir)\libaxllib.al
LAXLDEM	= $(LibDir)\libaxldem.al
LOBDEM	= $(LibDir)\libaxldem.lib

AXLCDB	= -W check # -Fc -Cargs:-g
AXLFLAGS= $(AXLCDB)

RM	= del
CP	= copy

#
# Source lists
#
Sources	= prime.as polycat.as poly.as random.as ibits.as lmdict.as \
	  spf.as dirprod.as gb.as nni.as vector.as quanc8.as \
	  matrix.as matopdom.as axldem.as
Lists	= axldem.lst

Includes = axldem.as

#
# Object lists
#
Aos   	= $(LAXLDEM)(prime.ao)		\
	  $(LAXLDEM)(polycat.ao)	\
	  $(LAXLDEM)(poly.ao)		\
	  $(LAXLDEM)(random.ao)		\
	  $(LAXLDEM)(ibits.ao)		\
	  $(LAXLDEM)(lmdict.ao)		\
	  $(LAXLDEM)(spf.ao)		\
	  $(LAXLDEM)(dirprod.ao)	\
	  $(LAXLDEM)(gb.ao)		\
	  $(LAXLDEM)(nni.ao)		\
	  $(LAXLDEM)(vector.ao)		\
	  $(LAXLDEM)(quanc8.ao)		\
	  $(LAXLDEM)(matrix.ao)		\
	  $(LAXLDEM)(matopdom.ao)

Objects	= $(LOBDEM)(prime.obj)		\
	  $(LOBDEM)(polycat.obj)	\
	  $(LOBDEM)(poly.obj)		\
	  $(LOBDEM)(random.obj)		\
	  $(LOBDEM)(ibits.obj)		\
	  $(LOBDEM)(lmdict.obj)		\
	  $(LOBDEM)(spf.obj)		\
	  $(LOBDEM)(dirprod.obj)	\
	  $(LOBDEM)(gb.obj)		\
	  $(LOBDEM)(nni.obj)		\
	  $(LOBDEM)(vector.obj)		\
	  $(LOBDEM)(quanc8.obj)		\
	  $(LOBDEM)(matrix.obj)		\
	  $(LOBDEM)(matopdom.obj)

#
# Target lists
#
LibTargs = $(LAXLDEM) $(LOBDEM)

IncTargs = $(IncDir)\axldem.as
.PRECIOUS: $(LibTargs)

#
# Generic targets
#
OKFILES	 = Makefile NMakefile $(Lists) $(Sources)

#all:	$(Lists) $(LibTargs) $(IncTargs) 
all:	$(LAXLDEM) $(IncTargs) 

junk:
	@ ls -d $(OKFILES) * | sort | uniq -u

clean:
	@ $(RM) *~

libclean:
	@ $(RM) $(LAXLDEM) $(LOBDEM)

lists:		$(Lists)
libaxldem:	$(LAXLDEM) $(LOBDEM)

#
# Samples
#
samples:	$(SamDir) $(Sources)
	@echon "Copying samples..."
	@for f in $(Sources) ; do \
		$(CP) $$f $(SamDir) ; done
	@echo "done"

include:	$(IncTargs)

$(SamDir):
	@echo "Making directory $(SamDir)."
	@mkdir $(SamDir)

#
# General dependencies
#
$(Objects) $(Aos):	$(LAXLLIB)

incaxllib    $(IncDir)\axldem.as:	   axldem.as
	$(CP) axldem.as	$(IncDir)\axldem.as

# The doranlib dependency ensures that doranlib gets called.
$(LAXLDEM):  $(Aos)    doranlib
	@ echo doranlib $@
$(LOBDEM):  $(Objects) doranlib
	@ doranlib $@

doranlib:
	@ $(BinDir)\echon

#
# Actually make stuff
#
axldem.lst: Makefile
	@echon "Making axldem.lst..."
	@(for f in $(Sources) ; do echo $$f ; done) | \
		sed -e 's/\.as//' > axldem.lst
	@echo "done"

prime $(LOBDEM)(prime.obj) $(LAXLDEM)(prime.ao): prime.as
	@$(DOAXIOMXL) prime axldem $(AXLFLAGS) -Q inline-limit:2

polycat $(LOBDEM)(polycat.obj) $(LAXLDEM)(polycat.ao): polycat.as
	@$(DOAXIOMXL) polycat axldem $(AXLFLAGS)

poly $(LOBDEM)(poly.obj) $(LAXLDEM)(poly.ao): poly.as
	@$(DOAXIOMXL) poly axldem $(AXLFLAGS) -laxldem

random $(LOBDEM)(random.obj) $(LAXLDEM)(random.ao): random.as
	@$(DOAXIOMXL) random axldem $(AXLFLAGS)

ibits $(LOBDEM)(ibits.obj) $(LAXLDEM)(ibits.ao): ibits.as
	@$(DOAXIOMXL) ibits axldem $(AXLFLAGS)

lmdict $(LOBDEM)(lmdict.obj) $(LAXLDEM)(lmdict.ao): lmdict.as
	@$(DOAXIOMXL) lmdict axldem $(AXLFLAGS)

spf $(LOBDEM)(spf.obj) $(LAXLDEM)(spf.ao): spf.as
	@$(DOAXIOMXL) spf axldem $(AXLFLAGS)

dirprod $(LOBDEM)(dirprod.obj) $(LAXLDEM)(dirprod.ao): dirprod.as
	@$(DOAXIOMXL) dirprod axldem $(AXLFLAGS) -laxldem

gb $(LOBDEM)(gb.obj) $(LAXLDEM)(gb.ao): gb.as
	@$(DOAXIOMXL) gb axldem $(AXLFLAGS) -laxldem -Q inline-limit:5

nni $(LOBDEM)(nni.obj) $(LAXLDEM)(nni.ao): nni.as
	@$(DOAXIOMXL) nni axldem $(AXLFLAGS)

vector $(LOBDEM)(vector.obj) $(LAXLDEM)(vector.ao): vector.as
	@$(DOAXIOMXL) vector axldem $(AXLFLAGS)

quanc8 $(LOBDEM)(quanc8.obj) $(LAXLDEM)(quanc8.ao): quanc8.as
	@$(DOAXIOMXL) quanc8 axldem $(AXLFLAGS)

matrix $(LOBDEM)(matrix.obj) $(LAXLDEM)(matrix.ao): matrix.as
	@$(DOAXIOMXL) matrix axldem $(AXLFLAGS)

matopfld $(LOBDEM)(matopfld.obj) $(LAXLDEM)(matopfld.ao): matopfld.as
	@$(DOAXIOMXL) matopfld axldem $(AXLFLAGS)

matopdom $(LOBDEM)(matopdom.obj) $(LAXLDEM)(matopdom.ao): matopdom.as
	@$(DOAXIOMXL) matopdom axldem $(AXLFLAGS)
