#
#  make.problem
#
#  Put this in the diectory above the various problem directories.
#
#
EXPECTED=ans
CS=$(CVersions:%.c)
CPPS=$(CPPVersions:%=%.cpp)
JAVAS=$(JavaVersions:%=%.java)
PYTHONS=$(PythonVersions:%=%.py)
EXES=$(CPPS:%.cpp=%.exe) $(CS:%.c=%.exe)
CLASSES=$(JAVAS:%.java=%.class)
TestIn=$(Tests:%.in=%)
TestAns=$(Tests:%.in=%.$(EXPECTED))
COutputs=$(foreach cppv,$(CVersions),$(addsuffix .$(cppv).c,$(Tests)))
CPPOutputs=$(foreach cppv,$(CPPVersions),$(addsuffix .$(cppv).cpp,$(Tests)))
JavaOutputs=$(foreach javav,$(JAVAVersions),$(addsuffix .$(javav).java,$(Tests)))
CPPdiffs=$(CPPOutputs:%=%.diff)
Cdiffs=$(COutputs:%=%.diff)
Javadiffs=$(JavaOutputs:%=%.diff)
#
Diffs= $(CPPdiffs) $(Javadiffs) $(Cdiffs)
#
#
CFLAGS=-g -O2 -std=gnu99 -static
CPPFLAGS=-g -O2 -std=gnu++11 -static
#

all: diffs
	find . -name '*.diff'
#	@grep -v "Blank line at end of input" testValidity.txt | grep -v DONE | grep -v "Extra characters after input"

compile: $(EXES) $(CLASSES)

setup: $(TestIn)

%.in: %.in.txt
	tr -d '\r' < $*.in.txt > $@

%.exe: %.c
	g++ $(CFLAGS) -o $@ $*.c -lm

%.exe: %.cpp
	g++ $(CPPFLAGS) -o $@ $*.cpp

%.class: %.java
	javac -g -cp java $*.java


diffs: compile $(TestAns)
	for test in $(TestIn); do \
	  for cppv in $(CPPVersions); do \
	    time -o $$test.$$cppv.time ./$$cppv.exe < $$test.in > $$test.$$cppv.cpp.out; \
	    if ! cmp -s $$test.$$cppv.cpp.out $$test.$(EXPECTED); then \
	       diff $$test.$$cppv.cpp.out $$test.$(EXPECTED) > $$test.$$cppv.cpp.diff; \
	    fi; \
	  done; \
	  for cv in $(CVersions); do \
	    time -o $$test.$$cv.time ./$$cv.exe < $$test.in > $$test.$$cppv.c.out; \
	    if ! cmp -s $$test.$$cv.c.out $$test.$(EXPECTED); then \
	       diff $$test.$$cv.c.out $$test.$(EXPECTED) > $$test.$$cv.c.diff; \
	    fi; \
	  done; \
	  for jv in $(JavaVersions); do \
	    time -o $$test.$$jv.time java $$jv < $$test.in > $$test.$$jv.java.out; \
	    if ! cmp -s $$test.$$jv.java.out $$test.$(EXPECTED); then \
	       diff $$test.$$jv.java.out $$test.$(EXPECTED) > $$test.$$jv.java.diff; \
	    fi; \
	  done; \
	  for pv in $(PythonVersions); do \
	    time -o $$test.$$pv.time python3 $$pv.py < $$test.in > $$test.$$pv.py.out; \
	    if ! cmp -s $$test.$$pv.py.out $$test.$(EXPECTED); then \
	       diff $$test.$$pv.py.out $$test.$(EXPECTED) > $$test.$$pv.py.diff; \
	    fi; \
	  done; \
	  for pv in $(Python2Versions); do \
	    time -o $$test.$$pv.time python $$pv.py < $$test.in > $$test.$$pv.py.out; \
	    if ! cmp -s $$test.$$pv.py.out $$test.$(EXPECTED); then \
	       diff $$test.$$pv.py.out $$test.$(EXPECTED) > $$test.$$pv.py.diff; \
	    fi; \
	  done; \
	done



page: ${PROBLEM}.pdf



viva: testValidity.txt

testValidity.txt: ${PROBLEM}.viva $(Tests)
	-java -jar ../VIVA_2.0/viva.jar ${PROBLEM}.viva $(Tests) > testValidity.txt
	-grep -v "Testing file:" testValidity.txt



#include make.diffs



clean:
	-/bin/rm -f *.class *.exe *.out *.diff *.time testValidity.txt

#%.${EXPECTED}: %.in $(EXES) $(CLASSES)
#	${Gold} < $*.in > $*.${EXPECTED}


${PROBLEM}.pdf: ${PROBLEM}.tex 
	cd ..; pdflatex -output-directory=${PROBLEM} -jobname=${PROBLEM} "\input{problemPage.tex}\input{${PROBLEM}/${PROBLEM}.tex}\end{document}"

