meson: support building .standalone variants for shared modules

Extend the module building logic to automatically generate '.standalone'
variants for non-NSS/PAM shared modules (such as cryptsetup tokens).

Like standalone executables, these are not built by default to keep
the base build time unaffected, but can be built explicitly on demand
via `ninja <module_name>.standalone`.
This commit is contained in:
Yu Watanabe
2026-07-10 16:29:54 +09:00
parent 1f76654f94
commit 39d00e1d20
2 changed files with 35 additions and 1 deletions
+35
View File
@@ -2525,6 +2525,7 @@ test_dlopen = executables_by_name.get('test-dlopen')
nss_targets = []
pam_targets = []
module_targets = []
modules_by_name = {}
foreach dict : modules
name = dict.get('name')
is_nss = name.startswith('nss_')
@@ -2570,6 +2571,40 @@ foreach dict : modules
)
module_targets += lib
modules_by_name += { name : lib }
if not is_nss and not is_pam
# Typically for cryptsetup token modules.
name_static = name + '.standalone'
kwargs_static = kwargs
link_with_static = []
foreach obj : kwargs_static.get('link_with', [])
if obj.full_path() == libshared.full_path()
link_with_static += [
libshared_static,
libsystemd_static,
]
else
link_with_static += obj
endif
endforeach
kwargs_static += {
'link_with' : link_with_static,
'install' : false,
'build_by_default' : false,
}
lib_static = shared_library(
name_static,
kwargs : kwargs_static,
implicit_include_directories : false,
)
modules_by_name += { name_static : lib_static }
endif
if is_nss
# We cannot use shared_module because it does not support version suffix.
@@ -9,7 +9,6 @@ lib_cryptsetup_token_common = static_library(
libcryptsetup_cflags,
userspace,
],
link_with : libshared,
build_by_default : false)
cryptsetup_token_systemd_tpm2_sources = files(