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.
This commit is contained in:
Felipe Sateler 2018-05-22 15:08:57 -04:00 committed by Zbigniew Jędrzejewski-Szmek
parent 89544ae658
commit f3794366b0
2 changed files with 13 additions and 1 deletions

View File

@ -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,

View File

@ -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''')