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