doc: Check DocBook XML validity during the build

Building the documentation with XSLT does not check the DTD, like a
DSSSL build would.  One can often get away with having invalid XML, but
the stylesheets might then create incorrect output, as they are not
designed to handle that.  Therefore, check the validity of the XML
against the DTD, using xmllint, during the build.

Add xmllint detection to configure, and add some documentation.

xmllint comes with libxml2, which is already in use, but it might be in
a separate package, such as libxml2-utils on Debian.

Reviewed-by: Fabien COELHO <coelho@cri.ensmp.fr>
This commit is contained in:
Peter Eisentraut 2014-10-21 14:46:38 -04:00
parent f43afbca70
commit 5d93ce2d0c
5 changed files with 68 additions and 2 deletions

43
configure vendored
View File

@ -630,6 +630,7 @@ vpath_build
PROVE
OSX
XSLTPROC
XMLLINT
DBTOEPUB
COLLATEINDEX
DOCBOOKSTYLE
@ -14654,6 +14655,48 @@ fi
test -n "$DBTOEPUB" && break
done
for ac_prog in xmllint
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_XMLLINT+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$XMLLINT"; then
ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_XMLLINT="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
XMLLINT=$ac_cv_prog_XMLLINT
if test -n "$XMLLINT"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
$as_echo "$XMLLINT" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$XMLLINT" && break
done
for ac_prog in xsltproc
do
# Extract the first word of "$ac_prog", so it can be a program name with args.

View File

@ -1869,6 +1869,7 @@ PGAC_CHECK_DOCBOOK(4.2)
PGAC_PATH_DOCBOOK_STYLESHEETS
PGAC_PATH_COLLATEINDEX
AC_CHECK_PROGS(DBTOEPUB, dbtoepub)
AC_CHECK_PROGS(XMLLINT, xmllint)
AC_CHECK_PROGS(XSLTPROC, xsltproc)
AC_CHECK_PROGS(OSX, [osx sgml2xml sx])

View File

@ -44,6 +44,10 @@ ifndef OSX
OSX = $(missing) osx
endif
ifndef XMLLINT
XMLLINT = $(missing) xmllint
endif
ifndef XSLTPROC
XSLTPROC = $(missing) xsltproc
endif
@ -78,6 +82,7 @@ override SPFLAGS += -wall -wno-unused-param -wno-empty -wfully-tagged
man distprep-man: man-stamp
man-stamp: stylesheet-man.xsl postgres.xml
$(XMLLINT) --noout --valid postgres.xml
$(XSLTPROC) $(XSLTPROCFLAGS) $(XSLTPROC_MAN_FLAGS) $^
touch $@
@ -254,11 +259,13 @@ endif
xslthtml: xslthtml-stamp
xslthtml-stamp: stylesheet.xsl postgres.xml
$(XMLLINT) --noout --valid postgres.xml
$(XSLTPROC) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) $^
cp $(srcdir)/stylesheet.css html/
touch $@
htmlhelp: stylesheet-hh.xsl postgres.xml
$(XMLLINT) --noout --valid postgres.xml
$(XSLTPROC) $(XSLTPROCFLAGS) $^
%-A4.fo.tmp: stylesheet-fo.xsl %.xml
@ -268,7 +275,6 @@ htmlhelp: stylesheet-hh.xsl postgres.xml
$(XSLTPROC) $(XSLTPROCFLAGS) --stringparam paper.type USletter -o $@ $^
FOP = fop
XMLLINT = xmllint
# reformat FO output so that locations of errors are easier to find
%.fo: %.fo.tmp
@ -281,6 +287,7 @@ XMLLINT = xmllint
epub: postgres.epub
postgres.epub: postgres.xml
$(XMLLINT) --noout --valid $<
$(DBTOEPUB) $<

View File

@ -148,6 +148,20 @@
</listitem>
</varlistentry>
<varlistentry>
<term><ulink url="http://xmlsoft.org/">Libxml2</ulink> for <command>xmllint</command></term>
<listitem>
<para>
This library and the <command>xmllint</command> tool it contains are
used for processing XML. Many developers will already
have <application>Libxml2</application> installed, because it is also
used when building the PostgreSQL code. Note, however,
that <command>xmllint</command> might need to be installed from a
separate subpackage.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><ulink url="http://xmlsoft.org/XSLT/">Libxslt</ulink> for <command>xsltproc</command></term>
<listitem>
@ -255,7 +269,7 @@ yum install docbook-dtds docbook-style-dsssl docbook-style-xsl libxslt openjade
available for <productname>Debian GNU/Linux</productname>.
To install, simply use:
<programlisting>
apt-get install docbook docbook-dsssl docbook-xsl openjade1.3 opensp xsltproc
apt-get install docbook docbook-dsssl docbook-xsl libxml2-utils openjade1.3 opensp xsltproc
</programlisting>
</para>
</sect2>

View File

@ -353,6 +353,7 @@ DOCBOOKSTYLE = @DOCBOOKSTYLE@
JADE = @JADE@
NSGMLS = @NSGMLS@
OSX = @OSX@
XMLLINT = @XMLLINT@
XSLTPROC = @XSLTPROC@
# Code coverage