]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
cryptsetup: optionally remove key file after use
[thirdparty/systemd.git] / meson.build
CommitLineData
3a726fcd 1# SPDX-License-Identifier: LGPL-2.1+
3a726fcd 2
5c23128d 3project('systemd', 'c',
384db814 4 version : '245',
5c23128d
ZJS
5 license : 'LGPLv2+',
6 default_options: [
37efbbd8
ZJS
7 'c_std=gnu99',
8 'prefix=/usr',
9 'sysconfdir=/etc',
10 'localstatedir=/var',
827ca909 11 'warning_level=2',
5c23128d 12 ],
7a6397d2 13 meson_version : '>= 0.46',
5c23128d
ZJS
14 )
15
384db814
ZJS
16libsystemd_version = '0.28.0'
17libudev_version = '1.6.17'
56d50ab1 18
348b4437 19# We need the same data in two different formats, ugh!
5c23128d
ZJS
20# Also, for hysterical reasons, we use different variable
21# names, sometimes. Not all variables are included in every
22# set. Ugh, ugh, ugh!
23conf = configuration_data()
6ffeca8c
ZJS
24conf.set('PROJECT_VERSION', meson.project_version(),
25 description : 'Numerical project version (used where a simple number is expected)')
5c23128d
ZJS
26
27substs = configuration_data()
a67c318d 28substs.set('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
6ffeca8c
ZJS
29substs.set('PROJECT_VERSION', meson.project_version(),
30 description : 'Numerical project version (used where a simple number is expected)')
5c23128d 31
1485aacb
DC
32# This is to be used instead of meson.source_root(), as the latter will return
33# the wrong result when systemd is being built as a meson subproject
34project_source_root = meson.current_source_dir()
81e06775 35project_build_root = meson.current_build_dir()
a0b15b41 36relative_source_path = run_command('realpath',
81e06775 37 '--relative-to=@0@'.format(project_build_root),
a0b15b41
ZJS
38 project_source_root).stdout().strip()
39conf.set_quoted('RELATIVE_SOURCE_PATH', relative_source_path)
1485aacb 40
c09edc79
ZJS
41want_ossfuzz = get_option('oss-fuzz')
42want_libfuzzer = get_option('llvm-fuzz')
6b8d32ea
EV
43if want_ossfuzz + want_libfuzzer > 1
44 error('only one of oss-fuzz or llvm-fuzz can be specified')
c09edc79 45endif
87ac55a1
EV
46
47skip_deps = want_ossfuzz or want_libfuzzer
6b8d32ea 48fuzzer_build = want_ossfuzz or want_libfuzzer
c09edc79 49
5c23128d
ZJS
50#####################################################################
51
003c8879 52# Try to install the git pre-commit hook
e2d612a8
ZJS
53add_git_hook_sh = find_program('tools/add-git-hook.sh', required : false)
54if add_git_hook_sh.found()
55 git_hook = run_command(add_git_hook_sh)
56 if git_hook.returncode() == 0
57 message(git_hook.stdout().strip())
58 endif
003c8879
ZJS
59endif
60
61#####################################################################
62
2675413e
ZJS
63if get_option('split-usr') == 'auto'
64 split_usr = run_command('test', '-L', '/bin').returncode() != 0
65else
66 split_usr = get_option('split-usr') == 'true'
67endif
671f0f8d
ZJS
68conf.set10('HAVE_SPLIT_USR', split_usr,
69 description : '/usr/bin and /bin directories are separate')
9a8e64b0 70
157baa87
ZJS
71if get_option('split-bin') == 'auto'
72 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
73else
74 split_bin = get_option('split-bin') == 'true'
75endif
671f0f8d
ZJS
76conf.set10('HAVE_SPLIT_BIN', split_bin,
77 description : 'bin and sbin directories are separate')
157baa87 78
74344a17 79rootprefixdir = get_option('rootprefix')
74344a17
ZJS
80# Unusual rootprefixdir values are used by some distros
81# (see https://github.com/systemd/systemd/pull/7461).
ba7f4ae6 82rootprefix_default = split_usr ? '/' : '/usr'
9a8e64b0
ZJS
83if rootprefixdir == ''
84 rootprefixdir = rootprefix_default
74344a17 85endif
23bdba61 86rootprefixdir_noslash = rootprefixdir == '/' ? '' : rootprefixdir
5c23128d
ZJS
87
88sysvinit_path = get_option('sysvinit-path')
89sysvrcnd_path = get_option('sysvrcnd-path')
348b4437 90conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
349cc4a5 91 description : 'SysV init scripts and rcN.d links are supported')
5c23128d 92
cdf7ad38
NL
93if get_option('hibernate') and not get_option('initrd')
94 error('hibernate depends on initrd')
95endif
96
a8b627aa
LP
97conf.set10('BUMP_PROC_SYS_FS_FILE_MAX', get_option('bump-proc-sys-fs-file-max'))
98conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
09dad04c 99conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
a8b627aa 100
23bdba61 101# join_paths ignores the preceding arguments if an absolute component is
5c23128d
ZJS
102# encountered, so this should canonicalize various paths when they are
103# absolute or relative.
104prefixdir = get_option('prefix')
105if not prefixdir.startswith('/')
37efbbd8 106 error('Prefix is not absolute: "@0@"'.format(prefixdir))
5c23128d
ZJS
107endif
108bindir = join_paths(prefixdir, get_option('bindir'))
109libdir = join_paths(prefixdir, get_option('libdir'))
110sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
111includedir = join_paths(prefixdir, get_option('includedir'))
112datadir = join_paths(prefixdir, get_option('datadir'))
113localstatedir = join_paths('/', get_option('localstatedir'))
114
115rootbindir = join_paths(rootprefixdir, 'bin')
157baa87 116rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
5c23128d
ZJS
117rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
118
119rootlibdir = get_option('rootlibdir')
120if rootlibdir == ''
37efbbd8 121 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
5c23128d
ZJS
122endif
123
124# Dirs of external packages
a95696e3
BM
125pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
126pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
e17e5ba9
MB
127polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
128polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
129polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
e17e5ba9 130xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
8a38aac3
YW
131rpmmacrosdir = get_option('rpmmacrosdir')
132if rpmmacrosdir != 'no'
133 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
134endif
02fa054d 135modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
5c23128d
ZJS
136
137# Our own paths
e17e5ba9
MB
138pkgdatadir = join_paths(datadir, 'systemd')
139environmentdir = join_paths(prefixdir, 'lib/environment.d')
140pkgsysconfdir = join_paths(sysconfdir, 'systemd')
141userunitdir = join_paths(prefixdir, 'lib/systemd/user')
142userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
143tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
144sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
145sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
146binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
147modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
148networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
149pkgincludedir = join_paths(includedir, 'systemd')
150systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
151usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
152systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
153userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
154systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
155systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
156systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
157systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
158udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
e17e5ba9
MB
159udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
160udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
161catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
162kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
163factorydir = join_paths(datadir, 'factory')
e17e5ba9
MB
164bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
165testsdir = join_paths(prefixdir, 'lib/systemd/tests')
166systemdstatedir = join_paths(localstatedir, 'lib/systemd')
167catalogstatedir = join_paths(systemdstatedir, 'catalog')
168randomseeddir = join_paths(localstatedir, 'lib/systemd')
61d0578b 169profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
e5ea741c 170ntpservicelistdir = join_paths(rootprefixdir, 'lib/systemd/ntp-units.d')
5c23128d 171
75aaade1
TB
172docdir = get_option('docdir')
173if docdir == ''
174 docdir = join_paths(datadir, 'doc/systemd')
175endif
176
5c23128d
ZJS
177dbuspolicydir = get_option('dbuspolicydir')
178if dbuspolicydir == ''
37efbbd8 179 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
5c23128d
ZJS
180endif
181
182dbussessionservicedir = get_option('dbussessionservicedir')
183if dbussessionservicedir == ''
37efbbd8 184 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
5c23128d
ZJS
185endif
186
187dbussystemservicedir = get_option('dbussystemservicedir')
188if dbussystemservicedir == ''
37efbbd8 189 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
5c23128d
ZJS
190endif
191
192pamlibdir = get_option('pamlibdir')
193if pamlibdir == ''
37efbbd8 194 pamlibdir = join_paths(rootlibdir, 'security')
5c23128d
ZJS
195endif
196
197pamconfdir = get_option('pamconfdir')
198if pamconfdir == ''
37efbbd8 199 pamconfdir = join_paths(sysconfdir, 'pam.d')
5c23128d
ZJS
200endif
201
444d5863 202memory_accounting_default = get_option('memory-accounting-default')
36cf4507 203status_unit_format_default = get_option('status-unit-format-default')
444d5863 204
5c23128d 205conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
96d33e4a 206conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'system'))
5c23128d
ZJS
207conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
208conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
209conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
2a4c156d 210conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
96164a39 211
f7c5427c 212conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
96164a39 213
96d33e4a
ZJS
214conf.set_quoted('USER_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'user'))
215conf.set_quoted('USER_DATA_UNIT_DIR', userunitdir)
5c23128d 216conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
e17e5ba9
MB
217conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
218conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
219conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
220conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
da495a03 221conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
7f2806d5 222conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
e17e5ba9 223conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
e17e5ba9
MB
224conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
225conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
226conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
74344a17 227conf.set_quoted('ROOTPREFIX', rootprefixdir)
3131bfe3 228conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
e17e5ba9
MB
229conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
230conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
96d33e4a
ZJS
231conf.set_quoted('SYSTEM_GENERATOR_DIR', systemgeneratordir)
232conf.set_quoted('USER_GENERATOR_DIR', usergeneratordir)
233conf.set_quoted('SYSTEM_ENV_GENERATOR_DIR', systemenvgeneratordir)
234conf.set_quoted('USER_ENV_GENERATOR_DIR', userenvgeneratordir)
5c23128d
ZJS
235conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
236conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
e17e5ba9
MB
237conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
238conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
e2d41370 239conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
49cdae63 240conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
5c23128d 241conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
e17e5ba9 242conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
5c23128d
ZJS
243conf.set_quoted('LIBDIR', libdir)
244conf.set_quoted('ROOTLIBDIR', rootlibdir)
245conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
246conf.set_quoted('BOOTLIBDIR', bootlibdir)
e17e5ba9
MB
247conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
248conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
1d7579c4 249conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
e17e5ba9
MB
250conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
251conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
252conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
253conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
70a5db58 254conf.set_quoted('SYSTEMD_HOMEWORK_PATH', join_paths(rootlibexecdir, 'systemd-homework'))
d093b62c 255conf.set_quoted('SYSTEMD_USERWORK_PATH', join_paths(rootlibexecdir, 'systemd-userwork'))
30538ff1 256conf.set10('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default)
7f672e86 257conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
36cf4507 258conf.set('STATUS_UNIT_FORMAT_DEFAULT', 'STATUS_UNIT_FORMAT_' + status_unit_format_default.to_upper())
5c23128d 259
5c23128d 260substs.set('prefix', prefixdir)
1c2c7c6c 261substs.set('rootprefix', rootprefixdir)
23bdba61 262substs.set('rootprefix_noslash', rootprefixdir_noslash)
3131bfe3
ZJS
263substs.set('exec_prefix', prefixdir)
264substs.set('libdir', libdir)
265substs.set('rootlibdir', rootlibdir)
266substs.set('includedir', includedir)
1c2c7c6c 267substs.set('sysconfdir', sysconfdir)
3131bfe3
ZJS
268substs.set('bindir', bindir)
269substs.set('rootbindir', rootbindir)
5c23128d
ZJS
270substs.set('rootlibexecdir', rootlibexecdir)
271substs.set('systemunitdir', systemunitdir)
272substs.set('userunitdir', userunitdir)
273substs.set('systempresetdir', systempresetdir)
274substs.set('userpresetdir', userpresetdir)
275substs.set('udevhwdbdir', udevhwdbdir)
276substs.set('udevrulesdir', udevrulesdir)
3131bfe3 277substs.set('udevlibexecdir', udevlibexecdir)
424e80b4 278substs.set('environmentdir', environmentdir)
5c23128d
ZJS
279substs.set('catalogdir', catalogdir)
280substs.set('tmpfilesdir', tmpfilesdir)
281substs.set('sysusersdir', sysusersdir)
282substs.set('sysctldir', sysctldir)
283substs.set('binfmtdir', binfmtdir)
284substs.set('modulesloaddir', modulesloaddir)
424e80b4 285substs.set('modprobedir', modprobedir)
5c23128d
ZJS
286substs.set('systemgeneratordir', systemgeneratordir)
287substs.set('usergeneratordir', usergeneratordir)
288substs.set('systemenvgeneratordir', systemenvgeneratordir)
289substs.set('userenvgeneratordir', userenvgeneratordir)
290substs.set('systemshutdowndir', systemshutdowndir)
291substs.set('systemsleepdir', systemsleepdir)
2a4c156d 292substs.set('CERTIFICATEROOT', get_option('certificate-root'))
e17e5ba9 293substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
2a4c156d
ZJS
294substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
295substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
296substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
444d5863 297substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
36cf4507 298substs.set('STATUS_UNIT_FORMAT_DEFAULT', status_unit_format_default)
c02b6ee4 299substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
81e06775 300substs.set('BUILD_ROOT', project_build_root)
5c23128d
ZJS
301
302#####################################################################
303
304cc = meson.get_compiler('c')
305pkgconfig = import('pkgconfig')
dd1e33c8 306check_compilation_sh = find_program('tools/check-compilation.sh')
b68dfb9e 307meson_build_sh = find_program('tools/meson-build.sh')
5c23128d 308
d3da291e
ZJS
309want_tests = get_option('tests')
310slow_tests = want_tests != 'false' and get_option('slow-tests')
311install_tests = get_option('install-tests')
312
46e63a2a 313if add_languages('cpp', required : fuzzer_build)
3b2bdd62 314 # Used only for tests
e9f4f566
ZJS
315 cxx = meson.get_compiler('cpp')
316 cxx_cmd = ' '.join(cxx.cmd_array())
1b2acaa7 317else
9b0ca019 318 cxx_cmd = ''
94e2523b
ZJS
319endif
320
31e57a35 321if want_libfuzzer
9c5c4677
EV
322 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer', required : false)
323 if fuzzing_engine.found()
324 add_project_arguments('-fsanitize-coverage=trace-pc-guard,trace-cmp', language : 'c')
325 elif cc.has_argument('-fsanitize=fuzzer-no-link')
326 add_project_arguments('-fsanitize=fuzzer-no-link', language : 'c')
327 else
328 error('Looks like neither libFuzzer nor -fsanitize=fuzzer-no-link is supported')
329 endif
c09edc79 330elif want_ossfuzz
7db7d5b7
JR
331 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
332endif
333
e9f4f566
ZJS
334# Those generate many false positives, and we do not want to change the code to
335# avoid them.
336basic_disabled_warnings = [
337 '-Wno-unused-parameter',
338 '-Wno-missing-field-initializers',
339 '-Wno-unused-result',
340 '-Wno-format-signedness',
341]
e9f4f566 342
30a4ddff 343possible_cc_flags = [
30a4ddff
YW
344 '-Werror=undef',
345 '-Wlogical-op',
346 '-Wmissing-include-dirs',
347 '-Wold-style-definition',
348 '-Wpointer-arith',
349 '-Winit-self',
30a4ddff
YW
350 '-Wfloat-equal',
351 '-Wsuggest-attribute=noreturn',
352 '-Werror=missing-prototypes',
353 '-Werror=implicit-function-declaration',
354 '-Werror=missing-declarations',
355 '-Werror=return-type',
356 '-Werror=incompatible-pointer-types',
357 '-Werror=format=2',
358 '-Wstrict-prototypes',
359 '-Wredundant-decls',
360 '-Wmissing-noreturn',
361 '-Wimplicit-fallthrough=5',
362 '-Wshadow',
363 '-Wendif-labels',
364 '-Wstrict-aliasing=2',
365 '-Wwrite-strings',
366 '-Werror=overflow',
b05ecb8c 367 '-Werror=shift-count-overflow',
d28b67d4 368 '-Werror=shift-overflow=2',
30a4ddff
YW
369 '-Wdate-time',
370 '-Wnested-externs',
bf7efeb1
FB
371
372 # negative arguments are correctly detected starting with meson 0.46.
eed33623
ZJS
373 '-Wno-error=#warnings', # clang
374 '-Wno-string-plus-int', # clang
bf7efeb1 375
bf7efeb1
FB
376 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
377 # optimizations enabled, producing essentially false positives.
378 '-Wno-maybe-uninitialized',
379
30a4ddff
YW
380 '-ffast-math',
381 '-fno-common',
382 '-fdiagnostics-show-option',
383 '-fno-strict-aliasing',
384 '-fvisibility=hidden',
385 '-fstack-protector',
386 '-fstack-protector-strong',
387 '--param=ssp-buffer-size=4',
388]
389
390# --as-needed and --no-undefined are provided by meson by default,
391# run mesonconf to see what is enabled
392possible_link_flags = [
393 '-Wl,-z,relro',
394 '-Wl,-z,now',
68e70ac2 395 '-fstack-protector',
30a4ddff 396]
5c23128d 397
30a4ddff
YW
398if cc.get_id() == 'clang'
399 possible_cc_flags += [
400 '-Wno-typedef-redefinition',
401 '-Wno-gnu-variable-sized-type-not-at-end',
402 ]
403endif
404
405if get_option('buildtype') != 'debug'
406 possible_cc_flags += [
407 '-ffunction-sections',
408 '-fdata-sections',
409 ]
410
411 possible_link_flags += '-Wl,--gc-sections'
412endif
413
e9f4f566 414add_project_arguments(cc.get_supported_arguments(basic_disabled_warnings), language : 'c')
30a4ddff 415add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
7a6397d2 416add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
30a4ddff 417
94c0c5b7
ZJS
418have = cc.has_argument('-Wzero-length-bounds')
419conf.set10('HAVE_ZERO_LENGTH_BOUNDS', have)
420
9e70f2f8 421if cc.compiles('''
5c23128d
ZJS
422 #include <time.h>
423 #include <inttypes.h>
424 typedef uint64_t usec_t;
425 usec_t now(clockid_t clock);
426 int main(void) {
427 struct timespec now;
428 return 0;
429 }
38c1c96d 430''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
37efbbd8 431 add_project_arguments('-Werror=shadow', language : 'c')
5c23128d
ZJS
432endif
433
e9f4f566
ZJS
434if cxx_cmd != ''
435 add_project_arguments(cxx.get_supported_arguments(basic_disabled_warnings), language : 'cpp')
436endif
437
0e3cc902 438cpp = ' '.join(cc.cmd_array()) + ' -E'
9cc0e6e9 439
6695c200
ZJS
440has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
441
5c23128d
ZJS
442#####################################################################
443# compilation result tests
444
2c201c21
ZJS
445conf.set('_GNU_SOURCE', true)
446conf.set('__SANE_USERSPACE_TYPES__', true)
6695c200 447conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
5c23128d 448
5c23128d
ZJS
449conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
450conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
451conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
452conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
453
454decl_headers = '''
455#include <uchar.h>
4c2e1b39 456#include <sys/stat.h>
5c23128d 457'''
5c23128d
ZJS
458
459foreach decl : ['char16_t',
460 'char32_t',
4c2e1b39 461 'struct statx',
5c23128d 462 ]
2c201c21
ZJS
463
464 # We get -1 if the size cannot be determined
9c869d08
ZJS
465 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
466
467 if decl == 'struct statx'
468 if have
469 want_linux_stat_h = false
470 else
471 have = cc.sizeof(decl,
472 prefix : decl_headers + '#include <linux/stat.h>',
473 args : '-D_GNU_SOURCE') > 0
474 want_linux_stat_h = have
475 endif
476 endif
477
349cc4a5 478 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
5c23128d
ZJS
479endforeach
480
9c869d08 481conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
75720bff 482
5c23128d 483foreach ident : ['secure_getenv', '__secure_getenv']
349cc4a5 484 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
5c23128d
ZJS
485endforeach
486
487foreach ident : [
85db59b7 488 ['memfd_create', '''#include <sys/mman.h>'''],
7b961e40
LP
489 ['gettid', '''#include <sys/types.h>
490 #include <unistd.h>'''],
3c042add
LP
491 ['pivot_root', '''#include <stdlib.h>
492 #include <unistd.h>'''], # no known header declares pivot_root
85db59b7 493 ['name_to_handle_at', '''#include <sys/types.h>
37efbbd8
ZJS
494 #include <sys/stat.h>
495 #include <fcntl.h>'''],
85db59b7 496 ['setns', '''#include <sched.h>'''],
2acfd0ff
LP
497 ['renameat2', '''#include <stdio.h>
498 #include <fcntl.h>'''],
37efbbd8
ZJS
499 ['kcmp', '''#include <linux/kcmp.h>'''],
500 ['keyctl', '''#include <sys/types.h>
501 #include <keyutils.h>'''],
85db59b7 502 ['copy_file_range', '''#include <sys/syscall.h>
37efbbd8 503 #include <unistd.h>'''],
71e5200f
DM
504 ['bpf', '''#include <sys/syscall.h>
505 #include <unistd.h>'''],
4c2e1b39
LP
506 ['statx', '''#include <sys/types.h>
507 #include <sys/stat.h>
508 #include <unistd.h>'''],
aa484f35
ZJS
509 ['explicit_bzero' , '''#include <string.h>'''],
510 ['reallocarray', '''#include <malloc.h>'''],
b070c7c0
MS
511 ['set_mempolicy', '''#include <stdlib.h>
512 #include <unistd.h>'''],
513 ['get_mempolicy', '''#include <stdlib.h>
514 #include <unistd.h>'''],
5f152f43
LP
515 ['pidfd_send_signal', '''#include <stdlib.h>
516 #include <unistd.h>
517 #include <signal.h>
518 #include <sys/wait.h>'''],
519 ['pidfd_open', '''#include <stdlib.h>
520 #include <unistd.h>
521 #include <signal.h>
522 #include <sys/wait.h>'''],
5ead4e85
LP
523 ['rt_sigqueueinfo', '''#include <stdlib.h>
524 #include <unistd.h>
525 #include <signal.h>
526 #include <sys/wait.h>'''],
37efbbd8
ZJS
527]
528
85db59b7 529 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
4b9545f1 530 conf.set10('HAVE_' + ident[0].to_upper(), have)
5c23128d
ZJS
531endforeach
532
85db59b7 533if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
349cc4a5 534 conf.set10('USE_SYS_RANDOM_H', true)
4b9545f1 535 conf.set10('HAVE_GETRANDOM', true)
4984c8be
ZJS
536else
537 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
349cc4a5 538 conf.set10('USE_SYS_RANDOM_H', false)
4b9545f1 539 conf.set10('HAVE_GETRANDOM', have)
4984c8be
ZJS
540endif
541
5c23128d
ZJS
542#####################################################################
543
1485aacb
DC
544vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
545 project_source_root,
e1ca734e 546 get_option('version-tag'),
681bd2c5
ZJS
547 meson.project_version()]
548
d1084aa2
LT
549version_h = vcs_tag(
550 input : 'src/version/version.h.in',
551 output : 'version.h',
552 command: vcs_tagger)
553
554versiondep = declare_dependency(sources: version_h)
555
5c23128d 556sed = find_program('sed')
5c23128d 557awk = find_program('awk')
d730e2d1 558m4 = find_program('m4')
5c23128d 559stat = find_program('stat')
d68b342b 560git = find_program('git', required : false)
b68dfb9e 561env = find_program('env')
b1ffacb6 562perl = find_program('perl', required : false)
5c23128d 563
1485aacb 564meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
94e75a54 565mkdir_p = 'mkdir -p $DESTDIR/@0@'
d83f4f50
ZJS
566test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
567splash_bmp = files('test/splash.bmp')
94e75a54 568
5c23128d
ZJS
569# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
570# /usr/sbin, /sbin, and fall back to the default from middle column.
2fa645f1 571progs = [['quotaon', '/usr/sbin/quotaon' ],
5c23128d 572 ['quotacheck', '/usr/sbin/quotacheck' ],
5c23128d
ZJS
573 ['kmod', '/usr/bin/kmod' ],
574 ['kexec', '/usr/sbin/kexec' ],
575 ['sulogin', '/usr/sbin/sulogin' ],
576 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
577 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
578 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
579 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
6db90462 580 ['nologin', '/usr/sbin/nologin', ],
5c23128d
ZJS
581 ]
582foreach prog : progs
37efbbd8
ZJS
583 path = get_option(prog[0] + '-path')
584 if path != ''
585 message('Using @1@ for @0@'.format(prog[0], path))
586 else
587 exe = find_program(prog[0],
588 '/usr/sbin/' + prog[0],
589 '/sbin/' + prog[0],
590 required: false)
591 path = exe.found() ? exe.path() : prog[1]
592 endif
593 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
594 conf.set_quoted(name, path)
595 substs.set(name, path)
5c23128d
ZJS
596endforeach
597
2fa645f1
MG
598conf.set_quoted('TELINIT', get_option('telinit-path'))
599
1276a9f6 600if run_command('ln', '--relative', '--help').returncode() != 0
cd001016 601 error('ln does not support --relative (added in coreutils 8.16)')
1276a9f6 602endif
5c23128d
ZJS
603
604############################################################
605
606gperf = find_program('gperf')
607
608gperf_test_format = '''
609#include <string.h>
610const char * in_word_set(const char *, @0@);
611@1@
612'''
613gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
614gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
615gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
616if cc.compiles(gperf_test)
37efbbd8 617 gperf_len_type = 'size_t'
5c23128d 618else
37efbbd8
ZJS
619 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
620 if cc.compiles(gperf_test)
621 gperf_len_type = 'unsigned'
622 else
623 error('unable to determine gperf len type')
624 endif
5c23128d
ZJS
625endif
626message('gperf len type is @0@'.format(gperf_len_type))
37efbbd8
ZJS
627conf.set('GPERF_LEN_TYPE', gperf_len_type,
628 description : 'The type of gperf "len" parameter')
5c23128d
ZJS
629
630############################################################
631
632if not cc.has_header('sys/capability.h')
37efbbd8 633 error('POSIX caps headers not found')
5c23128d 634endif
9f555bba 635foreach header : ['crypt.h',
5c23128d
ZJS
636 'linux/memfd.h',
637 'linux/vm_sockets.h',
af8786b1 638 'sys/auxv.h',
5c23128d
ZJS
639 'valgrind/memcheck.h',
640 'valgrind/valgrind.h',
641 ]
2c201c21 642
349cc4a5
ZJS
643 conf.set10('HAVE_' + header.underscorify().to_upper(),
644 cc.has_header(header))
5c23128d
ZJS
645endforeach
646
647############################################################
648
eef4b800
ZJS
649fallback_hostname = get_option('fallback-hostname')
650if fallback_hostname == '' or fallback_hostname[0] == '.' or fallback_hostname[0] == '-'
651 error('Invalid fallback-hostname configuration')
652 # A more extensive test is done in test-hostname-util. Let's catch
653 # the most obvious errors here so we don't fail with an assert later.
654endif
655conf.set_quoted('FALLBACK_HOSTNAME', fallback_hostname)
656
5248e7e1
ZJS
657conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
658gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
5c23128d
ZJS
659
660default_hierarchy = get_option('default-hierarchy')
661conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
662 description : 'default cgroup hierarchy as string')
663if default_hierarchy == 'legacy'
37efbbd8 664 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
5c23128d 665elif default_hierarchy == 'hybrid'
37efbbd8 666 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
5c23128d 667else
37efbbd8 668 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
5c23128d
ZJS
669endif
670
06da5c63
ZJS
671default_net_naming_scheme = get_option('default-net-naming-scheme')
672conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
673
5c23128d 674time_epoch = get_option('time-epoch')
ac09340e 675if time_epoch == -1
6dbf352c
DJL
676 source_date_epoch = run_command('sh', ['-c', 'echo "$SOURCE_DATE_EPOCH"']).stdout().strip()
677 if source_date_epoch != ''
678 time_epoch = source_date_epoch.to_int()
679 else
680 NEWS = files('NEWS')
681 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
682 endif
5c23128d 683endif
5c23128d
ZJS
684conf.set('TIME_EPOCH', time_epoch)
685
686system_uid_max = get_option('system-uid-max')
ac09340e 687if system_uid_max == -1
37efbbd8
ZJS
688 system_uid_max = run_command(
689 awk,
2f62cf35
CMOF
690 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
691 '/etc/login.defs').stdout().strip()
692 if system_uid_max == ''
ac09340e
YW
693 system_uid_max = 999
694 else
695 system_uid_max = system_uid_max.to_int()
2f62cf35 696 endif
5c23128d 697endif
5c23128d
ZJS
698conf.set('SYSTEM_UID_MAX', system_uid_max)
699substs.set('systemuidmax', system_uid_max)
5c23128d 700
5c23128d 701system_gid_max = get_option('system-gid-max')
ac09340e 702if system_gid_max == -1
37efbbd8
ZJS
703 system_gid_max = run_command(
704 awk,
2f62cf35
CMOF
705 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
706 '/etc/login.defs').stdout().strip()
707 if system_gid_max == ''
ac09340e
YW
708 system_gid_max = 999
709 else
710 system_gid_max = system_gid_max.to_int()
2f62cf35 711 endif
5c23128d 712endif
5c23128d
ZJS
713conf.set('SYSTEM_GID_MAX', system_gid_max)
714substs.set('systemgidmax', system_gid_max)
5c23128d 715
ac09340e
YW
716dynamic_uid_min = get_option('dynamic-uid-min')
717dynamic_uid_max = get_option('dynamic-uid-max')
87d5e4f2
LP
718conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
719conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
720substs.set('dynamicuidmin', dynamic_uid_min)
721substs.set('dynamicuidmax', dynamic_uid_max)
722
ac09340e
YW
723container_uid_base_min = get_option('container-uid-base-min')
724container_uid_base_max = get_option('container-uid-base-max')
87d5e4f2
LP
725conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
726conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
727substs.set('containeruidbasemin', container_uid_base_min)
728substs.set('containeruidbasemax', container_uid_base_max)
729
afde4574
LP
730nobody_user = get_option('nobody-user')
731nobody_group = get_option('nobody-group')
732
2484bff3
CQ
733if not meson.is_cross_build()
734 getent_result = run_command('getent', 'passwd', '65534')
735 if getent_result.returncode() == 0
736 name = getent_result.stdout().split(':')[0]
737 if name != nobody_user
738 warning('\n' +
739 'The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) +
740 'Your build will result in an user table setup that is incompatible with the local system.')
741 endif
afde4574 742 endif
2484bff3
CQ
743 id_result = run_command('id', '-u', nobody_user)
744 if id_result.returncode() == 0
745 id = id_result.stdout().to_int()
746 if id != 65534
747 warning('\n' +
748 'The local user with the configured user name "@0@" of the nobody user does not have UID 65534 (it has @1@).\n'.format(nobody_user, id) +
749 'Your build will result in an user table setup that is incompatible with the local system.')
750 endif
afde4574 751 endif
afde4574 752
2484bff3
CQ
753 getent_result = run_command('getent', 'group', '65534')
754 if getent_result.returncode() == 0
755 name = getent_result.stdout().split(':')[0]
756 if name != nobody_group
757 warning('\n' +
758 'The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) +
759 'Your build will result in an group table setup that is incompatible with the local system.')
760 endif
afde4574 761 endif
2484bff3
CQ
762 id_result = run_command('id', '-g', nobody_group)
763 if id_result.returncode() == 0
764 id = id_result.stdout().to_int()
765 if id != 65534
766 warning('\n' +
767 'The local group with the configured group name "@0@" of the nobody group does not have UID 65534 (it has @1@).\n'.format(nobody_group, id) +
768 'Your build will result in an group table setup that is incompatible with the local system.')
769 endif
afde4574
LP
770 endif
771endif
8374cc62 772if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
8ea9fad7
YW
773 warning('\n' +
774 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
775 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
8374cc62 776endif
afde4574
LP
777
778conf.set_quoted('NOBODY_USER_NAME', nobody_user)
779conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
60712021
YW
780substs.set('NOBODY_USER_NAME', nobody_user)
781substs.set('NOBODY_GROUP_NAME', nobody_group)
87d5e4f2 782
5c23128d
ZJS
783tty_gid = get_option('tty-gid')
784conf.set('TTY_GID', tty_gid)
2a4c156d 785substs.set('TTY_GID', tty_gid)
5c23128d 786
84786b8e 787# Ensure provided GID argument is numeric, otherwise fallback to default assignment
ac09340e
YW
788users_gid = get_option('users-gid')
789substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
84786b8e 790
348b4437
YW
791conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
792conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
5c23128d 793
ace5e311
MB
794dev_kvm_mode = get_option('dev-kvm-mode')
795substs.set('DEV_KVM_MODE', dev_kvm_mode)
796conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
055a083a
MB
797group_render_mode = get_option('group-render-mode')
798substs.set('GROUP_RENDER_MODE', group_render_mode)
799conf.set10('GROUP_RENDER_UACCESS', group_render_mode != '0666')
5c23128d 800
2a4c156d
ZJS
801kill_user_processes = get_option('default-kill-user-processes')
802conf.set10('KILL_USER_PROCESSES', kill_user_processes)
c7f7e859 803conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
2a4c156d 804substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
5c23128d 805
829257d1
ZJS
806dns_servers = get_option('dns-servers')
807conf.set_quoted('DNS_SERVERS', dns_servers)
808substs.set('DNS_SERVERS', dns_servers)
5c23128d 809
829257d1
ZJS
810ntp_servers = get_option('ntp-servers')
811conf.set_quoted('NTP_SERVERS', ntp_servers)
812substs.set('NTP_SERVERS', ntp_servers)
5c23128d 813
8ca9e92c 814default_locale = get_option('default-locale')
03475e22 815if default_locale == ''
50f2fc77
JH
816 if not meson.is_cross_build()
817 choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
818 default_locale = run_command(choose_default_locale_sh).stdout().strip()
819 else
820 default_locale = 'C.UTF-8'
821 endif
03475e22 822endif
8ca9e92c
DR
823conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
824
5c23128d
ZJS
825conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
826
21d0dd5a 827service_watchdog = get_option('service-watchdog')
7bc9ea51
AZ
828watchdog_value = service_watchdog == '' ? '' : 'WatchdogSec=' + service_watchdog
829substs.set('SERVICE_WATCHDOG', watchdog_value)
21d0dd5a 830
3131bfe3
ZJS
831substs.set('SUSHELL', get_option('debug-shell'))
832substs.set('DEBUGTTY', get_option('debug-tty'))
93912e87 833conf.set_quoted('DEBUGTTY', get_option('debug-tty'))
3131bfe3 834
349cc4a5
ZJS
835enable_debug_hashmap = false
836enable_debug_mmap_cache = false
d6601495 837enable_debug_siphash = false
8f6b442a 838foreach name : get_option('debug-extra')
ad7aa760
YW
839 if name == 'hashmap'
840 enable_debug_hashmap = true
841 elif name == 'mmap-cache'
842 enable_debug_mmap_cache = true
d6601495
YW
843 elif name == 'siphash'
844 enable_debug_siphash = true
ad7aa760
YW
845 else
846 message('unknown debug option "@0@", ignoring'.format(name))
847 endif
848endforeach
349cc4a5
ZJS
849conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
850conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
d6601495 851conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
671677da 852
d18cb393 853conf.set10('VALGRIND', get_option('valgrind'))
fd5dec9a 854conf.set10('LOG_TRACE', get_option('log-trace'))
d18cb393 855
3602ca6f
ZJS
856default_user_path = get_option('user-path')
857if default_user_path != ''
858 conf.set_quoted('DEFAULT_USER_PATH', default_user_path)
5bc655cd
ZJS
859 default_user_path_display = default_user_path
860else
861 # meson 0.49 fails when ?: is used in .format()
862 default_user_path_display = '(same as system services)'
3602ca6f
ZJS
863endif
864
5bc655cd 865
5c23128d
ZJS
866#####################################################################
867
868threads = dependency('threads')
869librt = cc.find_library('rt')
870libm = cc.find_library('m')
871libdl = cc.find_library('dl')
872libcrypt = cc.find_library('crypt')
873
1800cc85
ZJS
874libcap = dependency('libcap', required : false)
875if not libcap.found()
876 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
877 libcap = cc.find_library('cap')
878endif
879
5c23128d 880libmount = dependency('mount',
c0b4b0f8 881 version : fuzzer_build ? '>= 0' : '>= 2.30')
5c23128d 882
e594a3b1
LP
883want_libfdisk = get_option('fdisk')
884if want_libfdisk != 'false' and not skip_deps
885 libfdisk = dependency('fdisk',
886 required : want_libfdisk == 'true')
887 have = libfdisk.found()
888else
889 have = false
890 libfdisk = []
891endif
892conf.set10('HAVE_LIBFDISK', have)
893
70a5db58
LP
894want_pwquality = get_option('pwquality')
895if want_pwquality != 'false' and not skip_deps
896 libpwquality = dependency('pwquality', required : want_pwquality == 'true')
897 have = libpwquality.found()
898else
899 have = false
900 libpwquality = []
901endif
902conf.set10('HAVE_PWQUALITY', have)
903
5c23128d 904want_seccomp = get_option('seccomp')
87ac55a1 905if want_seccomp != 'false' and not skip_deps
37efbbd8 906 libseccomp = dependency('libseccomp',
9f0e9c01 907 version : '>= 2.3.1',
37efbbd8 908 required : want_seccomp == 'true')
349cc4a5 909 have = libseccomp.found()
5c23128d 910else
349cc4a5 911 have = false
37efbbd8 912 libseccomp = []
5c23128d 913endif
349cc4a5 914conf.set10('HAVE_SECCOMP', have)
5c23128d
ZJS
915
916want_selinux = get_option('selinux')
87ac55a1 917if want_selinux != 'false' and not skip_deps
37efbbd8
ZJS
918 libselinux = dependency('libselinux',
919 version : '>= 2.1.9',
920 required : want_selinux == 'true')
349cc4a5 921 have = libselinux.found()
5c23128d 922else
349cc4a5 923 have = false
37efbbd8 924 libselinux = []
5c23128d 925endif
349cc4a5 926conf.set10('HAVE_SELINUX', have)
5c23128d
ZJS
927
928want_apparmor = get_option('apparmor')
87ac55a1 929if want_apparmor != 'false' and not skip_deps
37efbbd8
ZJS
930 libapparmor = dependency('libapparmor',
931 required : want_apparmor == 'true')
349cc4a5 932 have = libapparmor.found()
5c23128d 933else
349cc4a5 934 have = false
37efbbd8 935 libapparmor = []
5c23128d 936endif
349cc4a5 937conf.set10('HAVE_APPARMOR', have)
5c23128d 938
5c23128d
ZJS
939smack_run_label = get_option('smack-run-label')
940if smack_run_label != ''
37efbbd8 941 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
5c23128d
ZJS
942endif
943
3ca0cb73
ZJS
944want_polkit = get_option('polkit')
945install_polkit = false
946install_polkit_pkla = false
87ac55a1 947if want_polkit != 'false' and not skip_deps
37efbbd8 948 install_polkit = true
3ca0cb73 949
37efbbd8
ZJS
950 libpolkit = dependency('polkit-gobject-1',
951 required : false)
952 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
953 message('Old polkit detected, will install pkla files')
954 install_polkit_pkla = true
955 endif
3ca0cb73 956endif
349cc4a5 957conf.set10('ENABLE_POLKIT', install_polkit)
3ca0cb73 958
36f0387e 959want_acl = get_option('acl')
87ac55a1 960if want_acl != 'false' and not skip_deps
36f0387e 961 libacl = cc.find_library('acl', required : want_acl == 'true')
349cc4a5 962 have = libacl.found()
36f0387e 963else
349cc4a5 964 have = false
36f0387e
ZJS
965 libacl = []
966endif
349cc4a5 967conf.set10('HAVE_ACL', have)
36f0387e 968
5c23128d 969want_audit = get_option('audit')
87ac55a1 970if want_audit != 'false' and not skip_deps
37efbbd8 971 libaudit = dependency('audit', required : want_audit == 'true')
349cc4a5 972 have = libaudit.found()
5c23128d 973else
349cc4a5 974 have = false
37efbbd8 975 libaudit = []
5c23128d 976endif
349cc4a5 977conf.set10('HAVE_AUDIT', have)
5c23128d
ZJS
978
979want_blkid = get_option('blkid')
87ac55a1 980if want_blkid != 'false' and not skip_deps
37efbbd8 981 libblkid = dependency('blkid', required : want_blkid == 'true')
349cc4a5 982 have = libblkid.found()
5c23128d 983else
349cc4a5 984 have = false
37efbbd8 985 libblkid = []
5c23128d 986endif
349cc4a5 987conf.set10('HAVE_BLKID', have)
5c23128d
ZJS
988
989want_kmod = get_option('kmod')
87ac55a1 990if want_kmod != 'false' and not skip_deps
37efbbd8
ZJS
991 libkmod = dependency('libkmod',
992 version : '>= 15',
993 required : want_kmod == 'true')
349cc4a5 994 have = libkmod.found()
5c23128d 995else
349cc4a5 996 have = false
37efbbd8 997 libkmod = []
5c23128d 998endif
349cc4a5 999conf.set10('HAVE_KMOD', have)
5c23128d
ZJS
1000
1001want_pam = get_option('pam')
87ac55a1 1002if want_pam != 'false' and not skip_deps
37efbbd8
ZJS
1003 libpam = cc.find_library('pam', required : want_pam == 'true')
1004 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
349cc4a5 1005 have = libpam.found() and libpam_misc.found()
5c23128d 1006else
349cc4a5 1007 have = false
37efbbd8
ZJS
1008 libpam = []
1009 libpam_misc = []
5c23128d 1010endif
349cc4a5 1011conf.set10('HAVE_PAM', have)
5c23128d
ZJS
1012
1013want_microhttpd = get_option('microhttpd')
87ac55a1 1014if want_microhttpd != 'false' and not skip_deps
37efbbd8
ZJS
1015 libmicrohttpd = dependency('libmicrohttpd',
1016 version : '>= 0.9.33',
1017 required : want_microhttpd == 'true')
349cc4a5 1018 have = libmicrohttpd.found()
5c23128d 1019else
349cc4a5 1020 have = false
37efbbd8 1021 libmicrohttpd = []
5c23128d 1022endif
349cc4a5 1023conf.set10('HAVE_MICROHTTPD', have)
5c23128d
ZJS
1024
1025want_libcryptsetup = get_option('libcryptsetup')
87ac55a1 1026if want_libcryptsetup != 'false' and not skip_deps
37efbbd8 1027 libcryptsetup = dependency('libcryptsetup',
d90874b4 1028 version : '>= 2.0.1',
37efbbd8 1029 required : want_libcryptsetup == 'true')
349cc4a5 1030 have = libcryptsetup.found()
70a5db58
LP
1031
1032 conf.set10('HAVE_CRYPT_SET_METADATA_SIZE',
1033 have and cc.has_function('crypt_set_metadata_size', dependencies : libcryptsetup))
5c23128d 1034else
349cc4a5 1035 have = false
37efbbd8 1036 libcryptsetup = []
5c23128d 1037endif
349cc4a5 1038conf.set10('HAVE_LIBCRYPTSETUP', have)
5c23128d
ZJS
1039
1040want_libcurl = get_option('libcurl')
87ac55a1 1041if want_libcurl != 'false' and not skip_deps
37efbbd8
ZJS
1042 libcurl = dependency('libcurl',
1043 version : '>= 7.32.0',
1044 required : want_libcurl == 'true')
349cc4a5 1045 have = libcurl.found()
5c23128d 1046else
349cc4a5 1047 have = false
37efbbd8 1048 libcurl = []
5c23128d 1049endif
349cc4a5 1050conf.set10('HAVE_LIBCURL', have)
5c23128d
ZJS
1051
1052want_libidn = get_option('libidn')
87057e24
ZJS
1053want_libidn2 = get_option('libidn2')
1054if want_libidn == 'true' and want_libidn2 == 'true'
1055 error('libidn and libidn2 cannot be requested simultaneously')
1056endif
1057
1b931399
YW
1058if want_libidn2 != 'false' and want_libidn != 'true' and not skip_deps
1059 libidn = dependency('libidn2',
1060 required : want_libidn2 == 'true')
349cc4a5 1061 have = libidn.found()
87057e24 1062else
349cc4a5 1063 have = false
87057e24
ZJS
1064 libidn = []
1065endif
1b931399
YW
1066conf.set10('HAVE_LIBIDN2', have)
1067if not have and want_libidn != 'false' and not skip_deps
7f7ab228 1068 # libidn is used for both libidn and libidn2 objects
1b931399
YW
1069 libidn = dependency('libidn',
1070 required : want_libidn == 'true')
349cc4a5
ZJS
1071 have = libidn.found()
1072else
1073 have = false
5c23128d 1074endif
1b931399 1075conf.set10('HAVE_LIBIDN', have)
5c23128d
ZJS
1076
1077want_libiptc = get_option('libiptc')
87ac55a1 1078if want_libiptc != 'false' and not skip_deps
37efbbd8
ZJS
1079 libiptc = dependency('libiptc',
1080 required : want_libiptc == 'true')
349cc4a5 1081 have = libiptc.found()
5c23128d 1082else
349cc4a5 1083 have = false
37efbbd8 1084 libiptc = []
5c23128d 1085endif
349cc4a5 1086conf.set10('HAVE_LIBIPTC', have)
5c23128d
ZJS
1087
1088want_qrencode = get_option('qrencode')
87ac55a1 1089if want_qrencode != 'false' and not skip_deps
37efbbd8
ZJS
1090 libqrencode = dependency('libqrencode',
1091 required : want_qrencode == 'true')
349cc4a5 1092 have = libqrencode.found()
5c23128d 1093else
349cc4a5 1094 have = false
37efbbd8 1095 libqrencode = []
5c23128d 1096endif
349cc4a5 1097conf.set10('HAVE_QRENCODE', have)
5c23128d 1098
a44fb601 1099want_gcrypt = get_option('gcrypt')
87ac55a1 1100if want_gcrypt != 'false' and not skip_deps
a44fb601
ZJS
1101 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1102 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
349cc4a5 1103 have = libgcrypt.found() and libgpg_error.found()
a44fb601 1104else
349cc4a5
ZJS
1105 have = false
1106endif
1107if not have
1108 # link to neither of the libs if one is not found
a44fb601
ZJS
1109 libgcrypt = []
1110 libgpg_error = []
1111endif
349cc4a5 1112conf.set10('HAVE_GCRYPT', have)
a44fb601 1113
5c23128d 1114want_gnutls = get_option('gnutls')
87ac55a1 1115if want_gnutls != 'false' and not skip_deps
37efbbd8
ZJS
1116 libgnutls = dependency('gnutls',
1117 version : '>= 3.1.4',
1118 required : want_gnutls == 'true')
349cc4a5 1119 have = libgnutls.found()
5c23128d 1120else
349cc4a5 1121 have = false
37efbbd8 1122 libgnutls = []
5c23128d 1123endif
349cc4a5 1124conf.set10('HAVE_GNUTLS', have)
5c23128d 1125
096cbdce 1126want_openssl = get_option('openssl')
87ac55a1 1127if want_openssl != 'false' and not skip_deps
096cbdce
IT
1128 libopenssl = dependency('openssl',
1129 version : '>= 1.1.0',
1130 required : want_openssl == 'true')
1131 have = libopenssl.found()
1132else
1133 have = false
1134 libopenssl = []
1135endif
1136conf.set10('HAVE_OPENSSL', have)
1137
839fddbe
LP
1138want_p11kit = get_option('p11kit')
1139if want_p11kit != 'false' and not skip_deps
1140 libp11kit = dependency('p11-kit-1',
6164ec4c
ZJS
1141 version : '>= 0.23.3',
1142 required : want_p11kit == 'true')
839fddbe
LP
1143 have = libp11kit.found()
1144else
1145 have = false
1146 libp11kit = []
1147endif
1148conf.set10('HAVE_P11KIT', have)
1149
5c23128d 1150want_elfutils = get_option('elfutils')
87ac55a1 1151if want_elfutils != 'false' and not skip_deps
37efbbd8
ZJS
1152 libdw = dependency('libdw',
1153 required : want_elfutils == 'true')
349cc4a5 1154 have = libdw.found()
5c23128d 1155else
349cc4a5 1156 have = false
37efbbd8 1157 libdw = []
5c23128d 1158endif
349cc4a5 1159conf.set10('HAVE_ELFUTILS', have)
5c23128d
ZJS
1160
1161want_zlib = get_option('zlib')
87ac55a1 1162if want_zlib != 'false' and not skip_deps
37efbbd8
ZJS
1163 libz = dependency('zlib',
1164 required : want_zlib == 'true')
349cc4a5 1165 have = libz.found()
5c23128d 1166else
349cc4a5 1167 have = false
37efbbd8 1168 libz = []
5c23128d 1169endif
349cc4a5 1170conf.set10('HAVE_ZLIB', have)
5c23128d
ZJS
1171
1172want_bzip2 = get_option('bzip2')
87ac55a1 1173if want_bzip2 != 'false' and not skip_deps
37efbbd8
ZJS
1174 libbzip2 = cc.find_library('bz2',
1175 required : want_bzip2 == 'true')
349cc4a5 1176 have = libbzip2.found()
5c23128d 1177else
349cc4a5 1178 have = false
37efbbd8 1179 libbzip2 = []
5c23128d 1180endif
349cc4a5 1181conf.set10('HAVE_BZIP2', have)
5c23128d
ZJS
1182
1183want_xz = get_option('xz')
87ac55a1 1184if want_xz != 'false' and not skip_deps
37efbbd8
ZJS
1185 libxz = dependency('liblzma',
1186 required : want_xz == 'true')
349cc4a5 1187 have = libxz.found()
5c23128d 1188else
349cc4a5 1189 have = false
37efbbd8 1190 libxz = []
5c23128d 1191endif
349cc4a5 1192conf.set10('HAVE_XZ', have)
5c23128d
ZJS
1193
1194want_lz4 = get_option('lz4')
87ac55a1 1195if want_lz4 != 'false' and not skip_deps
37efbbd8 1196 liblz4 = dependency('liblz4',
e0a1d4b0 1197 version : '>= 1.3.0',
37efbbd8 1198 required : want_lz4 == 'true')
349cc4a5 1199 have = liblz4.found()
5c23128d 1200else
349cc4a5 1201 have = false
37efbbd8 1202 liblz4 = []
5c23128d 1203endif
349cc4a5 1204conf.set10('HAVE_LZ4', have)
5c23128d 1205
ef5924aa
NL
1206want_zstd = get_option('zstd')
1207if want_zstd != 'false' and not skip_deps
1208 libzstd = dependency('libzstd',
1209 required : want_zstd == 'true',
1210 version : '>= 1.4.0')
1211 have = libzstd.found()
1212else
1213 have = false
1214 libzstd = []
1215endif
1216conf.set10('HAVE_ZSTD', have)
1217
a44fb601 1218want_xkbcommon = get_option('xkbcommon')
87ac55a1 1219if want_xkbcommon != 'false' and not skip_deps
a44fb601
ZJS
1220 libxkbcommon = dependency('xkbcommon',
1221 version : '>= 0.3.0',
1222 required : want_xkbcommon == 'true')
349cc4a5 1223 have = libxkbcommon.found()
a44fb601 1224else
349cc4a5 1225 have = false
a44fb601
ZJS
1226 libxkbcommon = []
1227endif
349cc4a5 1228conf.set10('HAVE_XKBCOMMON', have)
a44fb601 1229
c4c978a0
ZJS
1230want_pcre2 = get_option('pcre2')
1231if want_pcre2 != 'false'
1232 libpcre2 = dependency('libpcre2-8',
1233 required : want_pcre2 == 'true')
1234 have = libpcre2.found()
1235else
1236 have = false
1237 libpcre2 = []
1238endif
1239conf.set10('HAVE_PCRE2', have)
1240
69e96427 1241want_glib = get_option('glib')
87ac55a1 1242if want_glib != 'false' and not skip_deps
37efbbd8
ZJS
1243 libglib = dependency('glib-2.0',
1244 version : '>= 2.22.0',
1245 required : want_glib == 'true')
1246 libgobject = dependency('gobject-2.0',
1247 version : '>= 2.22.0',
1248 required : want_glib == 'true')
1249 libgio = dependency('gio-2.0',
1250 required : want_glib == 'true')
2c201c21 1251 have = libglib.found() and libgobject.found() and libgio.found()
69e96427 1252else
349cc4a5 1253 have = false
37efbbd8
ZJS
1254 libglib = []
1255 libgobject = []
1256 libgio = []
69e96427 1257endif
349cc4a5 1258conf.set10('HAVE_GLIB', have)
69e96427
ZJS
1259
1260want_dbus = get_option('dbus')
87ac55a1 1261if want_dbus != 'false' and not skip_deps
37efbbd8
ZJS
1262 libdbus = dependency('dbus-1',
1263 version : '>= 1.3.2',
1264 required : want_dbus == 'true')
349cc4a5 1265 have = libdbus.found()
69e96427 1266else
349cc4a5 1267 have = false
37efbbd8 1268 libdbus = []
69e96427 1269endif
349cc4a5 1270conf.set10('HAVE_DBUS', have)
69e96427 1271
42303dcb 1272default_dnssec = get_option('default-dnssec')
87ac55a1 1273if skip_deps
b4081f3e
JR
1274 default_dnssec = 'no'
1275endif
349cc4a5 1276if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
42303dcb
YW
1277 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1278 default_dnssec = 'no'
1279endif
1280conf.set('DEFAULT_DNSSEC_MODE',
1281 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1282substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1283
56ddbf10
YW
1284dns_over_tls = get_option('dns-over-tls')
1285if dns_over_tls != 'false'
096cbdce
IT
1286 if dns_over_tls == 'openssl'
1287 have_gnutls = false
1288 else
38e053c5 1289 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.6.0'))
096cbdce
IT
1290 if dns_over_tls == 'gnutls' and not have_gnutls
1291 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1292 endif
56ddbf10 1293 endif
096cbdce
IT
1294 if dns_over_tls == 'gnutls' or have_gnutls
1295 have_openssl = false
1296 else
1297 have_openssl = conf.get('HAVE_OPENSSL') == 1
1298 if dns_over_tls != 'auto' and not have_openssl
1299 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
b349bc59 1300 error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
096cbdce
IT
1301 endif
1302 endif
1303 have = have_gnutls or have_openssl
56ddbf10 1304else
be5536a6
MO
1305 have = false
1306 have_gnutls = false
1307 have_openssl = false
56ddbf10
YW
1308endif
1309conf.set10('ENABLE_DNS_OVER_TLS', have)
096cbdce
IT
1310conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1311conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
56ddbf10 1312
c9299be2 1313default_dns_over_tls = get_option('default-dns-over-tls')
87ac55a1 1314if skip_deps
c9299be2 1315 default_dns_over_tls = 'no'
5d67a7ae 1316endif
56ddbf10 1317if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
4310bfc2 1318 message('default-dns-over-tls cannot be enabled or set to opportunistic when DNS-over-TLS support is disabled. Setting default-dns-over-tls to no.')
c9299be2 1319 default_dns_over_tls = 'no'
5d67a7ae 1320endif
c9299be2
IT
1321conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1322 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1323substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
5d67a7ae 1324
3614df05
ZJS
1325default_mdns = get_option('default-mdns')
1326conf.set('DEFAULT_MDNS_MODE',
1327 'RESOLVE_SUPPORT_' + default_mdns.to_upper())
1328substs.set('DEFAULT_MDNS_MODE', default_mdns)
1329
1330default_llmnr = get_option('default-llmnr')
1331conf.set('DEFAULT_LLMNR_MODE',
1332 'RESOLVE_SUPPORT_' + default_llmnr.to_upper())
1333substs.set('DEFAULT_LLMNR_MODE', default_llmnr)
1334
e594a3b1
LP
1335want_repart = get_option('repart')
1336if want_repart != 'false'
1337 have = (conf.get('HAVE_OPENSSL') == 1 and
1338 conf.get('HAVE_LIBFDISK') == 1)
1339 if want_repart == 'true' and not have
1340 error('repart support was requested, but dependencies are not available')
1341 endif
1342else
1343 have = false
1344endif
1345conf.set10('ENABLE_REPART', have)
1346
5c23128d 1347want_importd = get_option('importd')
4390be30 1348if want_importd != 'false'
349cc4a5
ZJS
1349 have = (conf.get('HAVE_LIBCURL') == 1 and
1350 conf.get('HAVE_ZLIB') == 1 and
349cc4a5
ZJS
1351 conf.get('HAVE_XZ') == 1 and
1352 conf.get('HAVE_GCRYPT') == 1)
1353 if want_importd == 'true' and not have
37efbbd8
ZJS
1354 error('importd support was requested, but dependencies are not available')
1355 endif
349cc4a5
ZJS
1356else
1357 have = false
5c23128d 1358endif
349cc4a5 1359conf.set10('ENABLE_IMPORTD', have)
5c23128d 1360
70a5db58
LP
1361want_homed = get_option('homed')
1362if want_homed != 'false'
1363 have = (conf.get('HAVE_OPENSSL') == 1 and
1364 conf.get('HAVE_LIBFDISK') == 1 and
1365 conf.get('HAVE_LIBCRYPTSETUP') == 1)
1366 if want_homed == 'true' and not have
1367 error('homed support was requested, but dependencies are not available')
1368 endif
1369else
1370 have = false
1371endif
1372conf.set10('ENABLE_HOMED', have)
1373
af06ddf5
YW
1374have = have and conf.get('HAVE_PAM') == 1
1375conf.set10('ENABLE_PAM_HOME', have)
1376
5c23128d 1377want_remote = get_option('remote')
4390be30 1378if want_remote != 'false'
349cc4a5
ZJS
1379 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1380 conf.get('HAVE_LIBCURL') == 1]
37efbbd8
ZJS
1381 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1382 # it's possible to build one without the other. Complain only if
5238e957 1383 # support was explicitly requested. The auxiliary files like sysusers
37efbbd8
ZJS
1384 # config should be installed when any of the programs are built.
1385 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1386 error('remote support was requested, but dependencies are not available')
1387 endif
349cc4a5
ZJS
1388 have = have_deps[0] or have_deps[1]
1389else
1390 have = false
5c23128d 1391endif
349cc4a5 1392conf.set10('ENABLE_REMOTE', have)
5c23128d 1393
a9149d87
ZJS
1394foreach term : ['utmp',
1395 'hibernate',
1396 'environment-d',
1397 'binfmt',
1398 'coredump',
9b4abc69 1399 'pstore',
a9149d87
ZJS
1400 'resolve',
1401 'logind',
1402 'hostnamed',
1403 'localed',
1404 'machined',
61d0578b 1405 'portabled',
d093b62c 1406 'userdb',
a9149d87
ZJS
1407 'networkd',
1408 'timedated',
1409 'timesyncd',
a9149d87
ZJS
1410 'firstboot',
1411 'randomseed',
1412 'backlight',
1413 'vconsole',
1414 'quotacheck',
1415 'sysusers',
1416 'tmpfiles',
1417 'hwdb',
1418 'rfkill',
1419 'ldconfig',
1420 'efi',
1421 'tpm',
1422 'ima',
1423 'smack',
1424 'gshadow',
1425 'idn',
cdf7ad38 1426 'initrd',
08540a95 1427 'nss-myhostname',
a9149d87
ZJS
1428 'nss-systemd']
1429 have = get_option(term)
1430 name = 'ENABLE_' + term.underscorify().to_upper()
1431 conf.set10(name, have)
5c23128d
ZJS
1432endforeach
1433
08540a95
YW
1434foreach tuple : [['nss-mymachines', 'machined'],
1435 ['nss-resolve', 'resolve']]
1436 want = get_option(tuple[0])
1437 if want != 'false'
1438 have = get_option(tuple[1])
1439 if want == 'true' and not have
1440 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1441 endif
1442 else
1443 have = false
1444 endif
1445 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1446 conf.set10(name, have)
1447endforeach
1448
1449enable_nss = false
1450foreach term : ['ENABLE_NSS_MYHOSTNAME',
1451 'ENABLE_NSS_MYMACHINES',
1452 'ENABLE_NSS_RESOLVE',
1453 'ENABLE_NSS_SYSTEMD']
1454 if conf.get(term) == 1
1455 enable_nss = true
1456 endif
1457endforeach
1458conf.set10('ENABLE_NSS', enable_nss)
1459
348b4437 1460conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
6129ec85 1461
69e96427 1462tests = []
7db7d5b7 1463fuzzers = []
69e96427 1464
b68dfb9e 1465conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
00d82c81 1466
5c23128d
ZJS
1467#####################################################################
1468
1469if get_option('efi')
37efbbd8 1470 efi_arch = host_machine.cpu_family()
b710072d 1471
6800fe7f 1472 if efi_arch == 'x86'
37efbbd8 1473 EFI_MACHINE_TYPE_NAME = 'ia32'
6800fe7f 1474 gnu_efi_arch = 'ia32'
37efbbd8
ZJS
1475 elif efi_arch == 'x86_64'
1476 EFI_MACHINE_TYPE_NAME = 'x64'
6800fe7f 1477 gnu_efi_arch = 'x86_64'
37efbbd8
ZJS
1478 elif efi_arch == 'arm'
1479 EFI_MACHINE_TYPE_NAME = 'arm'
6800fe7f 1480 gnu_efi_arch = 'arm'
37efbbd8
ZJS
1481 elif efi_arch == 'aarch64'
1482 EFI_MACHINE_TYPE_NAME = 'aa64'
6800fe7f 1483 gnu_efi_arch = 'aarch64'
37efbbd8
ZJS
1484 else
1485 EFI_MACHINE_TYPE_NAME = ''
6800fe7f 1486 gnu_efi_arch = ''
37efbbd8 1487 endif
5c23128d 1488
349cc4a5 1489 have = true
37efbbd8 1490 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
80c6fce8 1491
ac09340e 1492 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
349cc4a5
ZJS
1493else
1494 have = false
5c23128d 1495endif
349cc4a5 1496conf.set10('ENABLE_EFI', have)
5c23128d
ZJS
1497
1498#####################################################################
1499
1500config_h = configure_file(
37efbbd8
ZJS
1501 output : 'config.h',
1502 configuration : conf)
5c23128d 1503
348b4437
YW
1504meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1505
5c23128d 1506includes = include_directories('src/basic',
91b08bb0 1507 'src/boot',
c76dd733 1508 'src/home',
5c23128d
ZJS
1509 'src/shared',
1510 'src/systemd',
1511 'src/journal',
a38f7fec 1512 'src/journal-remote',
97d90615 1513 'src/nspawn',
5c23128d
ZJS
1514 'src/resolve',
1515 'src/timesync',
5c3376ef 1516 'src/time-wait-sync',
5c23128d
ZJS
1517 'src/login',
1518 'src/udev',
1519 'src/libudev',
1520 'src/core',
9e71f5d9 1521 'src/shutdown',
5c23128d
ZJS
1522 'src/libsystemd/sd-bus',
1523 'src/libsystemd/sd-device',
a137a1c3 1524 'src/libsystemd/sd-event',
5c23128d
ZJS
1525 'src/libsystemd/sd-hwdb',
1526 'src/libsystemd/sd-id128',
1527 'src/libsystemd/sd-netlink',
1528 'src/libsystemd/sd-network',
ceb26cdb 1529 'src/libsystemd/sd-resolve',
5c23128d 1530 'src/libsystemd-network',
2d4ceca8 1531 '.')
5c23128d
ZJS
1532
1533add_project_arguments('-include', 'config.h', language : 'c')
1534
6ec439fd
YW
1535generate_gperfs = find_program('tools/generate-gperfs.py')
1536
5c23128d
ZJS
1537subdir('po')
1538subdir('catalog')
1539subdir('src/systemd')
1540subdir('src/basic')
1541subdir('src/libsystemd')
1542subdir('src/libsystemd-network')
5c23128d 1543subdir('src/journal')
5c23128d 1544subdir('src/login')
5c23128d
ZJS
1545
1546libjournal_core = static_library(
37efbbd8
ZJS
1547 'journal-core',
1548 libjournal_core_sources,
1549 journald_gperf_c,
1550 include_directories : includes,
1551 install : false)
5c23128d 1552
1485aacb 1553libsystemd_sym_path = '@0@/@1@'.format(project_source_root, libsystemd_sym)
5c23128d 1554libsystemd = shared_library(
37efbbd8 1555 'systemd',
a5d8835c 1556 disable_mempool_c,
56d50ab1 1557 version : libsystemd_version,
37efbbd8
ZJS
1558 include_directories : includes,
1559 link_args : ['-shared',
1560 '-Wl,--version-script=' + libsystemd_sym_path],
34e221a5
ZJS
1561 link_with : [libbasic,
1562 libbasic_gcrypt],
5e3cec87
ZJS
1563 link_whole : [libsystemd_static,
1564 libjournal_client],
37efbbd8
ZJS
1565 dependencies : [threads,
1566 librt,
1567 libxz,
ef5924aa 1568 libzstd,
37efbbd8
ZJS
1569 liblz4],
1570 link_depends : libsystemd_sym,
1571 install : true,
1572 install_dir : rootlibdir)
5c23128d 1573
70848ecf
DC
1574static_libsystemd = get_option('static-libsystemd')
1575static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1576
1577install_libsystemd_static = static_library(
1578 'systemd',
1579 libsystemd_sources,
1580 journal_client_sources,
975464e0
ZJS
1581 basic_sources,
1582 basic_gcrypt_sources,
be44b572 1583 disable_mempool_c,
70848ecf 1584 include_directories : includes,
70848ecf
DC
1585 build_by_default : static_libsystemd != 'false',
1586 install : static_libsystemd != 'false',
1587 install_dir : rootlibdir,
1588 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1589 dependencies : [threads,
1590 librt,
1591 libxz,
ef5924aa 1592 libzstd,
70848ecf 1593 liblz4,
975464e0
ZJS
1594 libcap,
1595 libblkid,
1596 libmount,
1597 libselinux,
70848ecf
DC
1598 libgcrypt],
1599 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1600
6164ec4c 1601# Generate autosuspend rules
b61d777a
ML
1602make_autosuspend_rules_py = find_program('tools/make-autosuspend-rules.py')
1603
5c23128d
ZJS
1604############################################################
1605
83b6af36
ZJS
1606# binaries that have --help and are intended for use by humans,
1607# usually, but not always, installed in /bin.
1608public_programs = []
1609
1610subdir('src/libudev')
1611subdir('src/shared')
1612subdir('src/core')
9e71f5d9 1613subdir('src/shutdown')
83b6af36
ZJS
1614subdir('src/udev')
1615subdir('src/network')
1616
1617subdir('src/analyze')
1618subdir('src/journal-remote')
1619subdir('src/coredump')
9b4abc69 1620subdir('src/pstore')
83b6af36
ZJS
1621subdir('src/hostname')
1622subdir('src/import')
e594a3b1 1623subdir('src/partition')
83b6af36
ZJS
1624subdir('src/kernel-install')
1625subdir('src/locale')
1626subdir('src/machine')
61d0578b 1627subdir('src/portable')
d093b62c 1628subdir('src/userdb')
70a5db58 1629subdir('src/home')
83b6af36
ZJS
1630subdir('src/nspawn')
1631subdir('src/resolve')
1632subdir('src/timedate')
1633subdir('src/timesync')
1634subdir('src/vconsole')
83b6af36
ZJS
1635subdir('src/boot/efi')
1636
1637subdir('src/test')
7db7d5b7 1638subdir('src/fuzz')
ef2ad30a 1639subdir('rules.d')
83b6af36
ZJS
1640subdir('test')
1641
1642############################################################
1643
1644# only static linking apart from libdl, to make sure that the
1645# module is linked to all libraries that it uses.
1646test_dlopen = executable(
37efbbd8
ZJS
1647 'test-dlopen',
1648 test_dlopen_c,
a5d8835c 1649 disable_mempool_c,
37efbbd8
ZJS
1650 include_directories : includes,
1651 link_with : [libbasic],
fd1939fb
YW
1652 dependencies : [libdl],
1653 build_by_default : want_tests != 'false')
83b6af36 1654
08540a95 1655foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
1684c56f 1656 ['systemd', 'ENABLE_NSS_SYSTEMD', 'src/nss-systemd/userdb-glue.c src/nss-systemd/userdb-glue.h'],
08540a95
YW
1657 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1658 ['resolve', 'ENABLE_NSS_RESOLVE']]
5c23128d 1659
349cc4a5 1660 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1661 if condition
1662 module = tuple[0]
37efbbd8
ZJS
1663
1664 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1485aacb 1665 version_script_arg = join_paths(project_source_root, sym)
37efbbd8 1666
1684c56f
LP
1667 sources = ['src/nss-@0@/nss-@0@.c'.format(module)]
1668 if tuple.length() > 2
1669 sources += tuple[2].split()
1670 endif
1671
37efbbd8
ZJS
1672 nss = shared_library(
1673 'nss_' + module,
1684c56f 1674 sources,
a5d8835c 1675 disable_mempool_c,
37efbbd8
ZJS
1676 version : '2',
1677 include_directories : includes,
b4b36f44
LP
1678 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1679 link_args : ['-Wl,-z,nodelete',
1680 '-shared',
700805f6 1681 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1682 link_with : [libsystemd_static,
733cbd00 1683 libshared_static,
37efbbd8
ZJS
1684 libbasic],
1685 dependencies : [threads,
5486a31d 1686 librt],
37efbbd8
ZJS
1687 link_depends : sym,
1688 install : true,
1689 install_dir : rootlibdir)
1690
1691 # We cannot use shared_module because it does not support version suffix.
1692 # Unfortunately shared_library insists on creating the symlink…
1693 meson.add_install_script('sh', '-c',
1694 'rm $DESTDIR@0@/libnss_@1@.so'
1695 .format(rootlibdir, module))
1696
938be089
ZJS
1697 if want_tests != 'false'
1698 test('dlopen-nss_' + module,
1699 test_dlopen,
1700 # path to dlopen must include a slash
1701 args : nss.full_path())
1702 endif
37efbbd8 1703 endif
5c23128d
ZJS
1704endforeach
1705
1706############################################################
1707
6164ec4c
ZJS
1708executable(
1709 'systemd',
1710 systemd_sources,
1711 include_directories : includes,
1712 link_with : [libcore,
1713 libshared],
1714 dependencies : [versiondep,
1715 threads,
1716 librt,
1717 libseccomp,
1718 libselinux,
1719 libmount,
1720 libblkid],
1721 install_rpath : rootlibexecdir,
1722 install : true,
1723 install_dir : rootlibexecdir)
5c23128d 1724
ba7f4ae6
ZJS
1725meson.add_install_script(meson_make_symlink,
1726 join_paths(rootlibexecdir, 'systemd'),
1727 join_paths(rootsbindir, 'init'))
1728
6164ec4c
ZJS
1729public_programs += executable(
1730 'systemd-analyze',
1731 systemd_analyze_sources,
1732 include_directories : includes,
1733 link_with : [libcore,
1734 libshared],
1735 dependencies : [versiondep,
1736 threads,
1737 librt,
1738 libseccomp,
1739 libselinux,
1740 libmount,
1741 libblkid],
1742 install_rpath : rootlibexecdir,
1743 install : get_option('analyze'))
5c23128d 1744
6164ec4c
ZJS
1745executable(
1746 'systemd-journald',
1747 systemd_journald_sources,
1748 include_directories : includes,
1749 link_with : [libjournal_core,
1750 libshared],
1751 dependencies : [threads,
1752 libxz,
1753 liblz4,
ef5924aa
NL
1754 libselinux,
1755 libzstd],
6164ec4c
ZJS
1756 install_rpath : rootlibexecdir,
1757 install : true,
1758 install_dir : rootlibexecdir)
5c23128d 1759
6164ec4c
ZJS
1760public_programs += executable(
1761 'systemd-cat',
1762 systemd_cat_sources,
1763 include_directories : includes,
1764 link_with : [libjournal_core,
1765 libshared],
1766 dependencies : [threads],
1767 install_rpath : rootlibexecdir,
1768 install : true)
1769
1770public_programs += executable(
1771 'journalctl',
1772 journalctl_sources,
1773 include_directories : includes,
1774 link_with : [libshared],
1775 dependencies : [threads,
1776 libqrencode,
1777 libxz,
1778 liblz4,
ef5924aa
NL
1779 libpcre2,
1780 libzstd],
6164ec4c
ZJS
1781 install_rpath : rootlibexecdir,
1782 install : true,
1783 install_dir : rootbindir)
35a1ff4c 1784
6164ec4c
ZJS
1785executable(
1786 'systemd-getty-generator',
1787 'src/getty-generator/getty-generator.c',
1788 include_directories : includes,
1789 link_with : [libshared],
1790 install_rpath : rootlibexecdir,
1791 install : true,
1792 install_dir : systemgeneratordir)
5c23128d 1793
6164ec4c
ZJS
1794executable(
1795 'systemd-debug-generator',
1796 'src/debug-generator/debug-generator.c',
1797 include_directories : includes,
1798 link_with : [libshared],
1799 install_rpath : rootlibexecdir,
1800 install : true,
1801 install_dir : systemgeneratordir)
1802
1803executable(
1804 'systemd-run-generator',
1805 'src/run-generator/run-generator.c',
1806 include_directories : includes,
1807 link_with : [libshared],
1808 install_rpath : rootlibexecdir,
1809 install : true,
1810 install_dir : systemgeneratordir)
1811
1812executable(
1813 'systemd-fstab-generator',
1814 'src/fstab-generator/fstab-generator.c',
1815 include_directories : includes,
1816 link_with : [libcore_shared,
1817 libshared],
1818 install_rpath : rootlibexecdir,
1819 install : true,
1820 install_dir : systemgeneratordir)
5c23128d 1821
349cc4a5 1822if conf.get('ENABLE_ENVIRONMENT_D') == 1
6164ec4c
ZJS
1823 executable(
1824 '30-systemd-environment-d-generator',
1825 'src/environment-d-generator/environment-d-generator.c',
1826 include_directories : includes,
1827 link_with : [libshared],
1828 install_rpath : rootlibexecdir,
1829 install : true,
1830 install_dir : userenvgeneratordir)
7b76fce1 1831
37efbbd8
ZJS
1832 meson.add_install_script(meson_make_symlink,
1833 join_paths(sysconfdir, 'environment'),
1834 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1835endif
1836
349cc4a5 1837if conf.get('ENABLE_HIBERNATE') == 1
6164ec4c
ZJS
1838 executable(
1839 'systemd-hibernate-resume-generator',
1840 'src/hibernate-resume/hibernate-resume-generator.c',
1841 include_directories : includes,
1842 link_with : [libshared],
1843 install_rpath : rootlibexecdir,
1844 install : true,
1845 install_dir : systemgeneratordir)
1846
1847 executable(
1848 'systemd-hibernate-resume',
1849 'src/hibernate-resume/hibernate-resume.c',
1850 include_directories : includes,
1851 link_with : [libshared],
1852 install_rpath : rootlibexecdir,
1853 install : true,
1854 install_dir : rootlibexecdir)
37efbbd8
ZJS
1855endif
1856
349cc4a5 1857if conf.get('HAVE_BLKID') == 1
6164ec4c
ZJS
1858 executable(
1859 'systemd-gpt-auto-generator',
1860 'src/gpt-auto-generator/gpt-auto-generator.c',
1861 'src/shared/blkid-util.h',
1862 include_directories : includes,
1863 link_with : [libshared],
1864 dependencies : libblkid,
1865 install_rpath : rootlibexecdir,
1866 install : true,
1867 install_dir : systemgeneratordir)
1868
1869 public_programs += executable(
1870 'systemd-dissect',
1871 'src/dissect/dissect.c',
1872 include_directories : includes,
1873 link_with : [libshared],
1874 install_rpath : rootlibexecdir,
1875 install : true,
1876 install_dir : rootlibexecdir)
5c23128d
ZJS
1877endif
1878
1ec57f33 1879if conf.get('ENABLE_RESOLVE') == 1
6164ec4c
ZJS
1880 executable(
1881 'systemd-resolved',
1882 systemd_resolved_sources,
1883 include_directories : includes,
1884 link_with : [libshared,
1885 libbasic_gcrypt,
1886 libsystemd_resolve_core],
1887 dependencies : systemd_resolved_dependencies,
1888 install_rpath : rootlibexecdir,
1889 install : true,
1890 install_dir : rootlibexecdir)
1891
1892 public_programs += executable(
1893 'resolvectl',
1894 resolvectl_sources,
1895 include_directories : includes,
1896 link_with : [libshared,
1897 libbasic_gcrypt,
1898 libsystemd_resolve_core],
1899 dependencies : [threads,
1900 libgpg_error,
1901 libm,
1902 libidn],
1903 install_rpath : rootlibexecdir,
1904 install : true)
088c1363
LP
1905
1906 meson.add_install_script(meson_make_symlink,
6164ec4c
ZJS
1907 join_paths(bindir, 'resolvectl'),
1908 join_paths(rootsbindir, 'resolvconf'))
c2e84cab
YW
1909
1910 meson.add_install_script(meson_make_symlink,
6164ec4c
ZJS
1911 join_paths(bindir, 'resolvectl'),
1912 join_paths(bindir, 'systemd-resolve'))
5c23128d
ZJS
1913endif
1914
349cc4a5 1915if conf.get('ENABLE_LOGIND') == 1
6164ec4c
ZJS
1916 executable(
1917 'systemd-logind',
1918 systemd_logind_sources,
1919 include_directories : includes,
1920 link_with : [liblogind_core,
1921 libshared],
1922 dependencies : [threads,
1923 libacl],
1924 install_rpath : rootlibexecdir,
1925 install : true,
1926 install_dir : rootlibexecdir)
1927
1928 public_programs += executable(
1929 'loginctl',
1930 loginctl_sources,
1931 include_directories : includes,
1932 link_with : [libshared],
1933 dependencies : [threads,
1934 liblz4,
ef5924aa
NL
1935 libxz,
1936 libzstd],
6164ec4c
ZJS
1937 install_rpath : rootlibexecdir,
1938 install : true,
1939 install_dir : rootbindir)
1940
1941 public_programs += executable(
1942 'systemd-inhibit',
1943 'src/login/inhibit.c',
1944 include_directories : includes,
1945 link_with : [libshared],
1946 install_rpath : rootlibexecdir,
1947 install : true,
1948 install_dir : rootbindir)
37efbbd8 1949
349cc4a5 1950 if conf.get('HAVE_PAM') == 1
1485aacb 1951 version_script_arg = join_paths(project_source_root, pam_systemd_sym)
37efbbd8
ZJS
1952 pam_systemd = shared_library(
1953 'pam_systemd',
1954 pam_systemd_c,
1955 name_prefix : '',
1956 include_directories : includes,
1957 link_args : ['-shared',
1958 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1959 link_with : [libsystemd_static,
37efbbd8
ZJS
1960 libshared_static],
1961 dependencies : [threads,
1962 libpam,
1963 libpam_misc],
1964 link_depends : pam_systemd_sym,
1965 install : true,
1966 install_dir : pamlibdir)
1967
938be089
ZJS
1968 if want_tests != 'false'
1969 test('dlopen-pam_systemd',
1970 test_dlopen,
1971 # path to dlopen must include a slash
c1cd6743 1972 args : pam_systemd.full_path())
938be089 1973 endif
37efbbd8 1974 endif
005a29f2 1975
6164ec4c
ZJS
1976 executable(
1977 'systemd-user-runtime-dir',
1978 user_runtime_dir_sources,
1979 include_directories : includes,
1980 link_with : [libshared],
1981 install_rpath : rootlibexecdir,
1982 install : true,
1983 install_dir : rootlibexecdir)
07ee5adb 1984endif
a9f0f5e5 1985
349cc4a5 1986if conf.get('HAVE_PAM') == 1
6164ec4c
ZJS
1987 executable(
1988 'systemd-user-sessions',
1989 'src/user-sessions/user-sessions.c',
1990 include_directories : includes,
1991 link_with : [libshared],
1992 install_rpath : rootlibexecdir,
1993 install : true,
1994 install_dir : rootlibexecdir)
5c23128d
ZJS
1995endif
1996
349cc4a5 1997if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
6164ec4c
ZJS
1998 public_programs += executable(
1999 'bootctl',
2000 'src/boot/bootctl.c',
2001 include_directories : includes,
2002 link_with : [libshared],
2003 dependencies : [libblkid],
2004 install_rpath : rootlibexecdir,
2005 install : true)
2006
2007 public_programs += executable(
2008 'systemd-bless-boot',
2009 'src/boot/bless-boot.c',
2010 include_directories : includes,
2011 link_with : [libshared],
2012 dependencies : [libblkid],
2013 install_rpath : rootlibexecdir,
2014 install : true,
2015 install_dir : rootlibexecdir)
2016
2017 executable(
2018 'systemd-bless-boot-generator',
2019 'src/boot/bless-boot-generator.c',
2020 include_directories : includes,
2021 link_with : [libshared],
2022 install_rpath : rootlibexecdir,
2023 install : true,
2024 install_dir : systemgeneratordir)
2025endif
2026
2027executable(
2028 'systemd-boot-check-no-failures',
2029 'src/boot/boot-check-no-failures.c',
2030 include_directories : includes,
2031 link_with : [libshared],
2032 dependencies : [libblkid],
2033 install_rpath : rootlibexecdir,
2034 install : true,
2035 install_dir : rootlibexecdir)
005a29f2 2036
6164ec4c
ZJS
2037public_programs += executable(
2038 'systemd-socket-activate',
2039 'src/activate/activate.c',
2040 include_directories : includes,
2041 link_with : [libshared],
2042 dependencies : [threads],
2043 install_rpath : rootlibexecdir,
2044 install : true)
f3794366
FS
2045
2046if get_option('link-systemctl-shared')
2047 systemctl_link_with = [libshared]
2048else
2049 systemctl_link_with = [libsystemd_static,
2050 libshared_static,
2051 libjournal_client,
2052 libbasic_gcrypt]
2053endif
2054
6164ec4c
ZJS
2055public_programs += executable(
2056 'systemctl',
2057 'src/systemctl/systemctl.c',
2058 'src/systemctl/sysv-compat.h',
2059 'src/systemctl/sysv-compat.c',
2060 include_directories : includes,
2061 link_with : systemctl_link_with,
2062 dependencies : [threads,
2063 libcap,
2064 libselinux,
2065 libxz,
ef5924aa
NL
2066 liblz4,
2067 libzstd],
6164ec4c
ZJS
2068 install_rpath : rootlibexecdir,
2069 install : true,
2070 install_dir : rootbindir)
5c23128d 2071
61d0578b 2072if conf.get('ENABLE_PORTABLED') == 1
6164ec4c
ZJS
2073 executable(
2074 'systemd-portabled',
2075 systemd_portabled_sources,
2076 include_directories : includes,
2077 link_with : [libshared],
2078 dependencies : [threads],
2079 install_rpath : rootlibexecdir,
2080 install : true,
2081 install_dir : rootlibexecdir)
2082
2083 public_programs += executable(
2084 'portablectl',
2085 'src/portable/portablectl.c',
2086 include_directories : includes,
2087 link_with : [libshared],
2088 dependencies : [threads],
2089 install_rpath : rootlibexecdir,
2090 install : true,
2091 install_dir : rootbindir)
61d0578b
LP
2092endif
2093
d093b62c 2094if conf.get('ENABLE_USERDB') == 1
6164ec4c
ZJS
2095 executable(
2096 'systemd-userwork',
2097 systemd_userwork_sources,
2098 include_directories : includes,
2099 link_with : [libshared],
2100 dependencies : [threads],
2101 install_rpath : rootlibexecdir,
2102 install : true,
2103 install_dir : rootlibexecdir)
2104
2105 executable(
2106 'systemd-userdbd',
2107 systemd_userdbd_sources,
2108 include_directories : includes,
2109 link_with : [libshared],
2110 dependencies : [threads],
2111 install_rpath : rootlibexecdir,
2112 install : true,
2113 install_dir : rootlibexecdir)
2114
460e5af0 2115 public_programs += executable(
6164ec4c
ZJS
2116 'userdbctl',
2117 userdbctl_sources,
2118 include_directories : includes,
2119 link_with : [libshared],
2120 dependencies : [threads],
2121 install_rpath : rootlibexecdir,
2122 install : true,
2123 install_dir : rootbindir)
d093b62c
LP
2124endif
2125
70a5db58 2126if conf.get('ENABLE_HOMED') == 1
6164ec4c
ZJS
2127 executable(
2128 'systemd-homework',
2129 systemd_homework_sources,
2130 include_directories : includes,
2131 link_with : [libshared],
2132 dependencies : [threads,
2133 libcryptsetup,
2134 libblkid,
2135 libcrypt,
2136 libopenssl,
2137 libfdisk,
2138 libp11kit],
2139 install_rpath : rootlibexecdir,
2140 install : true,
2141 install_dir : rootlibexecdir)
2142
2143 executable(
2144 'systemd-homed',
2145 systemd_homed_sources,
2146 include_directories : includes,
2147 link_with : [libshared],
2148 dependencies : [threads,
2149 libcrypt,
2150 libopenssl,
2151 libpwquality],
2152 install_rpath : rootlibexecdir,
2153 install : true,
2154 install_dir : rootlibexecdir)
2155
460e5af0 2156 public_programs += executable(
6164ec4c
ZJS
2157 'homectl',
2158 homectl_sources,
2159 include_directories : includes,
2160 link_with : [libshared],
2161 dependencies : [threads,
2162 libcrypt,
2163 libopenssl,
2164 libp11kit,
2165 libpwquality],
2166 install_rpath : rootlibexecdir,
2167 install : true,
2168 install_dir : rootbindir)
26cf9fb7
LP
2169
2170 if conf.get('HAVE_PAM') == 1
2171 version_script_arg = join_paths(project_source_root, pam_systemd_home_sym)
2172 pam_systemd = shared_library(
2173 'pam_systemd_home',
2174 pam_systemd_home_c,
2175 name_prefix : '',
2176 include_directories : includes,
2177 link_args : ['-shared',
2178 '-Wl,--version-script=' + version_script_arg],
2179 link_with : [libsystemd_static,
2180 libshared_static],
2181 dependencies : [threads,
2182 libpam,
2183 libpam_misc,
2184 libcrypt],
2185 link_depends : pam_systemd_home_sym,
2186 install : true,
2187 install_dir : pamlibdir)
2188 endif
70a5db58
LP
2189endif
2190
ba7f4ae6
ZJS
2191foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
2192 meson.add_install_script(meson_make_symlink,
2193 join_paths(rootbindir, 'systemctl'),
2194 join_paths(rootsbindir, alias))
2195endforeach
2196
349cc4a5 2197if conf.get('ENABLE_BACKLIGHT') == 1
6164ec4c
ZJS
2198 executable(
2199 'systemd-backlight',
2200 'src/backlight/backlight.c',
2201 include_directories : includes,
2202 link_with : [libshared],
2203 install_rpath : rootlibexecdir,
2204 install : true,
2205 install_dir : rootlibexecdir)
5c23128d
ZJS
2206endif
2207
349cc4a5 2208if conf.get('ENABLE_RFKILL') == 1
6164ec4c
ZJS
2209 executable(
2210 'systemd-rfkill',
2211 'src/rfkill/rfkill.c',
2212 include_directories : includes,
2213 link_with : [libshared],
2214 install_rpath : rootlibexecdir,
2215 install : true,
2216 install_dir : rootlibexecdir)
2217endif
2218
2219executable(
2220 'systemd-system-update-generator',
2221 'src/system-update-generator/system-update-generator.c',
2222 include_directories : includes,
2223 link_with : [libshared],
2224 install_rpath : rootlibexecdir,
2225 install : true,
2226 install_dir : systemgeneratordir)
5c23128d 2227
349cc4a5 2228if conf.get('HAVE_LIBCRYPTSETUP') == 1
08669709
LP
2229 systemd_cryptsetup_sources = files('''
2230 src/cryptsetup/cryptsetup.c
2231 src/cryptsetup/cryptsetup-pkcs11.h
2232'''.split())
2233
2234 if conf.get('HAVE_P11KIT') == 1
2235 systemd_cryptsetup_sources += files('src/cryptsetup/cryptsetup-pkcs11.c')
2236 endif
2237
6164ec4c
ZJS
2238 executable(
2239 'systemd-cryptsetup',
2240 systemd_cryptsetup_sources,
2241 include_directories : includes,
2242 link_with : [libshared],
2243 dependencies : [libcryptsetup,
2244 libp11kit],
2245 install_rpath : rootlibexecdir,
2246 install : true,
2247 install_dir : rootlibexecdir)
2248
2249 executable(
2250 'systemd-cryptsetup-generator',
2251 'src/cryptsetup/cryptsetup-generator.c',
2252 include_directories : includes,
2253 link_with : [libshared],
2254 dependencies : [libcryptsetup],
2255 install_rpath : rootlibexecdir,
2256 install : true,
2257 install_dir : systemgeneratordir)
2258
2259 executable(
2260 'systemd-veritysetup',
2261 'src/veritysetup/veritysetup.c',
2262 include_directories : includes,
2263 link_with : [libshared],
2264 dependencies : [libcryptsetup],
2265 install_rpath : rootlibexecdir,
2266 install : true,
2267 install_dir : rootlibexecdir)
2268
2269 executable(
2270 'systemd-veritysetup-generator',
2271 'src/veritysetup/veritysetup-generator.c',
2272 include_directories : includes,
2273 link_with : [libshared],
2274 dependencies : [libcryptsetup],
2275 install_rpath : rootlibexecdir,
2276 install : true,
2277 install_dir : systemgeneratordir)
5c23128d
ZJS
2278endif
2279
349cc4a5 2280if conf.get('HAVE_SYSV_COMPAT') == 1
6164ec4c
ZJS
2281 executable(
2282 'systemd-sysv-generator',
2283 'src/sysv-generator/sysv-generator.c',
2284 include_directories : includes,
2285 link_with : [libshared],
2286 install_rpath : rootlibexecdir,
2287 install : true,
2288 install_dir : systemgeneratordir)
2289
2290 executable(
2291 'systemd-rc-local-generator',
2292 'src/rc-local-generator/rc-local-generator.c',
2293 include_directories : includes,
2294 link_with : [libshared],
2295 install_rpath : rootlibexecdir,
2296 install : true,
2297 install_dir : systemgeneratordir)
5c23128d
ZJS
2298endif
2299
349cc4a5 2300if conf.get('ENABLE_HOSTNAMED') == 1
6164ec4c
ZJS
2301 executable(
2302 'systemd-hostnamed',
2303 'src/hostname/hostnamed.c',
2304 include_directories : includes,
2305 link_with : [libshared],
2306 install_rpath : rootlibexecdir,
2307 install : true,
2308 install_dir : rootlibexecdir)
2309
2310 public_programs += executable(
2311 'hostnamectl',
2312 'src/hostname/hostnamectl.c',
2313 include_directories : includes,
2314 link_with : [libshared],
2315 install_rpath : rootlibexecdir,
2316 install : true)
5c23128d
ZJS
2317endif
2318
349cc4a5
ZJS
2319if conf.get('ENABLE_LOCALED') == 1
2320 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
2321 # logind will load libxkbcommon.so dynamically on its own
2322 deps = [libdl]
2323 else
2324 deps = []
2325 endif
2326
6164ec4c
ZJS
2327 executable(
2328 'systemd-localed',
2329 systemd_localed_sources,
2330 include_directories : includes,
2331 link_with : [libshared],
2332 dependencies : deps,
2333 install_rpath : rootlibexecdir,
2334 install : true,
2335 install_dir : rootlibexecdir)
2336
2337 public_programs += executable(
2338 'localectl',
2339 localectl_sources,
2340 include_directories : includes,
2341 link_with : [libshared],
2342 install_rpath : rootlibexecdir,
2343 install : true)
5c23128d
ZJS
2344endif
2345
349cc4a5 2346if conf.get('ENABLE_TIMEDATED') == 1
6164ec4c
ZJS
2347 executable(
2348 'systemd-timedated',
2349 'src/timedate/timedated.c',
2350 include_directories : includes,
2351 link_with : [libshared],
2352 install_rpath : rootlibexecdir,
2353 install : true,
2354 install_dir : rootlibexecdir)
6129ec85 2355endif
5c23128d 2356
6129ec85 2357if conf.get('ENABLE_TIMEDATECTL') == 1
6164ec4c
ZJS
2358 public_programs += executable(
2359 'timedatectl',
2360 'src/timedate/timedatectl.c',
2361 include_directories : includes,
2362 install_rpath : rootlibexecdir,
2363 link_with : [libshared],
2364 dependencies : [libm],
2365 install : true)
5c23128d
ZJS
2366endif
2367
349cc4a5 2368if conf.get('ENABLE_TIMESYNCD') == 1
fd74a13e
RS
2369 if get_option('link-timesyncd-shared')
2370 timesyncd_link_with = [libshared]
2371 else
2372 timesyncd_link_with = [libsystemd_static,
2373 libshared_static,
2374 libjournal_client,
2375 libbasic_gcrypt]
2376 endif
2377
6164ec4c
ZJS
2378 executable(
2379 'systemd-timesyncd',
2380 systemd_timesyncd_sources,
2381 include_directories : includes,
2382 link_with : [timesyncd_link_with],
2383 dependencies : [threads,
2384 libm],
2385 install_rpath : rootlibexecdir,
2386 install : true,
2387 install_dir : rootlibexecdir)
2388
2389 executable(
2390 'systemd-time-wait-sync',
2391 'src/time-wait-sync/time-wait-sync.c',
2392 include_directories : includes,
2393 link_with : [timesyncd_link_with],
2394 install_rpath : rootlibexecdir,
2395 install : true,
2396 install_dir : rootlibexecdir)
5c23128d
ZJS
2397endif
2398
349cc4a5 2399if conf.get('ENABLE_MACHINED') == 1
6164ec4c
ZJS
2400 executable(
2401 'systemd-machined',
2402 systemd_machined_sources,
2403 include_directories : includes,
2404 link_with : [libmachine_core,
2405 libshared],
2406 install_rpath : rootlibexecdir,
2407 install : true,
2408 install_dir : rootlibexecdir)
2409
2410 public_programs += executable(
2411 'machinectl',
2412 'src/machine/machinectl.c',
2413 include_directories : includes,
2414 link_with : [libshared],
2415 dependencies : [threads,
2416 libxz,
ef5924aa
NL
2417 liblz4,
2418 libzstd],
6164ec4c
ZJS
2419 install_rpath : rootlibexecdir,
2420 install : true,
2421 install_dir : rootbindir)
5c23128d
ZJS
2422endif
2423
349cc4a5 2424if conf.get('ENABLE_IMPORTD') == 1
6164ec4c
ZJS
2425 executable(
2426 'systemd-importd',
2427 systemd_importd_sources,
2428 include_directories : includes,
2429 link_with : [libshared],
2430 dependencies : [threads],
2431 install_rpath : rootlibexecdir,
2432 install : true,
2433 install_dir : rootlibexecdir)
2434
2435 systemd_pull = executable(
2436 'systemd-pull',
2437 systemd_pull_sources,
2438 include_directories : includes,
2439 link_with : [libshared],
2440 dependencies : [versiondep,
2441 libcurl,
2442 libz,
2443 libbzip2,
2444 libxz,
2445 libgcrypt],
2446 install_rpath : rootlibexecdir,
2447 install : true,
2448 install_dir : rootlibexecdir)
2449
2450 systemd_import = executable(
2451 'systemd-import',
2452 systemd_import_sources,
2453 include_directories : includes,
2454 link_with : [libshared],
2455 dependencies : [libcurl,
2456 libz,
2457 libbzip2,
2458 libxz],
2459 install_rpath : rootlibexecdir,
2460 install : true,
2461 install_dir : rootlibexecdir)
2462
2463 systemd_import_fs = executable(
2464 'systemd-import-fs',
2465 systemd_import_fs_sources,
2466 include_directories : includes,
2467 link_with : [libshared],
2468 install_rpath : rootlibexecdir,
2469 install : true,
2470 install_dir : rootlibexecdir)
2471
2472 systemd_export = executable(
2473 'systemd-export',
2474 systemd_export_sources,
2475 include_directories : includes,
2476 link_with : [libshared],
2477 dependencies : [libcurl,
2478 libz,
2479 libbzip2,
2480 libxz],
2481 install_rpath : rootlibexecdir,
2482 install : true,
2483 install_dir : rootlibexecdir)
1d7579c4
LP
2484
2485 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
37efbbd8
ZJS
2486endif
2487
349cc4a5 2488if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
6164ec4c
ZJS
2489 public_programs += executable(
2490 'systemd-journal-upload',
2491 systemd_journal_upload_sources,
2492 include_directories : includes,
2493 link_with : [libshared],
2494 dependencies : [versiondep,
2495 threads,
2496 libcurl,
2497 libgnutls,
2498 libxz,
ef5924aa
NL
2499 liblz4,
2500 libzstd],
6164ec4c
ZJS
2501 install_rpath : rootlibexecdir,
2502 install : true,
2503 install_dir : rootlibexecdir)
5c23128d
ZJS
2504endif
2505
349cc4a5 2506if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
6164ec4c
ZJS
2507 public_programs += executable(
2508 'systemd-journal-remote',
2509 systemd_journal_remote_sources,
2510 include_directories : includes,
2511 link_with : [libshared,
2512 libsystemd_journal_remote],
2513 dependencies : [threads,
2514 libmicrohttpd,
2515 libgnutls,
2516 libxz,
ef5924aa
NL
2517 liblz4,
2518 libzstd],
6164ec4c
ZJS
2519 install_rpath : rootlibexecdir,
2520 install : true,
2521 install_dir : rootlibexecdir)
2522
2523 public_programs += executable(
2524 'systemd-journal-gatewayd',
2525 systemd_journal_gatewayd_sources,
2526 include_directories : includes,
2527 link_with : [libshared],
2528 dependencies : [threads,
2529 libmicrohttpd,
2530 libgnutls,
2531 libxz,
ef5924aa
NL
2532 liblz4,
2533 libzstd],
6164ec4c
ZJS
2534 install_rpath : rootlibexecdir,
2535 install : true,
2536 install_dir : rootlibexecdir)
5c23128d
ZJS
2537endif
2538
349cc4a5 2539if conf.get('ENABLE_COREDUMP') == 1
6164ec4c
ZJS
2540 executable(
2541 'systemd-coredump',
2542 systemd_coredump_sources,
2543 include_directories : includes,
2544 link_with : [libshared],
2545 dependencies : [threads,
2546 libacl,
2547 libdw,
2548 libxz,
ef5924aa
NL
2549 liblz4,
2550 libzstd],
6164ec4c
ZJS
2551 install_rpath : rootlibexecdir,
2552 install : true,
2553 install_dir : rootlibexecdir)
2554
2555 public_programs += executable(
2556 'coredumpctl',
2557 coredumpctl_sources,
2558 include_directories : includes,
2559 link_with : [libshared],
2560 dependencies : [threads,
2561 libxz,
ef5924aa
NL
2562 liblz4,
2563 libzstd],
6164ec4c
ZJS
2564 install_rpath : rootlibexecdir,
2565 install : true)
5c23128d
ZJS
2566endif
2567
9b4abc69 2568if conf.get('ENABLE_PSTORE') == 1
6164ec4c
ZJS
2569 executable(
2570 'systemd-pstore',
2571 systemd_pstore_sources,
2572 include_directories : includes,
2573 link_with : [libshared],
2574 dependencies : [threads,
2575 libacl,
2576 libdw,
2577 libxz,
ef5924aa
NL
2578 liblz4,
2579 libzstd],
6164ec4c
ZJS
2580 install_rpath : rootlibexecdir,
2581 install : true,
2582 install_dir : rootlibexecdir)
9b4abc69
ED
2583endif
2584
349cc4a5 2585if conf.get('ENABLE_BINFMT') == 1
6164ec4c
ZJS
2586 public_programs += executable(
2587 'systemd-binfmt',
2588 'src/binfmt/binfmt.c',
2589 include_directories : includes,
2590 link_with : [libshared],
2591 install_rpath : rootlibexecdir,
2592 install : true,
2593 install_dir : rootlibexecdir)
37efbbd8
ZJS
2594
2595 meson.add_install_script('sh', '-c',
2596 mkdir_p.format(binfmtdir))
2597 meson.add_install_script('sh', '-c',
2598 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2599endif
2600
e594a3b1 2601if conf.get('ENABLE_REPART') == 1
6164ec4c
ZJS
2602 exe = executable(
2603 'systemd-repart',
2604 systemd_repart_sources,
2605 include_directories : includes,
2606 link_with : [libshared],
2607 dependencies : [threads,
2608 libcryptsetup,
2609 libblkid,
2610 libfdisk,
2611 libopenssl],
2612 install_rpath : rootlibexecdir,
2613 install : true,
2614 install_dir : rootbindir)
e29e4d57
ZJS
2615
2616 if want_tests != 'false'
2617 test('test-repart',
2618 test_repart_sh,
2619 args : exe.full_path())
2620 endif
e594a3b1
LP
2621endif
2622
349cc4a5 2623if conf.get('ENABLE_VCONSOLE') == 1
6164ec4c
ZJS
2624 executable(
2625 'systemd-vconsole-setup',
2626 'src/vconsole/vconsole-setup.c',
2627 include_directories : includes,
2628 link_with : [libshared],
2629 install_rpath : rootlibexecdir,
2630 install : true,
2631 install_dir : rootlibexecdir)
5c23128d
ZJS
2632endif
2633
349cc4a5 2634if conf.get('ENABLE_RANDOMSEED') == 1
6164ec4c
ZJS
2635 executable(
2636 'systemd-random-seed',
2637 'src/random-seed/random-seed.c',
2638 include_directories : includes,
2639 link_with : [libshared],
2640 install_rpath : rootlibexecdir,
2641 install : true,
2642 install_dir : rootlibexecdir)
5c23128d
ZJS
2643endif
2644
349cc4a5 2645if conf.get('ENABLE_FIRSTBOOT') == 1
6164ec4c
ZJS
2646 executable(
2647 'systemd-firstboot',
2648 'src/firstboot/firstboot.c',
2649 include_directories : includes,
2650 link_with : [libshared],
2651 dependencies : [libcrypt],
2652 install_rpath : rootlibexecdir,
2653 install : true,
2654 install_dir : rootbindir)
2655endif
2656
2657executable(
2658 'systemd-remount-fs',
2659 'src/remount-fs/remount-fs.c',
2660 include_directories : includes,
2661 link_with : [libcore_shared,
2662 libshared],
2663 install_rpath : rootlibexecdir,
2664 install : true,
2665 install_dir : rootlibexecdir)
5c23128d 2666
6164ec4c
ZJS
2667executable(
2668 'systemd-machine-id-setup',
2669 'src/machine-id-setup/machine-id-setup-main.c',
2670 include_directories : includes,
2671 link_with : [libcore_shared,
2672 libshared],
2673 install_rpath : rootlibexecdir,
2674 install : true,
2675 install_dir : rootbindir)
5c23128d 2676
6164ec4c
ZJS
2677executable(
2678 'systemd-fsck',
2679 'src/fsck/fsck.c',
2680 include_directories : includes,
2681 link_with : [libshared],
2682 install_rpath : rootlibexecdir,
2683 install : true,
2684 install_dir : rootlibexecdir)
5c23128d 2685
80750adb
ZJS
2686executable('systemd-growfs',
2687 'src/partition/growfs.c',
2688 include_directories : includes,
2689 link_with : [libshared],
c34b75a1 2690 dependencies : [libcryptsetup],
80750adb
ZJS
2691 install_rpath : rootlibexecdir,
2692 install : true,
2693 install_dir : rootlibexecdir)
2694
6164ec4c
ZJS
2695executable(
2696 'systemd-makefs',
2697 'src/partition/makefs.c',
2698 include_directories : includes,
2699 link_with : [libshared],
2700 install_rpath : rootlibexecdir,
2701 install : true,
2702 install_dir : rootlibexecdir)
b7f28ac5 2703
6164ec4c
ZJS
2704executable(
2705 'systemd-sleep',
2706 'src/sleep/sleep.c',
2707 include_directories : includes,
2708 link_with : [libshared],
2709 install_rpath : rootlibexecdir,
2710 install : true,
2711 install_dir : rootlibexecdir)
5c23128d 2712
d25e127d
YW
2713install_data('src/sleep/sleep.conf',
2714 install_dir : pkgsysconfdir)
2715
6164ec4c
ZJS
2716public_programs += executable(
2717 'systemd-sysctl',
2718 'src/sysctl/sysctl.c',
2719 include_directories : includes,
2720 link_with : [libshared],
2721 install_rpath : rootlibexecdir,
2722 install : true,
2723 install_dir : rootlibexecdir)
5c23128d 2724
6164ec4c
ZJS
2725executable(
2726 'systemd-ac-power',
2727 'src/ac-power/ac-power.c',
2728 include_directories : includes,
2729 link_with : [libshared],
2730 install_rpath : rootlibexecdir,
2731 install : true,
2732 install_dir : rootlibexecdir)
5c23128d 2733
6164ec4c
ZJS
2734public_programs += executable(
2735 'systemd-detect-virt',
2736 'src/detect-virt/detect-virt.c',
2737 include_directories : includes,
2738 link_with : [libshared],
2739 install_rpath : rootlibexecdir,
2740 install : true)
5c23128d 2741
6164ec4c
ZJS
2742public_programs += executable(
2743 'systemd-delta',
2744 'src/delta/delta.c',
2745 include_directories : includes,
2746 link_with : [libshared],
2747 install_rpath : rootlibexecdir,
2748 install : true)
5c23128d 2749
6164ec4c
ZJS
2750public_programs += executable(
2751 'systemd-escape',
2752 'src/escape/escape.c',
2753 include_directories : includes,
2754 link_with : [libshared],
2755 install_rpath : rootlibexecdir,
2756 install : true,
2757 install_dir : rootbindir)
2758
2759public_programs += executable(
2760 'systemd-notify',
2761 'src/notify/notify.c',
2762 include_directories : includes,
2763 link_with : [libshared],
2764 install_rpath : rootlibexecdir,
2765 install : true,
2766 install_dir : rootbindir)
2767
2768executable(
2769 'systemd-volatile-root',
2770 'src/volatile-root/volatile-root.c',
2771 include_directories : includes,
2772 link_with : [libshared],
2773 install_rpath : rootlibexecdir,
cdf7ad38 2774 install : conf.get('ENABLE_INITRD') == 1,
6164ec4c
ZJS
2775 install_dir : rootlibexecdir)
2776
2777executable(
2778 'systemd-cgroups-agent',
2779 'src/cgroups-agent/cgroups-agent.c',
2780 include_directories : includes,
2781 link_with : [libshared],
2782 install_rpath : rootlibexecdir,
2783 install : true,
2784 install_dir : rootlibexecdir)
2785
2786public_programs += executable(
2787 'systemd-id128',
2788 'src/id128/id128.c',
2789 include_directories : includes,
2790 link_with : [libshared],
2791 install_rpath : rootlibexecdir,
2792 install : true)
2793
2794public_programs += executable(
2795 'systemd-path',
2796 'src/path/path.c',
2797 include_directories : includes,
2798 link_with : [libshared],
2799 install_rpath : rootlibexecdir,
2800 install : true)
2801
2802public_programs += executable(
2803 'systemd-ask-password',
2804 'src/ask-password/ask-password.c',
2805 include_directories : includes,
2806 link_with : [libshared],
2807 install_rpath : rootlibexecdir,
2808 install : true,
2809 install_dir : rootbindir)
2810
2811executable(
2812 'systemd-reply-password',
2813 'src/reply-password/reply-password.c',
2814 include_directories : includes,
2815 link_with : [libshared],
2816 install_rpath : rootlibexecdir,
2817 install : true,
2818 install_dir : rootlibexecdir)
2819
2820public_programs += executable(
2821 'systemd-tty-ask-password-agent',
2822 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2823 include_directories : includes,
2824 link_with : [libshared],
2825 install_rpath : rootlibexecdir,
2826 install : true,
2827 install_dir : rootbindir)
2828
2829public_programs += executable(
2830 'systemd-cgls',
2831 'src/cgls/cgls.c',
2832 include_directories : includes,
2833 link_with : [libshared],
2834 install_rpath : rootlibexecdir,
2835 install : true)
2836
2837public_programs += executable(
2838 'systemd-cgtop',
2839 'src/cgtop/cgtop.c',
2840 include_directories : includes,
2841 link_with : [libshared],
2842 install_rpath : rootlibexecdir,
2843 install : true)
2844
2845executable(
2846 'systemd-initctl',
2847 'src/initctl/initctl.c',
2848 include_directories : includes,
2849 link_with : [libshared],
2850 install_rpath : rootlibexecdir,
2851 install : true,
2852 install_dir : rootlibexecdir)
5c23128d 2853
6164ec4c
ZJS
2854public_programs += executable(
2855 'systemd-mount',
2856 'src/mount/mount-tool.c',
2857 include_directories : includes,
2858 link_with : [libshared],
2859 dependencies: [libmount],
2860 install_rpath : rootlibexecdir,
2861 install : true)
5c23128d 2862
7b76fce1 2863meson.add_install_script(meson_make_symlink,
e17e5ba9 2864 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2865
6164ec4c
ZJS
2866public_programs += executable(
2867 'systemd-run',
2868 'src/run/run.c',
2869 include_directories : includes,
2870 link_with : [libshared],
2871 install_rpath : rootlibexecdir,
2872 install : true)
2873
2874public_programs += executable(
2875 'systemd-stdio-bridge',
2876 'src/stdio-bridge/stdio-bridge.c',
2877 include_directories : includes,
2878 link_with : [libshared],
2879 dependencies : [versiondep],
2880 install_rpath : rootlibexecdir,
2881 install : true)
2882
2883public_programs += executable(
2884 'busctl',
2885 'src/busctl/busctl.c',
2886 'src/busctl/busctl-introspect.c',
2887 'src/busctl/busctl-introspect.h',
2888 include_directories : includes,
2889 link_with : [libshared],
2890 install_rpath : rootlibexecdir,
2891 install : true)
5c23128d 2892
349cc4a5 2893if conf.get('ENABLE_SYSUSERS') == 1
6164ec4c
ZJS
2894 public_programs += executable(
2895 'systemd-sysusers',
2896 'src/sysusers/sysusers.c',
2897 include_directories : includes,
2898 link_with : [libshared],
2899 install_rpath : rootlibexecdir,
2900 install : true,
2901 install_dir : rootbindir)
5c23128d
ZJS
2902endif
2903
349cc4a5 2904if conf.get('ENABLE_TMPFILES') == 1
6164ec4c
ZJS
2905 exe = executable(
2906 'systemd-tmpfiles',
2907 'src/tmpfiles/tmpfiles.c',
a3451c2c
LP
2908 'src/tmpfiles/offline-passwd.c',
2909 'src/tmpfiles/offline-passwd.h',
6164ec4c
ZJS
2910 include_directories : includes,
2911 link_with : [libshared],
2912 dependencies : [libacl],
2913 install_rpath : rootlibexecdir,
2914 install : true,
2915 install_dir : rootbindir)
5a8b1640 2916 public_programs += exe
d9daae55 2917
938be089
ZJS
2918 if want_tests != 'false'
2919 test('test-systemd-tmpfiles',
2920 test_systemd_tmpfiles_py,
2921 # https://github.com/mesonbuild/meson/issues/2681
2922 args : exe.full_path())
2923 endif
5c23128d
ZJS
2924endif
2925
349cc4a5 2926if conf.get('ENABLE_HWDB') == 1
6164ec4c
ZJS
2927 public_programs += executable(
2928 'systemd-hwdb',
2929 'src/hwdb/hwdb.c',
2930 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2931 include_directories : includes,
2932 link_with : [libudev_static],
2933 install_rpath : udev_rpath,
2934 install : true,
2935 install_dir : rootbindir)
37efbbd8
ZJS
2936endif
2937
349cc4a5 2938if conf.get('ENABLE_QUOTACHECK') == 1
6164ec4c
ZJS
2939 executable(
2940 'systemd-quotacheck',
2941 'src/quotacheck/quotacheck.c',
2942 include_directories : includes,
2943 link_with : [libshared],
2944 install_rpath : rootlibexecdir,
2945 install : true,
2946 install_dir : rootlibexecdir)
2947endif
2948
2949public_programs += executable(
2950 'systemd-socket-proxyd',
2951 'src/socket-proxy/socket-proxyd.c',
2952 include_directories : includes,
2953 link_with : [libshared],
2954 dependencies : [threads],
2955 install_rpath : rootlibexecdir,
2956 install : true,
2957 install_dir : rootlibexecdir)
5c23128d 2958
6164ec4c
ZJS
2959public_programs += executable(
2960 'systemd-udevd',
2961 systemd_udevd_sources,
2962 include_directories : includes,
2963 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
2964 link_with : [libudev_core,
2965 libsystemd_network,
2966 libudev_static],
2967 dependencies : [versiondep,
2968 threads,
2969 libkmod,
2970 libidn,
2971 libacl,
2972 libblkid],
2973 install_rpath : udev_rpath,
2974 install : true,
2975 install_dir : rootlibexecdir)
5c23128d 2976
6164ec4c
ZJS
2977public_programs += executable(
2978 'udevadm',
2979 udevadm_sources,
2980 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
2981 include_directories : includes,
2982 link_with : [libudev_core,
2983 libsystemd_network,
2984 libudev_static],
2985 dependencies : [versiondep,
2986 threads,
2987 libkmod,
2988 libidn,
2989 libacl,
2990 libblkid],
2991 install_rpath : udev_rpath,
2992 install : true,
2993 install_dir : rootbindir)
2994
2995executable(
2996 'systemd-shutdown',
2997 systemd_shutdown_sources,
2998 include_directories : includes,
2999 link_with : [libcore_shared,
3000 libshared],
3001 dependencies : [libmount],
3002 install_rpath : rootlibexecdir,
3003 install : true,
3004 install_dir : rootlibexecdir)
3005
3006executable(
3007 'systemd-update-done',
3008 'src/update-done/update-done.c',
3009 include_directories : includes,
3010 link_with : [libshared],
3011 install_rpath : rootlibexecdir,
3012 install : true,
3013 install_dir : rootlibexecdir)
3014
3015executable(
3016 'systemd-update-utmp',
3017 'src/update-utmp/update-utmp.c',
3018 include_directories : includes,
3019 link_with : [libshared],
3020 dependencies : [libaudit],
3021 install_rpath : rootlibexecdir,
3022 install : true,
3023 install_dir : rootlibexecdir)
5c23128d 3024
349cc4a5 3025if conf.get('HAVE_KMOD') == 1
6164ec4c
ZJS
3026 executable(
3027 'systemd-modules-load',
3028 'src/modules-load/modules-load.c',
3029 include_directories : includes,
3030 link_with : [libshared],
3031 dependencies : [libkmod],
3032 install_rpath : rootlibexecdir,
3033 install : true,
3034 install_dir : rootlibexecdir)
94e75a54 3035
37efbbd8
ZJS
3036 meson.add_install_script('sh', '-c',
3037 mkdir_p.format(modulesloaddir))
3038 meson.add_install_script('sh', '-c',
3039 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
3040endif
3041
6164ec4c
ZJS
3042public_programs += executable(
3043 'systemd-nspawn',
3044 systemd_nspawn_sources,
3045 include_directories : includes,
3046 link_with : [libcore_shared,
3047 libnspawn_core,
3048 libshared],
3049 dependencies : [libblkid,
3050 libseccomp],
3051 install_rpath : rootlibexecdir,
3052 install : true)
5c23128d 3053
349cc4a5 3054if conf.get('ENABLE_NETWORKD') == 1
6164ec4c
ZJS
3055 executable(
3056 'systemd-networkd',
3057 systemd_networkd_sources,
3058 include_directories : network_include_dir,
3059 link_with : [libnetworkd_core,
3060 libsystemd_network,
3061 libudev_static,
3062 networkd_link_with],
3063 dependencies : [threads],
3064 install_rpath : rootlibexecdir,
3065 install : true,
3066 install_dir : rootlibexecdir)
3067
3068 executable(
3069 'systemd-networkd-wait-online',
3070 systemd_networkd_wait_online_sources,
3071 include_directories : includes,
3072 link_with : [libnetworkd_core,
3073 networkd_link_with],
3074 install_rpath : rootlibexecdir,
3075 install : true,
3076 install_dir : rootlibexecdir)
3077
3078 public_programs += executable(
3079 'networkctl',
3080 networkctl_sources,
3081 include_directories : includes,
3082 link_with : [libsystemd_network,
3083 networkd_link_with],
3084 install_rpath : rootlibexecdir,
3085 install : true,
3086 install_dir : rootbindir)
3087
3088 exe = executable(
3089 'systemd-network-generator',
3090 network_generator_sources,
3091 include_directories : includes,
3092 link_with : [networkd_link_with],
3093 install_rpath : rootlibexecdir,
3094 install : true,
3095 install_dir : rootlibexecdir)
fbaa1137
ZJS
3096
3097 if want_tests != 'false'
3098 test('test-network-generator-conversion',
3099 test_network_generator_conversion_sh,
3100 # https://github.com/mesonbuild/meson/issues/2681
3101 args : exe.full_path())
3102 endif
dcfe072a 3103endif
e821f6a9 3104
6164ec4c
ZJS
3105executable(
3106 'systemd-sulogin-shell',
3107 ['src/sulogin-shell/sulogin-shell.c'],
3108 include_directories : includes,
3109 link_with : [libshared],
3110 install_rpath : rootlibexecdir,
3111 install : true,
3112 install_dir : rootlibexecdir)
e821f6a9 3113
69e96427
ZJS
3114############################################################
3115
e2d41370
FB
3116custom_target(
3117 'systemd-runtest.env',
3118 output : 'systemd-runtest.env',
3119 command : ['sh', '-c', '{ ' +
1485aacb 3120 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
81e06775 3121 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(project_build_root, 'catalog')) +
e2d41370
FB
3122 '} >@OUTPUT@'],
3123 build_by_default : true)
3124
69e96427 3125foreach tuple : tests
37efbbd8
ZJS
3126 sources = tuple[0]
3127 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
3128 dependencies = tuple[2]
3129 condition = tuple.length() >= 4 ? tuple[3] : ''
3130 type = tuple.length() >= 5 ? tuple[4] : ''
3131 defs = tuple.length() >= 6 ? tuple[5] : []
3132 incs = tuple.length() >= 7 ? tuple[6] : includes
3133 timeout = 30
3134
3135 name = sources[0].split('/')[-1].split('.')[0]
3136 if type.startswith('timeout=')
3137 timeout = type.split('=')[1].to_int()
3138 type = ''
3139 endif
3b2bdd62
ZJS
3140
3141 if condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
3142 exe = executable(
3143 name,
3144 sources,
3145 include_directories : incs,
3146 link_with : link_with,
60722ad7
ZJS
3147 dependencies : [versiondep,
3148 dependencies],
37efbbd8 3149 c_args : defs,
3b2bdd62 3150 build_by_default : want_tests != 'false',
37efbbd8 3151 install_rpath : rootlibexecdir,
7cdd9783
MB
3152 install : install_tests,
3153 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
3154
3155 if type == 'manual'
3156 message('@0@ is a manual test'.format(name))
3157 elif type == 'unsafe' and want_tests != 'unsafe'
3158 message('@0@ is an unsafe test'.format(name))
3b2bdd62 3159 elif want_tests != 'false'
37efbbd8
ZJS
3160 test(name, exe,
3161 env : test_env,
3162 timeout : timeout)
3163 endif
3164 else
3165 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
3166 endif
69e96427
ZJS
3167endforeach
3168
0632b4cd 3169exe = executable(
37efbbd8
ZJS
3170 'test-libsystemd-sym',
3171 test_libsystemd_sym_c,
3172 include_directories : includes,
3173 link_with : [libsystemd],
fd1939fb 3174 build_by_default : want_tests != 'false',
37efbbd8
ZJS
3175 install : install_tests,
3176 install_dir : testsdir)
938be089
ZJS
3177if want_tests != 'false'
3178 test('test-libsystemd-sym', exe)
3179endif
37ab1a25 3180
0632b4cd
ZJS
3181exe = executable(
3182 'test-libsystemd-static-sym',
3183 test_libsystemd_sym_c,
3184 include_directories : includes,
0632b4cd
ZJS
3185 link_with : [install_libsystemd_static],
3186 dependencies : [threads], # threads is already included in dependencies on the library,
3187 # but does not seem to get propagated. Add here as a work-around.
fd1939fb 3188 build_by_default : want_tests != 'false' and static_libsystemd_pic,
20f3d32d 3189 install : install_tests and static_libsystemd_pic,
0632b4cd 3190 install_dir : testsdir)
938be089 3191if want_tests != 'false' and static_libsystemd_pic
0632b4cd
ZJS
3192 test('test-libsystemd-static-sym', exe)
3193endif
37ab1a25 3194
0632b4cd 3195exe = executable(
37efbbd8
ZJS
3196 'test-libudev-sym',
3197 test_libudev_sym_c,
3198 include_directories : includes,
c1cd6743 3199 c_args : '-Wno-deprecated-declarations',
37efbbd8 3200 link_with : [libudev],
fd1939fb 3201 build_by_default : want_tests != 'false',
37efbbd8
ZJS
3202 install : install_tests,
3203 install_dir : testsdir)
938be089
ZJS
3204if want_tests != 'false'
3205 test('test-libudev-sym', exe)
3206endif
0632b4cd
ZJS
3207
3208exe = executable(
3209 'test-libudev-static-sym',
3210 test_libudev_sym_c,
3211 include_directories : includes,
c1cd6743 3212 c_args : '-Wno-deprecated-declarations',
0632b4cd 3213 link_with : [install_libudev_static],
fd1939fb 3214 build_by_default : want_tests != 'false' and static_libudev_pic,
20f3d32d 3215 install : install_tests and static_libudev_pic,
0632b4cd 3216 install_dir : testsdir)
938be089 3217if want_tests != 'false' and static_libudev_pic
0632b4cd
ZJS
3218 test('test-libudev-static-sym', exe)
3219endif
e0bec52f 3220
69e96427 3221############################################################
5c23128d 3222
7db7d5b7
JR
3223fuzzer_exes = []
3224
5996740a 3225if get_option('tests') != 'false'
6164ec4c
ZJS
3226 foreach tuple : fuzzers
3227 sources = tuple[0]
3228 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
3229 dependencies = tuple[2]
3230 defs = tuple.length() >= 4 ? tuple[3] : []
3231 incs = tuple.length() >= 5 ? tuple[4] : includes
3232 link_args = []
3233
3234 if want_ossfuzz
9c5c4677 3235 dependencies += fuzzing_engine
6164ec4c
ZJS
3236 elif want_libfuzzer
3237 if fuzzing_engine.found()
3238 dependencies += fuzzing_engine
3239 else
3240 link_args += ['-fsanitize=fuzzer']
3241 endif
9c5c4677 3242 else
6164ec4c 3243 sources += 'src/fuzz/fuzz-main.c'
9c5c4677 3244 endif
7db7d5b7 3245
6164ec4c 3246 name = sources[0].split('/')[-1].split('.')[0]
7db7d5b7 3247
6164ec4c
ZJS
3248 fuzzer_exes += executable(
3249 name,
3250 sources,
3251 include_directories : [incs, include_directories('src/fuzz')],
3252 link_with : link_with,
3253 dependencies : dependencies,
3254 c_args : defs,
3255 link_args: link_args,
3256 install : false)
3257 endforeach
5996740a 3258endif
7db7d5b7 3259
6164ec4c
ZJS
3260run_target(
3261 'fuzzers',
63058f43 3262 depends : fuzzer_exes,
7db7d5b7
JR
3263 command : ['true'])
3264
3265############################################################
3266
5c23128d
ZJS
3267make_directive_index_py = find_program('tools/make-directive-index.py')
3268make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 3269xml_helper_py = find_program('tools/xml_helper.py')
dd1e33c8
ZJS
3270hwdb_update_sh = find_program('tools/hwdb-update.sh')
3271autosuspend_update_sh = find_program('tools/autosuspend-update.sh')
5c23128d 3272
5c23128d
ZJS
3273subdir('sysctl.d')
3274subdir('sysusers.d')
3275subdir('tmpfiles.d')
4f10b807
ZJS
3276subdir('hwdb.d')
3277subdir('units')
e783f957 3278subdir('presets')
5c23128d
ZJS
3279subdir('network')
3280subdir('man')
3281subdir('shell-completion/bash')
3282subdir('shell-completion/zsh')
9e825ebf
FB
3283subdir('docs/sysvinit')
3284subdir('docs/var-log')
5c23128d 3285
5c23128d
ZJS
3286install_subdir('factory/etc',
3287 install_dir : factorydir)
3288
5c23128d
ZJS
3289install_data('xorg/50-systemd-user.sh',
3290 install_dir : xinitrcdir)
582faeb4
DJL
3291install_data('modprobe.d/systemd.conf',
3292 install_dir : modprobedir)
f09eb768 3293install_data('LICENSE.GPL2',
5c23128d 3294 'LICENSE.LGPL2.1',
f09eb768
LP
3295 'NEWS',
3296 'README',
eea98402 3297 'docs/CODING_STYLE.md',
1d1cb168 3298 'docs/DISTRO_PORTING.md',
9e825ebf 3299 'docs/ENVIRONMENT.md',
5425f8a5 3300 'docs/HACKING.md',
9e825ebf 3301 'docs/TRANSIENT-SETTINGS.md',
b6dc0d7d 3302 'docs/TRANSLATORS.md',
9e825ebf 3303 'docs/UIDS-GIDS.md',
5c23128d
ZJS
3304 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
3305 install_dir : docdir)
d68b342b 3306
94e75a54
ZJS
3307meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
3308meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
3309
d68b342b
ZJS
3310############################################################
3311
dd1e33c8 3312check_help = find_program('tools/check-help.sh')
005a29f2
ZJS
3313
3314foreach exec : public_programs
37efbbd8 3315 name = exec.full_path().split('/')[-1]
938be089
ZJS
3316 if want_tests != 'false'
3317 test('check-help-' + name,
dd1e33c8 3318 check_help,
c1cd6743 3319 args : exec.full_path())
938be089 3320 endif
005a29f2
ZJS
3321endforeach
3322
3323############################################################
3324
c6448ee3
ZJS
3325check_directives_sh = find_program('tools/check-directives.sh')
3326
3327if want_tests != 'false'
3328 test('check-directives',
3329 check_directives_sh,
3330 args : project_source_root)
3331endif
3332
3333############################################################
3334
52d4d1d3
ZJS
3335# Enable tests for all supported sanitizers
3336foreach tuple : sanitizers
3337 sanitizer = tuple[0]
3338 build = tuple[1]
b68dfb9e 3339
7a6397d2 3340 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
52d4d1d3
ZJS
3341 prev = ''
3342 foreach p : fuzz_regression_tests
3343 b = p.split('/')[-2]
3344 c = p.split('/')[-1]
3345
3346 name = '@0@:@1@'.format(b, sanitizer)
3347
3348 if name != prev
3349 if want_tests == 'false'
3350 message('Not compiling @0@ because tests is set to false'.format(name))
3351 elif slow_tests
3352 exe = custom_target(
3353 name,
3354 output : name,
3355 depends : build,
3356 command : [env, 'ln', '-fs',
3357 join_paths(build.full_path(), b),
3358 '@OUTPUT@'],
3359 build_by_default : true)
3360 else
3361 message('Not compiling @0@ because slow-tests is set to false'.format(name))
3362 endif
3363 endif
3364 prev = name
3365
3366 if want_tests != 'false' and slow_tests
3367 test('@0@:@1@:@2@'.format(b, c, sanitizer),
3368 env,
3369 args : [exe.full_path(),
1485aacb 3370 join_paths(project_source_root, p)])
52d4d1d3
ZJS
3371 endif
3372 endforeach
b68dfb9e
ZJS
3373 endif
3374endforeach
3375
52d4d1d3 3376
b68dfb9e
ZJS
3377############################################################
3378
0700e8ba 3379if git.found()
37efbbd8
ZJS
3380 all_files = run_command(
3381 git,
1485aacb 3382 ['--git-dir=@0@/.git'.format(project_source_root),
37efbbd8
ZJS
3383 'ls-files',
3384 ':/*.[ch]'])
3385 all_files = files(all_files.stdout().split())
d68b342b 3386
e85a690b 3387 custom_target(
0700e8ba 3388 'tags',
e85a690b 3389 output : 'tags',
1485aacb 3390 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
2f09974f 3391 run_target(
0700e8ba 3392 'ctags',
1485aacb 3393 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
d68b342b 3394endif
177929c2
ZJS
3395
3396if git.found()
dd1e33c8 3397 git_contrib_sh = find_program('tools/git-contrib.sh')
a923e085 3398 run_target(
37efbbd8 3399 'git-contrib',
dd1e33c8 3400 command : [git_contrib_sh])
177929c2 3401endif
dd6ab3df
ZJS
3402
3403if git.found()
3404 git_head = run_command(
3405 git,
1485aacb 3406 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3407 'rev-parse', 'HEAD']).stdout().strip()
3408 git_head_short = run_command(
3409 git,
1485aacb 3410 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3411 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3412
3413 run_target(
3414 'git-snapshot',
3415 command : ['git', 'archive',
1485aacb 3416 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
dd6ab3df
ZJS
3417 git_head_short),
3418 '--prefix', 'systemd-@0@/'.format(git_head),
3419 'HEAD'])
3420endif
829257d1
ZJS
3421
3422############################################################
3423
dd1e33c8 3424check_api_docs_sh = find_program('tools/check-api-docs.sh')
51b13863
LP
3425run_target(
3426 'check-api-docs',
3427 depends : [man, libsystemd, libudev],
dd1e33c8 3428 command : [check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
51b13863
LP
3429
3430############################################################
7bc9ea51 3431watchdog_opt = service_watchdog == '' ? 'disabled' : service_watchdog
51b13863 3432
829257d1
ZJS
3433status = [
3434 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3435
2675413e 3436 'split /usr: @0@'.format(split_usr),
157baa87 3437 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
3438 'prefix directory: @0@'.format(prefixdir),
3439 'rootprefix directory: @0@'.format(rootprefixdir),
3440 'sysconf directory: @0@'.format(sysconfdir),
3441 'include directory: @0@'.format(includedir),
3442 'lib directory: @0@'.format(libdir),
3443 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
3444 'SysV init scripts: @0@'.format(sysvinit_path),
3445 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
3446 'PAM modules directory: @0@'.format(pamlibdir),
3447 'PAM configuration directory: @0@'.format(pamconfdir),
3448 'RPM macros directory: @0@'.format(rpmmacrosdir),
3449 'modprobe.d directory: @0@'.format(modprobedir),
3450 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3451 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3452 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3453 'bash completions directory: @0@'.format(bashcompletiondir),
3454 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1 3455 'extra start script: @0@'.format(get_option('rc-local')),
829257d1
ZJS
3456 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3457 get_option('debug-tty')),
3458 'TTY GID: @0@'.format(tty_gid),
ac09340e 3459 'users GID: @0@'.format(substs.get('USERS_GID')),
829257d1
ZJS
3460 'maximum system UID: @0@'.format(system_uid_max),
3461 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
3462 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3463 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3464 'minimum container UID base: @0@'.format(container_uid_base_min),
3465 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 3466 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 3467 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 3468 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 3469 'support URL: @0@'.format(support_url),
afde4574
LP
3470 'nobody user name: @0@'.format(nobody_user),
3471 'nobody group name: @0@'.format(nobody_group),
829257d1 3472 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 3473 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
3474
3475 'default DNSSEC mode: @0@'.format(default_dnssec),
c9299be2 3476 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
3614df05
ZJS
3477 'default mDNS mode: @0@'.format(default_mdns),
3478 'default LLMNR mode: @0@'.format(default_llmnr),
829257d1 3479 'default cgroup hierarchy: @0@'.format(default_hierarchy),
06da5c63 3480 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
8ca9e92c 3481 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
21d0dd5a 3482 'default locale: @0@'.format(default_locale),
5bc655cd 3483 'default user $PATH: @0@'.format(default_user_path_display),
7bc9ea51 3484 'systemd service watchdog: @0@'.format(watchdog_opt)]
829257d1
ZJS
3485
3486alt_dns_servers = '\n '.join(dns_servers.split(' '))
3487alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3488status += [
3489 'default DNS servers: @0@'.format(alt_dns_servers),
3490 'default NTP servers: @0@'.format(alt_ntp_servers)]
3491
3492alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3493 '@@0@'.format(time_epoch)).stdout().strip()
3494status += [
3495 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3496
19d8c9c9 3497status += [
abc8caf7
ZJS
3498 'static libsystemd: @0@'.format(static_libsystemd),
3499 'static libudev: @0@'.format(static_libudev)]
19d8c9c9 3500
829257d1
ZJS
3501# TODO:
3502# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3503# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3504# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3505
349cc4a5 3506if conf.get('ENABLE_EFI') == 1
5a8b1640 3507 status += 'efi arch: @0@'.format(efi_arch)
829257d1
ZJS
3508
3509 if have_gnu_efi
3510 status += [
3511 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
c512dfb9 3512 'EFI CC @0@'.format(' '.join(efi_cc)),
ce4121c6
ZJS
3513 'EFI lds: @0@'.format(efi_lds),
3514 'EFI crt0: @0@'.format(efi_crt0),
359b496f 3515 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
3516 endif
3517endif
3518
3519found = []
3520missing = []
3521
3522foreach tuple : [
3523 ['libcryptsetup'],
3524 ['PAM'],
70a5db58 3525 ['pwquality'],
c757517d 3526 ['libfdisk'],
839fddbe 3527 ['p11kit'],
829257d1
ZJS
3528 ['AUDIT'],
3529 ['IMA'],
3530 ['AppArmor'],
3531 ['SELinux'],
3532 ['SECCOMP'],
3533 ['SMACK'],
3534 ['zlib'],
3535 ['xz'],
ef5924aa 3536 ['zstd'],
829257d1
ZJS
3537 ['lz4'],
3538 ['bzip2'],
3539 ['ACL'],
3540 ['gcrypt'],
3541 ['qrencode'],
3542 ['microhttpd'],
3543 ['gnutls'],
096cbdce 3544 ['openssl'],
829257d1 3545 ['libcurl'],
d1bf5675 3546 ['idn'],
cdf7ad38 3547 ['initrd'],
87057e24 3548 ['libidn2'],
829257d1
ZJS
3549 ['libidn'],
3550 ['libiptc'],
3551 ['elfutils'],
3552 ['binfmt'],
e594a3b1 3553 ['repart'],
829257d1
ZJS
3554 ['vconsole'],
3555 ['quotacheck'],
3556 ['tmpfiles'],
3557 ['environment.d'],
3558 ['sysusers'],
3559 ['firstboot'],
3560 ['randomseed'],
3561 ['backlight'],
3562 ['rfkill'],
3563 ['logind'],
3564 ['machined'],
61d0578b 3565 ['portabled'],
d093b62c 3566 ['userdb'],
70a5db58 3567 ['homed'],
829257d1
ZJS
3568 ['importd'],
3569 ['hostnamed'],
3570 ['timedated'],
3571 ['timesyncd'],
3572 ['localed'],
3573 ['networkd'],
a7456af5 3574 ['resolve'],
096cbdce
IT
3575 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3576 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
829257d1 3577 ['coredump'],
9b4abc69 3578 ['pstore'],
829257d1
ZJS
3579 ['polkit'],
3580 ['legacy pkla', install_polkit_pkla],
3581 ['efi'],
3582 ['gnu-efi', have_gnu_efi],
3583 ['kmod'],
3584 ['xkbcommon'],
c4c978a0 3585 ['pcre2'],
829257d1
ZJS
3586 ['blkid'],
3587 ['dbus'],
3588 ['glib'],
6bd2bc8e
ZJS
3589 ['nss-myhostname'],
3590 ['nss-mymachines'],
3591 ['nss-resolve'],
3592 ['nss-systemd'],
829257d1
ZJS
3593 ['hwdb'],
3594 ['tpm'],
3595 ['man pages', want_man],
3596 ['html pages', want_html],
3597 ['man page indices', want_man and have_lxml],
829257d1
ZJS
3598 ['SysV compat'],
3599 ['utmp'],
3600 ['ldconfig'],
3601 ['hibernate'],
3602 ['adm group', get_option('adm-group')],
3603 ['wheel group', get_option('wheel-group')],
b14e1b43 3604 ['gshadow'],
829257d1
ZJS
3605 ['debug hashmap'],
3606 ['debug mmap cache'],
d6601495 3607 ['debug siphash'],
d18cb393 3608 ['valgrind', conf.get('VALGRIND') == 1],
fd5dec9a 3609 ['trace logging', conf.get('LOG_TRACE') == 1],
b6261be8 3610 ['install tests', install_tests],
19d8c9c9
LP
3611 ['link-udev-shared', get_option('link-udev-shared')],
3612 ['link-systemctl-shared', get_option('link-systemctl-shared')],
5ac8b50d 3613 ['link-networkd-shared', get_option('link-networkd-shared')],
fd74a13e 3614 ['link-timesyncd-shared', get_option('link-timesyncd-shared')],
f30bf4d9
JS
3615 ['kernel-install', get_option('kernel-install')],
3616 ['systemd-analyze', get_option('analyze')],
829257d1
ZJS
3617]
3618
af4d7860
ZJS
3619 if tuple.length() >= 2
3620 cond = tuple[1]
3621 else
829257d1
ZJS
3622 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3623 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 3624 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
3625 endif
3626 if cond
5a8b1640 3627 found += tuple[0]
829257d1 3628 else
5a8b1640 3629 missing += tuple[0]
829257d1
ZJS
3630 endif
3631endforeach
3632
3633status += [
9d39c1bf 3634 '',
829257d1 3635 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
3636 '',
3637 'disabled features: @0@'.format(', '.join(missing)),
3638 '']
829257d1 3639message('\n '.join(status))
9a8e64b0
ZJS
3640
3641if rootprefixdir != rootprefix_default
8ea9fad7
YW
3642 warning('\n' +
3643 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3644 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3645 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 3646endif