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