From a2b0cd3f5ab3f450e74e2085ad20372a05451c74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 14 Dec 2021 18:03:06 +0100 Subject: [PATCH] meson: allow specifying a custom "tag" for the private shared libaries We have /usr/lib/systemd/libsystemd-{shared,core}-nnn.so. With this path the 'nnn' part can be changed to something different. The idea is that during a package build this will be set to the package version. This way during in-place upgrades with the same major version both the new and old libraries can cooexit. This should fix the issue when systemd programs are called during package upgrades and fail to exec because the expect different symbols in the library they are linked to. This should fix https://bugzilla.redhat.com/show_bug.cgi?id=1906010. --- meson.build | 6 ++++++ meson_options.txt | 2 ++ src/core/meson.build | 2 +- src/shared/meson.build | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 146c95a478f..ef9a0278c97 100644 --- a/meson.build +++ b/meson.build @@ -599,6 +599,11 @@ endif versiondep = declare_dependency(sources: version_h) +shared_lib_tag = get_option('shared-lib-tag') +if shared_lib_tag == '' + shared_lib_tag = meson.project_version() +endif + sh = find_program('sh') echo = find_program('echo') sed = find_program('sed') @@ -3902,6 +3907,7 @@ summary({ 'D-Bus system directory' : dbussystemservicedir, 'bash completions directory' : bashcompletiondir, 'zsh completions directory' : zshcompletiondir, + 'private shared lib version tag' : shared_lib_tag, 'extra start script' : get_option('rc-local'), 'debug shell' : '@0@ @ @1@'.format(get_option('debug-shell'), get_option('debug-tty')), diff --git a/meson_options.txt b/meson_options.txt index 401f0933d73..23691fb4986 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -3,6 +3,8 @@ option('version-tag', type : 'string', description : 'override the git version string') +option('shared-lib-tag', type : 'string', + description : 'override the private shared library version tag (defaults to project version)') option('mode', type : 'combo', choices : ['developer', 'release'], description : 'autoenable features suitable for systemd development/release builds') diff --git a/src/core/meson.build b/src/core/meson.build index 87456712131..fd15a7fbefd 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -167,7 +167,7 @@ load_fragment_gperf_nulstr_c = custom_target( command : [awk, '-f', '@INPUT0@', '@INPUT1@'], capture : true) -libcore_name = 'systemd-core-@0@'.format(meson.project_version()) +libcore_name = 'systemd-core-@0@'.format(shared_lib_tag) libcore = shared_library( libcore_name, diff --git a/src/shared/meson.build b/src/shared/meson.build index c2e02339746..f58d623f4a1 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -430,7 +430,7 @@ target2 = custom_target( shared_generated_gperf_headers = [target1, target2] shared_sources += shared_generated_gperf_headers -libshared_name = 'systemd-shared-@0@'.format(meson.project_version()) +libshared_name = 'systemd-shared-@0@'.format(shared_lib_tag) libshared_deps = [threads, libacl,