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