Hi,
On 2023-11-03 20:19:18 +0100, Christoph Berg wrote:
> Re: Andres Freund
> > The reason for that is simply that the docs take too long to build.
>
> That why I'd prefer to be able to separate arch:all and arch:any
> builds, yes.
What's stopping you from doing that? I think the only arch:any content we
have is the docs, and those you can build separately? Doc builds do trigger
generation of a handful of files besides the docs, but not more.
> > > Oh, that's a showstopper. I thought meson would already be ready for
> > > production use. There is indeed an "experimental" note in
> > > install-requirements.html, but not in install-meson.html
> >
> > I'm working on merging it. Having it for core PG isn't a huge difficulty,
> > the
> > extension story is what's been holding me back...
>
> In-core extensions or external ones?
Both, although the difficulty of doing it is somewhat separate for each.
> > > Why isn't it "auto" like the others?
> >
> > I don't really remember why I did that, but it's platform specific, maybe
> > that's why I did it that way?
>
> Isn't that kind the point of autodetecting things? Aren't bonjour and
> bsd_auth autodetected as well?
I'd be happy to change it, unless somebody objects?
> > > > I don't think the autoconf build currently exposes separately
> > > > configuring
> > > > pkglibdir either, I think that's a debian patch? I'm entirely open to
> > > > adding
> > > > an explicit configuration option for this though.
> > >
> > > That would definitely be helpful.
> >
> > I have a patch locally, will send it together with a few others in a bit.
>
> Thanks!
Attached.
0001 - the bugfix for install-man only installing man1, I'll push that soon
0002 - Document --with-selinux/-Dselinux options centrally
0003 - Add doc-{html,man} targets
I'm not quite sure it's worth it, but it's basically free, so ...
0004 - Documentation for important build targets
I'm not entirely happy with the formatting, but it looks like that's
mostly a CSS issue. I started a thread on fixing that on -www.
0005 - Add -Dpkglibdir option
I guess we might want to do the same for configure if we decide to do
this?
Greetings,
Andres Freund
>From 146f4e5a76e68c551aee55cb46bb2197166da63d Mon Sep 17 00:00:00 2001
From: Andres Freund <[email protected]>
Date: Fri, 3 Nov 2023 11:46:52 -0700
Subject: [PATCH v1 1/5] meson: docs: Install all manpages, not just ones in
man1
In f13eb16485f I made a mistake leading to only man1 being installed. I will
report a bug suggesting that meson warn about mistakes of this sort.
Reported-by: Christoph Berg <[email protected]>
Discussion: https://postgr.es/m/[email protected]
Backpatch: 16-, where the meson build was introduced
---
doc/src/sgml/meson.build | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 16c1aa980c9..90e2c062fa8 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -225,9 +225,10 @@ if docs_dep.found()
install_doc_man = custom_target('install-man',
output: 'install-man',
+ input: man,
command: [
python, install_files, '--prefix', dir_prefix,
- '--install-dirs', dir_man, man],
+ '--install-dirs', dir_man, '@INPUT@'],
build_always_stale: true, build_by_default: false,
)
alias_target('install-doc-man', install_doc_man)
--
2.38.0
>From 16109154c197d77b3e5d16144cfd383c74459025 Mon Sep 17 00:00:00 2001
From: Andres Freund <[email protected]>
Date: Fri, 3 Nov 2023 10:21:13 -0700
Subject: [PATCH v1 2/5] docs: Document --with-selinux/-Dselinux options
centrally
Previously --with-selinux was documented for autoconf in the sepgsql
documentation and not at all for meson. There are further improvements related
to this that could be made, but this seems like a clear improvement.
Author:
Reviewed-by:
Reported-by: Christoph Berg <[email protected]>
Discussion: https://postgr.es/m/[email protected]
Backpatch:
---
doc/src/sgml/installation.sgml | 21 +++++++++++++++++++++
doc/src/sgml/sepgsql.sgml | 11 ++++++++---
2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index 9b25e9fdb1b..e1c03e21414 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1209,6 +1209,16 @@ build-postgresql:
</listitem>
</varlistentry>
+ <varlistentry id="configure-option-with-sepgsql">
+ <term><option>--with-selinux</option></term>
+ <listitem>
+ <para>
+ Build with selinux support, enabling the <xref linkend="sepgsql"/>
+ extension.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect3>
@@ -2640,6 +2650,17 @@ ninja install
</para>
</listitem>
</varlistentry>
+
+ <varlistentry id="configure-with-sepgsql-meson">
+ <term><option>-Dselinux={ disabled | auto | enabled }</option></term>
+ <listitem>
+ <para>
+ Build with selinux support, enabling the <xref linkend="sepgsql"/>
+ extension.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect3>
diff --git a/doc/src/sgml/sepgsql.sgml b/doc/src/sgml/sepgsql.sgml
index b368e587cbf..1b848f1977c 100644
--- a/doc/src/sgml/sepgsql.sgml
+++ b/doc/src/sgml/sepgsql.sgml
@@ -87,9 +87,14 @@ Policy from config file: targeted
</para>
<para>
- To build this module, include the option <literal>--with-selinux</literal> in
- your PostgreSQL <literal>configure</literal> command. Be sure that the
- <filename>libselinux-devel</filename> RPM is installed at build time.
+ To build this module specify <xref
+ linkend="configure-option-with-sepgsql"/> (when using <link
+ linkend="install-make">make and autoconf</link> ) or <xref
+ linkend="configure-with-sepgsql-meson"/> (when using <link
+ linkend="install-meson">meson</link>).
+
+ Be sure that the <filename>libselinux-devel</filename> RPM is installed at
+ build time.
</para>
<para>
--
2.38.0
>From 5a857146354bc8b42259a32ed0432b406de22a25 Mon Sep 17 00:00:00 2001
From: Andres Freund <[email protected]>
Date: Fri, 3 Nov 2023 11:59:25 -0700
Subject: [PATCH v1 3/5] meson: docs: Add doc-{html,man} targets
Discussion: https://postgr.es/m/[email protected]
---
doc/src/sgml/meson.build | 3 +++
1 file changed, 3 insertions(+)
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 90e2c062fa8..003b57498bb 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -142,6 +142,7 @@ if docs_dep.found()
'--install-dir-contents', dir_doc_html, html],
build_always_stale: true, build_by_default: false,
)
+ alias_target('doc-html', install_doc_html)
alias_target('install-doc-html', install_doc_html)
# build and install multi-page html docs as part of docs target
@@ -231,6 +232,8 @@ if docs_dep.found()
'--install-dirs', dir_man, '@INPUT@'],
build_always_stale: true, build_by_default: false,
)
+
+ alias_target('doc-man', install_doc_html)
alias_target('install-doc-man', install_doc_man)
# even though we don't want to build man pages as part of 'docs', we do want
--
2.38.0
>From 68a46f88defd013f7213a56a7325665ce5dd9036 Mon Sep 17 00:00:00 2001
From: Andres Freund <[email protected]>
Date: Fri, 3 Nov 2023 14:06:25 -0700
Subject: [PATCH v1 4/5] docs: meson: Add documentation for important build
targets
Author:
Reviewed-by:
Discussion: https://postgr.es/m/[email protected]
Backpatch:
---
doc/src/sgml/installation.sgml | 224 +++++++++++++++++++++++++++++++++
1 file changed, 224 insertions(+)
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index e1c03e21414..6050c38be25 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -3211,6 +3211,230 @@ ninja install
</variablelist>
</sect3>
</sect2>
+
+ <sect2 id="meson-targets">
+ <title><literal>meson</literal> Build Targets</title>
+
+ <para>
+ Individual build targets can be built using <command>ninja</command> <replaceable>target</replaceable>.
+
+ When no target is specified, everything except documentation is
+ built. Individual build products can be built using the path/filename as
+ <replaceable>target</replaceable>.
+ </para>
+
+ <sect3 id="meson-targets-install">
+ <title>Install Targets</title>
+
+ <variablelist>
+
+ <varlistentry id="meson-target-install">
+ <term><option>install</option></term>
+ <listitem>
+ <para>
+ Install postgres, excluding documentation
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-install-quiet">
+ <term><option>install-quiet</option></term>
+ <listitem>
+ <para>
+ Like <xref linkend="meson-target-install"/>, but installed
+ files are not displayed
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-install-world">
+ <term><option>install-install-world</option></term>
+ <listitem>
+ <para>
+ Install postgres, including multi-page HTML and man page
+ documentation.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-install-docs">
+ <term><option>install-docs</option></term>
+ <listitem>
+ <para>
+ Install documentation in multi-page HTML and man page formats. See
+ also <xref linkend="meson-target-install-doc-html"/>, <xref
+ linkend="meson-target-install-doc-man"/>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-install-doc-html">
+ <term><option>install-doc-html</option></term>
+ <listitem>
+ <para>
+ Install documentation in multi-page HTML format.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-install-doc-man">
+ <term><option>install-doc-html</option></term>
+ <listitem>
+ <para>
+ Install documentation in man page format.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-uninstall">
+ <term><option>uninstall</option></term>
+ <listitem>
+ <para>
+ Remove installed files.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </sect3>
+
+ <sect3 id="meson-targets-docs">
+ <title>Documentation Targets</title>
+
+ <variablelist>
+
+ <varlistentry id="meson-target-docs">
+ <term><option>docs</option></term>
+ <term><option>doc-html</option></term>
+ <listitem>
+ <para>
+ Build documentation in multi-page HTML format. Note that
+ <option>docs</option> does <emphasis>not</emphasis> include building
+ man page documentation, as man page generation seldom fails when
+ building HTML documentation succeeds.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-doc-man">
+ <term><option>doc-man</option></term>
+ <listitem>
+ <para>
+ Build documentation in man page format.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-html-single-page">
+ <term><option>doc/src/sgml/postgres.html</option></term>
+ <listitem>
+ <para>
+ Build documentation in single-page HTML format.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-pdf">
+ <term><option>doc/src/sgml/postgres-A4.pdf</option></term>
+ <term><option>doc/src/sgml/postgres-US.pdf</option></term>
+ <listitem>
+ <para>
+ Build documentation in PDF format, using A4 and U.S. letter format
+ respectively.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-alldocs">
+ <term><option>alldocs</option></term>
+ <listitem>
+ <para>
+ Build documentation in all supported formats. Primarily useful when
+ testing larger documentation changes.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+ <sect3 id="meson-targets-code">
+ <title>Code Targets</title>
+
+ <variablelist>
+
+ <varlistentry id="meson-target-backend">
+ <term><option>backend</option></term>
+ <listitem>
+ <para>
+ Build backend and related modules.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-bin">
+ <term><option>bin</option></term>
+ <listitem>
+ <para>
+ Build frontend binaries
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-contrib">
+ <term><option>contrib</option></term>
+ <listitem>
+ <para>
+ Build contrib modules
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-pl">
+ <term><option>pl</option></term>
+ <listitem>
+ <para>
+ Build procedual languages
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+ <sect3 id="meson-targets-other">
+ <title>Other Targets</title>
+
+ <variablelist>
+
+ <varlistentry id="meson-target-clean">
+ <term><option>clean</option></term>
+ <listitem>
+ <para>
+ Remove all build products
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="meson-target-test">
+ <term><option>test</option></term>
+ <listitem>
+ <para>
+ Remove all enabled tests. Support for some classes of tests can be
+ enabled / disabled with <xref linkend="configure-tap-tests-meson"/>
+ and <xref linkend="configure-pg-test-extra-meson"/>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect3>
+
+ </sect2>
+
</sect1>
<sect1 id="install-post">
--
2.38.0
>From 13dbd38c4aea7d4c4f0e2ad9dd72bb021ad1cb2b Mon Sep 17 00:00:00 2001
From: Andres Freund <[email protected]>
Date: Fri, 3 Nov 2023 10:06:00 -0700
Subject: [PATCH v1 5/5] meson: Add -Dpkglibdir option
Author:
Reviewed-by:
Discussion: https://postgr.es/m/[email protected]
Backpatch:
---
meson.build | 9 ++++++---
meson_options.txt | 3 +++
doc/src/sgml/installation.sgml | 18 +++++++++++++++---
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/meson.build b/meson.build
index 2d516c8f372..dbbdb46808f 100644
--- a/meson.build
+++ b/meson.build
@@ -492,9 +492,12 @@ endif
dir_lib = get_option('libdir')
-dir_lib_pkg = dir_lib
-if not (dir_prefix_contains_pg or dir_lib_pkg.contains('pgsql') or dir_lib_pkg.contains('postgres'))
- dir_lib_pkg = dir_lib_pkg / pkg
+dir_lib_pkg = get_option('pkglibdir')
+if dir_lib_pkg == ''
+ dir_lib_pkg = dir_lib
+ if not (dir_prefix_contains_pg or dir_lib_pkg.contains('pgsql') or dir_lib_pkg.contains('postgres'))
+ dir_lib_pkg = dir_lib_pkg / pkg
+ endif
endif
dir_pgxs = dir_lib_pkg / 'pgxs'
diff --git a/meson_options.txt b/meson_options.txt
index d2f95cfec36..2da3830d006 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -70,6 +70,9 @@ option('darwin_sysroot', type: 'string', value: '',
option('rpath', type: 'boolean', value: true,
description: 'Embed shared library search path in executables')
+option('pkglibdir', type: 'string', value: '',
+ description: 'Directory to install / load dynamically loadable modules from')
+
# External dependencies
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index 6050c38be25..ef4489a6fc5 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -2265,9 +2265,21 @@ ninja install
<term><option>--libdir=<replaceable>DIRECTORY</replaceable></option></term>
<listitem>
<para>
- Sets the location to install libraries and dynamically loadable
- modules. The default is
- <filename><replaceable>PREFIX</replaceable>/lib</filename>.
+ Sets the location to install libraries. The default is
+ <filename><replaceable>PREFIX</replaceable>/lib</filename>. This
+ option, unless <xref linkend='configure-pkglibdir-meson'/> is
+ specified, also controls where dynamically loadable modules get
+ installed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="configure-pkglibdir-meson">
+ <term><option>-Dpkglibdir=<replaceable>DIRECTORY</replaceable></option></term>
+ <listitem>
+ <para>
+ Sets the location to dynamically loadable modules. The default is set
+ by <xref linkend='configure-libdir-meson'/>.
</para>
</listitem>
</varlistentry>
--
2.38.0