From f3794366b07262ca213c63b61361e15647cfafda Mon Sep 17 00:00:00 2001 From: Felipe Sateler Date: Tue, 22 May 2018 15:08:57 -0400 Subject: [PATCH] build-sys: Add option to link systemctl statically Systemctl is special because it is required for many tasks that may need to be performed when the system is not fully configured and/or partially broken: 1. Installing/Uninstalling services during OS installs and upgrades 2. Shutting down the system Therefore reduce the number of dependencies that systemctl pulls in, by not linking to systemd-shared. This brings a bit of resilience to systemctl (and its aliases shutdown, reboot, etc), by linking against less external libraries. Because this extra resilience comes at a cost of approximately 580 KB extra space, this is done behind a meson build option. --- meson.build | 12 +++++++++++- meson_options.txt | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 484271ff1c..18b4ace5b9 100644 --- a/meson.build +++ b/meson.build @@ -1708,9 +1708,19 @@ exe = executable('systemd-socket-activate', 'src/activate/activate.c', install : true) public_programs += [exe] + +if get_option('link-systemctl-shared') + systemctl_link_with = [libshared] +else + systemctl_link_with = [libsystemd_static, + libshared_static, + libjournal_client, + libbasic_gcrypt] +endif + exe = executable('systemctl', 'src/systemctl/systemctl.c', include_directories : includes, - link_with : [libshared], + link_with : systemctl_link_with, dependencies : [threads, libcap, libselinux, diff --git a/meson_options.txt b/meson_options.txt index 85d794b08b..557d7843bc 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -13,6 +13,8 @@ option('rootprefix', type : 'string', description : '''override the root prefix''') option('link-udev-shared', type : 'boolean', description : 'link systemd-udev and its helpers to libsystemd-shared.so') +option('link-systemctl-shared', type: 'boolean', + description : 'link systemctl against libsystemd-shared.so') option('static-libsystemd', type : 'combo', choices : ['false', 'true', 'pic', 'no-pic'], description : '''install a static library for libsystemd''')