129 lines
4.3 KiB
Makefile
129 lines
4.3 KiB
Makefile
.PHONY: setup all clean check printrun cardrun
|
|
.PRECIOUS: %.pdf %.png
|
|
|
|
GENERATED_DIR?=generated
|
|
SENTINEL=$(GENERATED_DIR)/.sentinel
|
|
|
|
default: check decks
|
|
all: check decks export
|
|
|
|
# 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)
|
|
DECK_LIST=$(RAW_DECK_LIST:%=$(GENERATED_DIR)/%)
|
|
DECK_DEPENDENCIES=$(DECK_LIST:%=%.d)
|
|
|
|
setup: $(SENTINEL)
|
|
./scripts/generate_cards.sh $(GENERATED_DIR)
|
|
touch $(SENTINEL)
|
|
|
|
$(SENTINEL): cards.sql
|
|
./scripts/generate_cards.sh $(GENERATED_DIR)
|
|
touch $@
|
|
|
|
%.d: %.list
|
|
echo -n 'outputs/$*.pdf:' > $@
|
|
tr '\n' ' ' < $< >> $@
|
|
echo -e '\n\tpdfunite $$+ $$@' >> $@
|
|
cat $< | sort | uniq -c | sed -e 's@\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@export: outputs/$*/\3[\1].png@' >> $@
|
|
cat $< | 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/$*
|
|
echo 'decks: outputs/$*.pdf' >> $@
|
|
|
|
Makefile.deps: $(DECK_DEPENDENCIES) $(SENTINEL)
|
|
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
|
|
|
|
# TODO: Clean this up!
|
|
instructions.pdf: instructions.tex cards/dogs/husky0.pdf cards/attachments/armour0.pdf cards/food/breakfast0.pdf cards/food/lunch0.pdf cards/sleds/repair_sled0.pdf cards/sleds/upgrade_sled0.pdf cards/movement/move0.pdf cards/food/dinner0.pdf cards/personal/first_aid0.pdf cards/dogs/good_dog0.pdf cards/util/vigilance.pdf cards/damaged.pdf cards/util/daylight_savings_time.pdf cards/util/sleeping_bag.pdf cards/sleds/new_sled.pdf cards/sleds/stop_and_shop.pdf cards/sleds/satiated.pdf cards/personal/ibuprofin.pdf cards/util/utility_knife.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
|
|
|
|
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 . -name '*.aux' -delete
|
|
-find . -name '*.log' -delete
|
|
-rm -rf $(GENERATED_DIR)
|
|
|
|
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 $@
|