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