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