pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Started by Andres Freundalmost 3 years ago14 messageshackerscomitters
Beta feature

Hackorum builds and tests every patch posted to the lists, not only commitfest submissions. This is Hackorum's own CI rather than the PostgreSQL project's, and it is still under testing - please report anything that looks wrong.

won't retrysuccessCI history

You can run a PostgreSQL built from this patch straight from Docker, with no checkout and no build:

docker run --rm -p 5432:5432 ghcr.io/hackorum-dev/postgres-patch:t48762
psql -h localhost -U postgres

Built from patchset v9 (message #9), July 27, 2026 at 11:44 PM.

Every patchset is also pushed to a branch of our PostgreSQL fork, so you can check out the same tree CI built. Without a PostgreSQL checkout:

git clone --branch t48762_9 https://github.com/hackorum-dev/postgres.git

In a checkout you already have, add the fork once:

git remote add hackorum https://github.com/hackorum-dev/postgres.git

then, for this patchset and every later one:

git fetch hackorum t48762_9 && git checkout t48762_9

Patchset v9 (message #9) is on t48762_9

Jump to latest
#1Andres Freund
andres@anarazel.de
hackerscomitters

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well. It'd be odd
to have an 'html' target but have the install target be 'install-doc-html',
thus rename the install targets to match.

Reviewed-by: Christoph Berg <myon@debian.org>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Discussion: /messages/by-id/20231103163848.26egkh5qdgw3vmil@awork3.anarazel.de

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ddcab2a0329511e8872b62f2c77e5fa33547c277

Modified Files
--------------
doc/src/sgml/meson.build | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

#2Andrew Dunstan
andrew@dunslane.net
In reply to: Andres Freund (#1)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well. It'd be odd
to have an 'html' target but have the install target be 'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken crake's
docs build:

ERROR: Can't invoke target `html`: ambiguous name.Add target type and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

#3Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#2)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

On 2023-11-23 Th 08:32, Andrew Dunstan wrote:

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well. It'd be odd
to have an 'html' target but have the install target be 'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken
crake's docs build:

ERROR: Can't invoke target `html`: ambiguous name.Add target type and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

This is still broken.

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

#4Andres Freund
andres@anarazel.de
In reply to: Andrew Dunstan (#2)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Hi,

On 2023-11-23 08:32:21 -0500, Andrew Dunstan wrote:

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well. It'd be odd
to have an 'html' target but have the install target be 'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken crake's docs
build:

ERROR: Can't invoke target `html`: ambiguous name.Add target type and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

Ah, I realize now that this is from meson compile html, not 'ninja html'. That
explains why I couldn't reproduce this initially and why CI didn't complain.
I don't really understand why meson compile complains in this case. I assume
you don't want to disambiguate as suggested, by building html:alias instead?

Greetings,

Andres Freund

#5Andrew Dunstan
andrew@dunslane.net
In reply to: Andres Freund (#4)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

On 2023-11-28 Tu 21:28, Andres Freund wrote:

Hi,

On 2023-11-23 08:32:21 -0500, Andrew Dunstan wrote:

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well. It'd be odd
to have an 'html' target but have the install target be 'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken crake's docs
build:

ERROR: Can't invoke target `html`: ambiguous name.Add target type and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

Ah, I realize now that this is from meson compile html, not 'ninja html'. That
explains why I couldn't reproduce this initially and why CI didn't complain.
I don't really understand why meson compile complains in this case. I assume
you don't want to disambiguate as suggested, by building html:alias instead?

I've done that as a temporary fix to get crake out of the hole, but it's
pretty ugly, and I don't want to do it in a release if at all possible.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#5)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Andrew Dunstan <andrew@dunslane.net> writes:

On 2023-11-28 Tu 21:28, Andres Freund wrote:

I don't really understand why meson compile complains in this case. I assume
you don't want to disambiguate as suggested, by building html:alias instead?

I've done that as a temporary fix to get crake out of the hole, but it's
pretty ugly, and I don't want to do it in a release if at all possible.

Our documentation says specifically that "ninja html" will build the
HTML format. I would expect that to work by analogy with the "make"
target; having to spell it differently seems like clearly a bug.

regards, tom lane

#7Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#6)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

On 2023-11-29 We 08:49, Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

On 2023-11-28 Tu 21:28, Andres Freund wrote:

I don't really understand why meson compile complains in this case. I assume
you don't want to disambiguate as suggested, by building html:alias instead?

I've done that as a temporary fix to get crake out of the hole, but it's
pretty ugly, and I don't want to do it in a release if at all possible.

Our documentation says specifically that "ninja html" will build the
HTML format. I would expect that to work by analogy with the "make"
target; having to spell it differently seems like clearly a bug.

"ninja html" does in fact work. What's not working is "meson compile
html". And it looks like the reason I used that in the buildfarm code is
that ninja doesn't know about other targets like "postgres-US.pdf". Up
to now "meson compile postgres-US.pdf html" has worked.

FWIW, the buildfarm code doesn't use ninja explicitly anywhere else.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#8Andres Freund
andres@anarazel.de
In reply to: Andrew Dunstan (#7)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Hi,

On 2023-11-29 10:05:26 -0500, Andrew Dunstan wrote:

On 2023-11-29 We 08:49, Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

On 2023-11-28 Tu 21:28, Andres Freund wrote:

I don't really understand why meson compile complains in this case. I assume
you don't want to disambiguate as suggested, by building html:alias instead?

I've done that as a temporary fix to get crake out of the hole, but it's
pretty ugly, and I don't want to do it in a release if at all possible.

Our documentation says specifically that "ninja html" will build the
HTML format. I would expect that to work by analogy with the "make"
target; having to spell it differently seems like clearly a bug.

"ninja html" does in fact work. What's not working is "meson compile html".
And it looks like the reason I used that in the buildfarm code is that ninja
doesn't know about other targets like "postgres-US.pdf".

It does:

ninja help|grep pdf
doc/src/sgml/postgres-A4.pdf Build documentation in PDF format, with A4 pages
doc/src/sgml/postgres-US.pdf Build documentation in PDF format, with US letter pages

"ninja doc/src/sgml/postgres-US.pdf" works and has worked since day one.

FWIW, you can continue to use meson compile, you just need to disambiguate the
target name:
meson compile html:alias

Which isn't particularly pretty, but does work.

Greetings,

Andres Freund

#9Andres Freund
andres@anarazel.de
In reply to: Andrew Dunstan (#5)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Hi,

This started at /messages/by-id/746ba786-85bb-d1f7-b613-57bec35c642a@dunslane.net
but seems worth discussing on -hackers.

On 2023-11-29 07:20:59 -0500, Andrew Dunstan wrote:

On 2023-11-28 Tu 21:28, Andres Freund wrote:

On 2023-11-23 08:32:21 -0500, Andrew Dunstan wrote:

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well. It'd be odd
to have an 'html' target but have the install target be 'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken crake's docs
build:

ERROR: Can't invoke target `html`: ambiguous name.Add target type and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

Ah, I realize now that this is from meson compile html, not 'ninja html'. That
explains why I couldn't reproduce this initially and why CI didn't complain.
I don't really understand why meson compile complains in this case. I assume
you don't want to disambiguate as suggested, by building html:alias instead?

I've done that as a temporary fix to get crake out of the hole, but it's
pretty ugly, and I don't want to do it in a release if at all possible.

If we want to prevent these kind of conflicts, which doesn't seem
unreasonable, I think we need an automatic check that prevents reintroducing
them. I think most people will just use ninja and not see them. Meson stores
the relevant information in meson-info/intro-targets.json, so that's just a
bit of munging of that file.

I think the background for this issue existing is that meson supports a "flat"
build directory layout (which is deprecated), so the directory name can't be
used to deconflict with meson compile, which tries to work across all "build
execution" systems.

Prototype of such a check, as well as a commit deconflicting the target names,
attached.

Greetings,

Andres Freund

Attachments:

t48762_9
v1-0001-meson-Rename-target-names-that-conflict-with-glob.patchtext/x-diff; charset=us-asciiDownload+4-5
v1-0002-meson-Add-test-checking-if-there-are-conflicting-.patchtext/x-diff; charset=us-asciiDownload+75-1
#10Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#5)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

On 2023-11-29 We 07:20, Andrew Dunstan wrote:

On 2023-11-28 Tu 21:28, Andres Freund wrote:

Hi,

On 2023-11-23 08:32:21 -0500, Andrew Dunstan wrote:

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well.
It'd be odd
to have an 'html' target but have the install target be
'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken
crake's docs
build:

ERROR: Can't invoke target `html`: ambiguous name.Add target type
and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

Ah, I realize now that this is from meson compile html, not 'ninja
html'. That
explains why I couldn't reproduce this initially and why CI didn't
complain.
I don't really understand why meson compile complains in this case. 
I assume
you don't want to disambiguate as suggested, by building html:alias
instead?

I've done that as a temporary fix to get crake out of the hole, but
it's pretty ugly, and I don't want to do it in a release if at all
possible.

and doing this has broken the docs build for release 16.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#11Andres Freund
andres@anarazel.de
In reply to: Andrew Dunstan (#10)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Hi,

On 2023-12-01 09:04:19 -0500, Andrew Dunstan wrote:

On 2023-11-29 We 07:20, Andrew Dunstan wrote:

On 2023-11-28 Tu 21:28, Andres Freund wrote:

On 2023-11-23 08:32:21 -0500, Andrew Dunstan wrote:

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as
well. It'd be odd
to have an 'html' target but have the install target be
'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken
crake's docs
build:

ERROR: Can't invoke target `html`: ambiguous name.Add target
type and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

Ah, I realize now that this is from meson compile html, not 'ninja
html'. That
explains why I couldn't reproduce this initially and why CI didn't
complain.
I don't really understand why meson compile complains in this case.�
I assume
you don't want to disambiguate as suggested, by building html:alias
instead?

I've done that as a temporary fix to get crake out of the hole, but it's
pretty ugly, and I don't want to do it in a release if at all possible.

and doing this has broken the docs build for release 16.

If I can get somebody to comment on
/messages/by-id/20231129183619.3hrnwaexbrpygbxg@awork3.anarazel.de
we can remove the need for the :$buildtype suffix.

Greetings,

Andres Freund

#12Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#10)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

On 2023-12-01 Fr 09:04, Andrew Dunstan wrote:

On 2023-11-29 We 07:20, Andrew Dunstan wrote:

On 2023-11-28 Tu 21:28, Andres Freund wrote:

Hi,

On 2023-11-23 08:32:21 -0500, Andrew Dunstan wrote:

On 2023-11-20 Mo 20:53, Andres Freund wrote:

meson: docs: Add {html,man} targets, rename install-doc-*

We have toplevel html, man targets in the autoconf build as well.
It'd be odd
to have an 'html' target but have the install target be
'install-doc-html',
thus rename the install targets to match.

This commit of one of its nearby friends appears to have broken
crake's docs
build:

ERROR: Can't invoke target `html`: ambiguous name.Add target type
and/or path:
- ./doc/src/sgml/html:custom
- ./doc/src/sgml/html:alias

See<https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2023-11-23%2012%3A52%3A04&gt;

Ah, I realize now that this is from meson compile html, not 'ninja
html'. That
explains why I couldn't reproduce this initially and why CI didn't
complain.
I don't really understand why meson compile complains in this case. 
I assume
you don't want to disambiguate as suggested, by building html:alias
instead?

I've done that as a temporary fix to get crake out of the hole, but
it's pretty ugly, and I don't want to do it in a release if at all
possible.

and doing this has broken the docs build for release 16.

OK, so this code is what I have now, and seems to work on both HEAD and
REL_16_STABLE:

        my $extra_targets = $PGBuild::conf{extra_doc_targets} || "";
        my @targs = split(/\s+/, $extra_targets);
        s!^!doc/src/sgml/! foreach @targs;
        $extra_targets=join(' ', @targs) ;
        @makeout = run_log("cd $pgsql && ninja doc/src/sgml/html $extra_targets");

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

#13Tristan Partin
tristan@neon.tech
In reply to: Andres Freund (#9)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Commits look fine to me, but I hate the new target names... Luckily,
I just use plain ninja, so I don't interact with that.

+    for name, v in targets_info_byname.items():
+        if len(targets_info_byname[name]) > 1:

My only comment is that you could reverse the logic and save yourself an
indentation.

- if len(targets_info_byname[name]) > 1:
+ if len(targets_info_byname[name]) <= 1:
+     continue

But whatever you want.

--
Tristan Partin
Neon (https://neon.tech)

#14Andres Freund
andres@anarazel.de
In reply to: Tristan Partin (#13)
hackerscomitters
Re: pgsql: meson: docs: Add {html,man} targets, rename install-doc-*

Hi,

On 2023-12-01 15:55:29 -0600, Tristan Partin wrote:

Commits look fine to me, but I hate the new target names...

You shouldn't ever need to use them anywhere - that's what the alias is for...

Happy to go another route if you have a suggestion.

+    for name, v in targets_info_byname.items():
+        if len(targets_info_byname[name]) > 1:

My only comment is that you could reverse the logic and save yourself an
indentation.

- if len(targets_info_byname[name]) > 1:
+ if len(targets_info_byname[name]) <= 1:
+     continue

But whatever you want.

Makes sense.