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