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