.PHONY: all clean show-errors show-log watch highlighted help

TEXFILE ?= $(if $(wildcard main.tex),main.tex,$(firstword $(filter-out highlighted.tex old.tex,$(wildcard *.tex))))
PROJECT = $(basename $(TEXFILE))
LATEXMK = latexmk
OUTDIR  = build
OLDTEX ?= old.tex
MAKELOG = $(OUTDIR)/make.log
TEXLOG  = $(OUTDIR)/$(PROJECT).log
ARTIFACTS = $(PROJECT).aux $(PROJECT).bbl $(PROJECT).blg $(PROJECT).log $(PROJECT).out \
	$(PROJECT).toc $(PROJECT).synctex.gz $(PROJECT).fls $(PROJECT).fdb_latexmk $(PROJECT).xdv

all:
	@mkdir -p $(OUTDIR)
	@echo "Compiling $(PROJECT).tex (full log: $(MAKELOG))..."
	@$(LATEXMK) -xelatex -outdir=$(OUTDIR) -interaction=nonstopmode $(PROJECT).tex < /dev/null > $(MAKELOG) 2>&1; \
	status=$$?; \
	if [ $$status -ne 0 ]; then \
		echo "Build failed."; \
		$(MAKE) -s show-errors; \
		echo "Full log: $(MAKELOG)"; \
		exit $$status; \
	fi
	@cp $(OUTDIR)/$(PROJECT).pdf ./$(PROJECT).pdf
	@rm -f $(ARTIFACTS)
	@echo "Done: $(PROJECT).pdf"

show-errors:
	@if [ -f $(TEXLOG) ]; then \
		grep -E -A2 '^! |^l\.[0-9]+ |LaTeX Error|Undefined control sequence|Missing \$$ inserted|Package .* Error|Emergency stop|Fatal error' \
			$(TEXLOG) 2>/dev/null \
			|| tail -30 $(MAKELOG); \
	else \
		tail -30 $(MAKELOG); \
	fi

show-log:
	@less $(MAKELOG)

highlighted:
	@latexdiff --preamble=diffpreamble.dtx --allow-spaces $(OLDTEX) $(PROJECT).tex > highlighted.tex
	@echo "Generated: highlighted.tex"

clean:
	$(LATEXMK) -C -outdir=$(OUTDIR) $(PROJECT).tex
	rm -rf $(OUTDIR)
	rm -f highlighted.* $(ARTIFACTS)

watch:
	$(LATEXMK) -pvc -xelatex -outdir=$(OUTDIR) -interaction=nonstopmode $(PROJECT).tex

help:
	@echo
	@echo '1. "make"            compile (latexmk, output in build/, PDF copied to root; on error prints the failing lines and stops)'
	@echo '2. "make show-errors" re-print the error lines from the last build'
	@echo '3. "make show-log"   page through the full build log'
	@echo '4. "make highlighted" generate latexdiff highlighted.tex (default OLDTEX=old.tex; override with make highlighted OLDTEX=path/to/prev.tex)'
	@echo '5. "make watch"      continuous preview-compile (latexmk -pvc)'
	@echo '6. "make clean"      remove build/ and stray artifacts'
	@echo
