#!/bin/bash

abort() {
  echo "ERROR: $1!"
  exit 1
}

latexbuild() {
  # Perform file cleanup.
  rm -f ./*.aux ./*.log ./*.out ./*.pdf ./*.toc

  # Perform a first pass
  pdflatex -draftmode "$1" "$2" || \
    abort "Unable to create $1 draft"

  # Perform a number of TOC passes.
  while grep 'Rerun to get ' "${1}.log" ; do
    pdflatex -draftmode "$1" "$2" || \
      abort "Unable to create $1 draft with TOC"
  done

  # Create a real PDF.
  pdflatex "$1" "$2" || \
    abort "Unable to create $1 PDF"

  # Perform a number of TOC passes for PDF (usually not needed).
  while grep 'Rerun to get ' "${1}.log" ; do
    pdflatex -draftmode "$1" "$2" || \
      abort "Unable to create $1 PDF with TOC"
  done
}

cd "$(dirname "$0")" || abort "Wrong directory"

if [ "$(which latexdiff)" = "" ]; then
  abort "latexdiff is missing, check your TeX Live installation"
fi

if [ "$(which pdflatex)" = "" ]; then
  abort "pdflatex is missing, check your TeX Live installation"
fi

latexbuild Configuration

cd Differences || abort "Unable to process annotations"
rm -f ./*.aux ./*.log ./*.out ./*.pdf ./*.toc
latexdiff --allow-spaces -s ONLYCHANGEDPAGE PreviousConfiguration.tex ../Configuration.tex \
  > Differences.tex || \
  abort "Unable to differentiate"
latexbuild Differences -interaction=nonstopmode

cd ../Errata || abort "Unable to process annotations"
latexbuild Errata

exit 0