]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
Merge pull request #12245 from poettering/empty-or-dash
[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',
700805f6 1609 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1610 link_with : [libsystemd_static,
37efbbd8
ZJS
1611 libbasic],
1612 dependencies : [threads,
5486a31d 1613 librt],
37efbbd8
ZJS
1614 link_depends : sym,
1615 install : true,
1616 install_dir : rootlibdir)
1617
1618 # We cannot use shared_module because it does not support version suffix.
1619 # Unfortunately shared_library insists on creating the symlink…
1620 meson.add_install_script('sh', '-c',
1621 'rm $DESTDIR@0@/libnss_@1@.so'
1622 .format(rootlibdir, module))
1623
938be089
ZJS
1624 if want_tests != 'false'
1625 test('dlopen-nss_' + module,
1626 test_dlopen,
1627 # path to dlopen must include a slash
1628 args : nss.full_path())
1629 endif
37efbbd8 1630 endif
5c23128d
ZJS
1631endforeach
1632
1633############################################################
1634
5c23128d
ZJS
1635executable('systemd',
1636 systemd_sources,
1637 include_directories : includes,
1638 link_with : [libcore,
34ce0a52 1639 libshared],
416d7d46
MO
1640 dependencies : [versiondep,
1641 threads,
5c23128d
ZJS
1642 librt,
1643 libseccomp,
1644 libselinux,
f4ee10a2
ZJS
1645 libmount,
1646 libblkid],
421f0012 1647 install_rpath : rootlibexecdir,
5c23128d
ZJS
1648 install : true,
1649 install_dir : rootlibexecdir)
1650
ba7f4ae6
ZJS
1651meson.add_install_script(meson_make_symlink,
1652 join_paths(rootlibexecdir, 'systemd'),
1653 join_paths(rootsbindir, 'init'))
1654
005a29f2
ZJS
1655exe = executable('systemd-analyze',
1656 systemd_analyze_sources,
1657 include_directories : includes,
1658 link_with : [libcore,
005a29f2 1659 libshared],
60722ad7
ZJS
1660 dependencies : [versiondep,
1661 threads,
005a29f2
ZJS
1662 librt,
1663 libseccomp,
1664 libselinux,
1665 libmount,
1666 libblkid],
1667 install_rpath : rootlibexecdir,
1668 install : true)
5a8b1640 1669public_programs += exe
5c23128d
ZJS
1670
1671executable('systemd-journald',
1672 systemd_journald_sources,
1673 include_directories : includes,
aac26058 1674 link_with : [libjournal_core,
34ce0a52 1675 libshared],
5c23128d
ZJS
1676 dependencies : [threads,
1677 libxz,
aac26058
ZJS
1678 liblz4,
1679 libselinux],
421f0012 1680 install_rpath : rootlibexecdir,
5c23128d
ZJS
1681 install : true,
1682 install_dir : rootlibexecdir)
1683
005a29f2
ZJS
1684exe = executable('systemd-cat',
1685 systemd_cat_sources,
1686 include_directories : includes,
1687 link_with : [libjournal_core,
34ce0a52 1688 libshared],
005a29f2
ZJS
1689 dependencies : [threads],
1690 install_rpath : rootlibexecdir,
1691 install : true)
5a8b1640 1692public_programs += exe
005a29f2
ZJS
1693
1694exe = executable('journalctl',
1695 journalctl_sources,
1696 include_directories : includes,
34ce0a52 1697 link_with : [libshared],
005a29f2
ZJS
1698 dependencies : [threads,
1699 libqrencode,
1700 libxz,
6becf48c
ZJS
1701 liblz4,
1702 libpcre2],
005a29f2
ZJS
1703 install_rpath : rootlibexecdir,
1704 install : true,
1705 install_dir : rootbindir)
5a8b1640 1706public_programs += exe
5c23128d
ZJS
1707
1708executable('systemd-getty-generator',
1709 'src/getty-generator/getty-generator.c',
5c23128d 1710 include_directories : includes,
b2fc5836
ZJS
1711 link_with : [libshared],
1712 install_rpath : rootlibexecdir,
1713 install : true,
1714 install_dir : systemgeneratordir)
5c23128d
ZJS
1715
1716executable('systemd-debug-generator',
1717 'src/debug-generator/debug-generator.c',
5c23128d 1718 include_directories : includes,
b2fc5836
ZJS
1719 link_with : [libshared],
1720 install_rpath : rootlibexecdir,
35a1ff4c
LP
1721 install : true,
1722 install_dir : systemgeneratordir)
1723
1724executable('systemd-run-generator',
1725 'src/run-generator/run-generator.c',
1726 include_directories : includes,
1727 link_with : [libshared],
1728 install_rpath : rootlibexecdir,
b2fc5836
ZJS
1729 install : true,
1730 install_dir : systemgeneratordir)
5c23128d
ZJS
1731
1732executable('systemd-fstab-generator',
1733 'src/fstab-generator/fstab-generator.c',
5c23128d 1734 include_directories : includes,
53f79e12
ZJS
1735 link_with : [libcore_shared,
1736 libshared],
b2fc5836
ZJS
1737 install_rpath : rootlibexecdir,
1738 install : true,
1739 install_dir : systemgeneratordir)
5c23128d 1740
349cc4a5 1741if conf.get('ENABLE_ENVIRONMENT_D') == 1
37efbbd8
ZJS
1742 executable('30-systemd-environment-d-generator',
1743 'src/environment-d-generator/environment-d-generator.c',
1744 include_directories : includes,
1745 link_with : [libshared],
1746 install_rpath : rootlibexecdir,
1747 install : true,
1748 install_dir : userenvgeneratordir)
7b76fce1 1749
37efbbd8
ZJS
1750 meson.add_install_script(meson_make_symlink,
1751 join_paths(sysconfdir, 'environment'),
1752 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1753endif
1754
349cc4a5 1755if conf.get('ENABLE_HIBERNATE') == 1
37efbbd8
ZJS
1756 executable('systemd-hibernate-resume-generator',
1757 'src/hibernate-resume/hibernate-resume-generator.c',
1758 include_directories : includes,
1759 link_with : [libshared],
1760 install_rpath : rootlibexecdir,
1761 install : true,
1762 install_dir : systemgeneratordir)
5c23128d 1763
37efbbd8
ZJS
1764 executable('systemd-hibernate-resume',
1765 'src/hibernate-resume/hibernate-resume.c',
005a29f2
ZJS
1766 include_directories : includes,
1767 link_with : [libshared],
1768 install_rpath : rootlibexecdir,
1769 install : true,
1770 install_dir : rootlibexecdir)
37efbbd8
ZJS
1771endif
1772
349cc4a5 1773if conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1774 executable('systemd-gpt-auto-generator',
1775 'src/gpt-auto-generator/gpt-auto-generator.c',
d284b82b 1776 'src/shared/blkid-util.h',
37efbbd8 1777 include_directories : includes,
34ce0a52 1778 link_with : [libshared],
37efbbd8
ZJS
1779 dependencies : libblkid,
1780 install_rpath : rootlibexecdir,
1781 install : true,
1782 install_dir : systemgeneratordir)
1783
1784 exe = executable('systemd-dissect',
1785 'src/dissect/dissect.c',
1786 include_directories : includes,
1787 link_with : [libshared],
1788 install_rpath : rootlibexecdir,
1789 install : true,
1790 install_dir : rootlibexecdir)
5a8b1640 1791 public_programs += exe
5c23128d
ZJS
1792endif
1793
1ec57f33 1794if conf.get('ENABLE_RESOLVE') == 1
37efbbd8
ZJS
1795 executable('systemd-resolved',
1796 systemd_resolved_sources,
005a29f2 1797 include_directories : includes,
34e221a5 1798 link_with : [libshared,
568a4ff8
ZJS
1799 libbasic_gcrypt,
1800 libsystemd_resolve_core],
56ddbf10 1801 dependencies : systemd_resolved_dependencies,
005a29f2 1802 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1803 install : true,
1804 install_dir : rootlibexecdir)
1805
c2e84cab
YW
1806 exe = executable('resolvectl',
1807 resolvectl_sources,
37efbbd8 1808 include_directories : includes,
34e221a5 1809 link_with : [libshared,
568a4ff8
ZJS
1810 libbasic_gcrypt,
1811 libsystemd_resolve_core],
37efbbd8 1812 dependencies : [threads,
76c87410 1813 libgpg_error,
37efbbd8
ZJS
1814 libm,
1815 libidn],
1816 install_rpath : rootlibexecdir,
1817 install : true)
5a8b1640 1818 public_programs += exe
088c1363
LP
1819
1820 meson.add_install_script(meson_make_symlink,
c2e84cab 1821 join_paths(bindir, 'resolvectl'),
088c1363 1822 join_paths(rootsbindir, 'resolvconf'))
c2e84cab
YW
1823
1824 meson.add_install_script(meson_make_symlink,
1825 join_paths(bindir, 'resolvectl'),
1826 join_paths(bindir, 'systemd-resolve'))
5c23128d
ZJS
1827endif
1828
349cc4a5 1829if conf.get('ENABLE_LOGIND') == 1
37efbbd8
ZJS
1830 executable('systemd-logind',
1831 systemd_logind_sources,
005a29f2 1832 include_directories : includes,
37efbbd8 1833 link_with : [liblogind_core,
34ce0a52 1834 libshared],
005a29f2 1835 dependencies : [threads,
37efbbd8 1836 libacl],
005a29f2
ZJS
1837 install_rpath : rootlibexecdir,
1838 install : true,
37efbbd8
ZJS
1839 install_dir : rootlibexecdir)
1840
1841 exe = executable('loginctl',
1842 loginctl_sources,
1843 include_directories : includes,
34ce0a52 1844 link_with : [libshared],
37efbbd8
ZJS
1845 dependencies : [threads,
1846 liblz4,
1847 libxz],
1848 install_rpath : rootlibexecdir,
1849 install : true,
1850 install_dir : rootbindir)
5a8b1640 1851 public_programs += exe
37efbbd8
ZJS
1852
1853 exe = executable('systemd-inhibit',
1854 'src/login/inhibit.c',
1855 include_directories : includes,
1856 link_with : [libshared],
1857 install_rpath : rootlibexecdir,
1858 install : true,
1859 install_dir : rootbindir)
5a8b1640 1860 public_programs += exe
37efbbd8 1861
349cc4a5 1862 if conf.get('HAVE_PAM') == 1
1485aacb 1863 version_script_arg = join_paths(project_source_root, pam_systemd_sym)
37efbbd8
ZJS
1864 pam_systemd = shared_library(
1865 'pam_systemd',
1866 pam_systemd_c,
1867 name_prefix : '',
1868 include_directories : includes,
1869 link_args : ['-shared',
1870 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1871 link_with : [libsystemd_static,
37efbbd8
ZJS
1872 libshared_static],
1873 dependencies : [threads,
1874 libpam,
1875 libpam_misc],
1876 link_depends : pam_systemd_sym,
1877 install : true,
1878 install_dir : pamlibdir)
1879
938be089
ZJS
1880 if want_tests != 'false'
1881 test('dlopen-pam_systemd',
1882 test_dlopen,
1883 # path to dlopen must include a slash
c1cd6743 1884 args : pam_systemd.full_path())
938be089 1885 endif
37efbbd8 1886 endif
005a29f2 1887
07ee5adb
LP
1888 executable('systemd-user-runtime-dir',
1889 user_runtime_dir_sources,
1890 include_directories : includes,
1891 link_with : [libshared],
1892 install_rpath : rootlibexecdir,
1893 install : true,
1894 install_dir : rootlibexecdir)
1895endif
a9f0f5e5 1896
349cc4a5 1897if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1898 executable('systemd-user-sessions',
1899 'src/user-sessions/user-sessions.c',
005a29f2 1900 include_directories : includes,
aac26058 1901 link_with : [libshared],
005a29f2
ZJS
1902 install_rpath : rootlibexecdir,
1903 install : true,
37efbbd8 1904 install_dir : rootlibexecdir)
5c23128d
ZJS
1905endif
1906
349cc4a5 1907if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1908 exe = executable('bootctl',
1909 'src/boot/bootctl.c',
1910 include_directories : includes,
1911 link_with : [libshared],
1912 dependencies : [libblkid],
1913 install_rpath : rootlibexecdir,
1914 install : true)
5a8b1640 1915 public_programs += exe
36695e88
LP
1916
1917 executable('systemd-bless-boot',
1918 'src/boot/bless-boot.c',
1919 include_directories : includes,
1920 link_with : [libshared],
1921 dependencies : [libblkid],
1922 install_rpath : rootlibexecdir,
1923 install : true,
1924 install_dir : rootlibexecdir)
8d16ed07
LP
1925
1926 executable('systemd-bless-boot-generator',
1927 'src/boot/bless-boot-generator.c',
1928 include_directories : includes,
1929 link_with : [libshared],
1930 install_rpath : rootlibexecdir,
1931 install : true,
1932 install_dir : systemgeneratordir)
005a29f2
ZJS
1933endif
1934
f876f537
LP
1935executable('systemd-boot-check-no-failures',
1936 'src/boot/boot-check-no-failures.c',
1937 include_directories : includes,
1938 link_with : [libshared],
1939 dependencies : [libblkid],
1940 install_rpath : rootlibexecdir,
1941 install : true,
1942 install_dir : rootlibexecdir)
1943
005a29f2
ZJS
1944exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1945 include_directories : includes,
1946 link_with : [libshared],
1947 dependencies : [threads],
1948 install_rpath : rootlibexecdir,
1949 install : true)
5a8b1640 1950public_programs += exe
005a29f2 1951
f3794366
FS
1952
1953if get_option('link-systemctl-shared')
1954 systemctl_link_with = [libshared]
1955else
1956 systemctl_link_with = [libsystemd_static,
1957 libshared_static,
1958 libjournal_client,
1959 libbasic_gcrypt]
1960endif
1961
63a3b3cb
LP
1962exe = executable('systemctl',
1963 'src/systemctl/systemctl.c',
1964 'src/systemctl/sysv-compat.h',
1965 'src/systemctl/sysv-compat.c',
005a29f2 1966 include_directories : includes,
f3794366 1967 link_with : systemctl_link_with,
005a29f2
ZJS
1968 dependencies : [threads,
1969 libcap,
1970 libselinux,
1971 libxz,
1972 liblz4],
1973 install_rpath : rootlibexecdir,
1974 install : true,
1975 install_dir : rootbindir)
5a8b1640 1976public_programs += exe
5c23128d 1977
61d0578b
LP
1978if conf.get('ENABLE_PORTABLED') == 1
1979 executable('systemd-portabled',
1980 systemd_portabled_sources,
1981 include_directories : includes,
1982 link_with : [libshared],
1983 dependencies : [threads],
1984 install_rpath : rootlibexecdir,
1985 install : true,
1986 install_dir : rootlibexecdir)
1987
1988 exe = executable('portablectl', 'src/portable/portablectl.c',
1989 include_directories : includes,
1990 link_with : [libshared],
1991 dependencies : [threads],
1992 install_rpath : rootlibexecdir,
1993 install : true,
80f39b81 1994 install_dir : rootbindir)
5a8b1640 1995 public_programs += exe
61d0578b
LP
1996endif
1997
ba7f4ae6
ZJS
1998foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1999 meson.add_install_script(meson_make_symlink,
2000 join_paths(rootbindir, 'systemctl'),
2001 join_paths(rootsbindir, alias))
2002endforeach
2003
349cc4a5 2004if conf.get('ENABLE_BACKLIGHT') == 1
37efbbd8
ZJS
2005 executable('systemd-backlight',
2006 'src/backlight/backlight.c',
2007 include_directories : includes,
34ce0a52 2008 link_with : [libshared],
37efbbd8
ZJS
2009 install_rpath : rootlibexecdir,
2010 install : true,
2011 install_dir : rootlibexecdir)
5c23128d
ZJS
2012endif
2013
349cc4a5 2014if conf.get('ENABLE_RFKILL') == 1
37efbbd8
ZJS
2015 executable('systemd-rfkill',
2016 'src/rfkill/rfkill.c',
2017 include_directories : includes,
34ce0a52 2018 link_with : [libshared],
37efbbd8
ZJS
2019 install_rpath : rootlibexecdir,
2020 install : true,
2021 install_dir : rootlibexecdir)
5c23128d
ZJS
2022endif
2023
2024executable('systemd-system-update-generator',
2025 'src/system-update-generator/system-update-generator.c',
2026 include_directories : includes,
2027 link_with : [libshared],
b2fc5836 2028 install_rpath : rootlibexecdir,
5c23128d
ZJS
2029 install : true,
2030 install_dir : systemgeneratordir)
2031
349cc4a5 2032if conf.get('HAVE_LIBCRYPTSETUP') == 1
37efbbd8
ZJS
2033 executable('systemd-cryptsetup',
2034 'src/cryptsetup/cryptsetup.c',
2035 include_directories : includes,
2036 link_with : [libshared],
2037 dependencies : [libcryptsetup],
2038 install_rpath : rootlibexecdir,
2039 install : true,
2040 install_dir : rootlibexecdir)
2041
2042 executable('systemd-cryptsetup-generator',
2043 'src/cryptsetup/cryptsetup-generator.c',
2044 include_directories : includes,
2045 link_with : [libshared],
2046 dependencies : [libcryptsetup],
2047 install_rpath : rootlibexecdir,
2048 install : true,
2049 install_dir : systemgeneratordir)
2050
2051 executable('systemd-veritysetup',
2052 'src/veritysetup/veritysetup.c',
2053 include_directories : includes,
2054 link_with : [libshared],
2055 dependencies : [libcryptsetup],
2056 install_rpath : rootlibexecdir,
2057 install : true,
2058 install_dir : rootlibexecdir)
2059
2060 executable('systemd-veritysetup-generator',
2061 'src/veritysetup/veritysetup-generator.c',
2062 include_directories : includes,
2063 link_with : [libshared],
2064 dependencies : [libcryptsetup],
2065 install_rpath : rootlibexecdir,
2066 install : true,
2067 install_dir : systemgeneratordir)
5c23128d
ZJS
2068endif
2069
349cc4a5 2070if conf.get('HAVE_SYSV_COMPAT') == 1
37efbbd8
ZJS
2071 executable('systemd-sysv-generator',
2072 'src/sysv-generator/sysv-generator.c',
2073 include_directories : includes,
2074 link_with : [libshared],
2075 install_rpath : rootlibexecdir,
2076 install : true,
2077 install_dir : systemgeneratordir)
2078
2079 executable('systemd-rc-local-generator',
2080 'src/rc-local-generator/rc-local-generator.c',
2081 include_directories : includes,
2082 link_with : [libshared],
2083 install_rpath : rootlibexecdir,
2084 install : true,
2085 install_dir : systemgeneratordir)
5c23128d
ZJS
2086endif
2087
349cc4a5 2088if conf.get('ENABLE_HOSTNAMED') == 1
37efbbd8
ZJS
2089 executable('systemd-hostnamed',
2090 'src/hostname/hostnamed.c',
005a29f2 2091 include_directories : includes,
aac26058 2092 link_with : [libshared],
005a29f2 2093 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2094 install : true,
2095 install_dir : rootlibexecdir)
2096
2097 exe = executable('hostnamectl',
2098 'src/hostname/hostnamectl.c',
2099 include_directories : includes,
2100 link_with : [libshared],
2101 install_rpath : rootlibexecdir,
2102 install : true)
5a8b1640 2103 public_programs += exe
5c23128d
ZJS
2104endif
2105
349cc4a5
ZJS
2106if conf.get('ENABLE_LOCALED') == 1
2107 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
2108 # logind will load libxkbcommon.so dynamically on its own
2109 deps = [libdl]
2110 else
2111 deps = []
2112 endif
2113
2114 executable('systemd-localed',
2115 systemd_localed_sources,
005a29f2 2116 include_directories : includes,
aac26058 2117 link_with : [libshared],
37efbbd8 2118 dependencies : deps,
005a29f2 2119 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2120 install : true,
2121 install_dir : rootlibexecdir)
2122
2123 exe = executable('localectl',
2124 localectl_sources,
2125 include_directories : includes,
2126 link_with : [libshared],
2127 install_rpath : rootlibexecdir,
2128 install : true)
5a8b1640 2129 public_programs += exe
5c23128d
ZJS
2130endif
2131
349cc4a5 2132if conf.get('ENABLE_TIMEDATED') == 1
37efbbd8
ZJS
2133 executable('systemd-timedated',
2134 'src/timedate/timedated.c',
005a29f2 2135 include_directories : includes,
aac26058 2136 link_with : [libshared],
37efbbd8
ZJS
2137 install_rpath : rootlibexecdir,
2138 install : true,
2139 install_dir : rootlibexecdir)
6129ec85 2140endif
5c23128d 2141
6129ec85 2142if conf.get('ENABLE_TIMEDATECTL') == 1
37efbbd8
ZJS
2143 exe = executable('timedatectl',
2144 'src/timedate/timedatectl.c',
2145 include_directories : includes,
2146 install_rpath : rootlibexecdir,
2147 link_with : [libshared],
6129ec85 2148 dependencies : [libm],
37efbbd8 2149 install : true)
5a8b1640 2150 public_programs += exe
5c23128d
ZJS
2151endif
2152
349cc4a5 2153if conf.get('ENABLE_TIMESYNCD') == 1
37efbbd8
ZJS
2154 executable('systemd-timesyncd',
2155 systemd_timesyncd_sources,
005a29f2 2156 include_directories : includes,
aac26058 2157 link_with : [libshared],
005a29f2 2158 dependencies : [threads,
37efbbd8 2159 libm],
005a29f2
ZJS
2160 install_rpath : rootlibexecdir,
2161 install : true,
37efbbd8 2162 install_dir : rootlibexecdir)
5c3376ef
PB
2163
2164 executable('systemd-time-wait-sync',
2165 'src/time-wait-sync/time-wait-sync.c',
2166 include_directories : includes,
2167 link_with : [libshared],
2168 install_rpath : rootlibexecdir,
2169 install : true,
2170 install_dir : rootlibexecdir)
5c23128d
ZJS
2171endif
2172
349cc4a5 2173if conf.get('ENABLE_MACHINED') == 1
37efbbd8
ZJS
2174 executable('systemd-machined',
2175 systemd_machined_sources,
2176 include_directories : includes,
2177 link_with : [libmachine_core,
2178 libshared],
2179 install_rpath : rootlibexecdir,
2180 install : true,
2181 install_dir : rootlibexecdir)
2182
2183 exe = executable('machinectl',
2184 'src/machine/machinectl.c',
2185 include_directories : includes,
2186 link_with : [libshared],
2187 dependencies : [threads,
2188 libxz,
2189 liblz4],
2190 install_rpath : rootlibexecdir,
2191 install : true,
2192 install_dir : rootbindir)
5a8b1640 2193 public_programs += exe
5c23128d
ZJS
2194endif
2195
349cc4a5 2196if conf.get('ENABLE_IMPORTD') == 1
37efbbd8
ZJS
2197 executable('systemd-importd',
2198 systemd_importd_sources,
005a29f2 2199 include_directories : includes,
aac26058 2200 link_with : [libshared],
37efbbd8 2201 dependencies : [threads],
005a29f2
ZJS
2202 install_rpath : rootlibexecdir,
2203 install : true,
2204 install_dir : rootlibexecdir)
37efbbd8
ZJS
2205
2206 systemd_pull = executable('systemd-pull',
2207 systemd_pull_sources,
2208 include_directories : includes,
2209 link_with : [libshared],
60722ad7
ZJS
2210 dependencies : [versiondep,
2211 libcurl,
37efbbd8
ZJS
2212 libz,
2213 libbzip2,
2214 libxz,
2215 libgcrypt],
2216 install_rpath : rootlibexecdir,
2217 install : true,
2218 install_dir : rootlibexecdir)
2219
2220 systemd_import = executable('systemd-import',
2221 systemd_import_sources,
2222 include_directories : includes,
2223 link_with : [libshared],
2224 dependencies : [libcurl,
2225 libz,
2226 libbzip2,
2227 libxz],
2228 install_rpath : rootlibexecdir,
2229 install : true,
2230 install_dir : rootlibexecdir)
2231
1d7579c4
LP
2232 systemd_import_fs = executable('systemd-import-fs',
2233 systemd_import_fs_sources,
2234 include_directories : includes,
2235 link_with : [libshared],
2236 install_rpath : rootlibexecdir,
2237 install : true,
2238 install_dir : rootlibexecdir)
2239
37efbbd8
ZJS
2240 systemd_export = executable('systemd-export',
2241 systemd_export_sources,
2242 include_directories : includes,
2243 link_with : [libshared],
2244 dependencies : [libcurl,
2245 libz,
2246 libbzip2,
2247 libxz],
2248 install_rpath : rootlibexecdir,
2249 install : true,
2250 install_dir : rootlibexecdir)
1d7579c4
LP
2251
2252 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
37efbbd8
ZJS
2253endif
2254
349cc4a5 2255if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
37efbbd8
ZJS
2256 exe = executable('systemd-journal-upload',
2257 systemd_journal_upload_sources,
2258 include_directories : includes,
2259 link_with : [libshared],
60722ad7
ZJS
2260 dependencies : [versiondep,
2261 threads,
37efbbd8
ZJS
2262 libcurl,
2263 libgnutls,
2264 libxz,
2265 liblz4],
2266 install_rpath : rootlibexecdir,
2267 install : true,
2268 install_dir : rootlibexecdir)
5a8b1640 2269 public_programs += exe
5c23128d
ZJS
2270endif
2271
349cc4a5 2272if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
37efbbd8
ZJS
2273 s_j_remote = executable('systemd-journal-remote',
2274 systemd_journal_remote_sources,
2275 include_directories : includes,
c064d8db
ZJS
2276 link_with : [libshared,
2277 libsystemd_journal_remote],
37efbbd8
ZJS
2278 dependencies : [threads,
2279 libmicrohttpd,
2280 libgnutls,
2281 libxz,
2282 liblz4],
2283 install_rpath : rootlibexecdir,
2284 install : true,
2285 install_dir : rootlibexecdir)
2286
2287 s_j_gatewayd = executable('systemd-journal-gatewayd',
2288 systemd_journal_gatewayd_sources,
2289 include_directories : includes,
2290 link_with : [libshared],
2291 dependencies : [threads,
2292 libmicrohttpd,
2293 libgnutls,
2294 libxz,
2295 liblz4],
2296 install_rpath : rootlibexecdir,
2297 install : true,
2298 install_dir : rootlibexecdir)
2299 public_programs += [s_j_remote, s_j_gatewayd]
5c23128d
ZJS
2300endif
2301
349cc4a5 2302if conf.get('ENABLE_COREDUMP') == 1
37efbbd8
ZJS
2303 executable('systemd-coredump',
2304 systemd_coredump_sources,
005a29f2 2305 include_directories : includes,
aac26058 2306 link_with : [libshared],
005a29f2 2307 dependencies : [threads,
37efbbd8
ZJS
2308 libacl,
2309 libdw,
005a29f2
ZJS
2310 libxz,
2311 liblz4],
2312 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2313 install : true,
2314 install_dir : rootlibexecdir)
2315
2316 exe = executable('coredumpctl',
2317 coredumpctl_sources,
2318 include_directories : includes,
2319 link_with : [libshared],
2320 dependencies : [threads,
2321 libxz,
2322 liblz4],
2323 install_rpath : rootlibexecdir,
2324 install : true)
5a8b1640 2325 public_programs += exe
5c23128d
ZJS
2326endif
2327
349cc4a5 2328if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2329 exe = executable('systemd-binfmt',
2330 'src/binfmt/binfmt.c',
2331 include_directories : includes,
2332 link_with : [libshared],
2333 install_rpath : rootlibexecdir,
2334 install : true,
2335 install_dir : rootlibexecdir)
5a8b1640 2336 public_programs += exe
37efbbd8
ZJS
2337
2338 meson.add_install_script('sh', '-c',
2339 mkdir_p.format(binfmtdir))
2340 meson.add_install_script('sh', '-c',
2341 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2342endif
2343
349cc4a5 2344if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2345 executable('systemd-vconsole-setup',
2346 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2347 include_directories : includes,
2348 link_with : [libshared],
2349 install_rpath : rootlibexecdir,
2350 install : true,
2351 install_dir : rootlibexecdir)
5c23128d
ZJS
2352endif
2353
349cc4a5 2354if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2355 executable('systemd-random-seed',
2356 'src/random-seed/random-seed.c',
2357 include_directories : includes,
2358 link_with : [libshared],
2359 install_rpath : rootlibexecdir,
2360 install : true,
2361 install_dir : rootlibexecdir)
5c23128d
ZJS
2362endif
2363
349cc4a5 2364if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2365 executable('systemd-firstboot',
2366 'src/firstboot/firstboot.c',
2367 include_directories : includes,
2368 link_with : [libshared],
2369 dependencies : [libcrypt],
2370 install_rpath : rootlibexecdir,
2371 install : true,
2372 install_dir : rootbindir)
5c23128d
ZJS
2373endif
2374
2375executable('systemd-remount-fs',
2376 'src/remount-fs/remount-fs.c',
5c23128d 2377 include_directories : includes,
53f79e12
ZJS
2378 link_with : [libcore_shared,
2379 libshared],
b2fc5836 2380 install_rpath : rootlibexecdir,
5c23128d
ZJS
2381 install : true,
2382 install_dir : rootlibexecdir)
2383
2384executable('systemd-machine-id-setup',
2385 'src/machine-id-setup/machine-id-setup-main.c',
5c23128d 2386 include_directories : includes,
53f79e12
ZJS
2387 link_with : [libcore_shared,
2388 libshared],
b2fc5836 2389 install_rpath : rootlibexecdir,
5c23128d
ZJS
2390 install : true,
2391 install_dir : rootbindir)
2392
2393executable('systemd-fsck',
2394 'src/fsck/fsck.c',
2395 include_directories : includes,
aac26058 2396 link_with : [libshared],
421f0012 2397 install_rpath : rootlibexecdir,
5c23128d
ZJS
2398 install : true,
2399 install_dir : rootlibexecdir)
2400
80750adb
ZJS
2401executable('systemd-growfs',
2402 'src/partition/growfs.c',
2403 include_directories : includes,
2404 link_with : [libshared],
c34b75a1 2405 dependencies : [libcryptsetup],
80750adb
ZJS
2406 install_rpath : rootlibexecdir,
2407 install : true,
2408 install_dir : rootlibexecdir)
2409
b7f28ac5
ZJS
2410executable('systemd-makefs',
2411 'src/partition/makefs.c',
2412 include_directories : includes,
2413 link_with : [libshared],
2414 install_rpath : rootlibexecdir,
2415 install : true,
2416 install_dir : rootlibexecdir)
2417
5c23128d
ZJS
2418executable('systemd-sleep',
2419 'src/sleep/sleep.c',
2420 include_directories : includes,
2421 link_with : [libshared],
421f0012 2422 install_rpath : rootlibexecdir,
5c23128d
ZJS
2423 install : true,
2424 install_dir : rootlibexecdir)
2425
d25e127d
YW
2426install_data('src/sleep/sleep.conf',
2427 install_dir : pkgsysconfdir)
2428
005a29f2
ZJS
2429exe = executable('systemd-sysctl',
2430 'src/sysctl/sysctl.c',
2431 include_directories : includes,
2432 link_with : [libshared],
2433 install_rpath : rootlibexecdir,
2434 install : true,
2435 install_dir : rootlibexecdir)
5a8b1640 2436public_programs += exe
5c23128d
ZJS
2437
2438executable('systemd-ac-power',
2439 'src/ac-power/ac-power.c',
2440 include_directories : includes,
2441 link_with : [libshared],
421f0012 2442 install_rpath : rootlibexecdir,
5c23128d
ZJS
2443 install : true,
2444 install_dir : rootlibexecdir)
2445
005a29f2
ZJS
2446exe = executable('systemd-detect-virt',
2447 'src/detect-virt/detect-virt.c',
2448 include_directories : includes,
2449 link_with : [libshared],
2450 install_rpath : rootlibexecdir,
2451 install : true)
5a8b1640 2452public_programs += exe
005a29f2
ZJS
2453
2454exe = executable('systemd-delta',
2455 'src/delta/delta.c',
2456 include_directories : includes,
2457 link_with : [libshared],
2458 install_rpath : rootlibexecdir,
2459 install : true)
5a8b1640 2460public_programs += exe
005a29f2
ZJS
2461
2462exe = executable('systemd-escape',
2463 'src/escape/escape.c',
2464 include_directories : includes,
2465 link_with : [libshared],
2466 install_rpath : rootlibexecdir,
2467 install : true,
2468 install_dir : rootbindir)
5a8b1640 2469public_programs += exe
005a29f2
ZJS
2470
2471exe = executable('systemd-notify',
2472 'src/notify/notify.c',
2473 include_directories : includes,
2474 link_with : [libshared],
2475 install_rpath : rootlibexecdir,
2476 install : true,
2477 install_dir : rootbindir)
5a8b1640 2478public_programs += exe
5c23128d
ZJS
2479
2480executable('systemd-volatile-root',
2481 'src/volatile-root/volatile-root.c',
2482 include_directories : includes,
2483 link_with : [libshared],
421f0012 2484 install_rpath : rootlibexecdir,
5c23128d
ZJS
2485 install : true,
2486 install_dir : rootlibexecdir)
2487
2488executable('systemd-cgroups-agent',
2489 'src/cgroups-agent/cgroups-agent.c',
2490 include_directories : includes,
2491 link_with : [libshared],
421f0012 2492 install_rpath : rootlibexecdir,
5c23128d
ZJS
2493 install : true,
2494 install_dir : rootlibexecdir)
2495
0d1d512f
ZJS
2496exe = executable('systemd-id128',
2497 'src/id128/id128.c',
2498 include_directories : includes,
2499 link_with : [libshared],
2500 install_rpath : rootlibexecdir,
2501 install : true)
2502public_programs += exe
2503
005a29f2
ZJS
2504exe = executable('systemd-path',
2505 'src/path/path.c',
2506 include_directories : includes,
aac26058 2507 link_with : [libshared],
005a29f2
ZJS
2508 install_rpath : rootlibexecdir,
2509 install : true)
5a8b1640 2510public_programs += exe
005a29f2
ZJS
2511
2512exe = executable('systemd-ask-password',
2513 'src/ask-password/ask-password.c',
2514 include_directories : includes,
aac26058 2515 link_with : [libshared],
005a29f2
ZJS
2516 install_rpath : rootlibexecdir,
2517 install : true,
2518 install_dir : rootbindir)
5a8b1640 2519public_programs += exe
5c23128d
ZJS
2520
2521executable('systemd-reply-password',
2522 'src/reply-password/reply-password.c',
2523 include_directories : includes,
aac26058 2524 link_with : [libshared],
421f0012 2525 install_rpath : rootlibexecdir,
5c23128d
ZJS
2526 install : true,
2527 install_dir : rootlibexecdir)
2528
005a29f2
ZJS
2529exe = executable('systemd-tty-ask-password-agent',
2530 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2531 include_directories : includes,
aac26058 2532 link_with : [libshared],
005a29f2
ZJS
2533 install_rpath : rootlibexecdir,
2534 install : true,
2535 install_dir : rootbindir)
5a8b1640 2536public_programs += exe
005a29f2
ZJS
2537
2538exe = executable('systemd-cgls',
2539 'src/cgls/cgls.c',
2540 include_directories : includes,
aac26058 2541 link_with : [libshared],
005a29f2
ZJS
2542 install_rpath : rootlibexecdir,
2543 install : true)
5a8b1640 2544public_programs += exe
005a29f2
ZJS
2545
2546exe = executable('systemd-cgtop',
2547 'src/cgtop/cgtop.c',
2548 include_directories : includes,
aac26058 2549 link_with : [libshared],
005a29f2
ZJS
2550 install_rpath : rootlibexecdir,
2551 install : true)
5a8b1640 2552public_programs += exe
5c23128d
ZJS
2553
2554executable('systemd-initctl',
2555 'src/initctl/initctl.c',
2556 include_directories : includes,
aac26058 2557 link_with : [libshared],
421f0012 2558 install_rpath : rootlibexecdir,
5c23128d
ZJS
2559 install : true,
2560 install_dir : rootlibexecdir)
2561
005a29f2
ZJS
2562exe = executable('systemd-mount',
2563 'src/mount/mount-tool.c',
2564 include_directories : includes,
34ce0a52 2565 link_with : [libshared],
005a29f2
ZJS
2566 install_rpath : rootlibexecdir,
2567 install : true)
5a8b1640 2568public_programs += exe
5c23128d 2569
7b76fce1 2570meson.add_install_script(meson_make_symlink,
e17e5ba9 2571 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2572
005a29f2
ZJS
2573exe = executable('systemd-run',
2574 'src/run/run.c',
2575 include_directories : includes,
aac26058 2576 link_with : [libshared],
005a29f2
ZJS
2577 install_rpath : rootlibexecdir,
2578 install : true)
5a8b1640 2579public_programs += exe
005a29f2
ZJS
2580
2581exe = executable('systemd-stdio-bridge',
2582 'src/stdio-bridge/stdio-bridge.c',
2583 include_directories : includes,
aac26058 2584 link_with : [libshared],
60722ad7 2585 dependencies : [versiondep],
005a29f2
ZJS
2586 install_rpath : rootlibexecdir,
2587 install : true)
5a8b1640 2588public_programs += exe
005a29f2
ZJS
2589
2590exe = executable('busctl',
2591 'src/busctl/busctl.c',
2592 'src/busctl/busctl-introspect.c',
2593 'src/busctl/busctl-introspect.h',
2594 include_directories : includes,
aac26058 2595 link_with : [libshared],
005a29f2
ZJS
2596 install_rpath : rootlibexecdir,
2597 install : true)
5a8b1640 2598public_programs += exe
5c23128d 2599
349cc4a5 2600if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2601 exe = executable('systemd-sysusers',
2602 'src/sysusers/sysusers.c',
2603 include_directories : includes,
2604 link_with : [libshared],
2605 install_rpath : rootlibexecdir,
2606 install : true,
2607 install_dir : rootbindir)
5a8b1640 2608 public_programs += exe
5c23128d
ZJS
2609endif
2610
349cc4a5 2611if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2612 exe = executable('systemd-tmpfiles',
2613 'src/tmpfiles/tmpfiles.c',
2614 include_directories : includes,
2615 link_with : [libshared],
2616 dependencies : [libacl],
2617 install_rpath : rootlibexecdir,
2618 install : true,
2619 install_dir : rootbindir)
5a8b1640 2620 public_programs += exe
d9daae55 2621
938be089
ZJS
2622 if want_tests != 'false'
2623 test('test-systemd-tmpfiles',
2624 test_systemd_tmpfiles_py,
2625 # https://github.com/mesonbuild/meson/issues/2681
2626 args : exe.full_path())
2627 endif
5c23128d
ZJS
2628endif
2629
349cc4a5 2630if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2631 exe = executable('systemd-hwdb',
2632 'src/hwdb/hwdb.c',
2633 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2634 include_directories : includes,
0c06b506 2635 link_with : [libudev_static],
0da6f396 2636 install_rpath : udev_rpath,
37efbbd8
ZJS
2637 install : true,
2638 install_dir : rootbindir)
5a8b1640 2639 public_programs += exe
37efbbd8
ZJS
2640endif
2641
349cc4a5 2642if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2643 executable('systemd-quotacheck',
2644 'src/quotacheck/quotacheck.c',
005a29f2 2645 include_directories : includes,
aac26058 2646 link_with : [libshared],
005a29f2
ZJS
2647 install_rpath : rootlibexecdir,
2648 install : true,
37efbbd8 2649 install_dir : rootlibexecdir)
5c23128d
ZJS
2650endif
2651
005a29f2
ZJS
2652exe = executable('systemd-socket-proxyd',
2653 'src/socket-proxy/socket-proxyd.c',
2654 include_directories : includes,
aac26058 2655 link_with : [libshared],
005a29f2
ZJS
2656 dependencies : [threads],
2657 install_rpath : rootlibexecdir,
2658 install : true,
2659 install_dir : rootlibexecdir)
5a8b1640 2660public_programs += exe
005a29f2
ZJS
2661
2662exe = executable('systemd-udevd',
2663 systemd_udevd_sources,
2664 include_directories : includes,
c1cd6743 2665 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
005a29f2 2666 link_with : [libudev_core,
005a29f2 2667 libsystemd_network,
0c06b506 2668 libudev_static],
60722ad7
ZJS
2669 dependencies : [versiondep,
2670 threads,
3a30f21f 2671 libkmod,
005a29f2 2672 libidn,
aac26058
ZJS
2673 libacl,
2674 libblkid],
1aec3ed9 2675 install_rpath : udev_rpath,
005a29f2
ZJS
2676 install : true,
2677 install_dir : rootlibexecdir)
5a8b1640 2678public_programs += exe
005a29f2
ZJS
2679
2680exe = executable('udevadm',
2681 udevadm_sources,
c1cd6743 2682 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
005a29f2
ZJS
2683 include_directories : includes,
2684 link_with : [libudev_core,
005a29f2 2685 libsystemd_network,
0c06b506 2686 libudev_static],
60722ad7
ZJS
2687 dependencies : [versiondep,
2688 threads,
3a30f21f 2689 libkmod,
005a29f2 2690 libidn,
aac26058
ZJS
2691 libacl,
2692 libblkid],
1aec3ed9 2693 install_rpath : udev_rpath,
005a29f2
ZJS
2694 install : true,
2695 install_dir : rootbindir)
5a8b1640 2696public_programs += exe
5c23128d
ZJS
2697
2698executable('systemd-shutdown',
2699 systemd_shutdown_sources,
2700 include_directories : includes,
53f79e12
ZJS
2701 link_with : [libcore_shared,
2702 libshared],
95b862b0 2703 dependencies : [libmount],
421f0012 2704 install_rpath : rootlibexecdir,
5c23128d
ZJS
2705 install : true,
2706 install_dir : rootlibexecdir)
2707
2708executable('systemd-update-done',
2709 'src/update-done/update-done.c',
2710 include_directories : includes,
2711 link_with : [libshared],
421f0012 2712 install_rpath : rootlibexecdir,
5c23128d
ZJS
2713 install : true,
2714 install_dir : rootlibexecdir)
2715
2716executable('systemd-update-utmp',
2717 'src/update-utmp/update-utmp.c',
2718 include_directories : includes,
aac26058 2719 link_with : [libshared],
5c23128d 2720 dependencies : [libaudit],
421f0012 2721 install_rpath : rootlibexecdir,
5c23128d
ZJS
2722 install : true,
2723 install_dir : rootlibexecdir)
2724
349cc4a5 2725if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2726 executable('systemd-modules-load',
2727 'src/modules-load/modules-load.c',
2728 include_directories : includes,
2729 link_with : [libshared],
2730 dependencies : [libkmod],
2731 install_rpath : rootlibexecdir,
2732 install : true,
2733 install_dir : rootlibexecdir)
94e75a54 2734
37efbbd8
ZJS
2735 meson.add_install_script('sh', '-c',
2736 mkdir_p.format(modulesloaddir))
2737 meson.add_install_script('sh', '-c',
2738 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2739endif
2740
005a29f2
ZJS
2741exe = executable('systemd-nspawn',
2742 systemd_nspawn_sources,
97d90615 2743 include_directories : includes,
53f79e12
ZJS
2744 link_with : [libcore_shared,
2745 libnspawn_core,
97d90615 2746 libshared],
82384230
FB
2747 dependencies : [libblkid,
2748 libseccomp],
005a29f2
ZJS
2749 install_rpath : rootlibexecdir,
2750 install : true)
5a8b1640 2751public_programs += exe
5c23128d 2752
349cc4a5 2753if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2754 executable('systemd-networkd',
2755 systemd_networkd_sources,
2756 include_directories : includes,
2757 link_with : [libnetworkd_core,
37efbbd8 2758 libsystemd_network,
0c06b506 2759 libudev_static,
37efbbd8 2760 libshared],
4b57a272 2761 dependencies : [threads],
37efbbd8
ZJS
2762 install_rpath : rootlibexecdir,
2763 install : true,
2764 install_dir : rootlibexecdir)
2765
2766 executable('systemd-networkd-wait-online',
2767 systemd_networkd_wait_online_sources,
2768 include_directories : includes,
2769 link_with : [libnetworkd_core,
2770 libshared],
2771 install_rpath : rootlibexecdir,
2772 install : true,
2773 install_dir : rootlibexecdir)
5c23128d 2774
dcfe072a
FS
2775 exe = executable('networkctl',
2776 networkctl_sources,
2777 include_directories : includes,
2778 link_with : [libsystemd_network,
aac26058 2779 libshared],
dcfe072a
FS
2780 install_rpath : rootlibexecdir,
2781 install : true,
2782 install_dir : rootbindir)
5a8b1640 2783 public_programs += exe
dcfe072a 2784endif
e821f6a9
ZJS
2785
2786executable('systemd-sulogin-shell',
2787 ['src/sulogin-shell/sulogin-shell.c'],
2788 include_directories : includes,
2789 link_with : [libshared],
2790 install_rpath : rootlibexecdir,
2791 install : true,
2792 install_dir : rootlibexecdir)
2793
69e96427
ZJS
2794############################################################
2795
e2d41370
FB
2796custom_target(
2797 'systemd-runtest.env',
2798 output : 'systemd-runtest.env',
2799 command : ['sh', '-c', '{ ' +
1485aacb 2800 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
49cdae63 2801 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
e2d41370
FB
2802 '} >@OUTPUT@'],
2803 build_by_default : true)
2804
69e96427 2805foreach tuple : tests
37efbbd8
ZJS
2806 sources = tuple[0]
2807 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2808 dependencies = tuple[2]
2809 condition = tuple.length() >= 4 ? tuple[3] : ''
2810 type = tuple.length() >= 5 ? tuple[4] : ''
2811 defs = tuple.length() >= 6 ? tuple[5] : []
2812 incs = tuple.length() >= 7 ? tuple[6] : includes
2813 timeout = 30
2814
2815 name = sources[0].split('/')[-1].split('.')[0]
2816 if type.startswith('timeout=')
2817 timeout = type.split('=')[1].to_int()
2818 type = ''
2819 endif
3b2bdd62
ZJS
2820
2821 if condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2822 exe = executable(
2823 name,
2824 sources,
2825 include_directories : incs,
2826 link_with : link_with,
60722ad7
ZJS
2827 dependencies : [versiondep,
2828 dependencies],
37efbbd8 2829 c_args : defs,
3b2bdd62 2830 build_by_default : want_tests != 'false',
37efbbd8 2831 install_rpath : rootlibexecdir,
7cdd9783
MB
2832 install : install_tests,
2833 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2834
2835 if type == 'manual'
2836 message('@0@ is a manual test'.format(name))
2837 elif type == 'unsafe' and want_tests != 'unsafe'
2838 message('@0@ is an unsafe test'.format(name))
3b2bdd62 2839 elif want_tests != 'false'
37efbbd8
ZJS
2840 test(name, exe,
2841 env : test_env,
2842 timeout : timeout)
2843 endif
2844 else
2845 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2846 endif
69e96427
ZJS
2847endforeach
2848
0632b4cd 2849exe = executable(
37efbbd8
ZJS
2850 'test-libsystemd-sym',
2851 test_libsystemd_sym_c,
2852 include_directories : includes,
2853 link_with : [libsystemd],
fd1939fb 2854 build_by_default : want_tests != 'false',
37efbbd8
ZJS
2855 install : install_tests,
2856 install_dir : testsdir)
938be089
ZJS
2857if want_tests != 'false'
2858 test('test-libsystemd-sym', exe)
2859endif
37ab1a25 2860
0632b4cd
ZJS
2861exe = executable(
2862 'test-libsystemd-static-sym',
2863 test_libsystemd_sym_c,
2864 include_directories : includes,
0632b4cd
ZJS
2865 link_with : [install_libsystemd_static],
2866 dependencies : [threads], # threads is already included in dependencies on the library,
2867 # but does not seem to get propagated. Add here as a work-around.
fd1939fb 2868 build_by_default : want_tests != 'false' and static_libsystemd_pic,
20f3d32d 2869 install : install_tests and static_libsystemd_pic,
0632b4cd 2870 install_dir : testsdir)
938be089 2871if want_tests != 'false' and static_libsystemd_pic
0632b4cd
ZJS
2872 test('test-libsystemd-static-sym', exe)
2873endif
37ab1a25 2874
0632b4cd 2875exe = executable(
37efbbd8
ZJS
2876 'test-libudev-sym',
2877 test_libudev_sym_c,
2878 include_directories : includes,
c1cd6743 2879 c_args : '-Wno-deprecated-declarations',
37efbbd8 2880 link_with : [libudev],
fd1939fb 2881 build_by_default : want_tests != 'false',
37efbbd8
ZJS
2882 install : install_tests,
2883 install_dir : testsdir)
938be089
ZJS
2884if want_tests != 'false'
2885 test('test-libudev-sym', exe)
2886endif
0632b4cd
ZJS
2887
2888exe = executable(
2889 'test-libudev-static-sym',
2890 test_libudev_sym_c,
2891 include_directories : includes,
c1cd6743 2892 c_args : '-Wno-deprecated-declarations',
0632b4cd 2893 link_with : [install_libudev_static],
fd1939fb 2894 build_by_default : want_tests != 'false' and static_libudev_pic,
20f3d32d 2895 install : install_tests and static_libudev_pic,
0632b4cd 2896 install_dir : testsdir)
938be089 2897if want_tests != 'false' and static_libudev_pic
0632b4cd
ZJS
2898 test('test-libudev-static-sym', exe)
2899endif
e0bec52f 2900
69e96427 2901############################################################
5c23128d 2902
7db7d5b7
JR
2903fuzzer_exes = []
2904
5996740a 2905if get_option('tests') != 'false'
7db7d5b7
JR
2906foreach tuple : fuzzers
2907 sources = tuple[0]
2908 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2909 dependencies = tuple[2]
2910 defs = tuple.length() >= 4 ? tuple[3] : []
2911 incs = tuple.length() >= 5 ? tuple[4] : includes
2912
31e57a35 2913 if fuzzer_build
7db7d5b7
JR
2914 dependencies += fuzzing_engine
2915 else
2916 sources += 'src/fuzz/fuzz-main.c'
2917 endif
2918
2919 name = sources[0].split('/')[-1].split('.')[0]
2920
2921 fuzzer_exes += executable(
2922 name,
2923 sources,
2924 include_directories : [incs, include_directories('src/fuzz')],
2925 link_with : link_with,
2926 dependencies : dependencies,
2927 c_args : defs,
2928 install : false)
2929endforeach
5996740a 2930endif
7db7d5b7 2931
63058f43
ZJS
2932run_target('fuzzers',
2933 depends : fuzzer_exes,
7db7d5b7
JR
2934 command : ['true'])
2935
2936############################################################
2937
5c23128d
ZJS
2938make_directive_index_py = find_program('tools/make-directive-index.py')
2939make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2940xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2941hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2942
2943subdir('units')
2944subdir('sysctl.d')
2945subdir('sysusers.d')
2946subdir('tmpfiles.d')
e783f957 2947subdir('presets')
5c23128d
ZJS
2948subdir('hwdb')
2949subdir('network')
2950subdir('man')
2951subdir('shell-completion/bash')
2952subdir('shell-completion/zsh')
9e825ebf
FB
2953subdir('docs/sysvinit')
2954subdir('docs/var-log')
5c23128d 2955
5c23128d
ZJS
2956install_subdir('factory/etc',
2957 install_dir : factorydir)
2958
5c23128d
ZJS
2959install_data('xorg/50-systemd-user.sh',
2960 install_dir : xinitrcdir)
582faeb4
DJL
2961install_data('modprobe.d/systemd.conf',
2962 install_dir : modprobedir)
f09eb768 2963install_data('LICENSE.GPL2',
5c23128d 2964 'LICENSE.LGPL2.1',
f09eb768
LP
2965 'NEWS',
2966 'README',
eea98402 2967 'docs/CODING_STYLE.md',
1d1cb168 2968 'docs/DISTRO_PORTING.md',
9e825ebf 2969 'docs/ENVIRONMENT.md',
eea98402 2970 'docs/HACKING.md',
9e825ebf 2971 'docs/TRANSIENT-SETTINGS.md',
b6dc0d7d 2972 'docs/TRANSLATORS.md',
9e825ebf 2973 'docs/UIDS-GIDS.md',
5c23128d
ZJS
2974 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2975 install_dir : docdir)
d68b342b 2976
94e75a54
ZJS
2977meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2978meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2979
d68b342b
ZJS
2980############################################################
2981
005a29f2
ZJS
2982meson_check_help = find_program('tools/meson-check-help.sh')
2983
2984foreach exec : public_programs
37efbbd8 2985 name = exec.full_path().split('/')[-1]
938be089
ZJS
2986 if want_tests != 'false'
2987 test('check-help-' + name,
2988 meson_check_help,
c1cd6743 2989 args : exec.full_path())
938be089 2990 endif
005a29f2
ZJS
2991endforeach
2992
2993############################################################
2994
52d4d1d3
ZJS
2995# Enable tests for all supported sanitizers
2996foreach tuple : sanitizers
2997 sanitizer = tuple[0]
2998 build = tuple[1]
b68dfb9e 2999
7a6397d2 3000 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
52d4d1d3
ZJS
3001 prev = ''
3002 foreach p : fuzz_regression_tests
3003 b = p.split('/')[-2]
3004 c = p.split('/')[-1]
3005
3006 name = '@0@:@1@'.format(b, sanitizer)
3007
3008 if name != prev
3009 if want_tests == 'false'
3010 message('Not compiling @0@ because tests is set to false'.format(name))
3011 elif slow_tests
3012 exe = custom_target(
3013 name,
3014 output : name,
3015 depends : build,
3016 command : [env, 'ln', '-fs',
3017 join_paths(build.full_path(), b),
3018 '@OUTPUT@'],
3019 build_by_default : true)
3020 else
3021 message('Not compiling @0@ because slow-tests is set to false'.format(name))
3022 endif
3023 endif
3024 prev = name
3025
3026 if want_tests != 'false' and slow_tests
3027 test('@0@:@1@:@2@'.format(b, c, sanitizer),
3028 env,
3029 args : [exe.full_path(),
1485aacb 3030 join_paths(project_source_root, p)])
52d4d1d3
ZJS
3031 endif
3032 endforeach
b68dfb9e
ZJS
3033 endif
3034endforeach
3035
52d4d1d3 3036
b68dfb9e
ZJS
3037############################################################
3038
0700e8ba 3039if git.found()
37efbbd8
ZJS
3040 all_files = run_command(
3041 git,
1485aacb 3042 ['--git-dir=@0@/.git'.format(project_source_root),
37efbbd8
ZJS
3043 'ls-files',
3044 ':/*.[ch]'])
3045 all_files = files(all_files.stdout().split())
d68b342b 3046
e85a690b 3047 custom_target(
0700e8ba 3048 'tags',
e85a690b 3049 output : 'tags',
1485aacb 3050 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
2f09974f 3051 run_target(
0700e8ba 3052 'ctags',
1485aacb 3053 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
d68b342b 3054endif
177929c2
ZJS
3055
3056if git.found()
37efbbd8 3057 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 3058 run_target(
37efbbd8 3059 'git-contrib',
37efbbd8 3060 command : [meson_git_contrib_sh])
177929c2 3061endif
dd6ab3df
ZJS
3062
3063if git.found()
3064 git_head = run_command(
3065 git,
1485aacb 3066 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3067 'rev-parse', 'HEAD']).stdout().strip()
3068 git_head_short = run_command(
3069 git,
1485aacb 3070 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3071 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3072
3073 run_target(
3074 'git-snapshot',
3075 command : ['git', 'archive',
1485aacb 3076 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
dd6ab3df
ZJS
3077 git_head_short),
3078 '--prefix', 'systemd-@0@/'.format(git_head),
3079 'HEAD'])
3080endif
829257d1
ZJS
3081
3082############################################################
3083
51b13863
LP
3084meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
3085run_target(
3086 'check-api-docs',
3087 depends : [man, libsystemd, libudev],
3088 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
3089
3090############################################################
3091
829257d1
ZJS
3092status = [
3093 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3094
2675413e 3095 'split /usr: @0@'.format(split_usr),
157baa87 3096 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
3097 'prefix directory: @0@'.format(prefixdir),
3098 'rootprefix directory: @0@'.format(rootprefixdir),
3099 'sysconf directory: @0@'.format(sysconfdir),
3100 'include directory: @0@'.format(includedir),
3101 'lib directory: @0@'.format(libdir),
3102 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
3103 'SysV init scripts: @0@'.format(sysvinit_path),
3104 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
3105 'PAM modules directory: @0@'.format(pamlibdir),
3106 'PAM configuration directory: @0@'.format(pamconfdir),
3107 'RPM macros directory: @0@'.format(rpmmacrosdir),
3108 'modprobe.d directory: @0@'.format(modprobedir),
3109 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3110 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3111 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3112 'bash completions directory: @0@'.format(bashcompletiondir),
3113 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1
ZJS
3114 'extra start script: @0@'.format(get_option('rc-local')),
3115 'extra stop script: @0@'.format(get_option('halt-local')),
3116 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3117 get_option('debug-tty')),
3118 'TTY GID: @0@'.format(tty_gid),
ac09340e 3119 'users GID: @0@'.format(substs.get('USERS_GID')),
829257d1
ZJS
3120 'maximum system UID: @0@'.format(system_uid_max),
3121 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
3122 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3123 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3124 'minimum container UID base: @0@'.format(container_uid_base_min),
3125 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 3126 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 3127 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 3128 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 3129 'support URL: @0@'.format(support_url),
afde4574
LP
3130 'nobody user name: @0@'.format(nobody_user),
3131 'nobody group name: @0@'.format(nobody_group),
829257d1 3132 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 3133 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
3134
3135 'default DNSSEC mode: @0@'.format(default_dnssec),
c9299be2 3136 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
829257d1 3137 'default cgroup hierarchy: @0@'.format(default_hierarchy),
06da5c63 3138 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
8ca9e92c
DR
3139 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
3140 'default locale: @0@'.format(default_locale)]
829257d1
ZJS
3141
3142alt_dns_servers = '\n '.join(dns_servers.split(' '))
3143alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3144status += [
3145 'default DNS servers: @0@'.format(alt_dns_servers),
3146 'default NTP servers: @0@'.format(alt_ntp_servers)]
3147
3148alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3149 '@@0@'.format(time_epoch)).stdout().strip()
3150status += [
3151 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3152
19d8c9c9 3153status += [
abc8caf7
ZJS
3154 'static libsystemd: @0@'.format(static_libsystemd),
3155 'static libudev: @0@'.format(static_libudev)]
19d8c9c9 3156
829257d1
ZJS
3157# TODO:
3158# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3159# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3160# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3161
349cc4a5 3162if conf.get('ENABLE_EFI') == 1
5a8b1640 3163 status += 'efi arch: @0@'.format(efi_arch)
829257d1
ZJS
3164
3165 if have_gnu_efi
3166 status += [
3167 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
c512dfb9 3168 'EFI CC @0@'.format(' '.join(efi_cc)),
359b496f
YW
3169 'EFI lib directory: @0@'.format(efi_libdir),
3170 'EFI lds directory: @0@'.format(efi_ldsdir),
3171 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
3172 endif
3173endif
3174
3175found = []
3176missing = []
3177
3178foreach tuple : [
3179 ['libcryptsetup'],
3180 ['PAM'],
3181 ['AUDIT'],
3182 ['IMA'],
3183 ['AppArmor'],
3184 ['SELinux'],
3185 ['SECCOMP'],
3186 ['SMACK'],
3187 ['zlib'],
3188 ['xz'],
3189 ['lz4'],
3190 ['bzip2'],
3191 ['ACL'],
3192 ['gcrypt'],
3193 ['qrencode'],
3194 ['microhttpd'],
3195 ['gnutls'],
096cbdce 3196 ['openssl'],
829257d1 3197 ['libcurl'],
d1bf5675 3198 ['idn'],
87057e24 3199 ['libidn2'],
829257d1
ZJS
3200 ['libidn'],
3201 ['libiptc'],
3202 ['elfutils'],
3203 ['binfmt'],
3204 ['vconsole'],
3205 ['quotacheck'],
3206 ['tmpfiles'],
3207 ['environment.d'],
3208 ['sysusers'],
3209 ['firstboot'],
3210 ['randomseed'],
3211 ['backlight'],
3212 ['rfkill'],
3213 ['logind'],
3214 ['machined'],
61d0578b 3215 ['portabled'],
829257d1
ZJS
3216 ['importd'],
3217 ['hostnamed'],
3218 ['timedated'],
3219 ['timesyncd'],
3220 ['localed'],
3221 ['networkd'],
a7456af5 3222 ['resolve'],
096cbdce
IT
3223 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3224 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
829257d1
ZJS
3225 ['coredump'],
3226 ['polkit'],
3227 ['legacy pkla', install_polkit_pkla],
3228 ['efi'],
3229 ['gnu-efi', have_gnu_efi],
3230 ['kmod'],
3231 ['xkbcommon'],
c4c978a0 3232 ['pcre2'],
829257d1
ZJS
3233 ['blkid'],
3234 ['dbus'],
3235 ['glib'],
6bd2bc8e
ZJS
3236 ['nss-myhostname'],
3237 ['nss-mymachines'],
3238 ['nss-resolve'],
3239 ['nss-systemd'],
829257d1
ZJS
3240 ['hwdb'],
3241 ['tpm'],
3242 ['man pages', want_man],
3243 ['html pages', want_html],
3244 ['man page indices', want_man and have_lxml],
829257d1
ZJS
3245 ['SysV compat'],
3246 ['utmp'],
3247 ['ldconfig'],
3248 ['hibernate'],
3249 ['adm group', get_option('adm-group')],
3250 ['wheel group', get_option('wheel-group')],
b14e1b43 3251 ['gshadow'],
829257d1
ZJS
3252 ['debug hashmap'],
3253 ['debug mmap cache'],
d6601495 3254 ['debug siphash'],
20e97dd3 3255 ['debug udev'],
d18cb393 3256 ['valgrind', conf.get('VALGRIND') == 1],
fd5dec9a 3257 ['trace logging', conf.get('LOG_TRACE') == 1],
19d8c9c9
LP
3258 ['link-udev-shared', get_option('link-udev-shared')],
3259 ['link-systemctl-shared', get_option('link-systemctl-shared')],
829257d1
ZJS
3260]
3261
af4d7860
ZJS
3262 if tuple.length() >= 2
3263 cond = tuple[1]
3264 else
829257d1
ZJS
3265 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3266 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 3267 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
3268 endif
3269 if cond
5a8b1640 3270 found += tuple[0]
829257d1 3271 else
5a8b1640 3272 missing += tuple[0]
829257d1
ZJS
3273 endif
3274endforeach
3275
3276status += [
9d39c1bf 3277 '',
829257d1 3278 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
3279 '',
3280 'disabled features: @0@'.format(', '.join(missing)),
3281 '']
829257d1 3282message('\n '.join(status))
9a8e64b0
ZJS
3283
3284if rootprefixdir != rootprefix_default
8ea9fad7
YW
3285 warning('\n' +
3286 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3287 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3288 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 3289endif