Fix Makefile to auto-stabilize TOC with up to 5 passes
The .songtoc file needs multiple passes to stabilize: pass 1 writes song data, pass 2 reads it into the TOC (changing page count), pass 3+ stabilizes page references. The Makefile now loops until the log shows no more "Rerun" warnings or max 5 passes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
15
Makefile
15
Makefile
@@ -1,6 +1,7 @@
|
|||||||
MAIN = songbook
|
MAIN = songbook
|
||||||
ENGINE = lualatex
|
ENGINE = lualatex
|
||||||
OUTDIR = output
|
OUTDIR = output
|
||||||
|
TEXENV = TEXINPUTS=.:$(shell pwd):$(shell pwd)/$(OUTDIR):
|
||||||
FLAGS = --output-directory=$(OUTDIR) --interaction=nonstopmode
|
FLAGS = --output-directory=$(OUTDIR) --interaction=nonstopmode
|
||||||
|
|
||||||
.PHONY: all clean distclean
|
.PHONY: all clean distclean
|
||||||
@@ -10,10 +11,18 @@ all: $(OUTDIR)/$(MAIN).pdf
|
|||||||
$(OUTDIR):
|
$(OUTDIR):
|
||||||
mkdir -p $(OUTDIR)
|
mkdir -p $(OUTDIR)
|
||||||
|
|
||||||
|
# Run until page references stabilize (max 5 passes).
|
||||||
|
# The .songtoc file needs: pass 1 to write, pass 2 to read into TOC,
|
||||||
|
# pass 3+ to stabilize page numbers after TOC page count changes.
|
||||||
$(OUTDIR)/$(MAIN).pdf: $(MAIN).tex songbook-style.sty songs/*.tex | $(OUTDIR)
|
$(OUTDIR)/$(MAIN).pdf: $(MAIN).tex songbook-style.sty songs/*.tex | $(OUTDIR)
|
||||||
TEXINPUTS=.:$(shell pwd):$(shell pwd)/$(OUTDIR): $(ENGINE) $(FLAGS) $(MAIN).tex
|
@for i in 1 2 3 4 5; do \
|
||||||
TEXINPUTS=.:$(shell pwd):$(shell pwd)/$(OUTDIR): $(ENGINE) $(FLAGS) $(MAIN).tex
|
echo "=== LaTeX pass $$i ==="; \
|
||||||
TEXINPUTS=.:$(shell pwd):$(shell pwd)/$(OUTDIR): $(ENGINE) $(FLAGS) $(MAIN).tex
|
$(TEXENV) $(ENGINE) $(FLAGS) $(MAIN).tex || true; \
|
||||||
|
if [ $$i -ge 3 ] && ! grep -q "Rerun" $(OUTDIR)/$(MAIN).log 2>/dev/null; then \
|
||||||
|
echo "=== Stable after $$i passes ==="; \
|
||||||
|
break; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(OUTDIR)/*.aux $(OUTDIR)/*.log $(OUTDIR)/*.out \
|
rm -f $(OUTDIR)/*.aux $(OUTDIR)/*.log $(OUTDIR)/*.out \
|
||||||
|
|||||||
Reference in New Issue
Block a user