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