#!/usr/bin/env bash
set -euo pipefail
unset MAKEFLAGS MFLAGS GNUMAKEFLAGS
make_bin=$(command -v gmake || command -v make)
m() { "$make_bin" --no-print-directory -rR "$@"; }
work_dir=$(mktemp -d)
if [ "${KEEP_WORK:-0}" = 1 ]; then
  trap 'printf "Artifacts: %s\n" "$work_dir"' EXIT
else
  trap 'rm -rf -- "$work_dir"' EXIT
fi
cd "$work_dir"
export TMPDIR="$work_dir"
cat > data.tsv <<'INPUT_78_1'
books 4
pens 2
books 3
INPUT_78_1
cat > plot.gp <<'INPUT_78_2'
set terminal svg size 640,360
set output 'chart.svg'
set style fill solid 0.7
set boxwidth 0.6
plot 'totals.tsv' using 2:xticlabels(1) with boxes title 'Totals'
INPUT_78_2
cat > Makefile <<'MAKEFILE'
.DEFAULT_GOAL := report.html
totals.tsv: data.tsv
	@printf "aggregate data\n"
	@awk '{sum[$$1]+=$$2} END {for (key in sum) print key, sum[key]}' $< | sort > $@
chart.svg: totals.tsv plot.gp
	@printf "draw chart\n"
	@gnuplot plot.gp
report.html: chart.svg
	@printf "publish report\n"
	@printf '<!doctype html><title>Make report</title><h1>Totals</h1><img src="chart.svg" alt="Totals by category">\n' > $@

.PHONY: stage package
stage: report.html
	@mkdir -p public
	@cp report.html public/index.html
	@cp chart.svg public/chart.svg
package: stage
	@tar -czf website.tar.gz -C public .
MAKEFILE
m -s package
test -s website.tar.gz
find public -type f | sort
printf "website.tar.gz ready\n"
