]> 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:02:59 +0000 (08:02 +0900)
committerMichael Paquier <michael@paquier.xyz>
Sun, 1 Feb 2026 23:02:59 +0000 (08:02 +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 7344c8c7f5c65b5d417cbabd564a791a52ac121a..c0be9410383208c85e91d1f977e45f7fba2cd6d4 100644 (file)
@@ -114,9 +114,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
@@ -141,18 +138,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 140fbba5c222a250a35198320253d625e08d69d2..4eba6f66e7449fab6222ad88b4d87e15b4f6ec81 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 9c2443e1ecd377e9baf9ed400bcbf75d22130b0f..b90f47e52b47df878df550565ea827315b2597c1 100644 (file)
@@ -36,17 +36,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 d8e56b49c247daacd468557b198cefdab012031f..04f27d11fbfb99c2395a8146ecf0937fa40060f3 100644 (file)
@@ -30,7 +30,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 d9b8f34a3559dc64e0ca3c694ebabc32b5bd890c..115ea9259a69d48e16a35cd42cd01722a48b6d42 100644 (file)
@@ -503,4 +503,4 @@ pgstat_get_wait_event(uint32 wait_event_info)
        return event_name;
 }
 
-#include "pgstat_wait_event.c"
+#include "utils/pgstat_wait_event.c"
index ffbb57a80780f61db049933069612ad77ed8f5b8..15486ce88dcfc2f7f45c3eba42c792a2a3b4c415 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 1068272edb07845b5abdbd0a1ec3da1ddf451f12..b9c1e6900ec1b271a433cb17e2f33cb350df7ab1 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 3f94543f3270bc4deb2e1d138080a8d3c2cc6247..62e222ceb20ec54351b75534877a2b47e7bc7d06 100644 (file)
@@ -73,6 +73,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 78c6b9b0a232a0f08301a37c433144242bb330c9..c7d2597db5c1b2a849e2c7daea75e1ca36f1740c 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']}