From 68d85ba83331dc2e1cf7a2a8a79f4ce40e0a8e39 Mon Sep 17 00:00:00 2001 From: Louis Burke Date: Mon, 14 Oct 2024 17:38:03 -0400 Subject: [PATCH] Sped up build --- .gitignore | 1 + build.ninja | 1302 ---------------------------------------------- configure.jq | 192 ++++--- configure.py | 98 ++++ configure.sh | 143 ++++- legs.yaml | 108 ++++ outputs/.gitkeep | 0 rules.ninja | 25 +- scantex.sh | 7 +- 9 files changed, 478 insertions(+), 1398 deletions(-) delete mode 100644 build.ninja mode change 100644 => 100755 configure.jq create mode 100644 configure.py delete mode 100644 outputs/.gitkeep diff --git a/.gitignore b/.gitignore index 82c06fa..ed223cc 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ generated/** !images/** .ninja_log +build.ninja diff --git a/build.ninja b/build.ninja deleted file mode 100644 index a237de2..0000000 --- a/build.ninja +++ /dev/null @@ -1,1302 +0,0 @@ -# Generated from configure.jq, do not edit this file! - -root = . - -rule configure - description = recreate build.ninja using configure.jq via configure.sh - command = bash configure.sh > build.ninja - generator = 1 - restat = 1 - -build build.ninja: configure | configure.jq configure.sh assets.cue cards.cue legs.cue others.cue types.cue assets.yaml cards.yaml legs.yaml -include rules.ninja - -build output/everything.json: cuegen assets.cue cards.cue legs.cue others.cue types.cue assets.yaml cards.yaml legs.yaml - filter = . - -build output/logo.png: copy iditacards.png -build output/cardback.png: copy cardback.png -build output/iditaboard.pdf: tex2pdf iditaboard.tex || output/.iditaboard.pdf.dd - dyndep = output/.iditaboard.pdf.dd -build output/.iditaboard.pdf.dd: scantex iditaboard.tex - target = output/iditaboard.pdf -build output/iditaboard.png: pdf2png output/iditaboard.pdf - w = 4875 - h = 3075 -build output/instructions.pdf: tex2pdf2x instructions.tex || output/.instructions.pdf.dd - dyndep = output/.instructions.pdf.dd -build output/.instructions.pdf.dd: scantex instructions.tex - target = output/instructions.pdf -build output/.cards/starter1-a_hat[1].json.stamp | output/cards/starter1-a_hat[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-a_hat[1]' '.assets[$$asset].data' - target = output/cards/starter1-a_hat[1].json -build output/cards/starter1-a_hat[1].tex: template2tex output/cards/starter1-a_hat[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-a_hat[1].pdf: tex2pdf output/cards/starter1-a_hat[1].tex || output/.cards/starter1-a_hat[1].pdf.dd - dyndep = output/.cards/starter1-a_hat[1].pdf.dd -build output/.cards/starter1-a_hat[1].pdf.dd: scantex output/cards/starter1-a_hat[1].tex - target = output/cards/starter1-a_hat[1].pdf -build output/cards/starter1-a_hat[1].raw.png: pdf2png output/cards/starter1-a_hat[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-a_hat[1].png: convert output/cards/starter1-a_hat[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-breakfast[2].json.stamp | output/cards/starter1-breakfast[2].json: extract output/everything.json - filter = --arg asset 'cards/starter1-breakfast[2]' '.assets[$$asset].data' - target = output/cards/starter1-breakfast[2].json -build output/cards/starter1-breakfast[2].tex: template2tex output/cards/starter1-breakfast[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-breakfast[2].pdf: tex2pdf output/cards/starter1-breakfast[2].tex || output/.cards/starter1-breakfast[2].pdf.dd - dyndep = output/.cards/starter1-breakfast[2].pdf.dd -build output/.cards/starter1-breakfast[2].pdf.dd: scantex output/cards/starter1-breakfast[2].tex - target = output/cards/starter1-breakfast[2].pdf -build output/cards/starter1-breakfast[2].raw.png: pdf2png output/cards/starter1-breakfast[2].pdf - w = 750 - h = 1050 -build output/cards/starter1-breakfast[2].png: convert output/cards/starter1-breakfast[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-lunch[2].json.stamp | output/cards/starter1-lunch[2].json: extract output/everything.json - filter = --arg asset 'cards/starter1-lunch[2]' '.assets[$$asset].data' - target = output/cards/starter1-lunch[2].json -build output/cards/starter1-lunch[2].tex: template2tex output/cards/starter1-lunch[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-lunch[2].pdf: tex2pdf output/cards/starter1-lunch[2].tex || output/.cards/starter1-lunch[2].pdf.dd - dyndep = output/.cards/starter1-lunch[2].pdf.dd -build output/.cards/starter1-lunch[2].pdf.dd: scantex output/cards/starter1-lunch[2].tex - target = output/cards/starter1-lunch[2].pdf -build output/cards/starter1-lunch[2].raw.png: pdf2png output/cards/starter1-lunch[2].pdf - w = 750 - h = 1050 -build output/cards/starter1-lunch[2].png: convert output/cards/starter1-lunch[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-dinner[1].json.stamp | output/cards/starter1-dinner[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-dinner[1]' '.assets[$$asset].data' - target = output/cards/starter1-dinner[1].json -build output/cards/starter1-dinner[1].tex: template2tex output/cards/starter1-dinner[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-dinner[1].pdf: tex2pdf output/cards/starter1-dinner[1].tex || output/.cards/starter1-dinner[1].pdf.dd - dyndep = output/.cards/starter1-dinner[1].pdf.dd -build output/.cards/starter1-dinner[1].pdf.dd: scantex output/cards/starter1-dinner[1].tex - target = output/cards/starter1-dinner[1].pdf -build output/cards/starter1-dinner[1].raw.png: pdf2png output/cards/starter1-dinner[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-dinner[1].png: convert output/cards/starter1-dinner[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-dog_chow[1].json.stamp | output/cards/starter1-dog_chow[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-dog_chow[1]' '.assets[$$asset].data' - target = output/cards/starter1-dog_chow[1].json -build output/cards/starter1-dog_chow[1].tex: template2tex output/cards/starter1-dog_chow[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-dog_chow[1].pdf: tex2pdf output/cards/starter1-dog_chow[1].tex || output/.cards/starter1-dog_chow[1].pdf.dd - dyndep = output/.cards/starter1-dog_chow[1].pdf.dd -build output/.cards/starter1-dog_chow[1].pdf.dd: scantex output/cards/starter1-dog_chow[1].tex - target = output/cards/starter1-dog_chow[1].pdf -build output/cards/starter1-dog_chow[1].raw.png: pdf2png output/cards/starter1-dog_chow[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-dog_chow[1].png: convert output/cards/starter1-dog_chow[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-first_aid[2].json.stamp | output/cards/starter1-first_aid[2].json: extract output/everything.json - filter = --arg asset 'cards/starter1-first_aid[2]' '.assets[$$asset].data' - target = output/cards/starter1-first_aid[2].json -build output/cards/starter1-first_aid[2].tex: template2tex output/cards/starter1-first_aid[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-first_aid[2].pdf: tex2pdf output/cards/starter1-first_aid[2].tex || output/.cards/starter1-first_aid[2].pdf.dd - dyndep = output/.cards/starter1-first_aid[2].pdf.dd -build output/.cards/starter1-first_aid[2].pdf.dd: scantex output/cards/starter1-first_aid[2].tex - target = output/cards/starter1-first_aid[2].pdf -build output/cards/starter1-first_aid[2].raw.png: pdf2png output/cards/starter1-first_aid[2].pdf - w = 750 - h = 1050 -build output/cards/starter1-first_aid[2].png: convert output/cards/starter1-first_aid[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-good_dog[1].json.stamp | output/cards/starter1-good_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-good_dog[1]' '.assets[$$asset].data' - target = output/cards/starter1-good_dog[1].json -build output/cards/starter1-good_dog[1].tex: template2tex output/cards/starter1-good_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-good_dog[1].pdf: tex2pdf output/cards/starter1-good_dog[1].tex || output/.cards/starter1-good_dog[1].pdf.dd - dyndep = output/.cards/starter1-good_dog[1].pdf.dd -build output/.cards/starter1-good_dog[1].pdf.dd: scantex output/cards/starter1-good_dog[1].tex - target = output/cards/starter1-good_dog[1].pdf -build output/cards/starter1-good_dog[1].raw.png: pdf2png output/cards/starter1-good_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-good_dog[1].png: convert output/cards/starter1-good_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-grandma_soup[1].json.stamp | output/cards/starter1-grandma_soup[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-grandma_soup[1]' '.assets[$$asset].data' - target = output/cards/starter1-grandma_soup[1].json -build output/cards/starter1-grandma_soup[1].tex: template2tex output/cards/starter1-grandma_soup[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-grandma_soup[1].pdf: tex2pdf output/cards/starter1-grandma_soup[1].tex || output/.cards/starter1-grandma_soup[1].pdf.dd - dyndep = output/.cards/starter1-grandma_soup[1].pdf.dd -build output/.cards/starter1-grandma_soup[1].pdf.dd: scantex output/cards/starter1-grandma_soup[1].tex - target = output/cards/starter1-grandma_soup[1].pdf -build output/cards/starter1-grandma_soup[1].raw.png: pdf2png output/cards/starter1-grandma_soup[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-grandma_soup[1].png: convert output/cards/starter1-grandma_soup[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-husky[1].json.stamp | output/cards/starter1-husky[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-husky[1]' '.assets[$$asset].data' - target = output/cards/starter1-husky[1].json -build output/cards/starter1-husky[1].tex: template2tex output/cards/starter1-husky[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-husky[1].pdf: tex2pdf output/cards/starter1-husky[1].tex || output/.cards/starter1-husky[1].pdf.dd - dyndep = output/.cards/starter1-husky[1].pdf.dd -build output/.cards/starter1-husky[1].pdf.dd: scantex output/cards/starter1-husky[1].tex - target = output/cards/starter1-husky[1].pdf -build output/cards/starter1-husky[1].raw.png: pdf2png output/cards/starter1-husky[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-husky[1].png: convert output/cards/starter1-husky[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-move[4].json.stamp | output/cards/starter1-move[4].json: extract output/everything.json - filter = --arg asset 'cards/starter1-move[4]' '.assets[$$asset].data' - target = output/cards/starter1-move[4].json -build output/cards/starter1-move[4].tex: template2tex output/cards/starter1-move[4].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-move[4].pdf: tex2pdf output/cards/starter1-move[4].tex || output/.cards/starter1-move[4].pdf.dd - dyndep = output/.cards/starter1-move[4].pdf.dd -build output/.cards/starter1-move[4].pdf.dd: scantex output/cards/starter1-move[4].tex - target = output/cards/starter1-move[4].pdf -build output/cards/starter1-move[4].raw.png: pdf2png output/cards/starter1-move[4].pdf - w = 750 - h = 1050 -build output/cards/starter1-move[4].png: convert output/cards/starter1-move[4].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-mush[1].json.stamp | output/cards/starter1-mush[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-mush[1]' '.assets[$$asset].data' - target = output/cards/starter1-mush[1].json -build output/cards/starter1-mush[1].tex: template2tex output/cards/starter1-mush[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-mush[1].pdf: tex2pdf output/cards/starter1-mush[1].tex || output/.cards/starter1-mush[1].pdf.dd - dyndep = output/.cards/starter1-mush[1].pdf.dd -build output/.cards/starter1-mush[1].pdf.dd: scantex output/cards/starter1-mush[1].tex - target = output/cards/starter1-mush[1].pdf -build output/cards/starter1-mush[1].raw.png: pdf2png output/cards/starter1-mush[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-mush[1].png: convert output/cards/starter1-mush[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-repair_sled[2].json.stamp | output/cards/starter1-repair_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter1-repair_sled[2]' '.assets[$$asset].data' - target = output/cards/starter1-repair_sled[2].json -build output/cards/starter1-repair_sled[2].tex: template2tex output/cards/starter1-repair_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-repair_sled[2].pdf: tex2pdf output/cards/starter1-repair_sled[2].tex || output/.cards/starter1-repair_sled[2].pdf.dd - dyndep = output/.cards/starter1-repair_sled[2].pdf.dd -build output/.cards/starter1-repair_sled[2].pdf.dd: scantex output/cards/starter1-repair_sled[2].tex - target = output/cards/starter1-repair_sled[2].pdf -build output/cards/starter1-repair_sled[2].raw.png: pdf2png output/cards/starter1-repair_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter1-repair_sled[2].png: convert output/cards/starter1-repair_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-upgrade_sled[2].json.stamp | output/cards/starter1-upgrade_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter1-upgrade_sled[2]' '.assets[$$asset].data' - target = output/cards/starter1-upgrade_sled[2].json -build output/cards/starter1-upgrade_sled[2].tex: template2tex output/cards/starter1-upgrade_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-upgrade_sled[2].pdf: tex2pdf output/cards/starter1-upgrade_sled[2].tex || output/.cards/starter1-upgrade_sled[2].pdf.dd - dyndep = output/.cards/starter1-upgrade_sled[2].pdf.dd -build output/.cards/starter1-upgrade_sled[2].pdf.dd: scantex output/cards/starter1-upgrade_sled[2].tex - target = output/cards/starter1-upgrade_sled[2].pdf -build output/cards/starter1-upgrade_sled[2].raw.png: pdf2png output/cards/starter1-upgrade_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter1-upgrade_sled[2].png: convert output/cards/starter1-upgrade_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter1-wheel_dog[1].json.stamp | output/cards/starter1-wheel_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter1-wheel_dog[1]' '.assets[$$asset].data' - target = output/cards/starter1-wheel_dog[1].json -build output/cards/starter1-wheel_dog[1].tex: template2tex output/cards/starter1-wheel_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter1-wheel_dog[1].pdf: tex2pdf output/cards/starter1-wheel_dog[1].tex || output/.cards/starter1-wheel_dog[1].pdf.dd - dyndep = output/.cards/starter1-wheel_dog[1].pdf.dd -build output/.cards/starter1-wheel_dog[1].pdf.dd: scantex output/cards/starter1-wheel_dog[1].tex - target = output/cards/starter1-wheel_dog[1].pdf -build output/cards/starter1-wheel_dog[1].raw.png: pdf2png output/cards/starter1-wheel_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter1-wheel_dog[1].png: convert output/cards/starter1-wheel_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-a_hat[1].json.stamp | output/cards/starter2-a_hat[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-a_hat[1]' '.assets[$$asset].data' - target = output/cards/starter2-a_hat[1].json -build output/cards/starter2-a_hat[1].tex: template2tex output/cards/starter2-a_hat[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-a_hat[1].pdf: tex2pdf output/cards/starter2-a_hat[1].tex || output/.cards/starter2-a_hat[1].pdf.dd - dyndep = output/.cards/starter2-a_hat[1].pdf.dd -build output/.cards/starter2-a_hat[1].pdf.dd: scantex output/cards/starter2-a_hat[1].tex - target = output/cards/starter2-a_hat[1].pdf -build output/cards/starter2-a_hat[1].raw.png: pdf2png output/cards/starter2-a_hat[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-a_hat[1].png: convert output/cards/starter2-a_hat[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-breakfast[2].json.stamp | output/cards/starter2-breakfast[2].json: extract output/everything.json - filter = --arg asset 'cards/starter2-breakfast[2]' '.assets[$$asset].data' - target = output/cards/starter2-breakfast[2].json -build output/cards/starter2-breakfast[2].tex: template2tex output/cards/starter2-breakfast[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-breakfast[2].pdf: tex2pdf output/cards/starter2-breakfast[2].tex || output/.cards/starter2-breakfast[2].pdf.dd - dyndep = output/.cards/starter2-breakfast[2].pdf.dd -build output/.cards/starter2-breakfast[2].pdf.dd: scantex output/cards/starter2-breakfast[2].tex - target = output/cards/starter2-breakfast[2].pdf -build output/cards/starter2-breakfast[2].raw.png: pdf2png output/cards/starter2-breakfast[2].pdf - w = 750 - h = 1050 -build output/cards/starter2-breakfast[2].png: convert output/cards/starter2-breakfast[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-lunch[2].json.stamp | output/cards/starter2-lunch[2].json: extract output/everything.json - filter = --arg asset 'cards/starter2-lunch[2]' '.assets[$$asset].data' - target = output/cards/starter2-lunch[2].json -build output/cards/starter2-lunch[2].tex: template2tex output/cards/starter2-lunch[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-lunch[2].pdf: tex2pdf output/cards/starter2-lunch[2].tex || output/.cards/starter2-lunch[2].pdf.dd - dyndep = output/.cards/starter2-lunch[2].pdf.dd -build output/.cards/starter2-lunch[2].pdf.dd: scantex output/cards/starter2-lunch[2].tex - target = output/cards/starter2-lunch[2].pdf -build output/cards/starter2-lunch[2].raw.png: pdf2png output/cards/starter2-lunch[2].pdf - w = 750 - h = 1050 -build output/cards/starter2-lunch[2].png: convert output/cards/starter2-lunch[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-dinner[1].json.stamp | output/cards/starter2-dinner[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-dinner[1]' '.assets[$$asset].data' - target = output/cards/starter2-dinner[1].json -build output/cards/starter2-dinner[1].tex: template2tex output/cards/starter2-dinner[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-dinner[1].pdf: tex2pdf output/cards/starter2-dinner[1].tex || output/.cards/starter2-dinner[1].pdf.dd - dyndep = output/.cards/starter2-dinner[1].pdf.dd -build output/.cards/starter2-dinner[1].pdf.dd: scantex output/cards/starter2-dinner[1].tex - target = output/cards/starter2-dinner[1].pdf -build output/cards/starter2-dinner[1].raw.png: pdf2png output/cards/starter2-dinner[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-dinner[1].png: convert output/cards/starter2-dinner[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-dog_chow[1].json.stamp | output/cards/starter2-dog_chow[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-dog_chow[1]' '.assets[$$asset].data' - target = output/cards/starter2-dog_chow[1].json -build output/cards/starter2-dog_chow[1].tex: template2tex output/cards/starter2-dog_chow[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-dog_chow[1].pdf: tex2pdf output/cards/starter2-dog_chow[1].tex || output/.cards/starter2-dog_chow[1].pdf.dd - dyndep = output/.cards/starter2-dog_chow[1].pdf.dd -build output/.cards/starter2-dog_chow[1].pdf.dd: scantex output/cards/starter2-dog_chow[1].tex - target = output/cards/starter2-dog_chow[1].pdf -build output/cards/starter2-dog_chow[1].raw.png: pdf2png output/cards/starter2-dog_chow[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-dog_chow[1].png: convert output/cards/starter2-dog_chow[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-first_aid[2].json.stamp | output/cards/starter2-first_aid[2].json: extract output/everything.json - filter = --arg asset 'cards/starter2-first_aid[2]' '.assets[$$asset].data' - target = output/cards/starter2-first_aid[2].json -build output/cards/starter2-first_aid[2].tex: template2tex output/cards/starter2-first_aid[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-first_aid[2].pdf: tex2pdf output/cards/starter2-first_aid[2].tex || output/.cards/starter2-first_aid[2].pdf.dd - dyndep = output/.cards/starter2-first_aid[2].pdf.dd -build output/.cards/starter2-first_aid[2].pdf.dd: scantex output/cards/starter2-first_aid[2].tex - target = output/cards/starter2-first_aid[2].pdf -build output/cards/starter2-first_aid[2].raw.png: pdf2png output/cards/starter2-first_aid[2].pdf - w = 750 - h = 1050 -build output/cards/starter2-first_aid[2].png: convert output/cards/starter2-first_aid[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-good_dog[1].json.stamp | output/cards/starter2-good_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-good_dog[1]' '.assets[$$asset].data' - target = output/cards/starter2-good_dog[1].json -build output/cards/starter2-good_dog[1].tex: template2tex output/cards/starter2-good_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-good_dog[1].pdf: tex2pdf output/cards/starter2-good_dog[1].tex || output/.cards/starter2-good_dog[1].pdf.dd - dyndep = output/.cards/starter2-good_dog[1].pdf.dd -build output/.cards/starter2-good_dog[1].pdf.dd: scantex output/cards/starter2-good_dog[1].tex - target = output/cards/starter2-good_dog[1].pdf -build output/cards/starter2-good_dog[1].raw.png: pdf2png output/cards/starter2-good_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-good_dog[1].png: convert output/cards/starter2-good_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-grandma_soup[1].json.stamp | output/cards/starter2-grandma_soup[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-grandma_soup[1]' '.assets[$$asset].data' - target = output/cards/starter2-grandma_soup[1].json -build output/cards/starter2-grandma_soup[1].tex: template2tex output/cards/starter2-grandma_soup[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-grandma_soup[1].pdf: tex2pdf output/cards/starter2-grandma_soup[1].tex || output/.cards/starter2-grandma_soup[1].pdf.dd - dyndep = output/.cards/starter2-grandma_soup[1].pdf.dd -build output/.cards/starter2-grandma_soup[1].pdf.dd: scantex output/cards/starter2-grandma_soup[1].tex - target = output/cards/starter2-grandma_soup[1].pdf -build output/cards/starter2-grandma_soup[1].raw.png: pdf2png output/cards/starter2-grandma_soup[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-grandma_soup[1].png: convert output/cards/starter2-grandma_soup[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-husky[1].json.stamp | output/cards/starter2-husky[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-husky[1]' '.assets[$$asset].data' - target = output/cards/starter2-husky[1].json -build output/cards/starter2-husky[1].tex: template2tex output/cards/starter2-husky[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-husky[1].pdf: tex2pdf output/cards/starter2-husky[1].tex || output/.cards/starter2-husky[1].pdf.dd - dyndep = output/.cards/starter2-husky[1].pdf.dd -build output/.cards/starter2-husky[1].pdf.dd: scantex output/cards/starter2-husky[1].tex - target = output/cards/starter2-husky[1].pdf -build output/cards/starter2-husky[1].raw.png: pdf2png output/cards/starter2-husky[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-husky[1].png: convert output/cards/starter2-husky[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-move[4].json.stamp | output/cards/starter2-move[4].json: extract output/everything.json - filter = --arg asset 'cards/starter2-move[4]' '.assets[$$asset].data' - target = output/cards/starter2-move[4].json -build output/cards/starter2-move[4].tex: template2tex output/cards/starter2-move[4].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-move[4].pdf: tex2pdf output/cards/starter2-move[4].tex || output/.cards/starter2-move[4].pdf.dd - dyndep = output/.cards/starter2-move[4].pdf.dd -build output/.cards/starter2-move[4].pdf.dd: scantex output/cards/starter2-move[4].tex - target = output/cards/starter2-move[4].pdf -build output/cards/starter2-move[4].raw.png: pdf2png output/cards/starter2-move[4].pdf - w = 750 - h = 1050 -build output/cards/starter2-move[4].png: convert output/cards/starter2-move[4].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-mush[1].json.stamp | output/cards/starter2-mush[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-mush[1]' '.assets[$$asset].data' - target = output/cards/starter2-mush[1].json -build output/cards/starter2-mush[1].tex: template2tex output/cards/starter2-mush[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-mush[1].pdf: tex2pdf output/cards/starter2-mush[1].tex || output/.cards/starter2-mush[1].pdf.dd - dyndep = output/.cards/starter2-mush[1].pdf.dd -build output/.cards/starter2-mush[1].pdf.dd: scantex output/cards/starter2-mush[1].tex - target = output/cards/starter2-mush[1].pdf -build output/cards/starter2-mush[1].raw.png: pdf2png output/cards/starter2-mush[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-mush[1].png: convert output/cards/starter2-mush[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-repair_sled[2].json.stamp | output/cards/starter2-repair_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter2-repair_sled[2]' '.assets[$$asset].data' - target = output/cards/starter2-repair_sled[2].json -build output/cards/starter2-repair_sled[2].tex: template2tex output/cards/starter2-repair_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-repair_sled[2].pdf: tex2pdf output/cards/starter2-repair_sled[2].tex || output/.cards/starter2-repair_sled[2].pdf.dd - dyndep = output/.cards/starter2-repair_sled[2].pdf.dd -build output/.cards/starter2-repair_sled[2].pdf.dd: scantex output/cards/starter2-repair_sled[2].tex - target = output/cards/starter2-repair_sled[2].pdf -build output/cards/starter2-repair_sled[2].raw.png: pdf2png output/cards/starter2-repair_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter2-repair_sled[2].png: convert output/cards/starter2-repair_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-upgrade_sled[2].json.stamp | output/cards/starter2-upgrade_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter2-upgrade_sled[2]' '.assets[$$asset].data' - target = output/cards/starter2-upgrade_sled[2].json -build output/cards/starter2-upgrade_sled[2].tex: template2tex output/cards/starter2-upgrade_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-upgrade_sled[2].pdf: tex2pdf output/cards/starter2-upgrade_sled[2].tex || output/.cards/starter2-upgrade_sled[2].pdf.dd - dyndep = output/.cards/starter2-upgrade_sled[2].pdf.dd -build output/.cards/starter2-upgrade_sled[2].pdf.dd: scantex output/cards/starter2-upgrade_sled[2].tex - target = output/cards/starter2-upgrade_sled[2].pdf -build output/cards/starter2-upgrade_sled[2].raw.png: pdf2png output/cards/starter2-upgrade_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter2-upgrade_sled[2].png: convert output/cards/starter2-upgrade_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter2-wheel_dog[1].json.stamp | output/cards/starter2-wheel_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter2-wheel_dog[1]' '.assets[$$asset].data' - target = output/cards/starter2-wheel_dog[1].json -build output/cards/starter2-wheel_dog[1].tex: template2tex output/cards/starter2-wheel_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter2-wheel_dog[1].pdf: tex2pdf output/cards/starter2-wheel_dog[1].tex || output/.cards/starter2-wheel_dog[1].pdf.dd - dyndep = output/.cards/starter2-wheel_dog[1].pdf.dd -build output/.cards/starter2-wheel_dog[1].pdf.dd: scantex output/cards/starter2-wheel_dog[1].tex - target = output/cards/starter2-wheel_dog[1].pdf -build output/cards/starter2-wheel_dog[1].raw.png: pdf2png output/cards/starter2-wheel_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter2-wheel_dog[1].png: convert output/cards/starter2-wheel_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-a_hat[1].json.stamp | output/cards/starter3-a_hat[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-a_hat[1]' '.assets[$$asset].data' - target = output/cards/starter3-a_hat[1].json -build output/cards/starter3-a_hat[1].tex: template2tex output/cards/starter3-a_hat[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-a_hat[1].pdf: tex2pdf output/cards/starter3-a_hat[1].tex || output/.cards/starter3-a_hat[1].pdf.dd - dyndep = output/.cards/starter3-a_hat[1].pdf.dd -build output/.cards/starter3-a_hat[1].pdf.dd: scantex output/cards/starter3-a_hat[1].tex - target = output/cards/starter3-a_hat[1].pdf -build output/cards/starter3-a_hat[1].raw.png: pdf2png output/cards/starter3-a_hat[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-a_hat[1].png: convert output/cards/starter3-a_hat[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-breakfast[2].json.stamp | output/cards/starter3-breakfast[2].json: extract output/everything.json - filter = --arg asset 'cards/starter3-breakfast[2]' '.assets[$$asset].data' - target = output/cards/starter3-breakfast[2].json -build output/cards/starter3-breakfast[2].tex: template2tex output/cards/starter3-breakfast[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-breakfast[2].pdf: tex2pdf output/cards/starter3-breakfast[2].tex || output/.cards/starter3-breakfast[2].pdf.dd - dyndep = output/.cards/starter3-breakfast[2].pdf.dd -build output/.cards/starter3-breakfast[2].pdf.dd: scantex output/cards/starter3-breakfast[2].tex - target = output/cards/starter3-breakfast[2].pdf -build output/cards/starter3-breakfast[2].raw.png: pdf2png output/cards/starter3-breakfast[2].pdf - w = 750 - h = 1050 -build output/cards/starter3-breakfast[2].png: convert output/cards/starter3-breakfast[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-lunch[2].json.stamp | output/cards/starter3-lunch[2].json: extract output/everything.json - filter = --arg asset 'cards/starter3-lunch[2]' '.assets[$$asset].data' - target = output/cards/starter3-lunch[2].json -build output/cards/starter3-lunch[2].tex: template2tex output/cards/starter3-lunch[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-lunch[2].pdf: tex2pdf output/cards/starter3-lunch[2].tex || output/.cards/starter3-lunch[2].pdf.dd - dyndep = output/.cards/starter3-lunch[2].pdf.dd -build output/.cards/starter3-lunch[2].pdf.dd: scantex output/cards/starter3-lunch[2].tex - target = output/cards/starter3-lunch[2].pdf -build output/cards/starter3-lunch[2].raw.png: pdf2png output/cards/starter3-lunch[2].pdf - w = 750 - h = 1050 -build output/cards/starter3-lunch[2].png: convert output/cards/starter3-lunch[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-dinner[1].json.stamp | output/cards/starter3-dinner[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-dinner[1]' '.assets[$$asset].data' - target = output/cards/starter3-dinner[1].json -build output/cards/starter3-dinner[1].tex: template2tex output/cards/starter3-dinner[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-dinner[1].pdf: tex2pdf output/cards/starter3-dinner[1].tex || output/.cards/starter3-dinner[1].pdf.dd - dyndep = output/.cards/starter3-dinner[1].pdf.dd -build output/.cards/starter3-dinner[1].pdf.dd: scantex output/cards/starter3-dinner[1].tex - target = output/cards/starter3-dinner[1].pdf -build output/cards/starter3-dinner[1].raw.png: pdf2png output/cards/starter3-dinner[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-dinner[1].png: convert output/cards/starter3-dinner[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-dog_chow[1].json.stamp | output/cards/starter3-dog_chow[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-dog_chow[1]' '.assets[$$asset].data' - target = output/cards/starter3-dog_chow[1].json -build output/cards/starter3-dog_chow[1].tex: template2tex output/cards/starter3-dog_chow[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-dog_chow[1].pdf: tex2pdf output/cards/starter3-dog_chow[1].tex || output/.cards/starter3-dog_chow[1].pdf.dd - dyndep = output/.cards/starter3-dog_chow[1].pdf.dd -build output/.cards/starter3-dog_chow[1].pdf.dd: scantex output/cards/starter3-dog_chow[1].tex - target = output/cards/starter3-dog_chow[1].pdf -build output/cards/starter3-dog_chow[1].raw.png: pdf2png output/cards/starter3-dog_chow[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-dog_chow[1].png: convert output/cards/starter3-dog_chow[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-first_aid[2].json.stamp | output/cards/starter3-first_aid[2].json: extract output/everything.json - filter = --arg asset 'cards/starter3-first_aid[2]' '.assets[$$asset].data' - target = output/cards/starter3-first_aid[2].json -build output/cards/starter3-first_aid[2].tex: template2tex output/cards/starter3-first_aid[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-first_aid[2].pdf: tex2pdf output/cards/starter3-first_aid[2].tex || output/.cards/starter3-first_aid[2].pdf.dd - dyndep = output/.cards/starter3-first_aid[2].pdf.dd -build output/.cards/starter3-first_aid[2].pdf.dd: scantex output/cards/starter3-first_aid[2].tex - target = output/cards/starter3-first_aid[2].pdf -build output/cards/starter3-first_aid[2].raw.png: pdf2png output/cards/starter3-first_aid[2].pdf - w = 750 - h = 1050 -build output/cards/starter3-first_aid[2].png: convert output/cards/starter3-first_aid[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-good_dog[1].json.stamp | output/cards/starter3-good_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-good_dog[1]' '.assets[$$asset].data' - target = output/cards/starter3-good_dog[1].json -build output/cards/starter3-good_dog[1].tex: template2tex output/cards/starter3-good_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-good_dog[1].pdf: tex2pdf output/cards/starter3-good_dog[1].tex || output/.cards/starter3-good_dog[1].pdf.dd - dyndep = output/.cards/starter3-good_dog[1].pdf.dd -build output/.cards/starter3-good_dog[1].pdf.dd: scantex output/cards/starter3-good_dog[1].tex - target = output/cards/starter3-good_dog[1].pdf -build output/cards/starter3-good_dog[1].raw.png: pdf2png output/cards/starter3-good_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-good_dog[1].png: convert output/cards/starter3-good_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-grandma_soup[1].json.stamp | output/cards/starter3-grandma_soup[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-grandma_soup[1]' '.assets[$$asset].data' - target = output/cards/starter3-grandma_soup[1].json -build output/cards/starter3-grandma_soup[1].tex: template2tex output/cards/starter3-grandma_soup[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-grandma_soup[1].pdf: tex2pdf output/cards/starter3-grandma_soup[1].tex || output/.cards/starter3-grandma_soup[1].pdf.dd - dyndep = output/.cards/starter3-grandma_soup[1].pdf.dd -build output/.cards/starter3-grandma_soup[1].pdf.dd: scantex output/cards/starter3-grandma_soup[1].tex - target = output/cards/starter3-grandma_soup[1].pdf -build output/cards/starter3-grandma_soup[1].raw.png: pdf2png output/cards/starter3-grandma_soup[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-grandma_soup[1].png: convert output/cards/starter3-grandma_soup[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-husky[1].json.stamp | output/cards/starter3-husky[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-husky[1]' '.assets[$$asset].data' - target = output/cards/starter3-husky[1].json -build output/cards/starter3-husky[1].tex: template2tex output/cards/starter3-husky[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-husky[1].pdf: tex2pdf output/cards/starter3-husky[1].tex || output/.cards/starter3-husky[1].pdf.dd - dyndep = output/.cards/starter3-husky[1].pdf.dd -build output/.cards/starter3-husky[1].pdf.dd: scantex output/cards/starter3-husky[1].tex - target = output/cards/starter3-husky[1].pdf -build output/cards/starter3-husky[1].raw.png: pdf2png output/cards/starter3-husky[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-husky[1].png: convert output/cards/starter3-husky[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-move[4].json.stamp | output/cards/starter3-move[4].json: extract output/everything.json - filter = --arg asset 'cards/starter3-move[4]' '.assets[$$asset].data' - target = output/cards/starter3-move[4].json -build output/cards/starter3-move[4].tex: template2tex output/cards/starter3-move[4].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-move[4].pdf: tex2pdf output/cards/starter3-move[4].tex || output/.cards/starter3-move[4].pdf.dd - dyndep = output/.cards/starter3-move[4].pdf.dd -build output/.cards/starter3-move[4].pdf.dd: scantex output/cards/starter3-move[4].tex - target = output/cards/starter3-move[4].pdf -build output/cards/starter3-move[4].raw.png: pdf2png output/cards/starter3-move[4].pdf - w = 750 - h = 1050 -build output/cards/starter3-move[4].png: convert output/cards/starter3-move[4].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-mush[1].json.stamp | output/cards/starter3-mush[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-mush[1]' '.assets[$$asset].data' - target = output/cards/starter3-mush[1].json -build output/cards/starter3-mush[1].tex: template2tex output/cards/starter3-mush[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-mush[1].pdf: tex2pdf output/cards/starter3-mush[1].tex || output/.cards/starter3-mush[1].pdf.dd - dyndep = output/.cards/starter3-mush[1].pdf.dd -build output/.cards/starter3-mush[1].pdf.dd: scantex output/cards/starter3-mush[1].tex - target = output/cards/starter3-mush[1].pdf -build output/cards/starter3-mush[1].raw.png: pdf2png output/cards/starter3-mush[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-mush[1].png: convert output/cards/starter3-mush[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-repair_sled[2].json.stamp | output/cards/starter3-repair_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter3-repair_sled[2]' '.assets[$$asset].data' - target = output/cards/starter3-repair_sled[2].json -build output/cards/starter3-repair_sled[2].tex: template2tex output/cards/starter3-repair_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-repair_sled[2].pdf: tex2pdf output/cards/starter3-repair_sled[2].tex || output/.cards/starter3-repair_sled[2].pdf.dd - dyndep = output/.cards/starter3-repair_sled[2].pdf.dd -build output/.cards/starter3-repair_sled[2].pdf.dd: scantex output/cards/starter3-repair_sled[2].tex - target = output/cards/starter3-repair_sled[2].pdf -build output/cards/starter3-repair_sled[2].raw.png: pdf2png output/cards/starter3-repair_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter3-repair_sled[2].png: convert output/cards/starter3-repair_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-upgrade_sled[2].json.stamp | output/cards/starter3-upgrade_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter3-upgrade_sled[2]' '.assets[$$asset].data' - target = output/cards/starter3-upgrade_sled[2].json -build output/cards/starter3-upgrade_sled[2].tex: template2tex output/cards/starter3-upgrade_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-upgrade_sled[2].pdf: tex2pdf output/cards/starter3-upgrade_sled[2].tex || output/.cards/starter3-upgrade_sled[2].pdf.dd - dyndep = output/.cards/starter3-upgrade_sled[2].pdf.dd -build output/.cards/starter3-upgrade_sled[2].pdf.dd: scantex output/cards/starter3-upgrade_sled[2].tex - target = output/cards/starter3-upgrade_sled[2].pdf -build output/cards/starter3-upgrade_sled[2].raw.png: pdf2png output/cards/starter3-upgrade_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter3-upgrade_sled[2].png: convert output/cards/starter3-upgrade_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter3-wheel_dog[1].json.stamp | output/cards/starter3-wheel_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter3-wheel_dog[1]' '.assets[$$asset].data' - target = output/cards/starter3-wheel_dog[1].json -build output/cards/starter3-wheel_dog[1].tex: template2tex output/cards/starter3-wheel_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter3-wheel_dog[1].pdf: tex2pdf output/cards/starter3-wheel_dog[1].tex || output/.cards/starter3-wheel_dog[1].pdf.dd - dyndep = output/.cards/starter3-wheel_dog[1].pdf.dd -build output/.cards/starter3-wheel_dog[1].pdf.dd: scantex output/cards/starter3-wheel_dog[1].tex - target = output/cards/starter3-wheel_dog[1].pdf -build output/cards/starter3-wheel_dog[1].raw.png: pdf2png output/cards/starter3-wheel_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter3-wheel_dog[1].png: convert output/cards/starter3-wheel_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-a_hat[1].json.stamp | output/cards/starter4-a_hat[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-a_hat[1]' '.assets[$$asset].data' - target = output/cards/starter4-a_hat[1].json -build output/cards/starter4-a_hat[1].tex: template2tex output/cards/starter4-a_hat[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-a_hat[1].pdf: tex2pdf output/cards/starter4-a_hat[1].tex || output/.cards/starter4-a_hat[1].pdf.dd - dyndep = output/.cards/starter4-a_hat[1].pdf.dd -build output/.cards/starter4-a_hat[1].pdf.dd: scantex output/cards/starter4-a_hat[1].tex - target = output/cards/starter4-a_hat[1].pdf -build output/cards/starter4-a_hat[1].raw.png: pdf2png output/cards/starter4-a_hat[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-a_hat[1].png: convert output/cards/starter4-a_hat[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-breakfast[2].json.stamp | output/cards/starter4-breakfast[2].json: extract output/everything.json - filter = --arg asset 'cards/starter4-breakfast[2]' '.assets[$$asset].data' - target = output/cards/starter4-breakfast[2].json -build output/cards/starter4-breakfast[2].tex: template2tex output/cards/starter4-breakfast[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-breakfast[2].pdf: tex2pdf output/cards/starter4-breakfast[2].tex || output/.cards/starter4-breakfast[2].pdf.dd - dyndep = output/.cards/starter4-breakfast[2].pdf.dd -build output/.cards/starter4-breakfast[2].pdf.dd: scantex output/cards/starter4-breakfast[2].tex - target = output/cards/starter4-breakfast[2].pdf -build output/cards/starter4-breakfast[2].raw.png: pdf2png output/cards/starter4-breakfast[2].pdf - w = 750 - h = 1050 -build output/cards/starter4-breakfast[2].png: convert output/cards/starter4-breakfast[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-lunch[2].json.stamp | output/cards/starter4-lunch[2].json: extract output/everything.json - filter = --arg asset 'cards/starter4-lunch[2]' '.assets[$$asset].data' - target = output/cards/starter4-lunch[2].json -build output/cards/starter4-lunch[2].tex: template2tex output/cards/starter4-lunch[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-lunch[2].pdf: tex2pdf output/cards/starter4-lunch[2].tex || output/.cards/starter4-lunch[2].pdf.dd - dyndep = output/.cards/starter4-lunch[2].pdf.dd -build output/.cards/starter4-lunch[2].pdf.dd: scantex output/cards/starter4-lunch[2].tex - target = output/cards/starter4-lunch[2].pdf -build output/cards/starter4-lunch[2].raw.png: pdf2png output/cards/starter4-lunch[2].pdf - w = 750 - h = 1050 -build output/cards/starter4-lunch[2].png: convert output/cards/starter4-lunch[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-dinner[1].json.stamp | output/cards/starter4-dinner[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-dinner[1]' '.assets[$$asset].data' - target = output/cards/starter4-dinner[1].json -build output/cards/starter4-dinner[1].tex: template2tex output/cards/starter4-dinner[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-dinner[1].pdf: tex2pdf output/cards/starter4-dinner[1].tex || output/.cards/starter4-dinner[1].pdf.dd - dyndep = output/.cards/starter4-dinner[1].pdf.dd -build output/.cards/starter4-dinner[1].pdf.dd: scantex output/cards/starter4-dinner[1].tex - target = output/cards/starter4-dinner[1].pdf -build output/cards/starter4-dinner[1].raw.png: pdf2png output/cards/starter4-dinner[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-dinner[1].png: convert output/cards/starter4-dinner[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-dog_chow[1].json.stamp | output/cards/starter4-dog_chow[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-dog_chow[1]' '.assets[$$asset].data' - target = output/cards/starter4-dog_chow[1].json -build output/cards/starter4-dog_chow[1].tex: template2tex output/cards/starter4-dog_chow[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-dog_chow[1].pdf: tex2pdf output/cards/starter4-dog_chow[1].tex || output/.cards/starter4-dog_chow[1].pdf.dd - dyndep = output/.cards/starter4-dog_chow[1].pdf.dd -build output/.cards/starter4-dog_chow[1].pdf.dd: scantex output/cards/starter4-dog_chow[1].tex - target = output/cards/starter4-dog_chow[1].pdf -build output/cards/starter4-dog_chow[1].raw.png: pdf2png output/cards/starter4-dog_chow[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-dog_chow[1].png: convert output/cards/starter4-dog_chow[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-first_aid[2].json.stamp | output/cards/starter4-first_aid[2].json: extract output/everything.json - filter = --arg asset 'cards/starter4-first_aid[2]' '.assets[$$asset].data' - target = output/cards/starter4-first_aid[2].json -build output/cards/starter4-first_aid[2].tex: template2tex output/cards/starter4-first_aid[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-first_aid[2].pdf: tex2pdf output/cards/starter4-first_aid[2].tex || output/.cards/starter4-first_aid[2].pdf.dd - dyndep = output/.cards/starter4-first_aid[2].pdf.dd -build output/.cards/starter4-first_aid[2].pdf.dd: scantex output/cards/starter4-first_aid[2].tex - target = output/cards/starter4-first_aid[2].pdf -build output/cards/starter4-first_aid[2].raw.png: pdf2png output/cards/starter4-first_aid[2].pdf - w = 750 - h = 1050 -build output/cards/starter4-first_aid[2].png: convert output/cards/starter4-first_aid[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-good_dog[1].json.stamp | output/cards/starter4-good_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-good_dog[1]' '.assets[$$asset].data' - target = output/cards/starter4-good_dog[1].json -build output/cards/starter4-good_dog[1].tex: template2tex output/cards/starter4-good_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-good_dog[1].pdf: tex2pdf output/cards/starter4-good_dog[1].tex || output/.cards/starter4-good_dog[1].pdf.dd - dyndep = output/.cards/starter4-good_dog[1].pdf.dd -build output/.cards/starter4-good_dog[1].pdf.dd: scantex output/cards/starter4-good_dog[1].tex - target = output/cards/starter4-good_dog[1].pdf -build output/cards/starter4-good_dog[1].raw.png: pdf2png output/cards/starter4-good_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-good_dog[1].png: convert output/cards/starter4-good_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-grandma_soup[1].json.stamp | output/cards/starter4-grandma_soup[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-grandma_soup[1]' '.assets[$$asset].data' - target = output/cards/starter4-grandma_soup[1].json -build output/cards/starter4-grandma_soup[1].tex: template2tex output/cards/starter4-grandma_soup[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-grandma_soup[1].pdf: tex2pdf output/cards/starter4-grandma_soup[1].tex || output/.cards/starter4-grandma_soup[1].pdf.dd - dyndep = output/.cards/starter4-grandma_soup[1].pdf.dd -build output/.cards/starter4-grandma_soup[1].pdf.dd: scantex output/cards/starter4-grandma_soup[1].tex - target = output/cards/starter4-grandma_soup[1].pdf -build output/cards/starter4-grandma_soup[1].raw.png: pdf2png output/cards/starter4-grandma_soup[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-grandma_soup[1].png: convert output/cards/starter4-grandma_soup[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-husky[1].json.stamp | output/cards/starter4-husky[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-husky[1]' '.assets[$$asset].data' - target = output/cards/starter4-husky[1].json -build output/cards/starter4-husky[1].tex: template2tex output/cards/starter4-husky[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-husky[1].pdf: tex2pdf output/cards/starter4-husky[1].tex || output/.cards/starter4-husky[1].pdf.dd - dyndep = output/.cards/starter4-husky[1].pdf.dd -build output/.cards/starter4-husky[1].pdf.dd: scantex output/cards/starter4-husky[1].tex - target = output/cards/starter4-husky[1].pdf -build output/cards/starter4-husky[1].raw.png: pdf2png output/cards/starter4-husky[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-husky[1].png: convert output/cards/starter4-husky[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-move[4].json.stamp | output/cards/starter4-move[4].json: extract output/everything.json - filter = --arg asset 'cards/starter4-move[4]' '.assets[$$asset].data' - target = output/cards/starter4-move[4].json -build output/cards/starter4-move[4].tex: template2tex output/cards/starter4-move[4].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-move[4].pdf: tex2pdf output/cards/starter4-move[4].tex || output/.cards/starter4-move[4].pdf.dd - dyndep = output/.cards/starter4-move[4].pdf.dd -build output/.cards/starter4-move[4].pdf.dd: scantex output/cards/starter4-move[4].tex - target = output/cards/starter4-move[4].pdf -build output/cards/starter4-move[4].raw.png: pdf2png output/cards/starter4-move[4].pdf - w = 750 - h = 1050 -build output/cards/starter4-move[4].png: convert output/cards/starter4-move[4].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-mush[1].json.stamp | output/cards/starter4-mush[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-mush[1]' '.assets[$$asset].data' - target = output/cards/starter4-mush[1].json -build output/cards/starter4-mush[1].tex: template2tex output/cards/starter4-mush[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-mush[1].pdf: tex2pdf output/cards/starter4-mush[1].tex || output/.cards/starter4-mush[1].pdf.dd - dyndep = output/.cards/starter4-mush[1].pdf.dd -build output/.cards/starter4-mush[1].pdf.dd: scantex output/cards/starter4-mush[1].tex - target = output/cards/starter4-mush[1].pdf -build output/cards/starter4-mush[1].raw.png: pdf2png output/cards/starter4-mush[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-mush[1].png: convert output/cards/starter4-mush[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-repair_sled[2].json.stamp | output/cards/starter4-repair_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter4-repair_sled[2]' '.assets[$$asset].data' - target = output/cards/starter4-repair_sled[2].json -build output/cards/starter4-repair_sled[2].tex: template2tex output/cards/starter4-repair_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-repair_sled[2].pdf: tex2pdf output/cards/starter4-repair_sled[2].tex || output/.cards/starter4-repair_sled[2].pdf.dd - dyndep = output/.cards/starter4-repair_sled[2].pdf.dd -build output/.cards/starter4-repair_sled[2].pdf.dd: scantex output/cards/starter4-repair_sled[2].tex - target = output/cards/starter4-repair_sled[2].pdf -build output/cards/starter4-repair_sled[2].raw.png: pdf2png output/cards/starter4-repair_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter4-repair_sled[2].png: convert output/cards/starter4-repair_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-upgrade_sled[2].json.stamp | output/cards/starter4-upgrade_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/starter4-upgrade_sled[2]' '.assets[$$asset].data' - target = output/cards/starter4-upgrade_sled[2].json -build output/cards/starter4-upgrade_sled[2].tex: template2tex output/cards/starter4-upgrade_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-upgrade_sled[2].pdf: tex2pdf output/cards/starter4-upgrade_sled[2].tex || output/.cards/starter4-upgrade_sled[2].pdf.dd - dyndep = output/.cards/starter4-upgrade_sled[2].pdf.dd -build output/.cards/starter4-upgrade_sled[2].pdf.dd: scantex output/cards/starter4-upgrade_sled[2].tex - target = output/cards/starter4-upgrade_sled[2].pdf -build output/cards/starter4-upgrade_sled[2].raw.png: pdf2png output/cards/starter4-upgrade_sled[2].pdf - w = 750 - h = 1050 -build output/cards/starter4-upgrade_sled[2].png: convert output/cards/starter4-upgrade_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/starter4-wheel_dog[1].json.stamp | output/cards/starter4-wheel_dog[1].json: extract output/everything.json - filter = --arg asset 'cards/starter4-wheel_dog[1]' '.assets[$$asset].data' - target = output/cards/starter4-wheel_dog[1].json -build output/cards/starter4-wheel_dog[1].tex: template2tex output/cards/starter4-wheel_dog[1].json | templates/card.tex - template = templates/card.tex -build output/cards/starter4-wheel_dog[1].pdf: tex2pdf output/cards/starter4-wheel_dog[1].tex || output/.cards/starter4-wheel_dog[1].pdf.dd - dyndep = output/.cards/starter4-wheel_dog[1].pdf.dd -build output/.cards/starter4-wheel_dog[1].pdf.dd: scantex output/cards/starter4-wheel_dog[1].tex - target = output/cards/starter4-wheel_dog[1].pdf -build output/cards/starter4-wheel_dog[1].raw.png: pdf2png output/cards/starter4-wheel_dog[1].pdf - w = 750 - h = 1050 -build output/cards/starter4-wheel_dog[1].png: convert output/cards/starter4-wheel_dog[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-bear[2].json.stamp | output/cards/race-bear[2].json: extract output/everything.json - filter = --arg asset 'cards/race-bear[2]' '.assets[$$asset].data' - target = output/cards/race-bear[2].json -build output/cards/race-bear[2].tex: template2tex output/cards/race-bear[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-bear[2].pdf: tex2pdf output/cards/race-bear[2].tex || output/.cards/race-bear[2].pdf.dd - dyndep = output/.cards/race-bear[2].pdf.dd -build output/.cards/race-bear[2].pdf.dd: scantex output/cards/race-bear[2].tex - target = output/cards/race-bear[2].pdf -build output/cards/race-bear[2].raw.png: pdf2png output/cards/race-bear[2].pdf - w = 750 - h = 1050 -build output/cards/race-bear[2].png: convert output/cards/race-bear[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-big_dog[2].json.stamp | output/cards/race-big_dog[2].json: extract output/everything.json - filter = --arg asset 'cards/race-big_dog[2]' '.assets[$$asset].data' - target = output/cards/race-big_dog[2].json -build output/cards/race-big_dog[2].tex: template2tex output/cards/race-big_dog[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-big_dog[2].pdf: tex2pdf output/cards/race-big_dog[2].tex || output/.cards/race-big_dog[2].pdf.dd - dyndep = output/.cards/race-big_dog[2].pdf.dd -build output/.cards/race-big_dog[2].pdf.dd: scantex output/cards/race-big_dog[2].tex - target = output/cards/race-big_dog[2].pdf -build output/cards/race-big_dog[2].raw.png: pdf2png output/cards/race-big_dog[2].pdf - w = 750 - h = 1050 -build output/cards/race-big_dog[2].png: convert output/cards/race-big_dog[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-dog_shoes[2].json.stamp | output/cards/race-dog_shoes[2].json: extract output/everything.json - filter = --arg asset 'cards/race-dog_shoes[2]' '.assets[$$asset].data' - target = output/cards/race-dog_shoes[2].json -build output/cards/race-dog_shoes[2].tex: template2tex output/cards/race-dog_shoes[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-dog_shoes[2].pdf: tex2pdf output/cards/race-dog_shoes[2].tex || output/.cards/race-dog_shoes[2].pdf.dd - dyndep = output/.cards/race-dog_shoes[2].pdf.dd -build output/.cards/race-dog_shoes[2].pdf.dd: scantex output/cards/race-dog_shoes[2].tex - target = output/cards/race-dog_shoes[2].pdf -build output/cards/race-dog_shoes[2].raw.png: pdf2png output/cards/race-dog_shoes[2].pdf - w = 750 - h = 1050 -build output/cards/race-dog_shoes[2].png: convert output/cards/race-dog_shoes[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-greyhound[2].json.stamp | output/cards/race-greyhound[2].json: extract output/everything.json - filter = --arg asset 'cards/race-greyhound[2]' '.assets[$$asset].data' - target = output/cards/race-greyhound[2].json -build output/cards/race-greyhound[2].tex: template2tex output/cards/race-greyhound[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-greyhound[2].pdf: tex2pdf output/cards/race-greyhound[2].tex || output/.cards/race-greyhound[2].pdf.dd - dyndep = output/.cards/race-greyhound[2].pdf.dd -build output/.cards/race-greyhound[2].pdf.dd: scantex output/cards/race-greyhound[2].tex - target = output/cards/race-greyhound[2].pdf -build output/cards/race-greyhound[2].raw.png: pdf2png output/cards/race-greyhound[2].pdf - w = 750 - h = 1050 -build output/cards/race-greyhound[2].png: convert output/cards/race-greyhound[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-improvise[2].json.stamp | output/cards/race-improvise[2].json: extract output/everything.json - filter = --arg asset 'cards/race-improvise[2]' '.assets[$$asset].data' - target = output/cards/race-improvise[2].json -build output/cards/race-improvise[2].tex: template2tex output/cards/race-improvise[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-improvise[2].pdf: tex2pdf output/cards/race-improvise[2].tex || output/.cards/race-improvise[2].pdf.dd - dyndep = output/.cards/race-improvise[2].pdf.dd -build output/.cards/race-improvise[2].pdf.dd: scantex output/cards/race-improvise[2].tex - target = output/cards/race-improvise[2].pdf -build output/cards/race-improvise[2].raw.png: pdf2png output/cards/race-improvise[2].pdf - w = 750 - h = 1050 -build output/cards/race-improvise[2].png: convert output/cards/race-improvise[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-midnight_sun[2].json.stamp | output/cards/race-midnight_sun[2].json: extract output/everything.json - filter = --arg asset 'cards/race-midnight_sun[2]' '.assets[$$asset].data' - target = output/cards/race-midnight_sun[2].json -build output/cards/race-midnight_sun[2].tex: template2tex output/cards/race-midnight_sun[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-midnight_sun[2].pdf: tex2pdf output/cards/race-midnight_sun[2].tex || output/.cards/race-midnight_sun[2].pdf.dd - dyndep = output/.cards/race-midnight_sun[2].pdf.dd -build output/.cards/race-midnight_sun[2].pdf.dd: scantex output/cards/race-midnight_sun[2].tex - target = output/cards/race-midnight_sun[2].pdf -build output/cards/race-midnight_sun[2].raw.png: pdf2png output/cards/race-midnight_sun[2].pdf - w = 750 - h = 1050 -build output/cards/race-midnight_sun[2].png: convert output/cards/race-midnight_sun[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-problem_dog[2].json.stamp | output/cards/race-problem_dog[2].json: extract output/everything.json - filter = --arg asset 'cards/race-problem_dog[2]' '.assets[$$asset].data' - target = output/cards/race-problem_dog[2].json -build output/cards/race-problem_dog[2].tex: template2tex output/cards/race-problem_dog[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-problem_dog[2].pdf: tex2pdf output/cards/race-problem_dog[2].tex || output/.cards/race-problem_dog[2].pdf.dd - dyndep = output/.cards/race-problem_dog[2].pdf.dd -build output/.cards/race-problem_dog[2].pdf.dd: scantex output/cards/race-problem_dog[2].tex - target = output/cards/race-problem_dog[2].pdf -build output/cards/race-problem_dog[2].raw.png: pdf2png output/cards/race-problem_dog[2].pdf - w = 750 - h = 1050 -build output/cards/race-problem_dog[2].png: convert output/cards/race-problem_dog[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-push[2].json.stamp | output/cards/race-push[2].json: extract output/everything.json - filter = --arg asset 'cards/race-push[2]' '.assets[$$asset].data' - target = output/cards/race-push[2].json -build output/cards/race-push[2].tex: template2tex output/cards/race-push[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-push[2].pdf: tex2pdf output/cards/race-push[2].tex || output/.cards/race-push[2].pdf.dd - dyndep = output/.cards/race-push[2].pdf.dd -build output/.cards/race-push[2].pdf.dd: scantex output/cards/race-push[2].tex - target = output/cards/race-push[2].pdf -build output/cards/race-push[2].raw.png: pdf2png output/cards/race-push[2].pdf - w = 750 - h = 1050 -build output/cards/race-push[2].png: convert output/cards/race-push[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-rush[2].json.stamp | output/cards/race-rush[2].json: extract output/everything.json - filter = --arg asset 'cards/race-rush[2]' '.assets[$$asset].data' - target = output/cards/race-rush[2].json -build output/cards/race-rush[2].tex: template2tex output/cards/race-rush[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-rush[2].pdf: tex2pdf output/cards/race-rush[2].tex || output/.cards/race-rush[2].pdf.dd - dyndep = output/.cards/race-rush[2].pdf.dd -build output/.cards/race-rush[2].pdf.dd: scantex output/cards/race-rush[2].tex - target = output/cards/race-rush[2].pdf -build output/cards/race-rush[2].raw.png: pdf2png output/cards/race-rush[2].pdf - w = 750 - h = 1050 -build output/cards/race-rush[2].png: convert output/cards/race-rush[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-slow_and_steady[2].json.stamp | output/cards/race-slow_and_steady[2].json: extract output/everything.json - filter = --arg asset 'cards/race-slow_and_steady[2]' '.assets[$$asset].data' - target = output/cards/race-slow_and_steady[2].json -build output/cards/race-slow_and_steady[2].tex: template2tex output/cards/race-slow_and_steady[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-slow_and_steady[2].pdf: tex2pdf output/cards/race-slow_and_steady[2].tex || output/.cards/race-slow_and_steady[2].pdf.dd - dyndep = output/.cards/race-slow_and_steady[2].pdf.dd -build output/.cards/race-slow_and_steady[2].pdf.dd: scantex output/cards/race-slow_and_steady[2].tex - target = output/cards/race-slow_and_steady[2].pdf -build output/cards/race-slow_and_steady[2].raw.png: pdf2png output/cards/race-slow_and_steady[2].pdf - w = 750 - h = 1050 -build output/cards/race-slow_and_steady[2].png: convert output/cards/race-slow_and_steady[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-squirrel[2].json.stamp | output/cards/race-squirrel[2].json: extract output/everything.json - filter = --arg asset 'cards/race-squirrel[2]' '.assets[$$asset].data' - target = output/cards/race-squirrel[2].json -build output/cards/race-squirrel[2].tex: template2tex output/cards/race-squirrel[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-squirrel[2].pdf: tex2pdf output/cards/race-squirrel[2].tex || output/.cards/race-squirrel[2].pdf.dd - dyndep = output/.cards/race-squirrel[2].pdf.dd -build output/.cards/race-squirrel[2].pdf.dd: scantex output/cards/race-squirrel[2].tex - target = output/cards/race-squirrel[2].pdf -build output/cards/race-squirrel[2].raw.png: pdf2png output/cards/race-squirrel[2].pdf - w = 750 - h = 1050 -build output/cards/race-squirrel[2].png: convert output/cards/race-squirrel[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-supply_run[2].json.stamp | output/cards/race-supply_run[2].json: extract output/everything.json - filter = --arg asset 'cards/race-supply_run[2]' '.assets[$$asset].data' - target = output/cards/race-supply_run[2].json -build output/cards/race-supply_run[2].tex: template2tex output/cards/race-supply_run[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-supply_run[2].pdf: tex2pdf output/cards/race-supply_run[2].tex || output/.cards/race-supply_run[2].pdf.dd - dyndep = output/.cards/race-supply_run[2].pdf.dd -build output/.cards/race-supply_run[2].pdf.dd: scantex output/cards/race-supply_run[2].tex - target = output/cards/race-supply_run[2].pdf -build output/cards/race-supply_run[2].raw.png: pdf2png output/cards/race-supply_run[2].pdf - w = 750 - h = 1050 -build output/cards/race-supply_run[2].png: convert output/cards/race-supply_run[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/race-tiara[2].json.stamp | output/cards/race-tiara[2].json: extract output/everything.json - filter = --arg asset 'cards/race-tiara[2]' '.assets[$$asset].data' - target = output/cards/race-tiara[2].json -build output/cards/race-tiara[2].tex: template2tex output/cards/race-tiara[2].json | templates/card.tex - template = templates/card.tex -build output/cards/race-tiara[2].pdf: tex2pdf output/cards/race-tiara[2].tex || output/.cards/race-tiara[2].pdf.dd - dyndep = output/.cards/race-tiara[2].pdf.dd -build output/.cards/race-tiara[2].pdf.dd: scantex output/cards/race-tiara[2].tex - target = output/cards/race-tiara[2].pdf -build output/cards/race-tiara[2].raw.png: pdf2png output/cards/race-tiara[2].pdf - w = 750 - h = 1050 -build output/cards/race-tiara[2].png: convert output/cards/race-tiara[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-antique_sled[2].json.stamp | output/cards/survival-antique_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-antique_sled[2]' '.assets[$$asset].data' - target = output/cards/survival-antique_sled[2].json -build output/cards/survival-antique_sled[2].tex: template2tex output/cards/survival-antique_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-antique_sled[2].pdf: tex2pdf output/cards/survival-antique_sled[2].tex || output/.cards/survival-antique_sled[2].pdf.dd - dyndep = output/.cards/survival-antique_sled[2].pdf.dd -build output/.cards/survival-antique_sled[2].pdf.dd: scantex output/cards/survival-antique_sled[2].tex - target = output/cards/survival-antique_sled[2].pdf -build output/cards/survival-antique_sled[2].raw.png: pdf2png output/cards/survival-antique_sled[2].pdf - w = 750 - h = 1050 -build output/cards/survival-antique_sled[2].png: convert output/cards/survival-antique_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-band_aid[2].json.stamp | output/cards/survival-band_aid[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-band_aid[2]' '.assets[$$asset].data' - target = output/cards/survival-band_aid[2].json -build output/cards/survival-band_aid[2].tex: template2tex output/cards/survival-band_aid[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-band_aid[2].pdf: tex2pdf output/cards/survival-band_aid[2].tex || output/.cards/survival-band_aid[2].pdf.dd - dyndep = output/.cards/survival-band_aid[2].pdf.dd -build output/.cards/survival-band_aid[2].pdf.dd: scantex output/cards/survival-band_aid[2].tex - target = output/cards/survival-band_aid[2].pdf -build output/cards/survival-band_aid[2].raw.png: pdf2png output/cards/survival-band_aid[2].pdf - w = 750 - h = 1050 -build output/cards/survival-band_aid[2].png: convert output/cards/survival-band_aid[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-bandage[2].json.stamp | output/cards/survival-bandage[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-bandage[2]' '.assets[$$asset].data' - target = output/cards/survival-bandage[2].json -build output/cards/survival-bandage[2].tex: template2tex output/cards/survival-bandage[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-bandage[2].pdf: tex2pdf output/cards/survival-bandage[2].tex || output/.cards/survival-bandage[2].pdf.dd - dyndep = output/.cards/survival-bandage[2].pdf.dd -build output/.cards/survival-bandage[2].pdf.dd: scantex output/cards/survival-bandage[2].tex - target = output/cards/survival-bandage[2].pdf -build output/cards/survival-bandage[2].raw.png: pdf2png output/cards/survival-bandage[2].pdf - w = 750 - h = 1050 -build output/cards/survival-bandage[2].png: convert output/cards/survival-bandage[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-bison[2].json.stamp | output/cards/survival-bison[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-bison[2]' '.assets[$$asset].data' - target = output/cards/survival-bison[2].json -build output/cards/survival-bison[2].tex: template2tex output/cards/survival-bison[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-bison[2].pdf: tex2pdf output/cards/survival-bison[2].tex || output/.cards/survival-bison[2].pdf.dd - dyndep = output/.cards/survival-bison[2].pdf.dd -build output/.cards/survival-bison[2].pdf.dd: scantex output/cards/survival-bison[2].tex - target = output/cards/survival-bison[2].pdf -build output/cards/survival-bison[2].raw.png: pdf2png output/cards/survival-bison[2].pdf - w = 750 - h = 1050 -build output/cards/survival-bison[2].png: convert output/cards/survival-bison[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-brandy[2].json.stamp | output/cards/survival-brandy[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-brandy[2]' '.assets[$$asset].data' - target = output/cards/survival-brandy[2].json -build output/cards/survival-brandy[2].tex: template2tex output/cards/survival-brandy[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-brandy[2].pdf: tex2pdf output/cards/survival-brandy[2].tex || output/.cards/survival-brandy[2].pdf.dd - dyndep = output/.cards/survival-brandy[2].pdf.dd -build output/.cards/survival-brandy[2].pdf.dd: scantex output/cards/survival-brandy[2].tex - target = output/cards/survival-brandy[2].pdf -build output/cards/survival-brandy[2].raw.png: pdf2png output/cards/survival-brandy[2].pdf - w = 750 - h = 1050 -build output/cards/survival-brandy[2].png: convert output/cards/survival-brandy[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-caffeine[2].json.stamp | output/cards/survival-caffeine[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-caffeine[2]' '.assets[$$asset].data' - target = output/cards/survival-caffeine[2].json -build output/cards/survival-caffeine[2].tex: template2tex output/cards/survival-caffeine[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-caffeine[2].pdf: tex2pdf output/cards/survival-caffeine[2].tex || output/.cards/survival-caffeine[2].pdf.dd - dyndep = output/.cards/survival-caffeine[2].pdf.dd -build output/.cards/survival-caffeine[2].pdf.dd: scantex output/cards/survival-caffeine[2].tex - target = output/cards/survival-caffeine[2].pdf -build output/cards/survival-caffeine[2].raw.png: pdf2png output/cards/survival-caffeine[2].pdf - w = 750 - h = 1050 -build output/cards/survival-caffeine[2].png: convert output/cards/survival-caffeine[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-jerky[2].json.stamp | output/cards/survival-jerky[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-jerky[2]' '.assets[$$asset].data' - target = output/cards/survival-jerky[2].json -build output/cards/survival-jerky[2].tex: template2tex output/cards/survival-jerky[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-jerky[2].pdf: tex2pdf output/cards/survival-jerky[2].tex || output/.cards/survival-jerky[2].pdf.dd - dyndep = output/.cards/survival-jerky[2].pdf.dd -build output/.cards/survival-jerky[2].pdf.dd: scantex output/cards/survival-jerky[2].tex - target = output/cards/survival-jerky[2].pdf -build output/cards/survival-jerky[2].raw.png: pdf2png output/cards/survival-jerky[2].pdf - w = 750 - h = 1050 -build output/cards/survival-jerky[2].png: convert output/cards/survival-jerky[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-makeshift_sled[2].json.stamp | output/cards/survival-makeshift_sled[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-makeshift_sled[2]' '.assets[$$asset].data' - target = output/cards/survival-makeshift_sled[2].json -build output/cards/survival-makeshift_sled[2].tex: template2tex output/cards/survival-makeshift_sled[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-makeshift_sled[2].pdf: tex2pdf output/cards/survival-makeshift_sled[2].tex || output/.cards/survival-makeshift_sled[2].pdf.dd - dyndep = output/.cards/survival-makeshift_sled[2].pdf.dd -build output/.cards/survival-makeshift_sled[2].pdf.dd: scantex output/cards/survival-makeshift_sled[2].tex - target = output/cards/survival-makeshift_sled[2].pdf -build output/cards/survival-makeshift_sled[2].raw.png: pdf2png output/cards/survival-makeshift_sled[2].pdf - w = 750 - h = 1050 -build output/cards/survival-makeshift_sled[2].png: convert output/cards/survival-makeshift_sled[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-malamute[2].json.stamp | output/cards/survival-malamute[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-malamute[2]' '.assets[$$asset].data' - target = output/cards/survival-malamute[2].json -build output/cards/survival-malamute[2].tex: template2tex output/cards/survival-malamute[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-malamute[2].pdf: tex2pdf output/cards/survival-malamute[2].tex || output/.cards/survival-malamute[2].pdf.dd - dyndep = output/.cards/survival-malamute[2].pdf.dd -build output/.cards/survival-malamute[2].pdf.dd: scantex output/cards/survival-malamute[2].tex - target = output/cards/survival-malamute[2].pdf -build output/cards/survival-malamute[2].raw.png: pdf2png output/cards/survival-malamute[2].pdf - w = 750 - h = 1050 -build output/cards/survival-malamute[2].png: convert output/cards/survival-malamute[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-poutine[2].json.stamp | output/cards/survival-poutine[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-poutine[2]' '.assets[$$asset].data' - target = output/cards/survival-poutine[2].json -build output/cards/survival-poutine[2].tex: template2tex output/cards/survival-poutine[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-poutine[2].pdf: tex2pdf output/cards/survival-poutine[2].tex || output/.cards/survival-poutine[2].pdf.dd - dyndep = output/.cards/survival-poutine[2].pdf.dd -build output/.cards/survival-poutine[2].pdf.dd: scantex output/cards/survival-poutine[2].tex - target = output/cards/survival-poutine[2].pdf -build output/cards/survival-poutine[2].raw.png: pdf2png output/cards/survival-poutine[2].pdf - w = 750 - h = 1050 -build output/cards/survival-poutine[2].png: convert output/cards/survival-poutine[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-salvage[2].json.stamp | output/cards/survival-salvage[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-salvage[2]' '.assets[$$asset].data' - target = output/cards/survival-salvage[2].json -build output/cards/survival-salvage[2].tex: template2tex output/cards/survival-salvage[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-salvage[2].pdf: tex2pdf output/cards/survival-salvage[2].tex || output/.cards/survival-salvage[2].pdf.dd - dyndep = output/.cards/survival-salvage[2].pdf.dd -build output/.cards/survival-salvage[2].pdf.dd: scantex output/cards/survival-salvage[2].tex - target = output/cards/survival-salvage[2].pdf -build output/cards/survival-salvage[2].raw.png: pdf2png output/cards/survival-salvage[2].pdf - w = 750 - h = 1050 -build output/cards/survival-salvage[2].png: convert output/cards/survival-salvage[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-steak[2].json.stamp | output/cards/survival-steak[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-steak[2]' '.assets[$$asset].data' - target = output/cards/survival-steak[2].json -build output/cards/survival-steak[2].tex: template2tex output/cards/survival-steak[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-steak[2].pdf: tex2pdf output/cards/survival-steak[2].tex || output/.cards/survival-steak[2].pdf.dd - dyndep = output/.cards/survival-steak[2].pdf.dd -build output/.cards/survival-steak[2].pdf.dd: scantex output/cards/survival-steak[2].tex - target = output/cards/survival-steak[2].pdf -build output/cards/survival-steak[2].raw.png: pdf2png output/cards/survival-steak[2].pdf - w = 750 - h = 1050 -build output/cards/survival-steak[2].png: convert output/cards/survival-steak[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.cards/survival-venison[2].json.stamp | output/cards/survival-venison[2].json: extract output/everything.json - filter = --arg asset 'cards/survival-venison[2]' '.assets[$$asset].data' - target = output/cards/survival-venison[2].json -build output/cards/survival-venison[2].tex: template2tex output/cards/survival-venison[2].json | templates/card.tex - template = templates/card.tex -build output/cards/survival-venison[2].pdf: tex2pdf output/cards/survival-venison[2].tex || output/.cards/survival-venison[2].pdf.dd - dyndep = output/.cards/survival-venison[2].pdf.dd -build output/.cards/survival-venison[2].pdf.dd: scantex output/cards/survival-venison[2].tex - target = output/cards/survival-venison[2].pdf -build output/cards/survival-venison[2].raw.png: pdf2png output/cards/survival-venison[2].pdf - w = 750 - h = 1050 -build output/cards/survival-venison[2].png: convert output/cards/survival-venison[2].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.legs/farm[1].json.stamp | output/legs/farm[1].json: extract output/everything.json - filter = --arg asset 'legs/farm[1]' '.assets[$$asset].data' - target = output/legs/farm[1].json -build output/legs/farm[1].tex: template2tex output/legs/farm[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/farm[1].pdf: tex2pdf output/legs/farm[1].tex || output/.legs/farm[1].pdf.dd - dyndep = output/.legs/farm[1].pdf.dd -build output/.legs/farm[1].pdf.dd: scantex output/legs/farm[1].tex - target = output/legs/farm[1].pdf -build output/legs/farm[1].raw.png: pdf2png output/legs/farm[1].pdf - w = 750 - h = 1050 -build output/legs/farm[1].png: convert output/legs/farm[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.legs/fishing_hole[1].json.stamp | output/legs/fishing_hole[1].json: extract output/everything.json - filter = --arg asset 'legs/fishing_hole[1]' '.assets[$$asset].data' - target = output/legs/fishing_hole[1].json -build output/legs/fishing_hole[1].tex: template2tex output/legs/fishing_hole[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/fishing_hole[1].pdf: tex2pdf output/legs/fishing_hole[1].tex || output/.legs/fishing_hole[1].pdf.dd - dyndep = output/.legs/fishing_hole[1].pdf.dd -build output/.legs/fishing_hole[1].pdf.dd: scantex output/legs/fishing_hole[1].tex - target = output/legs/fishing_hole[1].pdf -build output/legs/fishing_hole[1].raw.png: pdf2png output/legs/fishing_hole[1].pdf - w = 750 - h = 1050 -build output/legs/fishing_hole[1].png: convert output/legs/fishing_hole[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.legs/hospital[1].json.stamp | output/legs/hospital[1].json: extract output/everything.json - filter = --arg asset 'legs/hospital[1]' '.assets[$$asset].data' - target = output/legs/hospital[1].json -build output/legs/hospital[1].tex: template2tex output/legs/hospital[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/hospital[1].pdf: tex2pdf output/legs/hospital[1].tex || output/.legs/hospital[1].pdf.dd - dyndep = output/.legs/hospital[1].pdf.dd -build output/.legs/hospital[1].pdf.dd: scantex output/legs/hospital[1].tex - target = output/legs/hospital[1].pdf -build output/legs/hospital[1].raw.png: pdf2png output/legs/hospital[1].pdf - w = 750 - h = 1050 -build output/legs/hospital[1].png: convert output/legs/hospital[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.legs/new_moon[1].json.stamp | output/legs/new_moon[1].json: extract output/everything.json - filter = --arg asset 'legs/new_moon[1]' '.assets[$$asset].data' - target = output/legs/new_moon[1].json -build output/legs/new_moon[1].tex: template2tex output/legs/new_moon[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/new_moon[1].pdf: tex2pdf output/legs/new_moon[1].tex || output/.legs/new_moon[1].pdf.dd - dyndep = output/.legs/new_moon[1].pdf.dd -build output/.legs/new_moon[1].pdf.dd: scantex output/legs/new_moon[1].tex - target = output/legs/new_moon[1].pdf -build output/legs/new_moon[1].raw.png: pdf2png output/legs/new_moon[1].pdf - w = 750 - h = 1050 -build output/legs/new_moon[1].png: convert output/legs/new_moon[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.legs/repair_shop[1].json.stamp | output/legs/repair_shop[1].json: extract output/everything.json - filter = --arg asset 'legs/repair_shop[1]' '.assets[$$asset].data' - target = output/legs/repair_shop[1].json -build output/legs/repair_shop[1].tex: template2tex output/legs/repair_shop[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/repair_shop[1].pdf: tex2pdf output/legs/repair_shop[1].tex || output/.legs/repair_shop[1].pdf.dd - dyndep = output/.legs/repair_shop[1].pdf.dd -build output/.legs/repair_shop[1].pdf.dd: scantex output/legs/repair_shop[1].tex - target = output/legs/repair_shop[1].pdf -build output/legs/repair_shop[1].raw.png: pdf2png output/legs/repair_shop[1].pdf - w = 750 - h = 1050 -build output/legs/repair_shop[1].png: convert output/legs/repair_shop[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.legs/volcano[1].json.stamp | output/legs/volcano[1].json: extract output/everything.json - filter = --arg asset 'legs/volcano[1]' '.assets[$$asset].data' - target = output/legs/volcano[1].json -build output/legs/volcano[1].tex: template2tex output/legs/volcano[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/volcano[1].pdf: tex2pdf output/legs/volcano[1].tex || output/.legs/volcano[1].pdf.dd - dyndep = output/.legs/volcano[1].pdf.dd -build output/.legs/volcano[1].pdf.dd: scantex output/legs/volcano[1].tex - target = output/legs/volcano[1].pdf -build output/legs/volcano[1].raw.png: pdf2png output/legs/volcano[1].pdf - w = 750 - h = 1050 -build output/legs/volcano[1].png: convert output/legs/volcano[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/.legs/downhill[1].json.stamp | output/legs/downhill[1].json: extract output/everything.json - filter = --arg asset 'legs/downhill[1]' '.assets[$$asset].data' - target = output/legs/downhill[1].json -build output/legs/downhill[1].tex: template2tex output/legs/downhill[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/downhill[1].pdf: tex2pdf output/legs/downhill[1].tex || output/.legs/downhill[1].pdf.dd - dyndep = output/.legs/downhill[1].pdf.dd -build output/.legs/downhill[1].pdf.dd: scantex output/legs/downhill[1].tex - target = output/legs/downhill[1].pdf -build output/legs/downhill[1].raw.png: pdf2png output/legs/downhill[1].pdf - w = 750 - h = 1050 -build output/legs/downhill[1].png: convert output/legs/downhill[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/instructions-anatomy.pdf: tex2pdf2x instructions-anatomy.tex || output/.instructions-anatomy.pdf.dd - dyndep = output/.instructions-anatomy.pdf.dd -build output/.instructions-anatomy.pdf.dd: scantex instructions-anatomy.tex - target = output/instructions-anatomy.pdf -build output/.legs/junkyard[1].json.stamp | output/legs/junkyard[1].json: extract output/everything.json - filter = --arg asset 'legs/junkyard[1]' '.assets[$$asset].data' - target = output/legs/junkyard[1].json -build output/legs/junkyard[1].tex: template2tex output/legs/junkyard[1].json | templates/leg.tex - template = templates/leg.tex -build output/legs/junkyard[1].pdf: tex2pdf output/legs/junkyard[1].tex || output/.legs/junkyard[1].pdf.dd - dyndep = output/.legs/junkyard[1].pdf.dd -build output/.legs/junkyard[1].pdf.dd: scantex output/legs/junkyard[1].tex - target = output/legs/junkyard[1].pdf -build output/legs/junkyard[1].raw.png: pdf2png output/legs/junkyard[1].pdf - w = 750 - h = 1050 -build output/legs/junkyard[1].png: convert output/legs/junkyard[1].raw.png - args = -set option:distort:viewport 825x1125-37-37 -virtual-pixel Edge -distort SRT 0 +repage -build output/cardrun.pdf: pdfunite output/cards/starter1-a_hat[1].pdf output/cards/starter1-breakfast[2].pdf output/cards/starter1-lunch[2].pdf output/cards/starter1-dinner[1].pdf output/cards/starter1-dog_chow[1].pdf output/cards/starter1-first_aid[2].pdf output/cards/starter1-good_dog[1].pdf output/cards/starter1-grandma_soup[1].pdf output/cards/starter1-husky[1].pdf output/cards/starter1-move[4].pdf output/cards/starter1-mush[1].pdf output/cards/starter1-repair_sled[2].pdf output/cards/starter1-upgrade_sled[2].pdf output/cards/starter1-wheel_dog[1].pdf output/cards/starter2-a_hat[1].pdf output/cards/starter2-breakfast[2].pdf output/cards/starter2-lunch[2].pdf output/cards/starter2-dinner[1].pdf output/cards/starter2-dog_chow[1].pdf output/cards/starter2-first_aid[2].pdf output/cards/starter2-good_dog[1].pdf output/cards/starter2-grandma_soup[1].pdf output/cards/starter2-husky[1].pdf output/cards/starter2-move[4].pdf output/cards/starter2-mush[1].pdf output/cards/starter2-repair_sled[2].pdf output/cards/starter2-upgrade_sled[2].pdf output/cards/starter2-wheel_dog[1].pdf output/cards/starter3-a_hat[1].pdf output/cards/starter3-breakfast[2].pdf output/cards/starter3-lunch[2].pdf output/cards/starter3-dinner[1].pdf output/cards/starter3-dog_chow[1].pdf output/cards/starter3-first_aid[2].pdf output/cards/starter3-good_dog[1].pdf output/cards/starter3-grandma_soup[1].pdf output/cards/starter3-husky[1].pdf output/cards/starter3-move[4].pdf output/cards/starter3-mush[1].pdf output/cards/starter3-repair_sled[2].pdf output/cards/starter3-upgrade_sled[2].pdf output/cards/starter3-wheel_dog[1].pdf output/cards/starter4-a_hat[1].pdf output/cards/starter4-breakfast[2].pdf output/cards/starter4-lunch[2].pdf output/cards/starter4-dinner[1].pdf output/cards/starter4-dog_chow[1].pdf output/cards/starter4-first_aid[2].pdf output/cards/starter4-good_dog[1].pdf output/cards/starter4-grandma_soup[1].pdf output/cards/starter4-husky[1].pdf output/cards/starter4-move[4].pdf output/cards/starter4-mush[1].pdf output/cards/starter4-repair_sled[2].pdf output/cards/starter4-upgrade_sled[2].pdf output/cards/starter4-wheel_dog[1].pdf output/cards/race-bear[2].pdf output/cards/race-big_dog[2].pdf output/cards/race-dog_shoes[2].pdf output/cards/race-greyhound[2].pdf output/cards/race-improvise[2].pdf output/cards/race-midnight_sun[2].pdf output/cards/race-problem_dog[2].pdf output/cards/race-push[2].pdf output/cards/race-rush[2].pdf output/cards/race-slow_and_steady[2].pdf output/cards/race-squirrel[2].pdf output/cards/race-supply_run[2].pdf output/cards/race-tiara[2].pdf output/cards/survival-antique_sled[2].pdf output/cards/survival-band_aid[2].pdf output/cards/survival-bandage[2].pdf output/cards/survival-bison[2].pdf output/cards/survival-brandy[2].pdf output/cards/survival-caffeine[2].pdf output/cards/survival-jerky[2].pdf output/cards/survival-makeshift_sled[2].pdf output/cards/survival-malamute[2].pdf output/cards/survival-poutine[2].pdf output/cards/survival-salvage[2].pdf output/cards/survival-steak[2].pdf output/cards/survival-venison[2].pdf -build output/starter1-deck.pdf: pdfunite output/cards/starter1-a_hat[1].pdf output/cards/starter1-breakfast[2].pdf output/cards/starter1-breakfast[2].pdf output/cards/starter1-lunch[2].pdf output/cards/starter1-lunch[2].pdf output/cards/starter1-dinner[1].pdf output/cards/starter1-dog_chow[1].pdf output/cards/starter1-first_aid[2].pdf output/cards/starter1-first_aid[2].pdf output/cards/starter1-good_dog[1].pdf output/cards/starter1-grandma_soup[1].pdf output/cards/starter1-husky[1].pdf output/cards/starter1-move[4].pdf output/cards/starter1-move[4].pdf output/cards/starter1-move[4].pdf output/cards/starter1-move[4].pdf output/cards/starter1-mush[1].pdf output/cards/starter1-repair_sled[2].pdf output/cards/starter1-repair_sled[2].pdf output/cards/starter1-upgrade_sled[2].pdf output/cards/starter1-upgrade_sled[2].pdf output/cards/starter1-wheel_dog[1].pdf -build output/starter2-deck.pdf: pdfunite output/cards/starter2-a_hat[1].pdf output/cards/starter2-breakfast[2].pdf output/cards/starter2-breakfast[2].pdf output/cards/starter2-lunch[2].pdf output/cards/starter2-lunch[2].pdf output/cards/starter2-dinner[1].pdf output/cards/starter2-dog_chow[1].pdf output/cards/starter2-first_aid[2].pdf output/cards/starter2-first_aid[2].pdf output/cards/starter2-good_dog[1].pdf output/cards/starter2-grandma_soup[1].pdf output/cards/starter2-husky[1].pdf output/cards/starter2-move[4].pdf output/cards/starter2-move[4].pdf output/cards/starter2-move[4].pdf output/cards/starter2-move[4].pdf output/cards/starter2-mush[1].pdf output/cards/starter2-repair_sled[2].pdf output/cards/starter2-repair_sled[2].pdf output/cards/starter2-upgrade_sled[2].pdf output/cards/starter2-upgrade_sled[2].pdf output/cards/starter2-wheel_dog[1].pdf -build output/starter3-deck.pdf: pdfunite output/cards/starter3-a_hat[1].pdf output/cards/starter3-breakfast[2].pdf output/cards/starter3-breakfast[2].pdf output/cards/starter3-lunch[2].pdf output/cards/starter3-lunch[2].pdf output/cards/starter3-dinner[1].pdf output/cards/starter3-dog_chow[1].pdf output/cards/starter3-first_aid[2].pdf output/cards/starter3-first_aid[2].pdf output/cards/starter3-good_dog[1].pdf output/cards/starter3-grandma_soup[1].pdf output/cards/starter3-husky[1].pdf output/cards/starter3-move[4].pdf output/cards/starter3-move[4].pdf output/cards/starter3-move[4].pdf output/cards/starter3-move[4].pdf output/cards/starter3-mush[1].pdf output/cards/starter3-repair_sled[2].pdf output/cards/starter3-repair_sled[2].pdf output/cards/starter3-upgrade_sled[2].pdf output/cards/starter3-upgrade_sled[2].pdf output/cards/starter3-wheel_dog[1].pdf -build output/starter4-deck.pdf: pdfunite output/cards/starter4-a_hat[1].pdf output/cards/starter4-breakfast[2].pdf output/cards/starter4-breakfast[2].pdf output/cards/starter4-lunch[2].pdf output/cards/starter4-lunch[2].pdf output/cards/starter4-dinner[1].pdf output/cards/starter4-dog_chow[1].pdf output/cards/starter4-first_aid[2].pdf output/cards/starter4-first_aid[2].pdf output/cards/starter4-good_dog[1].pdf output/cards/starter4-grandma_soup[1].pdf output/cards/starter4-husky[1].pdf output/cards/starter4-move[4].pdf output/cards/starter4-move[4].pdf output/cards/starter4-move[4].pdf output/cards/starter4-move[4].pdf output/cards/starter4-mush[1].pdf output/cards/starter4-repair_sled[2].pdf output/cards/starter4-repair_sled[2].pdf output/cards/starter4-upgrade_sled[2].pdf output/cards/starter4-upgrade_sled[2].pdf output/cards/starter4-wheel_dog[1].pdf -build output/race-deck.pdf: pdfunite output/cards/race-bear[2].pdf output/cards/race-bear[2].pdf output/cards/race-big_dog[2].pdf output/cards/race-big_dog[2].pdf output/cards/race-dog_shoes[2].pdf output/cards/race-dog_shoes[2].pdf output/cards/race-greyhound[2].pdf output/cards/race-greyhound[2].pdf output/cards/race-improvise[2].pdf output/cards/race-improvise[2].pdf output/cards/race-midnight_sun[2].pdf output/cards/race-midnight_sun[2].pdf output/cards/race-problem_dog[2].pdf output/cards/race-problem_dog[2].pdf output/cards/race-push[2].pdf output/cards/race-push[2].pdf output/cards/race-rush[2].pdf output/cards/race-rush[2].pdf output/cards/race-slow_and_steady[2].pdf output/cards/race-slow_and_steady[2].pdf output/cards/race-squirrel[2].pdf output/cards/race-squirrel[2].pdf output/cards/race-supply_run[2].pdf output/cards/race-supply_run[2].pdf output/cards/race-tiara[2].pdf output/cards/race-tiara[2].pdf -build output/survival-deck.pdf: pdfunite output/cards/survival-antique_sled[2].pdf output/cards/survival-antique_sled[2].pdf output/cards/survival-band_aid[2].pdf output/cards/survival-band_aid[2].pdf output/cards/survival-bandage[2].pdf output/cards/survival-bandage[2].pdf output/cards/survival-bison[2].pdf output/cards/survival-bison[2].pdf output/cards/survival-brandy[2].pdf output/cards/survival-brandy[2].pdf output/cards/survival-caffeine[2].pdf output/cards/survival-caffeine[2].pdf output/cards/survival-jerky[2].pdf output/cards/survival-jerky[2].pdf output/cards/survival-makeshift_sled[2].pdf output/cards/survival-makeshift_sled[2].pdf output/cards/survival-malamute[2].pdf output/cards/survival-malamute[2].pdf output/cards/survival-poutine[2].pdf output/cards/survival-poutine[2].pdf output/cards/survival-salvage[2].pdf output/cards/survival-salvage[2].pdf output/cards/survival-steak[2].pdf output/cards/survival-steak[2].pdf output/cards/survival-venison[2].pdf output/cards/survival-venison[2].pdf -build output/firstleg.pdf: pdfunite output/legs/farm[1].pdf output/legs/fishing_hole[1].pdf output/legs/hospital[1].pdf output/legs/new_moon[1].pdf output/legs/repair_shop[1].pdf output/legs/volcano[1].pdf -build output/secondleg.pdf: pdfunite output/legs/downhill[1].pdf output/legs/junkyard[1].pdf diff --git a/configure.jq b/configure.jq old mode 100644 new mode 100755 index eb7cd1c..b0eccbc --- a/configure.jq +++ b/configure.jq @@ -1,81 +1,121 @@ +#!/usr/bin/env -S jq -r -f # Takes iditacards output json and produces the dynamic ninja build +# Example usage: cue export -- *.cue *.yaml | ./configure.jq > output/build.ninja -def expandout: - to_entries[] | .value + { name: .key }; +def ifblank(x): if . | length > 0 then . else x end; +def cuesources: $ARGS.positional | join(" "); +def header: "# Generated from configure.jq, do not edit this file! -def everything: - ( - (.assets | map_values(. + { pseudo: false })), - (.pseudoassets | map_values(. + { pseudo: true })) - ) | expandout; +root = . -def cuesources: - $ARGS.positional | join(" "); +rule configure + description = recreate build.ninja using configure.jq + command = cue export -- *.cue *.yaml | ./configure.jq --args -- *.cue *.yaml > $out + generator = 1 -"# Generated from configure.jq, do not edit this file!", -"", -"root = .", -"", -"rule configure", -" description = recreate build.ninja using configure.jq via configure.sh", -" command = bash configure.sh > build.ninja", -" generator = 1", -" restat = 1", -"", -"build build.ninja: configure | configure.jq configure.sh \(cuesources)", -"include rules.ninja", -"", -"build output/everything.json: cuegen \(cuesources)", -" filter = .", -"", ( - everything | ( - select(.kind == "template") | - .w = (.size | split("x")[0]) | - .h = (.size | split("x")[1]) | - .rawsuffix = (if .print then "raw." else "" end) | - "build output/.\(.name).json.stamp | output/\(.name).json: extract output/everything.json", - " filter = --arg asset '\(.name)' '.assets[$$asset].data'", - " target = output/\(.name).json", - "build output/\(.name).tex: template2tex output/\(.name).json | templates/\(.template)", - " template = templates/\(.template)", - "build output/\(.name).pdf: tex2pdf output/\(.name).tex || output/.\(.name).pdf.dd", - " dyndep = output/.\(.name).pdf.dd", - "build output/.\(.name).pdf.dd: scantex output/\(.name).tex", - " target = output/\(.name).pdf", - "build output/\(.name).\(.rawsuffix)png: pdf2png output/\(.name).pdf", - " w = \(.w)", - " h = \(.h)", - (select(.print) | "build output/\(.name).png: convert output/\(.name).raw.png"), - (select(.print) | " args = \(.print)") - ),( - select(.kind == "image") | - .rawsuffix = (if .print then "raw." else "" end) | - "build output/\(.name).\(.rawsuffix)png: copy \(.source)", - (select(.print) | "build output/\(.name).png: convert output/\(.name).raw.png"), - (select(.print) | " args = \(.print)") - ),( - select(.kind == "tex") | - .w = (.size | split("x")[0]) | - .h = (.size | split("x")[1]) | - .rawsuffix = (if .print then "raw." else "" end) | - "build output/\(.name).pdf: tex2pdf \(.source) || output/.\(.name).pdf.dd", - " dyndep = output/.\(.name).pdf.dd", - "build output/.\(.name).pdf.dd: scantex \(.source)", - " target = output/\(.name).pdf", - "build output/\(.name).\(.rawsuffix)png: pdf2png output/\(.name).pdf", - " w = \(.w)", - " h = \(.h)", - (select(.print) | "build output/\(.name).png: convert output/\(.name).raw.png"), - (select(.print) | " args = \(.print)") - ),( - select(.kind == "texdoc") | - "build output/\(.name).pdf: tex2pdf2x \(.source) || output/.\(.name).pdf.dd", - " dyndep = output/.\(.name).pdf.dd", - "build output/.\(.name).pdf.dd: scantex \(.source)", - " target = output/\(.name).pdf" - ),( - select(.kind == "cat") | - .ins = (.contents | map("output/\(.).pdf") | join(" ")) | - "build output/\(.name).pdf: pdfunite \(.ins)" - ) -) +build build.ninja: configure | configure.jq \(cuesources) + +base = . +include rules.ninja + +build output/.everything.json: cuegen \(cuesources) + filter = . +"; + +def dirof: split("/")[0:-1] | join("/") | if . | length > 0 then . + "/" else "" end; +def filof: . as $saved | split("/")[-1] | ifblank($saved); +def rawof: filof as $saved | split(".")[0:-1] | join(".") | ifblank($saved); + +def generate_pdf_builds($dir; $raw; $tex): " +build output/\($dir)\($raw).pdf: tex2pdf \($tex) || output/\($dir).\($raw).pdf.dd + dyndep = output/\($dir).\($raw).pdf.dd + +build output/\($dir).\($raw).pdf.dd: scantex \($tex) + target = output/\($dir)\($raw).pdf +"; + +def generate_png_from_pdf_builds($dir; $raw; $pdf): + (.size | split("x")[0]) as $w | + (.size | split("x")[1]) as $h | + (if .print then "raw." else "" end) as $ext | " +build output/\($dir)\($raw).\($ext)png: pdf2png \($pdf) + w = \($w) + h = \($h) +"; + +def generate_png_copy_builds($dir; $raw; $png): + (if .print then "raw." else "" end) as $ext | " +build output/\($dir)\($raw).\($ext)png: copy \($png) +"; + +def generate_print_png_builds($dir; $raw; $rawpng): + if .print then " +build output/\($dir)\($raw).png: convert \($rawpng) + args = \(.print) +" else empty end; + +def generate_template_builds: + (.name | dirof) as $dir | + (.name | rawof) as $raw | (" +build output/\($dir).\($raw).update | output/\($dir).\($raw).json: extract output/.everything.json + filter = --arg asset '\(.name)' '.assets[$$asset].data' + target = output/\($dir).\($raw).json + +build output/\($dir)/tex/\($raw).tex: template2tex output/\($dir).\($raw).json | templates/\(.template) + template = templates/\(.template) +", +generate_pdf_builds($dir; $raw; "output/\($dir)/tex/\($raw).tex"), +generate_png_from_pdf_builds($dir; $raw; "output/\($dir)\($raw).pdf"), +generate_print_png_builds($dir; $raw; "output/\($dir)\($raw).raw.png") +); + +def generate_image_builds: + (.name | dirof) as $dir | + (.name | rawof) as $raw | ( +generate_png_copy_builds($dir; $raw; .source), +generate_print_png_builds($dir; $raw; "output/\($dir)\($raw).raw.png") +); + +def generate_tex_builds: + (.size | split("x")[0]) as $w | + (.size | split("x")[1]) as $h | + (.name | dirof) as $dir | + (.name | rawof) as $raw | ( +generate_pdf_builds($dir; $raw; .source), +generate_png_from_pdf_builds($dir; $raw; "output/\($dir)\($raw).pdf"), +generate_print_png_builds($dir; $raw; "output/\($dir)\($raw).raw.png") +); + +def generate_texdoc_builds: + (.name | dirof) as $dir | + (.name | rawof) as $raw | " +build output/\($dir)\($raw).pdf: tex2pdf2x \(.source) || output/\($dir).\($raw).pdf.dd + dyndep = output/\($dir).\($raw).pdf.dd + +build output/\($dir).\($raw).pdf.dd: scantex \(.source) + target = output/\($dir)\($raw).pdf +"; + +def generate_cat_builds: + (.contents | map("output/" + . + ".pdf") | join(" ")) as $pdfcontents | + (.contents | map("output/" + . + ".png") | join(" ")) as $pngcontents | + (.contents | map("output/" + . + ".raw.png") | join(" ")) as $rawcontents | + (.name | dirof) as $dir | + (.name | rawof) as $raw | " +build output/\($dir)\($raw).pdf: pdfunite \($pdfcontents) +build output/\($dir)\($raw).png: pngunite \($pngcontents) +build output/\($dir)\($raw).raw.png: pngunite \($rawcontents) +"; + +def generate_builds: + (select(.kind == "template") | generate_template_builds), + (select(.kind == "image") | generate_image_builds), + (select(.kind == "tex") | generate_tex_builds), + (select(.kind == "texdoc") | generate_texdoc_builds), + (select(.kind == "cat") | generate_cat_builds); + +def expandout: to_entries[] | .value + { name: .key }; +def everything: (.assets, .pseudoassets) | expandout; + +header, +(everything | generate_builds) diff --git a/configure.py b/configure.py new file mode 100644 index 0000000..47dacc7 --- /dev/null +++ b/configure.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 + +""" Generates build.ninja for iditacards build in output/. """ + +import glob +import subprocess +import json +import os + +cue_sources = glob.glob(f'*.cue') +yaml_sources = glob.glob(f'*.yaml') +sources = cue_sources + yaml_sources + +everything = json.loads(subprocess.run(['cue', 'export', '--'] + sources, stdout=subprocess.PIPE).stdout) + +assets = everything['assets'] +pseudos = everything['pseudoassets'] +all_assets = { **assets, **pseudos } + +print('# Generated from configure.sh, do not edit this file!\n') + +with open(f'{script_dir}/rules.ninja', 'r') as f: + print(f.read()) + +print(f''' +base = . + +rule configure + description = recreate $out using $in + command = $in > $out + generator = 1 + restat = 1 + +build build.ninja: configure ./configure.py | {' '.join(sources)} + +build output/.everything.json: cuegen {' '.join(sources)} + filter = . +''') + +for name, asset in all_assets.items(): + assetdir = os.path + if asset['kind'] == 'template': + print(f''' +build output/.{name}.update | .{name}.json: extract .everything.json + filter = --arg asset '{name}' '.assets[$$asset].data' + target = .{name}.json + +build tex/{name}.tex: template2tex .{name}.json | ../templates/{asset["template"]} + template = ../templates/{asset["template"]} + +build {name}.pdf: tex2pdf tex/{name}.tex || .{name}.pdf.dd + dyndep = .{name}.pdf.dd + +build .{name}.pdf.dd: scantex tex/{name}.tex + target = {name}.pdf + +build {name}.{'raw.' if 'print' in asset else ''}png: pdf2png {name}.pdf + w = {asset['size'].split('x')[0]} + h = {asset['size'].split('x')[1]} +''') + + if asset['kind'] == 'image': + print(f''' +build {name}.{'raw.' if 'print' in asset else ''}png: copy ../{asset['source']} +''') + + if asset['kind'] == 'tex': + print(f''' +build {name}.pdf: tex2pdf ../{asset['source']} || .{name}.pdf.dd + dyndep = .{name}.pdf.dd + +build .{name}.pdf.dd: scantex ../{asset['source']} + target = {name}.pdf + +build {name}.{'raw.' if 'print' in asset else ''}png: pdf2png {name}.pdf + w = {asset['size'].split('x')[0]} + h = {asset['size'].split('x')[1]} +''') + + if asset['kind'] == 'texdoc': + print(f''' +build {name}.pdf: tex2pdf2x ../{asset['source']} || .{name}.pdf.dd + dyndep = .{name}.pdf.dd + +build .{name}.pdf.dd: scantex ../{asset['source']} + target = {name}.pdf +''') + + if asset['kind'] == 'cat': + print(f''' +build {name}.pdf: pdfunite {' '.join(content + '.pdf' for content in asset['contents'])} +''') + + if 'print' in asset: + print(f''' +build {name}.png: convert {name}.raw.png + args = {asset['print']} +''') diff --git a/configure.sh b/configure.sh index e149ccc..23b3277 100755 --- a/configure.sh +++ b/configure.sh @@ -1,8 +1,141 @@ #!/bin/bash -# The real configure script uses jq to parse cue output -cue export -- *.cue *.yaml | jq -r -f configure.jq --args -- *.cue *.yaml +# Outputs a build.ninja script for placing into $1 (or output/ if omitted) -# TODO: generate line-by-line asset list with jq and process them to generate -# build.ninja in builddir="$1". Regenerate any changed *.jsons at configure -# time, hopefully ninja picks up those changes! +scriptdir="$(dirname -- "${BASH_SOURCE[0]}")" +builddir="${1-output}" + +cue_sources=( "$scriptdir"/*.cue "$scriptdir"/*.yaml ) +everything="$(cue export -- "${cue_sources[@]}" | jq -c)" +ASSET_TO_JSON="| to_entries[] | .value + { name: .key }" +mapfile -t assets < <(jq -c ".assets $ASSET_TO_JSON" <<<"$everything") +mapfile -t pseudos < <(jq -c ".pseudoassets $ASSET_TO_JSON" <<<"$everything") + +# base is the directory that contains the script +base="$(realpath -s --relative-to="$builddir" "$scriptdir")" + +# root is the directory that the assets are generated into +root=. + +relative_cue_sources=( ) +for cue_source in "${cue_sources[@]}"; do + relative_cue_sources+=( "$base/$cue_source" ) +done + +cat <&2 + ;; + esac + + # always run convert if print is non-empty + if [ -n "$print" ]; then + cat < $out rule extract - description = extract $out from $in via jq filter $filter - command = jq -c $filter < $in | bash update.sh $out - # restat = 1 + description = extract $target from $in via jq filter $filter + command = touch $out && jq -c $filter < $in | bash $base/update.sh $target + restat = 1 rule tex2pdf description = render tex from $in to $out @@ -29,9 +28,7 @@ rule tex2pdf -interaction=batchmode $ -halt-on-error $ --shell-escape $ - --output-directory=$$(dirname $out) $in >/dev/null $ - && [ $$(basename -s .tex $in) = $$(basename -s .pdf $out) ] $ - || mv $$(dirname $out)/$$(basename -s .tex $in).pdf $out + --output-directory=$$(dirname $out) $in >/dev/null pool = tex_pool rule tex2pdf2x @@ -42,18 +39,16 @@ rule tex2pdf2x -halt-on-error $ --shell-escape $ --output-directory=$$(dirname $out) $in >/dev/null $ - && xelatex $ + || xelatex $ -interaction=batchmode $ -halt-on-error $ --shell-escape $ - --output-directory=$$(dirname $out) $in >/dev/null $ - && { [ $$(basename -s .tex $in) = $$(basename -s .pdf $out) ] $ - || mv $$(dirname $out)/$$(basename -s .tex $in).pdf $out; } + --output-directory=$$(dirname $out) $in >/dev/null pool = tex_pool rule scantex description = scan tex $in for dependencies - command = bash scantex.sh $in $target > $out + command = bash $base/scantex.sh $in $target > $out rule pdf2png description = convert pdf $in to png $out with size $w by $h @@ -74,3 +69,7 @@ rule pdfunite && pdfjam --nup 3x3 $out $ --no-landscape --delta '0.5cm 0.5cm' --scale 0.9 $ -o $$(dirname $out)/$$(basename -s .pdf $out)-mini.pdf >/dev/null 2>&1 + +rule pngunite + description = unite pngs to create a mosaic + command = magick montage -mode concatenate $in $out diff --git a/scantex.sh b/scantex.sh index e22319a..97a2322 100644 --- a/scantex.sh +++ b/scantex.sh @@ -2,9 +2,12 @@ echo 'ninja_dyndep_version = 1' +scriptdir="$(dirname -- "${BASH_SOURCE[0]}")" src="$1" dst="$2" -tgt="${dst%%.*}.pdf" +tgt="${dst%.*}.pdf" + +cd "$scriptdir" || exit 1 temp="$(mktemp -p .)" trap 'rm -rf ${temp} ${temp}.*' EXIT INT @@ -13,7 +16,7 @@ cp "$src" "$temp.tex" xelatex -recorder --shell-escape "$temp.tex" >/dev/null deps="$(awk -v "temp=$temp" -v "repl=${src%%.*}" '/INPUT \./ {gsub(temp,repl,$2); print $2}' < "$temp.fls" | sort | uniq | tr '\n' ' ')" -outs="$(awk -v "temp=${temp#*/}" -v "repl=${dst%%.*}" '/OUTPUT / {gsub(temp,repl,$2); print $2}' < "$temp.fls" | sort | uniq | tr '\n' ' ')" +outs="$(awk -v "temp=${temp#*/}" -v "repl=${dst%.*}" '/OUTPUT / {gsub(temp,repl,$2); print $2}' < "$temp.fls" | sort | uniq | tr '\n' ' ')" echo -n "build $tgt" [ -z "$outs" ] || echo -n " | $outs"