iditacards/Makefile

145 lines
4.7 KiB
Makefile

.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 $@