RUNTIME = mono --debug --security
CSCOMPILE = mcs --debug
PROFILE = net_1_1

all: all.exe min.exe opt.exe ref.exe none.exe

aot: all.exe.so min.exe.so opt.exe.so ref.exe.so none.exe.so

TEST_FILES = all min opt ref none

# Only make sense on a 2.0 runtime
run: all
	@for i in $(TEST_FILES); do	\
		$(RUNTIME) $$i.exe;	\
	done;

# Templates are checked into SVN, for each profile, to detect regressions
# That's why they aren't removed by "make clean"
templates: all
	@for i in $(TEST_FILES); do	\
		permview /output $$i.$(PROFILE).txt $$i.exe > /dev/null;	\
	done;

test: all
	@failed=0; \
	passed=0; \
	for i in $(TEST_FILES); do	\
		permview /output $$i.$(PROFILE).tmp $$i.exe > /dev/null;	\
		cmp -s $$i.$(PROFILE).tmp $$i.$(PROFILE).txt;	\
		if [ "$$?" = "0" ]; then	\
			echo -e "$$i\tpass";	\
			passed=`expr $${passed} + 1`; \
		else	\
			echo -e "$$i\tFAIL ($$?)";	\
			failed=`expr $${failed} + 1`; \
			failed_tests="$${failed_tests} $$i"; \
		fi;	\
	done;	\
	echo -e "\n$${passed} test(s) passed. $${failed} test(s) failed."; \
	if [ "$${failed}" != "0" ]; then	\
		echo -e "Failed tests are:";	\
		for i in $${failed_tests};	\
			do echo -e "\t$${i}";	\
		done;	\
		exit 1;	\
	fi

clean:
	rm -f *.exe* *.tmp

%.exe: %.cs
	$(CSCOMPILE) $^

%.exe.so: %.exe
	$(RUNTIME) --aot $^
