# vimtex and make watch write into build/ (set in .latexmkrc); make writes into build/make/, so it can run while a watch is compiling.  make builds the full version into main.pdf and the conference version into main-conf.pdf.

LATEXMK  := latexmk
FLAGS    := -interaction=nonstopmode -halt-on-error -file-line-error
FULL     := build/make/full
CONF     := build/make/conf
ARXIV    := build/arxiv

FIG_SRC  := $(wildcard figures/src/*.tex)
FIG_PDF  := $(FIG_SRC:figures/src/%.tex=figures/build/%.pdf)
FIG_DATA := $(wildcard figures/data/*)

.PHONY: all full conf figures watch clean arxiv wordcount

all: full conf

full: figures
	$(LATEXMK) $(FLAGS) -outdir=$(FULL) main.tex
	cp $(FULL)/main.pdf main.pdf.tmp && mv main.pdf.tmp main.pdf

# The conference version defines \conference before main.tex is read; the last line prints the page on which its References heading lands.
conf: figures
	$(LATEXMK) $(FLAGS) -outdir=$(CONF) -usepretex='\def\conference{}' main.tex
	cp $(CONF)/main.pdf main-conf.pdf.tmp && mv main-conf.pdf.tmp main-conf.pdf
	@sed -n 's/^\\newlabel{references}{{[^}]*}{\([^}]*\)}.*/Conference version: References on page \1/p' $(CONF)/main.aux

figures: $(FIG_PDF)

# Each figure is compiled from figures/src/ into a temporary folder and moved into place, so a running watch never reads a half-written PDF.
figures/build/%.pdf: figures/src/%.tex $(FIG_DATA) | figures/build
	@tmp=$$(mktemp -d figures/build/.tmp.XXXXXX); \
	if (cd figures/src && pdflatex $(FLAGS) -output-directory=$(CURDIR)/$$tmp $*.tex > /dev/null); then \
	  mv $$tmp/$*.pdf $@ && rm -rf $$tmp && echo "Built $@"; \
	else \
	  cat $$tmp/$*.log; rm -rf $$tmp; exit 1; \
	fi

figures/build:
	mkdir -p $@

watch: figures
	$(LATEXMK) -pvc -view=none -synctex=1 -interaction=nonstopmode -file-line-error main.tex

clean:
	rm -rf build figures/build

# The tarball holds the full version: main.tex, sections/, appendix/, macros/, bib/, the compiled figures, the .bbl and the files of venue/; context/, scratch/, ingest/, .claude/, CLAUDE.md, writing-style-guide.md, claudese.md and .mcp.json stay out.
arxiv: full
	rm -rf $(ARXIV) && mkdir -p $(ARXIV)/figures/build
	cp -r main.tex sections appendix macros bib $(ARXIV)/
	cp figures/build/*.pdf $(ARXIV)/figures/build/
	cp $(FULL)/main.bbl $(ARXIV)/
	find venue -type f ! -name .gitkeep -exec cp {} $(ARXIV)/ \;
	tar -czf build/arxiv.tar.gz -C $(ARXIV) .
	@echo "Wrote build/arxiv.tar.gz"

wordcount:
	texcount -sum sections/*.tex appendix/*.tex
