]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix build inconsistency due to the generation of wait-event code
authorMichael Paquier <michael@paquier.xyz>
Sun, 1 Feb 2026 23:03:02 +0000 (08:03 +0900)
committerMichael Paquier <michael@paquier.xyz>
Sun, 1 Feb 2026 23:03:02 +0000 (08:03 +0900)
The build generates four files based on the wait event contents stored
in wait_event_names.txt:
- wait_event_types.h
- pgstat_wait_event.c
- wait_event_funcs_data.c
- wait_event_types.sgml

The SGML file is generated as part of a documentation build, with its
data stored in doc/src/sgml/ for meson and configure.  The three others
are handled differently for meson and configure:
- In configure, all the files are created in src/backend/utils/activity/.
A link to wait_event_types.h is created in src/include/utils/.
- In meson, all the files are created in src/include/utils/.

The two C files, pgstat_wait_event.c and wait_event_funcs_data.c, are
then included in respectively wait_event.c and wait_event_funcs.c,
without the "utils/" path.

For configure, this does not present a problem.  For meson, this has to
be combined with a trick in src/backend/utils/activity/meson.build,
where include_directories needs to point to include/utils/ to make the
inclusion of the C files work properly, causing builds to pull in
PostgreSQL headers rather than system headers in some build paths, as
src/include/utils/ would take priority.

In order to fix this issue, this commit reworks the way the C/H files
are generated, becoming consistent with guc_tables.inc.c:
- For meson, basically nothing changes.  The files are still generated
in src/include/utils/.  The trick with include_directories is removed.
- For configure, the files are now generated in src/backend/utils/, with
links in src/include/utils/ pointing to the ones in src/backend/.  This
requires extra rules in src/backend/utils/activity/Makefile so as a
make command in this sub-directory is able to work.
- The three files now fall under header-stamp, which is actually simpler
as guc_tables.inc.c does the same.
- wait_event_funcs_data.c and pgstat_wait_event.c are now included with
"utils/" in their path.

This problem has not been an issue in the buildfarm; it has been noted
with AIX and a conflict with float.h.  This issue could, however, create
conflicts in the buildfarm depending on the environment with unexpected
headers pulled in, so this fix is backpatched down to where the
generation of the wait-event files has been introduced.

While on it, this commit simplifies wait_event_names.txt regarding the
paths of the files generated, to mention just the names of the files
generated.  The paths where the files are generated became incorrect.
The path of the SGML path was wrong.

This change has been tested in the CI, down to v17.  Locally, I have run
tests with configure (with and without VPATH), as well as meson, on the
three branches.

Combo oversight in fa88928470b5 and 1e68e43d3f0f.

Reported-by: Aditya Kamath <aditya.kamath1@ibm.com>
Discussion: https://postgr.es/m/LV8PR15MB64888765A43D229EA5D1CFE6D691A@LV8PR15MB6488.namprd15.prod.outlook.com
Backpatch-through: 17

12 files changed:
src/backend/Makefile
src/backend/utils/.gitignore
src/backend/utils/Makefile
src/backend/utils/activity/.gitignore [deleted file]
src/backend/utils/activity/Makefile
src/backend/utils/activity/meson.build
src/backend/utils/activity/wait_event.c
src/backend/utils/activity/wait_event_funcs.c
src/backend/utils/activity/wait_event_names.txt
src/include/Makefile
src/include/utils/.gitignore
src/include/utils/meson.build

index 84302cc6dab7b12d8452705ec2916696a8b5d4b3..f2dae69870ac54b25a996ec5471f228c8c5e23fc 100644 (file)
@@ -113,9 +113,6 @@ parser/gram.h: parser/gram.y
 storage/lmgr/lwlocknames.h: storage/lmgr/generate-lwlocknames.pl ../include/storage/lwlocklist.h utils/activity/wait_event_names.txt
        $(MAKE) -C storage/lmgr lwlocknames.h
 
-utils/activity/wait_event_types.h: utils/activity/generate-wait_event_types.pl utils/activity/wait_event_names.txt
-       $(MAKE) -C utils/activity wait_event_types.h pgstat_wait_event.c wait_event_funcs_data.c
-
 # run this unconditionally to avoid needing to know its dependencies here:
 submake-catalog-headers:
        $(MAKE) -C ../include/catalog generated-headers
@@ -140,18 +137,13 @@ submake-utils-headers:
 
 .PHONY: generated-headers
 
-generated-headers: $(top_builddir)/src/include/storage/lwlocknames.h $(top_builddir)/src/include/utils/wait_event_types.h submake-catalog-headers submake-nodes-headers submake-utils-headers parser/gram.h
+generated-headers: $(top_builddir)/src/include/storage/lwlocknames.h submake-catalog-headers submake-nodes-headers submake-utils-headers parser/gram.h
 
 $(top_builddir)/src/include/storage/lwlocknames.h: storage/lmgr/lwlocknames.h
        prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
          cd '$(dir $@)' && rm -f $(notdir $@) && \
          $(LN_S) "$$prereqdir/$(notdir $<)" .
 
-$(top_builddir)/src/include/utils/wait_event_types.h: utils/activity/wait_event_types.h
-       prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
-         cd '$(dir $@)' && rm -f $(notdir $@) && \
-         $(LN_S) "$$prereqdir/$(notdir $<)" .
-
 utils/probes.o: utils/probes.d $(SUBDIROBJS)
        $(DTRACE) $(DTRACEFLAGS) -C -G -s $(call expand_subsys,$^) -o $@
 
index 068555695946f9770c0519a5656a559a2b55b472..6891124a26447507679e5c94fbd3fc4a676cbd4f 100644 (file)
@@ -4,3 +4,6 @@
 /fmgr-stamp
 /probes.h
 /errcodes.h
+/pgstat_wait_event.c
+/wait_event_funcs_data.c
+/wait_event_types.h
index 394c130d64fcdc3617c4ef74f99d35ab01291d29..70cfdf5116c9cc9a01ad9aa94c08c407092eabb2 100644 (file)
@@ -43,7 +43,7 @@ generated-header-symlinks: $(top_builddir)/src/include/utils/header-stamp submak
 submake-adt-headers:
        $(MAKE) -C adt jsonpath_gram.h
 
-$(SUBDIRS:%=%-recursive): fmgr-stamp errcodes.h
+$(SUBDIRS:%=%-recursive): fmgr-stamp errcodes.h pgstat_wait_event.c wait_event_funcs_data.c wait_event_types.h
 
 # fmgr-stamp records the last time we ran Gen_fmgrtab.pl.  We don't rely on
 # the timestamps of the individual output files, because the Perl script
@@ -55,6 +55,12 @@ fmgr-stamp: Gen_fmgrtab.pl $(catalogdir)/Catalog.pm $(top_srcdir)/src/include/ca
 errcodes.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-errcodes.pl
        $(PERL) $(srcdir)/generate-errcodes.pl --outfile $@ $<
 
+pgstat_wait_event.c: wait_event_types.h
+wait_event_funcs_data.c: wait_event_types.h
+
+wait_event_types.h: $(top_srcdir)/src/backend/utils/activity/wait_event_names.txt $(top_srcdir)/src/backend/utils/activity/generate-wait_event_types.pl
+       $(PERL) $(top_srcdir)/src/backend/utils/activity/generate-wait_event_types.pl --code $<
+
 ifeq ($(enable_dtrace), yes)
 probes.h: postprocess_dtrace.sed probes.h.tmp
        sed -f $^ >$@
@@ -70,8 +76,8 @@ endif
 # These generated headers must be symlinked into src/include/.
 # We use header-stamp to record that we've done this because the symlinks
 # themselves may appear older than fmgr-stamp.
-$(top_builddir)/src/include/utils/header-stamp: fmgr-stamp errcodes.h probes.h
-       cd '$(dir $@)' && for file in fmgroids.h fmgrprotos.h errcodes.h probes.h; do \
+$(top_builddir)/src/include/utils/header-stamp: fmgr-stamp errcodes.h probes.h pgstat_wait_event.c wait_event_funcs_data.c wait_event_types.h
+       cd '$(dir $@)' && for file in fmgroids.h fmgrprotos.h errcodes.h probes.h pgstat_wait_event.c wait_event_funcs_data.c wait_event_types.h; do \
          rm -f $$file && $(LN_S) "../../../$(subdir)/$$file" . ; \
        done
        touch $@
@@ -90,3 +96,4 @@ uninstall-data:
 clean:
        rm -f probes.h probes.h.tmp
        rm -f fmgroids.h fmgrprotos.h fmgrtab.c fmgr-stamp errcodes.h
+       rm -f wait_event_types.h pgstat_wait_event.c wait_event_funcs_data.c
diff --git a/src/backend/utils/activity/.gitignore b/src/backend/utils/activity/.gitignore
deleted file mode 100644 (file)
index bd0c0c7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/pgstat_wait_event.c
-/wait_event_types.h
-/wait_event_funcs_data.c
index b9fd66ea17ceae57fffb78c78da3aa7f320c3b00..e7778ab50f5abeac840e06eef0806987fd64d191 100644 (file)
@@ -35,17 +35,8 @@ OBJS = \
        wait_event.o \
        wait_event_funcs.o
 
-include $(top_srcdir)/src/backend/common.mk
-
-wait_event_funcs.o: wait_event_funcs_data.c
-wait_event_funcs_data.c: wait_event_types.h
-
-wait_event.o: pgstat_wait_event.c
-pgstat_wait_event.c: wait_event_types.h
-       touch $@
+# Force these dependencies to be known even without dependency info built:
+wait_event.o: wait_event.c $(top_builddir)/src/backend/utils/pgstat_wait_event.c
+wait_event_funcs.o: wait_event_funcs.c $(top_builddir)/src/backend/utils/wait_event_funcs_data.c
 
-wait_event_types.h: $(top_srcdir)/src/backend/utils/activity/wait_event_names.txt generate-wait_event_types.pl
-       $(PERL) $(srcdir)/generate-wait_event_types.pl --code $<
-
-clean:
-       rm -f wait_event_types.h pgstat_wait_event.c wait_event_funcs_data.c
+include $(top_srcdir)/src/backend/common.mk
index f73c22905c272a40aa671ed19808c16bbc5ac554..3b06eddd44f3542537331dafed4c0882f295c253 100644 (file)
@@ -29,7 +29,6 @@ waitevent_sources = files(
 wait_event = static_library('wait_event_names',
   waitevent_sources,
   dependencies: [backend_code],
-  include_directories: include_directories('../../../include/utils'),
   kwargs: internal_lib_args,
 )
 
index bbf59482be19623e959454079a9a78a9564c0042..4dfcc489eefd91c7bfbb7b8e90f2b632d62b3a32 100644 (file)
@@ -504,4 +504,4 @@ pgstat_get_wait_event(uint32 wait_event_info)
        return event_name;
 }
 
-#include "pgstat_wait_event.c"
+#include "utils/pgstat_wait_event.c"
index fa8bc05c0c73f4d9934fff199dce5adbe4089189..3052ba3a31de974ffe043de4c6240c5d6181f32c 100644 (file)
@@ -31,7 +31,7 @@ static const struct
 
                        waitEventData[] =
 {
-#include "wait_event_funcs_data.c"
+#include "utils/wait_event_funcs_data.c"
        /* end of list */
        {NULL, NULL, NULL}
 };
index 16144c2b72d285f5a47f30cd1f0d86152488a20f..426a1c6ff648d30022938b2da1de9c2196535303 100644 (file)
 #
 # The files generated from this one are:
 #
-#   src/backend/utils/activity/wait_event_types.h
+#   wait_event_types.h
 #      typedef enum definitions for wait events.
 #
-#   src/backend/utils/activity/pgstat_wait_event.c
+#   pgstat_wait_event.c
 #      C functions to get the wait event name based on the enum.
 #
-#   src/backend/utils/activity/wait_event_types.sgml
+#   wait_event_types.sgml
 #      SGML tables of wait events for inclusion in the documentation.
 #
 # When adding a new wait event, make sure it is placed in the appropriate
index b8b576a4de3b7c031442f7e7076e48d3060cfe9f..c11d1c3b778ca4714adc4984ac5383ada6bb7701 100644 (file)
@@ -75,6 +75,7 @@ uninstall:
 
 clean:
        rm -f utils/fmgroids.h utils/fmgrprotos.h utils/errcodes.h utils/header-stamp
+       rm -f utils/pgstat_wait_event.c utils/wait_event_funcs_data.c
        rm -f storage/lwlocknames.h utils/probes.h utils/wait_event_types.h
        rm -f nodes/nodetags.h nodes/header-stamp
        $(MAKE) -C catalog clean
index c1b4c662139b16359e9650994e14c325b5eb71a2..e4ba4ce8dc45a5a53a1d9b9b208855c0ee7fd872 100644 (file)
@@ -3,4 +3,6 @@
 /probes.h
 /errcodes.h
 /header-stamp
+/pgstat_wait_event.c
+/wait_event_funcs_data.c
 /wait_event_types.h
index 8d0cd4565369b61c325785f0cafde11da3e6fd74..4a78139873e07355c7edcbe03fb8d555eb812197 100644 (file)
@@ -72,8 +72,6 @@ generated_backend_headers += fmgrtab_target[1]
 
 # autoconf generates the file there, ensure we get a conflict
 generated_sources_ac += {
-  'src/backend/utils': fmgrtab_output + ['errcodes.h', 'probes.h', 'fmgr-stamp'],
+  'src/backend/utils': fmgrtab_output + ['errcodes.h', 'wait_event_types.h', 'probes.h', 'fmgr-stamp'],
   'src/include/utils': ['header-stamp'],
 }
-
-generated_sources_ac += {'src/backend/utils/activity': ['wait_event_types.h']}