diff --git a/make-includes/build_lecture_rules.make b/make-includes/build_lecture_rules.make new file mode 100755 index 0000000..f01fe8f --- /dev/null +++ b/make-includes/build_lecture_rules.make @@ -0,0 +1,315 @@ +################################################################################ +# +# File: $Id$ +# +# Standard variables and rules for building a set of lecture files. +# Altering these definitions will affect ALL LECTURE MAKEFILES FOR ALL +# PAPERS!! If you need to do something specific for a particular paper, +# include a custom rule in its makefile. DON'T add it here! +# +################################################################################ + + +################################################################################ +# +# Standard file suffixes. +# +.SUFFIXES: +.SUFFIXES: .pdf .tex .graffle .png .tif .plo + + +################################################################################ +# +# Standard directories. +# +IMGDIR=images + + +################################################################################ +# +# Standard paths. +# +vpath %.graffle $(IMGDIR) +vpath %.pdf $(IMGDIR) +vpath %.png $(IMGDIR) +vpath %.tif $(IMGDIR) +vpath %.plo $(IMGDIR) + + +################################################################################ +# +# Standard file list variables. +# +# List of images used in the presentation as actual content. +# +SLIDE_IMAGES= +# +# List of images used in the presentation as backgrounds or watermarks. +# +SLIDE_BACKGROUNDS= +# +# List of images used in the figures and examples document. +# +FIG_IMAGES= +# +# Files to be cleaned by the various "clean" targets. +# +TIDY_FILES=*.tmp *.aux *.out *.log *.nav *.toc *.snm *.head *.dvi \ + slides-combined.pdf slides-notes.pdf +CLEAN_FILES=*.pdf + + +################################################################################ +# +# Various environment variables. +# +# Set DRAFT to anything to run in draft mode (e.g., make DRAFT=draft xxx). +# +DRAFT= +# +# Specify LaTeX document options (comma-separated list) +# +LATEX_OPTS=pdftex,usepdftitle=false,$(DRAFT) +# +# Base file names for the various documents. +# +SLIDES?=Chapter$(CHAPTER)slides +FIGURES?=Chapter$(CHAPTER)figures +COMBINED?=Chapter$(CHAPTER)combined +NOTES?=Chapter$(CHAPTER)notes +# +# List of standard "phony" build targets. +# +TARGETS=all slides notes slides-combined slides-notes figures combined \ + debug test clean tidy targets +# +.PHONY: $(TARGETS) + + +################################################################################ +# +# Display a message if someone tries to build a target that has been +# disabled (by setting the appropriate variable to empty in the makefile). +# +disabled_message=@echo The \"$(1)\" target has been disabled for this chapter. + + +################################################################################ +# +# Build everything. +# +all: slides notes figures combined + + +ifneq ($(strip $(SLIDES)),) +################################################################################ +# +# Set the prerequisites for the "slides" build target, depending on +# whether the figures document exists. +# +ifeq ($(strip $(FIGURES)),) +SLIDES_PREREQS:=$(SLIDES).pdf +else +SLIDES_PREREQS:=figures $(SLIDES).pdf +endif + +################################################################################ +# +# Build the slides for the presentation. Include the figures .aux file for +# inter-document cross-references, but only if $(FIGURES) is non-empty. If +# $(SLIDES) is empty, these rules are ignored. +# +slides: $(SLIDES_PREREQS) + +$(SLIDES).pdf: $(SLIDES).tex $(SLIDE_IMAGES) + pdflatex --jobname=$(SLIDES) '\documentclass[$(LATEX_OPTS)]{beamer}\input{$(SLIDES)}' + pdflatex --jobname=$(SLIDES) '\documentclass[$(LATEX_OPTS)]{beamer}\input{$(SLIDES)}' + +else + +slides: + $(call disabled_message,$@) + +endif + + +ifneq ($(strip $(NOTES)),) +################################################################################ +# +# Build the slides with notes. If $(NOTES) is empty, these rules are +# ignored. +# +slides-notes: slides-notes.pdf + +slides-notes.pdf: $(SLIDES).tex $(SLIDE_IMAGES) + pdflatex --jobname=slides-notes '\documentclass[$(LATEX_OPTS),notes=onlyslideswithnotes]{beamer}\input{$(SLIDES)}' + pdflatex --jobname=slides-notes '\documentclass[$(LATEX_OPTS),notes=onlyslideswithnotes]{beamer}\input{$(SLIDES)}' + +################################################################################ +# +# Build the slides with notes, 6-up. If $(NOTES) is empty, these rules are +# ignored. +# +notes: $(NOTES).pdf + +$(NOTES).pdf: slides-notes.pdf + pdfnup --nup 2x3 --outfile $@ $< + +else + +notes slides-notes: + $(call disabled_message,$@) + +endif + + +ifneq ($(strip $(COMBINED)),) +################################################################################ +# +# Set the prerequisites for the "combined" build target, depending on +# whether the figures document exists. +# +ifeq ($(strip $(FIGURES)),) +COMBINED_PREREQS:=$(COMBINED).tex slides-combined.pdf +else +COMBINED_PREREQS:=$(COMBINED).tex slides-combined.pdf $(FIGURES).pdf +endif + +################################################################################ +# +# Build the slides for the combined document. If $(COMBINED) is empty, +# these rules are ignored. +# +slides-combined: slides-combined.pdf + +slides-combined.pdf: $(SLIDES).tex $(SLIDE_IMAGES) + pdflatex --jobname=slides-combined '\documentclass[$(LATEX_OPTS),handout]{beamer}\input{$(SLIDES)}' + pdflatex --jobname=slides-combined '\documentclass[$(LATEX_OPTS),handout]{beamer}\input{$(SLIDES)}' + +################################################################################ +# +# Build the complete combined document. If $(COMBINED) is empty, these +# rules are ignored. If $(FIGURES) is empty, they are omitted from the +# combined document. +# +combined: $(COMBINED).pdf + +$(COMBINED).pdf: $(COMBINED_PREREQS) + pdflatex $< + pdflatex $< + +else + +combined slides-combined: + $(call disabled_message,$@) + +endif + + +ifneq ($(strip $(FIGURES)),) +################################################################################ +# +# Build the figures and examples document. If $(FIGURES) is empty, +# these rules are ignored. +# +figures: $(FIGURES).pdf + +$(FIGURES).pdf: $(FIGURES).tex $(FIG_IMAGES) + pdflatex $< + pdflatex $< + +else + +figures: + $(call disabled_message,$@) + +endif + + +################################################################################ +# +# Build the test document. +# +test: test.pdf + +test.pdf: test.tex + + +################################################################################ +# +# Debugging: print the values of the standard variables. +# +debug: + @announce Externally defined variables + @echo "TEACHING_SHARED = [$(TEACHING_SHARED)]" + @echo "CHAPTER = [$(CHAPTER)]" + @announce Internally defined variables + @echo "GLOBAL_HANDBOOK_INCLUDE = [$(GLOBAL_HANDBOOK_INCLUDE)]" + @echo "SLIDE_IMAGES = [$(SLIDE_IMAGES)]" + @echo "SLIDE_BACKGROUNDS = [$(SLIDE_BACKGROUNDS)]" + @echo "FIG_IMAGES = [$(FIG_IMAGES)]" + @echo "TIDY_FILES = [$(TIDY_FILES)]" + @echo "CLEAN_FILES = [$(CLEAN_FILES)]" + @echo "DRAFT = [$(DRAFT)]" + @echo "LATEX_OPTS = [$(LATEX_OPTS)]" + @echo "SLIDES = [$(SLIDES)]" + @echo "FIGURES = [$(FIGURES)]" + @echo "COMBINED = [$(COMBINED)]" + @echo "NOTES = [$(NOTES)]" + @echo "SLIDES_PREREQS = [$(SLIDES_PREREQS)]" + @echo "COMBINED_PREREQS = [$(COMBINED_PREREQS)]" + @echo "TARGETS = [$(TARGETS)]" + + +################################################################################ +# +# Clean up: get rid of all the temporary files. +# +tidy: + rm -f $(TIDY_FILES) +# +# Clean up: get rid of everything except the original source. +# +clean: tidy + rm -f $(CLEAN_FILES) + + +################################################################################ +# +# List all "phony" build targets. +# +targets: + @echo "targets: $(TARGETS)" + + +################################################################################ +# +# Standard default rules. +# +# PDF from LaTeX via DVI, typically for images drawn using PSTricks). +# +%.pdf: $(IMGDIR)/%.tex + latex --jobname=$(IMGDIR)/$* $< + dvips -q -f $(IMGDIR)/$* | ps2eps -q -l | epstopdf -f -o=$(IMGDIR)/$@ +# +# PDF from LaTeX. +# +%.pdf: %.tex + pdflatex $< + pdflatex $< +# +# PDF from OmniGraffle. (We can't automate this.) +# +%.pdf: %.graffle + @echo "$(notdir $<): regenerate $(notdir $@)" + @exit 1 +# +# PNG from TIFF. +# +%.png: %.tif + convert "$<" $(IMGDIR)/$@ +# +# PDF from Ploticus. +# +%.pdf: %.plo + ploticus -eps -tightcrop -o stdout $< | shiftbbox | epstopdf --filter --outfile=$(IMGDIR)/$@