DIR=${PWD} PROBLEM=$(notdir ${DIR}) # CS=$(CVersions:%=cpp/%.c) CPPS=$(CPPVersions:%=cpp/%.cpp) JAVAS=$(JAVAVersions:%=java/%.java) EXES=$(CPPS:%.cpp=%.exe) $(CS:%.c=%.exe) CLASSES=$(JAVAS:%.java=%.class) TestIn=$(Tests:%=%.in) TestAns=$(Tests:%=%.expected) COutputs=$(foreach cppv,$(CVersions),$(addsuffix .$(cppv),$(Tests))) CPPOutputs=$(foreach cppv,$(CPPVersions),$(addsuffix .$(cppv),$(Tests))) JavaOutputs=$(foreach javav,$(JAVAVersions),$(addsuffix .$(javav),$(Tests))) CPPdiffs=$(CPPOutputs:%=%.diff) Cdiffs=$(COutputs:%=%.diff) Javadiffs=$(JavaOutputs:%=%.diff) # # CFLAGS=-g -O2 -std=gnu99 -static CPPFLAGS=-g -O2 -std=gnu++11 -static # all: viva allDiffs page cat *.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 > $@ %.expected: %.expected.txt tr -d '\r' < $*.expected.txt > $@ %.exe: %.c g++ $(CFLAGS) -o $@ $*.c -lm %.exe: %.cpp g++ $(CPPFLAGS) -o $@ $*.cpp %.class: %.java javac -g -cp java $*.java page: ${PROBLEM}.pdf viva: testValidity.txt testValidity.txt: ${PROBLEM}.viva $(TestIn) java -jar ../../VIVA/viva.jar ${PROBLEM}.viva $(TestIn) > testValidity.txt include make.diffs make.diffs: makefile -rm make.diffs echo allDiffs: compile $(CPPdiffs) $(Cdiffs) $(Javadiffs) > $@ echo >> $@ for test in $(Tests); do \ for cppv in $(CPPVersions); do \ echo $$test.$$cppv.out: $$test.in cpp/$$cppv.exe >> $@ ;\ echo '\t' time -o $$test.$$cppv.time cpp/$$cppv.exe '<' $$test.in '>' $$test.$$cppv.out >> $@; \ echo >> $@; \ echo $$test.$$cppv.diff: $$test.expected $$test.$$cppv.out >> $@ ;\ echo '\t' cmp $$test.$$cppv.out $$test.expected '>' $$test.$$cppv.diff >> $@ ; \ echo >> $@; \ done; \ for cppv in $(CVersions); do \ echo $$test.$$cppv.out: $$test.in cpp/$$cppv.exe >> $@ ;\ echo '\t' time -o $$test.$$cppv.time cpp/$$cppv.exe '<' $$test.in '>' $$test.$$cppv.out >> $@; \ echo >> $@; \ echo $$test.$$cppv.diff: $$test.expected $$test.$$cppv.out >> $@ ;\ echo '\t' cmp $$test.$$cppv.out $$test.expected '>' $$test.$$cppv.diff >> $@ ; \ echo >> $@; \ done; \ for javav in $(JAVAVersions); do \ echo $$test.$$javav.out: $$test.in java/$$javav.class >> $@ ;\ echo '\t' time -o $$test.$$javav.time java -cp java $$javav '<' $$test.in '>' $$test.$$javav.out >> $@; \ echo >> $@; \ echo $$test.$$javav.diff: $$test.expected $$test.$$javav.out >> $@ ;\ echo '\t' cmp $$test.$$javav.out $$test.expected '>' $$test.$$javav.diff >> $@ ; \ echo >> $@; \ done \ done clean: -/bin/rm -f java/*.class cpp/*.exe *.diff *.out testValidity.txt ${PROBLEM}.pdf: ${PROBLEM}.tex test0.in test0.expected cd ..; pdflatex -output-directory=${PROBLEM} -jobname=${PROBLEM} "\input{problemPage.tex}\input{${PROBLEM}/${PROBLEM}.tex}\end{document}"