.PHONY: check clean serve watch MAKEFLAGS := -j$(shell nproc) # Source- and destination files srcs := $(shell find src -type f -not -name '*.gsp' -or -name 'index.gsp') dsts := $(srcs:src/%=out/%) dsts := $(dsts:%.gsp=%.html) dsts := $(dsts:%.dot=%.svg) # Destination directories dirs := $(sort $(dir $(dsts))) # Files that most *.gsp files will depend on incs := $(wildcard include/*) all: $(dirs) $(dsts) $(dirs)&: @mkdir -p $(dirs) @printf 'MKDIR\t%s\n' $(dirs) out/%: src/% @cp $< $@ @printf 'CP\t%s\n' $@ out/%.svg: src/%.dot @dot -Tsvg $< >$@ @printf 'DOT\t%s\n' $@ # Generate dependencies for GSP pages gendeps = $(incs) $(wildcard $(dir $(patsubst out/%.html,src/%.gsp,$1))*.gsp) .SECONDEXPANSION: out/%.html: src/%.gsp $$(call gendeps,$$@) @PATH="$$PATH:./include" \ m4 -P $(foreach dir,$(^D),-I$(dir)) include/lib.m4 $< | gsp >$@ @printf 'GSP\t%s\n' "$@" check: LANG=en_US.UTF-8 find src -name 'index.gsp' -exec \ aspell --home-dir=./ --ignore-case check {} \; clean: rm -rf out serve: darkhttpd out --daemon watch: git ls-files | entr $(MAKE)