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