diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2021-02-28 17:01:38 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2021-02-28 17:01:38 +0100 |
| commit | 0692ccd33afc4fdd80550e9979b824c1c25e973b (patch) | |
| tree | 8cf46b780af060d9fd6cf5a089729a9491eaa1c7 /latex/Makefile | |
| parent | 5074205584de432892de5b0543b64efde4ddd6e3 (diff) | |
| download | muhqs-game-0692ccd33afc4fdd80550e9979b824c1c25e973b.tar.gz muhqs-game-0692ccd33afc4fdd80550e9979b824c1c25e973b.zip | |
rework how cards are defined and generated
Card definitions are now stored in data/cards/ in a subdirectory for each
set as YAML files.
YAML is still human readable but stricter and better to handle in code
than ini.
The latex filesystem layout resembles the card definition layout and
is created by the Makefile from the YAML card definitions and must not
be regenerated each time by hand.
Diffstat (limited to 'latex/Makefile')
| -rw-r--r-- | latex/Makefile | 100 |
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) |
