#!/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_77_1'
books 4
pens 2
books 3
INPUT_77_1
cat > plot.gp <<'INPUT_77_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_77_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' > $@
MAKEFILE
m -s report.html
sed "s/size 640,360/size 800,450/" plot.gp > plot.gp.tmp
mv plot.gp.tmp plot.gp
touch -t 202001010101 totals.tsv chart.svg report.html data.tsv
touch -t 202101010101 plot.gp
printf "change only plotting settings\n"
m -s report.html
grep -q 'viewBox="0 0 800 450"' chart.svg
