# # 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}"