
##############################################################################
#
# Makefile to build an Aldor distribution on Windows with MS Visual C
#
# Laurentiu Dragan, Aldor.org, Nov 2006
#  ldragan@aldor.org
#
##############################################################################

MAKEFILE=NMakefile

# Set this variables according to your environment

# ALDOR_PROJECT is the directory that contains the
# Aldor source tree. 
ALDOR_PROJECT=$(MAKEDIR)

# All these things under $(ALDOR_PROJECT) can actually be in unrelated places,
# and don't need to be under any common parent directory.
#ALDOR_SRC=$(ALDOR_PROJECT)\aldor
ALDOR_INSTALL=$(ALDOR_PROJECT)\install\aldor
GENERIC_DIR=$(ALDOR_PROJECT)\install\aldor_generic

ALDOR_VERSION=1.1.0
MACHINE=win32msvc
# Following libs can be built: axllibdir aldordir algebradir
LIBS_TO_BUILD=axllibdir #aldordir

GmpDir=\usr

LIBALDORROOT=$(ALDOR_PROJECT)\lib\aldor
ALDORLIBROOT=$(LIBALDORROOT)
ALGEBRAROOT=$(ALDOR_PROJECT)\lib\algebra

ALDORROOT=$(ALDOR_INSTALL)\$(MACHINE)\$(ALDOR_VERSION)
PATH=$(PATH);$(ALDORROOT)\bin:$(ALDORROOT)\toolbin

all:
	@echo "Usage:"
	@echo "   make aldorcompiler => make the compiler and install it"
	@echo "   make generic       => make the generic directory containing platform-independent libs and sources for the tests"
	@echo "   make cleanforest   => clean the source directories"
	@echo "   make testaxl       => tests aldor compiler using axllib tests"
	@echo "   make distrib       => make the whole distribution"
	@echo "   make package       => build the windows installer"
	@echo "Modify Makefile.globals for setup."

# ----------------------------------------------------
# COMPILER
# ----------------------------------------------------

#aldorcompiler: clean cleangeneric init
aldorcompiler: init
	@cd aldor
	@$(MAKE) -nologo -f$(MAKEFILE) ALDORROOT=$(ALDORROOT) \
	PATH="$(PATH);$(ALDORROOT)\bin;$(ALDORROOT)\toolbin" \
	MACHINE=$(MACHINE) ALDOR_VERSION=$(ALDOR_VERSION) \
	ALDOR_INSTALL=$(ALDOR_INSTALL) GmpDir=$(GmpDir) compiler
	@cd ..

# ----------------------------------------------------
# GENERIC AND DOCUMENTATION
# ----------------------------------------------------

generic: $(GENERIC_DIR) initgeneric genericlibs
	@copy README $(GENERIC_DIR)

genericlibs:
	cd lib
	$(MAKE) -nologo -f$(MAKEFILE) ALDORROOT=$(ALDORROOT) \
	PATH="$(PATH);$(ALDORROOT)\bin;$(ALDORROOT)\toolbin" \
	MACHINE=$(MACHINE) ALDOR_VERSION=$(ALDOR_VERSION) \
	ALDOR_INSTALL=$(ALDOR_INSTALL) GmpDir=$(GmpDir) \
	GENERIC_DIR=$(GENERIC_DIR) $(LIBS_TO_BUILD)
	cd ..

preparedistrib: docopydf gentest copysrc

# ----------------------------------------------------------
# Copy sources that should be provided in the distribution.
# ----------------------------------------------------------

copysrc: srclibaldor

srclibaldor:
	mkdir $(GENERIC_DIR)\src
	copy $(ALDORLIBROOT)\src $(GENERIC_DIR)\src\libaldor

# ----------------------------------------------------
# Documentation pdf of libraries and user guide.
# ----------------------------------------------------

docopydf: libaldordocopydf algebradocopydf aldorugpdf

# ------------------------------------------------------------
# Generating the tests for the aldor and algebra libraries ...
# ------------------------------------------------------------
gentest: gentestaldor gentestalgebra

gentestaldor:
	@(PATH=$(ALDORROOT)\bin:$(PATH); export PATH; \
	  cd $(ALDORLIBROOT)\src; $(MAKE) $(ENV) -f$(MAKEFILE) test)
	@(PATH=$(ALDORROOT)\bin:$(PATH); export PATH; \
	  utils\removezerosized.sh $(ALDORLIBROOT)\test; \
	  mkdir -p $(GENERIC_DIR)\tests\libaldor; \
	  copy $(ALDORLIBROOT)\test\*.as $(GENERIC_DIR)\tests\libaldor; \
	  copy $(ALDORLIBROOT)\test\testall $(GENERIC_DIR)\tests\libaldor; \
	  copy $(ALDORLIBROOT)\test\Makefile $(GENERIC_DIR)\tests\libaldor)

gentestalgebra:
	@(PATH=$(ALDORROOT)\bin:$(PATH); export PATH; \
	  cd $(ALGEBRAROOT); $(MAKE) $(ENV) -f$(MAKEFILE) testfiles; \
	  mkdir -p $(GENERIC_DIR)\tests\algebra; \
	  copy $(ALGEBRAROOT)\test\*.as $(GENERIC_DIR)\tests\algebra; \
	  copy $(ALGEBRAROOT)\test\testall $(GENERIC_DIR)\tests\algebra; \
	  copy $(ALGEBRAROOT)\test\Makefile $(GENERIC_DIR)\tests\algebra)

# ----------------------------------------------------
# Testing the aldor and algebra libraries ...
# ----------------------------------------------------
#rhx: Here we assume that "make install" has been performed.
# Run the testsuite for aldor and algebra. Note that axllib has no
# testsuite.
test: testaldor testalgebra

testaldor:
	cd $(ALDORLIBROOT); $(MAKE) $(ENV) -f$(MAKEFILE) runtest

testalgebra:
	cd $(ALGEBRAROOT);  $(MAKE) $(ENV) -f$(MAKEFILE) testfiles runtest


# ----------------------------------------------------
# SPECIFIC LIBRARIES
# ----------------------------------------------------

libaxllib: checklibaxllib
	@(cd $(LIBAXLLIBROOT); $(MAKE) $(ENV) -f$(MAKEFILE) library)

checklibaxllib:
	-@ if [ "x$(LIBAXLLIBROOT)" = "x" ] ; then echo "*** LIBAXLLIBROOT is not set"; fi
	@ [ "x$(LIBAXLLIBROOT)" != "x" ]

libaldor: checklibaldor
	@(cd $(ALDORLIBROOT); $(MAKE) $(ENV) -f$(MAKEFILE) library)

checklibaldor:
	-@ if [ "x$(ALDORLIBROOT)" = "x" ] ; then echo "*** ALDORLIBROOT is not set"; fi
	@ [ "x$(ALDORLIBROOT)" != "x" ]

algebra: checklibaldor checkalgebra
	@(cd $(ALGEBRAROOT); $(MAKE) $(ENV) -f$(MAKEFILE) library)

checkalgebra:
	-@ if [ "x$(ALGEBRAROOT)" = "x" ] ; then echo "*** ALGEBRAROOT is not set"; fi
	@ [ "x$(ALGEBRAROOT)" != "x" ]

libaxldem:
	@echo "building axldem lib..."
	@cd $(MAKEDIR)\lib\libaxldem
	@$(MAKE) $(ENV) -f$(MAKEFILE)
	@echo "done building axldem lib..."
	
libax0:
	@echo "building ax0 lib..."
	@cd $(MAKEDIR)\lib\libax0
	@$(MAKE) $(ENV) -f$(MAKEFILE)
	@echo "done building ax0 lib..."

# ----------------------------------------------------
# CLEANING TARGETS
# ----------------------------------------------------

cleanall: clean cleangeneric


clean: cleancompiler cleanlibs
	@echo "Cleaning done."

cleancompiler:
	@(cd aldor; $(MAKE) $(ENV) -f$(MAKEFILE) remove)

#cleandoc:
#	@(cd aldorug; $(MAKE) $(ENV) -f$(MAKEFILE) clean)

cleanlibs:
	@(cd lib; $(MAKE) $(ENV) -f$(MAKEFILE) cleansources)

cleangeneric:
	@(del /s $(GENERIC_DIR))

cleanforest:
	@(echo "Cleaning compiler sources"; cd aldor; $(MAKE) $(ENV) -f$(MAKEFILE) cleansources; cd ..; \
	  echo "Cleaning libraries sources"; cd lib; $(MAKE) $(ENV) -f$(MAKEFILE) cleansources; cd ..)

# ----------------------------------------------------
# INITIALIZATION
# ----------------------------------------------------

init: $(ALDOR_INSTALL)\$(MACHINE)\$(ALDOR_VERSION)

initgeneric: $(GENERIC_DIR) $(GENERIC_DIR)\lib $(GENERIC_DIR)\doc \
		$(GENERIC_DIR)\tests $(GENERIC_DIR)\utils \
		$(GENERIC_DIR)\NMakefile

$(ALDOR_INSTALL)\$(MACHINE): 
	@mkdir -p $(ALDOR_INSTALL)\$(MACHINE)

$(ALDOR_INSTALL)\$(MACHINE)\$(ALDOR_VERSION): $(ALDOR_INSTALL)\$(MACHINE)
	@mkdir $(ALDOR_INSTALL)\$(MACHINE)\$(ALDOR_VERSION)

$(GENERIC_DIR):
	@mkdir $(GENERIC_DIR)
$(GENERIC_DIR)\lib: $(GENERIC_DIR)
	@mkdir $(GENERIC_DIR)\lib
$(GENERIC_DIR)\doc: $(GENERIC_DIR)
	@mkdir $(GENERIC_DIR)\doc
$(GENERIC_DIR)\tests: $(GENERIC_DIR)
	@mkdir $(GENERIC_DIR)\tests
$(GENERIC_DIR)\utils: $(GENERIC_DIR)
	@mkdir $(GENERIC_DIR)\utils
$(GENERIC_DIR)\NMakefile: NMakefile.generic
	@copy NMakefile.generic $(GENERIC_DIR)\NMakefile

# ----------------------------------------------------

# ----------------------------------------------------
# DISTRIB
# ----------------------------------------------------

distrib: aldorcompiler generic libaxldem libax0
	@cd $(GENERIC_DIR)
	@if exist lib\axllib \
	@$(MAKE) -nologo -f $(MAKEFILE) ALDORROOT=$(ALDORROOT) \
		PATH="$(PATH);$(ALDORROOT)\bin;$(ALDORROOT)\toolbin" \
		ALDOR_INSTALL=$(ALDOR_INSTALL) GENERIC_DIR=$(GENERIC_DIR) \
		axlinstall
	@if exist lib\aldor \
	@$(MAKE) -nologo -f $(MAKEFILE) ALDORROOT=$(ALDORROOT) \
		PATH="$(PATH);$(ALDORROOT)\bin;$(ALDORROOT)\toolbin" \
		ALDOR_INSTALL=$(ALDOR_INSTALL) GENERIC_DIR=$(GENERIC_DIR) \
		aldorinstall
	@if exist lib\algebra \
	@$(MAKE) -nologo -f $(MAKEFILE) ALDORROOT=$(ALDORROOT) \
		PATH="$(PATH);$(ALDORROOT)\bin;$(ALDORROOT)\toolbin" \
		ALDOR_INSTALL=$(ALDOR_INSTALL) GENERIC_DIR=$(GENERIC_DIR) \
		algebrainstall
	@cd ..


installer:
	@echo "Cleaning binaries"
	@del /q $(ALDORROOT)\bin\*.ilk
	@del /q $(ALDORROOT)\bin\*.pdb
	@del /s/q $(ALDORROOT)\srclib
	@copy $(ALDOR_PROJECT)\aldor\tools\win32\generated.nsi $(ALDORROOT)\..
	@copy $(ALDOR_PROJECT)\utils\licensing_kit\license.txt $(ALDORROOT)\..
	@copy $(ALDOR_PROJECT)\aldor\tools\win32\Readme.txt $(ALDORROOT)\..
	"C:\Program Files\NSIS\makensis" /DALDORROOT=$(ALDORROOT) /DMACHINE=$(MACHINE) /DVERSION=$(ALDOR_VERSION) $(ALDOR_PROJECT)\aldor\tools\win32\generated.nsi

# ----------------------------------------------------
# DISTRIB
# ----------------------------------------------------

fast: 
	(cd aldor; $(MAKE) $(ENV) -f$(MAKEFILE) fast)
