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