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