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