From 09849b06eaa8e752674fe102015899562696eead Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 20 Jan 2026 07:21:13 +0100 Subject: [PATCH] meson: Allow disabling static libraries --- .cirrus.tasks.yml | 1 + meson.build | 26 +++++++++++++++++----- src/common/meson.build | 1 + src/fe_utils/meson.build | 4 +++- src/interfaces/ecpg/compatlib/meson.build | 8 ++++--- src/interfaces/ecpg/ecpglib/meson.build | 8 ++++--- src/interfaces/ecpg/pgtypeslib/meson.build | 8 ++++--- src/interfaces/libpq-oauth/meson.build | 1 + src/interfaces/libpq/meson.build | 4 ++-- src/port/meson.build | 1 + 10 files changed, 45 insertions(+), 17 deletions(-) diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml index 2a821593ce5..4841a204248 100644 --- a/.cirrus.tasks.yml +++ b/.cirrus.tasks.yml @@ -133,6 +133,7 @@ task: meson setup \ --buildtype=debug \ --auto-features=disabled \ + -Ddefault_library=shared \ -Dtap_tests=enabled \ build EOF diff --git a/meson.build b/meson.build index 6d304f32fb0..f7177b7bf62 100644 --- a/meson.build +++ b/meson.build @@ -20,6 +20,7 @@ project('postgresql', 'warning_level=1', #-Wall equivalent 'b_pch=false', 'buildtype=debugoptimized', # -O2 + debug + 'default_library=both', # For compatibility with the autoconf build, set a default prefix. This # works even on windows, where it's a drive-relative path (i.e. when on # d:/somepath it'll install to d:/usr/local/pgsql) @@ -50,6 +51,19 @@ 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 +# 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() +if default_library_opt == 'shared' + dep_static_lib = disabler() +elif default_library_opt == 'static' + dep_shared_lib = disabler() +endif + ############################################################### @@ -3499,18 +3513,20 @@ endif installed_targets = [ backend_targets, bin_targets, - libpq_st, pl_targets, contrib_targets, nls_mo_targets, ecpg_targets, ] +if dep_static_lib.found() + installed_targets += [libpq_st] +endif if oauth_flow_supported - installed_targets += [ - libpq_oauth_so, - libpq_oauth_st, - ] + installed_targets += libpq_oauth_so + if dep_static_lib.found() + installed_targets += libpq_oauth_st + endif endif # all targets that require building code diff --git a/src/common/meson.build b/src/common/meson.build index b757618a9c9..1417ac3bbb7 100644 --- a/src/common/meson.build +++ b/src/common/meson.build @@ -192,6 +192,7 @@ foreach name, opts : pgcommon_variants opts.get('include_directories', []), ], 'dependencies': opts['dependencies'] + [ssl], + 'install': dep_static_lib.found(), } ) pgcommon += {name: lib} diff --git a/src/fe_utils/meson.build b/src/fe_utils/meson.build index a2420ea2d5c..9c9e0bcc0da 100644 --- a/src/fe_utils/meson.build +++ b/src/fe_utils/meson.build @@ -35,5 +35,7 @@ fe_utils = static_library('libpgfeutils', include_directories: [postgres_inc, libpq_inc], c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [], dependencies: frontend_common_code, - kwargs: default_lib_args, + kwargs: default_lib_args + { + 'install': dep_static_lib.found(), + }, ) diff --git a/src/interfaces/ecpg/compatlib/meson.build b/src/interfaces/ecpg/compatlib/meson.build index 6cb1be73407..94dcc67c03c 100644 --- a/src/interfaces/ecpg/compatlib/meson.build +++ b/src/interfaces/ecpg/compatlib/meson.build @@ -20,17 +20,19 @@ ecpg_compat_st = static_library('libecpg_compat', ecpg_compat_sources, include_directories: ecpg_compat_inc, c_args: ecpg_compat_c_args, - dependencies: [frontend_stlib_code, thread_dep], + dependencies: [dep_static_lib, frontend_stlib_code, thread_dep], link_with: [ecpglib_st, ecpg_pgtypes_st], kwargs: default_lib_args, ) -ecpg_targets += ecpg_compat_st +if dep_static_lib.found() + ecpg_targets += ecpg_compat_st +endif 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: [frontend_shlib_code, thread_dep], + dependencies: [dep_shared_lib, 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()], diff --git a/src/interfaces/ecpg/ecpglib/meson.build b/src/interfaces/ecpg/ecpglib/meson.build index 889bd9efd65..a81d772aa69 100644 --- a/src/interfaces/ecpg/ecpglib/meson.build +++ b/src/interfaces/ecpg/ecpglib/meson.build @@ -30,18 +30,20 @@ ecpglib_st = static_library('libecpg', include_directories: ecpglib_inc, c_args: ecpglib_c_args, c_pch: pch_postgres_fe_h, - dependencies: [frontend_stlib_code, thread_dep, libpq], + dependencies: [dep_static_lib, frontend_stlib_code, thread_dep, libpq], link_with: [ecpg_pgtypes_st], kwargs: default_lib_args, ) -ecpg_targets += ecpglib_st +if dep_static_lib.found() + ecpg_targets += ecpglib_st +endif 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: [frontend_shlib_code, libpq, thread_dep], + dependencies: [dep_shared_lib, 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()], diff --git a/src/interfaces/ecpg/pgtypeslib/meson.build b/src/interfaces/ecpg/pgtypeslib/meson.build index 6b78f529e53..897a8febc76 100644 --- a/src/interfaces/ecpg/pgtypeslib/meson.build +++ b/src/interfaces/ecpg/pgtypeslib/meson.build @@ -26,17 +26,19 @@ ecpg_pgtypes_st = static_library('libpgtypes', include_directories: ecpg_pgtypes_inc, c_args: ecpg_pgtypes_c_args, c_pch: pch_postgres_fe_h, - dependencies: frontend_stlib_code, + dependencies: [dep_static_lib, frontend_stlib_code], kwargs: default_lib_args, ) -ecpg_targets += ecpg_pgtypes_st +if dep_static_lib.found() + ecpg_targets += ecpg_pgtypes_st +endif 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: frontend_shlib_code, + dependencies: [dep_shared_lib, frontend_shlib_code], version: '3.' + pg_version_major.to_string(), soversion: host_system != 'windows' ? '3' : '', darwin_versions: ['3', '3.' + pg_version_major.to_string()], diff --git a/src/interfaces/libpq-oauth/meson.build b/src/interfaces/libpq-oauth/meson.build index d8a0c04095a..b0083f279aa 100644 --- a/src/interfaces/libpq-oauth/meson.build +++ b/src/interfaces/libpq-oauth/meson.build @@ -26,6 +26,7 @@ libpq_oauth_st = static_library('libpq-oauth', 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 diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build index c5ecd9c3a87..cb75f96c6a2 100644 --- a/src/interfaces/libpq/meson.build +++ b/src/interfaces/libpq/meson.build @@ -62,7 +62,7 @@ libpq_st = static_library('libpq', include_directories: [libpq_inc], c_args: libpq_c_args, c_pch: pch_postgres_fe_h, - dependencies: [frontend_stlib_code, libpq_deps], + dependencies: [dep_static_lib, frontend_stlib_code, libpq_deps], kwargs: default_lib_args, ) @@ -74,7 +74,7 @@ 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: [frontend_shlib_code, libpq_deps], + dependencies: [dep_shared_lib, frontend_shlib_code, libpq_deps], link_depends: export_file, link_args: export_fmt.format(export_file.full_path()), kwargs: default_lib_args, diff --git a/src/port/meson.build b/src/port/meson.build index 28655142ebe..1cc20ac770f 100644 --- a/src/port/meson.build +++ b/src/port/meson.build @@ -192,6 +192,7 @@ foreach name, opts : pgport_variants c_pch: pch_c_h, kwargs: opts + { 'dependencies': opts['dependencies'] + [ssl], + 'install': dep_static_lib.found(), } ) pgport += {name: lib} -- 2.52.0