what should install-world do when docs are not available?
Hi,
A question by Justin made me wonder what the right behaviour for world,
install-world should be when the docs tools aren't available. I'm wondering
from the angle of meson, but it also seems something we possibly should think
about for autoconf.
Right now if one does install-world with autoconf, without having xmllint or
xsltproc available, one gets an error:
ERROR: `xmllint' is missing on your system.
Is that good? Should meson behave the same?
I wonder if, for meson, the best behaviour would be to make 'docs' a feature
set to auto. If docs set to enabled, and the necessary tools are not
available, fail at that time, instead of doing so while building.
If that's what we decide to do, perhaps "docs" should be split further? The
dependencies for pdf generation are a lot more heavyweight.
We should probably also generate a useful error when the stylesheets aren't
available. Right now we just generate a long error:
/usr/bin/xsltproc --nonet --path . --stringparam pg.version '16devel' /home/andres/src/postgresql/doc/src/sgml/stylesheet.xsl postgres-full.xml
I/O error : Attempt to load network entity http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl
warning: failed to load external entity "http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"
compilation error: file /home/andres/src/postgresql/doc/src/sgml/stylesheet.xsl line 6 element import
xsl:import : unable to load http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl
I/O error : Attempt to load network entity http://docbook.sourceforge.net/release/xsl/current/common/entities.ent
/home/andres/src/postgresql/doc/src/sgml/stylesheet-html-common.xsl:4: warning: failed to load external entity "http://docbook.sourceforge.net/release/xsl/current/common/entities.ent"
%common.entities;
^
/home/andres/src/postgresql/doc/src/sgml/stylesheet-html-common.xsl:116: parser error : Entity 'primary' not defined
translate(substring(&primary;, 1, 1),
...
Greetings,
Andres Freund
[1]: /messages/by-id/20230325180310.o6drykb3uz4u4x4r@awork3.anarazel.de
Andres Freund <andres@anarazel.de> writes:
Right now if one does install-world with autoconf, without having xmllint or
xsltproc available, one gets an error:
ERROR: `xmllint' is missing on your system.
Is that good? Should meson behave the same?
Since install-world is defined to install documentation, it should
do so or fail trying. Maybe we could skip the xmllint step, but you'd
still need xsltproc so I'm not sure that that moves the bar very far.
If that's what we decide to do, perhaps "docs" should be split further? The
dependencies for pdf generation are a lot more heavyweight.
Yeah. Personally I think "docs" should just build/install the HTML
docs, but maybe I'm too narrow-minded.
We should probably also generate a useful error when the stylesheets aren't
available.
Maybe, but we haven't had that in the autoconf case either, and there
have not been too many complaints. Not sure it's worth putting extra
effort into.
regards, tom lane
Hi,
On 2023-03-25 16:40:03 -0400, Tom Lane wrote:
Andres Freund <andres@anarazel.de> writes:
Right now if one does install-world with autoconf, without having xmllint or
xsltproc available, one gets an error:
ERROR: `xmllint' is missing on your system.Is that good? Should meson behave the same?
Since install-world is defined to install documentation, it should
do so or fail trying. Maybe we could skip the xmllint step, but you'd
still need xsltproc so I'm not sure that that moves the bar very far.
xmllint is the more commonly installed tool (it's part of libxml, which
libxslt depends on), so that wouldn't help much - and we now depend on xmllint
to build the input to xsltproc anyway...
If that's what we decide to do, perhaps "docs" should be split further? The
dependencies for pdf generation are a lot more heavyweight.Yeah. Personally I think "docs" should just build/install the HTML
docs, but maybe I'm too narrow-minded.
Sorry, I meant docs as a meson option, not as a build target. The 'docs'
target builds just the html doc (as with autoconf), and install-doc installs
both html and manpages (also as with autoconf).
I am basically wondering if we should make it so that if you say
-Ddocs=enabled and xmllint or xsltproc aren't available, you get an error at
configure time. And if -Ddocs=auto, the summary at the end of configure will
tell you if the necessary tools to build the docs are available, but not error
out.
The extension to that could be to have a separate -Ddoc_pdf option, which'd
mirror the above.
Greetings,
Andres Freund
On 25.03.23 21:14, Andres Freund wrote:
I wonder if, for meson, the best behaviour would be to make 'docs' a feature
set to auto. If docs set to enabled, and the necessary tools are not
available, fail at that time, instead of doing so while building.
Makes sense to me.
If that's what we decide to do, perhaps "docs" should be split further? The
dependencies for pdf generation are a lot more heavyweight.
I think "docs" should be html and man, because that's what gets installed.
pdf and other things can just be an ad hoc build target and doesn't need
install support.
Hi,
On 2023-03-29 18:15:02 +0200, Peter Eisentraut wrote:
On 25.03.23 21:14, Andres Freund wrote:
I wonder if, for meson, the best behaviour would be to make 'docs' a feature
set to auto. If docs set to enabled, and the necessary tools are not
available, fail at that time, instead of doing so while building.Makes sense to me.
If that's what we decide to do, perhaps "docs" should be split further? The
dependencies for pdf generation are a lot more heavyweight.I think "docs" should be html and man, because that's what gets installed.
pdf and other things can just be an ad hoc build target and doesn't need
install support.
I just meant for feature detection.
Greetings,
Andres Freund
On 29.03.23 18:25, Andres Freund wrote:
On 2023-03-29 18:15:02 +0200, Peter Eisentraut wrote:
On 25.03.23 21:14, Andres Freund wrote:
I wonder if, for meson, the best behaviour would be to make 'docs' a feature
set to auto. If docs set to enabled, and the necessary tools are not
available, fail at that time, instead of doing so while building.Makes sense to me.
If that's what we decide to do, perhaps "docs" should be split further? The
dependencies for pdf generation are a lot more heavyweight.I think "docs" should be html and man, because that's what gets installed.
pdf and other things can just be an ad hoc build target and doesn't need
install support.I just meant for feature detection.
Ah yes, then things like fop should either be a separate feature or just
do something light weight, like failing the target if fop isn't there.
Hi,
On 2023-03-29 18:39:27 +0200, Peter Eisentraut wrote:
On 29.03.23 18:25, Andres Freund wrote:
On 2023-03-29 18:15:02 +0200, Peter Eisentraut wrote:
On 25.03.23 21:14, Andres Freund wrote:
I wonder if, for meson, the best behaviour would be to make 'docs' a feature
set to auto. If docs set to enabled, and the necessary tools are not
available, fail at that time, instead of doing so while building.Makes sense to me.
If that's what we decide to do, perhaps "docs" should be split further? The
dependencies for pdf generation are a lot more heavyweight.I think "docs" should be html and man, because that's what gets installed.
pdf and other things can just be an ad hoc build target and doesn't need
install support.I just meant for feature detection.
Ah yes, then things like fop should either be a separate feature or just do
something light weight, like failing the target if fop isn't there.
Attached is an implementation of this approach. This includes some lightly
polished patches from [1]/messages/by-id/3fc3bb9b-f7f8-d442-35c1-ec82280c564a@enterprisedb.com and a new patch to remove htmlhelp.
Greetings,
Andres Freund
[1]: /messages/by-id/3fc3bb9b-f7f8-d442-35c1-ec82280c564a@enterprisedb.com
Attachments:
v4-0001-doc-Remove-support-for-htmlhelp-format.patchtext/x-diff; charset=us-asciiDownload
From 2ea3b10f37f85aa71edd38253fe2364be8242aa7 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 29 Mar 2023 12:25:26 -0700
Subject: [PATCH v4 1/6] doc: Remove support for 'htmlhelp' format
We had partial support for generating documentation suitable for .chm
files. However, we only had wired up generating the input files using
docbook-xsl, not generating an actual .chm file. Nor did we document how to do
so. Additionally, it was very slow to generate htmlhelp, as we never applied
the docbook-xsl stylesheet performance improvements to htmlhelp.
It doesn't look like there's any interest in the htmlhelp output, so remove
it, instead of spending cycles to finish the support.
Discussion: https://postgr.es/m/20230324165822.wcrj3akllbqquy7u@awork3.anarazel.de
---
doc/src/sgml/Makefile | 10 --------
doc/src/sgml/meson.build | 11 --------
doc/src/sgml/stylesheet-hh.xsl | 47 ----------------------------------
3 files changed, 68 deletions(-)
delete mode 100644 doc/src/sgml/stylesheet-hh.xsl
diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile
index b96c7cbf223..3c4aa6bebe3 100644
--- a/doc/src/sgml/Makefile
+++ b/doc/src/sgml/Makefile
@@ -148,14 +148,6 @@ html-stamp: stylesheet.xsl postgres-full.xml $(ALL_IMAGES)
cp $(srcdir)/stylesheet.css html/
touch $@
-htmlhelp: htmlhelp-stamp
-
-htmlhelp-stamp: stylesheet-hh.xsl postgres-full.xml $(ALL_IMAGES)
- $(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(wordlist 1,2,$^)
- cp $(ALL_IMAGES) htmlhelp/
- cp $(srcdir)/stylesheet.css htmlhelp/
- touch $@
-
# single-page HTML
postgres.html: stylesheet-html-nochunk.xsl postgres-full.xml $(ALL_IMAGES)
$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) -o $@ $(wordlist 1,2,$^)
@@ -307,8 +299,6 @@ clean:
# generated SGML files
rm -f $(GENERATED_SGML)
rm -f postgres-full.xml
-# HTML Help
- rm -rf htmlhelp/ htmlhelp-stamp
# EPUB
rm -f postgres.epub
# Texinfo
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 157b8589e55..52237dc5ac9 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -135,17 +135,6 @@ if xsltproc_bin.found()
installdocs += install_doc_html
- htmlhelp = custom_target('htmlhelp',
- input: ['stylesheet-hh.xsl', postgres_full_xml],
- output: 'htmlhelp',
- depfile: 'htmlhelp.d',
- depends: doc_generated,
- command: [xsltproc, '--path', '@OUTDIR@', '-o', '@OUTDIR@/', xsltproc_flags, '@INPUT@'],
- build_by_default: false,
- )
- alldocs += htmlhelp
-
-
# single-page HTML
postgres_html = custom_target('postgres.html',
input: ['stylesheet-html-nochunk.xsl', postgres_full_xml],
diff --git a/doc/src/sgml/stylesheet-hh.xsl b/doc/src/sgml/stylesheet-hh.xsl
deleted file mode 100644
index 6f4b706dac6..00000000000
--- a/doc/src/sgml/stylesheet-hh.xsl
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version='1.0'?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version='1.0'>
-
-<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/htmlhelp/htmlhelp.xsl"/>
-<xsl:include href="stylesheet-common.xsl" />
-
-<!-- Parameters -->
-<xsl:param name="htmlhelp.use.hhk" select="'1'"/>
-
-<xsl:param name="base.dir" select="'htmlhelp/'"></xsl:param>
-<xsl:param name="html.stylesheet" select="'stylesheet.css'"></xsl:param>
-<xsl:param name="use.id.as.filename" select="'1'"></xsl:param>
-<xsl:param name="manifest.in.base.dir" select="1"/>
-<xsl:param name="make.valid.html" select="1"></xsl:param>
-<xsl:param name="generate.id.attributes" select="1"></xsl:param>
-<xsl:param name="generate.legalnotice.link" select="1"></xsl:param>
-<xsl:param name="link.mailto.url">pgsql-docs@lists.postgresql.org</xsl:param>
-<xsl:param name="chunker.output.indent" select="'yes'"/>
-<xsl:param name="chunk.quietly" select="1"></xsl:param>
-
-
-<!-- Change display of some elements -->
-
-<xsl:template match="command">
- <xsl:call-template name="inline.monoseq"/>
-</xsl:template>
-
-<!--
- Format multiple terms in varlistentry vertically, instead
- of comma-separated.
- -->
-
-<xsl:template match="varlistentry/term[position()!=last()]">
- <span class="term">
- <xsl:call-template name="anchor"/>
- <xsl:apply-templates/>
- </span><br/>
-</xsl:template>
-
-
-<!-- strip directory name from image filerefs -->
-<xsl:template match="imagedata/@fileref">
- <xsl:value-of select="substring-after(., '/')"/>
-</xsl:template>
-
-</xsl:stylesheet>
--
2.38.0
v4-0002-meson-docs-Preparatory-cleanups.patchtext/x-diff; charset=us-asciiDownload
From 011e9e08d97e93888928751b0e4b31f9e6ff7206 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 29 Mar 2023 14:51:38 -0700
Subject: [PATCH v4 2/6] meson: docs: Preparatory cleanups
---
doc/src/sgml/meson.build | 40 +++++++++++++++++++++++-----------------
1 file changed, 23 insertions(+), 17 deletions(-)
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 52237dc5ac9..66c0061e96b 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -97,26 +97,32 @@ docs += postgres_full_xml
alldocs += postgres_full_xml
-#
-# Full documentation as html, text
-#
if xsltproc_bin.found()
xsltproc_flags = [
'--nonet',
'--stringparam', 'pg.version', pg_version,
- '--param', 'website.stylesheet', '1'
+ '--path', '@OUTDIR@',
]
xsltproc = xmltools_wrapper + [
'--tool', xsltproc_bin, '--',
]
+endif
+
+
+#
+# Full documentation as html, text
+#
+if xsltproc_bin.found()
+ xsltproc_html_flags = xsltproc_flags + [
+ '--param', 'website.stylesheet', '1'
+ ]
html = custom_target('html',
input: ['stylesheet.xsl', postgres_full_xml],
output: 'html',
depfile: 'html.d',
- depends: doc_generated,
- command: [xsltproc, '-o', '@OUTDIR@/', xsltproc_flags, '@INPUT@'],
+ command: [xsltproc, '-o', '@OUTDIR@/', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += html
@@ -140,8 +146,7 @@ if xsltproc_bin.found()
input: ['stylesheet-html-nochunk.xsl', postgres_full_xml],
output: 'postgres.html',
depfile: 'postgres.html.d',
- depends: doc_generated,
- command: [xsltproc, '--path', '@OUTDIR@', '-o', '@OUTPUT@', xsltproc_flags, '@INPUT@'],
+ command: [xsltproc, '-o', '@OUTPUT@', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += postgres_html
@@ -151,7 +156,6 @@ if xsltproc_bin.found()
postgres_txt = custom_target('postgres.txt',
input: [postgres_html],
output: 'postgres.txt',
- depends: doc_generated,
command: [pandoc, '-t', 'plain', '-o', '@OUTPUT@', '@INPUT@'],
build_by_default: false,
)
@@ -164,19 +168,21 @@ endif
# INSTALL in html, text
#
if xsltproc_bin.found()
+ # Depend on postgres_full_xml, so validity errors are raised in one place,
+ # and so dependencies don't need to be re-specified.
install_xml = custom_target('INSTALL.xml',
input: ['standalone-profile.xsl', 'standalone-install.xml'],
output: 'INSTALL.xml',
depfile: 'INSTALL.xml.d',
- depends: doc_generated + [postgres_full_xml],
- command: [xsltproc, '--path', '@OUTDIR@', '-o', '@OUTPUT@', xsltproc_flags, '--xinclude', '@INPUT@'],
+ depends: postgres_full_xml,
+ command: [xsltproc, '-o', '@OUTPUT@', xsltproc_flags, '--xinclude', '@INPUT@'],
build_by_default: false,
)
install_html = custom_target('INSTALL.html',
input: ['stylesheet-text.xsl', install_xml],
output: 'INSTALL.html',
depfile: 'INSTALL.html.d',
- command: [xsltproc, '--path', '@OUTDIR@', '-o', '@OUTPUT@', xsltproc_flags, '@INPUT@'],
+ command: [xsltproc, '-o', '@OUTPUT@', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += install_html
@@ -204,8 +210,7 @@ if xsltproc_bin.found()
input: ['stylesheet-man.xsl', postgres_full_xml],
output: ['man1', 'man3', 'man7'],
depfile: 'man.d',
- depends: doc_generated,
- command: [xsltproc, '--path', '@OUTDIR@', '-o', '@OUTDIR@/', xsltproc_flags, '@INPUT@'],
+ command: [xsltproc, '-o', '@OUTDIR@/', xsltproc_html_flags, '@INPUT@'],
build_by_default: false,
)
alldocs += man
@@ -229,7 +234,9 @@ endif
# Full documentation as PDF
#
if fop.found() and xsltproc_bin.found()
- xsltproc_fo_flags = xsltproc_flags + ['--stringparam', 'img.src.path', meson.current_source_dir() + '/']
+ xsltproc_fo_flags = xsltproc_flags + [
+ '--stringparam', 'img.src.path', meson.current_source_dir() + '/'
+ ]
foreach format, detail: {'A4': 'A4', 'US': 'USletter'}
postgres_x_fo_f = 'postgres-@0@.fo'.format(format)
@@ -239,9 +246,8 @@ if fop.found() and xsltproc_bin.found()
postgres_x_fo = custom_target(postgres_x_fo_f,
input: ['stylesheet-fo.xsl', postgres_full_xml],
output: postgres_x_fo_f,
- depends: doc_generated,
depfile: postgres_x_fo_dep,
- command: [xsltproc, '--path', '@OUTDIR@/', xsltproc_fo_flags,
+ command: [xsltproc, xsltproc_fo_flags,
'--stringparam', 'paper.type', detail,
'-o', '@OUTPUT@', '@INPUT@'],
build_by_default: false,
--
2.38.0
v4-0003-meson-add-docs-docs_pdf-options.patchtext/x-diff; charset=us-asciiDownload
From c0f61809faa86228b958f8b7e12d0d98faae3c4c Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 29 Mar 2023 15:33:49 -0700
Subject: [PATCH v4 3/6] meson: add docs, docs_pdf options
---
meson.build | 37 ++++++++++++++++++++++++++++++++++
meson_options.txt | 9 +++++++++
doc/src/sgml/installation.sgml | 33 ++++++++++++++++++++++++++++++
doc/src/sgml/meson.build | 21 ++++++-------------
4 files changed, 85 insertions(+), 15 deletions(-)
diff --git a/meson.build b/meson.build
index 61e94be8641..1f2ec448684 100644
--- a/meson.build
+++ b/meson.build
@@ -341,6 +341,8 @@ program_zstd = find_program(get_option('ZSTD'), native: true, required: false)
dtrace = find_program(get_option('DTRACE'), native: true, required: get_option('dtrace'))
missing = find_program('config/missing', native: true)
cp = find_program('cp', required: false, native: true)
+xmllint_bin = find_program(get_option('XMLLINT'), native: true, required: false)
+xsltproc_bin = find_program(get_option('XSLTPROC'), native: true, required: false)
bison_flags = []
if bison.found()
@@ -567,6 +569,39 @@ endif
+###############################################################
+# Option: docs in HTML and man page format
+###############################################################
+
+docs_opt = get_option('docs')
+docs_dep = not_found_dep
+if not docs_opt.disabled()
+ if xmllint_bin.found() and xsltproc_bin.found()
+ docs_dep = declare_dependency()
+ elif docs_opt.enabled()
+ error('missing required tools for docs in HTML / man page format')
+ endif
+endif
+
+
+
+###############################################################
+# Option: docs in PDF format
+###############################################################
+
+docs_pdf_opt = get_option('docs_pdf')
+docs_pdf_dep = not_found_dep
+if not docs_pdf_opt.disabled()
+ fop = find_program(get_option('FOP'), native: true, required: docs_pdf_opt)
+ if xmllint_bin.found() and xsltproc_bin.found() and fop.found()
+ docs_pdf_dep = declare_dependency()
+ elif docs_pdf_opt.enabled()
+ error('missing required tools for docs in PDF format')
+ endif
+endif
+
+
+
###############################################################
# Library: GSSAPI
###############################################################
@@ -3322,6 +3357,8 @@ if meson.version().version_compare('>=0.57')
{
'bonjour': bonjour,
'bsd_auth': bsd_auth,
+ 'docs': docs_dep,
+ 'docs_pdf': docs_pdf_dep,
'gss': gssapi,
'icu': icu,
'ldap': ldap,
diff --git a/meson_options.txt b/meson_options.txt
index 4402dd4299d..c203dcce6fe 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -79,6 +79,12 @@ option('bonjour', type : 'feature', value: 'auto',
option('bsd_auth', type : 'feature', value: 'auto',
description: 'build with BSD Authentication support')
+option('docs', type : 'feature', value: 'auto',
+ description: 'documentation in HTML and man page format')
+
+option('docs_pdf', type : 'feature', value: 'auto',
+ description: 'documentation in PDF format')
+
option('dtrace', type : 'feature', value: 'disabled',
description: 'DTrace support')
@@ -159,6 +165,9 @@ option('DTRACE', type : 'string', value: 'dtrace',
option('FLEX', type : 'array', value: ['flex', 'win_flex'],
description: 'path to flex binary')
+option('FOP', type : 'string', value: 'fop',
+ description: 'path to fop binary')
+
option('GZIP', type : 'string', value: 'gzip',
description: 'path to gzip binary')
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index 70ab5b77d86..8b87a274fcb 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -2893,6 +2893,39 @@ ninja install
</variablelist>
</sect3>
+ <sect3 id="meson-options-docs">
+ <title>Documentation</title>
+
+ <para>
+ See <xref linkend="docguide-toolsets"/> for the tools needed for building
+ the documentation.
+ </para>
+
+ <variablelist>
+
+ <varlistentry id="configure-docs-meson">
+ <term><option>-Ddocs={ auto | enabled | disabled }</option></term>
+ <listitem>
+ <para>
+ Enables the building of documentation in <acronym>HTML</acronym> and
+ <acronym>man</acronym> format. It defaults to auto.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="configure-docs-pdf-meson">
+ <term><option>-Ddocs_pdf={ auto | enabled | disabled }</option></term>
+ <listitem>
+ <para>
+ Enables the building of documentation in <acronym>PDF</acronym>
+ format. It defaults to auto.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect3>
+
<sect3 id="meson-options-misc">
<title>Miscellaneous</title>
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 66c0061e96b..7719adfc73b 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -5,9 +5,6 @@ installdocs = []
alldocs = []
doc_generated = []
-xmllint_bin = find_program(get_option('XMLLINT'), native: true, required: false)
-
-
version_sgml = configure_file(
input: 'version.sgml.in',
output: 'version.sgml',
@@ -68,8 +65,6 @@ if not xmllint_bin.found()
endif
pandoc = find_program('pandoc', native: true, required: false)
-xsltproc_bin = find_program(get_option('XSLTPROC'), native: true, required: false)
-fop = find_program('fop', native: true, required: false)
xmltools_wrapper = [
python, files('xmltools_dep_wrapper'),
@@ -113,7 +108,7 @@ endif
#
# Full documentation as html, text
#
-if xsltproc_bin.found()
+if docs_dep.found()
xsltproc_html_flags = xsltproc_flags + [
'--param', 'website.stylesheet', '1'
]
@@ -204,7 +199,7 @@ endif
#
# Man pages
#
-if xsltproc_bin.found()
+if docs_dep.found()
# FIXME: implement / consider sqlmansectnum logic
man = custom_target('man',
input: ['stylesheet-man.xsl', postgres_full_xml],
@@ -233,7 +228,7 @@ endif
#
# Full documentation as PDF
#
-if fop.found() and xsltproc_bin.found()
+if docs_pdf_dep.found()
xsltproc_fo_flags = xsltproc_flags + [
'--stringparam', 'img.src.path', meson.current_source_dir() + '/'
]
@@ -291,7 +286,7 @@ db2x_xsltproc = find_program('db2x_xsltproc', native: true, required: false)
db2x_texixml = find_program('db2x_texixml', native: true, required: false)
makeinfo = find_program('makeinfo', native: true, required: false)
-if db2x_texixml.found() and db2x_xsltproc.found() and makeinfo.found()
+if xsltproc_bin.found() and db2x_texixml.found() and db2x_xsltproc.found() and makeinfo.found()
postgres_texixml = custom_target('postgres.texixml',
output: 'postgres.texixml',
command: [db2x_xsltproc, '-s', 'texi',
@@ -315,15 +310,11 @@ if db2x_texixml.found() and db2x_xsltproc.found() and makeinfo.found()
endif
-if docs.length() == 0
- run_target('docs', command: [missing, 'xsltproc'])
-else
+if docs_dep.found()
alias_target('docs', docs)
alias_target('install-docs', installdocs)
endif
-if alldocs.length() == 0
- run_target('alldocs', command: [missing, 'xsltproc'])
-else
+if alldocs.length() != 0
alias_target('alldocs', alldocs)
endif
--
2.38.0
v4-0004-docs-html-copy-images-to-output-as-part-of-xslt-b.patchtext/x-diff; charset=us-asciiDownload
From cad43f9fcc130a8f3c5f6f80601a470536cd7449 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 15 Mar 2023 16:45:14 -0700
Subject: [PATCH v4 4/6] docs: html: copy images to output as part of xslt
build
---
doc/src/sgml/Makefile | 1 -
doc/src/sgml/stylesheet-common.xsl | 22 ++++++++++++++++++++++
doc/src/sgml/stylesheet.xsl | 6 ++++++
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile
index 3c4aa6bebe3..11ecdaf717e 100644
--- a/doc/src/sgml/Makefile
+++ b/doc/src/sgml/Makefile
@@ -144,7 +144,6 @@ html: html-stamp
html-stamp: stylesheet.xsl postgres-full.xml $(ALL_IMAGES)
$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) $(wordlist 1,2,$^)
- cp $(ALL_IMAGES) html/
cp $(srcdir)/stylesheet.css html/
touch $@
diff --git a/doc/src/sgml/stylesheet-common.xsl b/doc/src/sgml/stylesheet-common.xsl
index 761484c7fef..d2928f86eb7 100644
--- a/doc/src/sgml/stylesheet-common.xsl
+++ b/doc/src/sgml/stylesheet-common.xsl
@@ -101,4 +101,26 @@
<xsl:apply-templates select="." mode="xref"/>
</xsl:template>
+
+<!--
+ Support for copying images to the output directory, so the output is self
+ contained.
+-->
+<xsl:template name="write-image">
+ <xsl:variable name="input_filename">
+ <xsl:value-of select="imagedata/@fileref"/>
+ </xsl:variable>
+
+ <!-- references images directly, without images/ -->
+ <xsl:variable name="output_filename">
+ <xsl:value-of select="concat($chunk.base.dir, substring-after($input_filename, '/'))"/>
+ </xsl:variable>
+
+ <xsl:call-template name="write.chunk">
+ <xsl:with-param name="filename" select="$output_filename"/>
+ <xsl:with-param name="content" select="document($input_filename)"/>
+ </xsl:call-template>
+</xsl:template>
+
+
</xsl:stylesheet>
diff --git a/doc/src/sgml/stylesheet.xsl b/doc/src/sgml/stylesheet.xsl
index b6141303abd..c492dc38e54 100644
--- a/doc/src/sgml/stylesheet.xsl
+++ b/doc/src/sgml/stylesheet.xsl
@@ -29,6 +29,12 @@
</xsl:param>
+<!-- copy images to the output directory, so the output is self contained -->
+<xsl:template match="imageobject">
+ <xsl:call-template name="write-image"/>
+ <xsl:apply-templates select="imagedata"/>
+</xsl:template>
+
<!-- strip directory name from image filerefs -->
<xsl:template match="imagedata/@fileref">
<xsl:value-of select="substring-after(., '/')"/>
--
2.38.0
v4-0005-docs-load-stylesheet-via-custom.css.source.patchtext/x-diff; charset=us-asciiDownload
From f463fec1b519938ed77276c5a5eeaf3e1f940f0d Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 29 Mar 2023 15:34:21 -0700
Subject: [PATCH v4 5/6] docs: load stylesheet via custom.css.source
---
doc/src/sgml/Makefile | 3 +--
doc/src/sgml/meson.build | 2 +-
doc/src/sgml/stylesheet-html-common.xsl | 8 ++++++++
doc/src/sgml/stylesheet-html-nochunk.xsl | 3 +++
doc/src/sgml/stylesheet.css.xml | 8 ++++++++
doc/src/sgml/stylesheet.xsl | 11 -----------
6 files changed, 21 insertions(+), 14 deletions(-)
create mode 100644 doc/src/sgml/stylesheet.css.xml
diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile
index 11ecdaf717e..71cbef230f3 100644
--- a/doc/src/sgml/Makefile
+++ b/doc/src/sgml/Makefile
@@ -39,7 +39,7 @@ ifndef FOP
FOP = $(missing) fop
endif
-XMLINCLUDE = --path .
+XMLINCLUDE = --path . --path $(srcdir)
ifdef XMLLINT
XMLLINT := $(XMLLINT) --nonet
@@ -144,7 +144,6 @@ html: html-stamp
html-stamp: stylesheet.xsl postgres-full.xml $(ALL_IMAGES)
$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) $(wordlist 1,2,$^)
- cp $(srcdir)/stylesheet.css html/
touch $@
# single-page HTML
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 7719adfc73b..19531ebbcc7 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -96,7 +96,7 @@ if xsltproc_bin.found()
xsltproc_flags = [
'--nonet',
'--stringparam', 'pg.version', pg_version,
- '--path', '@OUTDIR@',
+ '--path', '@OUTDIR@', '--path', '@CURRENT_SOURCE_DIR@',
]
xsltproc = xmltools_wrapper + [
diff --git a/doc/src/sgml/stylesheet-html-common.xsl b/doc/src/sgml/stylesheet-html-common.xsl
index 9df2782ce4f..bb6429ef7cf 100644
--- a/doc/src/sgml/stylesheet-html-common.xsl
+++ b/doc/src/sgml/stylesheet-html-common.xsl
@@ -18,6 +18,14 @@
<xsl:param name="make.graphic.viewport" select="0"/>
<xsl:param name="link.mailto.url">pgsql-docs@lists.postgresql.org</xsl:param>
<xsl:param name="toc.max.depth">2</xsl:param>
+<xsl:param name="website.stylesheet" select="0"/>
+<xsl:param name="custom.css.source">
+ <xsl:if test="$website.stylesheet = 0">stylesheet.css.xml</xsl:if>
+</xsl:param>
+<xsl:param name="html.stylesheet">
+ <xsl:if test="not($website.stylesheet = 0)">https://www.postgresql.org/media/css/docs-complete.css</xsl:if>
+</xsl:param>
+
<!--
The below allows the stylesheets provided by the website to be applied fully
diff --git a/doc/src/sgml/stylesheet-html-nochunk.xsl b/doc/src/sgml/stylesheet-html-nochunk.xsl
index 8167127b93a..5a0bb4ea08f 100644
--- a/doc/src/sgml/stylesheet-html-nochunk.xsl
+++ b/doc/src/sgml/stylesheet-html-nochunk.xsl
@@ -7,6 +7,9 @@
<xsl:include href="stylesheet-html-common.xsl" />
<xsl:include href="stylesheet-speedup-xhtml.xsl" />
+<!-- except when referencing the online stylesheet, embed stylesheet -->
+<xsl:param name="generate.css.header" select="$website.stylesheet = 0"/>
+
<!-- embed SVG images into output file -->
<xsl:template match="imagedata[@format='SVG']">
<xsl:variable name="filename">
diff --git a/doc/src/sgml/stylesheet.css.xml b/doc/src/sgml/stylesheet.css.xml
new file mode 100644
index 00000000000..a21fcca576f
--- /dev/null
+++ b/doc/src/sgml/stylesheet.css.xml
@@ -0,0 +1,8 @@
+<!--
+ wrapper around stylesheet.css.xml to allow it to be loaded via docbook-xsl's
+ generate.css.header parameter.
+-->
+<!DOCTYPE style [
+<!ENTITY css SYSTEM "stylesheet.css">
+]>
+<style>&css;</style>
diff --git a/doc/src/sgml/stylesheet.xsl b/doc/src/sgml/stylesheet.xsl
index c492dc38e54..363cc93e6b0 100644
--- a/doc/src/sgml/stylesheet.xsl
+++ b/doc/src/sgml/stylesheet.xsl
@@ -17,17 +17,6 @@
<xsl:param name="chunk.quietly" select="1"></xsl:param>
<xsl:param name="admon.style"></xsl:param> <!-- handled by CSS stylesheet -->
-<xsl:param name="website.stylesheet" select="0"/>
-
-<xsl:param name="html.stylesheet">
- <xsl:choose>
- <xsl:when test="$website.stylesheet = 0">stylesheet.css</xsl:when>
- <xsl:otherwise>
- https://www.postgresql.org/media/css/docs-complete.css
- </xsl:otherwise>
- </xsl:choose>
-</xsl:param>
-
<!-- copy images to the output directory, so the output is self contained -->
<xsl:template match="imageobject">
--
2.38.0
v4-0006-meson-docs-Allow-configuring-simple-website-style.patchtext/x-diff; charset=us-asciiDownload
From 049af2a9375ad6c0f91bff21bef70b84f84cf523 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 29 Mar 2023 15:24:30 -0700
Subject: [PATCH v4 6/6] meson: docs: Allow configuring simple/website style
Discussion: https://postgr.es/m/
---
meson_options.txt | 3 +++
doc/src/sgml/installation.sgml | 13 +++++++++++++
doc/src/sgml/meson.build | 7 ++++---
3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/meson_options.txt b/meson_options.txt
index c203dcce6fe..5b44a8829d3 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -85,6 +85,9 @@ option('docs', type : 'feature', value: 'auto',
option('docs_pdf', type : 'feature', value: 'auto',
description: 'documentation in PDF format')
+option('docs_html_style', type : 'combo', choices: ['simple', 'website'],
+ description: 'CSS stylesheet for HTML documentation')
+
option('dtrace', type : 'feature', value: 'disabled',
description: 'DTrace support')
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index 8b87a274fcb..29d4d3b74df 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -2923,6 +2923,19 @@ ninja install
</listitem>
</varlistentry>
+ <varlistentry id="configure-docs-html-style">
+ <term><option>-Ddocs_html_style={ simple | website }</option></term>
+ <listitem>
+ <para>
+ Influences which <acronym>CSS</acronym> stylesheet is used. If
+ <literal>website</literal>, instead of the default
+ <literal>simple</literal>, is used, HTML documentation will use the
+ stylesheet used on <ulink
+ url="https://www.postgresql.org/docs/current/">postgresql.org</ulink>.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect3>
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 19531ebbcc7..e9506acc5bb 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -109,9 +109,10 @@ endif
# Full documentation as html, text
#
if docs_dep.found()
- xsltproc_html_flags = xsltproc_flags + [
- '--param', 'website.stylesheet', '1'
- ]
+ xsltproc_html_flags = xsltproc_flags
+ if get_option('docs_html_style') == 'website'
+ xsltproc_html_flags += ['--param', 'website.stylesheet', '1']
+ endif
html = custom_target('html',
input: ['stylesheet.xsl', postgres_full_xml],
--
2.38.0
+ Enables the building of documentation in <acronym>HTML</acronym> and + <acronym>man</acronym> format. It defaults to auto. + + Enables the building of documentation in <acronym>PDF</acronym> + format. It defaults to auto.
These sound awkward. Recommend:
Enables building the documentation in <acronym>PDF</acronym>
format. It defaults to auto.
+ <varlistentry id="configure-docs-html-style"> + <term><option>-Ddocs_html_style={ simple | website }</option></term> + <listitem> + <para> + Influences which <acronym>CSS</acronym> stylesheet is used. If + <literal>website</literal>, instead of the default + <literal>simple</literal>, is used, HTML documentation will use the + stylesheet used on <ulink + url="https://www.postgresql.org/docs/current/">postgresql.org</ulink>.
s/Influences/Controls/
I think the default should be given separately from the description of
the other option.
Controls which <acronym>CSS</acronym> stylesheet is used.
The default is <literal>simple</literal>.
If set to <literal>website</literal>, the HTML documentation will use the
same stylesheet used on <ulink
url="https://www.postgresql.org/docs/current/">postgresql.org</ulink>.
Hi,
On 2023-03-29 17:51:01 -0500, Justin Pryzby wrote:
+ Enables the building of documentation in <acronym>HTML</acronym> and + <acronym>man</acronym> format. It defaults to auto. + + Enables the building of documentation in <acronym>PDF</acronym> + format. It defaults to auto.These sound awkward. Recommend:
Enables building the documentation in <acronym>PDF</acronym>
format. It defaults to auto.+ <varlistentry id="configure-docs-html-style"> + <term><option>-Ddocs_html_style={ simple | website }</option></term> + <listitem> + <para> + Influences which <acronym>CSS</acronym> stylesheet is used. If + <literal>website</literal>, instead of the default + <literal>simple</literal>, is used, HTML documentation will use the + stylesheet used on <ulink + url="https://www.postgresql.org/docs/current/">postgresql.org</ulink>.s/Influences/Controls/
I think the default should be given separately from the description of
the other option.Controls which <acronym>CSS</acronym> stylesheet is used.
The default is <literal>simple</literal>.
If set to <literal>website</literal>, the HTML documentation will use the
same stylesheet used on <ulink
url="https://www.postgresql.org/docs/current/">postgresql.org</ulink>.
Your alternatives are indeed better. Except that "the same" seems a bit
misleading to me, sounding like it could just be a copy. I changed to "will
reference the stylesheet for ...".
Pushed the changes.
Greetings,
Andres Freund
Hi,
On 2023-04-04 21:46:11 -0700, Andres Freund wrote:
Pushed the changes.
This failed on crake - afaict because the meson buildfarm code disables all
features. Because 'docs' is a feature now, the BF code building
doc/src/sgml/html fails.
Greetings,
Andres Freund
On 2023-04-05 We 00:57, Andres Freund wrote:
Hi,
On 2023-04-04 21:46:11 -0700, Andres Freund wrote:
Pushed the changes.
This failed on crake - afaict because the meson buildfarm code disables all
features. Because 'docs' is a feature now, the BF code building
doc/src/sgml/html fails.
I changed it so that if the config mandates building docs we add
-Ddocs=enabled and if it mandates building a pdf we also add
-Ddocs_pdf=enabled. See
<https://github.com/PGBuildFarm/client-code/commit/b18a129f91352f77e67084a758462b92ac1abaf7>
It's a slight pity that you have to pick this at setup time, but I guess
the upside is that we don't spend time looking for stuff we're not
actually going to use.
cheers
andrew
--
Andrew Dunstan
EDB:https://www.enterprisedb.com
Hi,
On 2023-04-06 14:52:51 -0400, Andrew Dunstan wrote:
On 2023-04-05 We 00:57, Andres Freund wrote:
Hi,
On 2023-04-04 21:46:11 -0700, Andres Freund wrote:
Pushed the changes.
This failed on crake - afaict because the meson buildfarm code disables all
features. Because 'docs' is a feature now, the BF code building
doc/src/sgml/html fails.I changed it so that if the config mandates building docs we add
-Ddocs=enabled and if it mandates building a pdf we also add
-Ddocs_pdf=enabled. See
Sounds good, thanks!
<https://github.com/PGBuildFarm/client-code/commit/b18a129f91352f77e67084a758462b92ac1abaf7>
It's a slight pity that you have to pick this at setup time,
FWIW, you can change options with meson configure -Ddocs=enabled (or whatnot),
in an existing buildtree. It'll rerun configure (with caching). For options
like docs, it won't lead to rebuilding binaries.
but I guess the upside is that we don't spend time looking for stuff we're
not actually going to use.
And that you'll learn that tools are missing before you get through most of
the build...
Greetings,
Andres Freund