slidenado/Makefile

47 lines
1.5 KiB
Makefile
Raw Normal View History

2018-08-19 15:23:40 +02:00
PRESENTATIONS=$(patsubst %.tex, %.pdf, $(wildcard presentations/*.tex))
BUILD_DIR=build
BUILD_DECKS=$(subst presentations, presentations/$(BUILD_DIR), $(wildcard presentations/content/*))
LATEX=pdflatex -output-directory $(BUILD_DIR)
2018-08-19 15:23:40 +02:00
all: ${PRESENTATIONS}
2018-08-19 15:40:27 +02:00
clean:
rm -fr presentations/$(BUILD_DIR)
distclean: clean
rm -f presentations/*.pdf
2018-08-19 17:03:00 +02:00
# A rule to make build directories when needed; the call to .SECONDARY ensures
# that these directories are not deleted when they are generated as intermediate
# targets
.SECONDARY: $(BUILD_DECKS)
presentations/$(BUILD_DIR)/%:
mkdir -p $@
2018-08-19 15:40:27 +02:00
2018-08-19 17:03:00 +02:00
# Extract dependencies for presentations by looking at the source code and
# extracting all calls to \includedeck from them; it returns a list of elements
# like presentations/content/ccc/ccc_lokal.tex
define presentation_dependencies
2018-08-19 17:02:51 +02:00
$(shell perl -ne '/includedeck\{(.*)\}/ && print "presentations/content/", $$1, ".tex "' $(1))
endef
2018-08-19 17:03:00 +02:00
# This template is called with arguments like presentation/xxx.pdf; it
# generates a rule that dependes on the corresponding tex file as well as on all
# decks used in that tex file; dependencies are of the form
# content/ccc/ccc_lokal.tex
2018-08-19 16:37:01 +02:00
define PRESENTATION_template
.ONESHELL: $(1)
$(1): $(subst .pdf,.tex,$(1)) $(call presentation_dependencies,$(subst .pdf,.tex,$(1)))
echo $$^
2018-08-08 20:25:42 +02:00
cd presentations
2018-08-19 16:37:01 +02:00
$(LATEX) $$(notdir $$<)
$(LATEX) $$(notdir $$<)
mv $(subst presentations/,$(BUILD_DIR)/,$(1)) .
endef
$(foreach presentation, $(PRESENTATIONS), \
$(eval $(call PRESENTATION_template, $(presentation))))