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