From cb2787b2473186239eb23e7320654513df8e8fb7 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 13 Sep 2014 20:42:16 -0400 Subject: [PATCH v2] 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. --- configure | 43 +++++++++++++++++++++++++++++++++++++++++++ configure.in | 1 + doc/src/sgml/Makefile | 9 ++++++++- doc/src/sgml/docguide.sgml | 19 +++++++++++++++++-- src/Makefile.global.in | 1 + 5 files changed, 70 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 4918f95..873bcff 100755 --- a/configure +++ b/configure @@ -630,6 +630,7 @@ vpath_build PROVE OSX XSLTPROC +XMLLINT DBTOEPUB COLLATEINDEX DOCBOOKSTYLE @@ -14449,6 +14450,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. diff --git a/configure.in b/configure.in index 1392277..e3b17ea 100644 --- a/configure.in +++ b/configure.in @@ -1859,6 +1859,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]) diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile index 1d42be8..8bdd26c 100644 --- a/doc/src/sgml/Makefile +++ b/doc/src/sgml/Makefile @@ -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) $< diff --git a/doc/src/sgml/docguide.sgml b/doc/src/sgml/docguide.sgml index 943ab5a..614a76c 100644 --- a/doc/src/sgml/docguide.sgml +++ b/doc/src/sgml/docguide.sgml @@ -149,6 +149,20 @@ Tool Sets + Libxml2 for xmllint + + + This library and the xmllint tool it contains are + used for processing XML. Many developers will already + have Libxml2 installed, because it is also + used when building the PostgreSQL code. Note, however, + that xmllint might need to be installed from a + separate subpackage. + + + + + Libxslt for xsltproc @@ -201,7 +215,8 @@ <productname>Linux</productname> <acronym>RPM</acronym> Installation</tit installing, or the following packages: <filename>sgml-common</filename>, <filename>docbook</filename>, <filename>stylesheets</filename>, <filename>openjade</filename> - (or <filename>jade</filename>). You may also need <filename>sgml-tools</filename> + (or <filename>jade</filename>). You may also need <filename>sgml-tools</filename>, + either <filename>libxml2</filename> or <filename>libxml2-utils</filename>, and either <filename>xsltproc</filename> or <filename>libxslt</>. If your distributor does not provide these then you should be able to make use of the packages from some other, reasonably compatible vendor. @@ -273,7 +288,7 @@ <title>Debian Packages available for Debian GNU/Linux. To install, simply use: -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 diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 39a6175..07c5b27 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -353,6 +353,7 @@ DOCBOOKSTYLE = @DOCBOOKSTYLE@ JADE = @JADE@ NSGMLS = @NSGMLS@ OSX = @OSX@ +XMLLINT = @XMLLINT@ XSLTPROC = @XSLTPROC@ # Code coverage -- 1.8.5.2 (Apple Git-48)