#!/usr/bin/env bash
# Lint, project the ledger, compile notes. Overfull is logged, not fatal.
# ./scripts/build.sh --work
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
WORK=""
while [[ $# -gt 0 ]]; do
case "$1" in
--work|--out) WORK="$2"; shift 2 ;;
*) echo "usage: build.sh --work DIR" >&2; exit 2 ;;
esac
done
[[ -n "$WORK" ]] || { echo "usage: build.sh --work DIR" >&2; exit 2; }
WORK="$(cd "$WORK" && pwd)"
NOTES="$WORK/notes"
[[ -f "$WORK/ledger.yaml" ]] || { echo "no ledger.yaml in $WORK" >&2; exit 2; }
[[ -f "$NOTES/notes.tex" ]] || { echo "no notes/notes.tex in $WORK" >&2; exit 2; }
echo "==> lint"
"$ROOT/scripts/python" "$ROOT/scripts/lint.py" --work "$WORK"
echo "==> render ledger"
"$ROOT/scripts/python" "$ROOT/scripts/render_ledger.py" --work "$WORK"
mkdir -p "$WORK/out"
echo "==> xelatex"
(
cd "$NOTES"
export TEXINPUTS="$ROOT/assets:$NOTES:"
xelatex -halt-on-error -interaction=nonstopmode notes.tex >/dev/null
xelatex -halt-on-error -interaction=nonstopmode notes.tex >/dev/null
)
LOG="$NOTES/notes.log"
status=0
if grep -q "Missing character" "$LOG"; then
echo "!! missing glyphs:" >&2
grep -m5 "Missing character" "$LOG" >&2
status=1
fi
if grep -qE "LaTeX Warning: (Reference|Citation|There were undefined references|Label\(s\) may have changed)" "$LOG"; then
if grep -q "undefined" "$LOG"; then
echo "!! undefined references:" >&2
grep -m5 "undefined" "$LOG" >&2 || true
status=1
fi
fi
if grep -q "multiply-defined" "$LOG"; then
echo "!! multiply-defined labels:" >&2
grep -m5 "multiply-defined" "$LOG" >&2
status=1
fi
if grep -qE "^(Overfull|Underfull) \\\\[hv]box" "$LOG"; then
echo "==> overfull/underfull (recorded, not fatal)"
grep -m5 -E "^(Overfull|Underfull) \\\\[hv]box" "$LOG" || true
fi
cp -f "$NOTES/notes.pdf" "$WORK/out/notes.pdf"
echo "==> $WORK/out/notes.pdf"
exit $status