
BASEFILE=junit-testgen
EXERPT=
COMMONDEPENDENCIES=example/university.ocl appendix/testdatagrammar.ebnf

XDVIOPTS=
XPDFPAGE=
PDFVIEWEROPTS=
LTXOPTS=-halt-on-error
TEXDEPENDENCIES=$(shell ls *.tex */*.tex *.bbl) 
TEXINPUTS=$(shell find . -type d -a ! -name "CVS" ! -path "*.svn*" -exec echo -n \{\}: \;)
SUBDIRS=$(shell for i in */Makefile ; do echo $$(dirname $$i) ; done)
IMAGES=$(shell find . -type f -a \( -name "*.pdf" -o -name "*.ps" -o -name "*.eps" \) -a ! -name $(BASEFILE).pdf -a ! -name $(BASEFILE).ps -a ! -name booklet.ps -a ! -name $(BASEFILE)-2x1.pdf)

LATEX=latex
PDFLATEX=pdflatex
PDFVIEWER=xpdf

UNDEFCIT='^LaTeX Warning: Citation .* undefined on input .*' 
RERUN='(LaTeX Warning: .* Rerun to get cross-references right.|pdfTeX warning \(dest\): .* has been referenced)'
ERRORS='(Warning|Error|Overfull|Underfull)'


define run-latex
		echo "Executing $(1)..."
		TEXINPUTS=${TEXINPUTS} $(1) ${LTXOPTS} $< >/dev/null
		egrep -i $(ERRORS) $(BASEFILE).log || true
		if egrep ${UNDEFCIT} ${BASEFILE}.log >/dev/null; then bibtex ${BASEFILE} ; fi
		count=0;\
		while egrep ${RERUN} ${BASEFILE}.log >/dev/null || grep ${UNDEFCIT} ${BASEFILE}.log >/dev/null; do \
			TEXINPUTS=${TEXINPUTS} $(1) ${LTXOPTS} $< >/dev/null; \
			egrep -i $(ERRORS) $(BASEFILE).log || true; \
			if [ $$count -ge 1 ] && egrep ${UNDEFCIT} ${BASEFILE}.log >/dev/null; then \
				exit 1; \
			fi; \
			count=$$((count+1)); \
		done
		echo "Done."
endef

.PHONY: all ps exerptview view macview clean subdirs $(SUBDIRS) 2up booklet

all: ${BASEFILE}.pdf

ps: ${BASEFILE}.ps

subdirs: $(SUBDIRS)

$(SUBDIRS):
		$(MAKE) -C $@

%.pdf: %.tex $(TEXDEPENDENCIES) $(IMAGES) $(COMMONDEPENDENCIES)
		@$(call run-latex,$(PDFLATEX))

%.ps: %.pdf
		pdftops -paper A4 $< $@ 

%-1.pdf: %.mp
		if [ -f $$(dirname $<)/Makefile ] ; then $(MAKE) -C $$(dirname $<) ; fi

exerptview:
		echo "\input{head}\input{commands}\graphicspath{{measurements/}}\begin{document}\input{${EXERPT}}\end{document}" > exerpt.tex
		pdflatex exerpt.tex
		${PDFVIEWER} ${PDFVIEWEROPTS} exerpt.pdf ${XPDFPAGE}

2up: ${BASEFILE}.pdf
		pdfnup --nup 2x1 --openright true junit-testgen.pdf

booklet: ${BASEFILE}.ps
		psbook $< | psnup -p A4 -2 > $@.ps

view: ${BASEFILE}.pdf
		${PDFVIEWER} ${PDFVIEWEROPTS} $< ${XPDFPAGE}

macview: ${BASEFILE}.pdf
		open $<

clean:
		rm -vrf *.aux *.dvi *.toc *.log *~ *.pdf *.ps *.lof *.lot *.out *.lol *.bbl *.blg booklet.ps ${BASEFILE}-2x1.pdf

