aboutsummaryrefslogtreecommitdiff
path: root/latex/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'latex/Makefile')
-rw-r--r--latex/Makefile100
1 files changed, 63 insertions, 37 deletions
diff --git a/latex/Makefile b/latex/Makefile
index 5eedeb05..ce98c59d 100644
--- a/latex/Makefile
+++ b/latex/Makefile
@@ -1,4 +1,4 @@
-.PHONY: all clean
+.PHONY: all clean clean-all cards-tex cards-pdf cards-png
.DEFAULT_GOAL = all
@@ -6,57 +6,83 @@ PDFLATEX = lualatex
PDFTOPPM = pdftoppm
PDFUNITE = pdfunite
-PDFTOPPM_FLAGS = -singlefile -png -r 300
+GENERATE_CARD = $(GAME_ROOT)scripts/generate_card.py
-COMMON_TEX_FILES = libs.tex colors.tex tikzcards.tex
+PDFTOPPM_FLAGS = -singlefile -png -r 300
-CARDS_DIR = cards
-CARD_SOURCES = $(shell find $(CARDS_DIR) -name "*.tex")
+COMMON_TEX_FILES = common.tex libs.tex colors.tex tikzcards.tex
-SETS_DIR = sets
-SETS_SOURCES = $(shell find $(SETS_DIR) -name "*.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))
-VERBOSE = @
-PDF_DIR = ./build
+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
-ALL_SOURCES = $(CARD_SOURCES) $(SETS_SOURCES)
-PDFS = $(notdir $(ALL_SOURCES:.tex=.pdf))
-PDFS_PREFIXED = $(addprefix $(PDF_DIR)/,$(PDFS))
+ASSETS_PATH = $(GAME_ROOT)/assets
+PDFLATEX_ENV := TEXINPUTS=".:$(ASSETS_PATH):"
-CARD_PNGS = $(notdir $(CARD_SOURCES:.tex=.png))
-CARD_PNGS_PREFIXED = $(addprefix $(PDF_DIR)/,$(CARD_PNGS))
+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)))
-MAKEFILE_LIST = Makefile
+# Add yml dirs to VPATH, the place make will look for the source files
+VPATH = $(SETS_SOURCEDIRS) $(SETS_TEXDIRS)
-ASSETS_PATH = ../assets
-PDFLATEX_ENV := TEXINPUTS=".:$(ASSETS_PATH):"
+# 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)
-all: $(PDF_DIR)/print.pdf $(PDFS_PREFIXED) $(CARD_PNGS_PREFIXED)
+VERBOSE = @
-$(PDF_DIR)/print.pdf: print.tex $(CARD_SOURCES) $(COMMON_TEX_FILES) $(MAKEFILE_LIST)
- @echo "building › › $@"
- @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
- $(VERBOSE) $(PDFLATEX_ENV) $(PDFLATEX) --output-directory $(PDF_DIR) print.tex
+MAKEFILE_LIST = Makefile
-$(PDF_DIR)/cards.pdf: $(PDFS_PREFIXED) $(MAKEFILE_LIST)
+# 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) $(PDFS_PREFIXED) $@
-
-$(PDF_DIR)/%.pdf : $(CARDS_DIR)/%.tex $(COMMON_TEX_FILES) $(MAKEFILE_LIST)
- @echo "card › $@"
- @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
- $(VERBOSE) $(PDFLATEX_ENV) $(PDFLATEX) --output-directory $(PDF_DIR) $(CARDS_DIR)/$*.tex
+ $(VERBOSE)$(PDFUNITE) $(CARDS_PDF) $@
-$(PDF_DIR)/%.pdf : $(SETS_DIR)/%.tex $(CARD_SOURCES) $(COMMON_TEX_FILES) $(MAKEFILE_LIST)
- @echo "card › $@"
- @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
- $(VERBOSE) $(PDFLATEX_ENV) $(PDFLATEX) --output-directory $(PDF_DIR) $^
-
-$(PDF_DIR)/%.png : $(PDF_DIR)/%.pdf $(MAKEFILE_LIST)
+%.png: %.pdf $(MAKEFILE_LIST)
@echo "png › $@"
@if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
- $(VERBOSE) $(PDFTOPPM) $(PDFTOPPM_FLAGS) $(PDF_DIR)/$*.pdf $(PDF_DIR)/$*
+ $(VERBOSE)$(PDFTOPPM) $(PDFTOPPM_FLAGS) $< $*
clean:
- rm -rf build/
+ rm -rf $(BUILDDIR)
+
+clean-all: clean
+ rm -rf $(CARDS_TEX_DIR)