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