###############################################################################
#
# Makefile
#
# Make program to test the AXIOM-XL compiler.
#
# Copyright (c) 1990-2007 Aldor Software Organization Ltd (Aldor.org).
#
###############################################################################
#
# Targets: all, junk, clean
#
#    make all	-- make the various tools for the AXIOM-XL compiler
#    make junk	-- list files which are not part of the tools
#    make clean -- remove generated files  (e.g. foo.c~)
#
# Parameters:  ALDORROOT
#
#    To override defaults do, e.g.,
#	 make -e ALDORROOT=/spad/local/aldor/rs all
#    or
#	 setenv ALDORROOT /spad/local/aldor/rs; setenv MAKEFLAGS e; make all
#
###############################################################################
#
#  2006/Dec/22
#
#  On Solaris, the value of PWD does not change when make is invoked
#  recursively.  Consequently, it is necessary to explicitly set it
#  at the start of the makefile.
#
PWD = $(shell pwd)

SHELL=/bin/sh
ALDOR=aldor
TESTALDOR=testaldor

# $(ALDORROOT) is retrieved from the environment
IncDir	= $(ALDORROOT)/include
LibDir	= $(ALDORROOT)/lib
BinDir	= $(ALDORROOT)/bin
SamDir	= $(ALDORROOT)/share/samples/test

CP	= cp -p
RM	= rm -f

TEST1 = test0.as test1.as 1test.as srcpos.as \
	triv0.as triv1.as triv3.as triv4.as triv5.as triv6.as \
	hilbert.as intbug1.as \
	opt0.as opt1.as opt2.as opt3.as\
	genc0.sh genc1.as genc2.as \
	imod0.as table1.as format1.as format2.as \
	junk0.as \
	missing0.as missing1.as halt0.as halt1.as \
	dnames.as hash0.as \
	error0.as error1.as \
	hide0.as \
	domain0.as domain1.as domain2.as domain3.as \
	mandel.as bigmand.as \
	string-t.as ratio0.as doc0.as \
	oslowtst.as \
	cmdline0.sh \
	fopt.sh fopt-ax.sh fopt-ai.sh fopt-fm.sh fopt-mc.sh \
	multi.sh errorax.sh \
	include0.as include1.as include2.as include3.as \
	scan0.as scan1.as scan2.as scan3.as scan4.as scan5.as scan6.as \
	linear0.as linear1.as linear2.as linear3.as linear4.as linear5.as \
	parse0.as parse1.as parse2.as parse3.as parse4.as \
	macex0.as macex1.as macex2.as macex3.as macex4.as macex5.as \
	macex6.as macex7.as \
	abcheck0.as abcheck1.as abcheck2.as abcheck3.as \
	abnorm0.as abnorm1.as abnorm2.as \
	scobind0.as scobind1.as scobind2.as scobind3.as scobind4.as \
	scobind5.as scobind6.as \
	scope0.as scope1.as scope2.as scope3.as scope5.as \
	scope7.as scope8.as scope9.as scope10.as scope11.as scope12.as \
	tinfer0.as tinfer1.as tinfer2.as \
	fluid0.as enum0.as enum1.as union0.as union1.as union2.as \
	catdef0.as catdef1.as catdef3.as self0.as grok.as \
	ovload0.as ovload1.as ovload2.as \
	depend0.as depend1.as depend2.as depend3.as depend4.as depend5.as \
	depend6.as depend7.as depend8.as depend9.as
TEST2 = type0.as type1.as type2.as type3.as type4.as type5.as \
	type7.as type8.as \
	default0.as default1.as default2.as default3.as \
	default4.as default5.as default6.as default7.as \
	default9.as \
	cascade0.as cascade1.as cascade2.as cascade3.as cascade4.as \
	swap.as swap1.as ladder0.as cycle0.as \
	loop0.as loop1.as loop2.as loop3.as collect0.as collect1.as \
	genops.as \
	exit0.as exit1.as exit2.as \
	none0.as none1.as none2.as \
	if0.as if1.as if2.as if3.as if4.as if5.as \
	ifcross0.as \
	tuple0.as tuple1.as tuple2.as tuple3.as tuple4.as \
	embed.as embed1.as \
	impl.as \
	const0.as const1.as const2.as \
	const3.as const4.as const5.as \
	const6.as const7.as const8.as \
	defgroup0.as defgroup1.as defgroup2.as defgroup3.as \
	pack0.sh pack0.as pack1.as pack2.as \
	binadd.as qual0.as qual1.as qual2.as \
	try0.as	\
	libdup0.as libdup1.as \
	numeral0.as numeral1.as numeral2.as \
	ar0.sh ar1.sh ar2.sh ar3.sh ar4.sh ar5.sh ar6.sh \
	arrepl0.sh arrepl1.sh \
	session1.sh session2.sh session3.sh session4.sh session5.sh \
	session6.sh \
	recov1.sh \
	flow0.as goto0.as \
	funvar.as
TEST3 = qimport.as \
	eager0.sh \
	where0.as where1.as where3. as \
	builtin0.as builtin1.as \
	gen0.as gen1.as gen2.as gen3.as gen4.as \
	lit0.as lit1.as \
	forn0.as forn1.as forn2.as forn3.as forn4.as \
	forn5.as forn5o.as forn6.as forn6o.as forn7.as \
	forn7a.as forn8.sh forn9.sh forn10.sh\
	inline0.as inline1.as inline2.as inline3.as inline4.as inline5.as \
	basic.as complex.as fix0.as fix1.as \
	float0.as float1.as float3.as float4.as df1.as \
	big.as fact.as array0.as array1.as \
	f11.as \
	msg.sh limits.as \
	exn1.as exn2.as exn3.as exn4.as exn5.as exn6.as \
	emit0.sh emit1.sh respfile.sh \
	emerge0.as \
	t1009.as t1024.as t1053.as t1059.as t1106.as \
	t672.as t715.as t897.as t1142.as t1145.as t1149.as t1157.sh t1158.as\
	t934.as t936.as t944.as t947.as t950.as t958.as t966.as t967.as \
	t973.as t986.as t1099.as t1105.as ddata.as \


TEST4 = defarg0.as defarg1.as defarg2.as defarg3.as defarg4.as \
	defarg5.as defarg6.as defarg7.as defarg8.as defarg9.as \
	defarg10.as \
	bug852.as \
	bug941.as bug954.as bug969.as \
	bug1127 \
	bug1144.as bug1164.as bug1165.as bug1170.as bug1172.as bug1189.as \
	bug1192.as bug1193.as bug1200.as \
	bug1210.as bug1212.as bug1213.sh bug1226.sh bug1235.as bug1237.as \
	bug1238.as bug1242.as \
	bug1265.as bug1272.as bug1275.sh bug1278.as \
	ref0.as \
	object0.as object1.as extend0.as extend1.as \
	export1.as export2.as export3.as \
        exptoc.sh exptoc2.sh exptoc2.as \
	assign0.as assign1.as assign2.as assign3.as assign4.as \
	funct1.as funct2.as funct3.as funct4.as \
	funct5.as funct6.as funct7.as funct8.as \
	coerce.as condapply1.as condapply2.as has1.as has2.as \
	record.as record0.as record1.as record2.as \
	gfGener1.as gfGener2.as \
	pretend1.as  setBANG.as \
	unbal.as \
	select0.as select1.as select2.as select3.sh \
	topsort0.as topsort1.as \
	print.as apply0.as \
	tree.as tree1.as tree2.as reclist0.as reclist1.as \
	funlist1.as slist.as \
	for0.as interact.sh \
	coerce0.as \
	supcat.sh segment0.as \
	segext0.sh segext1.sh \
	gc0.as \
	rawrec1.as rawrec2.as rawrec3.as rawrec4.as rawrec5.sh \

TESTDEMOLIB = hilbert1.as gbtest1.as catdef2.as type6.as f21.as intfact.as iroots.as
TESTAX0 = hilbert0.as t619.as axlist0.as coerce1.as coerce2.as coerce3.as \
coerce4.as coerce5.as convert0.as matops.as intcat.sh supcat2.as supcat3.as \
segext5.as segext6.as segext7.as vector0.as vector1.as vector2.as 

TESTS = $(TEST1) $(TEST2) $(TEST3) $(TEST4) $(TESTDEMOLIB) $(TESTAX0)

HELPS = arrepla.as arreplb.as arreplc.as \
        arrepl1a.as arrepl1b.as arrepl1c.as \
        expfact.c exptoc.as expquo.c exptoc2.as \
	packdefs.as packfns.c \
	intcat0.as intcat1.as supcat0.as supcat1.as \
	segext0.as segext1.as segext2.as segext3.as segext4.as \
	forn5_c.c 
#
# This list is sorted alphabetically
#

Samples	= \
	bigmand.as binadd.as builtin0.as builtin1.as cascade0.as cascade1.as \
	cascade2.as cascade3.as cascade4.as catdef0.as defarg0.as defarg1.as \
	defarg2.as defarg3.as defarg4.as defarg5.as defarg6.as defarg7.as \
	defarg8.as default0.as default1.as default2.as default3.as default4.as\
	default5.as depend2.as depend3.as enum0.as exit0.as exptoc.as \
	float0.as float1.as float2.as float3.as format1.as forn0.as forn1.as \
	forn2.as forn3.as forn4.as funlist1.as funvar.as intbug1.as gbtest1.as \
	goto0.as grok.as halt0.as halt1.as hide0.as hilbert.as hilbert0.as \
	if4.as include1.as intfact.as iroots.as ladder0.as loop0.as loop1.as \
	loop2.as loop3.as macex0.as macex1.as macex2.as macex3.as macex4.as \
	macex5.as none0.as object0.as qimport.as qual0.as qual1.as \
	qual2.as record.as record0.as swap.as tree.as union0.as union1.as

DIAGS	= $(DIAGS1) $(DIAGS2)

FUTURE	= pack3.as

# float2.as:   of_emerg.c aliasing problem
# default8.as: function used as value in unexpected way.
# gbtest1.as:  only fails under Win32
# where2.as:   confused by default within a where block

BUGS=float2.as default8.as where2.as extend2.as opt1.as pack0.sh recov1.sh \
     bug1272.as

# Diagnostics with fixed output
DIAGS1= show-t.sh btree-t.sh float-t.sh xfloat-t.sh \
	util-t.sh fluid-t.sh format-t.sh buffer-t.sh \
	list-t.sh string-t.sh table-t.sh \
	file-t.sh bitv-t.sh bigint-t.sh ccode-t.sh \
	cport-t.sh dnf-t.sh priq-t.sh msg-t.sh link-t.sh symbol-t.sh

# Diagnostics with varying output
DIAGS2= opsys-t.sh fname-t.sh \
	stor1a-t.sh stor1b-t.sh stor1c-t.sh stor1d-t.sh \
	store2-t.sh store3-t.sh

DIAGBUGS=

TIMINGS= mandel_t.as mandel_c.c sieve.c

OKFILES = Makefile NMakefile incl \
	$(TESTS) $(HELPS) $(DIAGS) $(FUTURE) $(BUGS) $(DIAGBUGS) $(TIMINGS)

OLDALDOR = aldor

all:	tests diags1

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

clean::
	@ $(RM) *~

clean:: ; -(cd incl ; $(MAKE) clean)
junk::	; -(cd incl ; $(MAKE) junk)

tests:
# This doesn't work on Alpha OSF
#	@- env -u ALDOR_ANSI_COLOURS -u ALDOR_ANSI_COLORS -u ALDOR_HP_COLOURS -u ALDOR_HP_COLORS ALDORARGS=$(TESTAXLARGS) $(TESTALDOR) -oldaxl $(OLDALDOR) $(TESTS)
	@- env ALDORARGS="$(TESTAXLARGS) " $(TESTALDOR) -oldaxl $(OLDALDOR) $(TESTS)
	@ echo "BUGS = $(BUGS)"

testexecs:
	@- $(TESTALDOR) -only testrun -oldaxl $(OLDALDOR) $(TESTS)
	@ echo "BUGS = $(BUGS)"

testcomp:
	@-$(TESTALDOR) -only testcomp $(TESTS)

testgen:
	@-$(TESTALDOR) -only testgen $(TESTS)

errors:
	@-$(TESTALDOR) -only testerr $(TESTS)

testsh:
	@-$(TESTALDOR) `for i in $(TESTS) ; do echo $$i | grep '\.sh$$' ; done` 


diags:
	@-$(TESTALDOR) $(DIAGS1) $(DIAGS2)
	@ echo "DIAGBUGS = $(DIAGBUGS)"
diags1:
	@-(if aldor -v | grep -s debug > /dev/null 2>&1 ; then \
		$(TESTALDOR) $(DIAGS1) ; \
		echo "DIAGBUGS = $(DIAGBUGS)" ; \
	   fi)
diags2:
	@-$(TESTALDOR) $(DIAGS2)
	@ echo "DIAGBUGS = $(DIAGBUGS)"

opttests:
	@- ALDORARGS=-O $(TESTALDOR) -only testrun -oldaxl $(OLDALDOR) $(TESTS)

t1: 
	@echo $(TEST1)

t2:
	@echo $(TEST2)

t3:
	@echo $(TEST3)

t4:
	@echo $(TEST4)

install:; @-$(TESTALDOR) -install -oldc $(OLDALDOR) $(TESTS)
instcomp:; @-$(TESTALDOR) -install -only testcomp $(TESTS)
instgen:; @-$(TESTALDOR) -install -only testgen $(TESTS)

#
# Samples
#

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

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