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