VERBOSE ?= @ HTML_TEMPLATE := template.html PANDOC_FLAGS := -f markdown --embed-resources --standalone --template=$(HTML_TEMPLATE) # 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)) HTML_ROOT := $(MAKEFILE_DIR) GAME_ROOT := $(MAKEFILE_DIR).. RULES_ROOT := $(GAME_ROOT)/rules MAPS_ROOT := $(GAME_ROOT)/maps DATA_ROOT := $(GAME_ROOT)/data CARDS_YML_DIR := $(DATA_ROOT)/cards LATEX_ROOT := $(GAME_ROOT)/latex LATEX_BUILDDIR := $(LATEX_ROOT)/build GENERATE_CARD := $(GAME_ROOT)/scripts/generate_card.py GENERATE_CARD_ARGS := --format markdown GENERATE_CARD_LISTING := $(GAME_ROOT)/scripts/generate_card_listing.py GENERATE_HOVER_LINKS := $(GAME_ROOT)/scripts/generate_card_hover_links.py SETS := $(shell find $(CARDS_YML_DIR) -mindepth 1 -type d -printf "%f\n") SETS_SOURCEDIRS := $(foreach set, $(SETS), $(addprefix $(CARDS_YML_DIR)/, $(set))) BUILDDIR := $(MAKEFILE_DIR)build RULE_FILES := rules.md tiles.md ai.md DE_RULES := $(addprefix $(RULES_ROOT)/de/,$(RULE_FILES)) EN_RULES := $(addprefix $(RULES_ROOT)/en/,$(RULE_FILES)) RULES := $(DE_RULES) $(EN_RULES) RULES_HTML := $(subst $(RULES_ROOT), $(BUILDDIR)/rules, $(RULES:.md=.html)) CARDS_LISTING := cards_listing.md DE_CARDS_LISTING := de/$(CARDS_LISTING) EN_CARDS_LISTING := en/$(CARDS_LISTING) LANG_CARDS_LISTINGS := $(foreach card_listing, $(DE_CARDS_LISTING) $(EN_CARDS_LISTING), \ $(addprefix $(BUILDDIR)/, $(card_listing:.md=.html))) SITES := index.md rules.md cards.md maps.md tools.html decks.md HTML := $(addprefix $(BUILDDIR)/,$(SITES:.md=.html)) BLOG_SOURCEDIR := $(HTML_ROOT)/blog BLOG_POSTS_MD := $(shell find $(BLOG_SOURCEDIR) -mindepth 1 -type f -name "*.md" -printf "%f\n") BLOG_POSTS_HTML := $(addprefix $(BUILDDIR)/blog/,$(BLOG_POSTS_MD:.md=.html)) VPATH := $(RULES_ROOT) $(BLOG_SOURCEDIR) # Create a list of yaml card definitions CARDS_YAML := $(foreach dir,$(SETS_SOURCEDIRS),$(wildcard $(dir)/*.yml)) MAKEFILE_LIST := Makefile .PHONY: all clean maps misc all: $(HTML) $(RULES_HTML) maps misc $(BLOG_POSTS_HTML) misc: $(BUILDDIR)/latex-build $(BUILDDIR)/cards-data $(BUILDDIR)/hover-placeholder.png $(BUILDDIR)/hover-placeholder.png: hover-placeholder.png @echo "copying $@" @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi $(VERBOSE) cp $< $@ clean: rm -rf $(BUILDDIR) maps: @echo "building $@" $(VERBOSE) ln -sfT $(MAPS_ROOT) $(BUILDDIR)/maps $(VERBOSE) $(MAKE) -C $(MAPS_ROOT) $(BUILDDIR)/tools.html: tools.html @echo "copying $@" @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi $(VERBOSE) cp $< $@ $(BUILDDIR)/latex-build: @echo "render cards" $(VERBOSE) $(MAKE) -C $(LATEX_ROOT) @echo "create rendered cards symlink" $(VERBOSE) ln -sfT $(LATEX_BUILDDIR) $(BUILDDIR)/latex-build $(BUILDDIR)/cards-data: $(LANG_CARDS_LISTINGS) $(BUILDDIR)/latex-build @echo "create cards data symlink" $(VERBOSE) ln -sfT $(DATA_ROOT)/cards $@ define generateCardsListing $(1)/cards_listing.md: $(CARDS_YAML) $(GENERATE_CARD) $(GENERATE_CARD_LISTING) $(MAKEFILE_LIST) @echo "building $$@" @if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi $(VERBOSE) echo -e "% Cards" > $$@ $(VERBOSE) $(GENERATE_CARD_LISTING) --language=$(2) $(CARDS_YML_DIR) >> $$@; $(1)/cards_listing.html: $(1)/cards_listing.md $(HTML_TEMPLATE) @echo "building $$@" @if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi $(VERBOSE) pandoc --toc $(PANDOC_FLAGS) $$< -o $$@; endef $(eval $(call generateCardsListing, $(BUILDDIR)/de,de)) $(eval $(call generateCardsListing, $(BUILDDIR)/en,en)) define generateHtml $(1)/%.html: %.md $(MAKEFILE_LIST) $(HTML_TEMPLATE) $(GENERATE_HOVER_LINKS) @echo "building $$@" @if test \( ! \( -d $$(@D) \) \) ;then mkdir -p $$(@D);fi $(VERBOSE) if [[ $$$$(cat $$< | wc -l) -gt 80 ]]; \ then $(GENERATE_HOVER_LINKS) $$< | pandoc --toc $(PANDOC_FLAGS) $(2) -o $$@; \ else $(GENERATE_HOVER_LINKS) $$< | pandoc $(PANDOC_FLAGS) $(2) -o $$@; fi endef $(eval $(call generateHtml, $(BUILDDIR),)) $(eval $(call generateHtml, $(BUILDDIR)/rules, -N)) $(eval $(call generateHtml, $(BUILDDIR)/blog,))