Subject: Put genbki.pl output into src/include/catalog/ directly

From: Peter Eisentraut <[email-masked]>
Date: Thu, 8 Feb 2024 08:58:53 +0100

With the makefile rules, the output of genbki.pl was written to
src/backend/catalog/, and then the header files were linked to
src/include/catalog/.

This patch changes it so that the output files are written directly to
src/include/catalog/.  This makes the logic simpler, and it also makes
the behavior consistent with the meson build system.  For example, a 
file like schemapg.h is now mentioned only in

src/include/catalog/{meson.build,Makefile,.gitignore}

where before it was mentioned in (checks ...)

src/backend/catalog/.gitignore
src/backend/catalog/Makefile
src/include/Makefile
src/include/catalog/.gitignore
src/include/catalog/meson.build

Also, the list of catalog files is now kept in parallel in
src/include/catalog/{meson.build,Makefile}, while before the makefiles
had it in src/backend/catalog/Makefile.

I think keeping the two build systems aligned this way will be useful 
for longer-term maintenance.

(There are other generated header files that are linked in a similar way 
and could perhaps be simplified.  But they don't all work the same way. 
Some of the scripts also generate .c files, for example, so they need to 
put some stuff under src/backend/.  So I restricted this patch to 
src/{backend,include}/catalog/, especially because it would be good to 
keep the catalog lists aligned.)

From e9f3bfeeff47d96c2557836e7c964adba2d9edb5 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <[email-masked]>
Date: Thu, 8 Feb 2024 08:31:21 +0100
Subject: [PATCH] Put genbki.pl output into src/include/catalog/ directly

With the makefile rules, the output of genbki.pl was written to
src/backend/catalog/, and then the header files were linked to
src/include/catalog/.

This changes it so that the output files are written directly to
src/include/catalog/.  This makes the logic simpler, and it also makes
the behavior consistent with the meson build system.  Also, the list
of catalog files is now kept in parallel in
src/include/catalog/{meson.build,Makefile}, while before the makefiles
had it in src/backend/catalog/Makefile.
---
 src/backend/Makefile               |   2 +-
 src/backend/catalog/.gitignore     |   8 --
 src/backend/catalog/Makefile       | 140 +-------------------------
 src/include/Makefile               |   7 +-
 src/include/catalog/.gitignore     |   4 +-
 src/include/catalog/Makefile       | 152 +++++++++++++++++++++++++++++
 src/include/catalog/meson.build    |   3 +-
 src/tools/pginclude/cpluspluscheck |   2 -
 src/tools/pginclude/headerscheck   |   2 -
 9 files changed, 163 insertions(+), 157 deletions(-)
 delete mode 100644 src/backend/catalog/.gitignore

diff --git a/src/backend/Makefile b/src/backend/Makefile
index 7d2ea7d54a6..6b3c432c545 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -138,7 +138,7 @@ utils/activity/wait_event_types.h: utils/activity/generate-wait_event_types.pl u
 
 # run this unconditionally to avoid needing to know its dependencies here:
 submake-catalog-headers:
-	$(MAKE) -C catalog generated-header-symlinks
+	$(MAKE) -C ../include/catalog generated-headers
 
 # run this unconditionally to avoid needing to know its dependencies here:
 submake-nodes-headers:
diff --git a/src/backend/catalog/.gitignore b/src/backend/catalog/.gitignore
deleted file mode 100644
index b580f734c71..00000000000
--- a/src/backend/catalog/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/postgres.bki
-/schemapg.h
-/syscache_ids.h
-/syscache_info.h
-/system_fk_info.h
-/system_constraints.sql
-/pg_*_d.h
-/bki-stamp
diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile
index 196ecafc909..1589a75fd53 100644
--- a/src/backend/catalog/Makefile
+++ b/src/backend/catalog/Makefile
@@ -50,141 +50,8 @@ OBJS = \
 
 include $(top_srcdir)/src/backend/common.mk
 
-# Note: the order of this list determines the order in which the catalog
-# header files are assembled into postgres.bki.  BKI_BOOTSTRAP catalogs
-# must appear first, and pg_statistic before pg_statistic_ext_data, and
-# there are reputedly other, undocumented ordering dependencies.
-CATALOG_HEADERS := \
-	pg_proc.h \
-	pg_type.h \
-	pg_attribute.h \
-	pg_class.h \
-	pg_attrdef.h \
-	pg_constraint.h \
-	pg_inherits.h \
-	pg_index.h \
-	pg_operator.h \
-	pg_opfamily.h \
-	pg_opclass.h \
-	pg_am.h \
-	pg_amop.h \
-	pg_amproc.h \
-	pg_language.h \
-	pg_largeobject_metadata.h \
-	pg_largeobject.h \
-	pg_aggregate.h \
-	pg_statistic.h \
-	pg_statistic_ext.h \
-	pg_statistic_ext_data.h \
-	pg_rewrite.h \
-	pg_trigger.h \
-	pg_event_trigger.h \
-	pg_description.h \
-	pg_cast.h \
-	pg_enum.h \
-	pg_namespace.h \
-	pg_conversion.h \
-	pg_depend.h \
-	pg_database.h \
-	pg_db_role_setting.h \
-	pg_tablespace.h \
-	pg_authid.h \
-	pg_auth_members.h \
-	pg_shdepend.h \
-	pg_shdescription.h \
-	pg_ts_config.h \
-	pg_ts_config_map.h \
-	pg_ts_dict.h \
-	pg_ts_parser.h \
-	pg_ts_template.h \
-	pg_extension.h \
-	pg_foreign_data_wrapper.h \
-	pg_foreign_server.h \
-	pg_user_mapping.h \
-	pg_foreign_table.h \
-	pg_policy.h \
-	pg_replication_origin.h \
-	pg_default_acl.h \
-	pg_init_privs.h \
-	pg_seclabel.h \
-	pg_shseclabel.h \
-	pg_collation.h \
-	pg_parameter_acl.h \
-	pg_partitioned_table.h \
-	pg_range.h \
-	pg_transform.h \
-	pg_sequence.h \
-	pg_publication.h \
-	pg_publication_namespace.h \
-	pg_publication_rel.h \
-	pg_subscription.h \
-	pg_subscription_rel.h
-
-GENERATED_HEADERS := $(CATALOG_HEADERS:%.h=%_d.h) schemapg.h syscache_ids.h syscache_info.h system_fk_info.h
-
-POSTGRES_BKI_SRCS := $(addprefix $(top_srcdir)/src/include/catalog/, $(CATALOG_HEADERS))
-
-# The .dat files we need can just be listed alphabetically.
-POSTGRES_BKI_DATA = $(addprefix $(top_srcdir)/src/include/catalog/,\
-	pg_aggregate.dat \
-	pg_am.dat \
-	pg_amop.dat \
-	pg_amproc.dat \
-	pg_authid.dat \
-	pg_cast.dat \
-	pg_class.dat \
-	pg_collation.dat \
-	pg_conversion.dat \
-	pg_database.dat \
-	pg_language.dat \
-	pg_namespace.dat \
-	pg_opclass.dat \
-	pg_operator.dat \
-	pg_opfamily.dat \
-	pg_proc.dat \
-	pg_range.dat \
-	pg_tablespace.dat \
-	pg_ts_config.dat \
-	pg_ts_config_map.dat \
-	pg_ts_dict.dat \
-	pg_ts_parser.dat \
-	pg_ts_template.dat \
-	pg_type.dat \
-	)
-
-all: generated-header-symlinks
-
-.PHONY: generated-header-symlinks
-
-generated-header-symlinks: $(top_builddir)/src/include/catalog/header-stamp
-
-# bki-stamp records the last time we ran genbki.pl.  We don't rely on
-# the timestamps of the individual output files, because the Perl script
-# won't update them if they didn't change (to avoid unnecessary recompiles).
-# Technically, this should depend on Makefile.global which supplies
-# $(MAJORVERSION); but then genbki.pl would need to be re-run after every
-# configure run, even in distribution tarballs.  So depending on configure.ac
-# instead is cheating a bit, but it will achieve the goal of updating the
-# version number when it changes.
-bki-stamp: genbki.pl Catalog.pm $(POSTGRES_BKI_SRCS) $(POSTGRES_BKI_DATA) $(top_srcdir)/configure.ac $(top_srcdir)/src/include/access/transam.h
-	$(PERL) $< --include-path=$(top_srcdir)/src/include/ \
-		--set-version=$(MAJORVERSION) $(POSTGRES_BKI_SRCS)
-	touch $@
-
-# The generated headers must all be symlinked into src/include/.
-# We use header-stamp to record that we've done this because the symlinks
-# themselves may appear older than bki-stamp.
-$(top_builddir)/src/include/catalog/header-stamp: bki-stamp
-	cd '$(dir $@)' && for file in $(GENERATED_HEADERS); do \
-	  rm -f $$file && $(LN_S) "../../../$(subdir)/$$file" . ; \
-	done
-	touch $@
-
-# Note: installation of generated headers is handled elsewhere
 .PHONY: install-data
-install-data: bki-stamp installdirs
-	$(INSTALL_DATA) postgres.bki '$(DESTDIR)$(datadir)/postgres.bki'
-	$(INSTALL_DATA) system_constraints.sql '$(DESTDIR)$(datadir)/system_constraints.sql'
+install-data: installdirs
 	$(INSTALL_DATA) $(srcdir)/system_functions.sql '$(DESTDIR)$(datadir)/system_functions.sql'
 	$(INSTALL_DATA) $(srcdir)/system_views.sql '$(DESTDIR)$(datadir)/system_views.sql'
 	$(INSTALL_DATA) $(srcdir)/information_schema.sql '$(DESTDIR)$(datadir)/information_schema.sql'
@@ -195,7 +62,4 @@ installdirs:
 
 .PHONY: uninstall-data
 uninstall-data:
-	rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_constraints.sql system_functions.sql system_views.sql information_schema.sql sql_features.txt)
-
-clean:
-	rm -f bki-stamp postgres.bki system_constraints.sql $(GENERATED_HEADERS)
+	rm -f $(addprefix '$(DESTDIR)$(datadir)'/, system_functions.sql system_views.sql information_schema.sql sql_features.txt)
diff --git a/src/include/Makefile b/src/include/Makefile
index 584d0300d98..b8b576a4de3 100644
--- a/src/include/Makefile
+++ b/src/include/Makefile
@@ -54,10 +54,11 @@ install: all installdirs
 	  $(INSTALL_DATA) $(srcdir)/$$dir/*.h '$(DESTDIR)$(includedir_server)'/$$dir || exit; \
 	done
 ifeq ($(vpath_build),yes)
-	for file in catalog/schemapg.h catalog/syscache_ids.h catalog/system_fk_info.h catalog/pg_*_d.h storage/lwlocknames.h utils/probes.h utils/wait_event_types.h; do \
+	for file in storage/lwlocknames.h utils/probes.h utils/wait_event_types.h; do \
 	  $(INSTALL_DATA) $$file '$(DESTDIR)$(includedir_server)'/$$file || exit; \
 	done
 endif
+	$(MAKE) -C catalog install
 
 installdirs:
 	$(MKDIR_P) '$(DESTDIR)$(includedir)/libpq' '$(DESTDIR)$(includedir_internal)/libpq'
@@ -69,14 +70,14 @@ uninstall:
 	rm -f $(addprefix '$(DESTDIR)$(includedir_internal)'/, c.h port.h postgres_fe.h libpq/pqcomm.h libpq/protocol.h)
 # heuristic...
 	rm -rf $(addprefix '$(DESTDIR)$(includedir_server)'/, $(SUBDIRS) *.h)
+	$(MAKE) -C catalog uninstall

 clean:
 	rm -f utils/fmgroids.h utils/fmgrprotos.h utils/errcodes.h utils/header-stamp
 	rm -f storage/lwlocknames.h utils/probes.h utils/wait_event_types.h
-	rm -f catalog/schemapg.h catalog/syscache_ids.h catalog/syscache_info.h catalog/system_fk_info.h
-	rm -f catalog/pg_*_d.h catalog/header-stamp
 	rm -f nodes/nodetags.h nodes/header-stamp
+	$(MAKE) -C catalog clean
 
 distclean: clean
 	rm -f pg_config.h pg_config_ext.h pg_config_os.h stamp-h stamp-ext-h
diff --git a/src/include/catalog/.gitignore b/src/include/catalog/.gitignore
index 983574f2c4d..b580f734c71 100644
--- a/src/include/catalog/.gitignore
+++ b/src/include/catalog/.gitignore
@@ -1,6 +1,8 @@
+/postgres.bki
 /schemapg.h
 /syscache_ids.h
 /syscache_info.h
 /system_fk_info.h
+/system_constraints.sql
 /pg_*_d.h
-/header-stamp
+/bki-stamp
diff --git a/src/include/catalog/Makefile b/src/include/catalog/Makefile
index c2b3cf238db..167f91a6e3f 100644
--- a/src/include/catalog/Makefile
+++ b/src/include/catalog/Makefile
@@ -13,6 +13,158 @@ subdir = src/include/catalog
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
+# Note: the order of this list determines the order in which the catalog
+# header files are assembled into postgres.bki.  BKI_BOOTSTRAP catalogs
+# must appear first, and pg_statistic before pg_statistic_ext_data, and
+# there are reputedly other, undocumented ordering dependencies.
+CATALOG_HEADERS := \
+	pg_proc.h \
+	pg_type.h \
+	pg_attribute.h \
+	pg_class.h \
+	pg_attrdef.h \
+	pg_constraint.h \
+	pg_inherits.h \
+	pg_index.h \
+	pg_operator.h \
+	pg_opfamily.h \
+	pg_opclass.h \
+	pg_am.h \
+	pg_amop.h \
+	pg_amproc.h \
+	pg_language.h \
+	pg_largeobject_metadata.h \
+	pg_largeobject.h \
+	pg_aggregate.h \
+	pg_statistic.h \
+	pg_statistic_ext.h \
+	pg_statistic_ext_data.h \
+	pg_rewrite.h \
+	pg_trigger.h \
+	pg_event_trigger.h \
+	pg_description.h \
+	pg_cast.h \
+	pg_enum.h \
+	pg_namespace.h \
+	pg_conversion.h \
+	pg_depend.h \
+	pg_database.h \
+	pg_db_role_setting.h \
+	pg_tablespace.h \
+	pg_authid.h \
+	pg_auth_members.h \
+	pg_shdepend.h \
+	pg_shdescription.h \
+	pg_ts_config.h \
+	pg_ts_config_map.h \
+	pg_ts_dict.h \
+	pg_ts_parser.h \
+	pg_ts_template.h \
+	pg_extension.h \
+	pg_foreign_data_wrapper.h \
+	pg_foreign_server.h \
+	pg_user_mapping.h \
+	pg_foreign_table.h \
+	pg_policy.h \
+	pg_replication_origin.h \
+	pg_default_acl.h \
+	pg_init_privs.h \
+	pg_seclabel.h \
+	pg_shseclabel.h \
+	pg_collation.h \
+	pg_parameter_acl.h \
+	pg_partitioned_table.h \
+	pg_range.h \
+	pg_transform.h \
+	pg_sequence.h \
+	pg_publication.h \
+	pg_publication_namespace.h \
+	pg_publication_rel.h \
+	pg_subscription.h \
+	pg_subscription_rel.h
+
+GENERATED_HEADERS := $(CATALOG_HEADERS:%.h=%_d.h)
+
+POSTGRES_BKI_SRCS := $(addprefix $(top_srcdir)/src/include/catalog/, $(CATALOG_HEADERS))
+
+# The .dat files we need can just be listed alphabetically.
+POSTGRES_BKI_DATA = \
+	pg_aggregate.dat \
+	pg_am.dat \
+	pg_amop.dat \
+	pg_amproc.dat \
+	pg_authid.dat \
+	pg_cast.dat \
+	pg_class.dat \
+	pg_collation.dat \
+	pg_conversion.dat \
+	pg_database.dat \
+	pg_language.dat \
+	pg_namespace.dat \
+	pg_opclass.dat \
+	pg_operator.dat \
+	pg_opfamily.dat \
+	pg_proc.dat \
+	pg_range.dat \
+	pg_tablespace.dat \
+	pg_ts_config.dat \
+	pg_ts_config_map.dat \
+	pg_ts_dict.dat \
+	pg_ts_parser.dat \
+	pg_ts_template.dat \
+	pg_type.dat
+
+GENBKI_OUTPUT_FILES = \
+	$(GENERATED_HEADERS) \
+	postgres.bki \
+	system_constraints.sql \
+	schemapg.h \
+	syscache_ids.h \
+	syscache_info.h \
+	system_fk_info.h
+
+all: generated-headers
+
+.PHONY: generated-headers
+
+generated-headers: bki-stamp
+
+# bki-stamp records the last time we ran genbki.pl.  We don't rely on
+# the timestamps of the individual output files, because the Perl script
+# won't update them if they didn't change (to avoid unnecessary recompiles).
+# Technically, this should depend on Makefile.global which supplies
+# $(MAJORVERSION); but then genbki.pl would need to be re-run after every
+# configure run, even in distribution tarballs.  So depending on configure.ac
+# instead is cheating a bit, but it will achieve the goal of updating the
+# version number when it changes.
+bki-stamp: $(top_srcdir)/src/backend/catalog/genbki.pl $(top_srcdir)/src/backend/catalog/Catalog.pm $(POSTGRES_BKI_SRCS) $(POSTGRES_BKI_DATA) $(top_srcdir)/configure.ac $(top_srcdir)/src/include/access/transam.h
+	$(PERL) $< --include-path=$(top_srcdir)/src/include/ \
+		--set-version=$(MAJORVERSION) $(POSTGRES_BKI_SRCS)
+	touch $@
+
+install: all installdirs
+	$(INSTALL_DATA) postgres.bki '$(DESTDIR)$(datadir)/postgres.bki'
+	$(INSTALL_DATA) system_constraints.sql '$(DESTDIR)$(datadir)/system_constraints.sql'
+# In non-vpath builds, src/include/Makefile already installs all headers.
+ifeq ($(vpath_build),yes)
+	$(INSTALL_DATA) schemapg.h '$(DESTDIR)$(includedir_server)'/catalog/schemapg.h
+	$(INSTALL_DATA) syscache_ids.h '$(DESTDIR)$(includedir_server)'/catalog/syscache_ids.h
+	$(INSTALL_DATA) system_fk_info.h '$(DESTDIR)$(includedir_server)'/catalog/system_fk_info.h
+	for file in $(GENERATED_HEADERS); do \
+	  $(INSTALL_DATA) $$file '$(DESTDIR)$(includedir_server)'/catalog/$$file || exit; \
+	done
+endif
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(datadir)' '$(DESTDIR)$(includedir_server)'
+
+uninstall:
+	rm -f $(addprefix '$(DESTDIR)$(datadir)'/, postgres.bki system_constraints.sql)
+	rm -f $(addprefix '$(DESTDIR)$(includedir_server)'/catalog/, schemapg.h syscache_ids.h system_fk_info.h $(GENERATED_HEADERS))
+
+clean:
+	rm -f bki-stamp $(GENBKI_OUTPUT_FILES)
+
 # 'make reformat-dat-files' is a convenience target for rewriting the
 # catalog data files in our standard format.  This includes collapsing
 # out any entries that are redundant with a BKI_DEFAULT annotation.
diff --git a/src/include/catalog/meson.build b/src/include/catalog/meson.build
index 6b3c56c20e8..f70d1daba52 100644
--- a/src/include/catalog/meson.build
+++ b/src/include/catalog/meson.build
@@ -145,8 +145,7 @@ generated_catalog_headers = custom_target('generated_catalog_headers',
 generated_headers += generated_catalog_headers.to_list()
 
 # autoconf generates the file there, ensure we get a conflict
-generated_sources_ac += {'src/backend/catalog': output_files + ['bki-stamp']}
-generated_sources_ac += {'src/include/catalog': ['header-stamp']}
+generated_sources_ac += {'src/include/catalog': output_files + ['bki-stamp']}
 
 # 'reformat-dat-files' is a convenience target for rewriting the
 # catalog data files in our standard format.  This includes collapsing
diff --git a/src/tools/pginclude/cpluspluscheck b/src/tools/pginclude/cpluspluscheck
index 7edfc44b49a..404c6584b16 100755
--- a/src/tools/pginclude/cpluspluscheck
+++ b/src/tools/pginclude/cpluspluscheck
@@ -119,8 +119,6 @@ do
 	test "$f" = src/include/common/unicode_nonspacing_table.h && continue
 	test "$f" = src/include/common/unicode_east_asian_fw_table.h && continue
 
-	test "$f" = src/backend/catalog/syscache_ids.h && continue
-	test "$f" = src/backend/catalog/syscache_info.h && continue
 	test "$f" = src/include/catalog/syscache_ids.h && continue
 	test "$f" = src/include/catalog/syscache_info.h && continue
 
diff --git a/src/tools/pginclude/headerscheck b/src/tools/pginclude/headerscheck
index 84b892b5c51..a5299bf459f 100755
--- a/src/tools/pginclude/headerscheck
+++ b/src/tools/pginclude/headerscheck
@@ -114,8 +114,6 @@ do
 	test "$f" = src/include/common/unicode_nonspacing_table.h && continue
 	test "$f" = src/include/common/unicode_east_asian_fw_table.h && continue
 
-	test "$f" = src/backend/catalog/syscache_ids.h && continue
-	test "$f" = src/backend/catalog/syscache_info.h && continue
 	test "$f" = src/include/catalog/syscache_ids.h && continue
 	test "$f" = src/include/catalog/syscache_info.h && continue

base-commit: 25799850867292efecf34da73db4ea1ad1aad573
-- 
2.43.0

---

From: Tom Lane <[email-masked]>
Date: Thu, 08 Feb 2024 11:38:02 -0500

> This patch changes it so that the output files are written directly to

Didn't read the patch, but +1 for concept.

			regards, tom lane

---

From: Andreas Karlsson <[email-masked]>
Date: Wed, 13 Mar 2024 12:41:56 +0100

> for longer-term maintenance.

Agreed, so started reviewing the patch. Attached is a rebased version of 
the patch to solve a conflict.

Andreas

From 2069c6d6e2ef2bc37c5af0df12c558ead8a99b15 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <[email-masked]>
Date: Thu, 8 Feb 2024 08:31:21 +0100
Subject: [PATCH] Put genbki.pl output into src/include/catalog/ directly

 src/backend/catalog/Makefile     | 140 +---------------------------
 src/include/catalog/Makefile     | 152 +++++++++++++++++++++++++++++++
 8 files changed, 163 insertions(+), 155 deletions(-)

diff --git a/src/backend/Makefile b/src/backend/Makefile
index d66e2a4b9f..3d7be09529 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -118,7 +118,7 @@ utils/activity/wait_event_types.h: utils/activity/generate-wait_event_types.pl u

 # run this unconditionally to avoid needing to know its dependencies here:
 submake-nodes-headers:
diff --git a/src/backend/catalog/.gitignore b/src/backend/catalog/.gitignore
deleted file mode 100644
index b580f734c7..0000000000
--- a/src/backend/catalog/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-/postgres.bki
-/schemapg.h
-/syscache_ids.h
-/syscache_info.h
-/system_fk_info.h
-/system_constraints.sql
-/pg_*_d.h
-/bki-stamp
diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile
index 196ecafc90..1589a75fd5 100644
--- a/src/backend/catalog/Makefile
+++ b/src/backend/catalog/Makefile
@@ -50,141 +50,8 @@ OBJS = \

 
 .PHONY: uninstall-data
 uninstall-data:
index 584d0300d9..b8b576a4de 100644
 
 installdirs:

 clean:
 
 distclean: clean
index 983574f2c4..b580f734c7 100644
index c2b3cf238d..167f91a6e3 100644
 
index 6b3c56c20e..f70d1daba5 100644

index 5c12ab99b8..a59be39307 100755
@@ -142,8 +142,6 @@ do

-- 
2.43.0

---

From: Andreas Karlsson <[email-masked]>
Date: Thu, 14 Mar 2024 02:33:35 +0100

> the patch to solve a conflict.

I have reviewed the patch now and would say it looks good. I like how we 
remove the symlinks plus make things more similar to the meson build so 
I think we should merge this.

I tried building, running tests, running make clean, running make 
install and tried building with meson (plus checking that meson really 
checks for the generated files and actually refuse to build). Everything 
worked as expected.

The code changes look clean and mostly consist of moving code. I 
personally think this is ready for committer.

Andreas

---

From: Peter Eisentraut <[email-masked]>
Date: Thu, 14 Mar 2024 07:27:40 +0100

On 14.03.24 02:33, Andreas Karlsson wrote:
>> Agreed, so started reviewing the patch. Attached is a rebased version 
>> of the patch to solve a conflict.
> 

Committed, thanks.