# Assume:
# 1. the appropriate version of java is in the PATH env variable
# 2. jbol.jar has been built in the parent directory
##################################################
# Should not need to change below this line
##################################################

JAVA=java
JAVAC=javac
JAR=jar

##################################################

JPATTERNJAR=../jpattern.jar
TESTJAR=test.jar

#################################################
TESTS=Test1 Test2a Test2b Test3a1 Test3a2 Test3b Test3c1 Test3c2 Test4 Test5
DRIVERSRC=Driver.java

TESTPATS=${TESTS:%=%.pat}
TESTSRC=${TESTPATS:.pat=.java}
TESTOUT=${TESTPATS:.pat=.out}
TESTDIFF=${TESTPATS:.pat=.diff}

# Define the tag for pattern substitutions in the test files
TAG=@
# Define if using single (-squote) or double quotes (-dquote), the default
QUOTE=-dquote

COMPMAIN=jpattern.compiler.Main
TESTMAIN=jpattern.test.Driver

COMPCMD=${JAVA} -cp ${JPATTERNJAR} ${COMPMAIN} -tag "${TAG}" ${QUOTE} 
TESTCMD=${JAVA} -cp "${TESTJAR}" ${TESTMAIN}

CLASSDIR=classes

all:: setup run report

setup:: clean javasrc classes testjar

testjar::
	cp ${JPATTERNJAR} ${TESTJAR}
	${JAR} -uf ${TESTJAR} -C ${CLASSDIR} jpattern

classes::
	mkdir ${CLASSDIR}
	${JAVAC} -cp ${JPATTERNJAR} -d ${CLASSDIR} ${TESTSRC}
	${JAVAC} -cp ${JPATTERNJAR} -d ${CLASSDIR} ${DRIVERSRC}

javasrc::
	for n in ${TESTS} ; do (\
	  ${COMPCMD} < $${n}.pat > $${n}.java \
	) done

clean::
	rm -f ${TESTSRC}
	rm -f ${TESTOUT}
	rm -f ${TESTDIFF}
	rm -f ${TESTJAR}
	rm -fr ${CLASSDIR}


##################################################
# Why does sh not have decent list construction/deconstruction operators?

run::
	@${TESTCMD} -test Test1 -pattern Lnum -subject "41234.  " >Test1.out
	@${TESTCMD} -test Test2a -pattern T -subject " 124, 257  " >Test2a.out
	@${TESTCMD} -test Test2b -pattern T -subject "  456 004  " >Test2b.out
	@${TESTCMD} -test Test3a1 -pattern Bnum -subject "16#123_abc#" >Test3a1.out
	@${TESTCMD} -test Test3a2 -pattern Bnum -subject "a#b#" >Test3a2.out
	@${TESTCMD} -test Test3b -pattern Bnum -subject "16:123_abc#" >Test3b.out
	@${TESTCMD} -test Test3c1 -pattern Bnum -subject "16:123_abc:" >Test3c1.out
	@${TESTCMD} -test Test3c2 -pattern Bnum -subject "16:123_abc#" >Test3c2.out
	@${TESTCMD} -test Test4 -pattern Capture -subject "xy[ab{cd}]" >Test4.out
	@${TESTCMD} -test Test5 -pattern Find -subject "ab123cd4657ef23" >Test5.out

report::
	@echo "All tests succeeded except for the following:"
	@for x in ${TESTS} ; do { \
	    diff -w correct/$$x.out ./$$x.out > $$x.diff ; \
	    if ( test -s $$x.diff ) then \
		echo "Test $$x failed" ; \
	    fi \
	} done
