From 7bff4686cd5f4a297173ada26cc8f41c79029a65 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 27 Jan 2026 13:54:20 +0100 Subject: [PATCH v2 3/3] meson: Allow disabling static libraries (variant 2) --- meson.build | 10 +++++----- src/common/meson.build | 2 +- src/fe_utils/meson.build | 2 +- src/interfaces/ecpg/compatlib/meson.build | 12 ++++++------ src/interfaces/ecpg/ecpglib/meson.build | 12 ++++++------ src/interfaces/ecpg/pgtypeslib/meson.build | 12 ++++++------ src/interfaces/libpq-oauth/meson.build | 11 +++++------ src/interfaces/libpq/meson.build | 12 ++++++------ src/port/meson.build | 2 +- 9 files changed, 37 insertions(+), 38 deletions(-) diff --git a/meson.build b/meson.build index 78918301d53..cb1c9e6f6b2 100644 --- a/meson.build +++ b/meson.build @@ -51,17 +51,17 @@ not_found_dep = dependency('', required: false) thread_dep = dependency('threads') auto_features = get_option('auto_features') -# Declare dependencies to disable static or shared libraries. This +# Declare variables to disable static or shared libraries. This # makes the 'default_library' option work even though we don't use the # library() function but instead shared_library() and static_library() # separately. default_library_opt = get_option('default_library') -dep_shared_lib = declare_dependency() -dep_static_lib = declare_dependency() +build_shared_lib = true +build_static_lib = true if default_library_opt == 'shared' - dep_static_lib = disabler() + build_static_lib = false elif default_library_opt == 'static' - dep_shared_lib = disabler() + build_shared_lib = false endif diff --git a/src/common/meson.build b/src/common/meson.build index 1417ac3bbb7..59caaf454c7 100644 --- a/src/common/meson.build +++ b/src/common/meson.build @@ -192,7 +192,7 @@ foreach name, opts : pgcommon_variants opts.get('include_directories', []), ], 'dependencies': opts['dependencies'] + [ssl], - 'install': dep_static_lib.found(), + 'install': build_static_lib, } ) pgcommon += {name: lib} diff --git a/src/fe_utils/meson.build b/src/fe_utils/meson.build index 9c9e0bcc0da..c6265028107 100644 --- a/src/fe_utils/meson.build +++ b/src/fe_utils/meson.build @@ -36,6 +36,6 @@ fe_utils = static_library('libpgfeutils', c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [], dependencies: frontend_common_code, kwargs: default_lib_args + { - 'install': dep_static_lib.found(), + 'install': build_static_lib, }, ) diff --git a/src/interfaces/ecpg/compatlib/meson.build b/src/interfaces/ecpg/compatlib/meson.build index 861cb67205e..d578faefe1c 100644 --- a/src/interfaces/ecpg/compatlib/meson.build +++ b/src/interfaces/ecpg/compatlib/meson.build @@ -16,23 +16,24 @@ if host_system == 'windows' endif # see src/interfaces/libpq/meson.build +if build_static_lib ecpg_compat_st = static_library('libecpg_compat', ecpg_compat_sources, include_directories: ecpg_compat_inc, c_args: ecpg_compat_c_args, - dependencies: [dep_static_lib, frontend_stlib_code, thread_dep], + dependencies: [frontend_stlib_code, thread_dep], link_with: [ecpglib_st, ecpg_pgtypes_st], kwargs: default_lib_args, ) -if dep_static_lib.found() - ecpg_targets += ecpg_compat_st +ecpg_targets += ecpg_compat_st endif +if build_shared_lib ecpg_compat_so = shared_library('libecpg_compat', ecpg_compat_sources + ecpg_compat_so_sources, include_directories: ecpg_compat_inc, c_args: ecpg_compat_c_args, - dependencies: [dep_shared_lib, frontend_shlib_code, thread_dep], + dependencies: [frontend_shlib_code, thread_dep], link_with: [ecpglib_so, ecpg_pgtypes_so], soversion: host_system != 'windows' ? '3' : '', darwin_versions: ['3', '3.' + pg_version_major.to_string()], @@ -41,8 +42,7 @@ ecpg_compat_so = shared_library('libecpg_compat', link_depends: export_file, kwargs: default_lib_args, ) -if dep_shared_lib.found() - ecpg_targets += ecpg_compat_so +ecpg_targets += ecpg_compat_so endif pkgconfig.generate( diff --git a/src/interfaces/ecpg/ecpglib/meson.build b/src/interfaces/ecpg/ecpglib/meson.build index d0841e99a19..81e92151945 100644 --- a/src/interfaces/ecpg/ecpglib/meson.build +++ b/src/interfaces/ecpg/ecpglib/meson.build @@ -25,25 +25,26 @@ if host_system == 'windows' endif # see src/interfaces/libpq/meson.build +if build_static_lib ecpglib_st = static_library('libecpg', ecpglib_sources, include_directories: ecpglib_inc, c_args: ecpglib_c_args, c_pch: pch_postgres_fe_h, - dependencies: [dep_static_lib, frontend_stlib_code, thread_dep, libpq], + dependencies: [frontend_stlib_code, thread_dep, libpq], link_with: [ecpg_pgtypes_st], kwargs: default_lib_args, ) -if dep_static_lib.found() - ecpg_targets += ecpglib_st +ecpg_targets += ecpglib_st endif +if build_shared_lib ecpglib_so = shared_library('libecpg', ecpglib_sources + ecpglib_so_sources, include_directories: ecpglib_inc, c_args: ecpglib_c_args, c_pch: pch_postgres_fe_h, - dependencies: [dep_shared_lib, frontend_shlib_code, libpq, thread_dep], + dependencies: [frontend_shlib_code, libpq, thread_dep], link_with: ecpg_pgtypes_so, soversion: host_system != 'windows' ? '6' : '', darwin_versions: ['6', '6.' + pg_version_major.to_string()], @@ -52,8 +53,7 @@ ecpglib_so = shared_library('libecpg', link_depends: export_file, kwargs: default_lib_args, ) -if dep_shared_lib.found() - ecpg_targets += ecpglib_so +ecpg_targets += ecpglib_so endif pkgconfig.generate( diff --git a/src/interfaces/ecpg/pgtypeslib/meson.build b/src/interfaces/ecpg/pgtypeslib/meson.build index 7b79da2368b..241fa95e559 100644 --- a/src/interfaces/ecpg/pgtypeslib/meson.build +++ b/src/interfaces/ecpg/pgtypeslib/meson.build @@ -21,24 +21,25 @@ if host_system == 'windows' endif # see src/interfaces/libpq/meson.build +if build_static_lib ecpg_pgtypes_st = static_library('libpgtypes', ecpg_pgtypes_sources, include_directories: ecpg_pgtypes_inc, c_args: ecpg_pgtypes_c_args, c_pch: pch_postgres_fe_h, - dependencies: [dep_static_lib, frontend_stlib_code], + dependencies: [frontend_stlib_code], kwargs: default_lib_args, ) -if dep_static_lib.found() - ecpg_targets += ecpg_pgtypes_st +ecpg_targets += ecpg_pgtypes_st endif +if build_shared_lib ecpg_pgtypes_so = shared_library('libpgtypes', ecpg_pgtypes_sources + ecpg_pgtypes_so_sources, include_directories: ecpg_pgtypes_inc, c_args: ecpg_pgtypes_c_args, c_pch: pch_postgres_fe_h, - dependencies: [dep_shared_lib, frontend_shlib_code], + dependencies: [frontend_shlib_code], version: '3.' + pg_version_major.to_string(), soversion: host_system != 'windows' ? '3' : '', darwin_versions: ['3', '3.' + pg_version_major.to_string()], @@ -46,8 +47,7 @@ ecpg_pgtypes_so = shared_library('libpgtypes', link_depends: export_file, kwargs: default_lib_args, ) -if dep_shared_lib.found() - ecpg_targets += ecpg_pgtypes_so +ecpg_targets += ecpg_pgtypes_so endif pkgconfig.generate( diff --git a/src/interfaces/libpq-oauth/meson.build b/src/interfaces/libpq-oauth/meson.build index 9c8cb90d989..27aca2bc324 100644 --- a/src/interfaces/libpq-oauth/meson.build +++ b/src/interfaces/libpq-oauth/meson.build @@ -21,38 +21,37 @@ export_file = custom_target('libpq-oauth.exports', # port needs to be in include path due to pthread-win32.h libpq_oauth_inc = include_directories('.', '../libpq', '../../port') +if build_static_lib libpq_oauth_st = static_library('libpq-oauth', libpq_oauth_sources, include_directories: [libpq_oauth_inc, postgres_inc], c_pch: pch_postgres_fe_h, dependencies: [ - dep_static_lib, frontend_stlib_code, libpq_oauth_deps, ssl, # libpq-int.h includes OpenSSL headers ], kwargs: default_lib_args, ) -if dep_static_lib.found() - libpq_targets += libpq_oauth_st +libpq_targets += libpq_oauth_st endif # This is an internal module; we don't want an SONAME and therefore do not set # SO_MAJOR_VERSION. libpq_oauth_name = 'libpq-oauth-@0@'.format(pg_version_major) +if build_shared_lib libpq_oauth_so = shared_module(libpq_oauth_name, libpq_oauth_sources + libpq_oauth_so_sources, include_directories: [libpq_oauth_inc, postgres_inc], c_args: libpq_oauth_so_c_args, c_pch: pch_postgres_fe_h, - dependencies: [dep_shared_lib, frontend_shlib_code, libpq, libpq_oauth_deps], + dependencies: [frontend_shlib_code, libpq, libpq_oauth_deps], link_depends: export_file, link_args: export_fmt.format(export_file.full_path()), kwargs: default_lib_args, ) -if dep_shared_lib.found() - libpq_targets += libpq_oauth_so +libpq_targets += libpq_oauth_so endif libpq_oauth_test_deps = [] diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build index 647d7e2ae7c..2b95098187e 100644 --- a/src/interfaces/libpq/meson.build +++ b/src/interfaces/libpq/meson.build @@ -57,18 +57,19 @@ libpq_so_c_args = ['-DUSE_DYNAMIC_OAUTH'] # We could try to avoid building the source files twice, but it probably adds # more complexity than its worth (reusing object files requires also linking # to the library on windows or breaks precompiled headers). +if build_static_lib libpq_st = static_library('libpq', libpq_sources, include_directories: [libpq_inc], c_args: libpq_c_args, c_pch: pch_postgres_fe_h, - dependencies: [dep_static_lib, frontend_stlib_code, libpq_deps], + dependencies: [frontend_stlib_code, libpq_deps], kwargs: default_lib_args, ) -if dep_static_lib.found() - libpq_targets += libpq_st +libpq_targets += libpq_st endif +if build_shared_lib libpq_so = shared_library('libpq', libpq_sources + libpq_so_sources, include_directories: [libpq_inc, postgres_inc], @@ -77,13 +78,12 @@ libpq_so = shared_library('libpq', version: '5.' + pg_version_major.to_string(), soversion: host_system != 'windows' ? '5' : '', darwin_versions: ['5', '5.' + pg_version_major.to_string()], - dependencies: [dep_shared_lib, frontend_shlib_code, libpq_deps], + dependencies: [frontend_shlib_code, libpq_deps], link_depends: export_file, link_args: export_fmt.format(export_file.full_path()), kwargs: default_lib_args, ) -if dep_shared_lib.found() - libpq_targets += libpq_so +libpq_targets += libpq_so endif libpq = declare_dependency( diff --git a/src/port/meson.build b/src/port/meson.build index a8d92937581..eb9151e4619 100644 --- a/src/port/meson.build +++ b/src/port/meson.build @@ -192,7 +192,7 @@ foreach name, opts : pgport_variants c_pch: pch_c_h, kwargs: opts + { 'dependencies': opts['dependencies'] + [ssl], - 'install': dep_static_lib.found(), + 'install': build_static_lib, } ) pgport += {name: lib} -- 2.52.0