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