Updated build system.
This commit is contained in:
parent
805297554d
commit
05bb67851a
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -10,3 +10,5 @@ changelist.txt
|
||||||
outputs/**
|
outputs/**
|
||||||
Console.
|
Console.
|
||||||
Python-Fu
|
Python-Fu
|
||||||
|
Makefile.deps
|
||||||
|
generated/**
|
||||||
|
|
67
Makefile
67
Makefile
|
@ -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 $* = $($*)
|
||||||
|
|
||||||
|
|
32
cards.sql
32
cards.sql
|
@ -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{#}');
|
||||||
|
|
13
cardtopng.sh
13
cardtopng.sh
|
@ -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
|
pdftoppm -scale-to-x 750 -scale-to-y 1050 -png $PDFNAME > $INTERMEDIATE
|
||||||
#if grep -q 750x1050 <<<$(identify $INTERMEDIATE); then
|
convert $INTERMEDIATE -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage $OUTPUT
|
||||||
if [ "${PDFNAME/stretch}" = "$PDFNAME" ]; then
|
|
||||||
# Poker Deck
|
|
||||||
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
|
|
||||||
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
5
scripts/decklist.sh
Executable 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
46
scripts/generate_cards.sh
Executable 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
21
scripts/list_cards.sql
Normal 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;
|
Loading…
Reference in a new issue