VERBOSE ?= @ SHELL := /usr/bin/bash PY ?= python3 HTML_TEMPLATE := template.html PANDOC_FLAGS := -f markdown+tex_math_dollars --embed-resources --standalone --template=$(HTML_TEMPLATE) --metadata-file=pandoc/default-metadata.yml # 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).. GO_ROOT := $(GAME_ROOT)/go 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 PREPARE_RULES := $(GAME_ROOT)/scripts/prepare_html_rules.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))) GENERATE_BOSS := $(GAME_ROOT)/scripts/generate_boss_html.py BOSSES := kraken tyrant BOSS_SITES := $(addprefix boss/,$(BOSSES:=.html)) BOSS_SITES_HTML := $(addprefix $(BUILDDIR)/,$(BOSS_SITES)) SITES := index.md play.md rules.md cards.md maps.md tools.html decks.md boss/ai-companion.html boss/index.html HTML := $(addprefix $(BUILDDIR)/,$(SITES:.md=.html)) $(BOSS_SITES_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 FILES_TO_COPY := hover-placeholder.png tools.html wasm.html $(subst $(HTML_ROOT),,$(wildcard $(HTML_ROOT)js/*)) blog/.htaccess blog/header.html FILES_TO_COPY_TARGETS := $(addprefix $(BUILDDIR)/,$(FILES_TO_COPY)) .PHONY: all clean html rules blog maps misc all: html rules maps misc blog html: $(HTML) rules: $(RULES_HTML) blog: $(BLOG_POSTS_HTML) misc: $(BUILDDIR)/latex-build $(BUILDDIR)/cards-data $(FILES_TO_COPY_TARGETS) \ $(BUILDDIR)/webtools.wasm $(BUILDDIR)/boss/ai-companion.wasm \ $(BUILDDIR)/client.wasm \ $(BUILDDIR)/feed.rss js/wasm_exec.js js/wasm_exec.js: $(shell go env GOROOT)/lib/wasm/wasm_exec.js cp $< $@ $(BUILDDIR)/%.wasm: @echo "creating symlink $@" @if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi ln -sfT $(GO_ROOT)/$(*F)/$(*F).wasm $@ $(FILES_TO_COPY_TARGETS): $(BUILDDIR)/%: % @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)/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) $(PY) $(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 $(PY) $(GENERATE_HOVER_LINKS) $$< | pandoc --toc $(PANDOC_FLAGS) $(2) -o $$@; \ else $(PY) $(GENERATE_HOVER_LINKS) $$< | pandoc $(PANDOC_FLAGS) $(2) -o $$@; fi endef $(eval $(call generateHtml, $(BUILDDIR),)) define generateBlogHtml $(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 $(PY) $(GENERATE_HOVER_LINKS) --cardlisting-path-prefix="../" $$< | pandoc --toc $(PANDOC_FLAGS) $(2) -o $$@; \ else $(PY) $(GENERATE_HOVER_LINKS) --cardlisting-path-prefix="../" $$< | pandoc $(PANDOC_FLAGS) $(2) -o $$@; fi endef $(eval $(call generateBlogHtml, $(BUILDDIR)/blog,)) define generateRulesHtml $(1)/%.html: %.md $(MAKEFILE_LIST) $(HTML_TEMPLATE) $(GENERATE_HOVER_LINKS) $(PREPARE_RULES) @echo "building $$@" @if test \( ! \( -d $$(@D) \) \); then mkdir -p $$(@D);fi $(VERBOSE) if [[ $$$$(cat $$< | wc -l) -gt 80 ]]; \ then pandoc --toc $(PANDOC_FLAGS) $$< $(2) | $(PREPARE_RULES) > $$@; \ else pandoc $(PANDOC_FLAGS) $$< $(2) | $(PREPARE_RULES) > $$@; fi endef $(eval $(call generateRulesHtml, $(BUILDDIR)/rules, -N)) CARDS = $(notdir $(basename $(wildcard $(BUILDDIR)/cards-data/*/*.yml))) GENCARDSDATALIST := echo $(CARDS) | $(PY) -c 'import sys; print("".join([f"" for card in sys.stdin.read().split()]))' CARDSDATALIST := $(shell $(GENCARDSDATALIST)) $(BUILDDIR)/boss/ai-companion.html: boss/ai-companion.html $(MAKEFILE_LIST) @echo "building $@" $(VERBOSE)if test \( ! \( -d $(@D) \) \); then mkdir -p $(@D); fi $(VERBOSE) sed 's|%CARDS%|$(CARDSDATALIST)|' $< > $@ FEEDSRC = feed GEN_FEED = $(FEEDSRC)/create_feed.py FEEDITEMS = $(wildcard $(FEEDSRC)/items/*) $(BUILDDIR)/feed.rss: $(FEEDITEMS) $(GEN_FEED) @echo "building $$@" $(VERBOSE)$(PY) $(GEN_FEED) $(FEEDITEMS) > $@ $(BOSS_SITES_HTML): $(BUILDDIR)/boss/%.html: $(MAKEFILE_LIST) $(GENERATE_BOSS) $(GENERATE_HOVER_LINKS) @echo "building $@" @if test \( ! \( -d $(@D) \) \); then mkdir -p $(@D); fi $(VERBOSE)$(PY) $(GENERATE_BOSS) $(*F) $(DATA_ROOT) $(MAPS_ROOT) $(RULES_ROOT) > $@