Last active
November 17, 2019 19:30
-
-
Save SamWhited/7902221 to your computer and use it in GitHub Desktop.
Makefile for sheet music with LilyPond and LaTeX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SHELL = /bin/sh | |
.SUFFIXES: | |
.SILENT: | |
.PHONY: timidity clean | |
# If you want more output, change this. | |
REDIRECT = > /dev/null | |
SHEETMUSICDIR = Songs | |
AOBSHEETMUSICDIR = AOB/Songs | |
DRAFTSHEETMUSICDIR = Drafts/Songs | |
MUSICSOURCEDIR = Source | |
AOBMUSICSOURCEDIR = AOB/Source | |
DRAFTMUSICSOURCEDIR = Drafts/Source | |
SHEETMUSIC = $(wildcard $(SHEETMUSICDIR)/*.lytex) | |
AOBSHEETMUSIC = $(wildcard $(AOBSHEETMUSICDIR)/*.lytex) | |
DRAFTSHEETMUSIC = $(wildcard $(DRAFTSHEETMUSICDIR)/*.lytex) | |
VPATH = $(SHEETMUSICDIR):$(MUSICSOURCEDIR):$(AOBSHEETMUSICDIR):$(AOBMUSICSOURCEDIR):$(DRAFTSHEETMUSICDIR):$(DRAFTMUSICSOURCEDIR) | |
PDFFILES = $(SHEETMUSIC:$(SHEETMUSICDIR)/%.lytex=%.pdf) $(AOBSHEETMUSIC:$(AOBSHEETMUSICDIR)/%.lytex=%.pdf) $(DRAFTSHEETMUSIC:$(DRAFTSHEETMUSICDIR)/%.lytex=%.pdf) | |
MIDIFILES = $(SHEETMUSIC:$(SHEETMUSICDIR)/%.lytex=%.midi) $(AOBSHEETMUSIC:$(AOBSHEETMUSICDIR)/%.lytex=%.midi) $(DRAFTSHEETMUSIC:$(DRAFTSHEETMUSICDIR)/%.lytex=%.midi) | |
FLACFILES = $(SHEETMUSIC:$(SHEETMUSICDIR)/%.lytex=%.flac) $(AOBSHEETMUSIC:$(AOBSHEETMUSICDIR)/%.lytex=%.flac) $(DRAFTSHEETMUSIC:$(DRAFTSHEETMUSICDIR)/%.lytex=%.flac) | |
OUTDIRS = $(SHEETMUSIC:$(SHEETMUSICDIR)/%.lytex=%/) $(AOBSHEETMUSIC:$(AOBSHEETMUSICDIR)/%.lytex=%/) $(DRAFTSHEETMUSIC:$(DRAFTSHEETMUSICDIR)/%.lytex=%/) | |
help: | |
@echo 'Music makefile targets:' | |
@echo ' ' | |
@echo ' help - (this message)' | |
@echo ' music - compile all sheet music' | |
@echo ' midi - compile all sheet music as midi' | |
@echo ' flac - compile all sheet music as midi and flac' | |
@echo ' clean - remove generated files' | |
@echo ' <song> - compile a single song' | |
@echo ' <song>.midi - compile a single song as a midi' | |
@echo ' <song>.flac - compile a single song as midi and flac' | |
@echo ' ' | |
@echo ' AOB: $(AOBSHEETMUSIC:$(AOBSHEETMUSICDIR)/%.lytex=%)' | |
@echo ' Drafts: $(DRAFTSHEETMUSIC:$(DRAFTSHEETMUSICDIR)/%.lytex=%)' | |
@echo ' Other: $(SHEETMUSIC:$(SHEETMUSICDIR)/%.lytex=%)' | |
music: $(PDFFILES) | |
midi: $(MIDIFILES) | |
flac: $(FLACFILES) | |
timidity: | |
@command -v timidity $(REDIRECT) 2>&1 || { \ | |
echo >&2 "Timidity is not installed. No flac file will be generated."; \ | |
exit 1; \ | |
} | |
%.flac: timidity %.midi | |
timidity -OF $(word 2,$^) $(REDIRECT) | |
clean: | |
@$(RM) -rf -- $(PDFFILES) $(MIDIFILES) $(FLACFILES) $(OUTDIRS) | |
%.tex: %.lytex $(MUSICSOURCEDIR)/*.ly $(AOBMUSICSOURCEDIR)/*.ly $(DRAFTMUSICSOURCEDIR)/*.ly | |
lilypond-book --include=$(AOBMUSICSOURCEDIR) \ | |
--include=$(MUSICSOURCEDIR) \ | |
--include=$(DRAFTMUSICSOURCEDIR) \ | |
--latex-program=xelatex --output=$* --pdf $< | |
%.midi: %.tex | |
find $* -name '*.midi' -exec cp \{\} $*.midi \; | |
%.pdf: %.lytex $(MUSICSOURCEDIR)/*.ly $(AOBMUSICSOURCEDIR)/*.ly $(DRAFTMUSICSOURCEDIR)/*.ly %.tex | |
(cd $*; xelatex --interaction=nonstopmode --shell-escape --synctex=2 $*.tex) | |
cp $*/$*.pdf . | |
%: %.pdf %.midi | |
@echo "" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment