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