blob: d339d165b8b71fdc9880bca6ae3074a437ef1433 [file]
#!/bin/sh
#
# Check the XML sources of the manual: every file must be well-formed,
# and every file with a DOCTYPE must be valid against its DTD. Pass
# file names to check only those, otherwise all of docs/ is checked.
#
# The DTDs pull in the XHTML entity sets by public identifier, so these
# must be resolvable from an XML catalog (on Debian/Ubuntu, install
# w3c-sgml-lib; on Fedora, xhtml1-dtds, or point XML_CATALOG_FILES at
# a catalog); nothing is fetched from the network.
cd "`dirname "$0"`/.." || exit 1
if ! command -v xmllint >/dev/null; then
echo "FAIL: xmllint not found"
exit 1
fi
if [ $# -eq 0 ]; then
set -- `find docs -name '*.xml' -o -name '*.xml.*' | sort`
fi
rv=0
count=0
for f in "$@"; do
count=$((count + 1))
# The language files use lang.dtd only to define entities, and
# declare no elements, so can only be checked for well-formedness.
if grep -q '<!DOCTYPE' "$f" && ! grep -q '<!DOCTYPE language ' "$f"; then
mode=--valid
else
mode=--loaddtd
fi
# An unresolvable entity set is only a warning; treat it as fatal.
if ! out=`xmllint --noout --nonet $mode "$f" 2>&1` \
|| echo "$out" | grep -q 'failed to load external entity'; then
echo "$out"
echo "FAIL: $f"
rv=1
fi
done
[ $rv -eq 0 ] && echo "PASS: $count files checked"
exit $rv