102 lines
2.5 KiB
Makefile
102 lines
2.5 KiB
Makefile
|
SHELL = /bin/sh
|
||
|
.SUFFIXES:
|
||
|
|
||
|
# collect notes, sorted by time
|
||
|
notes := $(wildcard $(shell ls -t *.md))
|
||
|
# functions for pages and parts, takes a list of notes as the only argument
|
||
|
getpages = $(patsubst %.md,public_html/%.html,$(1))
|
||
|
getparts = $(patsubst %.md,partials/%.html,$(1))
|
||
|
# collect orphans
|
||
|
orphans = $(filter-out \
|
||
|
$(call getpages,$(notes)),\
|
||
|
$(wildcard public_html/*.html) $(wildcard public_html/.*.html))
|
||
|
|
||
|
.PHONY: all
|
||
|
all: $(call getpages,$(notes))
|
||
|
$(if $(orphans),$(RM) $(orphans))
|
||
|
|
||
|
.PHONY: hidden
|
||
|
hidden: notes := $(wildcard $(shell ls -t .*.md *.md))
|
||
|
hidden: all
|
||
|
|
||
|
public_html/%.html: %.md sitemap.json links.json
|
||
|
$(eval deps := $(shell jq -r '.["$<"] | unique | join(" ")' links.json))
|
||
|
$(if $(deps), $(MAKE) $(call getparts,$(deps)))
|
||
|
pandoc \
|
||
|
--data-dir pandoc \
|
||
|
--defaults bavbavhaus.net.yaml \
|
||
|
--template bavbavhaus.net.html5 \
|
||
|
--metadata url=$< \
|
||
|
--lua-filter insert_sitemap.lua \
|
||
|
--lua-filter insert_links.lua \
|
||
|
--lua-filter update_internal_targets.lua \
|
||
|
--output $@ \
|
||
|
$<
|
||
|
|
||
|
# preserve `partials/%.html` intermediate files
|
||
|
.PRECIOUS: partials/%.html
|
||
|
partials/%.html: %.md | partials
|
||
|
pandoc \
|
||
|
--data-dir pandoc \
|
||
|
--defaults bavbavhaus.net.yaml \
|
||
|
--template bavbavhaus.net.inline.html5 \
|
||
|
--id-prefix $< \
|
||
|
--metadata url=$< \
|
||
|
--lua-filter update_internal_targets.lua \
|
||
|
--output $@ \
|
||
|
$<
|
||
|
|
||
|
# create `partials` directory if it doesn't exist
|
||
|
partials:
|
||
|
test -d $@ || mkdir $@
|
||
|
|
||
|
# generate `sitemap.json`
|
||
|
sitemap.json: FORCE
|
||
|
pandoc lua pandoc/sitemap.lua $@ $(notes)
|
||
|
|
||
|
# generate `links.json`
|
||
|
links.json: FORCE
|
||
|
pandoc lua pandoc/links.lua $@ $(notes)
|
||
|
|
||
|
FORCE: ;
|
||
|
|
||
|
# clean all targets
|
||
|
.PHONY: clean
|
||
|
clean:
|
||
|
$(RM) $(patsubst %.md,public_html/%.html,$(notes))
|
||
|
$(RM) sitemap.json links.json
|
||
|
$(RM) -r partials
|
||
|
|
||
|
# # dest
|
||
|
# .PHONY: dest
|
||
|
# dest:
|
||
|
# test -d "dest" || mkdir "dest"
|
||
|
#
|
||
|
# # docx
|
||
|
# dest/%.docx: notes/%.md\
|
||
|
# pandoc/defaults/docx.yaml\
|
||
|
# pandoc/reference-sl.docx\
|
||
|
# pandoc/csl/chicago-fullnote-sl.csl\
|
||
|
# pandoc/filters/pandoc-quotes.lua\
|
||
|
# pandoc/filters/delink.lua\
|
||
|
# | dest
|
||
|
# pandoc --data-dir=pandoc -ddocx -o $@ $<
|
||
|
#
|
||
|
# # pdf
|
||
|
# dest/%.pdf: notes/%.md\
|
||
|
# pandoc/defaults/pdf.yaml\
|
||
|
# pandoc/csl/chicago-fullnote-sl.csl\
|
||
|
# | dest
|
||
|
# pandoc --data-dir=pandoc -dpdf -o $@ $<
|
||
|
#
|
||
|
# # presentation
|
||
|
# dest/%.s5.html: notes/%.md\
|
||
|
# pandoc/defaults/s5.yaml\
|
||
|
# pandoc/templates/default.s5\
|
||
|
# pandoc/s5/default/pretty.css\
|
||
|
# pandoc/s5/default/framing.css\
|
||
|
# pandoc/csl/chicago-fullnote-sl.csl\
|
||
|
# pandoc/filters/pandoc-quotes.lua\
|
||
|
# | dest
|
||
|
# pandoc --data-dir=pandoc -ds5 -o $@ $<
|