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