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