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