# 
# test
# 
RUNTIME_LIB = ../libjexc.a
#JEXC = CLASSPATH=$${CLASSPATH}:.:../../../exc-tools-java ../jexc
JEXC = CLASSPATH=../../../exc-tools-java ../jexc
CFLAGS = -g -I.. -I../../../include
DRIVER = CLASSPATH=$${CLASSPATH}:.:../../../exc-tools-java ./jexc-test
JAVAC = CLASSPATH=$${CLASSPATH}:../../../exc-tools-java javac
JAVACOM = CLASSPATH=$${CLASSPATH}:.:../../../exc-tools-java java

TEST_PROGRAM = hello test_1 test_2 test_3 test_4 test_5 test_6 test_7

all: $(TEST_PROGRAM) doRun

doRun:	$(TEST_PROGRAM)
	for i in $(TEST_PROGRAM); do \
		echo $$i; \
		if test $$i = "test_7"; then \
			args="test_7.java"; \
		else \
			args=""; \
		fi; \
		./$$i $$args > ./$$i.jexc; \
		$(JAVACOM) $$i $$args > ./$$i.jvm; \
		diff -c ./$$i.jvm ./$$i.jexc; \
		rm -f ./$$i.jvm ./$$i.jexc; \
	done


#
# test basic
#
hello:   hello.java
	$(JAVAC) hello.java
	$(JEXC) -main hello hello.class
	$(CC) $(CFLAGS) -o hello jexc.out.c $(RUNTIME_LIB)

# test jump and branch
test_1: test_1.java
	$(JAVAC) test_1.java
	$(DRIVER) -main test_1 test_1.class
	mv a.out test_1

# test virtual
test_2: test_2.java
	$(JAVAC) test_2.java
	$(DRIVER) -main test_2 test_2.class A.class B.class C.class
	mv a.out test_2

# test interface
test_3: test_3.java
	$(JAVAC) test_3.java
	$(DRIVER) -main test_3 test_3.class interf.class interf2.class X.class Y.class Z.class
	mv a.out test_3

# test switch
test_4: test_4.java
	$(JAVAC) test_4.java
	$(DRIVER) -main test_4 test_4.class
	mv a.out test_4

# test exception
test_5: test_5.java
	$(JAVAC) test_5.java
	$(DRIVER) -main test_5 test_5.class
	mv a.out test_5

# test print and util
test_6: test_6.java
	$(JAVAC) test_6.java
	$(DRIVER) -main test_6 test_6.class
	mv a.out test_6

# test test io and main arg
test_7: test_7.java
	$(JAVAC) test_7.java
	$(DRIVER) -main test_7 test_7.class
	mv a.out test_7

# gc test
test_8: test_8.java
	javac test_8.java
	jexc-test -main test_8 test_8.class
	mv a.out test_8

test:
	javac test.java
	jexc-test -main test test.class

#
# exc tool kit test
#
EXC_TEST = xobj_iotest decompile omp_decompile utl.ompcc

xobj_iotest: xobj_iotest.java
	$(JAVAC) xobj_iotest.java
	$(JEXC) -main xobj_iotest xobj_iotest.class -package-list exc.object.lst
	$(CC) $(CFLAGS) -o xobj_iotest jexc.out.c $(RUNTIME_LIB)

decompile: decompile.java
	$(JAVAC) decompile.java
	$(JEXC) -main decompile decompile.class -package-list exc.object.lst
	$(CC) $(CFLAGS) -o decompile jexc.out.c $(RUNTIME_LIB)

omp_decompile: omp_decompile.java
	$(JAVAC) omp_decompile.java
	$(JEXC) -main omp_decompile omp_decompile.class -package-list exc.lst
	$(CC) $(CFLAGS) -o omp_decompile jexc.out.c $(RUNTIME_LIB)

utl.ompcc: 
	$(JEXC) -main exc/util/ompcc -package-list exc.lst
	$(CC) $(CFLAGS) -o utl.ompcc jexc.out.c $(RUNTIME_LIB)

clean:
	rm -f *.class jexc.out.c a.out $(TEST_PROGRAM) $(EXC_TEST)
