Allow arbitrary standalone progs to be installed and really stop building all standalone for tests (#43130)

This commit is contained in:
Yu Watanabe
2026-07-24 14:22:07 +09:00
committed by GitHub
8 changed files with 38 additions and 45 deletions
+33 -31
View File
@@ -99,7 +99,10 @@ endif
conf.set10('HAVE_SPLIT_BIN', split_bin,
description : 'bin and sbin directories are separate')
have_standalone_binaries = get_option('standalone-binaries')
standalone_binaries = get_option('standalone-binaries').split(',')
if standalone_binaries == ['']
standalone_binaries = []
endif
conf.set10('CREATE_LOG_DIRS', get_option('create-log-dirs'))
@@ -1826,7 +1829,7 @@ fuzzer_exes = []
sources = []
# binaries that have --help and are intended for use by humans,
# usually, but not always, installed in /bin.
# usually, but not always, installed in /usr/bin.
public_programs = []
# D-Bus introspection XML export
@@ -2027,13 +2030,15 @@ endif
# The 'install' field is extended to also control whether the automatically
# added variant, which is statically linked with libsystemd-shared, is installed:
# 'yes' : Mapped to true. The static variant will not be installed.
# 'no' : Mapped to false. The static variant will not be installed either.
# 'both' : Mapped to true. The static variant will also be installed.
# 'yes' : Mapped to true.
# 'no' : Mapped to false.
# 'static' : Mapped to false, and its target name is suffixed with '.shared'.
# The static variant will be installed instead using the original name
# (without the '.standalone' suffix).
# Currently, test and fuzzer executables only support 'yes' or 'no'.
#
# For executables matched by the install-standalone list, a .standalone variant
# will be installed if install is true.
executable_template = {
'include_directories' : includes,
'link_with' : [libshared],
@@ -2349,24 +2354,20 @@ foreach dict : executables
name_static = name + '.standalone'
install = dict.get('install')
build_by_default = dict.get('build_by_default')
if install == 'yes'
install_shared = true
install_static = false
install_standalone = false
if not (is_test or is_fuzz)
foreach pattern : standalone_binaries
if name.contains(pattern)
install_standalone = true
endif
endforeach
endif
if install in ['yes', 'no']
install_shared = install == 'yes'
install_static = install_shared and install_standalone
build_by_default_shared = build_by_default
build_by_default_static = false
elif install == 'no'
install_shared = false
install_static = false
build_by_default_shared = build_by_default
build_by_default_static = false
elif install == 'both'
if is_test or is_fuzz
error('Install mode "@0@" is not supported for test or fuzzer target "@1@"'.format(install, name))
endif
install_shared = true
install_static = true
build_by_default_shared = build_by_default
build_by_default_static = build_by_default
build_by_default_static = build_by_default and (install_standalone or want_dlopen_tests)
elif install == 'static'
if is_test or is_fuzz
error('Install mode "@0@" is not supported for test or fuzzer target "@1@"'.format(install, name))
@@ -2443,9 +2444,9 @@ foreach dict : executables
install: install_static,
)
executables_by_name += { name_static : exe_static }
if build_by_default_static
executables_by_name += { name_static : exe_static }
if dict.get('dbus', false) and not build_by_default_shared
dbus_programs += exe_static
endif
@@ -2762,18 +2763,20 @@ endif
foreach exec : public_programs
name = fs.name(exec.full_path())
if want_tests != 'false'
test('check-help-' + name,
check_help_sh,
suite : 'dist',
args : exec.full_path(),
depends: exec)
test('check-version-' + name,
check_version_sh,
suite : 'dist',
args : [exec.full_path(),
project_major_version],
depends: exec)
if not name.endswith('.standalone')
test('check-help-' + name,
check_help_sh,
suite : 'dist',
args : exec.full_path(),
depends: exec)
endif
endif
endforeach
@@ -3165,7 +3168,6 @@ foreach tuple : [
['link-portabled-shared', get_option('link-portabled-shared')],
['first-boot-full-preset'],
['fexecve'],
['standalone-binaries', get_option('standalone-binaries')],
['coverage', get_option('b_coverage')],
]
+3 -2
View File
@@ -40,8 +40,9 @@ 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('standalone-binaries', type : 'string',
deprecated : { 'true' : 'repart,report,shutdown,sysusers,tmpfiles', 'false' : '' },
description : 'comma-separated list of patterns specifying binaries to install as .standalone')
option('build-static', type : 'boolean', value : false,
description : 'build static versions of supported binaries')
-1
View File
@@ -21,7 +21,6 @@ executables += [
libopenssl_cflags,
tpm2_cflags,
],
'install' : have_standalone_binaries ? 'both' : 'yes',
},
]
-6
View File
@@ -13,7 +13,6 @@ executables += [
'dependencies' : [
libcurl_cflags,
],
'install' : have_standalone_binaries ? 'both' : 'yes',
},
libexec_template + {
'name' : 'systemd-report-basic',
@@ -22,7 +21,6 @@ executables += [
'report-basic.c',
'report-basic-server.c',
),
'install' : have_standalone_binaries ? 'both' : 'yes',
},
libexec_template + {
'name' : 'systemd-report-cgroup',
@@ -30,7 +28,6 @@ executables += [
'report-cgroup.c',
'report-cgroup-server.c',
),
'install' : have_standalone_binaries ? 'both' : 'yes',
},
libexec_template + {
'name' : 'systemd-report-files',
@@ -38,7 +35,6 @@ executables += [
'report-files.c',
'report-files-server.c',
),
'install' : have_standalone_binaries ? 'both' : 'yes',
},
libexec_template + {
'name' : 'systemd-report-sign-plain',
@@ -47,13 +43,11 @@ executables += [
),
'dependencies' : libopenssl_cflags,
'conditions' : ['HAVE_OPENSSL'],
'install' : have_standalone_binaries ? 'both' : 'yes',
},
libexec_template + {
'name' : 'systemd-report-sign-tsm',
'export' : files(
'report-sign-tsm.c',
),
'install' : have_standalone_binaries ? 'both' : 'yes',
},
]
-1
View File
@@ -19,7 +19,6 @@ executables += [
'shutdown.c',
) + shutdown_detach_sources,
'dependencies' : libmount_cflags,
'install' : have_standalone_binaries ? 'both' : 'yes',
},
test_template + {
'sources' : files('test-umount.c') +
-1
View File
@@ -10,6 +10,5 @@ executables += [
'public' : true,
'export' : files('sysusers.c'),
'dependencies' : libaudit_cflags,
'install' : have_standalone_binaries ? 'both' : 'yes',
},
]
-1
View File
@@ -16,7 +16,6 @@ executables += [
libacl_cflags,
libselinux_cflags,
],
'install' : have_standalone_binaries ? 'both' : 'yes',
},
test_template + {
'sources' : files('test-offline-passwd.c') +
+2 -2
View File
@@ -16,7 +16,7 @@ if conf.get('ENABLE_SYSUSERS') == 1
env : test_env,
suite : 'sysusers')
if have_standalone_binaries
if 'systemd-sysusers.standalone' in executables_by_name
exe = executables_by_name.get('systemd-sysusers.standalone')
test('test-sysusers.standalone',
test_sysusers_sh,
@@ -85,7 +85,7 @@ if want_tests != 'false' and conf.get('ENABLE_TMPFILES') == 1
depends : exe,
suite : 'tmpfiles')
if have_standalone_binaries
if 'systemd-tmpfiles.standalone' in executables_by_name
exe = executables_by_name.get('systemd-tmpfiles.standalone')
test('test-systemd-tmpfiles.standalone',
test_systemd_tmpfiles_py,