Skip to content

Instantly share code, notes, and snippets.

@SamWhited
Last active November 17, 2019 19:30
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SamWhited/7902221 to your computer and use it in GitHub Desktop.
Save SamWhited/7902221 to your computer and use it in GitHub Desktop.
Makefile for sheet music with LilyPond and LaTeX
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