#!/bin/sh trampoline=; define()(:) # -*- makefile -*- ########################################### ## C H U M S : lots of CHUMs at once ... ## ## Make a website out of code repoes, ez ## ## Quickstart: cd project; vi .chum ---> ## ## [change variables given below]. see ## ## README for details ##################### ########################################### define trampoline if command -v gmake >/dev/null 2>&1 then exec gmake -kr -f "$0" "$@" else exec make -kr -f "$0" "$@" fi endef ####################### code starts here ## PROJECTS = OUTDIR = $(PWD)/chums.d VDUMPF = $(OUTDIR)/.chump.txt CHUM = $(HOME)/code/chum/chum SERVER = @printf 'Generated files are in %s/\n' REMOTE = ROOT = define TEMPLATE = chums {{CONTENT}} endef ### INTERNAL define _CHUMS BEGIN { FS = "\t"; } { if (URLS[$$1]) next; URLS[$$1] = 1 thisline = sprintf("
%s
\n
%s
\n", $$2, $$1, $$3) OUTSTR = OUTSTR (OUTSTR?"\n":"") thisline } END { print(template_replace(template)) } function template_replace (str) { for (ts in TMPLV) gsub("{{"ts"}}", TMPLV[ts], str) gsub(/&/, "\\\\&", OUTSTR) sub("{{CONTENT}}", OUTSTR, str) return str } endef -include .chums $(OUTDIR): export TEMPL:=-vtemplate=$(TEMPLATE) $(OUTDIR): export PROG:=$(_CHUMS) $(OUTDIR): $(PROJECTS) for p in $(PROJECTS); do \ $(CHUM) VDUMPF="$(VDUMPF)" \ URL_ROOT="$(ROOT)/$$p/" \ OUTDIR="$(OUTDIR)/$$p" \ -C "$$p" build; done awk "$$TEMPL" "$$PROG" "$(VDUMPF)" > $(OUTDIR)/index.html .PHONY: serve publish clean serve: $(OUTDIR) $(SERVER) $(OUTDIR) publish: $(OUTDIR) rsync -zaP $(OUTDIR)/ $(REMOTE)/ clean: rm -rf $(OUTDIR) $(VDUMPF)