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