aboutsummaryrefslogtreecommitdiff
path: root/latex/Makefile
blob: 68ada1dddda44c228693d600b63803011c905299 (plain)
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
.PHONY: all clean clean-all cards-tex cards-pdf cards-png

.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
CARDS_TEX_DIR := $(LATEX_ROOT)/cards
BUILDDIR := $(LATEX_ROOT)/build

ASSETS_PATH := $(GAME_ROOT)/assets
PDFLATEX_ENV := TEXINPUTS=".:$(ASSETS_PATH):"

GENERATE_CARD := $(GAME_ROOT)scripts/generate_card.py

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)))

# Add yml dirs to VPATH, the place make will look for the source files
VPATH = $(SETS_SOURCEDIRS) $(SETS_TEXDIRS)

# Create a list of yaml card definitions
CARDS_YAML := $(foreach dir,$(SETS_SOURCEDIRS),$(wildcard $(dir)/*.yml))
CARDS_TEX := $(subst $(CARDS_YML_DIR),$(CARDS_TEX_DIR),$(CARDS_YAML:.yml=.tex))
CARDS_PDF := $(subst $(CARDS_YML_DIR),$(BUILDDIR),$(CARDS_YAML:.yml=.pdf))
CARDS_PNG = $(CARDS_PDF:.pdf=.png)

VERBOSE ?= @

MAKEFILE_LIST = Makefile

# Define the functions that will generate each rule
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

define generateTexRules
$(1)/%.tex: %.yml
	@echo building		 $$@
	@if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi
	$(VERBOSE)$(GENERATE_CARD) --latex-root $(LATEX_ROOT) $$<
endef

# Generate tex rules
$(foreach texdir, $(SETS_TEXDIRS), $(eval $(call generateTexRules, $(texdir))))

# Generate pdf rules
$(foreach pdfdir, $(SETS_BUILDDIRS), $(eval $(call generatePdfRules, $(pdfdir))))

all: cards-tex cards-pdf cards-png
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) $< $*

clean:
	rm -rf $(BUILDDIR)

clean-all: clean
	rm -rf $(CARDS_TEX_DIR)