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