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