From c3a2e8f46760f86cf9d2bafe4f3777e103701e0f Mon Sep 17 00:00:00 2001 From: Tristan Partin Date: Wed, 17 May 2023 10:36:52 -0500 Subject: [PATCH v3 15/15] Add Meson overrides Meson has the ability to do transparent overrides when projects are used as subprojects. For instance, say I am building a Postgres extension. I can define Postgres to be a subproject of my extension given the following wrap file: [wrap-git] url = https://git.postgresql.org/git/postgresql.git revision = master depth = 1 [provide] dependency_names = libpq Then in my extension (root project), I can have the following line snippet: libpq = dependency('libpq') This will tell Meson to transparently compile libpq prior to it compiling my extension (because I depend on libpq) if libpq isn't found on the host system. I have also added overrides for the various public-facing exectuables. Though I don't expect them to get much usage, might as well go ahead and override them. They can be used by adding the following line to the aforementioned wrap file: program_names = initdb, postgres, ... Then in my extension (root project), I can find them with the following line: initdb = find_program('initdb') Again, initdb will be compiled transparently as my extension gets built if and only if initdb isn't found on the host system. --- src/backend/meson.build | 2 ++ src/bin/initdb/meson.build | 2 ++ src/bin/pg_amcheck/meson.build | 2 ++ src/bin/pg_archivecleanup/meson.build | 2 ++ src/bin/pg_basebackup/meson.build | 6 ++++++ src/bin/pg_checksums/meson.build | 2 ++ src/bin/pg_config/meson.build | 2 ++ src/bin/pg_controldata/meson.build | 2 ++ src/bin/pg_ctl/meson.build | 2 ++ src/bin/pg_dump/meson.build | 6 ++++++ src/bin/pg_resetwal/meson.build | 2 ++ src/bin/pg_rewind/meson.build | 2 ++ src/bin/pg_test_fsync/meson.build | 2 ++ src/bin/pg_test_timing/meson.build | 2 ++ src/bin/pg_upgrade/meson.build | 2 ++ src/bin/pg_verifybackup/meson.build | 2 ++ src/bin/pg_waldump/meson.build | 2 ++ src/bin/pgbench/meson.build | 2 ++ src/bin/psql/meson.build | 2 ++ src/bin/scripts/meson.build | 6 ++++-- src/interfaces/ecpg/preproc/meson.build | 2 ++ src/interfaces/libpq/meson.build | 2 ++ 22 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/backend/meson.build b/src/backend/meson.build index ccfc382fcf..ac2f66d920 100644 --- a/src/backend/meson.build +++ b/src/backend/meson.build @@ -147,6 +147,8 @@ postgres = executable('postgres', backend_targets += postgres +meson.override_find_program('postgres', postgres) + pg_mod_c_args = cflags_mod pg_mod_cpp_args = cxxflags_mod pg_mod_link_args = ldflags_sl + ldflags_mod diff --git a/src/bin/initdb/meson.build b/src/bin/initdb/meson.build index 49743630aa..12b4918e8b 100644 --- a/src/bin/initdb/meson.build +++ b/src/bin/initdb/meson.build @@ -23,6 +23,8 @@ initdb = executable('initdb', ) bin_targets += initdb +meson.override_find_program('initdb', initdb) + tests += { 'name': 'initdb', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_amcheck/meson.build b/src/bin/pg_amcheck/meson.build index 2ade5aba03..8694abbf07 100644 --- a/src/bin/pg_amcheck/meson.build +++ b/src/bin/pg_amcheck/meson.build @@ -17,6 +17,8 @@ pg_amcheck = executable('pg_amcheck', ) bin_targets += pg_amcheck +meson.override_find_program('pg_amcheck', pg_amcheck) + tests += { 'name': 'pg_amcheck', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_archivecleanup/meson.build b/src/bin/pg_archivecleanup/meson.build index 28349db58b..6eecb42b05 100644 --- a/src/bin/pg_archivecleanup/meson.build +++ b/src/bin/pg_archivecleanup/meson.build @@ -17,6 +17,8 @@ pg_archivecleanup = executable('pg_archivecleanup', ) bin_targets += pg_archivecleanup +meson.override_find_program('pg_archivecleanup', pg_archivecleanup) + tests += { 'name': 'pg_archivecleanup', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_basebackup/meson.build b/src/bin/pg_basebackup/meson.build index c684622bfb..589c664163 100644 --- a/src/bin/pg_basebackup/meson.build +++ b/src/bin/pg_basebackup/meson.build @@ -37,6 +37,8 @@ pg_basebackup = executable('pg_basebackup', ) bin_targets += pg_basebackup +meson.override_find_program('pg_basebackup', pg_basebackup) + pg_receivewal_sources = files( 'pg_receivewal.c', @@ -56,6 +58,8 @@ pg_receivewal = executable('pg_receivewal', ) bin_targets += pg_receivewal +meson.override_find_program('pg_receivewal', pg_receivewal) + pg_recvlogical_sources = files( 'pg_recvlogical.c', @@ -75,6 +79,8 @@ pg_recvlogical = executable('pg_recvlogical', ) bin_targets += pg_recvlogical +meson.override_find_program('pg_recvlogical', pg_recvlogical) + tests += { 'name': 'pg_basebackup', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_checksums/meson.build b/src/bin/pg_checksums/meson.build index 5528526094..d54e76ae6c 100644 --- a/src/bin/pg_checksums/meson.build +++ b/src/bin/pg_checksums/meson.build @@ -18,6 +18,8 @@ pg_checksums = executable('pg_checksums', ) bin_targets += pg_checksums +meson.override_find_program('pg_checksums', pg_checksums) + tests += { 'name': 'pg_checksums', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_config/meson.build b/src/bin/pg_config/meson.build index 7fd7e94e2d..bea966f63e 100644 --- a/src/bin/pg_config/meson.build +++ b/src/bin/pg_config/meson.build @@ -17,6 +17,8 @@ pg_config = executable('pg_config', ) bin_targets += pg_config +meson.override_find_program('pg_config', pg_config) + tests += { 'name': 'pg_config', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_controldata/meson.build b/src/bin/pg_controldata/meson.build index 03c9d0ae3e..4521828b1f 100644 --- a/src/bin/pg_controldata/meson.build +++ b/src/bin/pg_controldata/meson.build @@ -17,6 +17,8 @@ pg_controldata = executable('pg_controldata', ) bin_targets += pg_controldata +meson.override_find_program('pg_controldata', pg_controldata) + tests += { 'name': 'pg_controldata', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_ctl/meson.build b/src/bin/pg_ctl/meson.build index 608a52f9fb..b62519c15f 100644 --- a/src/bin/pg_ctl/meson.build +++ b/src/bin/pg_ctl/meson.build @@ -17,6 +17,8 @@ pg_ctl = executable('pg_ctl', ) bin_targets += pg_ctl +meson.override_find_program('pg_ctl', pg_ctl) + tests += { 'name': 'pg_ctl', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_dump/meson.build b/src/bin/pg_dump/meson.build index 9d59a106f3..ae89758ef6 100644 --- a/src/bin/pg_dump/meson.build +++ b/src/bin/pg_dump/meson.build @@ -45,6 +45,8 @@ pg_dump = executable('pg_dump', ) bin_targets += pg_dump +meson.override_find_program('pg_dump', pg_dump) + pg_dumpall_sources = files( 'pg_dumpall.c', @@ -64,6 +66,8 @@ pg_dumpall = executable('pg_dumpall', ) bin_targets += pg_dumpall +meson.override_find_program('pg_dumpall', pg_dumpall) + pg_restore_sources = files( 'pg_restore.c', @@ -83,6 +87,8 @@ pg_restore = executable('pg_restore', ) bin_targets += pg_restore +meson.override_find_program('pg_restore', pg_restore) + tests += { 'name': 'pg_dump', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_resetwal/meson.build b/src/bin/pg_resetwal/meson.build index 3f08a819bb..e7d4ab3fa5 100644 --- a/src/bin/pg_resetwal/meson.build +++ b/src/bin/pg_resetwal/meson.build @@ -17,6 +17,8 @@ pg_resetwal = executable('pg_resetwal', ) bin_targets += pg_resetwal +meson.override_find_program('pg_resetwal', pg_resetwal) + tests += { 'name': 'pg_resetwal', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_rewind/meson.build b/src/bin/pg_rewind/meson.build index fd22818be4..23d698d8fd 100644 --- a/src/bin/pg_rewind/meson.build +++ b/src/bin/pg_rewind/meson.build @@ -27,6 +27,8 @@ pg_rewind = executable('pg_rewind', ) bin_targets += pg_rewind +meson.override_find_program('pg_rewind', pg_rewind) + tests += { 'name': 'pg_rewind', diff --git a/src/bin/pg_test_fsync/meson.build b/src/bin/pg_test_fsync/meson.build index aaf65c310e..3a03156508 100644 --- a/src/bin/pg_test_fsync/meson.build +++ b/src/bin/pg_test_fsync/meson.build @@ -17,6 +17,8 @@ pg_test_fsync = executable('pg_test_fsync', ) bin_targets += pg_test_fsync +meson.override_find_program('pg_test_fsync', pg_test_fsync) + tests += { 'name': 'pg_test_fsync', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_test_timing/meson.build b/src/bin/pg_test_timing/meson.build index 02f4a5c641..8a5aa29135 100644 --- a/src/bin/pg_test_timing/meson.build +++ b/src/bin/pg_test_timing/meson.build @@ -17,6 +17,8 @@ pg_test_timing = executable('pg_test_timing', ) bin_targets += pg_test_timing +meson.override_find_program('pg_test_timing', pg_test_timing) + tests += { 'name': 'pg_test_timing', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_upgrade/meson.build b/src/bin/pg_upgrade/meson.build index 12a97f84e2..3046b3f471 100644 --- a/src/bin/pg_upgrade/meson.build +++ b/src/bin/pg_upgrade/meson.build @@ -32,6 +32,8 @@ pg_upgrade = executable('pg_upgrade', ) bin_targets += pg_upgrade +meson.override_find_program('pg_upgrade', pg_upgrade) + tests += { 'name': 'pg_upgrade', diff --git a/src/bin/pg_verifybackup/meson.build b/src/bin/pg_verifybackup/meson.build index 9369da1bc6..5b670fd3e5 100644 --- a/src/bin/pg_verifybackup/meson.build +++ b/src/bin/pg_verifybackup/meson.build @@ -18,6 +18,8 @@ pg_verifybackup = executable('pg_verifybackup', ) bin_targets += pg_verifybackup +meson.override_find_program('pg_verifybackup', pg_verifybackup) + tests += { 'name': 'pg_verifybackup', 'sd': meson.current_source_dir(), diff --git a/src/bin/pg_waldump/meson.build b/src/bin/pg_waldump/meson.build index ae674d17c3..c03f212842 100644 --- a/src/bin/pg_waldump/meson.build +++ b/src/bin/pg_waldump/meson.build @@ -24,6 +24,8 @@ pg_waldump = executable('pg_waldump', ) bin_targets += pg_waldump +meson.override_find_program('pg_waldump', pg_waldump) + tests += { 'name': 'pg_waldump', 'sd': meson.current_source_dir(), diff --git a/src/bin/pgbench/meson.build b/src/bin/pgbench/meson.build index e3c7619cf4..b8b46ef721 100644 --- a/src/bin/pgbench/meson.build +++ b/src/bin/pgbench/meson.build @@ -35,6 +35,8 @@ pgbench = executable('pgbench', ) bin_targets += pgbench +meson.override_find_program('pgbench', pgbench) + tests += { 'name': 'pgbench', 'sd': meson.current_source_dir(), diff --git a/src/bin/psql/meson.build b/src/bin/psql/meson.build index a0a4ac7afb..cf20b3a7a4 100644 --- a/src/bin/psql/meson.build +++ b/src/bin/psql/meson.build @@ -53,6 +53,8 @@ psql = executable('psql', ) bin_targets += psql +meson.override_find_program('psql', psql) + install_data('psqlrc.sample', install_dir: dir_data, ) diff --git a/src/bin/scripts/meson.build b/src/bin/scripts/meson.build index 5b4f8a6f85..fa16814710 100644 --- a/src/bin/scripts/meson.build +++ b/src/bin/scripts/meson.build @@ -26,13 +26,15 @@ foreach binary : binaries '--FILEDESC', '@0@ - PostgreSQL utility'.format(binary),]) endif - binary = executable(binary, + exe = executable(binary, binary_sources, link_with: [scripts_common], dependencies: [frontend_code, libpq], kwargs: default_bin_args, ) - bin_targets += binary + bin_targets += exe + + meson.override_find_program(binary, exe) endforeach tests += { diff --git a/src/interfaces/ecpg/preproc/meson.build b/src/interfaces/ecpg/preproc/meson.build index 08d772d261..f7c9f79c81 100644 --- a/src/interfaces/ecpg/preproc/meson.build +++ b/src/interfaces/ecpg/preproc/meson.build @@ -110,4 +110,6 @@ ecpg_exe = executable('ecpg', ) ecpg_targets += ecpg_exe +meson.override_find_program('ecpg', ecpg_exe) + subdir('po', if_found: libintl) diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build index 80e6a15adf..6d18970e81 100644 --- a/src/interfaces/libpq/meson.build +++ b/src/interfaces/libpq/meson.build @@ -84,6 +84,8 @@ libpq = declare_dependency( include_directories: [include_directories('.')] ) +meson.override_dependency('libpq', libpq) + pkgconfig.generate( name: 'libpq', description: 'PostgreSQL libpq library', -- Tristan Partin Neon (https://neon.tech)