.PHONY: all clean check printrun cardrun decks prototype .PRECIOUS: %.pdf %.png GENERATED_DIR?=generated SENTINEL=$(GENERATED_DIR)/.sentinel default: check decks all: check decks export prototype: mini # Check existence of necessary executables CONVERT:=$(shell command -v convert 2> /dev/null) XELATEX:=$(shell command -v xelatex 2> /dev/null) PDFTOPPM:=$(shell command -v pdftoppm 2> /dev/null) PDFUNITE:=$(shell command -v pdfunite 2> /dev/null) check: $(SENTINEL) ifndef CONVERT $(error "convert not found. Please install imagemagick") endif ifndef XELATEX $(error "xelatex not found. Please install xetex") endif ifndef PDFTOPPM $(error "pdftoppm not found. Please install poppler") endif ifndef PDFUNITE $(error "pdfunite not found. Please install poppler") endif RAW_DECK_LIST=$(shell ./scripts/decklist.sh) first second third DECK_LIST=$(RAW_DECK_LIST:%=$(GENERATED_DIR)/%) DECK_DEPENDENCIES=$(DECK_LIST:%=%.d) DECK_EXPORT_DIRS=$(DECK_LIST:%=outputs/%) $(SENTINEL): cards.sql ./scripts/generate_cards.sh $(GENERATED_DIR) -rm $(GENERATED_DIR)/first.list -rm $(GENERATED_DIR)/second.list -rm $(GENERATED_DIR)/third.list touch $(GENERATED_DIR)/first.list touch $(GENERATED_DIR)/second.list touch $(GENERATED_DIR)/third.list for card in legs/first/*.tex; do echo $${card%tex}pdf >> $(GENERATED_DIR)/first.list; done for card in legs/second/*.tex; do echo $${card%tex}pdf >> $(GENERATED_DIR)/second.list; done for card in legs/third/*.tex; do echo $${card%tex}pdf >> $(GENERATED_DIR)/third.list; done mkdir -p $(DECK_EXPORT_DIRS) touch $@ %.d: %.list echo -n 'outputs/$(*F).pdf:' > $@ tr '\n' ' ' < $< >> $@ echo -e '\n\tpdfunite $$+ $$@' >> $@ cat $< | sed '/^$$/d' | sort | uniq -c | sed -e 's@ *\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@export: outputs/$*/\3[\1].png@' >> $@ cat $< | sed '/^$$/d' | sort | uniq -c | sed -e 's@ *\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@outputs/$*/\3[\1].png: \2\3[\1].png; cp \2\3[\1].png outputs/$*/\3[\1].png@' >> $@ mkdir -p outputs/$(*D) echo 'decks: outputs/$(*F).pdf' >> $@ Makefile.deps: $(SENTINEL) $(DECK_DEPENDENCIES) cat $^ > $@ include Makefile.deps outputs/iditaboard[face].png: iditaboard.pdf $(PDFTOPPM) -scale-to-x 4875 -scale-to-y 3075 -png $< > $@ outputs/cardback.png: cardback.png cp $< $@ export: outputs/cardback.png export: outputs/iditaboard[face].png export: instructions.pdf %.pdf: %.tex $(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< rm $*.aux rm $*.log instructions.pdf: instructions.tex instructions-anatomy.pdf $(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< $(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< # Twice, for TOC mini: decks pdfunite outputs/*.pdf tmp.pdf pdfnup --nup 3x3 tmp.pdf --no-landscape --delta '0.5cm 0.5cm' --scale 0.9 -o outputs/mini_printrun.pdf rm tmp.pdf force-make: clean: -find cards -name '*.pdf' -delete -find cards -name '*].png' -delete -find cards -name '*-raw.png' -delete -find outputs -name '*.pdf' -delete -find outputs -name '*].png' -delete -find outputs -name '*.d' -delete -find legs -name '*.pdf' -delete -find legs -name '*].png' -delete -find legs -name '*-raw.png' -delete -find . -name '*.aux' -delete -find . -name '*.log' -delete -rm -rf $(GENERATED_DIR) -rm Makefile.deps print-% : ; @echo $* = $($*) # Rules for each multiplicity of png %[1].png: %.pdf; ./cardtopng.sh $@ %[2].png: %.pdf; ./cardtopng.sh $@ %[3].png: %.pdf; ./cardtopng.sh $@ %[4].png: %.pdf; ./cardtopng.sh $@ %[5].png: %.pdf; ./cardtopng.sh $@ %[6].png: %.pdf; ./cardtopng.sh $@ %[7].png: %.pdf; ./cardtopng.sh $@ %[8].png: %.pdf; ./cardtopng.sh $@ %[9].png: %.pdf; ./cardtopng.sh $@ %[10].png: %.pdf; ./cardtopng.sh $@ %[11].png: %.pdf; ./cardtopng.sh $@ %[12].png: %.pdf; ./cardtopng.sh $@ %[13].png: %.pdf; ./cardtopng.sh $@ %[14].png: %.pdf; ./cardtopng.sh $@ %[15].png: %.pdf; ./cardtopng.sh $@ %[16].png: %.pdf; ./cardtopng.sh $@ %[17].png: %.pdf; ./cardtopng.sh $@ %[18].png: %.pdf; ./cardtopng.sh $@ %[19].png: %.pdf; ./cardtopng.sh $@ %[20].png: %.pdf; ./cardtopng.sh $@ %[21].png: %.pdf; ./cardtopng.sh $@ %[22].png: %.pdf; ./cardtopng.sh $@ %[23].png: %.pdf; ./cardtopng.sh $@ %[24].png: %.pdf; ./cardtopng.sh $@ %[25].png: %.pdf; ./cardtopng.sh $@ %[26].png: %.pdf; ./cardtopng.sh $@ %[27].png: %.pdf; ./cardtopng.sh $@ %[28].png: %.pdf; ./cardtopng.sh $@ %[29].png: %.pdf; ./cardtopng.sh $@ %[30].png: %.pdf; ./cardtopng.sh $@ %[31].png: %.pdf; ./cardtopng.sh $@ %[32].png: %.pdf; ./cardtopng.sh $@ %[33].png: %.pdf; ./cardtopng.sh $@ %[34].png: %.pdf; ./cardtopng.sh $@ %[35].png: %.pdf; ./cardtopng.sh $@ %[36].png: %.pdf; ./cardtopng.sh $@ %[image].png: %.pdf; ./cardtopng.sh $@