Stop recommending auto-download of DTD files, and indeed disable it.

It appears no longer possible to build the SGML docs without a local
installation of the DocBook DTD, because sourceforge.net now only
permits HTTPS access, and no common version of xsltproc supports that.
Hence, remove the bits of our documentation suggesting that that's
possible or useful.

In fact, we might as well add the --nonet option to the build recipes
automatically, for a bit of extra security.

Also fix our documentation-tool-installation recipes for macOS to
ensure that xmllint and xsltproc are pulled in from MacPorts or
Homebrew.  The previous recipes assumed you could use the
Apple-supplied versions of these tools; which still works, except that
you'd need to set an environment variable to ensure that they would
find DTD files provided by those package managers.  Simpler and easier
to just recommend pulling in the additional packages.

In HEAD, also document how to build docs using Meson, and adjust
"ninja docs" to just build the HTML docs, for consistency with the
default behavior of doc/src/sgml/Makefile.

In a fit of neatnik-ism, I also made the ordering of the package
lists match the order in which the tools are described at the head
of the appendix.

Aleksander Alekseev, Peter Eisentraut, Tom Lane

Discussion: https://postgr.es/m/CAJ7c6TO8Aro2nxg=EQsVGiSDe-TstP4EsSvDHd7DSRsP40PgGA@mail.gmail.com
This commit is contained in:
Tom Lane 2023-02-08 17:15:23 -05:00
parent cab553a08e
commit 36a646d99c
2 changed files with 34 additions and 31 deletions

View File

@ -41,11 +41,15 @@ endif
XMLINCLUDE = --path .
ifndef XMLLINT
ifdef XMLLINT
XMLLINT := $(XMLLINT) --nonet
else
XMLLINT = $(missing) xmllint
endif
ifndef XSLTPROC
ifdef XSLTPROC
XSLTPROC := $(XSLTPROC) --nonet
else
XSLTPROC = $(missing) xsltproc
endif

View File

@ -136,6 +136,7 @@
<listitem>
<para>
This is a program for converting, among other things, XML to PDF.
It is needed only if you want to build the documentation in PDF format.
</para>
</listitem>
</varlistentry>
@ -151,25 +152,13 @@
here.
</para>
<para>
You can get away with not installing DocBook XML and the DocBook XSLT
stylesheets locally, because the required files will be downloaded from the
Internet and cached locally. This may in fact be the preferred solution if
your operating system packages provide only an old version of these files,
or if no packages are available at all.
If you want to prevent any attempt to access the Internet while building
the documentation, you need to pass the <option>--nonet</option> option
to <command>xmllint</command> and <command>xsltproc</command>; see below
for an example.
</para>
<sect2>
<title>Installation on Fedora, RHEL, and Derivatives</title>
<para>
To install the required packages, use:
<programlisting>
yum install docbook-dtds docbook-style-xsl fop libxslt
yum install docbook-dtds docbook-style-xsl libxslt fop
</programlisting>
</para>
</sect2>
@ -180,7 +169,7 @@ yum install docbook-dtds docbook-style-xsl fop libxslt
<para>
To install the required packages with <command>pkg</command>, use:
<programlisting>
pkg install docbook-xml docbook-xsl fop libxslt
pkg install docbook-xml docbook-xsl libxslt fop
</programlisting>
</para>
@ -199,7 +188,7 @@ pkg install docbook-xml docbook-xsl fop libxslt
available for <productname>Debian GNU/Linux</productname>.
To install, simply use:
<programlisting>
apt-get install docbook-xml docbook-xsl fop libxml2-utils xsltproc
apt-get install docbook-xml docbook-xsl libxml2-utils xsltproc fop
</programlisting>
</para>
</sect2>
@ -207,22 +196,38 @@ apt-get install docbook-xml docbook-xsl fop libxml2-utils xsltproc
<sect2>
<title>macOS</title>
<para>
On macOS, you can build the HTML and man documentation without installing
anything extra. If you want to build PDFs or want to install a local copy
of DocBook, you can get those from your preferred package manager.
</para>
<para>
If you use MacPorts, the following will get you set up:
<programlisting>
sudo port install docbook-xml-4.2 docbook-xsl fop
sudo port install docbook-xml docbook-xsl-nons libxslt fop
</programlisting>
If you use Homebrew, use this:
<programlisting>
brew install docbook docbook-xsl fop
brew install docbook docbook-xsl libxslt fop
</programlisting>
</para>
<para>
The Homebrew-supplied programs require the following environment variable
to be set:
<programlisting>
export XML_CATALOG_FILES=/usr/local/etc/xml/catalog
</programlisting>
Without it, <command>xsltproc</command> will throw errors like this:
<programlisting>
I/O error : Attempt to load network entity http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd
postgres.sgml:21: warning: failed to load external entity "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
...
</programlisting>
</para>
<para>
While it is possible to use the Apple-provided versions
of <command>xmllint</command> and <command>xsltproc</command>
instead of those from MacPorts or Homebrew, you'll still need
to install the DocBook DTD and stylesheets, and set up a catalog
file that points to them.
</para>
</sect2>
<sect2 id="docguide-toolsets-configure">
@ -253,12 +258,6 @@ checking for dbtoepub... dbtoepub
these programs, for example
<screen>
./configure ... XMLLINT=/opt/local/bin/xmllint ...
</screen>
Also, if you want to ensure that <filename>xmllint</filename>
and <filename>xsltproc</filename> will not perform any network access,
you can do something like
<screen>
./configure ... XMLLINT="xmllint --nonet" XSLTPROC="xsltproc --nonet" ...
</screen>
</para>
</sect2>