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