|
1 | | -# Makefile for building The Barry Book |
2 | | -# Builds LaTeX document and places all output in bin/ |
3 | | - |
4 | | -# Absolute repo root so lilypond-book → lilypond -I survives any cwd (e.g. CI Docker). |
5 | 1 | BOOK_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) |
6 | | - |
7 | | -# Same image as CI (.github/workflows/main.yml). |
8 | 2 | DOCKER_LILYPOND_IMAGE ?= kyledickersoncomposer/docker-lilypond:latest |
9 | | - |
10 | 3 | MAIN = main |
11 | | -OUTPUT_DIR = bin |
12 | | -LILYPOND_BOOK = lilypond-book |
13 | | - |
14 | | -# Promote LilyPond warnings (including bar checks: "warning: barcheck failed") to fatal errors. |
15 | | -# Without this, barcheck issues still produce a PDF and exit 0. |
16 | | -LILYPOND_FLAGS ?= -dwarning-as-error |
17 | | - |
18 | | -# lilypond-book hides each snippet’s LilyPond stderr unless this is set (default was none). |
19 | | -LILYBOOK_LILY_LOGLEVEL ?= WARNING |
20 | | - |
21 | | -# Second pass in make lily-check: parallel lilypond on each extracted lily-*.ly. |
22 | | -LILY_CHECK_JOBS ?= 8 |
23 | | - |
24 | | -# LaTeX compiler |
25 | | -LATEX = pdflatex |
26 | | -BIBTEX = biber |
27 | | -MAKEGLOSSARIES = makeglossaries |
28 | | -LATEX_FLAGS = -output-directory=$(OUTPUT_DIR) -interaction=nonstopmode |
29 | | - |
30 | | -docker-pull: |
31 | | - docker pull --platform linux/amd64 $(DOCKER_LILYPOND_IMAGE) |
32 | | - |
33 | | -# Environment passed into scripts/docker/run-*.sh (see those files for the full pipeline). |
34 | | -DOCKER_RUN = docker run --rm --platform linux/amd64 --pull missing \ |
35 | | - -v "$(BOOK_ROOT):/workdir" -w /workdir |
36 | | -DOCKER_ENV_COMMON = \ |
37 | | - -e MAIN=$(MAIN) \ |
38 | | - -e OUTPUT_DIR=$(OUTPUT_DIR) \ |
39 | | - -e LILYPOND_BOOK=$(LILYPOND_BOOK) \ |
40 | | - -e LILYPOND_FLAGS="$(LILYPOND_FLAGS)" \ |
41 | | - -e LILYBOOK_LILY_LOGLEVEL=$(LILYBOOK_LILY_LOGLEVEL) \ |
42 | | - -e LATEX=$(LATEX) \ |
43 | | - -e BIBTEX=$(BIBTEX) \ |
44 | | - -e MAKEGLOSSARIES=$(MAKEGLOSSARIES) \ |
45 | | - -e LATEX_FLAGS="$(LATEX_FLAGS)" |
46 | 4 |
|
47 | | -.PHONY: _lily_snippets check-ly clean docx docker-pull lily lily-check open pdf require-pandoc |
| 5 | +.PHONY: run pdf open clean docx require-pandoc |
48 | 6 |
|
| 7 | +run: |
| 8 | + make pdf |
| 9 | + make open |
49 | 10 | pdf: |
50 | | - $(DOCKER_RUN) $(DOCKER_ENV_COMMON) \ |
51 | | - $(DOCKER_LILYPOND_IMAGE) \ |
52 | | - bash /workdir/scripts/docker/run-pdf.sh |
53 | | - |
54 | | -# Strict LilyPond pass: clears cached lily-*.ly (so lilypond-book cannot skip stale snippets), then |
55 | | -# lilypond-book, then runs lilypond again on each extracted snippet in parallel (full stderr per file). |
56 | | -check-ly: |
57 | | - @$(MAKE) lily-check |
58 | | - |
59 | | -lily-check: |
60 | | - @$(MAKE) _lily_snippets LILYBOOK_LOGLEVEL=PROGRESS LILY_SNIPPET_STRICT=1 |
61 | | - |
62 | | -# Verbose snippet run (maps generated files to .tex in the log). |
63 | | -lily: |
64 | | - @$(MAKE) _lily_snippets LILYBOOK_LOGLEVEL=DEBUG |
65 | | - |
66 | | -# Internal: do not call directly unless LILYBOOK_LOGLEVEL is set (PROGRESS or DEBUG). |
67 | | -# LILY_SNIPPET_STRICT=1 (make lily-check): delete cached lily-*.ly, then per-snippet lilypond re-run. |
68 | | -_lily_snippets: LILYBOOK_LOGLEVEL ?= PROGRESS |
69 | | -_lily_snippets: LILY_SNIPPET_STRICT ?= 0 |
70 | | -_lily_snippets: |
71 | | - $(DOCKER_RUN) $(DOCKER_ENV_COMMON) \ |
72 | | - -e LILYBOOK_LOGLEVEL=$(LILYBOOK_LOGLEVEL) \ |
73 | | - -e LILY_SNIPPET_STRICT=$(LILY_SNIPPET_STRICT) \ |
74 | | - -e LILY_CHECK_JOBS=$(LILY_CHECK_JOBS) \ |
75 | | - $(DOCKER_LILYPOND_IMAGE) \ |
76 | | - bash /workdir/scripts/docker/run-lily-snippets.sh |
77 | | - |
| 11 | + docker build -t barry-book . |
| 12 | + docker run --rm -v "$(BOOK_ROOT)/bin:/workdir/bin" barry-book |
| 13 | + |
78 | 14 | require-pandoc: |
79 | 15 | @command -v pandoc >/dev/null 2>&1 || { \ |
80 | 16 | echo "pandoc is required for DOCX export."; \ |
81 | 17 | echo "Install it with: brew install pandoc"; \ |
82 | 18 | exit 1; \ |
83 | 19 | } |
84 | | - |
85 | 20 | docx: pdf require-pandoc |
86 | | - @echo "Exporting $(OUTPUT_DIR)/$(MAIN).docx for Google Docs spell checking..." |
87 | | - cd $(OUTPUT_DIR) && pandoc \ |
| 21 | + @echo "Exporting bin/$(MAIN).docx for Google Docs spell checking..." |
| 22 | + cd bin && pandoc \ |
88 | 23 | --standalone \ |
89 | 24 | --from=latex \ |
90 | 25 | --to=docx \ |
91 | 26 | --resource-path=.:.. \ |
92 | 27 | --metadata=title:"The Barry Book" \ |
93 | 28 | --output=$(MAIN).docx \ |
94 | | - $(MAIN).tex |
95 | | - @echo "DOCX export complete! Output: $(OUTPUT_DIR)/$(MAIN).docx" |
96 | | - |
| 29 | + ../$(MAIN).tex |
| 30 | + @echo "DOCX export complete! Output: bin/$(MAIN).docx" |
97 | 31 | open: |
98 | | - open $(OUTPUT_DIR)/$(MAIN).pdf |
99 | | - |
| 32 | + open bin/$(MAIN).pdf |
100 | 33 | clean: |
101 | | - @echo "Cleaning build artifacts..." |
102 | | - @rm -rf $(OUTPUT_DIR) |
103 | | - @find . -maxdepth 1 -name "tmp*" -type f -delete 2>/dev/null |
104 | | - @find . -maxdepth 1 -name "*.tmp" -type f -delete 2>/dev/null |
105 | | - @echo "Clean complete!" |
| 34 | + rm -rf bin |
0 commit comments