From 3b6753a236288d539ffb6bb391e80a9b8ddb18f0 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Mon, 16 Mar 2026 18:15:59 +0300
Subject: [PATCH v11 5/7] meson: Add LLVM bitcode emissions for contrib
 libraries

The libraries which the bitcode files will be generated in are selected
manually.

Author: Andres Freund <andres@anarazel.de>
Author: Nazir Bilal Yavuz <byavuz81@gmail.com>
Author: Diego Fronza <diego.fronza@percona.com>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Diego Fronza <diego.fronza@percona.com>
Reviewed-by: Zsolt Parragi <zsolt.parragi@percona.com>
Discussion: https://postgr.es/m/206b001d-1884-4081-bd02-bed5c92f02ba%40eisentraut.org
---
 contrib/bloom/meson.build             |  5 +++++
 contrib/bool_plperl/meson.build       |  9 +++++++++
 contrib/btree_gin/meson.build         |  5 +++++
 contrib/btree_gist/meson.build        |  5 +++++
 contrib/citext/meson.build            |  5 +++++
 contrib/cube/meson.build              | 13 +++++++++++++
 contrib/dict_int/meson.build          |  5 +++++
 contrib/dict_xsyn/meson.build         |  5 +++++
 contrib/earthdistance/meson.build     |  6 ++++++
 contrib/fuzzystrmatch/meson.build     |  9 +++++++++
 contrib/hstore/meson.build            |  7 +++++++
 contrib/hstore_plperl/meson.build     | 10 ++++++++++
 contrib/hstore_plpython/meson.build   | 11 +++++++++++
 contrib/intarray/meson.build          |  5 +++++
 contrib/isn/meson.build               |  5 +++++
 contrib/jsonb_plperl/meson.build      |  8 ++++++++
 contrib/jsonb_plpython/meson.build    | 10 ++++++++++
 contrib/lo/meson.build                |  5 +++++
 contrib/ltree/meson.build             | 10 ++++++++++
 contrib/ltree_plpython/meson.build    | 11 +++++++++++
 contrib/pg_buffercache/meson.build    |  5 +++++
 contrib/pg_freespacemap/meson.build   |  5 +++++
 contrib/pg_logicalinspect/meson.build |  5 +++++
 contrib/pg_surgery/meson.build        |  4 ++++
 contrib/pg_trgm/meson.build           |  5 +++++
 contrib/pgcrypto/meson.build          |  4 ++++
 contrib/seg/meson.build               | 12 ++++++++++++
 contrib/spi/meson.build               | 20 ++++++++++++++++++++
 contrib/sslinfo/meson.build           |  5 +++++
 contrib/tablefunc/meson.build         |  5 +++++
 contrib/tcn/meson.build               |  5 +++++
 contrib/tsm_system_rows/meson.build   |  5 +++++
 contrib/tsm_system_time/meson.build   |  5 +++++
 contrib/unaccent/meson.build          |  5 +++++
 contrib/uuid-ossp/meson.build         |  5 +++++
 contrib/xml2/meson.build              |  5 +++++
 meson.build                           |  1 +
 src/interfaces/libpq/meson.build      |  3 +++
 src/pl/plperl/meson.build             |  1 +
 src/pl/plpython/meson.build           |  1 +
 40 files changed, 255 insertions(+)

diff --git a/contrib/bloom/meson.build b/contrib/bloom/meson.build
index fa4f4ea796b..780bb494d54 100644
--- a/contrib/bloom/meson.build
+++ b/contrib/bloom/meson.build
@@ -28,6 +28,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': bloom,
+  'srcfiles': bloom_sources,
+}
+
 tests += {
   'name': 'bloom',
   'sd': meson.current_source_dir(),
diff --git a/contrib/bool_plperl/meson.build b/contrib/bool_plperl/meson.build
index d19abf0dd6d..cd1ab595ee9 100644
--- a/contrib/bool_plperl/meson.build
+++ b/contrib/bool_plperl/meson.build
@@ -37,6 +37,15 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': bool_plperl,
+  'srcfiles': bool_plperl_sources,
+  'additional_flags': [
+    '-I@0@'.format(plperl_dir),
+    perl_ccflags
+  ]
+}
+
 tests += {
   'name': 'bool_plperl',
   'sd': meson.current_source_dir(),
diff --git a/contrib/btree_gin/meson.build b/contrib/btree_gin/meson.build
index 039cfc52c86..4406f9f998d 100644
--- a/contrib/btree_gin/meson.build
+++ b/contrib/btree_gin/meson.build
@@ -26,6 +26,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': btree_gin,
+  'srcfiles': btree_gin_sources,
+}
+
 tests += {
   'name': 'btree_gin',
   'sd': meson.current_source_dir(),
diff --git a/contrib/btree_gist/meson.build b/contrib/btree_gist/meson.build
index 2b1a5463289..9fae0eb7289 100644
--- a/contrib/btree_gist/meson.build
+++ b/contrib/btree_gist/meson.build
@@ -55,6 +55,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': btree_gist,
+  'srcfiles': btree_gist_sources,
+}
+
 tests += {
   'name': 'btree_gist',
   'sd': meson.current_source_dir(),
diff --git a/contrib/citext/meson.build b/contrib/citext/meson.build
index 1cc49fc999f..fc29fc843f5 100644
--- a/contrib/citext/meson.build
+++ b/contrib/citext/meson.build
@@ -30,6 +30,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': citext,
+  'srcfiles': citext_sources,
+}
+
 tests += {
   'name': 'citext',
   'sd': meson.current_source_dir(),
diff --git a/contrib/cube/meson.build b/contrib/cube/meson.build
index 6526091c688..694f6335c3c 100644
--- a/contrib/cube/meson.build
+++ b/contrib/cube/meson.build
@@ -3,6 +3,7 @@
 cube_sources = files(
   'cube.c',
 )
+bc_cube_sources = cube_sources
 
 cube_scan = custom_target('cubescan',
   input: 'cubescan.l',
@@ -11,6 +12,7 @@ cube_scan = custom_target('cubescan',
 )
 generated_sources += cube_scan
 cube_sources += cube_scan
+bc_cube_gen_sources = [{'srcfiles': [cube_scan]}]
 
 cube_parse = custom_target('cubeparse',
   input: 'cubeparse.y',
@@ -18,6 +20,7 @@ cube_parse = custom_target('cubeparse',
 )
 generated_sources += cube_parse.to_list()
 cube_sources += cube_parse
+bc_cube_gen_sources += {'srcfiles': [cube_parse[0]]}
 
 if host_system == 'windows'
   cube_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
@@ -48,6 +51,16 @@ install_headers(
   install_dir: dir_include_extension / 'cube',
 )
 
+cube_dir = meson.current_source_dir()
+bitcode_modules += {
+  'target': cube,
+  'srcfiles': bc_cube_sources,
+  'gen_sources': bc_cube_gen_sources,
+  'additional_flags': [
+    '-I@0@'.format(cube_dir),
+  ]
+}
+
 tests += {
   'name': 'cube',
   'sd': meson.current_source_dir(),
diff --git a/contrib/dict_int/meson.build b/contrib/dict_int/meson.build
index 938647f45fd..98203012edc 100644
--- a/contrib/dict_int/meson.build
+++ b/contrib/dict_int/meson.build
@@ -22,6 +22,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': dict_int,
+  'srcfiles': dict_int_sources,
+}
+
 tests += {
   'name': 'dict_int',
   'sd': meson.current_source_dir(),
diff --git a/contrib/dict_xsyn/meson.build b/contrib/dict_xsyn/meson.build
index 1485e9e9797..c908920152b 100644
--- a/contrib/dict_xsyn/meson.build
+++ b/contrib/dict_xsyn/meson.build
@@ -29,6 +29,11 @@ install_data(
   }
 )
 
+bitcode_modules += {
+  'target': dict_xsyn,
+  'srcfiles': dict_xsyn_sources,
+}
+
 tests += {
   'name': 'dict_xsyn',
   'sd': meson.current_source_dir(),
diff --git a/contrib/earthdistance/meson.build b/contrib/earthdistance/meson.build
index 41fb5065afa..de47c4a4f42 100644
--- a/contrib/earthdistance/meson.build
+++ b/contrib/earthdistance/meson.build
@@ -24,6 +24,12 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': earthdistance,
+  'srcfiles': earthdistance_sources,
+}
+
+
 tests += {
   'name': 'earthdistance',
   'sd': meson.current_source_dir(),
diff --git a/contrib/fuzzystrmatch/meson.build b/contrib/fuzzystrmatch/meson.build
index e21a4e2e62b..554ba4ebd76 100644
--- a/contrib/fuzzystrmatch/meson.build
+++ b/contrib/fuzzystrmatch/meson.build
@@ -5,6 +5,7 @@ fuzzystrmatch_sources = files(
   'dmetaphone.c',
   'fuzzystrmatch.c',
 )
+bc_fuzzystrmatch_sources = fuzzystrmatch_sources
 
 daitch_mokotoff_h = custom_target('daitch_mokotoff',
   input: 'daitch_mokotoff_header.pl',
@@ -35,6 +36,14 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': fuzzystrmatch,
+  'srcfiles': bc_fuzzystrmatch_sources,
+  'additional_flags': [
+    '-I@0@'.format(meson.current_build_dir())
+  ]
+}
+
 tests += {
   'name': 'fuzzystrmatch',
   'sd': meson.current_source_dir(),
diff --git a/contrib/hstore/meson.build b/contrib/hstore/meson.build
index 6175abc708e..cf21195f3b8 100644
--- a/contrib/hstore/meson.build
+++ b/contrib/hstore/meson.build
@@ -43,6 +43,13 @@ install_headers(
   install_dir: dir_include_extension / 'hstore',
 )
 
+# Files outside of the current directory include hstore as "hstore/hstore.h"
+hstore_dir_up = join_paths(meson.current_source_dir(), '..')
+bitcode_modules += {
+  'target': hstore,
+  'srcfiles': hstore_sources,
+}
+
 tests += {
   'name': 'hstore',
   'sd': meson.current_source_dir(),
diff --git a/contrib/hstore_plperl/meson.build b/contrib/hstore_plperl/meson.build
index 705dbe69a46..1c9d2f57f2a 100644
--- a/contrib/hstore_plperl/meson.build
+++ b/contrib/hstore_plperl/meson.build
@@ -37,6 +37,16 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': hstore_plperl,
+  'srcfiles': hstore_plperl_sources,
+  'additional_flags': [
+    '-I@0@'.format(hstore_dir_up),
+    '-I@0@'.format(plperl_dir),
+    perl_ccflags,
+  ]
+}
+
 tests += {
   'name': 'hstore_plperl',
   'sd': meson.current_source_dir(),
diff --git a/contrib/hstore_plpython/meson.build b/contrib/hstore_plpython/meson.build
index 555811b25b9..0878f2507ad 100644
--- a/contrib/hstore_plpython/meson.build
+++ b/contrib/hstore_plpython/meson.build
@@ -30,6 +30,17 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': hstore_plpython,
+  'srcfiles': hstore_plpython_sources,
+  'additional_flags': [
+    '-I@0@'.format(hstore_dir_up),
+    '-DPLPYTHON_LIBNAME="plpython3"',
+    '-I@0@'.format(python3_incdir),
+    '-I@0@'.format(plpython_dir),
+  ]
+}
+
 hstore_plpython_regress = [
   'hstore_plpython'
 ]
diff --git a/contrib/intarray/meson.build b/contrib/intarray/meson.build
index e49ff77f167..24ba3110371 100644
--- a/contrib/intarray/meson.build
+++ b/contrib/intarray/meson.build
@@ -33,6 +33,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': intarray,
+  'srcfiles': intarray_sources,
+}
+
 tests += {
   'name': 'intarray',
   'sd': meson.current_source_dir(),
diff --git a/contrib/isn/meson.build b/contrib/isn/meson.build
index cecd70043c8..ddfe24eaaab 100644
--- a/contrib/isn/meson.build
+++ b/contrib/isn/meson.build
@@ -30,6 +30,11 @@ install_headers(
   install_dir: dir_include_extension / 'isn',
 )
 
+bitcode_modules += {
+  'target': isn,
+  'srcfiles': isn_sources,
+}
+
 tests += {
   'name': 'isn',
   'sd': meson.current_source_dir(),
diff --git a/contrib/jsonb_plperl/meson.build b/contrib/jsonb_plperl/meson.build
index 8bfabee5455..8ce0b6bd0bb 100644
--- a/contrib/jsonb_plperl/meson.build
+++ b/contrib/jsonb_plperl/meson.build
@@ -37,6 +37,14 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': jsonb_plperl,
+  'srcfiles': jsonb_plperl_sources,
+  'additional_flags': [
+    '-I@0@'.format(plperl_dir),
+    perl_ccflags,
+  ]
+}
 
 tests += {
   'name': 'jsonb_plperl',
diff --git a/contrib/jsonb_plpython/meson.build b/contrib/jsonb_plpython/meson.build
index 71299707418..e3588527012 100644
--- a/contrib/jsonb_plpython/meson.build
+++ b/contrib/jsonb_plpython/meson.build
@@ -30,6 +30,16 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': jsonb_plpython,
+  'srcfiles': jsonb_plpython_sources,
+  'additional_flags': [
+    '-DPLPYTHON_LIBNAME="plpython3"',
+    '-I@0@'.format(python3_incdir),
+    '-I@0@'.format(plpython_dir),
+  ]
+}
+
 jsonb_plpython_regress = [
   'jsonb_plpython'
 ]
diff --git a/contrib/lo/meson.build b/contrib/lo/meson.build
index e43eb9b2d28..1e6fbed6695 100644
--- a/contrib/lo/meson.build
+++ b/contrib/lo/meson.build
@@ -24,6 +24,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': lo,
+  'srcfiles': lo_sources,
+}
+
 tests += {
   'name': 'lo',
   'sd': meson.current_source_dir(),
diff --git a/contrib/ltree/meson.build b/contrib/ltree/meson.build
index f78521bfe55..539e1ed32a3 100644
--- a/contrib/ltree/meson.build
+++ b/contrib/ltree/meson.build
@@ -41,6 +41,16 @@ install_headers(
   install_dir: dir_include_extension / 'ltree',
 )
 
+ltree_dir = meson.current_source_dir()
+ltree_dir_up = join_paths(ltree_dir, '..')
+bitcode_modules += {
+  'target': ltree,
+  'srcfiles': ltree_sources,
+  'additional_flags': [
+    '-I@0@'.format(ltree_dir)
+  ]
+}
+
 tests += {
   'name': 'ltree',
   'sd': meson.current_source_dir(),
diff --git a/contrib/ltree_plpython/meson.build b/contrib/ltree_plpython/meson.build
index b72ee5a780a..e5a96286305 100644
--- a/contrib/ltree_plpython/meson.build
+++ b/contrib/ltree_plpython/meson.build
@@ -30,6 +30,17 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': ltree_plpython,
+  'srcfiles': ltree_plpython_sources,
+  'additional_flags': [
+    '-I@0@'.format(ltree_dir_up),
+    '-DPLPYTHON_LIBNAME="plpython3"',
+    '-I@0@'.format(python3_incdir),
+    '-I@0@'.format(plpython_dir),
+  ]
+}
+
 ltree_plpython_regress = [
   'ltree_plpython'
 ]
diff --git a/contrib/pg_buffercache/meson.build b/contrib/pg_buffercache/meson.build
index e681205abb2..3435221e90d 100644
--- a/contrib/pg_buffercache/meson.build
+++ b/contrib/pg_buffercache/meson.build
@@ -29,6 +29,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': pg_buffercache,
+  'srcfiles': pg_buffercache_sources,
+}
+
 tests += {
   'name': 'pg_buffercache',
   'sd': meson.current_source_dir(),
diff --git a/contrib/pg_freespacemap/meson.build b/contrib/pg_freespacemap/meson.build
index 67b46c77ff3..673bd6ff2a4 100644
--- a/contrib/pg_freespacemap/meson.build
+++ b/contrib/pg_freespacemap/meson.build
@@ -25,6 +25,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': pg_freespacemap,
+  'srcfiles': pg_freespacemap_sources,
+}
+
 tests += {
   'name': 'pg_freespacemap',
   'sd': meson.current_source_dir(),
diff --git a/contrib/pg_logicalinspect/meson.build b/contrib/pg_logicalinspect/meson.build
index 3e284986e3b..7ce9b2cafc2 100644
--- a/contrib/pg_logicalinspect/meson.build
+++ b/contrib/pg_logicalinspect/meson.build
@@ -22,6 +22,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': pg_logicalinspect,
+  'srcfiles': pg_logicalinspect_sources,
+}
+
 tests += {
   'name': 'pg_logicalinspect',
   'sd': meson.current_source_dir(),
diff --git a/contrib/pg_surgery/meson.build b/contrib/pg_surgery/meson.build
index 88e16dcc1b2..cabba37ed66 100644
--- a/contrib/pg_surgery/meson.build
+++ b/contrib/pg_surgery/meson.build
@@ -22,6 +22,10 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': pg_surgery,
+  'srcfiles': pg_surgery_sources,
+}
 
 tests += {
   'name': 'pg_surgery',
diff --git a/contrib/pg_trgm/meson.build b/contrib/pg_trgm/meson.build
index 3ecf95ba862..31b79db7c57 100644
--- a/contrib/pg_trgm/meson.build
+++ b/contrib/pg_trgm/meson.build
@@ -32,6 +32,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': pg_trgm,
+  'srcfiles': pg_trgm_sources,
+}
+
 tests += {
   'name': 'pg_trgm',
   'sd': meson.current_source_dir(),
diff --git a/contrib/pgcrypto/meson.build b/contrib/pgcrypto/meson.build
index 4f255c8cb05..3fe3fa2bfdf 100644
--- a/contrib/pgcrypto/meson.build
+++ b/contrib/pgcrypto/meson.build
@@ -101,6 +101,10 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': pgcrypto,
+  'srcfiles': pgcrypto_sources,
+}
 
 tests += {
   'name': 'pgcrypto',
diff --git a/contrib/seg/meson.build b/contrib/seg/meson.build
index fa3de266bb5..f8f5f1db8ec 100644
--- a/contrib/seg/meson.build
+++ b/contrib/seg/meson.build
@@ -3,6 +3,7 @@
 seg_sources = files(
   'seg.c',
 )
+bc_seg_sources = seg_sources
 
 seg_scan = custom_target('segscan',
   input: 'segscan.l',
@@ -11,6 +12,7 @@ seg_scan = custom_target('segscan',
 )
 generated_sources += seg_scan
 seg_sources += seg_scan
+bc_seg_gen_sources = [{'srcfiles': [seg_scan]}]
 
 seg_parse = custom_target('segparse',
   input: 'segparse.y',
@@ -18,6 +20,7 @@ seg_parse = custom_target('segparse',
 )
 generated_sources += seg_parse.to_list()
 seg_sources += seg_parse
+bc_seg_gen_sources += {'srcfiles': [seg_parse[0]]}
 
 if host_system == 'windows'
   seg_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
@@ -47,6 +50,15 @@ install_headers(
   install_dir: dir_include_extension / 'seg',
 )
 
+bitcode_modules += {
+  'target': seg,
+  'srcfiles': bc_seg_sources,
+  'gen_sources': bc_seg_gen_sources,
+  'additional_flags': [
+    '-I@0@'.format(meson.current_source_dir()),
+  ]
+}
+
 tests += {
   'name': 'seg',
   'sd': meson.current_source_dir(),
diff --git a/contrib/spi/meson.build b/contrib/spi/meson.build
index 4a9a2bef0a5..e695ec6c487 100644
--- a/contrib/spi/meson.build
+++ b/contrib/spi/meson.build
@@ -24,6 +24,11 @@ install_data('autoinc.example',
   kwargs: contrib_doc_args,
 )
 
+bitcode_modules += {
+  'target': autoinc,
+  'srcfiles': autoinc_sources,
+}
+
 
 insert_username_sources = files(
   'insert_username.c',
@@ -51,6 +56,11 @@ install_data('insert_username.example',
   kwargs: contrib_doc_args,
 )
 
+bitcode_modules += {
+  'target': insert_username,
+  'srcfiles': insert_username_sources,
+}
+
 
 moddatetime_sources = files(
   'moddatetime.c',
@@ -78,6 +88,11 @@ install_data('moddatetime.example',
   kwargs: contrib_doc_args,
 )
 
+bitcode_modules += {
+  'target': moddatetime,
+  'srcfiles': moddatetime_sources,
+}
+
 
 # this is needed for the regression tests;
 # comment out if you want a quieter refint package for other uses
@@ -108,6 +123,11 @@ install_data('refint.example',
   kwargs: contrib_doc_args,
 )
 
+bitcode_modules += {
+  'target': refint,
+  'srcfiles': refint_sources,
+}
+
 tests += {
   'name': 'spi',
   'sd': meson.current_source_dir(),
diff --git a/contrib/sslinfo/meson.build b/contrib/sslinfo/meson.build
index 6e9cb96430a..a5445c13a2b 100644
--- a/contrib/sslinfo/meson.build
+++ b/contrib/sslinfo/meson.build
@@ -29,3 +29,8 @@ install_data(
   'sslinfo.control',
   kwargs: contrib_data_args,
 )
+
+bitcode_modules += {
+  'target': sslinfo,
+  'srcfiles': sslinfo_sources,
+}
diff --git a/contrib/tablefunc/meson.build b/contrib/tablefunc/meson.build
index 1bebb926229..c1e5335e0ae 100644
--- a/contrib/tablefunc/meson.build
+++ b/contrib/tablefunc/meson.build
@@ -22,6 +22,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': tablefunc,
+  'srcfiles': tablefunc_sources,
+}
+
 tests += {
   'name': 'tablefunc',
   'sd': meson.current_source_dir(),
diff --git a/contrib/tcn/meson.build b/contrib/tcn/meson.build
index f7a9b9a505f..049ffc3f135 100644
--- a/contrib/tcn/meson.build
+++ b/contrib/tcn/meson.build
@@ -22,6 +22,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': tcn,
+  'srcfiles': tcn_sources,
+}
+
 tests += {
   'name': 'tcn',
   'sd': meson.current_source_dir(),
diff --git a/contrib/tsm_system_rows/meson.build b/contrib/tsm_system_rows/meson.build
index 19f6f5f6bf5..5bac8299ec7 100644
--- a/contrib/tsm_system_rows/meson.build
+++ b/contrib/tsm_system_rows/meson.build
@@ -22,6 +22,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': tsm_system_rows,
+  'srcfiles': tsm_system_rows_sources,
+}
+
 tests += {
   'name': 'tsm_system_rows',
   'sd': meson.current_source_dir(),
diff --git a/contrib/tsm_system_time/meson.build b/contrib/tsm_system_time/meson.build
index c5404b266ab..02ae53bbb9f 100644
--- a/contrib/tsm_system_time/meson.build
+++ b/contrib/tsm_system_time/meson.build
@@ -22,6 +22,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': tsm_system_time,
+  'srcfiles': tsm_system_time_sources,
+}
+
 tests += {
   'name': 'tsm_system_time',
   'sd': meson.current_source_dir(),
diff --git a/contrib/unaccent/meson.build b/contrib/unaccent/meson.build
index 938d9522da3..20a04c1f4c0 100644
--- a/contrib/unaccent/meson.build
+++ b/contrib/unaccent/meson.build
@@ -28,6 +28,11 @@ install_data(
   install_dir: dir_data / 'tsearch_data'
 )
 
+bitcode_modules += {
+  'target': unaccent,
+  'srcfiles': unaccent_sources,
+}
+
 tests += {
   'name': 'unaccent',
   'sd': meson.current_source_dir(),
diff --git a/contrib/uuid-ossp/meson.build b/contrib/uuid-ossp/meson.build
index b074900dd16..1d806bdb164 100644
--- a/contrib/uuid-ossp/meson.build
+++ b/contrib/uuid-ossp/meson.build
@@ -29,6 +29,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': uuid_ossp,
+  'srcfiles': uuid_ossp_sources,
+}
+
 tests += {
   'name': 'uuid-ossp',
   'sd': meson.current_source_dir(),
diff --git a/contrib/xml2/meson.build b/contrib/xml2/meson.build
index faae5e5e428..6e81ea6ad72 100644
--- a/contrib/xml2/meson.build
+++ b/contrib/xml2/meson.build
@@ -32,6 +32,11 @@ install_data(
   kwargs: contrib_data_args,
 )
 
+bitcode_modules += {
+  'target': xml2,
+  'srcfiles': xml2_sources,
+}
+
 tests += {
   'name': 'xml2',
   'sd': meson.current_source_dir(),
diff --git a/meson.build b/meson.build
index 021e6096e40..15b73d57d93 100644
--- a/meson.build
+++ b/meson.build
@@ -1448,6 +1448,7 @@ if not pyopt.disabled()
       python3_header_check_args = ['/I' + python3_incdir]
     else
       python3_dep = python3_inst.dependency(embed: true, required: pyopt)
+      python3_incdir = python3_inst.get_variable('INCLUDEPY')
       python3_header_check_args = []
     endif
     # Remove this check after we depend on Meson >= 1.1.0
diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build
index b0ae72167a1..f0644294e6b 100644
--- a/src/interfaces/libpq/meson.build
+++ b/src/interfaces/libpq/meson.build
@@ -49,6 +49,9 @@ libpq_c_args = ['-DSO_MAJOR_VERSION=5']
 # The OAuth implementation differs depending on the type of library being built.
 libpq_so_c_args = ['-DUSE_DYNAMIC_OAUTH']
 
+# libpq-fe.h is needed to generate bitcode for some extensions
+libpq_dir = meson.current_source_dir()
+
 # Not using both_libraries() here as
 # 1) resource files should only be in the shared library
 # 2) we want the .pc file to include a dependency to {pgport,common}_static for
diff --git a/src/pl/plperl/meson.build b/src/pl/plperl/meson.build
index ff41812ca46..51f804804ba 100644
--- a/src/pl/plperl/meson.build
+++ b/src/pl/plperl/meson.build
@@ -37,6 +37,7 @@ foreach n : ['SPI', 'Util']
   plperl_sources += xs_c
 endforeach
 
+plperl_dir = meson.current_source_dir()
 plperl_inc = include_directories('.')
 
 if host_system == 'windows'
diff --git a/src/pl/plpython/meson.build b/src/pl/plpython/meson.build
index ef8aba56539..0e8ea5beda0 100644
--- a/src/pl/plpython/meson.build
+++ b/src/pl/plpython/meson.build
@@ -29,6 +29,7 @@ plpython_sources += custom_target('spiexceptions.h',
 
 # FIXME: need to duplicate import library ugliness?
 plpython_inc = include_directories('.')
+plpython_dir = meson.current_source_dir()
 
 if host_system == 'windows'
   plpython_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
-- 
2.47.3

