]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
pstore: Tool to archive contents of pstore
[thirdparty/systemd.git] / meson.build
CommitLineData
3a726fcd 1# SPDX-License-Identifier: LGPL-2.1+
3a726fcd 2
5c23128d 3project('systemd', 'c',
7eb8a47e 4 version : '242',
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
bfe6bb20
LP
15libsystemd_version = '0.26.0'
16libudev_version = '1.6.14'
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')
5c23128d 160
75aaade1
TB
161docdir = get_option('docdir')
162if docdir == ''
163 docdir = join_paths(datadir, 'doc/systemd')
164endif
165
5c23128d
ZJS
166dbuspolicydir = get_option('dbuspolicydir')
167if dbuspolicydir == ''
37efbbd8 168 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
5c23128d
ZJS
169endif
170
171dbussessionservicedir = get_option('dbussessionservicedir')
172if dbussessionservicedir == ''
37efbbd8 173 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
5c23128d
ZJS
174endif
175
176dbussystemservicedir = get_option('dbussystemservicedir')
177if dbussystemservicedir == ''
37efbbd8 178 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
5c23128d
ZJS
179endif
180
181pamlibdir = get_option('pamlibdir')
182if pamlibdir == ''
37efbbd8 183 pamlibdir = join_paths(rootlibdir, 'security')
5c23128d
ZJS
184endif
185
186pamconfdir = get_option('pamconfdir')
187if pamconfdir == ''
37efbbd8 188 pamconfdir = join_paths(sysconfdir, 'pam.d')
5c23128d
ZJS
189endif
190
444d5863 191memory_accounting_default = get_option('memory-accounting-default')
36cf4507 192status_unit_format_default = get_option('status-unit-format-default')
444d5863 193
5c23128d 194conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
e17e5ba9 195conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
5c23128d
ZJS
196conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
197conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
198conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
2a4c156d 199conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
96164a39 200
f7c5427c 201conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
96164a39 202
e17e5ba9 203conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
5c23128d
ZJS
204conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
205conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
e17e5ba9
MB
206conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
207conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
208conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
209conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
da495a03 210conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
7f2806d5 211conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
e17e5ba9
MB
212conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
213conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
214conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
215conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
216conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
74344a17 217conf.set_quoted('ROOTPREFIX', rootprefixdir)
3131bfe3 218conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
e17e5ba9
MB
219conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
220conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
5c23128d
ZJS
221conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
222conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
223conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
224conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
225conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
226conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
e17e5ba9
MB
227conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
228conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
e2d41370 229conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
49cdae63 230conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
5c23128d 231conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
e17e5ba9 232conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
5c23128d
ZJS
233conf.set_quoted('LIBDIR', libdir)
234conf.set_quoted('ROOTLIBDIR', rootlibdir)
235conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
236conf.set_quoted('BOOTLIBDIR', bootlibdir)
e17e5ba9
MB
237conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
238conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
1d7579c4 239conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
e17e5ba9
MB
240conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
241conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
242conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
243conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
30538ff1 244conf.set10('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default)
7f672e86 245conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
36cf4507 246conf.set('STATUS_UNIT_FORMAT_DEFAULT', 'STATUS_UNIT_FORMAT_' + status_unit_format_default.to_upper())
5c23128d 247
5c23128d 248substs.set('prefix', prefixdir)
1c2c7c6c 249substs.set('rootprefix', rootprefixdir)
23bdba61 250substs.set('rootprefix_noslash', rootprefixdir_noslash)
3131bfe3
ZJS
251substs.set('exec_prefix', prefixdir)
252substs.set('libdir', libdir)
253substs.set('rootlibdir', rootlibdir)
254substs.set('includedir', includedir)
1c2c7c6c 255substs.set('sysconfdir', sysconfdir)
3131bfe3
ZJS
256substs.set('bindir', bindir)
257substs.set('rootbindir', rootbindir)
5c23128d
ZJS
258substs.set('rootlibexecdir', rootlibexecdir)
259substs.set('systemunitdir', systemunitdir)
260substs.set('userunitdir', userunitdir)
261substs.set('systempresetdir', systempresetdir)
262substs.set('userpresetdir', userpresetdir)
263substs.set('udevhwdbdir', udevhwdbdir)
264substs.set('udevrulesdir', udevrulesdir)
3131bfe3 265substs.set('udevlibexecdir', udevlibexecdir)
424e80b4 266substs.set('environmentdir', environmentdir)
5c23128d
ZJS
267substs.set('catalogdir', catalogdir)
268substs.set('tmpfilesdir', tmpfilesdir)
269substs.set('sysusersdir', sysusersdir)
270substs.set('sysctldir', sysctldir)
271substs.set('binfmtdir', binfmtdir)
272substs.set('modulesloaddir', modulesloaddir)
424e80b4 273substs.set('modprobedir', modprobedir)
5c23128d
ZJS
274substs.set('systemgeneratordir', systemgeneratordir)
275substs.set('usergeneratordir', usergeneratordir)
276substs.set('systemenvgeneratordir', systemenvgeneratordir)
277substs.set('userenvgeneratordir', userenvgeneratordir)
278substs.set('systemshutdowndir', systemshutdowndir)
279substs.set('systemsleepdir', systemsleepdir)
2a4c156d 280substs.set('CERTIFICATEROOT', get_option('certificate-root'))
e17e5ba9
MB
281substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
282substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
2a4c156d
ZJS
283substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
284substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
285substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
444d5863 286substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
36cf4507 287substs.set('STATUS_UNIT_FORMAT_DEFAULT', status_unit_format_default)
c02b6ee4 288substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
e9bbff18 289substs.set('BUILD_ROOT', meson.current_build_dir())
5c23128d
ZJS
290
291#####################################################################
292
293cc = meson.get_compiler('c')
294pkgconfig = import('pkgconfig')
6e2afb1c 295check_compilation_sh = find_program('tools/meson-check-compilation.sh')
b68dfb9e 296meson_build_sh = find_program('tools/meson-build.sh')
5c23128d 297
d3da291e
ZJS
298want_tests = get_option('tests')
299slow_tests = want_tests != 'false' and get_option('slow-tests')
300install_tests = get_option('install-tests')
301
46e63a2a 302if add_languages('cpp', required : fuzzer_build)
3b2bdd62 303 # Used only for tests
9b0ca019 304 cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
1b2acaa7 305else
9b0ca019 306 cxx_cmd = ''
94e2523b
ZJS
307endif
308
31e57a35 309if want_libfuzzer
9c5c4677
EV
310 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer', required : false)
311 if fuzzing_engine.found()
312 add_project_arguments('-fsanitize-coverage=trace-pc-guard,trace-cmp', language : 'c')
313 elif cc.has_argument('-fsanitize=fuzzer-no-link')
314 add_project_arguments('-fsanitize=fuzzer-no-link', language : 'c')
315 else
316 error('Looks like neither libFuzzer nor -fsanitize=fuzzer-no-link is supported')
317 endif
c09edc79 318elif want_ossfuzz
7db7d5b7 319 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
87ac55a1
EV
320elif want_fuzzbuzz
321 fuzzing_engine = meson.get_compiler('cpp').find_library(get_option('fuzzbuzz-engine'), dirs: get_option('fuzzbuzz-engine-dir'))
7db7d5b7
JR
322endif
323
30a4ddff
YW
324possible_cc_flags = [
325 '-Wextra',
326 '-Werror=undef',
327 '-Wlogical-op',
328 '-Wmissing-include-dirs',
329 '-Wold-style-definition',
330 '-Wpointer-arith',
331 '-Winit-self',
30a4ddff
YW
332 '-Wfloat-equal',
333 '-Wsuggest-attribute=noreturn',
334 '-Werror=missing-prototypes',
335 '-Werror=implicit-function-declaration',
336 '-Werror=missing-declarations',
337 '-Werror=return-type',
338 '-Werror=incompatible-pointer-types',
339 '-Werror=format=2',
340 '-Wstrict-prototypes',
341 '-Wredundant-decls',
342 '-Wmissing-noreturn',
343 '-Wimplicit-fallthrough=5',
344 '-Wshadow',
345 '-Wendif-labels',
346 '-Wstrict-aliasing=2',
347 '-Wwrite-strings',
348 '-Werror=overflow',
b05ecb8c 349 '-Werror=shift-count-overflow',
d28b67d4 350 '-Werror=shift-overflow=2',
30a4ddff
YW
351 '-Wdate-time',
352 '-Wnested-externs',
bf7efeb1
FB
353
354 # negative arguments are correctly detected starting with meson 0.46.
355 '-Wno-unused-parameter',
356 '-Wno-missing-field-initializers',
357 '-Wno-unused-result',
358 '-Wno-format-signedness',
eed33623
ZJS
359 '-Wno-error=#warnings', # clang
360 '-Wno-string-plus-int', # clang
bf7efeb1
FB
361
362 # work-around for gcc 7.1 turning this on on its own.
363 '-Wno-error=nonnull',
364
365 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
366 # optimizations enabled, producing essentially false positives.
367 '-Wno-maybe-uninitialized',
368
30a4ddff
YW
369 '-ffast-math',
370 '-fno-common',
371 '-fdiagnostics-show-option',
372 '-fno-strict-aliasing',
373 '-fvisibility=hidden',
374 '-fstack-protector',
375 '-fstack-protector-strong',
376 '--param=ssp-buffer-size=4',
377]
378
379# --as-needed and --no-undefined are provided by meson by default,
380# run mesonconf to see what is enabled
381possible_link_flags = [
382 '-Wl,-z,relro',
383 '-Wl,-z,now',
384]
5c23128d 385
30a4ddff
YW
386if cc.get_id() == 'clang'
387 possible_cc_flags += [
388 '-Wno-typedef-redefinition',
389 '-Wno-gnu-variable-sized-type-not-at-end',
390 ]
391endif
392
393if get_option('buildtype') != 'debug'
394 possible_cc_flags += [
395 '-ffunction-sections',
396 '-fdata-sections',
397 ]
398
399 possible_link_flags += '-Wl,--gc-sections'
400endif
401
a73f6213
ZJS
402if get_option('b_ndebug') == 'true'
403 # With asserts disabled with get a bunch of warnings about variables which
404 # are used only in the asserts. This is not useful at all, so let's just silence
405 # those warnings.
406 possible_cc_flags += [
407 '-Wno-unused-variable',
408 '-Wno-unused-but-set-variable',
409 ]
410endif
411
30a4ddff 412add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
7a6397d2 413add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
30a4ddff 414
9e70f2f8 415if cc.compiles('''
5c23128d
ZJS
416 #include <time.h>
417 #include <inttypes.h>
418 typedef uint64_t usec_t;
419 usec_t now(clockid_t clock);
420 int main(void) {
421 struct timespec now;
422 return 0;
423 }
38c1c96d 424''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
37efbbd8 425 add_project_arguments('-Werror=shadow', language : 'c')
5c23128d
ZJS
426endif
427
0e3cc902 428cpp = ' '.join(cc.cmd_array()) + ' -E'
9cc0e6e9 429
6695c200
ZJS
430has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
431
5c23128d
ZJS
432#####################################################################
433# compilation result tests
434
2c201c21
ZJS
435conf.set('_GNU_SOURCE', true)
436conf.set('__SANE_USERSPACE_TYPES__', true)
6695c200 437conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
5c23128d
ZJS
438
439conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
440conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
441conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
442conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
443conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
444conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
445conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
446
447decl_headers = '''
448#include <uchar.h>
4c2e1b39 449#include <sys/stat.h>
5c23128d 450'''
5c23128d
ZJS
451
452foreach decl : ['char16_t',
453 'char32_t',
4c2e1b39 454 'struct statx',
5c23128d 455 ]
2c201c21
ZJS
456
457 # We get -1 if the size cannot be determined
9c869d08
ZJS
458 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
459
460 if decl == 'struct statx'
461 if have
462 want_linux_stat_h = false
463 else
464 have = cc.sizeof(decl,
465 prefix : decl_headers + '#include <linux/stat.h>',
466 args : '-D_GNU_SOURCE') > 0
467 want_linux_stat_h = have
468 endif
469 endif
470
349cc4a5 471 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
5c23128d
ZJS
472endforeach
473
9c869d08 474conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
75720bff 475
5c23128d 476foreach ident : ['secure_getenv', '__secure_getenv']
349cc4a5 477 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
5c23128d
ZJS
478endforeach
479
480foreach ident : [
85db59b7 481 ['memfd_create', '''#include <sys/mman.h>'''],
7b961e40
LP
482 ['gettid', '''#include <sys/types.h>
483 #include <unistd.h>'''],
3c042add
LP
484 ['pivot_root', '''#include <stdlib.h>
485 #include <unistd.h>'''], # no known header declares pivot_root
85db59b7 486 ['name_to_handle_at', '''#include <sys/types.h>
37efbbd8
ZJS
487 #include <sys/stat.h>
488 #include <fcntl.h>'''],
85db59b7 489 ['setns', '''#include <sched.h>'''],
2acfd0ff
LP
490 ['renameat2', '''#include <stdio.h>
491 #include <fcntl.h>'''],
37efbbd8
ZJS
492 ['kcmp', '''#include <linux/kcmp.h>'''],
493 ['keyctl', '''#include <sys/types.h>
494 #include <keyutils.h>'''],
85db59b7 495 ['copy_file_range', '''#include <sys/syscall.h>
37efbbd8 496 #include <unistd.h>'''],
71e5200f
DM
497 ['bpf', '''#include <sys/syscall.h>
498 #include <unistd.h>'''],
4c2e1b39
LP
499 ['statx', '''#include <sys/types.h>
500 #include <sys/stat.h>
501 #include <unistd.h>'''],
aa484f35
ZJS
502 ['explicit_bzero' , '''#include <string.h>'''],
503 ['reallocarray', '''#include <malloc.h>'''],
b070c7c0
MS
504 ['set_mempolicy', '''#include <stdlib.h>
505 #include <unistd.h>'''],
506 ['get_mempolicy', '''#include <stdlib.h>
507 #include <unistd.h>'''],
37efbbd8
ZJS
508]
509
85db59b7 510 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
4b9545f1 511 conf.set10('HAVE_' + ident[0].to_upper(), have)
5c23128d
ZJS
512endforeach
513
85db59b7 514if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
349cc4a5 515 conf.set10('USE_SYS_RANDOM_H', true)
4b9545f1 516 conf.set10('HAVE_GETRANDOM', true)
4984c8be
ZJS
517else
518 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
349cc4a5 519 conf.set10('USE_SYS_RANDOM_H', false)
4b9545f1 520 conf.set10('HAVE_GETRANDOM', have)
4984c8be
ZJS
521endif
522
5c23128d
ZJS
523#####################################################################
524
1485aacb
DC
525vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
526 project_source_root,
e1ca734e 527 get_option('version-tag'),
681bd2c5
ZJS
528 meson.project_version()]
529
d1084aa2
LT
530version_h = vcs_tag(
531 input : 'src/version/version.h.in',
532 output : 'version.h',
533 command: vcs_tagger)
534
535versiondep = declare_dependency(sources: version_h)
536
5c23128d 537sed = find_program('sed')
5c23128d 538awk = find_program('awk')
d730e2d1 539m4 = find_program('m4')
5c23128d 540stat = find_program('stat')
d68b342b 541git = find_program('git', required : false)
b68dfb9e 542env = find_program('env')
b1ffacb6 543perl = find_program('perl', required : false)
5c23128d 544
1485aacb 545meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
94e75a54 546mkdir_p = 'mkdir -p $DESTDIR/@0@'
d83f4f50
ZJS
547test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
548splash_bmp = files('test/splash.bmp')
94e75a54 549
5c23128d
ZJS
550# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
551# /usr/sbin, /sbin, and fall back to the default from middle column.
2fa645f1 552progs = [['quotaon', '/usr/sbin/quotaon' ],
5c23128d 553 ['quotacheck', '/usr/sbin/quotacheck' ],
5c23128d
ZJS
554 ['kmod', '/usr/bin/kmod' ],
555 ['kexec', '/usr/sbin/kexec' ],
556 ['sulogin', '/usr/sbin/sulogin' ],
557 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
558 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
559 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
560 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
6db90462 561 ['nologin', '/usr/sbin/nologin', ],
5c23128d
ZJS
562 ]
563foreach prog : progs
37efbbd8
ZJS
564 path = get_option(prog[0] + '-path')
565 if path != ''
566 message('Using @1@ for @0@'.format(prog[0], path))
567 else
568 exe = find_program(prog[0],
569 '/usr/sbin/' + prog[0],
570 '/sbin/' + prog[0],
571 required: false)
572 path = exe.found() ? exe.path() : prog[1]
573 endif
574 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
575 conf.set_quoted(name, path)
576 substs.set(name, path)
5c23128d
ZJS
577endforeach
578
2fa645f1
MG
579conf.set_quoted('TELINIT', get_option('telinit-path'))
580
1276a9f6 581if run_command('ln', '--relative', '--help').returncode() != 0
cd001016 582 error('ln does not support --relative (added in coreutils 8.16)')
1276a9f6 583endif
5c23128d
ZJS
584
585############################################################
586
587gperf = find_program('gperf')
588
589gperf_test_format = '''
590#include <string.h>
591const char * in_word_set(const char *, @0@);
592@1@
593'''
594gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
595gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
596gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
597if cc.compiles(gperf_test)
37efbbd8 598 gperf_len_type = 'size_t'
5c23128d 599else
37efbbd8
ZJS
600 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
601 if cc.compiles(gperf_test)
602 gperf_len_type = 'unsigned'
603 else
604 error('unable to determine gperf len type')
605 endif
5c23128d
ZJS
606endif
607message('gperf len type is @0@'.format(gperf_len_type))
37efbbd8
ZJS
608conf.set('GPERF_LEN_TYPE', gperf_len_type,
609 description : 'The type of gperf "len" parameter')
5c23128d
ZJS
610
611############################################################
612
613if not cc.has_header('sys/capability.h')
37efbbd8 614 error('POSIX caps headers not found')
5c23128d 615endif
9f555bba 616foreach header : ['crypt.h',
5c23128d
ZJS
617 'linux/memfd.h',
618 'linux/vm_sockets.h',
af8786b1 619 'sys/auxv.h',
5c23128d
ZJS
620 'valgrind/memcheck.h',
621 'valgrind/valgrind.h',
622 ]
2c201c21 623
349cc4a5
ZJS
624 conf.set10('HAVE_' + header.underscorify().to_upper(),
625 cc.has_header(header))
5c23128d
ZJS
626endforeach
627
628############################################################
629
630conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
5248e7e1
ZJS
631conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
632gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
5c23128d
ZJS
633
634default_hierarchy = get_option('default-hierarchy')
635conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
636 description : 'default cgroup hierarchy as string')
637if default_hierarchy == 'legacy'
37efbbd8 638 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
5c23128d 639elif default_hierarchy == 'hybrid'
37efbbd8 640 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
5c23128d 641else
37efbbd8 642 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
5c23128d
ZJS
643endif
644
06da5c63
ZJS
645default_net_naming_scheme = get_option('default-net-naming-scheme')
646conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
647
5c23128d 648time_epoch = get_option('time-epoch')
ac09340e 649if time_epoch == -1
37efbbd8 650 NEWS = files('NEWS')
ac09340e 651 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
5c23128d 652endif
5c23128d
ZJS
653conf.set('TIME_EPOCH', time_epoch)
654
655system_uid_max = get_option('system-uid-max')
ac09340e 656if system_uid_max == -1
37efbbd8
ZJS
657 system_uid_max = run_command(
658 awk,
2f62cf35
CMOF
659 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
660 '/etc/login.defs').stdout().strip()
661 if system_uid_max == ''
ac09340e
YW
662 system_uid_max = 999
663 else
664 system_uid_max = system_uid_max.to_int()
2f62cf35 665 endif
5c23128d 666endif
5c23128d
ZJS
667conf.set('SYSTEM_UID_MAX', system_uid_max)
668substs.set('systemuidmax', system_uid_max)
5c23128d 669
5c23128d 670system_gid_max = get_option('system-gid-max')
ac09340e 671if system_gid_max == -1
37efbbd8
ZJS
672 system_gid_max = run_command(
673 awk,
2f62cf35
CMOF
674 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
675 '/etc/login.defs').stdout().strip()
676 if system_gid_max == ''
ac09340e
YW
677 system_gid_max = 999
678 else
679 system_gid_max = system_gid_max.to_int()
2f62cf35 680 endif
5c23128d 681endif
5c23128d
ZJS
682conf.set('SYSTEM_GID_MAX', system_gid_max)
683substs.set('systemgidmax', system_gid_max)
5c23128d 684
ac09340e
YW
685dynamic_uid_min = get_option('dynamic-uid-min')
686dynamic_uid_max = get_option('dynamic-uid-max')
87d5e4f2
LP
687conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
688conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
689substs.set('dynamicuidmin', dynamic_uid_min)
690substs.set('dynamicuidmax', dynamic_uid_max)
691
ac09340e
YW
692container_uid_base_min = get_option('container-uid-base-min')
693container_uid_base_max = get_option('container-uid-base-max')
87d5e4f2
LP
694conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
695conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
696substs.set('containeruidbasemin', container_uid_base_min)
697substs.set('containeruidbasemax', container_uid_base_max)
698
afde4574
LP
699nobody_user = get_option('nobody-user')
700nobody_group = get_option('nobody-group')
701
2484bff3
CQ
702if not meson.is_cross_build()
703 getent_result = run_command('getent', 'passwd', '65534')
704 if getent_result.returncode() == 0
705 name = getent_result.stdout().split(':')[0]
706 if name != nobody_user
707 warning('\n' +
708 '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) +
709 'Your build will result in an user table setup that is incompatible with the local system.')
710 endif
afde4574 711 endif
2484bff3
CQ
712 id_result = run_command('id', '-u', nobody_user)
713 if id_result.returncode() == 0
714 id = id_result.stdout().to_int()
715 if id != 65534
716 warning('\n' +
717 '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) +
718 'Your build will result in an user table setup that is incompatible with the local system.')
719 endif
afde4574 720 endif
afde4574 721
2484bff3
CQ
722 getent_result = run_command('getent', 'group', '65534')
723 if getent_result.returncode() == 0
724 name = getent_result.stdout().split(':')[0]
725 if name != nobody_group
726 warning('\n' +
727 '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) +
728 'Your build will result in an group table setup that is incompatible with the local system.')
729 endif
afde4574 730 endif
2484bff3
CQ
731 id_result = run_command('id', '-g', nobody_group)
732 if id_result.returncode() == 0
733 id = id_result.stdout().to_int()
734 if id != 65534
735 warning('\n' +
736 '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) +
737 'Your build will result in an group table setup that is incompatible with the local system.')
738 endif
afde4574
LP
739 endif
740endif
8374cc62 741if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
8ea9fad7
YW
742 warning('\n' +
743 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
744 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
8374cc62 745endif
afde4574
LP
746
747conf.set_quoted('NOBODY_USER_NAME', nobody_user)
748conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
60712021
YW
749substs.set('NOBODY_USER_NAME', nobody_user)
750substs.set('NOBODY_GROUP_NAME', nobody_group)
87d5e4f2 751
5c23128d
ZJS
752tty_gid = get_option('tty-gid')
753conf.set('TTY_GID', tty_gid)
2a4c156d 754substs.set('TTY_GID', tty_gid)
5c23128d 755
84786b8e 756# Ensure provided GID argument is numeric, otherwise fallback to default assignment
ac09340e
YW
757users_gid = get_option('users-gid')
758substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
84786b8e 759
348b4437
YW
760conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
761conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
5c23128d 762
ace5e311
MB
763dev_kvm_mode = get_option('dev-kvm-mode')
764substs.set('DEV_KVM_MODE', dev_kvm_mode)
765conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
055a083a
MB
766group_render_mode = get_option('group-render-mode')
767substs.set('GROUP_RENDER_MODE', group_render_mode)
768conf.set10('GROUP_RENDER_UACCESS', group_render_mode != '0666')
5c23128d 769
2a4c156d
ZJS
770kill_user_processes = get_option('default-kill-user-processes')
771conf.set10('KILL_USER_PROCESSES', kill_user_processes)
c7f7e859 772conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
2a4c156d 773substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
5c23128d 774
829257d1
ZJS
775dns_servers = get_option('dns-servers')
776conf.set_quoted('DNS_SERVERS', dns_servers)
777substs.set('DNS_SERVERS', dns_servers)
5c23128d 778
829257d1
ZJS
779ntp_servers = get_option('ntp-servers')
780conf.set_quoted('NTP_SERVERS', ntp_servers)
781substs.set('NTP_SERVERS', ntp_servers)
5c23128d 782
8ca9e92c 783default_locale = get_option('default-locale')
03475e22 784if default_locale == ''
50f2fc77
JH
785 if not meson.is_cross_build()
786 choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
787 default_locale = run_command(choose_default_locale_sh).stdout().strip()
788 else
789 default_locale = 'C.UTF-8'
790 endif
03475e22 791endif
8ca9e92c
DR
792conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
793
5c23128d
ZJS
794conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
795
3131bfe3
ZJS
796substs.set('SUSHELL', get_option('debug-shell'))
797substs.set('DEBUGTTY', get_option('debug-tty'))
93912e87 798conf.set_quoted('DEBUGTTY', get_option('debug-tty'))
3131bfe3 799
349cc4a5
ZJS
800enable_debug_hashmap = false
801enable_debug_mmap_cache = false
d6601495 802enable_debug_siphash = false
8f6b442a 803foreach name : get_option('debug-extra')
ad7aa760
YW
804 if name == 'hashmap'
805 enable_debug_hashmap = true
806 elif name == 'mmap-cache'
807 enable_debug_mmap_cache = true
d6601495
YW
808 elif name == 'siphash'
809 enable_debug_siphash = true
ad7aa760
YW
810 else
811 message('unknown debug option "@0@", ignoring'.format(name))
812 endif
813endforeach
349cc4a5
ZJS
814conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
815conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
d6601495 816conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
671677da 817
d18cb393 818conf.set10('VALGRIND', get_option('valgrind'))
fd5dec9a 819conf.set10('LOG_TRACE', get_option('log-trace'))
d18cb393 820
5c23128d
ZJS
821#####################################################################
822
823threads = dependency('threads')
824librt = cc.find_library('rt')
825libm = cc.find_library('m')
826libdl = cc.find_library('dl')
827libcrypt = cc.find_library('crypt')
828
1800cc85
ZJS
829libcap = dependency('libcap', required : false)
830if not libcap.found()
831 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
832 libcap = cc.find_library('cap')
833endif
834
5c23128d 835libmount = dependency('mount',
c0b4b0f8 836 version : fuzzer_build ? '>= 0' : '>= 2.30')
5c23128d
ZJS
837
838want_seccomp = get_option('seccomp')
87ac55a1 839if want_seccomp != 'false' and not skip_deps
37efbbd8 840 libseccomp = dependency('libseccomp',
9f0e9c01 841 version : '>= 2.3.1',
37efbbd8 842 required : want_seccomp == 'true')
349cc4a5 843 have = libseccomp.found()
5c23128d 844else
349cc4a5 845 have = false
37efbbd8 846 libseccomp = []
5c23128d 847endif
349cc4a5 848conf.set10('HAVE_SECCOMP', have)
5c23128d
ZJS
849
850want_selinux = get_option('selinux')
87ac55a1 851if want_selinux != 'false' and not skip_deps
37efbbd8
ZJS
852 libselinux = dependency('libselinux',
853 version : '>= 2.1.9',
854 required : want_selinux == 'true')
349cc4a5 855 have = libselinux.found()
5c23128d 856else
349cc4a5 857 have = false
37efbbd8 858 libselinux = []
5c23128d 859endif
349cc4a5 860conf.set10('HAVE_SELINUX', have)
5c23128d
ZJS
861
862want_apparmor = get_option('apparmor')
87ac55a1 863if want_apparmor != 'false' and not skip_deps
37efbbd8
ZJS
864 libapparmor = dependency('libapparmor',
865 required : want_apparmor == 'true')
349cc4a5 866 have = libapparmor.found()
5c23128d 867else
349cc4a5 868 have = false
37efbbd8 869 libapparmor = []
5c23128d 870endif
349cc4a5 871conf.set10('HAVE_APPARMOR', have)
5c23128d 872
5c23128d
ZJS
873smack_run_label = get_option('smack-run-label')
874if smack_run_label != ''
37efbbd8 875 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
5c23128d
ZJS
876endif
877
3ca0cb73
ZJS
878want_polkit = get_option('polkit')
879install_polkit = false
880install_polkit_pkla = false
87ac55a1 881if want_polkit != 'false' and not skip_deps
37efbbd8 882 install_polkit = true
3ca0cb73 883
37efbbd8
ZJS
884 libpolkit = dependency('polkit-gobject-1',
885 required : false)
886 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
887 message('Old polkit detected, will install pkla files')
888 install_polkit_pkla = true
889 endif
3ca0cb73 890endif
349cc4a5 891conf.set10('ENABLE_POLKIT', install_polkit)
3ca0cb73 892
36f0387e 893want_acl = get_option('acl')
87ac55a1 894if want_acl != 'false' and not skip_deps
36f0387e 895 libacl = cc.find_library('acl', required : want_acl == 'true')
349cc4a5 896 have = libacl.found()
36f0387e 897else
349cc4a5 898 have = false
36f0387e
ZJS
899 libacl = []
900endif
349cc4a5 901conf.set10('HAVE_ACL', have)
36f0387e 902
5c23128d 903want_audit = get_option('audit')
87ac55a1 904if want_audit != 'false' and not skip_deps
37efbbd8 905 libaudit = dependency('audit', required : want_audit == 'true')
349cc4a5 906 have = libaudit.found()
5c23128d 907else
349cc4a5 908 have = false
37efbbd8 909 libaudit = []
5c23128d 910endif
349cc4a5 911conf.set10('HAVE_AUDIT', have)
5c23128d
ZJS
912
913want_blkid = get_option('blkid')
87ac55a1 914if want_blkid != 'false' and not skip_deps
37efbbd8 915 libblkid = dependency('blkid', required : want_blkid == 'true')
349cc4a5 916 have = libblkid.found()
5c23128d 917else
349cc4a5 918 have = false
37efbbd8 919 libblkid = []
5c23128d 920endif
349cc4a5 921conf.set10('HAVE_BLKID', have)
5c23128d
ZJS
922
923want_kmod = get_option('kmod')
87ac55a1 924if want_kmod != 'false' and not skip_deps
37efbbd8
ZJS
925 libkmod = dependency('libkmod',
926 version : '>= 15',
927 required : want_kmod == 'true')
349cc4a5 928 have = libkmod.found()
5c23128d 929else
349cc4a5 930 have = false
37efbbd8 931 libkmod = []
5c23128d 932endif
349cc4a5 933conf.set10('HAVE_KMOD', have)
5c23128d
ZJS
934
935want_pam = get_option('pam')
87ac55a1 936if want_pam != 'false' and not skip_deps
37efbbd8
ZJS
937 libpam = cc.find_library('pam', required : want_pam == 'true')
938 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
349cc4a5 939 have = libpam.found() and libpam_misc.found()
5c23128d 940else
349cc4a5 941 have = false
37efbbd8
ZJS
942 libpam = []
943 libpam_misc = []
5c23128d 944endif
349cc4a5 945conf.set10('HAVE_PAM', have)
5c23128d
ZJS
946
947want_microhttpd = get_option('microhttpd')
87ac55a1 948if want_microhttpd != 'false' and not skip_deps
37efbbd8
ZJS
949 libmicrohttpd = dependency('libmicrohttpd',
950 version : '>= 0.9.33',
951 required : want_microhttpd == 'true')
349cc4a5 952 have = libmicrohttpd.found()
5c23128d 953else
349cc4a5 954 have = false
37efbbd8 955 libmicrohttpd = []
5c23128d 956endif
349cc4a5 957conf.set10('HAVE_MICROHTTPD', have)
5c23128d
ZJS
958
959want_libcryptsetup = get_option('libcryptsetup')
87ac55a1 960if want_libcryptsetup != 'false' and not skip_deps
37efbbd8
ZJS
961 libcryptsetup = dependency('libcryptsetup',
962 version : '>= 1.6.0',
963 required : want_libcryptsetup == 'true')
349cc4a5 964 have = libcryptsetup.found()
a9fc6406
DJL
965 have_sector = cc.has_member(
966 'struct crypt_params_plain',
967 'sector_size',
968 prefix : '#include <libcryptsetup.h>')
5c23128d 969else
349cc4a5 970 have = false
a9fc6406 971 have_sector = false
37efbbd8 972 libcryptsetup = []
5c23128d 973endif
349cc4a5 974conf.set10('HAVE_LIBCRYPTSETUP', have)
a9fc6406 975conf.set10('HAVE_LIBCRYPTSETUP_SECTOR_SIZE', have_sector)
5c23128d
ZJS
976
977want_libcurl = get_option('libcurl')
87ac55a1 978if want_libcurl != 'false' and not skip_deps
37efbbd8
ZJS
979 libcurl = dependency('libcurl',
980 version : '>= 7.32.0',
981 required : want_libcurl == 'true')
349cc4a5 982 have = libcurl.found()
5c23128d 983else
349cc4a5 984 have = false
37efbbd8 985 libcurl = []
5c23128d 986endif
349cc4a5 987conf.set10('HAVE_LIBCURL', have)
5c23128d
ZJS
988
989want_libidn = get_option('libidn')
87057e24
ZJS
990want_libidn2 = get_option('libidn2')
991if want_libidn == 'true' and want_libidn2 == 'true'
992 error('libidn and libidn2 cannot be requested simultaneously')
993endif
994
1b931399
YW
995if want_libidn2 != 'false' and want_libidn != 'true' and not skip_deps
996 libidn = dependency('libidn2',
997 required : want_libidn2 == 'true')
349cc4a5 998 have = libidn.found()
87057e24 999else
349cc4a5 1000 have = false
87057e24
ZJS
1001 libidn = []
1002endif
1b931399
YW
1003conf.set10('HAVE_LIBIDN2', have)
1004if not have and want_libidn != 'false' and not skip_deps
7f7ab228 1005 # libidn is used for both libidn and libidn2 objects
1b931399
YW
1006 libidn = dependency('libidn',
1007 required : want_libidn == 'true')
349cc4a5
ZJS
1008 have = libidn.found()
1009else
1010 have = false
5c23128d 1011endif
1b931399 1012conf.set10('HAVE_LIBIDN', have)
5c23128d
ZJS
1013
1014want_libiptc = get_option('libiptc')
87ac55a1 1015if want_libiptc != 'false' and not skip_deps
37efbbd8
ZJS
1016 libiptc = dependency('libiptc',
1017 required : want_libiptc == 'true')
349cc4a5 1018 have = libiptc.found()
5c23128d 1019else
349cc4a5 1020 have = false
37efbbd8 1021 libiptc = []
5c23128d 1022endif
349cc4a5 1023conf.set10('HAVE_LIBIPTC', have)
5c23128d
ZJS
1024
1025want_qrencode = get_option('qrencode')
87ac55a1 1026if want_qrencode != 'false' and not skip_deps
37efbbd8
ZJS
1027 libqrencode = dependency('libqrencode',
1028 required : want_qrencode == 'true')
349cc4a5 1029 have = libqrencode.found()
5c23128d 1030else
349cc4a5 1031 have = false
37efbbd8 1032 libqrencode = []
5c23128d 1033endif
349cc4a5 1034conf.set10('HAVE_QRENCODE', have)
5c23128d 1035
a44fb601 1036want_gcrypt = get_option('gcrypt')
87ac55a1 1037if want_gcrypt != 'false' and not skip_deps
a44fb601
ZJS
1038 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1039 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
349cc4a5 1040 have = libgcrypt.found() and libgpg_error.found()
a44fb601 1041else
349cc4a5
ZJS
1042 have = false
1043endif
1044if not have
1045 # link to neither of the libs if one is not found
a44fb601
ZJS
1046 libgcrypt = []
1047 libgpg_error = []
1048endif
349cc4a5 1049conf.set10('HAVE_GCRYPT', have)
a44fb601 1050
5c23128d 1051want_gnutls = get_option('gnutls')
87ac55a1 1052if want_gnutls != 'false' and not skip_deps
37efbbd8
ZJS
1053 libgnutls = dependency('gnutls',
1054 version : '>= 3.1.4',
1055 required : want_gnutls == 'true')
349cc4a5 1056 have = libgnutls.found()
5c23128d 1057else
349cc4a5 1058 have = false
37efbbd8 1059 libgnutls = []
5c23128d 1060endif
349cc4a5 1061conf.set10('HAVE_GNUTLS', have)
5c23128d 1062
096cbdce 1063want_openssl = get_option('openssl')
87ac55a1 1064if want_openssl != 'false' and not skip_deps
096cbdce
IT
1065 libopenssl = dependency('openssl',
1066 version : '>= 1.1.0',
1067 required : want_openssl == 'true')
1068 have = libopenssl.found()
1069else
1070 have = false
1071 libopenssl = []
1072endif
1073conf.set10('HAVE_OPENSSL', have)
1074
5c23128d 1075want_elfutils = get_option('elfutils')
87ac55a1 1076if want_elfutils != 'false' and not skip_deps
37efbbd8
ZJS
1077 libdw = dependency('libdw',
1078 required : want_elfutils == 'true')
349cc4a5 1079 have = libdw.found()
5c23128d 1080else
349cc4a5 1081 have = false
37efbbd8 1082 libdw = []
5c23128d 1083endif
349cc4a5 1084conf.set10('HAVE_ELFUTILS', have)
5c23128d
ZJS
1085
1086want_zlib = get_option('zlib')
87ac55a1 1087if want_zlib != 'false' and not skip_deps
37efbbd8
ZJS
1088 libz = dependency('zlib',
1089 required : want_zlib == 'true')
349cc4a5 1090 have = libz.found()
5c23128d 1091else
349cc4a5 1092 have = false
37efbbd8 1093 libz = []
5c23128d 1094endif
349cc4a5 1095conf.set10('HAVE_ZLIB', have)
5c23128d
ZJS
1096
1097want_bzip2 = get_option('bzip2')
87ac55a1 1098if want_bzip2 != 'false' and not skip_deps
37efbbd8
ZJS
1099 libbzip2 = cc.find_library('bz2',
1100 required : want_bzip2 == 'true')
349cc4a5 1101 have = libbzip2.found()
5c23128d 1102else
349cc4a5 1103 have = false
37efbbd8 1104 libbzip2 = []
5c23128d 1105endif
349cc4a5 1106conf.set10('HAVE_BZIP2', have)
5c23128d
ZJS
1107
1108want_xz = get_option('xz')
87ac55a1 1109if want_xz != 'false' and not skip_deps
37efbbd8
ZJS
1110 libxz = dependency('liblzma',
1111 required : want_xz == 'true')
349cc4a5 1112 have = libxz.found()
5c23128d 1113else
349cc4a5 1114 have = false
37efbbd8 1115 libxz = []
5c23128d 1116endif
349cc4a5 1117conf.set10('HAVE_XZ', have)
5c23128d
ZJS
1118
1119want_lz4 = get_option('lz4')
87ac55a1 1120if want_lz4 != 'false' and not skip_deps
37efbbd8 1121 liblz4 = dependency('liblz4',
e0a1d4b0 1122 version : '>= 1.3.0',
37efbbd8 1123 required : want_lz4 == 'true')
349cc4a5 1124 have = liblz4.found()
5c23128d 1125else
349cc4a5 1126 have = false
37efbbd8 1127 liblz4 = []
5c23128d 1128endif
349cc4a5 1129conf.set10('HAVE_LZ4', have)
5c23128d 1130
a44fb601 1131want_xkbcommon = get_option('xkbcommon')
87ac55a1 1132if want_xkbcommon != 'false' and not skip_deps
a44fb601
ZJS
1133 libxkbcommon = dependency('xkbcommon',
1134 version : '>= 0.3.0',
1135 required : want_xkbcommon == 'true')
349cc4a5 1136 have = libxkbcommon.found()
a44fb601 1137else
349cc4a5 1138 have = false
a44fb601
ZJS
1139 libxkbcommon = []
1140endif
349cc4a5 1141conf.set10('HAVE_XKBCOMMON', have)
a44fb601 1142
c4c978a0
ZJS
1143want_pcre2 = get_option('pcre2')
1144if want_pcre2 != 'false'
1145 libpcre2 = dependency('libpcre2-8',
1146 required : want_pcre2 == 'true')
1147 have = libpcre2.found()
1148else
1149 have = false
1150 libpcre2 = []
1151endif
1152conf.set10('HAVE_PCRE2', have)
1153
69e96427 1154want_glib = get_option('glib')
87ac55a1 1155if want_glib != 'false' and not skip_deps
37efbbd8
ZJS
1156 libglib = dependency('glib-2.0',
1157 version : '>= 2.22.0',
1158 required : want_glib == 'true')
1159 libgobject = dependency('gobject-2.0',
1160 version : '>= 2.22.0',
1161 required : want_glib == 'true')
1162 libgio = dependency('gio-2.0',
1163 required : want_glib == 'true')
2c201c21 1164 have = libglib.found() and libgobject.found() and libgio.found()
69e96427 1165else
349cc4a5 1166 have = false
37efbbd8
ZJS
1167 libglib = []
1168 libgobject = []
1169 libgio = []
69e96427 1170endif
349cc4a5 1171conf.set10('HAVE_GLIB', have)
69e96427
ZJS
1172
1173want_dbus = get_option('dbus')
87ac55a1 1174if want_dbus != 'false' and not skip_deps
37efbbd8
ZJS
1175 libdbus = dependency('dbus-1',
1176 version : '>= 1.3.2',
1177 required : want_dbus == 'true')
349cc4a5 1178 have = libdbus.found()
69e96427 1179else
349cc4a5 1180 have = false
37efbbd8 1181 libdbus = []
69e96427 1182endif
349cc4a5 1183conf.set10('HAVE_DBUS', have)
69e96427 1184
42303dcb 1185default_dnssec = get_option('default-dnssec')
87ac55a1 1186if skip_deps
b4081f3e
JR
1187 default_dnssec = 'no'
1188endif
349cc4a5 1189if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
42303dcb
YW
1190 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1191 default_dnssec = 'no'
1192endif
1193conf.set('DEFAULT_DNSSEC_MODE',
1194 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1195substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1196
56ddbf10
YW
1197dns_over_tls = get_option('dns-over-tls')
1198if dns_over_tls != 'false'
096cbdce
IT
1199 if dns_over_tls == 'openssl'
1200 have_gnutls = false
1201 else
1202 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.5.3'))
1203 if dns_over_tls == 'gnutls' and not have_gnutls
1204 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1205 endif
56ddbf10 1206 endif
096cbdce
IT
1207 if dns_over_tls == 'gnutls' or have_gnutls
1208 have_openssl = false
1209 else
1210 have_openssl = conf.get('HAVE_OPENSSL') == 1
1211 if dns_over_tls != 'auto' and not have_openssl
1212 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
b349bc59 1213 error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
096cbdce
IT
1214 endif
1215 endif
1216 have = have_gnutls or have_openssl
56ddbf10 1217else
be5536a6
MO
1218 have = false
1219 have_gnutls = false
1220 have_openssl = false
56ddbf10
YW
1221endif
1222conf.set10('ENABLE_DNS_OVER_TLS', have)
096cbdce
IT
1223conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1224conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
56ddbf10 1225
c9299be2 1226default_dns_over_tls = get_option('default-dns-over-tls')
87ac55a1 1227if skip_deps
c9299be2 1228 default_dns_over_tls = 'no'
5d67a7ae 1229endif
56ddbf10 1230if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
4310bfc2 1231 message('default-dns-over-tls cannot be enabled or set to opportunistic when DNS-over-TLS support is disabled. Setting default-dns-over-tls to no.')
c9299be2 1232 default_dns_over_tls = 'no'
5d67a7ae 1233endif
c9299be2
IT
1234conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1235 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1236substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
5d67a7ae 1237
5c23128d 1238want_importd = get_option('importd')
4390be30 1239if want_importd != 'false'
349cc4a5
ZJS
1240 have = (conf.get('HAVE_LIBCURL') == 1 and
1241 conf.get('HAVE_ZLIB') == 1 and
349cc4a5
ZJS
1242 conf.get('HAVE_XZ') == 1 and
1243 conf.get('HAVE_GCRYPT') == 1)
1244 if want_importd == 'true' and not have
37efbbd8
ZJS
1245 error('importd support was requested, but dependencies are not available')
1246 endif
349cc4a5
ZJS
1247else
1248 have = false
5c23128d 1249endif
349cc4a5 1250conf.set10('ENABLE_IMPORTD', have)
5c23128d
ZJS
1251
1252want_remote = get_option('remote')
4390be30 1253if want_remote != 'false'
349cc4a5
ZJS
1254 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1255 conf.get('HAVE_LIBCURL') == 1]
37efbbd8
ZJS
1256 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1257 # it's possible to build one without the other. Complain only if
5238e957 1258 # support was explicitly requested. The auxiliary files like sysusers
37efbbd8
ZJS
1259 # config should be installed when any of the programs are built.
1260 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1261 error('remote support was requested, but dependencies are not available')
1262 endif
349cc4a5
ZJS
1263 have = have_deps[0] or have_deps[1]
1264else
1265 have = false
5c23128d 1266endif
349cc4a5 1267conf.set10('ENABLE_REMOTE', have)
5c23128d 1268
a9149d87
ZJS
1269foreach term : ['utmp',
1270 'hibernate',
1271 'environment-d',
1272 'binfmt',
1273 'coredump',
9b4abc69 1274 'pstore',
a9149d87
ZJS
1275 'resolve',
1276 'logind',
1277 'hostnamed',
1278 'localed',
1279 'machined',
61d0578b 1280 'portabled',
a9149d87
ZJS
1281 'networkd',
1282 'timedated',
1283 'timesyncd',
a9149d87
ZJS
1284 'firstboot',
1285 'randomseed',
1286 'backlight',
1287 'vconsole',
1288 'quotacheck',
1289 'sysusers',
1290 'tmpfiles',
1291 'hwdb',
1292 'rfkill',
1293 'ldconfig',
1294 'efi',
1295 'tpm',
1296 'ima',
1297 'smack',
1298 'gshadow',
1299 'idn',
08540a95 1300 'nss-myhostname',
a9149d87
ZJS
1301 'nss-systemd']
1302 have = get_option(term)
1303 name = 'ENABLE_' + term.underscorify().to_upper()
1304 conf.set10(name, have)
5c23128d
ZJS
1305endforeach
1306
08540a95
YW
1307foreach tuple : [['nss-mymachines', 'machined'],
1308 ['nss-resolve', 'resolve']]
1309 want = get_option(tuple[0])
1310 if want != 'false'
1311 have = get_option(tuple[1])
1312 if want == 'true' and not have
1313 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1314 endif
1315 else
1316 have = false
1317 endif
1318 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1319 conf.set10(name, have)
1320endforeach
1321
1322enable_nss = false
1323foreach term : ['ENABLE_NSS_MYHOSTNAME',
1324 'ENABLE_NSS_MYMACHINES',
1325 'ENABLE_NSS_RESOLVE',
1326 'ENABLE_NSS_SYSTEMD']
1327 if conf.get(term) == 1
1328 enable_nss = true
1329 endif
1330endforeach
1331conf.set10('ENABLE_NSS', enable_nss)
1332
348b4437 1333conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
6129ec85 1334
69e96427 1335tests = []
7db7d5b7 1336fuzzers = []
69e96427 1337
b68dfb9e 1338conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
00d82c81 1339
5c23128d
ZJS
1340#####################################################################
1341
1342if get_option('efi')
37efbbd8 1343 efi_arch = host_machine.cpu_family()
b710072d 1344
6800fe7f 1345 if efi_arch == 'x86'
37efbbd8 1346 EFI_MACHINE_TYPE_NAME = 'ia32'
6800fe7f 1347 gnu_efi_arch = 'ia32'
37efbbd8
ZJS
1348 elif efi_arch == 'x86_64'
1349 EFI_MACHINE_TYPE_NAME = 'x64'
6800fe7f 1350 gnu_efi_arch = 'x86_64'
37efbbd8
ZJS
1351 elif efi_arch == 'arm'
1352 EFI_MACHINE_TYPE_NAME = 'arm'
6800fe7f 1353 gnu_efi_arch = 'arm'
37efbbd8
ZJS
1354 elif efi_arch == 'aarch64'
1355 EFI_MACHINE_TYPE_NAME = 'aa64'
6800fe7f 1356 gnu_efi_arch = 'aarch64'
37efbbd8
ZJS
1357 else
1358 EFI_MACHINE_TYPE_NAME = ''
6800fe7f 1359 gnu_efi_arch = ''
37efbbd8 1360 endif
5c23128d 1361
349cc4a5 1362 have = true
37efbbd8 1363 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
80c6fce8 1364
ac09340e 1365 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
349cc4a5
ZJS
1366else
1367 have = false
5c23128d 1368endif
349cc4a5 1369conf.set10('ENABLE_EFI', have)
5c23128d
ZJS
1370
1371#####################################################################
1372
1373config_h = configure_file(
37efbbd8
ZJS
1374 output : 'config.h',
1375 configuration : conf)
5c23128d 1376
348b4437
YW
1377meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1378
5c23128d 1379includes = include_directories('src/basic',
91b08bb0 1380 'src/boot',
5c23128d
ZJS
1381 'src/shared',
1382 'src/systemd',
1383 'src/journal',
a38f7fec 1384 'src/journal-remote',
97d90615 1385 'src/nspawn',
5c23128d
ZJS
1386 'src/resolve',
1387 'src/timesync',
5c3376ef 1388 'src/time-wait-sync',
5c23128d
ZJS
1389 'src/login',
1390 'src/udev',
1391 'src/libudev',
1392 'src/core',
9e71f5d9 1393 'src/shutdown',
5c23128d
ZJS
1394 'src/libsystemd/sd-bus',
1395 'src/libsystemd/sd-device',
a137a1c3 1396 'src/libsystemd/sd-event',
5c23128d
ZJS
1397 'src/libsystemd/sd-hwdb',
1398 'src/libsystemd/sd-id128',
1399 'src/libsystemd/sd-netlink',
1400 'src/libsystemd/sd-network',
ceb26cdb 1401 'src/libsystemd/sd-resolve',
5c23128d 1402 'src/libsystemd-network',
2d4ceca8 1403 '.')
5c23128d
ZJS
1404
1405add_project_arguments('-include', 'config.h', language : 'c')
1406
6ec439fd
YW
1407generate_gperfs = find_program('tools/generate-gperfs.py')
1408
5c23128d
ZJS
1409subdir('po')
1410subdir('catalog')
1411subdir('src/systemd')
1412subdir('src/basic')
1413subdir('src/libsystemd')
1414subdir('src/libsystemd-network')
5c23128d 1415subdir('src/journal')
5c23128d 1416subdir('src/login')
5c23128d
ZJS
1417
1418libjournal_core = static_library(
37efbbd8
ZJS
1419 'journal-core',
1420 libjournal_core_sources,
1421 journald_gperf_c,
1422 include_directories : includes,
1423 install : false)
5c23128d 1424
1485aacb 1425libsystemd_sym_path = '@0@/@1@'.format(project_source_root, libsystemd_sym)
5c23128d 1426libsystemd = shared_library(
37efbbd8 1427 'systemd',
a5d8835c 1428 disable_mempool_c,
56d50ab1 1429 version : libsystemd_version,
37efbbd8
ZJS
1430 include_directories : includes,
1431 link_args : ['-shared',
1432 '-Wl,--version-script=' + libsystemd_sym_path],
34e221a5
ZJS
1433 link_with : [libbasic,
1434 libbasic_gcrypt],
5e3cec87
ZJS
1435 link_whole : [libsystemd_static,
1436 libjournal_client],
37efbbd8
ZJS
1437 dependencies : [threads,
1438 librt,
1439 libxz,
1440 liblz4],
1441 link_depends : libsystemd_sym,
1442 install : true,
1443 install_dir : rootlibdir)
5c23128d 1444
70848ecf
DC
1445static_libsystemd = get_option('static-libsystemd')
1446static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1447
1448install_libsystemd_static = static_library(
1449 'systemd',
1450 libsystemd_sources,
1451 journal_client_sources,
975464e0
ZJS
1452 basic_sources,
1453 basic_gcrypt_sources,
be44b572 1454 disable_mempool_c,
70848ecf 1455 include_directories : includes,
70848ecf
DC
1456 build_by_default : static_libsystemd != 'false',
1457 install : static_libsystemd != 'false',
1458 install_dir : rootlibdir,
1459 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1460 dependencies : [threads,
1461 librt,
1462 libxz,
1463 liblz4,
975464e0
ZJS
1464 libcap,
1465 libblkid,
1466 libmount,
1467 libselinux,
70848ecf
DC
1468 libgcrypt],
1469 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1470
5c23128d
ZJS
1471############################################################
1472
83b6af36
ZJS
1473# binaries that have --help and are intended for use by humans,
1474# usually, but not always, installed in /bin.
1475public_programs = []
1476
1477subdir('src/libudev')
1478subdir('src/shared')
1479subdir('src/core')
9e71f5d9 1480subdir('src/shutdown')
83b6af36
ZJS
1481subdir('src/udev')
1482subdir('src/network')
1483
1484subdir('src/analyze')
1485subdir('src/journal-remote')
1486subdir('src/coredump')
9b4abc69 1487subdir('src/pstore')
83b6af36
ZJS
1488subdir('src/hostname')
1489subdir('src/import')
1490subdir('src/kernel-install')
1491subdir('src/locale')
1492subdir('src/machine')
61d0578b 1493subdir('src/portable')
83b6af36
ZJS
1494subdir('src/nspawn')
1495subdir('src/resolve')
1496subdir('src/timedate')
1497subdir('src/timesync')
1498subdir('src/vconsole')
83b6af36
ZJS
1499subdir('src/boot/efi')
1500
1501subdir('src/test')
7db7d5b7 1502subdir('src/fuzz')
6b97bf22 1503subdir('rules')
83b6af36
ZJS
1504subdir('test')
1505
1506############################################################
1507
1508# only static linking apart from libdl, to make sure that the
1509# module is linked to all libraries that it uses.
1510test_dlopen = executable(
37efbbd8
ZJS
1511 'test-dlopen',
1512 test_dlopen_c,
a5d8835c 1513 disable_mempool_c,
37efbbd8
ZJS
1514 include_directories : includes,
1515 link_with : [libbasic],
fd1939fb
YW
1516 dependencies : [libdl],
1517 build_by_default : want_tests != 'false')
83b6af36 1518
08540a95 1519foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
e7e11bbf 1520 ['systemd', 'ENABLE_NSS_SYSTEMD'],
08540a95
YW
1521 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1522 ['resolve', 'ENABLE_NSS_RESOLVE']]
5c23128d 1523
349cc4a5 1524 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1525 if condition
1526 module = tuple[0]
37efbbd8
ZJS
1527
1528 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1485aacb 1529 version_script_arg = join_paths(project_source_root, sym)
37efbbd8
ZJS
1530
1531 nss = shared_library(
1532 'nss_' + module,
1533 'src/nss-@0@/nss-@0@.c'.format(module),
a5d8835c 1534 disable_mempool_c,
37efbbd8
ZJS
1535 version : '2',
1536 include_directories : includes,
b4b36f44
LP
1537 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1538 link_args : ['-Wl,-z,nodelete',
1539 '-shared',
700805f6 1540 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1541 link_with : [libsystemd_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)
2272
2273 public_programs += exe
2274endif
2275
349cc4a5 2276if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2277 exe = executable('systemd-binfmt',
2278 'src/binfmt/binfmt.c',
2279 include_directories : includes,
2280 link_with : [libshared],
2281 install_rpath : rootlibexecdir,
2282 install : true,
2283 install_dir : rootlibexecdir)
5a8b1640 2284 public_programs += exe
37efbbd8
ZJS
2285
2286 meson.add_install_script('sh', '-c',
2287 mkdir_p.format(binfmtdir))
2288 meson.add_install_script('sh', '-c',
2289 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2290endif
2291
349cc4a5 2292if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2293 executable('systemd-vconsole-setup',
2294 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2295 include_directories : includes,
2296 link_with : [libshared],
2297 install_rpath : rootlibexecdir,
2298 install : true,
2299 install_dir : rootlibexecdir)
5c23128d
ZJS
2300endif
2301
349cc4a5 2302if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2303 executable('systemd-random-seed',
2304 'src/random-seed/random-seed.c',
2305 include_directories : includes,
2306 link_with : [libshared],
2307 install_rpath : rootlibexecdir,
2308 install : true,
2309 install_dir : rootlibexecdir)
5c23128d
ZJS
2310endif
2311
349cc4a5 2312if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2313 executable('systemd-firstboot',
2314 'src/firstboot/firstboot.c',
2315 include_directories : includes,
2316 link_with : [libshared],
2317 dependencies : [libcrypt],
2318 install_rpath : rootlibexecdir,
2319 install : true,
2320 install_dir : rootbindir)
5c23128d
ZJS
2321endif
2322
2323executable('systemd-remount-fs',
2324 'src/remount-fs/remount-fs.c',
5c23128d 2325 include_directories : includes,
53f79e12
ZJS
2326 link_with : [libcore_shared,
2327 libshared],
b2fc5836 2328 install_rpath : rootlibexecdir,
5c23128d
ZJS
2329 install : true,
2330 install_dir : rootlibexecdir)
2331
2332executable('systemd-machine-id-setup',
2333 'src/machine-id-setup/machine-id-setup-main.c',
5c23128d 2334 include_directories : includes,
53f79e12
ZJS
2335 link_with : [libcore_shared,
2336 libshared],
b2fc5836 2337 install_rpath : rootlibexecdir,
5c23128d
ZJS
2338 install : true,
2339 install_dir : rootbindir)
2340
2341executable('systemd-fsck',
2342 'src/fsck/fsck.c',
2343 include_directories : includes,
aac26058 2344 link_with : [libshared],
421f0012 2345 install_rpath : rootlibexecdir,
5c23128d
ZJS
2346 install : true,
2347 install_dir : rootlibexecdir)
2348
80750adb
ZJS
2349executable('systemd-growfs',
2350 'src/partition/growfs.c',
2351 include_directories : includes,
2352 link_with : [libshared],
c34b75a1 2353 dependencies : [libcryptsetup],
80750adb
ZJS
2354 install_rpath : rootlibexecdir,
2355 install : true,
2356 install_dir : rootlibexecdir)
2357
b7f28ac5
ZJS
2358executable('systemd-makefs',
2359 'src/partition/makefs.c',
2360 include_directories : includes,
2361 link_with : [libshared],
2362 install_rpath : rootlibexecdir,
2363 install : true,
2364 install_dir : rootlibexecdir)
2365
5c23128d
ZJS
2366executable('systemd-sleep',
2367 'src/sleep/sleep.c',
2368 include_directories : includes,
2369 link_with : [libshared],
421f0012 2370 install_rpath : rootlibexecdir,
5c23128d
ZJS
2371 install : true,
2372 install_dir : rootlibexecdir)
2373
d25e127d
YW
2374install_data('src/sleep/sleep.conf',
2375 install_dir : pkgsysconfdir)
2376
005a29f2
ZJS
2377exe = executable('systemd-sysctl',
2378 'src/sysctl/sysctl.c',
2379 include_directories : includes,
2380 link_with : [libshared],
2381 install_rpath : rootlibexecdir,
2382 install : true,
2383 install_dir : rootlibexecdir)
5a8b1640 2384public_programs += exe
5c23128d
ZJS
2385
2386executable('systemd-ac-power',
2387 'src/ac-power/ac-power.c',
2388 include_directories : includes,
2389 link_with : [libshared],
421f0012 2390 install_rpath : rootlibexecdir,
5c23128d
ZJS
2391 install : true,
2392 install_dir : rootlibexecdir)
2393
005a29f2
ZJS
2394exe = executable('systemd-detect-virt',
2395 'src/detect-virt/detect-virt.c',
2396 include_directories : includes,
2397 link_with : [libshared],
2398 install_rpath : rootlibexecdir,
2399 install : true)
5a8b1640 2400public_programs += exe
005a29f2
ZJS
2401
2402exe = executable('systemd-delta',
2403 'src/delta/delta.c',
2404 include_directories : includes,
2405 link_with : [libshared],
2406 install_rpath : rootlibexecdir,
2407 install : true)
5a8b1640 2408public_programs += exe
005a29f2
ZJS
2409
2410exe = executable('systemd-escape',
2411 'src/escape/escape.c',
2412 include_directories : includes,
2413 link_with : [libshared],
2414 install_rpath : rootlibexecdir,
2415 install : true,
2416 install_dir : rootbindir)
5a8b1640 2417public_programs += exe
005a29f2
ZJS
2418
2419exe = executable('systemd-notify',
2420 'src/notify/notify.c',
2421 include_directories : includes,
2422 link_with : [libshared],
2423 install_rpath : rootlibexecdir,
2424 install : true,
2425 install_dir : rootbindir)
5a8b1640 2426public_programs += exe
5c23128d
ZJS
2427
2428executable('systemd-volatile-root',
2429 'src/volatile-root/volatile-root.c',
2430 include_directories : includes,
2431 link_with : [libshared],
421f0012 2432 install_rpath : rootlibexecdir,
5c23128d
ZJS
2433 install : true,
2434 install_dir : rootlibexecdir)
2435
2436executable('systemd-cgroups-agent',
2437 'src/cgroups-agent/cgroups-agent.c',
2438 include_directories : includes,
2439 link_with : [libshared],
421f0012 2440 install_rpath : rootlibexecdir,
5c23128d
ZJS
2441 install : true,
2442 install_dir : rootlibexecdir)
2443
0d1d512f
ZJS
2444exe = executable('systemd-id128',
2445 'src/id128/id128.c',
2446 include_directories : includes,
2447 link_with : [libshared],
2448 install_rpath : rootlibexecdir,
2449 install : true)
2450public_programs += exe
2451
005a29f2
ZJS
2452exe = executable('systemd-path',
2453 'src/path/path.c',
2454 include_directories : includes,
aac26058 2455 link_with : [libshared],
005a29f2
ZJS
2456 install_rpath : rootlibexecdir,
2457 install : true)
5a8b1640 2458public_programs += exe
005a29f2
ZJS
2459
2460exe = executable('systemd-ask-password',
2461 'src/ask-password/ask-password.c',
2462 include_directories : includes,
aac26058 2463 link_with : [libshared],
005a29f2
ZJS
2464 install_rpath : rootlibexecdir,
2465 install : true,
2466 install_dir : rootbindir)
5a8b1640 2467public_programs += exe
5c23128d
ZJS
2468
2469executable('systemd-reply-password',
2470 'src/reply-password/reply-password.c',
2471 include_directories : includes,
aac26058 2472 link_with : [libshared],
421f0012 2473 install_rpath : rootlibexecdir,
5c23128d
ZJS
2474 install : true,
2475 install_dir : rootlibexecdir)
2476
005a29f2
ZJS
2477exe = executable('systemd-tty-ask-password-agent',
2478 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2479 include_directories : includes,
aac26058 2480 link_with : [libshared],
005a29f2
ZJS
2481 install_rpath : rootlibexecdir,
2482 install : true,
2483 install_dir : rootbindir)
5a8b1640 2484public_programs += exe
005a29f2
ZJS
2485
2486exe = executable('systemd-cgls',
2487 'src/cgls/cgls.c',
2488 include_directories : includes,
aac26058 2489 link_with : [libshared],
005a29f2
ZJS
2490 install_rpath : rootlibexecdir,
2491 install : true)
5a8b1640 2492public_programs += exe
005a29f2
ZJS
2493
2494exe = executable('systemd-cgtop',
2495 'src/cgtop/cgtop.c',
2496 include_directories : includes,
aac26058 2497 link_with : [libshared],
005a29f2
ZJS
2498 install_rpath : rootlibexecdir,
2499 install : true)
5a8b1640 2500public_programs += exe
5c23128d
ZJS
2501
2502executable('systemd-initctl',
2503 'src/initctl/initctl.c',
2504 include_directories : includes,
aac26058 2505 link_with : [libshared],
421f0012 2506 install_rpath : rootlibexecdir,
5c23128d
ZJS
2507 install : true,
2508 install_dir : rootlibexecdir)
2509
005a29f2
ZJS
2510exe = executable('systemd-mount',
2511 'src/mount/mount-tool.c',
2512 include_directories : includes,
34ce0a52 2513 link_with : [libshared],
7d991d48 2514 dependencies: [libmount],
005a29f2
ZJS
2515 install_rpath : rootlibexecdir,
2516 install : true)
5a8b1640 2517public_programs += exe
5c23128d 2518
7b76fce1 2519meson.add_install_script(meson_make_symlink,
e17e5ba9 2520 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2521
005a29f2
ZJS
2522exe = executable('systemd-run',
2523 'src/run/run.c',
2524 include_directories : includes,
aac26058 2525 link_with : [libshared],
005a29f2
ZJS
2526 install_rpath : rootlibexecdir,
2527 install : true)
5a8b1640 2528public_programs += exe
005a29f2
ZJS
2529
2530exe = executable('systemd-stdio-bridge',
2531 'src/stdio-bridge/stdio-bridge.c',
2532 include_directories : includes,
aac26058 2533 link_with : [libshared],
60722ad7 2534 dependencies : [versiondep],
005a29f2
ZJS
2535 install_rpath : rootlibexecdir,
2536 install : true)
5a8b1640 2537public_programs += exe
005a29f2
ZJS
2538
2539exe = executable('busctl',
2540 'src/busctl/busctl.c',
2541 'src/busctl/busctl-introspect.c',
2542 'src/busctl/busctl-introspect.h',
2543 include_directories : includes,
aac26058 2544 link_with : [libshared],
005a29f2
ZJS
2545 install_rpath : rootlibexecdir,
2546 install : true)
5a8b1640 2547public_programs += exe
5c23128d 2548
349cc4a5 2549if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2550 exe = executable('systemd-sysusers',
2551 'src/sysusers/sysusers.c',
2552 include_directories : includes,
2553 link_with : [libshared],
2554 install_rpath : rootlibexecdir,
2555 install : true,
2556 install_dir : rootbindir)
5a8b1640 2557 public_programs += exe
5c23128d
ZJS
2558endif
2559
349cc4a5 2560if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2561 exe = executable('systemd-tmpfiles',
2562 'src/tmpfiles/tmpfiles.c',
2563 include_directories : includes,
2564 link_with : [libshared],
2565 dependencies : [libacl],
2566 install_rpath : rootlibexecdir,
2567 install : true,
2568 install_dir : rootbindir)
5a8b1640 2569 public_programs += exe
d9daae55 2570
938be089
ZJS
2571 if want_tests != 'false'
2572 test('test-systemd-tmpfiles',
2573 test_systemd_tmpfiles_py,
2574 # https://github.com/mesonbuild/meson/issues/2681
2575 args : exe.full_path())
2576 endif
5c23128d
ZJS
2577endif
2578
349cc4a5 2579if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2580 exe = executable('systemd-hwdb',
2581 'src/hwdb/hwdb.c',
2582 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2583 include_directories : includes,
0c06b506 2584 link_with : [libudev_static],
0da6f396 2585 install_rpath : udev_rpath,
37efbbd8
ZJS
2586 install : true,
2587 install_dir : rootbindir)
5a8b1640 2588 public_programs += exe
37efbbd8
ZJS
2589endif
2590
349cc4a5 2591if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2592 executable('systemd-quotacheck',
2593 'src/quotacheck/quotacheck.c',
005a29f2 2594 include_directories : includes,
aac26058 2595 link_with : [libshared],
005a29f2
ZJS
2596 install_rpath : rootlibexecdir,
2597 install : true,
37efbbd8 2598 install_dir : rootlibexecdir)
5c23128d
ZJS
2599endif
2600
005a29f2
ZJS
2601exe = executable('systemd-socket-proxyd',
2602 'src/socket-proxy/socket-proxyd.c',
2603 include_directories : includes,
aac26058 2604 link_with : [libshared],
005a29f2
ZJS
2605 dependencies : [threads],
2606 install_rpath : rootlibexecdir,
2607 install : true,
2608 install_dir : rootlibexecdir)
5a8b1640 2609public_programs += exe
005a29f2
ZJS
2610
2611exe = executable('systemd-udevd',
2612 systemd_udevd_sources,
2613 include_directories : includes,
c1cd6743 2614 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
005a29f2 2615 link_with : [libudev_core,
005a29f2 2616 libsystemd_network,
0c06b506 2617 libudev_static],
60722ad7
ZJS
2618 dependencies : [versiondep,
2619 threads,
3a30f21f 2620 libkmod,
005a29f2 2621 libidn,
aac26058
ZJS
2622 libacl,
2623 libblkid],
1aec3ed9 2624 install_rpath : udev_rpath,
005a29f2
ZJS
2625 install : true,
2626 install_dir : rootlibexecdir)
5a8b1640 2627public_programs += exe
005a29f2
ZJS
2628
2629exe = executable('udevadm',
2630 udevadm_sources,
c1cd6743 2631 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
005a29f2
ZJS
2632 include_directories : includes,
2633 link_with : [libudev_core,
005a29f2 2634 libsystemd_network,
0c06b506 2635 libudev_static],
60722ad7
ZJS
2636 dependencies : [versiondep,
2637 threads,
3a30f21f 2638 libkmod,
005a29f2 2639 libidn,
aac26058
ZJS
2640 libacl,
2641 libblkid],
1aec3ed9 2642 install_rpath : udev_rpath,
005a29f2
ZJS
2643 install : true,
2644 install_dir : rootbindir)
5a8b1640 2645public_programs += exe
5c23128d
ZJS
2646
2647executable('systemd-shutdown',
2648 systemd_shutdown_sources,
2649 include_directories : includes,
53f79e12
ZJS
2650 link_with : [libcore_shared,
2651 libshared],
95b862b0 2652 dependencies : [libmount],
421f0012 2653 install_rpath : rootlibexecdir,
5c23128d
ZJS
2654 install : true,
2655 install_dir : rootlibexecdir)
2656
2657executable('systemd-update-done',
2658 'src/update-done/update-done.c',
2659 include_directories : includes,
2660 link_with : [libshared],
421f0012 2661 install_rpath : rootlibexecdir,
5c23128d
ZJS
2662 install : true,
2663 install_dir : rootlibexecdir)
2664
2665executable('systemd-update-utmp',
2666 'src/update-utmp/update-utmp.c',
2667 include_directories : includes,
aac26058 2668 link_with : [libshared],
5c23128d 2669 dependencies : [libaudit],
421f0012 2670 install_rpath : rootlibexecdir,
5c23128d
ZJS
2671 install : true,
2672 install_dir : rootlibexecdir)
2673
349cc4a5 2674if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2675 executable('systemd-modules-load',
2676 'src/modules-load/modules-load.c',
2677 include_directories : includes,
2678 link_with : [libshared],
2679 dependencies : [libkmod],
2680 install_rpath : rootlibexecdir,
2681 install : true,
2682 install_dir : rootlibexecdir)
94e75a54 2683
37efbbd8
ZJS
2684 meson.add_install_script('sh', '-c',
2685 mkdir_p.format(modulesloaddir))
2686 meson.add_install_script('sh', '-c',
2687 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2688endif
2689
005a29f2
ZJS
2690exe = executable('systemd-nspawn',
2691 systemd_nspawn_sources,
97d90615 2692 include_directories : includes,
53f79e12
ZJS
2693 link_with : [libcore_shared,
2694 libnspawn_core,
97d90615 2695 libshared],
82384230
FB
2696 dependencies : [libblkid,
2697 libseccomp],
005a29f2
ZJS
2698 install_rpath : rootlibexecdir,
2699 install : true)
5a8b1640 2700public_programs += exe
5c23128d 2701
349cc4a5 2702if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2703 executable('systemd-networkd',
2704 systemd_networkd_sources,
2705 include_directories : includes,
2706 link_with : [libnetworkd_core,
37efbbd8 2707 libsystemd_network,
0c06b506 2708 libudev_static,
37efbbd8 2709 libshared],
4b57a272 2710 dependencies : [threads],
37efbbd8
ZJS
2711 install_rpath : rootlibexecdir,
2712 install : true,
2713 install_dir : rootlibexecdir)
2714
2715 executable('systemd-networkd-wait-online',
2716 systemd_networkd_wait_online_sources,
2717 include_directories : includes,
2718 link_with : [libnetworkd_core,
2719 libshared],
2720 install_rpath : rootlibexecdir,
2721 install : true,
2722 install_dir : rootlibexecdir)
5c23128d 2723
dcfe072a
FS
2724 exe = executable('networkctl',
2725 networkctl_sources,
2726 include_directories : includes,
2727 link_with : [libsystemd_network,
aac26058 2728 libshared],
dcfe072a
FS
2729 install_rpath : rootlibexecdir,
2730 install : true,
2731 install_dir : rootbindir)
5a8b1640 2732 public_programs += exe
426c1d38
YW
2733
2734 executable('systemd-network-generator',
2735 network_generator_sources,
2736 include_directories : includes,
2737 link_with : [libshared],
2738 install_rpath : rootlibexecdir,
2739 install : true,
2740 install_dir : rootlibexecdir)
dcfe072a 2741endif
e821f6a9
ZJS
2742
2743executable('systemd-sulogin-shell',
2744 ['src/sulogin-shell/sulogin-shell.c'],
2745 include_directories : includes,
2746 link_with : [libshared],
2747 install_rpath : rootlibexecdir,
2748 install : true,
2749 install_dir : rootlibexecdir)
2750
69e96427
ZJS
2751############################################################
2752
e2d41370
FB
2753custom_target(
2754 'systemd-runtest.env',
2755 output : 'systemd-runtest.env',
2756 command : ['sh', '-c', '{ ' +
1485aacb 2757 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
49cdae63 2758 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
e2d41370
FB
2759 '} >@OUTPUT@'],
2760 build_by_default : true)
2761
69e96427 2762foreach tuple : tests
37efbbd8
ZJS
2763 sources = tuple[0]
2764 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2765 dependencies = tuple[2]
2766 condition = tuple.length() >= 4 ? tuple[3] : ''
2767 type = tuple.length() >= 5 ? tuple[4] : ''
2768 defs = tuple.length() >= 6 ? tuple[5] : []
2769 incs = tuple.length() >= 7 ? tuple[6] : includes
2770 timeout = 30
2771
2772 name = sources[0].split('/')[-1].split('.')[0]
2773 if type.startswith('timeout=')
2774 timeout = type.split('=')[1].to_int()
2775 type = ''
2776 endif
3b2bdd62
ZJS
2777
2778 if condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2779 exe = executable(
2780 name,
2781 sources,
2782 include_directories : incs,
2783 link_with : link_with,
60722ad7
ZJS
2784 dependencies : [versiondep,
2785 dependencies],
37efbbd8 2786 c_args : defs,
3b2bdd62 2787 build_by_default : want_tests != 'false',
37efbbd8 2788 install_rpath : rootlibexecdir,
7cdd9783
MB
2789 install : install_tests,
2790 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2791
2792 if type == 'manual'
2793 message('@0@ is a manual test'.format(name))
2794 elif type == 'unsafe' and want_tests != 'unsafe'
2795 message('@0@ is an unsafe test'.format(name))
3b2bdd62 2796 elif want_tests != 'false'
37efbbd8
ZJS
2797 test(name, exe,
2798 env : test_env,
2799 timeout : timeout)
2800 endif
2801 else
2802 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2803 endif
69e96427
ZJS
2804endforeach
2805
0632b4cd 2806exe = executable(
37efbbd8
ZJS
2807 'test-libsystemd-sym',
2808 test_libsystemd_sym_c,
2809 include_directories : includes,
2810 link_with : [libsystemd],
fd1939fb 2811 build_by_default : want_tests != 'false',
37efbbd8
ZJS
2812 install : install_tests,
2813 install_dir : testsdir)
938be089
ZJS
2814if want_tests != 'false'
2815 test('test-libsystemd-sym', exe)
2816endif
37ab1a25 2817
0632b4cd
ZJS
2818exe = executable(
2819 'test-libsystemd-static-sym',
2820 test_libsystemd_sym_c,
2821 include_directories : includes,
0632b4cd
ZJS
2822 link_with : [install_libsystemd_static],
2823 dependencies : [threads], # threads is already included in dependencies on the library,
2824 # but does not seem to get propagated. Add here as a work-around.
fd1939fb 2825 build_by_default : want_tests != 'false' and static_libsystemd_pic,
20f3d32d 2826 install : install_tests and static_libsystemd_pic,
0632b4cd 2827 install_dir : testsdir)
938be089 2828if want_tests != 'false' and static_libsystemd_pic
0632b4cd
ZJS
2829 test('test-libsystemd-static-sym', exe)
2830endif
37ab1a25 2831
0632b4cd 2832exe = executable(
37efbbd8
ZJS
2833 'test-libudev-sym',
2834 test_libudev_sym_c,
2835 include_directories : includes,
c1cd6743 2836 c_args : '-Wno-deprecated-declarations',
37efbbd8 2837 link_with : [libudev],
fd1939fb 2838 build_by_default : want_tests != 'false',
37efbbd8
ZJS
2839 install : install_tests,
2840 install_dir : testsdir)
938be089
ZJS
2841if want_tests != 'false'
2842 test('test-libudev-sym', exe)
2843endif
0632b4cd
ZJS
2844
2845exe = executable(
2846 'test-libudev-static-sym',
2847 test_libudev_sym_c,
2848 include_directories : includes,
c1cd6743 2849 c_args : '-Wno-deprecated-declarations',
0632b4cd 2850 link_with : [install_libudev_static],
fd1939fb 2851 build_by_default : want_tests != 'false' and static_libudev_pic,
20f3d32d 2852 install : install_tests and static_libudev_pic,
0632b4cd 2853 install_dir : testsdir)
938be089 2854if want_tests != 'false' and static_libudev_pic
0632b4cd
ZJS
2855 test('test-libudev-static-sym', exe)
2856endif
e0bec52f 2857
69e96427 2858############################################################
5c23128d 2859
7db7d5b7
JR
2860fuzzer_exes = []
2861
5996740a 2862if get_option('tests') != 'false'
7db7d5b7
JR
2863foreach tuple : fuzzers
2864 sources = tuple[0]
2865 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2866 dependencies = tuple[2]
2867 defs = tuple.length() >= 4 ? tuple[3] : []
2868 incs = tuple.length() >= 5 ? tuple[4] : includes
9c5c4677 2869 link_args = []
7db7d5b7 2870
9c5c4677 2871 if want_ossfuzz or want_fuzzbuzz
7db7d5b7 2872 dependencies += fuzzing_engine
9c5c4677
EV
2873 elif want_libfuzzer
2874 if fuzzing_engine.found()
2875 dependencies += fuzzing_engine
2876 else
2877 link_args += ['-fsanitize=fuzzer']
2878 endif
7db7d5b7
JR
2879 else
2880 sources += 'src/fuzz/fuzz-main.c'
2881 endif
2882
87ac55a1
EV
2883 if want_fuzzbuzz
2884 sources += 'src/fuzz/fuzzer-entry-point.c'
2885 endif
2886
7db7d5b7
JR
2887 name = sources[0].split('/')[-1].split('.')[0]
2888
2889 fuzzer_exes += executable(
2890 name,
2891 sources,
2892 include_directories : [incs, include_directories('src/fuzz')],
2893 link_with : link_with,
2894 dependencies : dependencies,
2895 c_args : defs,
9c5c4677 2896 link_args: link_args,
7db7d5b7
JR
2897 install : false)
2898endforeach
5996740a 2899endif
7db7d5b7 2900
63058f43
ZJS
2901run_target('fuzzers',
2902 depends : fuzzer_exes,
7db7d5b7
JR
2903 command : ['true'])
2904
2905############################################################
2906
5c23128d
ZJS
2907make_directive_index_py = find_program('tools/make-directive-index.py')
2908make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2909xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2910hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2911
2912subdir('units')
2913subdir('sysctl.d')
2914subdir('sysusers.d')
2915subdir('tmpfiles.d')
e783f957 2916subdir('presets')
5c23128d
ZJS
2917subdir('hwdb')
2918subdir('network')
2919subdir('man')
2920subdir('shell-completion/bash')
2921subdir('shell-completion/zsh')
9e825ebf
FB
2922subdir('docs/sysvinit')
2923subdir('docs/var-log')
5c23128d 2924
5c23128d
ZJS
2925install_subdir('factory/etc',
2926 install_dir : factorydir)
2927
5c23128d
ZJS
2928install_data('xorg/50-systemd-user.sh',
2929 install_dir : xinitrcdir)
582faeb4
DJL
2930install_data('modprobe.d/systemd.conf',
2931 install_dir : modprobedir)
f09eb768 2932install_data('LICENSE.GPL2',
5c23128d 2933 'LICENSE.LGPL2.1',
f09eb768
LP
2934 'NEWS',
2935 'README',
eea98402 2936 'docs/CODING_STYLE.md',
1d1cb168 2937 'docs/DISTRO_PORTING.md',
9e825ebf 2938 'docs/ENVIRONMENT.md',
eea98402 2939 'docs/HACKING.md',
9e825ebf 2940 'docs/TRANSIENT-SETTINGS.md',
b6dc0d7d 2941 'docs/TRANSLATORS.md',
9e825ebf 2942 'docs/UIDS-GIDS.md',
5c23128d
ZJS
2943 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2944 install_dir : docdir)
d68b342b 2945
94e75a54
ZJS
2946meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2947meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2948
d68b342b
ZJS
2949############################################################
2950
005a29f2
ZJS
2951meson_check_help = find_program('tools/meson-check-help.sh')
2952
2953foreach exec : public_programs
37efbbd8 2954 name = exec.full_path().split('/')[-1]
938be089
ZJS
2955 if want_tests != 'false'
2956 test('check-help-' + name,
2957 meson_check_help,
c1cd6743 2958 args : exec.full_path())
938be089 2959 endif
005a29f2
ZJS
2960endforeach
2961
2962############################################################
2963
c6448ee3
ZJS
2964check_directives_sh = find_program('tools/check-directives.sh')
2965
2966if want_tests != 'false'
2967 test('check-directives',
2968 check_directives_sh,
2969 args : project_source_root)
2970endif
2971
2972############################################################
2973
52d4d1d3
ZJS
2974# Enable tests for all supported sanitizers
2975foreach tuple : sanitizers
2976 sanitizer = tuple[0]
2977 build = tuple[1]
b68dfb9e 2978
7a6397d2 2979 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
52d4d1d3
ZJS
2980 prev = ''
2981 foreach p : fuzz_regression_tests
2982 b = p.split('/')[-2]
2983 c = p.split('/')[-1]
2984
2985 name = '@0@:@1@'.format(b, sanitizer)
2986
2987 if name != prev
2988 if want_tests == 'false'
2989 message('Not compiling @0@ because tests is set to false'.format(name))
2990 elif slow_tests
2991 exe = custom_target(
2992 name,
2993 output : name,
2994 depends : build,
2995 command : [env, 'ln', '-fs',
2996 join_paths(build.full_path(), b),
2997 '@OUTPUT@'],
2998 build_by_default : true)
2999 else
3000 message('Not compiling @0@ because slow-tests is set to false'.format(name))
3001 endif
3002 endif
3003 prev = name
3004
3005 if want_tests != 'false' and slow_tests
3006 test('@0@:@1@:@2@'.format(b, c, sanitizer),
3007 env,
3008 args : [exe.full_path(),
1485aacb 3009 join_paths(project_source_root, p)])
52d4d1d3
ZJS
3010 endif
3011 endforeach
b68dfb9e
ZJS
3012 endif
3013endforeach
3014
52d4d1d3 3015
b68dfb9e
ZJS
3016############################################################
3017
0700e8ba 3018if git.found()
37efbbd8
ZJS
3019 all_files = run_command(
3020 git,
1485aacb 3021 ['--git-dir=@0@/.git'.format(project_source_root),
37efbbd8
ZJS
3022 'ls-files',
3023 ':/*.[ch]'])
3024 all_files = files(all_files.stdout().split())
d68b342b 3025
e85a690b 3026 custom_target(
0700e8ba 3027 'tags',
e85a690b 3028 output : 'tags',
1485aacb 3029 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
2f09974f 3030 run_target(
0700e8ba 3031 'ctags',
1485aacb 3032 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
d68b342b 3033endif
177929c2
ZJS
3034
3035if git.found()
37efbbd8 3036 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 3037 run_target(
37efbbd8 3038 'git-contrib',
37efbbd8 3039 command : [meson_git_contrib_sh])
177929c2 3040endif
dd6ab3df
ZJS
3041
3042if git.found()
3043 git_head = run_command(
3044 git,
1485aacb 3045 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3046 'rev-parse', 'HEAD']).stdout().strip()
3047 git_head_short = run_command(
3048 git,
1485aacb 3049 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3050 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3051
3052 run_target(
3053 'git-snapshot',
3054 command : ['git', 'archive',
1485aacb 3055 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
dd6ab3df
ZJS
3056 git_head_short),
3057 '--prefix', 'systemd-@0@/'.format(git_head),
3058 'HEAD'])
3059endif
829257d1
ZJS
3060
3061############################################################
3062
51b13863
LP
3063meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
3064run_target(
3065 'check-api-docs',
3066 depends : [man, libsystemd, libudev],
3067 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
3068
3069############################################################
3070
829257d1
ZJS
3071status = [
3072 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3073
2675413e 3074 'split /usr: @0@'.format(split_usr),
157baa87 3075 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
3076 'prefix directory: @0@'.format(prefixdir),
3077 'rootprefix directory: @0@'.format(rootprefixdir),
3078 'sysconf directory: @0@'.format(sysconfdir),
3079 'include directory: @0@'.format(includedir),
3080 'lib directory: @0@'.format(libdir),
3081 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
3082 'SysV init scripts: @0@'.format(sysvinit_path),
3083 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
3084 'PAM modules directory: @0@'.format(pamlibdir),
3085 'PAM configuration directory: @0@'.format(pamconfdir),
3086 'RPM macros directory: @0@'.format(rpmmacrosdir),
3087 'modprobe.d directory: @0@'.format(modprobedir),
3088 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3089 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3090 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3091 'bash completions directory: @0@'.format(bashcompletiondir),
3092 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1 3093 'extra start script: @0@'.format(get_option('rc-local')),
829257d1
ZJS
3094 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3095 get_option('debug-tty')),
3096 'TTY GID: @0@'.format(tty_gid),
ac09340e 3097 'users GID: @0@'.format(substs.get('USERS_GID')),
829257d1
ZJS
3098 'maximum system UID: @0@'.format(system_uid_max),
3099 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
3100 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3101 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3102 'minimum container UID base: @0@'.format(container_uid_base_min),
3103 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 3104 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 3105 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 3106 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 3107 'support URL: @0@'.format(support_url),
afde4574
LP
3108 'nobody user name: @0@'.format(nobody_user),
3109 'nobody group name: @0@'.format(nobody_group),
829257d1 3110 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 3111 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
3112
3113 'default DNSSEC mode: @0@'.format(default_dnssec),
c9299be2 3114 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
829257d1 3115 'default cgroup hierarchy: @0@'.format(default_hierarchy),
06da5c63 3116 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
8ca9e92c
DR
3117 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
3118 'default locale: @0@'.format(default_locale)]
829257d1
ZJS
3119
3120alt_dns_servers = '\n '.join(dns_servers.split(' '))
3121alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3122status += [
3123 'default DNS servers: @0@'.format(alt_dns_servers),
3124 'default NTP servers: @0@'.format(alt_ntp_servers)]
3125
3126alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3127 '@@0@'.format(time_epoch)).stdout().strip()
3128status += [
3129 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3130
19d8c9c9 3131status += [
abc8caf7
ZJS
3132 'static libsystemd: @0@'.format(static_libsystemd),
3133 'static libudev: @0@'.format(static_libudev)]
19d8c9c9 3134
829257d1
ZJS
3135# TODO:
3136# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3137# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3138# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3139
349cc4a5 3140if conf.get('ENABLE_EFI') == 1
5a8b1640 3141 status += 'efi arch: @0@'.format(efi_arch)
829257d1
ZJS
3142
3143 if have_gnu_efi
3144 status += [
3145 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
c512dfb9 3146 'EFI CC @0@'.format(' '.join(efi_cc)),
359b496f
YW
3147 'EFI lib directory: @0@'.format(efi_libdir),
3148 'EFI lds directory: @0@'.format(efi_ldsdir),
3149 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
3150 endif
3151endif
3152
3153found = []
3154missing = []
3155
3156foreach tuple : [
3157 ['libcryptsetup'],
3158 ['PAM'],
3159 ['AUDIT'],
3160 ['IMA'],
3161 ['AppArmor'],
3162 ['SELinux'],
3163 ['SECCOMP'],
3164 ['SMACK'],
3165 ['zlib'],
3166 ['xz'],
3167 ['lz4'],
3168 ['bzip2'],
3169 ['ACL'],
3170 ['gcrypt'],
3171 ['qrencode'],
3172 ['microhttpd'],
3173 ['gnutls'],
096cbdce 3174 ['openssl'],
829257d1 3175 ['libcurl'],
d1bf5675 3176 ['idn'],
87057e24 3177 ['libidn2'],
829257d1
ZJS
3178 ['libidn'],
3179 ['libiptc'],
3180 ['elfutils'],
3181 ['binfmt'],
3182 ['vconsole'],
3183 ['quotacheck'],
3184 ['tmpfiles'],
3185 ['environment.d'],
3186 ['sysusers'],
3187 ['firstboot'],
3188 ['randomseed'],
3189 ['backlight'],
3190 ['rfkill'],
3191 ['logind'],
3192 ['machined'],
61d0578b 3193 ['portabled'],
829257d1
ZJS
3194 ['importd'],
3195 ['hostnamed'],
3196 ['timedated'],
3197 ['timesyncd'],
3198 ['localed'],
3199 ['networkd'],
a7456af5 3200 ['resolve'],
096cbdce
IT
3201 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3202 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
829257d1 3203 ['coredump'],
9b4abc69 3204 ['pstore'],
829257d1
ZJS
3205 ['polkit'],
3206 ['legacy pkla', install_polkit_pkla],
3207 ['efi'],
3208 ['gnu-efi', have_gnu_efi],
3209 ['kmod'],
3210 ['xkbcommon'],
c4c978a0 3211 ['pcre2'],
829257d1
ZJS
3212 ['blkid'],
3213 ['dbus'],
3214 ['glib'],
6bd2bc8e
ZJS
3215 ['nss-myhostname'],
3216 ['nss-mymachines'],
3217 ['nss-resolve'],
3218 ['nss-systemd'],
829257d1
ZJS
3219 ['hwdb'],
3220 ['tpm'],
3221 ['man pages', want_man],
3222 ['html pages', want_html],
3223 ['man page indices', want_man and have_lxml],
829257d1
ZJS
3224 ['SysV compat'],
3225 ['utmp'],
3226 ['ldconfig'],
3227 ['hibernate'],
3228 ['adm group', get_option('adm-group')],
3229 ['wheel group', get_option('wheel-group')],
b14e1b43 3230 ['gshadow'],
829257d1
ZJS
3231 ['debug hashmap'],
3232 ['debug mmap cache'],
d6601495 3233 ['debug siphash'],
d18cb393 3234 ['valgrind', conf.get('VALGRIND') == 1],
fd5dec9a 3235 ['trace logging', conf.get('LOG_TRACE') == 1],
19d8c9c9
LP
3236 ['link-udev-shared', get_option('link-udev-shared')],
3237 ['link-systemctl-shared', get_option('link-systemctl-shared')],
829257d1
ZJS
3238]
3239
af4d7860
ZJS
3240 if tuple.length() >= 2
3241 cond = tuple[1]
3242 else
829257d1
ZJS
3243 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3244 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 3245 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
3246 endif
3247 if cond
5a8b1640 3248 found += tuple[0]
829257d1 3249 else
5a8b1640 3250 missing += tuple[0]
829257d1
ZJS
3251 endif
3252endforeach
3253
3254status += [
9d39c1bf 3255 '',
829257d1 3256 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
3257 '',
3258 'disabled features: @0@'.format(', '.join(missing)),
3259 '']
829257d1 3260message('\n '.join(status))
9a8e64b0
ZJS
3261
3262if rootprefixdir != rootprefix_default
8ea9fad7
YW
3263 warning('\n' +
3264 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3265 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3266 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 3267endif