1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
.DEFAULT_GOAL = all
PDFLATEX = lualatex
PDFTOPPM = pdftoppm
PDFUNITE = pdfunite
PDFTOPPM_FLAGS = -singlefile -png -r 300
COMMON_TEX_FILES = common.tex libs.tex colors.tex tikzcards.tex
# The full path to the Makefile
MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
# The path to the directory of the Makefile
MAKEFILE_DIR := $(dir $(MAKEFILE_PATH))
LATEX_ROOT := $(MAKEFILE_DIR)
GAME_ROOT := $(MAKEFILE_DIR)/../
DATA_ROOT := $(GAME_ROOT)/data
CARDS_YML_DIR := $(DATA_ROOT)/cards
# the default language
LANGUAGE ?= en
CARDS_TEX_DIR := $(LATEX_ROOT)/cards/$(LANGUAGE)
BUILDDIR := $(LATEX_ROOT)/build/$(LANGUAGE)
ASSETS_PATH := $(GAME_ROOT)/assets
PDFLATEX_ENV := TEXINPUTS=".:$(ASSETS_PATH):"
GENERATE_CARD := $(GAME_ROOT)scripts/generate_card.py
GENERATE_CARD_FLAGS := --language=$(LANGUAGE)
SETS := $(shell find $(CARDS_YML_DIR) -mindepth 1 -type d -printf "%f\n")
SETS_SOURCEDIRS := $(foreach set, $(SETS), $(addprefix $(CARDS_YML_DIR)/, $(set)))
SETS_TEXDIRS := $(foreach set, $(SETS), $(addprefix $(CARDS_TEX_DIR)/, $(set)))
SETS_BUILDDIRS := $(foreach set, $(SETS), $(addprefix $(BUILDDIR)/, $(set)))
# tex directory for sets collection tex
SETS_TEX_DIR := $(LATEX_ROOT)/sets/$(LANGUAGE)
SETS_TEX := $(foreach set, $(SETS), $(addprefix $(SETS_TEX_DIR)/, $(set).tex))
SETS_PDF_DIR := $(BUILDDIR)
SETS_PDF := $(foreach set, $(SETS), $(addprefix $(SETS_PDF_DIR)/, $(set).pdf))
# Add yml dirs to VPATH, the place make will look for the source files
VPATH = $(SETS_SOURCEDIRS) $(SETS_TEXDIRS) $(SETS_TEX_DIR)
# Create a list of yaml card definitions
CARDS_YML := $(foreach dir,$(SETS_SOURCEDIRS),$(wildcard $(dir)/*.yml))
CARDS_TEX := $(subst $(CARDS_YML_DIR),$(CARDS_TEX_DIR),$(CARDS_YML:.yml=.tex))
CARDS_PDF := $(subst $(CARDS_YML_DIR),$(BUILDDIR),$(CARDS_YML:.yml=.pdf))
CARDS_PNG = $(CARDS_PDF:.pdf=.png)
VERBOSE ?= @
MAKEFILE_LIST = Makefile
define generateSetTexRules
$(SETS_TEX_DIR)/$(1).tex: $(wildcard $(CARDS_TEX_DIR)/$(1)/*.tex) $(MAKEFILE_LIST)
@echo "generating $(1) tex"
@if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi
$(VERBOSE) echo "\documentclass[a4paper,landscape]{article}" > $$@
$(VERBOSE) echo "\usepackage[margin=6mm,top=5mm]{geometry}" >> $$@
$(VERBOSE) echo "\input{libs.tex}" >> $$@
$(VERBOSE) echo "\input{colors.tex}" >> $$@
$(VERBOSE) echo "\input{tikzcards.tex}" >> $$@
$(VERBOSE) echo "\usepackage{standalone}" >> $$@
$(VERBOSE) echo "\begin{document}" >> $$@
$(VERBOSE) echo "\begin{center}" >> $$@
$(VERBOSE) echo "\pagestyle{empty}" >> $$@
$(VERBOSE)for card in $(wildcard $(CARDS_TEX_DIR)/$(1)/*.tex); do \
echo "\includestandalone{$$$${card%.tex}}" >> $$@; done
$(VERBOSE) echo "\end{center}" >> $$@
$(VERBOSE) echo "\end{document}" >> $$@
endef
# Generate set tex rules
$(foreach set, $(SETS), $(eval $(call generateSetTexRules,$(set))))
define generateCardTexRules
$(1)/%.tex: %.yml $(GENERATE_CARD)
@echo building $$@
@if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi
$(VERBOSE)$(GENERATE_CARD) $(GENERATE_CARD_FLAGS) $$< > $$@
endef
# Generate cards tex rules
$(foreach texdir, $(SETS_TEXDIRS), $(eval $(call generateCardTexRules, $(texdir))))
define generatePdfRules
$(1)/%.pdf: %.tex $(COMMON_TEX_FILES) $(MAKEFILE_LIST)
@echo building $$@
@if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi
$(VERBOSE)$(PDFLATEX_ENV) $(PDFLATEX) --output-directory $$(@D) $$<
endef
# Generate cards pdf rules
$(foreach pdfdir, $(SETS_BUILDDIRS), $(eval $(call generatePdfRules, $(pdfdir))))
# Generate sets pdf rule
$(eval $(call generatePdfRules, $(SETS_PDF_DIR)))
.PHONY: all de en
all: de en
de:
$(MAKE) cards-all sets LANGUAGE=de
en:
$(MAKE) cards-all sets
.PHONY: sets sets-tex sets-pdf
sets: sets-tex sets-pdf
sets-tex: $(SETS_TEX)
sets-pdf: $(SETS_PDF)
.PHONY: cards-all cards-tex cards-pdf cards-png
cards-all: cards-tex cards-pdf cards-png
@echo "building $(LANGUAGE) cards"
cards-tex: $(CARDS_TEX)
cards-pdf: $(CARDS_PDF)
cards-png: $(CARDS_PNG)
$(BUILDDIR)/cards.pdf: $(CARDS_PDF) $(MAKEFILE_LIST)
@echo "building › › $@"
@if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
$(VERBOSE)$(PDFUNITE) $(CARDS_PDF) $@
%.png: %.pdf $(MAKEFILE_LIST)
@echo "png › $@"
@if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
$(VERBOSE)$(PDFTOPPM) $(PDFTOPPM_FLAGS) $< $*
.PHONY: clean clean-all
clean:
rm -rf $(BUILDDIR)
clean-all: clean
rm -rf $(CARDS_TEX_DIR)
|