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