From 69980ab798e240923ef12f86a92665b6c9ff7292 Mon Sep 17 00:00:00 2001 From: Andrea Bolognani Date: Wed, 19 Aug 2020 11:15:35 +0200 Subject: [PATCH] meson: Improve RPATH handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Right now we're unconditionally adding RPATH information to the installed binaries and libraries, but that's not always desired. autotools seem to be smart enough to only include that information when targeting a non-standard prefix, so most distro packages don't actually contain it; moreover, both Debian and Fedora have wiki pages encouraging packagers to avoid setting RPATH: https://wiki.debian.org/RpathIssue https://fedoraproject.org/wiki/RPath_Packaging_Draft Implement RPATH logic that Does The Right Thing™ in the most common cases, while still offering users the ability to override the default behavior if they have specific needs. Signed-off-by: Andrea Bolognani Reviewed-by: Pavel Hrdina --- meson.build | 10 ++++++++++ meson_options.txt | 1 + src/meson.build | 12 ++++++------ tools/meson.build | 8 ++++---- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/meson.build b/meson.build index 2846c9b9f2..35e3da6e55 100644 --- a/meson.build +++ b/meson.build @@ -156,6 +156,16 @@ if rc.returncode() == 0 endif +# Add RPATH information when building for a non-standard prefix, or +# when explicitly requested to do so + +if prefix == '/usr' and not get_option('rpath').enabled() + libvirt_rpath = '' +else + libvirt_rpath = libdir +endif + + # figure out libvirt version strings arr_version = meson.project_version().split('.') diff --git a/meson_options.txt b/meson_options.txt index c538d323c1..79554c3186 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -6,6 +6,7 @@ option('runstatedir', type: 'string', value: '', description: 'State directory f option('expensive_tests', type: 'feature', value: 'auto', description: 'set the default for enabling expensive tests (long timeouts), use VIR_TEST_EXPENSIVE to override') option('test_coverage', type: 'boolean', value: false, description: 'turn on code coverage instrumentation') option('git_werror', type: 'feature', value: 'auto', description: 'use -Werror if building from GIT') +option('rpath', type: 'feature', value: 'auto', description: 'whether to include rpath information in installed binaries and libraries') # build dependencies options diff --git a/src/meson.build b/src/meson.build index 73ac99f01e..d058cec2e4 100644 --- a/src/meson.build +++ b/src/meson.build @@ -454,7 +454,7 @@ libvirt_qemu_lib = shared_library( libvirt_qemu_syms_file, ], install: true, - install_rpath: libdir, + install_rpath: libvirt_rpath, version: libvirt_lib_version, soversion: libvirt_so_version, ) @@ -510,7 +510,7 @@ libvirt_lxc_lib = shared_library( libvirt_lxc_syms_file, ], install: true, - install_rpath: libdir, + install_rpath: libvirt_rpath, version: libvirt_lib_version, soversion: libvirt_so_version, ) @@ -554,7 +554,7 @@ libvirt_admin_lib = shared_library( libvirt_admin_syms_file, ], install: true, - install_rpath: libdir, + install_rpath: libvirt_rpath, version: libvirt_lib_version, soversion: libvirt_so_version, ) @@ -588,7 +588,7 @@ foreach module : virt_modules ], install: true, install_dir: module.get('install_dir', libdir / 'libvirt' / 'connection-driver'), - install_rpath: libdir, + install_rpath: libvirt_rpath, ) set_variable('@0@_module'.format(module['name'].underscorify()), mod) endforeach @@ -633,7 +633,7 @@ foreach daemon : virt_daemons ], install: true, install_dir: sbindir, - install_rpath: libdir, + install_rpath: libvirt_rpath, ) endforeach @@ -661,7 +661,7 @@ foreach helper : virt_helpers ], install: true, install_dir: helper.get('install_dir', libexecdir), - install_rpath: libdir, + install_rpath: libvirt_rpath, ) endforeach diff --git a/tools/meson.build b/tools/meson.build index 090179470a..e18adfa7f2 100644 --- a/tools/meson.build +++ b/tools/meson.build @@ -75,7 +75,7 @@ if conf.has('WITH_HOST_VALIDATE') ], install: true, install_dir: bindir, - install_rpath: libdir, + install_rpath: libvirt_rpath, ) endif @@ -112,7 +112,7 @@ if conf.has('WITH_LOGIN_SHELL') ], install: true, install_dir: libexecdir, - install_rpath: libdir, + install_rpath: libvirt_rpath, ) install_data('virt-login-shell.conf', install_dir: sysconfdir / 'libvirt') @@ -197,7 +197,7 @@ executable( ], install: true, install_dir: bindir, - install_rpath: libdir, + install_rpath: libvirt_rpath, ) executable( @@ -219,7 +219,7 @@ executable( ], install: true, install_dir: bindir, - install_rpath: libdir, + install_rpath: libvirt_rpath, ) tools_conf = configuration_data()