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