##############################################################################
#
# NMakefile
#
# Make program to compile the Foam runtime (frisco) files
#
# Copyright (c) 1990-2007 Aldor Software Organization Ltd (Aldor.org).
#
#
##############################################################################
#
# Targets: all, junk, clean, quick
#
#    make all	-- make the runtime files 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:  ALDORROOT
#
#    To override defaults do, e.g.,
#	 make -e ALDORROOT=/spad/local/axiomxl/rs all
#    or
#	 setenv ALDORROOT /spad/local/axiomxl/rs; setenv MAKEFLAGS e; make all
#
##############################################################################
#
# We do not use the compiler archive since these files may be compiled
# with different options, or different compilers.
#
##############################################################################

MAKE = nmake /f NMakefile /nologo /x -

SHELL	= /bin/sh
AR	= uniar rv
CP	= copy
LN	= copy
RM	= del /q
LIB = lib /nologo

#ifeq "$(findstring sun4os57g,$(MACHINE))" "sun4os57g"
#  CCPROG=docc
#else
#  CCPROG=unicl -Wstdc $(UNICLARGS)
#endif 
#
#ifeq "$(findstring rs,$(MACHINE))" "rs"
#  CARSCRIPT=aldor.car.bsh
#else
#  CARSCRIPT=aldor.car.sh
#endif 
CCPROG = unicl $(UNICLARGS)
CARSCRIPT=aldor-car.bat

CPPFLAGS = -DNDEBUG -DFOAM_RTS
CPPPROG  = unicl $(CPPARGS)

#ifeq "$(SYS)" ""
# SYSARG=
#else
# SYSARG=-Wsys=$(SYS)
#endif 
CFLAGS  = -O -DNDEBUG -DFOAM_RTS $(SYSARG)


#
# Environment
#

IncDir	= $(ALDORROOT)\include
LibDir	= $(ALDORROOT)\lib
BinDir  = $(ALDORROOT)\bin

SRC     =..\..\..\src
PWD		=$(MAKEDIR) 
CmmDir  =..\cmm

LIBFOAMAL= $(LibDir)\libfoam.al
LIBFOAM	= $(LibDir)\libfoam-car.lib
BUILDARG = $(ALDORROOT)\toolbin\buildarg
ALDOR	 = $(ALDORROOT)\bin\aldor -fo -Csmax=0 
ALDORARGS = -O

#GmpDir	= \users\axiom\gmp\gmp-3.1.1
GmpDir	= C:\gmp-3.1.1

#
# Files from compiler sources
#

PORTH0        = axlport.h  platform.h cconfig.h optcfg.h foamopt.h compopt.h
STDCH0        = assert.h0 ctype.h0 errno.h0  float.h0  limits.h0 \
		locale.h0 math.h0  setjmp.h0 signal.h0 stdarg.h0 \
		stddef.h0 stdio.h0 stdlib.h0 string.h0 time.h0 unistd.h0

OPSYSH0       = os_cms.c os_dos.c os_os2.c os_unix.c os_vms.c \
		os_macs7.c os_win32.c
FOAMHX        =	axlgen.h axlgen0.h debug.h fluid.h format.h test.h \
		bigint.h editlevels.h

FOAMC	      = stdc.c   cport.c   	\
		opsys.c  btree.c 	\
		util.c   foam_c.c foam_cfp.c 	\
		output.c table.c 	\
		xfloat.c foamopt.c 	\
		dword.c  compopt.c 	

FOAMCC 	      =	plbint.cc 
LOCALH	      = plbint.h store.h

FOAMH         = $(PORTH0) $(STDCH0) $(OPSYSH0)  \
		$(FOAMC:.c=.h) $(FOAMHX) 

COMMONFILES   = $(FOAMH) $(FOAMC)
OKFILES       = Makefile aldor.car $(FOAMCC) $(LOCALH) $(COMMONFILES)

OBJECTS       = $(LIBFOAM)(stdc.obj)   $(LIBFOAM)(cport.obj)   \
		$(LIBFOAM)(opsys.obj)  $(LIBFOAM)(btree.obj)   \
		$(LIBFOAM)(util.obj)   $(LIBFOAM)(foam_c.obj) $(LIBFOAM)(foam_cfp.obj)  \
		$(LIBFOAM)(output.obj) $(LIBFOAM)(table.obj)   \
		$(LIBFOAM)(xfloat.obj) $(LIBFOAM)(foamopt.obj) \
		$(LIBFOAM)(dword.obj)  $(LIBFOAM)(compopt.obj) \
		$(LIBFOAM)(runtime.obj)			   \
		$(LIBFOAM)(plbint.obj)

# General Rules

all: .cvsignore library script

clean: 
	@ $(RM) *~

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

library: $(COMMONFILES) $(LIBFOAM)

script: $(ALDORROOT)\bin\aldor-car.bat

$(ALDORROOT)\bin\aldor-car.bat: $(PWD)\aldor-car.bat
	$(CP) $(PWD)\$(CARSCRIPT) $@
	rem chmod 0777 $@

.cvsignore: Makefile
	echo .cvsignore $(COMMONFILES) > .cvsignore
#
# Rules to get the common source files (as links or copies)
#
axlport.h:	$(SRC)\axlport.h 
	$(RM) $@
	$(LN) $? $@
platform.h:	$(SRC)\platform.h 
	$(RM) $@
	$(LN) $? $@
cconfig.h:	$(SRC)\cconfig.h 
	$(RM) $@
	$(LN) $? $@

assert.h0:	$(SRC)\assert.h0 
	$(RM) $@
	$(LN) $? $@
ctype.h0:	$(SRC)\ctype.h0 
	$(RM) $@
	$(LN) $? $@
errno.h0:	$(SRC)\errno.h0 
	$(RM) $@
	$(LN) $? $@
float.h0:	$(SRC)\float.h0 
	$(RM) $@
	$(LN) $? $@
limits.h0:	$(SRC)\limits.h0 
	$(RM) $@
	$(LN) $? $@
locale.h0:	$(SRC)\locale.h0 
	$(RM) $@
	$(LN) $? $@
math.h0:	$(SRC)\math.h0 
	$(RM) $@
	$(LN) $? $@
setjmp.h0:	$(SRC)\setjmp.h0 
	$(RM) $@
	$(LN) $? $@
signal.h0:	$(SRC)\signal.h0 
	$(RM) $@
	$(LN) $? $@
stdarg.h0:	$(SRC)\stdarg.h0 
	$(RM) $@
	$(LN) $? $@
stddef.h0:	$(SRC)\stddef.h0 
	$(RM) $@
	$(LN) $? $@
stdio.h0:	$(SRC)\stdio.h0 
	$(RM) $@
	$(LN) $? $@
stdlib.h0:	$(SRC)\stdlib.h0 
	$(RM) $@
	$(LN) $? $@
string.h0:	$(SRC)\string.h0 
	$(RM) $@
	$(LN) $? $@
time.h0:	$(SRC)\time.h0 
	$(RM) $@
	$(LN) $? $@
unistd.h0:	$(SRC)\unistd.h0 
	$(RM) $@
	$(LN) $? $@

os_cms.c:	$(SRC)\os_cms.c 
	$(RM) $@
	$(LN) $? $@
os_dos.c:	$(SRC)\os_dos.c 
	$(RM) $@
	$(LN) $? $@
os_os2.c:	$(SRC)\os_os2.c 
	$(RM) $@
	$(LN) $? $@
os_unix.c:	$(SRC)\os_unix.c 
	$(RM) $@
	$(LN) $? $@
os_vms.c:	$(SRC)\os_vms.c 
	$(RM) $@
	$(LN) $? $@
os_macs7.c:	$(SRC)\os_macs7.c 
	$(RM) $@
	$(LN) $? $@
os_win32.c:	$(SRC)\os_win32.c 
	$(RM) $@
	$(LN) $? $@

axlgen.h:	$(SRC)\axlgen.h 
	$(RM) $@
	$(LN) $? $@
editlevels.h:	$(SRC)\editlevels.h 
	$(RM) $@
	$(LN) $? $@
axlgen0.h:	$(SRC)\axlgen0.h 
	$(RM) $@
	$(LN) $? $@
debug.h:	$(SRC)\debug.h 
	$(RM) $@
	$(LN) $? $@
fluid.h:	$(SRC)\fluid.h 
	$(RM) $@
	$(LN) $? $@
format.h:	$(SRC)\format.h 
	$(RM) $@
	$(LN) $? $@
test.h: 	$(SRC)\test.h 
	$(RM) $@
	$(LN) $? $@

stdc.h: 	$(SRC)\stdc.h 
	$(RM) $@
	$(LN) $? $@
cport.h:	$(SRC)\cport.h 
	$(RM) $@
	$(LN) $? $@
opsys.h:	$(SRC)\opsys.h 
	$(RM) $@
	$(LN) $? $@
btree.h:	$(SRC)\btree.h 
	$(RM) $@
	$(LN) $? $@
bigint.h:	$(SRC)\bigint.h 
	$(RM) $@
	$(LN) $? $@
dword.h:	$(SRC)\dword.h 
	$(RM) $@
	$(LN) $? $@
util.h: 	$(SRC)\util.h 
	$(RM) $@
	$(LN) $? $@
table.h: 	$(SRC)\table.h 
	$(RM) $@
	$(LN) $? $@
xfloat.h: 	$(SRC)\xfloat.h 
	$(RM) $@
	$(LN) $? $@

stdc.c: 	$(SRC)\stdc.c 
	$(RM) $@
	$(LN) $? $@
cport.c:	$(SRC)\cport.c 
	$(RM) $@
	$(LN) $? $@
opsys.c:	$(SRC)\opsys.c 
	$(RM) $@
	$(LN) $? $@
btree.c:	$(SRC)\btree.c 
	$(RM) $@
	$(LN) $? $@
bigint.c:	$(SRC)\bigint.c 
	$(RM) $@
	$(LN) $? $@
dword.c:	$(SRC)\dword.c 
	$(RM) $@
	$(LN) $? $@
util.c: 	$(SRC)\util.c 
	$(RM) $@
	$(LN) $? $@
table.c: 	$(SRC)\table.c 
	$(RM) $@
	$(LN) $? $@
xfloat.c: 	$(SRC)\xfloat.c 
	$(RM) $@
	$(LN) $? $@

foam_c.h: 	$(SRC)\foam_c.h 
	$(RM) $@
	$(LN) $? $@
foam_cfp.h: 	$(SRC)\foam_cfp.h 
	$(RM) $@
	$(LN) $? $@
foamopt.h: 	$(SRC)\foamopt.h 
	$(RM) $@
	$(LN) $? $@
compopt.h: 	$(SRC)\compopt.h 
	$(RM) $@
	$(LN) $? $@
optcfg.h: 	$(SRC)\optcfg.h 
	$(RM) $@
	$(LN) $? $@
output.h: 	$(SRC)\output.h 
	$(RM) $@
	$(LN) $? $@

foam_c.c: 	$(SRC)\foam_c.c 
	$(RM) $@
	$(LN) $? $@
foam_cfp.c: 	$(SRC)\foam_cfp.c 
	$(RM) $@
	$(LN) $? $@
foamopt.c: 	$(SRC)\foamopt.c 
	$(RM) $@
	$(LN) $? $@
compopt.c: 	$(SRC)\compopt.c 
	$(RM) $@
	$(LN) $? $@
output.c: 	$(SRC)\output.c 
	$(RM) $@
	$(LN) $? $@


#
# Rules to compile the common files
#

# The doranlib dependency ensures that doranlib gets called.
$(LIBFOAM): $(OBJECTS) 
	rem doranlib $@

$(LIBFOAM)(runtime.obj): $(LIBFOAMAL)
	@cd $(LibDir)
	@uniar x $(LIBFOAMAL) runtime.ao
	@$(ALDOR) $(ALDORARGS) runtime.ao
	@$(LIB) /out:$(LIBFOAM) runtime.obj
	@$(RM) runtime.obj runtime.ao

$(LIBFOAM)(plbint.obj): $(PWD)\plbint.cc $(PWD)\plbint.h $(FOAMH) $(GmpDir)\gmp.h
	@cd $(LibDir)
	@echo "$(CPPPROG) $(CPPFLAGS) -c $(PWD)\plbint.cc"
	@$(CP) $(PWD)\..\BigInt\BigInt.H $(PWD)\..\BigInt\BigInt.hh
	@$(CP) $(PWD)\plbint.cc $(PWD)\plbint.cpp
	rem @cl /c /Tpbigint.c -I$(PWD)\..\BigInt $(PWD)\..\BigInt\bigint.c
	@$(CPPPROG) $(CPPFLAGS) -c -I$(PWD)\..\BigInt -I$(PWD)\..\posso -I$(GmpDir) -I$(PWD)\..\cmm $(PWD)\plbint.cpp
	rem cl /c /Tp$(PWD)\plbint.cc /I$(PWD)\..\BigInt /I$(PWD)\..\posso /I$(GmpDir) -I$(PWD)\..\cmm $(PWD)\plbint.cc
	@$(RM) $(PWD)\plbint.cpp
	@$(RM) $(PWD)\..\BigInt\BigInt.hh
	@$(LIB) /out:$(LIBFOAM) plbint.obj
	@$(RM) plbint.obj

$(LIBFOAM)(stdc.obj):   stdc.c   $(PORTH0) $(STDCH0)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c $(PWD)\stdc.c"
	@$(CCPROG) $(CFLAGS) -c $(PWD)\stdc.c
	@$(LIB) /out:$(LIBFOAM) stdc.obj
	@$(RM) stdc.obj

$(LIBFOAM)(cport.obj):  cport.c  $(PORTH0) $(STDCH0)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c $(PWD)\cport.c"
	@$(CCPROG) $(CFLAGS) -c $(PWD)\cport.c
	@$(LIB) /out:$(LIBFOAM) cport.obj
	@$(RM) cport.obj

$(LIBFOAM)(opsys.obj):  opsys.c  $(PORTH0) $(STDCH0) $(OPSYSH0)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c  $(PWD)\opsys.c"
	@$(CCPROG) $(CFLAGS) -c $(PWD)\opsys.c
	@$(LIB) /out:$(LIBFOAM) opsys.obj
	@$(RM) opsys.obj

$(LIBFOAM)(btree.obj):  btree.c  $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c  $(PWD)\btree.c"
	@$(CCPROG) $(CFLAGS) -c  -I$(PWD)\$(CmmDir) $(PWD)\btree.c
	@$(LIB) /out:$(LIBFOAM) btree.obj
	@$(RM) btree.obj

store $(LIBFOAM)(store.obj):  store.c  $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c $(PWD)\store.c"
	@$(CCPROG) $(CFLAGS) -c  -I$(PWD)\$(CmmDir)  $(PWD)\store.c
	@$(LIB) /out:$(LIBFOAM) store.obj
	@$(RM) store.obj

$(LIBFOAM)(bigint.obj): bigint.c $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c  $(PWD)\bigint.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir) $(PWD)\bigint.c
	@$(LIB) /out:$(LIBFOAM) bigint.obj
	@$(RM) bigint.obj

$(LIBFOAM)(dword.obj): dword.c $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c $(PWD)\dword.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\dword.c
	@$(LIB) /out:$(LIBFOAM) dword.obj
	@$(RM) dword.obj

$(LIBFOAM)(util.obj):   util.c   $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c $(PWD)\util.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\util.c
	@$(LIB) /out:$(LIBFOAM) util.obj
	@$(RM) util.obj

$(LIBFOAM)(table.obj):   table.c   $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\table.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\table.c
	@$(LIB) /out:$(LIBFOAM) table.obj
	@$(RM) table.obj

$(LIBFOAM)(xfloat.obj):   xfloat.c   $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\xfloat.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\xfloat.c
	@$(LIB) /out:$(LIBFOAM) xfloat.obj
	@$(RM) xfloat.obj

foam_c $(LIBFOAM)(foam_c.obj): foam_c.c $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\foam_c.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\foam_c.c
	@$(LIB) /out:$(LIBFOAM) foam_c.obj
	@$(RM) foam_c.obj

foam_cfp $(LIBFOAM)(foam_cfp.obj): foam_cfp.c $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c  -I$(PWD)\$(CmmDir)  $(PWD)\foam_cfp.c"
	@$(CCPROG) $(CFLAGS) -c  -I$(PWD)\$(CmmDir)  $(PWD)\foam_cfp.c
	@$(LIB) /out:$(LIBFOAM) foam_cfp.obj
	@$(RM) foam_cfp.obj

output $(LIBFOAM)(output.obj): output.c $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\output.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\output.c
	@$(LIB) /out:$(LIBFOAM) output.obj
	@$(RM) output.obj

foamopt $(LIBFOAM)(foamopt.obj): foamopt.c $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\foamopt.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir) $(PWD)\foamopt.c
	@$(LIB) /out:$(LIBFOAM) foamopt.obj
	@$(RM) foamopt.obj

compopt $(LIBFOAM)(compopt.obj): compopt.c $(FOAMH)
	@cd $(LibDir)
	@echo "$(CCPROG) $(CFLAGS) -c  $(PWD)\compopt.c"
	@$(CCPROG) $(CFLAGS) -c -I$(PWD)\$(CmmDir)  $(PWD)\compopt.c
	@$(LIB) /out:$(LIBFOAM) compopt.obj
	@$(RM) compopt.obj
