ifdef CHORDPRO_PIPELINE CHORDPRO_CMD = chordpro else CHORDPRO_CMD = docker run --rm \ --env HOME=$(HOME) --env USER=$(USER) \ --workdir $(shell pwd) \ --volume $(HOME):$(HOME) \ chordpro/chordpro:latest chordpro --config=chordpro.json endif SRC_EXTENSION := .cho CURRENT_DIR := content/current ARCHIVE_DIR := content/archive # Find all .cho files in both current and archive SONG_CHO := $(shell find $(CURRENT_DIR) $(ARCHIVE_DIR) -type f -name "*$(SRC_EXTENSION)") SONG_PDF := $(SONG_CHO:$(SRC_EXTENSION)=.pdf) SONG_HTML := $(SONG_CHO:$(SRC_EXTENSION)=.html) # Songbook only includes current songs (sorted alphabetically) CURRENT_CHO := $(shell find $(CURRENT_DIR) -type f -name "*$(SRC_EXTENSION)" | sort) CURRENT_PDF := $(CURRENT_CHO:$(SRC_EXTENSION)=.pdf) SONGBOOK := content/songbook.pdf .DEFAULT_GOAL := pdf # Pattern rules that work for nested directories content/%.pdf: content/%$(SRC_EXTENSION) @echo "Building PDF: $@" $(CHORDPRO_CMD) -o $@ $< content/%.html: content/%$(SRC_EXTENSION) @echo "Building HTML: $@" $(CHORDPRO_CMD) -o $@ $< # Aggregate targets all: pdf html songbook pdf: $(SONG_PDF) html: $(SONG_HTML) songbook: $(SONGBOOK) # Songbook combines alphabetically sorted PDFs $(SONGBOOK): $(CURRENT_PDF) @echo "Creating songbook (alphabetically sorted)..." gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=$@ $(CURRENT_PDF) clean: rm -f $(SONG_PDF) $(SONG_HTML) $(SONGBOOK)