SHELL=/bin/bash

DOCNUM:=m52517

is_pre_v1=$(findstring v1,$(shell git describe --always --tags --abbrev=0))

DISTFILES:=\
	$(DOCNUM).pdf \
	$(if $(is_pre_v1),,CHANGES.txt) \
	graph-sweep-facade_00064_vox11.pdf \
	graph-sweep-facade_00064_vox14.pdf \
	graph-sweep-facade_00064_vox20.pdf \
	graph-sweep-ford_01_q1mm.pdf \
	graph-sweep-longdress_vox10_1300.pdf \
	graph-sweep-loot_viewdep_vox12.pdf \
	graph-sweep-qnxadas-junction-approach.pdf \
	graph-sweep-queen_0200.pdf \
	graph-sweep-stanford_area_2_vox16.pdf \
	graph-sweep-ulb_unicorn_vox20.pdf \
	$(NULL)

LATEX:=$(shell which xelatex || which pdflatex || which latex) -shell-escape
BIBTOOL:=$(shell which bibtool || echo echo Warning: bibtool not present '\#')
BIBDIR:=~/work/mpeg/bib/

all: $(DOCNUM).pdf

dist: $(DOCNUM)_$(shell git describe --tags --always).zip

%.aux: %.tex
	$(LATEX) $(LATEXFLAGS) $<

%.bib: %.tex %.aux
	$(BIBTOOL) \
		-q -s -d -r <(echo check.double.delete = ON) \
		-i $(BIBDIR)/mpeg.bib -x $(*F).aux -o $@
	touch $@

%.bbl: %.tex %.aux %.bib
	-bibtex $(*F)

ifneq ($(LATEX),latex)
%.pdf: %.tex %.bbl
	$(LATEX) $(LATEXFLAGS) $<
	$(LATEX) $(LATEXFLAGS) $<
endif

%.pdf: %.dvi
	dvipdfm $*.dvi

%.dvi: %.tex %.bbl
	$(LATEX) $(LATEXFLAGS) $<
	$(LATEX) $(LATEXFLAGS) $<

%.rtf: %.tex %.bbl
	latex2rtf -E0 $<

%.html: %.tex %.bbl
	htlatex $<
	which htmlinlinedata && htmlinlinedata $@ > $@.merged && mv $@.merged $@

##
# generate change log from revision history
#  - filter the log to remove branch names if decorated
.PHONY: CHANGES.txt
CHANGES.txt:
	git rev-list --quiet -0 v1 2>/dev/null \
	&& git log  --invert-grep --grep='^(wip:|ignore:)' --decorate v1.. > $@ \
	|| git log --invert-grep --grep='^(wip:|ignore:)' --decorate > $@
	perl -p -i -e \
		's/((?<=\()|(?<=[\(,] ))(?!tag:)[^,)]*((, )|(?=\)))//g if m{^commit};' \
		$@

$(DOCNUM)-diff%.pdf: LATEXFLAGS=--interaction=batchmode
$(DOCNUM)-diff%.tex:
	-latexdiff-vc \
		--exclude-safecmd=textbf \
		--append-context1cmd=subfloat \
		--append-context2cmd=multicolumn \
		--encoding=utf8 \
		--force \
		--subtype=COLOR --git -r $* $(DOCNUM).tex

REVISIONS:=$(filter-out v1,$(shell git tag -l 'v*'))
DISTFILES+=$(foreach version,$(REVISIONS),$(DOCNUM)-diff$(shell git describe --tags --abbrev=0 $(version)^)..$(version).pdf)

F=$(if $(FORCE),-)
$(DOCNUM)_%.zip: $(DISTFILES)
	$Fgit diff --quiet || ( echo "Uncommited changes, please commit" && exit 1 )
	git archive --format=zip --prefix=doc/ $(*F) > $@
	zip -r $@ $(DISTFILES)
	zip -d $@ $$(zipinfo -1 $@ -x 'doc/*' | sed -e 's!^!doc/!') || exit 0
