From 8ef8f3d5a7674e95d58a92a3dde6199b5d73e2c6 Mon Sep 17 00:00:00 2001 From: Filipe Brandenburger Date: Wed, 3 Jun 2020 14:02:59 -0700 Subject: [PATCH 1/2] meson: add a new -Dstandalone-binaries=true option This adds an option to build standalone binaries that do not depend on the systemd-shared library. This option can be handy to build binaries that can be useful on a non-systemd system, binaries such as systemd-sysusers and systemd-tmpfiles have been previously requested, but installing them with all the required dependencies pulls in too much code that isn't really relevant for those use cases. The standalone use case is also relevant in containers, where minimizing the size of the container image is quite relevant. For now, only `systemd-sysusers` is also built as a standalone binary. The standalone binaries are installed as `/usr/bin/%{name}.standalone`, the packaging system is reponsible for renaming those into the correct names during the packaging step. RPM is able to do so with RemovePathPostfixes: The default behavior is to build shared binaries only, since this option is mainly intended for building distribution packages. Tested that a proper separate binary is built when using this option and that having it disabled (or using the default Meson configuration) does not produce a binary for this option. --- meson.build | 16 ++++++++++++++++ meson_options.txt | 2 ++ 2 files changed, 18 insertions(+) diff --git a/meson.build b/meson.build index fbb4090f18..e229e6b20c 100644 --- a/meson.build +++ b/meson.build @@ -85,6 +85,8 @@ if rootprefixdir == '' endif rootprefixdir_noslash = rootprefixdir == '/' ? '' : rootprefixdir +have_standalone_binaries = get_option('standalone-binaries') + sysvinit_path = get_option('sysvinit-path') sysvrcnd_path = get_option('sysvrcnd-path') conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '', @@ -2931,6 +2933,20 @@ if conf.get('ENABLE_SYSUSERS') == 1 install_rpath : rootlibexecdir, install : true, install_dir : rootbindir) + + if have_standalone_binaries + public_programs += executable( + 'systemd-sysusers.standalone', + 'src/sysusers/sysusers.c', + include_directories : includes, + link_with : [libshared_static, + libbasic, + libbasic_gcrypt, + libsystemd_static, + libjournal_client], + install : true, + install_dir : rootbindir) + endif endif if conf.get('ENABLE_TMPFILES') == 1 diff --git a/meson_options.txt b/meson_options.txt index 5e6842f9d6..e13bfb0c4b 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -26,6 +26,8 @@ option('static-libsystemd', type : 'combo', option('static-libudev', type : 'combo', choices : ['false', 'true', 'pic', 'no-pic'], description : '''install a static library for libudev''') +option('standalone-binaries', type : 'boolean', value : 'false', + description : '''also build standalone versions of supported binaries''') option('sysvinit-path', type : 'string', value : '/etc/init.d', description : 'the directory where the SysV init scripts are located') From db64ba81c62afa0e0d3e95c4a3e1ec3dd9a471a4 Mon Sep 17 00:00:00 2001 From: Filipe Brandenburger Date: Wed, 3 Jun 2020 14:49:53 -0700 Subject: [PATCH 2/2] meson: build standalone version of systemd-tmpfiles Use -Dstandalone-binaries=yes to enable building and installing this standalone version of the binary without a dependency on the systemd-shared solib. Also move the list of sources for systemd-tmpfiles to its own meson.build file. --- meson.build | 20 +++++++++++++++++--- src/tmpfiles/meson.build | 7 +++++++ 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/tmpfiles/meson.build diff --git a/meson.build b/meson.build index e229e6b20c..4a679449ce 100644 --- a/meson.build +++ b/meson.build @@ -1637,6 +1637,7 @@ subdir('src/nspawn') subdir('src/resolve') subdir('src/timedate') subdir('src/timesync') +subdir('src/tmpfiles') subdir('src/vconsole') subdir('src/boot/efi') @@ -2952,9 +2953,7 @@ endif if conf.get('ENABLE_TMPFILES') == 1 exe = executable( 'systemd-tmpfiles', - 'src/tmpfiles/tmpfiles.c', - 'src/tmpfiles/offline-passwd.c', - 'src/tmpfiles/offline-passwd.h', + systemd_tmpfiles_sources, include_directories : includes, link_with : [libshared], dependencies : [libacl], @@ -2969,6 +2968,21 @@ if conf.get('ENABLE_TMPFILES') == 1 # https://github.com/mesonbuild/meson/issues/2681 args : exe.full_path()) endif + + if have_standalone_binaries + public_programs += executable( + 'systemd-tmpfiles.standalone', + systemd_tmpfiles_sources, + include_directories : includes, + link_with : [libshared_static, + libbasic, + libbasic_gcrypt, + libsystemd_static, + libjournal_client], + dependencies : [libacl], + install : true, + install_dir : rootbindir) + endif endif if conf.get('ENABLE_HWDB') == 1 diff --git a/src/tmpfiles/meson.build b/src/tmpfiles/meson.build new file mode 100644 index 0000000000..2f8fb29bd9 --- /dev/null +++ b/src/tmpfiles/meson.build @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: LGPL-2.1+ + +systemd_tmpfiles_sources = [ + 'src/tmpfiles/tmpfiles.c', + 'src/tmpfiles/offline-passwd.c', + 'src/tmpfiles/offline-passwd.h', +]