#-----------------------------------------------------------------------------#
# vim: ts=8 sw=8 noexpandtab ft=make
#-----------------------------------------------------------------------------#

TESTS_DIR = ..
THIS_DIR = term
MAYBE_J1 =

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

ifeq ($(MMAKE_USE_MMC_MAKE),yes)
# `mmc --make' doesn't know how to create `.trans_opt' files.
TERM_PROGS =
else
TERM_PROGS = \
	ack \
	append \
	arit_exp \
	associative \
	dds1_2 \
	dds3_13 \
	dds3_14 \
	dds3_15 \
	dds3_17 \
	dds3_8 \
	exception_analysis_test \
	exception_analysis_test2 \
	existential_error1 \
	existential_error2 \
	existential_error3 \
	fold \
	foreign_valid \
	generic_call \
	inf_const_bug \
	my_list \
	lte \
	my_map \
	member \
	mergesort \
	mergesort_ap \
	mergesort_t \
	mmatrix \
	money \
	naive_rev \
	occur \
	ordered \
	overlap \
	permutation \
	pl1_1 \
	pl1_2 \
	pl2_3_1 \
	pl3_1_1 \
	pl3_5_6 \
	pl3_5_6a \
	pl4_01 \
	pl4_4_3 \
	pl4_4_6a \
	pl4_5_2 \
	pl4_5_3a \
	pl5_2_2 \
	pl6_1_1 \
	pl7_2_9 \
	pl7_6_2a \
	pl7_6_2b \
	pl7_6_2c \
	pl8_2_1 \
	pl8_2_1a \
	pl8_3_1 \
	pl8_3_1a \
	pl8_4_1 \
	pl8_4_2 \
	pragma_non_term \
	pragma_term \
	promise_will_not_throw \
	queens \
	quicksort \
	select \
	subset \
	sum \
	vangelder
endif	# $(MMAKE_USE_MMC_MAKE) == no

# Module-specific options should go in Mercury.options so they
# can be found by `mmc --make'.
include Mercury.options

PROGS = $(TERM_PROGS)

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

TESTS = $(sort $(PROGS))
include ../Mmake.common

%.runtest: %.trans_opt_res ;

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

MCTERMFLAGS = --enable-termination --term-single-arg 5 --enable-termination2
MCOPTFLAGS  = --no-inlining --no-optimize-unused-args --no-deforestation \
	      --no-optimize-higher-order
MCTRANSOPTFLAGS = $(MCTERMFLAGS) $(MCOPTFLAGS)

# if EXTRA_MCFLAGS=-O5 then --no-inlining must occur after the -O5
# to turn inlining off.
# The following ensures that MCTRANSOPTFLAGS overrides anything
# set by EXTRA_MCFLAGS, by placing them later in the argument list.
ALL_MCTOIFLAGS+=$(MCTRANSOPTFLAGS)

%.trans_opt_res: %.trans_opt_exp $(trans_opts_subdir)%.trans_opt
	@echo "Comparing $(trans_opts_subdir)$*.trans_opt"
	@echo "with $*.trans_opt_exp"
	@-rm -f $@ $*.trans_opt_res[1-2]
	@{ diff $(DIFF_OPTS) $*.trans_opt_exp $(trans_opts_subdir)$*.trans_opt \
			> $*.trans_opt_res1 && \
		echo "Matches $*.trans_opt_exp" && \
		cp $*.trans_opt_res1 $@; } || \
	{ test -f $*.trans_opt_exp2 && \
		echo "with $*.trans_opt_exp2" && \
		diff $(DIFF_OPTS) $*.trans_opt_exp2 \
			$(trans_opts_subdir)$*.trans_opt \
			> $*.trans_opt_res2 && \
		echo "Matches $*.trans_opt_exp2" && \
		cp $*.trans_opt_res2 $@; } || \
	{ shortest=`wc -l $*.trans_opt_res[1-2] | grep -v total | sort -n | \
		head -1 | awk '{ print $$2; }' `; \
		echo "** $*.err did not match the expected error output"; \
		echo "** (closest match was $$shortest)"; \
		cp $$shortest $@; \
		cat $@; \
		exit 1; }

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

clean_local: clean_term

clean_term:
	rm -f *.trans_opt_err

realclean_local: realclean_term

realclean_term:
	rm -f *.trans_opt_res
