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