Updated build system.

This commit is contained in:
Louis Burke 2019-04-11 23:30:44 -04:00
parent 805297554d
commit 05bb67851a
8 changed files with 109 additions and 77 deletions

2
.gitignore vendored
View file

@ -10,3 +10,5 @@ changelist.txt
outputs/** outputs/**
Console. Console.
Python-Fu Python-Fu
Makefile.deps
generated/**

View file

@ -1,6 +1,9 @@
.PHONY: all clean check printrun cardrun .PHONY: all clean check printrun cardrun
.PRECIOUS: %.pdf %.png .PRECIOUS: %.pdf %.png
GENERATED_DIR?=generated
SENTINEL=$(GENERATED_DIR)/.sentinel
default: check decks default: check decks
all: check decks export all: check decks export
@ -10,7 +13,7 @@ XELATEX:=$(shell command -v xelatex 2> /dev/null)
PDFTOPPM:=$(shell command -v pdftoppm 2> /dev/null) PDFTOPPM:=$(shell command -v pdftoppm 2> /dev/null)
PDFUNITE:=$(shell command -v pdfunite 2> /dev/null) PDFUNITE:=$(shell command -v pdfunite 2> /dev/null)
check: check: $(SENTINEL)
ifndef CONVERT ifndef CONVERT
$(error "convert not found. Please install imagemagick") $(error "convert not found. Please install imagemagick")
endif endif
@ -24,26 +27,15 @@ ifndef PDFUNITE
$(error "pdfunite not found. Please install poppler") $(error "pdfunite not found. Please install poppler")
endif endif
SHORT_DECKLIST=$(shell ls cards/decks | grep -v run | sed -e 's/.txt//') RAW_DECK_LIST=$(shell ./scripts/decklist.sh)
DECKLIST=$(SHORT_DECKLIST) printrun cardrun DECK_LIST=$(RAW_DECK_LIST:%=$(GENERATED_DIR)/%)
DEPENDLIST=$(DECKLIST:%=%.d) DECK_DEPENDENCIES=$(DECK_LIST:%=%.d)
outputs/printrun.txt: $(SHORT_DECKLIST) $(SENTINEL): cards.sql
cat $^ | sort > $@ ./scripts/generate_cards.sh $(GENERATED_DIR)
touch $@
outputs/cardrun.txt: $(SHORT_DECKLIST) %.d: %.list
cat $^ | sort -u > $@
outputs/%run.d: cards/decks/%run.txt
echo -n 'outputs/$*run.pdf:' > $@
tr '\n' ' ' < $< >> $@
echo -e '\n\tpdfunite $$+ $$@' >> $@
cat $< | sort | uniq -c | sed -e 's@\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@export: outputs/$*run/\3[\1].png@' >> $@
cat $< | sort | uniq -c | sed -e 's@\([[:digit:]]\+\) \(.\+/\)*\(.\+\).pdf@outputs/$*run/\3[\1].png: \2\3[\1].png; cp \2\3[\1].png outputs/$*run/\3[\1].png@' >> $@
mkdir -p outputs/$*run
echo 'decks: outputs/$*run.pdf' >> $@
outputs/%.d: cards/decks/%.txt
echo -n 'outputs/$*.pdf:' > $@ echo -n 'outputs/$*.pdf:' > $@
tr '\n' ' ' < $< >> $@ tr '\n' ' ' < $< >> $@
echo -e '\n\tpdfunite $$+ $$@' >> $@ echo -e '\n\tpdfunite $$+ $$@' >> $@
@ -51,9 +43,11 @@ outputs/%.d: cards/decks/%.txt
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@' >> $@ 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/$* mkdir -p outputs/$*
echo 'decks: outputs/$*.pdf' >> $@ echo 'decks: outputs/$*.pdf' >> $@
echo 'short: outputs/$*.pdf' >> $@
include $(DECKLIST:%=outputs/%.d) Makefile.deps: $(DECK_DEPENDENCIES) $(SENTINEL)
cat $^ > $@
-include Makefile.deps
outputs/iditaboard[face].png: iditaboard.pdf outputs/iditaboard[face].png: iditaboard.pdf
$(PDFTOPPM) -scale-to-x 4875 -scale-to-y 3075 -png $< > $@ $(PDFTOPPM) -scale-to-x 4875 -scale-to-y 3075 -png $< > $@
@ -61,44 +55,16 @@ outputs/iditaboard[face].png: iditaboard.pdf
outputs/cardback.png: cardback.png outputs/cardback.png: cardback.png
cp $< $@ cp $< $@
outputs/stretchback1.png: cardback.png
convert $< -fuzz 50% -fill \#7FDF7D -opaque white tmp.png
convert tmp.png -fuzz 50% -fill \#CF5FCF -opaque black $@
rm tmp.png
outputs/stretchback2.png: cardback.png
convert $< -fuzz 50% -fill \#9FB76F -opaque white tmp.png
convert tmp.png -fuzz 50% -fill \#FF5F5F -opaque black $@
rm tmp.png
outputs/stretchback3.png: cardback.png
convert $< -fuzz 50% -fill \#5F5FFF -opaque white tmp.png
convert tmp.png -fuzz 50% -fill \#9F9F9F -opaque black $@
rm tmp.png
outputs/stretchback4.png: cardback.png
convert $< -fuzz 50% -fill \#3FDFDF -opaque white tmp.png
convert tmp.png -fuzz 50% -fill \#DFDF3F -opaque black $@
rm tmp.png
outputs/box[top].png: box_top.png
cp $< $@
outputs/box[bottom].png: box_bottom.png
cp $< $@
export: outputs/stretchback1.png outputs/stretchback2.png outputs/stretchback3.png outputs/stretchback4.png
export: outputs/cardback.png export: outputs/cardback.png
export: outputs/box[top].png outputs/box[bottom].png
export: outputs/iditaboard[face].png export: outputs/iditaboard[face].png
export: instructions.pdf export: instructions.pdf
%.pdf: %.tex %.pdf: %.tex
$(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< $(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $<
echo "$@" >> changelist.txt
rm $*.aux rm $*.aux
rm $*.log 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 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) $<
$(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< # Twice, for TOC $(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< # Twice, for TOC
@ -114,6 +80,7 @@ clean:
-find outputs -name '*.d' -delete -find outputs -name '*.d' -delete
-find . -name '*.aux' -delete -find . -name '*.aux' -delete
-find . -name '*.log' -delete -find . -name '*.log' -delete
-rm -rf $(GENERATED_DIR)
print-% : ; @echo $* = $($*) print-% : ; @echo $* = $($*)

View file

@ -1,24 +1,24 @@
PRAGMA foreign_keys=OFF; PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION; BEGIN TRANSACTION;
CREATE TABLE Types (id INTEGER PRIMARY KEY, Name TEXT); CREATE TABLE Types (id INTEGER PRIMARY KEY, Name TEXT);
INSERT INTO Types VALUES(1,'Attachment'); INSERT INTO Types VALUES(1,'attachment');
INSERT INTO Types VALUES(2,'Dog'); INSERT INTO Types VALUES(2,'dog');
INSERT INTO Types VALUES(3,'Food'); INSERT INTO Types VALUES(3,'food');
INSERT INTO Types VALUES(4,'Movement'); INSERT INTO Types VALUES(4,'movement');
INSERT INTO Types VALUES(5,'Personal'); INSERT INTO Types VALUES(5,'personal');
INSERT INTO Types VALUES(6,'Sled'); INSERT INTO Types VALUES(6,'sled');
INSERT INTO Types VALUES(7,'Utility'); INSERT INTO Types VALUES(7,'utility');
INSERT INTO Types VALUES(8,'Token'); INSERT INTO Types VALUES(8,'damage');
CREATE TABLE Decks (id INTEGER PRIMARY KEY, Name TEXT); CREATE TABLE Decks (id INTEGER PRIMARY KEY, Name TEXT);
INSERT INTO Decks VALUES(1,'Starter1'); INSERT INTO Decks VALUES(1,'starter1');
INSERT INTO Decks VALUES(2,'Starter2'); INSERT INTO Decks VALUES(2,'starter2');
INSERT INTO Decks VALUES(3,'Starter3'); INSERT INTO Decks VALUES(3,'starter3');
INSERT INTO Decks VALUES(4,'Starter4'); INSERT INTO Decks VALUES(4,'starter4');
INSERT INTO Decks VALUES(10,'Survival'); INSERT INTO Decks VALUES(10,'survival');
INSERT INTO Decks VALUES(11,'Race'); INSERT INTO Decks VALUES(11,'race');
INSERT INTO Decks VALUES(20,'Legendary'); INSERT INTO Decks VALUES(20,'legendary');
INSERT INTO Decks VALUES(21,'Damage'); INSERT INTO Decks VALUES(21,'damage');
CREATE TABLE Effects (id INTEGER PRIMARY KEY, Name TEXT, Command TEXT); CREATE TABLE Effects (id INTEGER PRIMARY KEY, Name TEXT, Command TEXT);
INSERT INTO Effects VALUES(1,'Day Draw','\daydraw{#}'); INSERT INTO Effects VALUES(1,'Day Draw','\daydraw{#}');

View file

@ -5,14 +5,5 @@ OUTPUT=$1
INTERMEDIATE=$(echo "$1" | sed 's/\[.*\]\..*//')-raw.png INTERMEDIATE=$(echo "$1" | sed 's/\[.*\]\..*//')-raw.png
PDFNAME=$(echo "$1" | sed 's/\[.*\]\..*//').pdf PDFNAME=$(echo "$1" | sed 's/\[.*\]\..*//').pdf
# Determine card size
#if grep -q 750x1050 <<<$(identify $INTERMEDIATE); then
if [ "${PDFNAME/stretch}" = "$PDFNAME" ]; then
# Poker Deck
pdftoppm -scale-to-x 750 -scale-to-y 1050 -png $PDFNAME > $INTERMEDIATE pdftoppm -scale-to-x 750 -scale-to-y 1050 -png $PDFNAME > $INTERMEDIATE
convert $INTERMEDIATE -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage $OUTPUT convert $INTERMEDIATE -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage $OUTPUT
else
# Mini Deck
pdftoppm -scale-to-x 750 -scale-to-y 525 -png $PDFNAME > $INTERMEDIATE
convert $INTERMEDIATE -set option:distort:viewport 825x600-37-37 -virtual-pixel Edge -distort SRT 0 +repage $OUTPUT
fi

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

5
scripts/decklist.sh Executable file
View file

@ -0,0 +1,5 @@
#!/bin/bash
sqlite3 -init cards.sql <<EOF | sed 's/ /_/g'
SELECT Name FROM Decks JOIN Deck_Cards ON Deck_Cards.Deck = Decks.id GROUP BY Name;
EOF

46
scripts/generate_cards.sh Executable file
View file

@ -0,0 +1,46 @@
#!/bin/bash
PARENT_DIR="${1:-cards}"
mkdir -p "$PARENT_DIR"
sqlite3 -init cards.sql < scripts/list_cards.sql | \
while IFS="|" read -r name energy health risk flavour image typename effects deckname cardcount; do
case $cardcount in
1) rarity=legendary ;;
2) rarity=epic ;;
3) rarity=rare ;;
4) rarity=common ;;
*) rarity=starting ;;
esac
mkdir -p "$PARENT_DIR/$deckname"
fname="$PARENT_DIR/$deckname/${name// /_}.tex"
yes "${fname%.tex}.pdf" | head -n "$cardcount" >> "$PARENT_DIR/$deckname.list"
cat <<EOF >"$fname"
\\documentclass{iditacard}
\\cardtype{$typename}
\\rarity{$rarity}
\\deck{$deckname}
\\begin{document}
\\begin{card}
\\art{$image}
EOF
[ "$energy" -gt 0 ] || echo " \\energy{$energy}" >>"$fname"
[ "$health" -gt 0 ] || echo " \\health{$health}" >>"$fname"
[ "$risk" -gt 0 ] || echo " \\risk{$risk}" >>"$fname"
cat <<EOF >>"$fname"
\\name{$name}
\\text{$effects}
\\flava{$flavour}
\\type{$typename}
\\end{card}
\\end{document}
EOF
done

21
scripts/list_cards.sql Normal file
View file

@ -0,0 +1,21 @@
SELECT
Cards.Name,
Cards.Energy,
Cards.Health,
Cards.Risk,
Cards.Flavour,
Cards.Image,
Types.Name,
group_concat(Effects.Command, '\\'),
Decks.Name,
Deck_Cards.Amount
FROM Cards
JOIN Types ON Types.id = Cards.Type
CROSS JOIN Card_Effects ON Card_Effects.Card = Cards.id
JOIN Effects ON Effects.id = Card_Effects.Effect
CROSS JOIN Deck_Cards ON Deck_Cards.Card = Cards.id
JOIN Decks ON Deck_Cards.Deck = Decks.id
GROUP BY
Cards.id,
Decks.id
ORDER BY Cards.Name;