meson: Add missing dependencies for libpq tests
authorAndres Freund <[email protected]>
Tue, 4 Feb 2025 22:45:57 +0000 (17:45 -0500)
committerAndres Freund <[email protected]>
Tue, 4 Feb 2025 22:56:20 +0000 (17:56 -0500)
The missing dependency was, e.g., visible when doing
  ninja clean && ninja meson-test-prereq && meson test --no-rebuild --suite setup --suite libpq

This is a bit more complicated than other related fixes, because until now
libpq's tests depended on 'frontend_code', which includes a dependency on
fe_utils, which in turns on libpq. That in turn required
src/interfaces/libpq/test to be entered from the top-level, not from
libpq/meson.build.  Because of that the test definitions in libpq/meson.build
could not declare a dependency on the binaries defined in
libpq/test/meson.build.

To fix this, this commit creates frontend_no_fe_utils_code, which allows us to
recurse into libpq/test from withing libpq/meson.build.

Apply this to all branches with meson support, as part of an effort to fix
incorrect test dependencies that can lead to test failures.

Discussion: https://postgr.es/m/CAGECzQSvM3iSDmjF+=Kof5an6jN8UbkP_4cKKT9w6GZavmb5yQ@mail.gmail.com
Discussion: https://postgr.es/m/bdba588f-69a9-4f3e-9b95-62d07210a32e@eisentraut.org
Backpatch: 16-, where meson support was added

meson.build
src/interfaces/libpq/meson.build
src/interfaces/libpq/test/meson.build

index 0623799ee230d9fe5260e18a1da538869c48a58e..e3a4addb89df97c707521a4033ed93d15de8ef45 100644 (file)
@@ -2951,6 +2951,16 @@ frontend_shlib_code = declare_dependency(
   dependencies: [shlib_code, os_deps, libintl],
 )
 
+# For frontend code that doesn't use fe_utils - this mainly exists for libpq's
+# tests, which are defined before fe_utils is defined, as fe_utils depends on
+# libpq.
+frontend_no_fe_utils_code = declare_dependency(
+  include_directories: [postgres_inc],
+  link_with: [common_static, pgport_static],
+  sources: generated_headers,
+  dependencies: [os_deps, libintl],
+)
+
 # Dependencies both for static and shared libpq
 libpq_deps += [
   thread_dep,
@@ -3018,7 +3028,6 @@ subdir('src')
 subdir('contrib')
 
 subdir('src/test')
-subdir('src/interfaces/libpq/test')
 subdir('src/interfaces/ecpg/test')
 
 subdir('doc/src/sgml')
index 80e6a15adf82ca2ec89fb0f365e4af7aac28dae2..8a2872c0eea83bca92c5e61f7b8a8e36b3178fc8 100644 (file)
@@ -1,8 +1,5 @@
 # Copyright (c) 2022-2023, PostgreSQL Global Development Group
 
-# test/ is entered via top-level meson.build, that way it can use the default
-# args for executables (which depend on libpq).
-
 libpq_sources = files(
   'fe-auth-scram.c',
   'fe-auth.c',
@@ -107,6 +104,7 @@ install_data('pg_service.conf.sample',
   install_dir: dir_data,
 )
 
+subdir('test')
 
 tests += {
   'name': 'libpq',
@@ -120,6 +118,7 @@ tests += {
       't/004_load_balance_dns.pl',
     ],
     'env': {'with_ssl': ssl_library},
+    'deps': libpq_test_deps,
   },
 }
 
index d56b63e11867cf2a8cb5e8340f7cdd929eb1bb56..3c9eb09d313485fddc70b31941b4b34f576eb75c 100644 (file)
@@ -1,5 +1,7 @@
 # Copyright (c) 2022-2023, PostgreSQL Global Development Group
 
+libpq_test_deps = []
+
 libpq_uri_regress_sources = files(
   'libpq_uri_regress.c',
 )
@@ -10,9 +12,9 @@ if host_system == 'windows'
     '--FILEDESC', 'libpq test program',])
 endif
 
-testprep_targets += executable('libpq_uri_regress',
+libpq_test_deps += executable('libpq_uri_regress',
   libpq_uri_regress_sources,
-  dependencies: [frontend_code, libpq],
+  dependencies: [frontend_no_fe_utils_code, libpq],
   kwargs: default_bin_args + {
     'install': false,
   }
@@ -29,10 +31,12 @@ if host_system == 'windows'
     '--FILEDESC', 'libpq test program',])
 endif
 
-testprep_targets += executable('libpq_testclient',
+libpq_test_deps += executable('libpq_testclient',
   libpq_testclient_sources,
-  dependencies: [frontend_code, libpq],
+  dependencies: [frontend_no_fe_utils_code, libpq],
   kwargs: default_bin_args + {
     'install': false,
   }
 )
+
+testprep_targets += libpq_test_deps