#!/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)