mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) WORKING_DIR := $(patsubst %/,%,$(dir $(mkfile_path))) BOOKNAME=singalongs SRC_DIR=src BUILD_DIR=build SONG_DIR=${SRC_DIR}/songs BUILD_SONG_DIR=${BUILD_DIR}/songs BUILD_BOOK_DIR=${BUILD_DIR}/book BUILD_OPUS_DIR=${BUILD_DIR}/opus BOOK_FULL=$(BUILD_BOOK_DIR)/full.pdf BOOKLET=$(BUILD_BOOK_DIR)/booklet.pdf GENERATED_SONGS=$(BUILD_DIR)/songs.typ TYP_FILES=$(wildcard ${SONG_DIR}/*.typ) LY_FILES=$(wildcard ${SONG_DIR}/*.ly) LY_PDFS=$(patsubst %.ly,${BUILD_SONG_DIR}/%.pdf,$(notdir ${LY_FILES})) LY_SVGS=$(patsubst %.ly,${BUILD_SONG_DIR}/%.svg,$(notdir ${LY_FILES})) LY_OPUS=$(patsubst %.ly,${BUILD_OPUS_DIR}/%.opus,$(notdir ${LY_FILES})) .PHONY: clean book opus all .DEFAULT_GOAL := all book: $(BOOK_FULL) $(BOOKLET) $(LY_SVGS) $(GENERATED_SONGS) opus: $(LY_OPUS) $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(BUILD_SONG_DIR): mkdir -p $(BUILD_SONG_DIR) $(BUILD_OPUS_DIR): mkdir -p $(BUILD_OPUS_DIR) $(BUILD_BOOK_DIR): mkdir -p $(BUILD_BOOK_DIR) $(GENERATED_SONGS): $(LY_FILES) $(TYP_FILES) bin/generate $(BUILD_SONG_DIR)/%.pdf: $(SONG_DIR)/%.ly $(SRC_DIR)/setup.ly | $(BUILD_SONG_DIR) lilypond --pdf -o $(basename $@) $< pdfcrop $@ $@ $(BUILD_SONG_DIR)/%-1.midi: $(SONG_DIR)/%.ly $(SRC_DIR)/setup.ly | $(BUILD_SONG_DIR) lilypond -o $(BUILD_SONG_DIR)/$* $< $(BUILD_SONG_DIR)/%.svg: $(BUILD_SONG_DIR)/%.pdf | $(BUILD_SONG_DIR) pdftocairo -svg $< $@ ${BUILD_OPUS_DIR}/%.opus: $(BUILD_SONG_DIR)/%-1.midi | $(BUILD_OPUS_DIR) timidity $< -Ow -o - | opusenc - $@ $(BOOK_FULL): $(TYP_FILES) $(LY_SVGS) $(GENERATED_SONGS) $(SRC_DIR)/singalongs.typ $(SRC_DIR)/song.typ | $(BUILD_BOOK_DIR) typst compile --root $(WORKING_DIR) $(SRC_DIR)/singalongs.typ $@ $(BOOKLET): $(BOOK_FULL) pdfjam --booklet true --landscape --a4paper --trim '2cm 0cm 2cm 0cm' --clip true --delta '2.5cm 0cm' --outfile $@ $< all: book opus clean: rm -rf $(BUILD_DIR)