SHELL = bash -o pipefail RUBYLIB=$(realpath .)/bin export RUBYLIB # Usage: $(call patsubst,PATTERN1 PATTERN2...,REPLACEMENT,TEXT) # # Like $(patsubst), but takes multiple patterns that are all replaced # with the same replacement. patsubst-all = $(if $1,$(call patsubst-all,$(wordlist 2,$(words $1),$1),$2,$(patsubst $(firstword $1),$2,$3)),$3) # Which suffixes can we turn in to HTML? html.suffixes = md org # Find all source files with those suffixes html.src = $(shell find src -type f \( -false $(foreach s,$(html.suffixes), -o -name '*.$s' ) \)) # Translate the source filenames into output filenames html.out = $(call patsubst-all,$(addprefix src/%.,$(html.suffixes)),out/%.html,$(html.src)) all: $(html.out) bin/page = bin/page bin/util.rb bin/pandoc.rb # We have to repeat each `src/% -> out/%` rule twice; where once we # write it as `out/% -> out/%`. This allows us to chain rules. # Markdown out/%.html: src/%.md $(bin/page) bin/page.html.erb bin/write-atomic mkdir -p $(@D) bin/page html $< | bin/write-atomic $@ out/%.html: out/%.md $(bin/page) bin/page.html.erb bin/write-atomic bin/page html $< | bin/write-atomic $@ # Org-Mode out/%.html: src/%.org $(bin/page) bin/page.html.erb bin/write-atomic mkdir -p $(@D) bin/page html $< | bin/write-atomic $@ out/%.html: out/%.org $(bin/page) bin/page.html.erb bin/write-atomic bin/page html $< | bin/write-atomic $@ #out/index.md : index index.md.erb .var.articles $(addsuffix .md,$(articles)) util.rb Makefile write-atomic # ./index md $(filter %.md,$^) | ./write-atomic $@ #out/index.atom: index index.atom.erb .var.articles $(addsuffix .md,$(articles)) util.rb Makefile write-atomic # ./index atom $(filter %.md,$^) | ./write-atomic $@ .DELETE_ON_ERROR: .SECONDARY: