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