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