OpenCorePkg/Docs/BuildDocs.tool
2022-04-16 23:48:02 +02:00

158 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
abort() {
echo "ERROR: $1!"
exit 1
}
prompt() {
echo "$1"
read -rp "Enter [Y]es to continue: " v
if [ "$v" != "Y" ] && [ "$v" != "y" ]; then
return 0
fi
return 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
}
builddocs() {
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
cd .. || abort "Unable to cd back to Docs directory"
}
updatedocshash() {
err=0
if [ "$(which md5)" != "" ]; then
HASH=$(md5 Configuration.tex | cut -f4 -d' ')
err=$?
elif [ "$(which openssl)" != "" ]; then
HASH=$(openssl md5 Configuration.tex | cut -f2 -d' ')
err=$?
else
abort "No md5 hasher found!"
fi
if [ $err -ne 0 ]; then
abort "Failed to calculate built configuration hash!"
fi
OLDHASH=""
if [ -f "Configuration.md5" ]; then
OLDHASH=$(cat "Configuration.md5")
fi
echo "$HASH" > "Configuration.md5"
}
checkdocs() {
if [ "$HASH" != "$OLDHASH" ]; then
echo "Configuration hash ${HASH} is different from ${OLDHASH}."
echo "You forgot to rebuild documentation (Configuration.pdf)!"
echo "Please run ./Docs/BuildDocs.tool."
exit 1
fi
}
checkver() {
ocver=$(grep OPEN_CORE_VERSION ../Include/Acidanthera/Library/OcMainLib.h | sed 's/.*"\(.*\)".*/\1/' | grep -E '^[0-9.]+$')
if [ "$ocver" = "" ]; then
abort "Invalid OpenCore version"
fi
docver=$(grep -w 'Reference Manual' ./Configuration.tex | sed -e 's/(//g' -e 's/)//g' | awk '{print $3}')
if [ "$docver" = "" ]; then
abort "Invalid document version"
fi
if [ "$ocver" = "$docver" ]; then
return 0
fi
return 1
}
bumpversion() {
echo "Bumping version from $docver to $ocver"
cd Differences || abort "Unable to enter Differences directory"
rm -f PreviousConfiguration.tex
cp ../Configuration.tex PreviousConfiguration.tex || abort "Failed to copy PreviousConfiguration.tex"
cd .. || abort "Unable to enter parent directory"
perl -pi -e "s/Reference Manual \($docver\)/Reference Manual \($ocver\)/g" ./Configuration.tex || abort "Failed to patch Configuration.tex"
}
main() {
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
cd "$(dirname "$0")" || abort "Wrong directory"
checkver
if [ $? = 1 ]; then
echo "Current Configuration.tex/pdf version: $docver"
echo "Current OC Header version: $ocver"
prompt "Bump version to $ocver?"
if [ $? = 0 ]; then
prompt "Still build docs?"
if [ $? = 0 ]; then
exit 1
fi
else
bumpversion
fi
fi
builddocs
updatedocshash
case "$1" in
-c|--check-docs )
checkdocs
;;
esac
}
main "$@"
exit 0