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