1 # SPDX-License-Identifier: LGPL-2.1+
3 project('systemd', 'c',
12 meson_version : '>= 0.46',
15 libsystemd_version = '0.27.0'
16 libudev_version = '1.6.15'
18 # We need the same data in two different formats, ugh!
19 # Also, for hysterical reasons, we use different variable
20 # names, sometimes. Not all variables are included in every
22 conf = configuration_data()
23 conf.set('PROJECT_VERSION', meson.project_version())
25 substs = configuration_data()
26 substs.set('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
27 substs.set('PROJECT_VERSION', meson.project_version())
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
31 project_source_root = meson.current_source_dir()
32 relative_source_path = run_command('realpath',
33 '--relative-to=@0@'.format(meson.current_build_dir()),
34 project_source_root).stdout().strip()
35 conf.set_quoted('RELATIVE_SOURCE_PATH', relative_source_path)
37 want_ossfuzz = get_option('oss-fuzz')
38 want_libfuzzer = get_option('llvm-fuzz')
39 want_fuzzbuzz = get_option('fuzzbuzz')
40 if want_ossfuzz + want_libfuzzer + want_fuzzbuzz > 1
41 error('only one of oss-fuzz, llvm-fuzz or fuzzbuzz can be specified')
44 skip_deps = want_ossfuzz or want_libfuzzer
45 fuzzer_build = want_ossfuzz or want_libfuzzer or want_fuzzbuzz
47 #####################################################################
49 # Try to install the git pre-commit hook
50 git_hook = run_command(join_paths(project_source_root, 'tools/add-git-hook.sh'))
51 if git_hook.returncode() == 0
52 message(git_hook.stdout().strip())
55 #####################################################################
57 if get_option('split-usr') == 'auto'
58 split_usr = run_command('test', '-L', '/bin').returncode() != 0
60 split_usr = get_option('split-usr') == 'true'
62 conf.set10('HAVE_SPLIT_USR', split_usr,
63 description : '/usr/bin and /bin directories are separate')
65 if get_option('split-bin') == 'auto'
66 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
68 split_bin = get_option('split-bin') == 'true'
70 conf.set10('HAVE_SPLIT_BIN', split_bin,
71 description : 'bin and sbin directories are separate')
73 rootprefixdir = get_option('rootprefix')
74 # Unusual rootprefixdir values are used by some distros
75 # (see https://github.com/systemd/systemd/pull/7461).
76 rootprefix_default = split_usr ? '/' : '/usr'
77 if rootprefixdir == ''
78 rootprefixdir = rootprefix_default
80 rootprefixdir_noslash = rootprefixdir == '/' ? '' : rootprefixdir
82 sysvinit_path = get_option('sysvinit-path')
83 sysvrcnd_path = get_option('sysvrcnd-path')
84 conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
85 description : 'SysV init scripts and rcN.d links are supported')
87 conf.set10('BUMP_PROC_SYS_FS_FILE_MAX', get_option('bump-proc-sys-fs-file-max'))
88 conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
89 conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
91 # join_paths ignores the preceding arguments if an absolute component is
92 # encountered, so this should canonicalize various paths when they are
93 # absolute or relative.
94 prefixdir = get_option('prefix')
95 if not prefixdir.startswith('/')
96 error('Prefix is not absolute: "@0@"'.format(prefixdir))
98 bindir = join_paths(prefixdir, get_option('bindir'))
99 libdir = join_paths(prefixdir, get_option('libdir'))
100 sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
101 includedir = join_paths(prefixdir, get_option('includedir'))
102 datadir = join_paths(prefixdir, get_option('datadir'))
103 localstatedir = join_paths('/', get_option('localstatedir'))
105 rootbindir = join_paths(rootprefixdir, 'bin')
106 rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
107 rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
109 rootlibdir = get_option('rootlibdir')
111 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
114 # Dirs of external packages
115 pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
116 pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
117 polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
118 polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
119 polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
120 xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
121 rpmmacrosdir = get_option('rpmmacrosdir')
122 if rpmmacrosdir != 'no'
123 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
125 modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
128 pkgdatadir = join_paths(datadir, 'systemd')
129 environmentdir = join_paths(prefixdir, 'lib/environment.d')
130 pkgsysconfdir = join_paths(sysconfdir, 'systemd')
131 userunitdir = join_paths(prefixdir, 'lib/systemd/user')
132 userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
133 tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
134 sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
135 sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
136 binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
137 modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
138 networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
139 pkgincludedir = join_paths(includedir, 'systemd')
140 systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
141 usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
142 systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
143 userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
144 systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
145 systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
146 systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
147 systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
148 udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
149 udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
150 udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
151 catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
152 kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
153 factorydir = join_paths(datadir, 'factory')
154 bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
155 testsdir = join_paths(prefixdir, 'lib/systemd/tests')
156 systemdstatedir = join_paths(localstatedir, 'lib/systemd')
157 catalogstatedir = join_paths(systemdstatedir, 'catalog')
158 randomseeddir = join_paths(localstatedir, 'lib/systemd')
159 profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
160 ntpservicelistdir = join_paths(rootprefixdir, 'lib/systemd/ntp-units.d')
162 docdir = get_option('docdir')
164 docdir = join_paths(datadir, 'doc/systemd')
167 dbuspolicydir = get_option('dbuspolicydir')
168 if dbuspolicydir == ''
169 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
172 dbussessionservicedir = get_option('dbussessionservicedir')
173 if dbussessionservicedir == ''
174 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
177 dbussystemservicedir = get_option('dbussystemservicedir')
178 if dbussystemservicedir == ''
179 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
182 pamlibdir = get_option('pamlibdir')
184 pamlibdir = join_paths(rootlibdir, 'security')
187 pamconfdir = get_option('pamconfdir')
189 pamconfdir = join_paths(sysconfdir, 'pam.d')
192 memory_accounting_default = get_option('memory-accounting-default')
193 status_unit_format_default = get_option('status-unit-format-default')
195 conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
196 conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
197 conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
198 conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
199 conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
200 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
202 conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
204 conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
205 conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
206 conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
207 conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
208 conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
209 conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
210 conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
211 conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
212 conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
213 conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
214 conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
215 conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
216 conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
217 conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
218 conf.set_quoted('ROOTPREFIX', rootprefixdir)
219 conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
220 conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
221 conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
222 conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
223 conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
224 conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
225 conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
226 conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
227 conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
228 conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
229 conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
230 conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
231 conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
232 conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
233 conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
234 conf.set_quoted('LIBDIR', libdir)
235 conf.set_quoted('ROOTLIBDIR', rootlibdir)
236 conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
237 conf.set_quoted('BOOTLIBDIR', bootlibdir)
238 conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
239 conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
240 conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
241 conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
242 conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
243 conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
244 conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
245 conf.set10('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default)
246 conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
247 conf.set('STATUS_UNIT_FORMAT_DEFAULT', 'STATUS_UNIT_FORMAT_' + status_unit_format_default.to_upper())
249 substs.set('prefix', prefixdir)
250 substs.set('rootprefix', rootprefixdir)
251 substs.set('rootprefix_noslash', rootprefixdir_noslash)
252 substs.set('exec_prefix', prefixdir)
253 substs.set('libdir', libdir)
254 substs.set('rootlibdir', rootlibdir)
255 substs.set('includedir', includedir)
256 substs.set('sysconfdir', sysconfdir)
257 substs.set('bindir', bindir)
258 substs.set('rootbindir', rootbindir)
259 substs.set('rootlibexecdir', rootlibexecdir)
260 substs.set('systemunitdir', systemunitdir)
261 substs.set('userunitdir', userunitdir)
262 substs.set('systempresetdir', systempresetdir)
263 substs.set('userpresetdir', userpresetdir)
264 substs.set('udevhwdbdir', udevhwdbdir)
265 substs.set('udevrulesdir', udevrulesdir)
266 substs.set('udevlibexecdir', udevlibexecdir)
267 substs.set('environmentdir', environmentdir)
268 substs.set('catalogdir', catalogdir)
269 substs.set('tmpfilesdir', tmpfilesdir)
270 substs.set('sysusersdir', sysusersdir)
271 substs.set('sysctldir', sysctldir)
272 substs.set('binfmtdir', binfmtdir)
273 substs.set('modulesloaddir', modulesloaddir)
274 substs.set('modprobedir', modprobedir)
275 substs.set('systemgeneratordir', systemgeneratordir)
276 substs.set('usergeneratordir', usergeneratordir)
277 substs.set('systemenvgeneratordir', systemenvgeneratordir)
278 substs.set('userenvgeneratordir', userenvgeneratordir)
279 substs.set('systemshutdowndir', systemshutdowndir)
280 substs.set('systemsleepdir', systemsleepdir)
281 substs.set('CERTIFICATEROOT', get_option('certificate-root'))
282 substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
283 substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
284 substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
285 substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
286 substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
287 substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
288 substs.set('STATUS_UNIT_FORMAT_DEFAULT', status_unit_format_default)
289 substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
290 substs.set('BUILD_ROOT', meson.current_build_dir())
292 #####################################################################
294 cc = meson.get_compiler('c')
295 pkgconfig = import('pkgconfig')
296 check_compilation_sh = find_program('tools/meson-check-compilation.sh')
297 meson_build_sh = find_program('tools/meson-build.sh')
299 want_tests = get_option('tests')
300 slow_tests = want_tests != 'false' and get_option('slow-tests')
301 install_tests = get_option('install-tests')
303 if add_languages('cpp', required : fuzzer_build)
304 # Used only for tests
305 cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
311 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer', required : false)
312 if fuzzing_engine.found()
313 add_project_arguments('-fsanitize-coverage=trace-pc-guard,trace-cmp', language : 'c')
314 elif cc.has_argument('-fsanitize=fuzzer-no-link')
315 add_project_arguments('-fsanitize=fuzzer-no-link', language : 'c')
317 error('Looks like neither libFuzzer nor -fsanitize=fuzzer-no-link is supported')
320 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
322 fuzzing_engine = meson.get_compiler('cpp').find_library(get_option('fuzzbuzz-engine'), dirs: get_option('fuzzbuzz-engine-dir'))
325 possible_cc_flags = [
329 '-Wmissing-include-dirs',
330 '-Wold-style-definition',
334 '-Wsuggest-attribute=noreturn',
335 '-Werror=missing-prototypes',
336 '-Werror=implicit-function-declaration',
337 '-Werror=missing-declarations',
338 '-Werror=return-type',
339 '-Werror=incompatible-pointer-types',
341 '-Wstrict-prototypes',
343 '-Wmissing-noreturn',
344 '-Wimplicit-fallthrough=5',
347 '-Wstrict-aliasing=2',
350 '-Werror=shift-count-overflow',
351 '-Werror=shift-overflow=2',
355 # negative arguments are correctly detected starting with meson 0.46.
356 '-Wno-unused-parameter',
357 '-Wno-missing-field-initializers',
358 '-Wno-unused-result',
359 '-Wno-format-signedness',
360 '-Wno-error=#warnings', # clang
361 '-Wno-string-plus-int', # clang
363 # work-around for gcc 7.1 turning this on on its own.
364 '-Wno-error=nonnull',
366 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
367 # optimizations enabled, producing essentially false positives.
368 '-Wno-maybe-uninitialized',
372 '-fdiagnostics-show-option',
373 '-fno-strict-aliasing',
374 '-fvisibility=hidden',
376 '-fstack-protector-strong',
377 '--param=ssp-buffer-size=4',
380 # --as-needed and --no-undefined are provided by meson by default,
381 # run mesonconf to see what is enabled
382 possible_link_flags = [
388 if cc.get_id() == 'clang'
389 possible_cc_flags += [
390 '-Wno-typedef-redefinition',
391 '-Wno-gnu-variable-sized-type-not-at-end',
395 if get_option('buildtype') != 'debug'
396 possible_cc_flags += [
397 '-ffunction-sections',
401 possible_link_flags += '-Wl,--gc-sections'
404 if get_option('b_ndebug') == 'true'
405 # With asserts disabled with get a bunch of warnings about variables which
406 # are used only in the asserts. This is not useful at all, so let's just silence
408 possible_cc_flags += [
409 '-Wno-unused-variable',
410 '-Wno-unused-but-set-variable',
414 add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
415 add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
419 #include <inttypes.h>
420 typedef uint64_t usec_t;
421 usec_t now(clockid_t clock);
426 ''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
427 add_project_arguments('-Werror=shadow', language : 'c')
430 cpp = ' '.join(cc.cmd_array()) + ' -E'
432 has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
434 #####################################################################
435 # compilation result tests
437 conf.set('_GNU_SOURCE', true)
438 conf.set('__SANE_USERSPACE_TYPES__', true)
439 conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
441 conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
442 conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
443 conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
444 conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
445 conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
446 conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
447 conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
451 #include <sys/stat.h>
454 foreach decl : ['char16_t',
459 # We get -1 if the size cannot be determined
460 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
462 if decl == 'struct statx'
464 want_linux_stat_h = false
466 have = cc.sizeof(decl,
467 prefix : decl_headers + '#include <linux/stat.h>',
468 args : '-D_GNU_SOURCE') > 0
469 want_linux_stat_h = have
473 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
476 conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
478 foreach ident : ['secure_getenv', '__secure_getenv']
479 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
483 ['memfd_create', '''#include <sys/mman.h>'''],
484 ['gettid', '''#include <sys/types.h>
485 #include <unistd.h>'''],
486 ['pivot_root', '''#include <stdlib.h>
487 #include <unistd.h>'''], # no known header declares pivot_root
488 ['name_to_handle_at', '''#include <sys/types.h>
489 #include <sys/stat.h>
490 #include <fcntl.h>'''],
491 ['setns', '''#include <sched.h>'''],
492 ['renameat2', '''#include <stdio.h>
493 #include <fcntl.h>'''],
494 ['kcmp', '''#include <linux/kcmp.h>'''],
495 ['keyctl', '''#include <sys/types.h>
496 #include <keyutils.h>'''],
497 ['copy_file_range', '''#include <sys/syscall.h>
498 #include <unistd.h>'''],
499 ['bpf', '''#include <sys/syscall.h>
500 #include <unistd.h>'''],
501 ['statx', '''#include <sys/types.h>
502 #include <sys/stat.h>
503 #include <unistd.h>'''],
504 ['explicit_bzero' , '''#include <string.h>'''],
505 ['reallocarray', '''#include <malloc.h>'''],
506 ['set_mempolicy', '''#include <stdlib.h>
507 #include <unistd.h>'''],
508 ['get_mempolicy', '''#include <stdlib.h>
509 #include <unistd.h>'''],
512 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
513 conf.set10('HAVE_' + ident[0].to_upper(), have)
516 if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
517 conf.set10('USE_SYS_RANDOM_H', true)
518 conf.set10('HAVE_GETRANDOM', true)
520 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
521 conf.set10('USE_SYS_RANDOM_H', false)
522 conf.set10('HAVE_GETRANDOM', have)
525 #####################################################################
527 vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
529 get_option('version-tag'),
530 meson.project_version()]
533 input : 'src/version/version.h.in',
534 output : 'version.h',
537 versiondep = declare_dependency(sources: version_h)
539 sed = find_program('sed')
540 awk = find_program('awk')
541 m4 = find_program('m4')
542 stat = find_program('stat')
543 git = find_program('git', required : false)
544 env = find_program('env')
545 perl = find_program('perl', required : false)
547 meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
548 mkdir_p = 'mkdir -p $DESTDIR/@0@'
549 test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
550 splash_bmp = files('test/splash.bmp')
552 # if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
553 # /usr/sbin, /sbin, and fall back to the default from middle column.
554 progs = [['quotaon', '/usr/sbin/quotaon' ],
555 ['quotacheck', '/usr/sbin/quotacheck' ],
556 ['kmod', '/usr/bin/kmod' ],
557 ['kexec', '/usr/sbin/kexec' ],
558 ['sulogin', '/usr/sbin/sulogin' ],
559 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
560 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
561 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
562 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
563 ['nologin', '/usr/sbin/nologin', ],
566 path = get_option(prog[0] + '-path')
568 message('Using @1@ for @0@'.format(prog[0], path))
570 exe = find_program(prog[0],
571 '/usr/sbin/' + prog[0],
574 path = exe.found() ? exe.path() : prog[1]
576 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
577 conf.set_quoted(name, path)
578 substs.set(name, path)
581 conf.set_quoted('TELINIT', get_option('telinit-path'))
583 if run_command('ln', '--relative', '--help').returncode() != 0
584 error('ln does not support --relative (added in coreutils 8.16)')
587 ############################################################
589 gperf = find_program('gperf')
591 gperf_test_format = '''
593 const char * in_word_set(const char *, @0@);
596 gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
597 gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
598 gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
599 if cc.compiles(gperf_test)
600 gperf_len_type = 'size_t'
602 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
603 if cc.compiles(gperf_test)
604 gperf_len_type = 'unsigned'
606 error('unable to determine gperf len type')
609 message('gperf len type is @0@'.format(gperf_len_type))
610 conf.set('GPERF_LEN_TYPE', gperf_len_type,
611 description : 'The type of gperf "len" parameter')
613 ############################################################
615 if not cc.has_header('sys/capability.h')
616 error('POSIX caps headers not found')
618 foreach header : ['crypt.h',
620 'linux/vm_sockets.h',
622 'valgrind/memcheck.h',
623 'valgrind/valgrind.h',
626 conf.set10('HAVE_' + header.underscorify().to_upper(),
627 cc.has_header(header))
630 ############################################################
632 conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
633 conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
634 gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
636 default_hierarchy = get_option('default-hierarchy')
637 conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
638 description : 'default cgroup hierarchy as string')
639 if default_hierarchy == 'legacy'
640 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
641 elif default_hierarchy == 'hybrid'
642 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
644 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
647 default_net_naming_scheme = get_option('default-net-naming-scheme')
648 conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
650 time_epoch = get_option('time-epoch')
653 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
655 conf.set('TIME_EPOCH', time_epoch)
657 system_uid_max = get_option('system-uid-max')
658 if system_uid_max == -1
659 system_uid_max = run_command(
661 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
662 '/etc/login.defs').stdout().strip()
663 if system_uid_max == ''
666 system_uid_max = system_uid_max.to_int()
669 conf.set('SYSTEM_UID_MAX', system_uid_max)
670 substs.set('systemuidmax', system_uid_max)
672 system_gid_max = get_option('system-gid-max')
673 if system_gid_max == -1
674 system_gid_max = run_command(
676 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
677 '/etc/login.defs').stdout().strip()
678 if system_gid_max == ''
681 system_gid_max = system_gid_max.to_int()
684 conf.set('SYSTEM_GID_MAX', system_gid_max)
685 substs.set('systemgidmax', system_gid_max)
687 dynamic_uid_min = get_option('dynamic-uid-min')
688 dynamic_uid_max = get_option('dynamic-uid-max')
689 conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
690 conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
691 substs.set('dynamicuidmin', dynamic_uid_min)
692 substs.set('dynamicuidmax', dynamic_uid_max)
694 container_uid_base_min = get_option('container-uid-base-min')
695 container_uid_base_max = get_option('container-uid-base-max')
696 conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
697 conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
698 substs.set('containeruidbasemin', container_uid_base_min)
699 substs.set('containeruidbasemax', container_uid_base_max)
701 nobody_user = get_option('nobody-user')
702 nobody_group = get_option('nobody-group')
704 if not meson.is_cross_build()
705 getent_result = run_command('getent', 'passwd', '65534')
706 if getent_result.returncode() == 0
707 name = getent_result.stdout().split(':')[0]
708 if name != nobody_user
710 '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) +
711 'Your build will result in an user table setup that is incompatible with the local system.')
714 id_result = run_command('id', '-u', nobody_user)
715 if id_result.returncode() == 0
716 id = id_result.stdout().to_int()
719 '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) +
720 'Your build will result in an user table setup that is incompatible with the local system.')
724 getent_result = run_command('getent', 'group', '65534')
725 if getent_result.returncode() == 0
726 name = getent_result.stdout().split(':')[0]
727 if name != nobody_group
729 '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) +
730 'Your build will result in an group table setup that is incompatible with the local system.')
733 id_result = run_command('id', '-g', nobody_group)
734 if id_result.returncode() == 0
735 id = id_result.stdout().to_int()
738 '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) +
739 'Your build will result in an group table setup that is incompatible with the local system.')
743 if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
745 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
746 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
749 conf.set_quoted('NOBODY_USER_NAME', nobody_user)
750 conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
751 substs.set('NOBODY_USER_NAME', nobody_user)
752 substs.set('NOBODY_GROUP_NAME', nobody_group)
754 tty_gid = get_option('tty-gid')
755 conf.set('TTY_GID', tty_gid)
756 substs.set('TTY_GID', tty_gid)
758 # Ensure provided GID argument is numeric, otherwise fallback to default assignment
759 users_gid = get_option('users-gid')
760 substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
762 conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
763 conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
765 dev_kvm_mode = get_option('dev-kvm-mode')
766 substs.set('DEV_KVM_MODE', dev_kvm_mode)
767 conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
768 group_render_mode = get_option('group-render-mode')
769 substs.set('GROUP_RENDER_MODE', group_render_mode)
770 conf.set10('GROUP_RENDER_UACCESS', group_render_mode != '0666')
772 kill_user_processes = get_option('default-kill-user-processes')
773 conf.set10('KILL_USER_PROCESSES', kill_user_processes)
774 conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
775 substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
777 dns_servers = get_option('dns-servers')
778 conf.set_quoted('DNS_SERVERS', dns_servers)
779 substs.set('DNS_SERVERS', dns_servers)
781 ntp_servers = get_option('ntp-servers')
782 conf.set_quoted('NTP_SERVERS', ntp_servers)
783 substs.set('NTP_SERVERS', ntp_servers)
785 default_locale = get_option('default-locale')
786 if default_locale == ''
787 if not meson.is_cross_build()
788 choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
789 default_locale = run_command(choose_default_locale_sh).stdout().strip()
791 default_locale = 'C.UTF-8'
794 conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
796 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
798 service_watchdog = get_option('service-watchdog')
799 watchdog_value = service_watchdog == '' ? '' : 'WatchdogSec=' + service_watchdog
800 substs.set('SERVICE_WATCHDOG', watchdog_value)
802 substs.set('SUSHELL', get_option('debug-shell'))
803 substs.set('DEBUGTTY', get_option('debug-tty'))
804 conf.set_quoted('DEBUGTTY', get_option('debug-tty'))
806 enable_debug_hashmap = false
807 enable_debug_mmap_cache = false
808 enable_debug_siphash = false
809 foreach name : get_option('debug-extra')
811 enable_debug_hashmap = true
812 elif name == 'mmap-cache'
813 enable_debug_mmap_cache = true
814 elif name == 'siphash'
815 enable_debug_siphash = true
817 message('unknown debug option "@0@", ignoring'.format(name))
820 conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
821 conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
822 conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
824 conf.set10('VALGRIND', get_option('valgrind'))
825 conf.set10('LOG_TRACE', get_option('log-trace'))
827 default_user_path = get_option('user-path')
828 if default_user_path != ''
829 conf.set_quoted('DEFAULT_USER_PATH', default_user_path)
832 #####################################################################
834 threads = dependency('threads')
835 librt = cc.find_library('rt')
836 libm = cc.find_library('m')
837 libdl = cc.find_library('dl')
838 libcrypt = cc.find_library('crypt')
840 libcap = dependency('libcap', required : false)
841 if not libcap.found()
842 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
843 libcap = cc.find_library('cap')
846 libmount = dependency('mount',
847 version : fuzzer_build ? '>= 0' : '>= 2.30')
849 want_seccomp = get_option('seccomp')
850 if want_seccomp != 'false' and not skip_deps
851 libseccomp = dependency('libseccomp',
852 version : '>= 2.3.1',
853 required : want_seccomp == 'true')
854 have = libseccomp.found()
859 conf.set10('HAVE_SECCOMP', have)
861 want_selinux = get_option('selinux')
862 if want_selinux != 'false' and not skip_deps
863 libselinux = dependency('libselinux',
864 version : '>= 2.1.9',
865 required : want_selinux == 'true')
866 have = libselinux.found()
871 conf.set10('HAVE_SELINUX', have)
873 want_apparmor = get_option('apparmor')
874 if want_apparmor != 'false' and not skip_deps
875 libapparmor = dependency('libapparmor',
876 required : want_apparmor == 'true')
877 have = libapparmor.found()
882 conf.set10('HAVE_APPARMOR', have)
884 smack_run_label = get_option('smack-run-label')
885 if smack_run_label != ''
886 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
889 want_polkit = get_option('polkit')
890 install_polkit = false
891 install_polkit_pkla = false
892 if want_polkit != 'false' and not skip_deps
893 install_polkit = true
895 libpolkit = dependency('polkit-gobject-1',
897 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
898 message('Old polkit detected, will install pkla files')
899 install_polkit_pkla = true
902 conf.set10('ENABLE_POLKIT', install_polkit)
904 want_acl = get_option('acl')
905 if want_acl != 'false' and not skip_deps
906 libacl = cc.find_library('acl', required : want_acl == 'true')
907 have = libacl.found()
912 conf.set10('HAVE_ACL', have)
914 want_audit = get_option('audit')
915 if want_audit != 'false' and not skip_deps
916 libaudit = dependency('audit', required : want_audit == 'true')
917 have = libaudit.found()
922 conf.set10('HAVE_AUDIT', have)
924 want_blkid = get_option('blkid')
925 if want_blkid != 'false' and not skip_deps
926 libblkid = dependency('blkid', required : want_blkid == 'true')
927 have = libblkid.found()
932 conf.set10('HAVE_BLKID', have)
934 want_kmod = get_option('kmod')
935 if want_kmod != 'false' and not skip_deps
936 libkmod = dependency('libkmod',
938 required : want_kmod == 'true')
939 have = libkmod.found()
944 conf.set10('HAVE_KMOD', have)
946 want_pam = get_option('pam')
947 if want_pam != 'false' and not skip_deps
948 libpam = cc.find_library('pam', required : want_pam == 'true')
949 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
950 have = libpam.found() and libpam_misc.found()
956 conf.set10('HAVE_PAM', have)
958 want_microhttpd = get_option('microhttpd')
959 if want_microhttpd != 'false' and not skip_deps
960 libmicrohttpd = dependency('libmicrohttpd',
961 version : '>= 0.9.33',
962 required : want_microhttpd == 'true')
963 have = libmicrohttpd.found()
968 conf.set10('HAVE_MICROHTTPD', have)
970 want_libcryptsetup = get_option('libcryptsetup')
971 if want_libcryptsetup != 'false' and not skip_deps
972 libcryptsetup = dependency('libcryptsetup',
973 version : '>= 2.0.1',
974 required : want_libcryptsetup == 'true')
975 have = libcryptsetup.found()
980 conf.set10('HAVE_LIBCRYPTSETUP', have)
982 want_libcurl = get_option('libcurl')
983 if want_libcurl != 'false' and not skip_deps
984 libcurl = dependency('libcurl',
985 version : '>= 7.32.0',
986 required : want_libcurl == 'true')
987 have = libcurl.found()
992 conf.set10('HAVE_LIBCURL', have)
994 want_libidn = get_option('libidn')
995 want_libidn2 = get_option('libidn2')
996 if want_libidn == 'true' and want_libidn2 == 'true'
997 error('libidn and libidn2 cannot be requested simultaneously')
1000 if want_libidn2 != 'false' and want_libidn != 'true' and not skip_deps
1001 libidn = dependency('libidn2',
1002 required : want_libidn2 == 'true')
1003 have = libidn.found()
1008 conf.set10('HAVE_LIBIDN2', have)
1009 if not have and want_libidn != 'false' and not skip_deps
1010 # libidn is used for both libidn and libidn2 objects
1011 libidn = dependency('libidn',
1012 required : want_libidn == 'true')
1013 have = libidn.found()
1017 conf.set10('HAVE_LIBIDN', have)
1019 want_libiptc = get_option('libiptc')
1020 if want_libiptc != 'false' and not skip_deps
1021 libiptc = dependency('libiptc',
1022 required : want_libiptc == 'true')
1023 have = libiptc.found()
1028 conf.set10('HAVE_LIBIPTC', have)
1030 want_qrencode = get_option('qrencode')
1031 if want_qrencode != 'false' and not skip_deps
1032 libqrencode = dependency('libqrencode',
1033 required : want_qrencode == 'true')
1034 have = libqrencode.found()
1039 conf.set10('HAVE_QRENCODE', have)
1041 want_gcrypt = get_option('gcrypt')
1042 if want_gcrypt != 'false' and not skip_deps
1043 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1044 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
1045 have = libgcrypt.found() and libgpg_error.found()
1050 # link to neither of the libs if one is not found
1054 conf.set10('HAVE_GCRYPT', have)
1056 want_gnutls = get_option('gnutls')
1057 if want_gnutls != 'false' and not skip_deps
1058 libgnutls = dependency('gnutls',
1059 version : '>= 3.1.4',
1060 required : want_gnutls == 'true')
1061 have = libgnutls.found()
1066 conf.set10('HAVE_GNUTLS', have)
1068 want_openssl = get_option('openssl')
1069 if want_openssl != 'false' and not skip_deps
1070 libopenssl = dependency('openssl',
1071 version : '>= 1.1.0',
1072 required : want_openssl == 'true')
1073 have = libopenssl.found()
1078 conf.set10('HAVE_OPENSSL', have)
1080 want_elfutils = get_option('elfutils')
1081 if want_elfutils != 'false' and not skip_deps
1082 libdw = dependency('libdw',
1083 required : want_elfutils == 'true')
1084 have = libdw.found()
1089 conf.set10('HAVE_ELFUTILS', have)
1091 want_zlib = get_option('zlib')
1092 if want_zlib != 'false' and not skip_deps
1093 libz = dependency('zlib',
1094 required : want_zlib == 'true')
1100 conf.set10('HAVE_ZLIB', have)
1102 want_bzip2 = get_option('bzip2')
1103 if want_bzip2 != 'false' and not skip_deps
1104 libbzip2 = cc.find_library('bz2',
1105 required : want_bzip2 == 'true')
1106 have = libbzip2.found()
1111 conf.set10('HAVE_BZIP2', have)
1113 want_xz = get_option('xz')
1114 if want_xz != 'false' and not skip_deps
1115 libxz = dependency('liblzma',
1116 required : want_xz == 'true')
1117 have = libxz.found()
1122 conf.set10('HAVE_XZ', have)
1124 want_lz4 = get_option('lz4')
1125 if want_lz4 != 'false' and not skip_deps
1126 liblz4 = dependency('liblz4',
1127 version : '>= 1.3.0',
1128 required : want_lz4 == 'true')
1129 have = liblz4.found()
1134 conf.set10('HAVE_LZ4', have)
1136 want_xkbcommon = get_option('xkbcommon')
1137 if want_xkbcommon != 'false' and not skip_deps
1138 libxkbcommon = dependency('xkbcommon',
1139 version : '>= 0.3.0',
1140 required : want_xkbcommon == 'true')
1141 have = libxkbcommon.found()
1146 conf.set10('HAVE_XKBCOMMON', have)
1148 want_pcre2 = get_option('pcre2')
1149 if want_pcre2 != 'false'
1150 libpcre2 = dependency('libpcre2-8',
1151 required : want_pcre2 == 'true')
1152 have = libpcre2.found()
1157 conf.set10('HAVE_PCRE2', have)
1159 want_glib = get_option('glib')
1160 if want_glib != 'false' and not skip_deps
1161 libglib = dependency('glib-2.0',
1162 version : '>= 2.22.0',
1163 required : want_glib == 'true')
1164 libgobject = dependency('gobject-2.0',
1165 version : '>= 2.22.0',
1166 required : want_glib == 'true')
1167 libgio = dependency('gio-2.0',
1168 required : want_glib == 'true')
1169 have = libglib.found() and libgobject.found() and libgio.found()
1176 conf.set10('HAVE_GLIB', have)
1178 want_dbus = get_option('dbus')
1179 if want_dbus != 'false' and not skip_deps
1180 libdbus = dependency('dbus-1',
1181 version : '>= 1.3.2',
1182 required : want_dbus == 'true')
1183 have = libdbus.found()
1188 conf.set10('HAVE_DBUS', have)
1190 default_dnssec = get_option('default-dnssec')
1192 default_dnssec = 'no'
1194 if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
1195 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1196 default_dnssec = 'no'
1198 conf.set('DEFAULT_DNSSEC_MODE',
1199 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1200 substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1202 dns_over_tls = get_option('dns-over-tls')
1203 if dns_over_tls != 'false'
1204 if dns_over_tls == 'openssl'
1207 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.6.0'))
1208 if dns_over_tls == 'gnutls' and not have_gnutls
1209 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1212 if dns_over_tls == 'gnutls' or have_gnutls
1213 have_openssl = false
1215 have_openssl = conf.get('HAVE_OPENSSL') == 1
1216 if dns_over_tls != 'auto' and not have_openssl
1217 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
1218 error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
1221 have = have_gnutls or have_openssl
1225 have_openssl = false
1227 conf.set10('ENABLE_DNS_OVER_TLS', have)
1228 conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1229 conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
1231 default_dns_over_tls = get_option('default-dns-over-tls')
1233 default_dns_over_tls = 'no'
1235 if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
1236 message('default-dns-over-tls cannot be enabled or set to opportunistic when DNS-over-TLS support is disabled. Setting default-dns-over-tls to no.')
1237 default_dns_over_tls = 'no'
1239 conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1240 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1241 substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
1243 want_importd = get_option('importd')
1244 if want_importd != 'false'
1245 have = (conf.get('HAVE_LIBCURL') == 1 and
1246 conf.get('HAVE_ZLIB') == 1 and
1247 conf.get('HAVE_XZ') == 1 and
1248 conf.get('HAVE_GCRYPT') == 1)
1249 if want_importd == 'true' and not have
1250 error('importd support was requested, but dependencies are not available')
1255 conf.set10('ENABLE_IMPORTD', have)
1257 want_remote = get_option('remote')
1258 if want_remote != 'false'
1259 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1260 conf.get('HAVE_LIBCURL') == 1]
1261 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1262 # it's possible to build one without the other. Complain only if
1263 # support was explicitly requested. The auxiliary files like sysusers
1264 # config should be installed when any of the programs are built.
1265 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1266 error('remote support was requested, but dependencies are not available')
1268 have = have_deps[0] or have_deps[1]
1272 conf.set10('ENABLE_REMOTE', have)
1274 foreach term : ['utmp',
1307 have = get_option(term)
1308 name = 'ENABLE_' + term.underscorify().to_upper()
1309 conf.set10(name, have)
1312 foreach tuple : [['nss-mymachines', 'machined'],
1313 ['nss-resolve', 'resolve']]
1314 want = get_option(tuple[0])
1316 have = get_option(tuple[1])
1317 if want == 'true' and not have
1318 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1323 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1324 conf.set10(name, have)
1328 foreach term : ['ENABLE_NSS_MYHOSTNAME',
1329 'ENABLE_NSS_MYMACHINES',
1330 'ENABLE_NSS_RESOLVE',
1331 'ENABLE_NSS_SYSTEMD']
1332 if conf.get(term) == 1
1336 conf.set10('ENABLE_NSS', enable_nss)
1338 conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
1343 conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
1345 #####################################################################
1347 if get_option('efi')
1348 efi_arch = host_machine.cpu_family()
1350 if efi_arch == 'x86'
1351 EFI_MACHINE_TYPE_NAME = 'ia32'
1352 gnu_efi_arch = 'ia32'
1353 elif efi_arch == 'x86_64'
1354 EFI_MACHINE_TYPE_NAME = 'x64'
1355 gnu_efi_arch = 'x86_64'
1356 elif efi_arch == 'arm'
1357 EFI_MACHINE_TYPE_NAME = 'arm'
1358 gnu_efi_arch = 'arm'
1359 elif efi_arch == 'aarch64'
1360 EFI_MACHINE_TYPE_NAME = 'aa64'
1361 gnu_efi_arch = 'aarch64'
1363 EFI_MACHINE_TYPE_NAME = ''
1368 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
1370 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
1374 conf.set10('ENABLE_EFI', have)
1376 #####################################################################
1378 config_h = configure_file(
1379 output : 'config.h',
1380 configuration : conf)
1382 meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1384 includes = include_directories('src/basic',
1389 'src/journal-remote',
1393 'src/time-wait-sync',
1399 'src/libsystemd/sd-bus',
1400 'src/libsystemd/sd-device',
1401 'src/libsystemd/sd-event',
1402 'src/libsystemd/sd-hwdb',
1403 'src/libsystemd/sd-id128',
1404 'src/libsystemd/sd-netlink',
1405 'src/libsystemd/sd-network',
1406 'src/libsystemd/sd-resolve',
1407 'src/libsystemd-network',
1410 add_project_arguments('-include', 'config.h', language : 'c')
1412 generate_gperfs = find_program('tools/generate-gperfs.py')
1416 subdir('src/systemd')
1418 subdir('src/libsystemd')
1419 subdir('src/libsystemd-network')
1420 subdir('src/journal')
1423 libjournal_core = static_library(
1425 libjournal_core_sources,
1427 include_directories : includes,
1430 libsystemd_sym_path = '@0@/@1@'.format(project_source_root, libsystemd_sym)
1431 libsystemd = shared_library(
1434 version : libsystemd_version,
1435 include_directories : includes,
1436 link_args : ['-shared',
1437 '-Wl,--version-script=' + libsystemd_sym_path],
1438 link_with : [libbasic,
1440 link_whole : [libsystemd_static,
1442 dependencies : [threads,
1446 link_depends : libsystemd_sym,
1448 install_dir : rootlibdir)
1450 static_libsystemd = get_option('static-libsystemd')
1451 static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1453 install_libsystemd_static = static_library(
1456 journal_client_sources,
1458 basic_gcrypt_sources,
1460 include_directories : includes,
1461 build_by_default : static_libsystemd != 'false',
1462 install : static_libsystemd != 'false',
1463 install_dir : rootlibdir,
1464 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1465 dependencies : [threads,
1474 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1476 #Generate autosuspend rules
1477 make_autosuspend_rules_py = find_program('tools/make-autosuspend-rules.py')
1479 ############################################################
1481 # binaries that have --help and are intended for use by humans,
1482 # usually, but not always, installed in /bin.
1483 public_programs = []
1485 subdir('src/libudev')
1486 subdir('src/shared')
1488 subdir('src/shutdown')
1490 subdir('src/network')
1492 subdir('src/analyze')
1493 subdir('src/journal-remote')
1494 subdir('src/coredump')
1495 subdir('src/pstore')
1496 subdir('src/hostname')
1497 subdir('src/import')
1498 subdir('src/kernel-install')
1499 subdir('src/locale')
1500 subdir('src/machine')
1501 subdir('src/portable')
1502 subdir('src/nspawn')
1503 subdir('src/resolve')
1504 subdir('src/timedate')
1505 subdir('src/timesync')
1506 subdir('src/vconsole')
1507 subdir('src/boot/efi')
1514 ############################################################
1516 # only static linking apart from libdl, to make sure that the
1517 # module is linked to all libraries that it uses.
1518 test_dlopen = executable(
1522 include_directories : includes,
1523 link_with : [libbasic],
1524 dependencies : [libdl],
1525 build_by_default : want_tests != 'false')
1527 foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
1528 ['systemd', 'ENABLE_NSS_SYSTEMD'],
1529 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1530 ['resolve', 'ENABLE_NSS_RESOLVE']]
1532 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
1536 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1537 version_script_arg = join_paths(project_source_root, sym)
1539 nss = shared_library(
1541 'src/nss-@0@/nss-@0@.c'.format(module),
1544 include_directories : includes,
1545 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1546 link_args : ['-Wl,-z,nodelete',
1548 '-Wl,--version-script=' + version_script_arg],
1549 link_with : [libsystemd_static,
1552 dependencies : [threads,
1556 install_dir : rootlibdir)
1558 # We cannot use shared_module because it does not support version suffix.
1559 # Unfortunately shared_library insists on creating the symlink…
1560 meson.add_install_script('sh', '-c',
1561 'rm $DESTDIR@0@/libnss_@1@.so'
1562 .format(rootlibdir, module))
1564 if want_tests != 'false'
1565 test('dlopen-nss_' + module,
1567 # path to dlopen must include a slash
1568 args : nss.full_path())
1573 ############################################################
1575 executable('systemd',
1577 include_directories : includes,
1578 link_with : [libcore,
1580 dependencies : [versiondep,
1587 install_rpath : rootlibexecdir,
1589 install_dir : rootlibexecdir)
1591 meson.add_install_script(meson_make_symlink,
1592 join_paths(rootlibexecdir, 'systemd'),
1593 join_paths(rootsbindir, 'init'))
1595 exe = executable('systemd-analyze',
1596 systemd_analyze_sources,
1597 include_directories : includes,
1598 link_with : [libcore,
1600 dependencies : [versiondep,
1607 install_rpath : rootlibexecdir,
1609 public_programs += exe
1611 executable('systemd-journald',
1612 systemd_journald_sources,
1613 include_directories : includes,
1614 link_with : [libjournal_core,
1616 dependencies : [threads,
1620 install_rpath : rootlibexecdir,
1622 install_dir : rootlibexecdir)
1624 exe = executable('systemd-cat',
1625 systemd_cat_sources,
1626 include_directories : includes,
1627 link_with : [libjournal_core,
1629 dependencies : [threads],
1630 install_rpath : rootlibexecdir,
1632 public_programs += exe
1634 exe = executable('journalctl',
1636 include_directories : includes,
1637 link_with : [libshared],
1638 dependencies : [threads,
1643 install_rpath : rootlibexecdir,
1645 install_dir : rootbindir)
1646 public_programs += exe
1648 executable('systemd-getty-generator',
1649 'src/getty-generator/getty-generator.c',
1650 include_directories : includes,
1651 link_with : [libshared],
1652 install_rpath : rootlibexecdir,
1654 install_dir : systemgeneratordir)
1656 executable('systemd-debug-generator',
1657 'src/debug-generator/debug-generator.c',
1658 include_directories : includes,
1659 link_with : [libshared],
1660 install_rpath : rootlibexecdir,
1662 install_dir : systemgeneratordir)
1664 executable('systemd-run-generator',
1665 'src/run-generator/run-generator.c',
1666 include_directories : includes,
1667 link_with : [libshared],
1668 install_rpath : rootlibexecdir,
1670 install_dir : systemgeneratordir)
1672 executable('systemd-fstab-generator',
1673 'src/fstab-generator/fstab-generator.c',
1674 include_directories : includes,
1675 link_with : [libcore_shared,
1677 install_rpath : rootlibexecdir,
1679 install_dir : systemgeneratordir)
1681 if conf.get('ENABLE_ENVIRONMENT_D') == 1
1682 executable('30-systemd-environment-d-generator',
1683 'src/environment-d-generator/environment-d-generator.c',
1684 include_directories : includes,
1685 link_with : [libshared],
1686 install_rpath : rootlibexecdir,
1688 install_dir : userenvgeneratordir)
1690 meson.add_install_script(meson_make_symlink,
1691 join_paths(sysconfdir, 'environment'),
1692 join_paths(environmentdir, '99-environment.conf'))
1695 if conf.get('ENABLE_HIBERNATE') == 1
1696 executable('systemd-hibernate-resume-generator',
1697 'src/hibernate-resume/hibernate-resume-generator.c',
1698 include_directories : includes,
1699 link_with : [libshared],
1700 install_rpath : rootlibexecdir,
1702 install_dir : systemgeneratordir)
1704 executable('systemd-hibernate-resume',
1705 'src/hibernate-resume/hibernate-resume.c',
1706 include_directories : includes,
1707 link_with : [libshared],
1708 install_rpath : rootlibexecdir,
1710 install_dir : rootlibexecdir)
1713 if conf.get('HAVE_BLKID') == 1
1714 executable('systemd-gpt-auto-generator',
1715 'src/gpt-auto-generator/gpt-auto-generator.c',
1716 'src/shared/blkid-util.h',
1717 include_directories : includes,
1718 link_with : [libshared],
1719 dependencies : libblkid,
1720 install_rpath : rootlibexecdir,
1722 install_dir : systemgeneratordir)
1724 exe = executable('systemd-dissect',
1725 'src/dissect/dissect.c',
1726 include_directories : includes,
1727 link_with : [libshared],
1728 install_rpath : rootlibexecdir,
1730 install_dir : rootlibexecdir)
1731 public_programs += exe
1734 if conf.get('ENABLE_RESOLVE') == 1
1735 executable('systemd-resolved',
1736 systemd_resolved_sources,
1737 include_directories : includes,
1738 link_with : [libshared,
1740 libsystemd_resolve_core],
1741 dependencies : systemd_resolved_dependencies,
1742 install_rpath : rootlibexecdir,
1744 install_dir : rootlibexecdir)
1746 exe = executable('resolvectl',
1748 include_directories : includes,
1749 link_with : [libshared,
1751 libsystemd_resolve_core],
1752 dependencies : [threads,
1756 install_rpath : rootlibexecdir,
1758 public_programs += exe
1760 meson.add_install_script(meson_make_symlink,
1761 join_paths(bindir, 'resolvectl'),
1762 join_paths(rootsbindir, 'resolvconf'))
1764 meson.add_install_script(meson_make_symlink,
1765 join_paths(bindir, 'resolvectl'),
1766 join_paths(bindir, 'systemd-resolve'))
1769 if conf.get('ENABLE_LOGIND') == 1
1770 executable('systemd-logind',
1771 systemd_logind_sources,
1772 include_directories : includes,
1773 link_with : [liblogind_core,
1775 dependencies : [threads,
1777 install_rpath : rootlibexecdir,
1779 install_dir : rootlibexecdir)
1781 exe = executable('loginctl',
1783 include_directories : includes,
1784 link_with : [libshared],
1785 dependencies : [threads,
1788 install_rpath : rootlibexecdir,
1790 install_dir : rootbindir)
1791 public_programs += exe
1793 exe = executable('systemd-inhibit',
1794 'src/login/inhibit.c',
1795 include_directories : includes,
1796 link_with : [libshared],
1797 install_rpath : rootlibexecdir,
1799 install_dir : rootbindir)
1800 public_programs += exe
1802 if conf.get('HAVE_PAM') == 1
1803 version_script_arg = join_paths(project_source_root, pam_systemd_sym)
1804 pam_systemd = shared_library(
1808 include_directories : includes,
1809 link_args : ['-shared',
1810 '-Wl,--version-script=' + version_script_arg],
1811 link_with : [libsystemd_static,
1813 dependencies : [threads,
1816 link_depends : pam_systemd_sym,
1818 install_dir : pamlibdir)
1820 if want_tests != 'false'
1821 test('dlopen-pam_systemd',
1823 # path to dlopen must include a slash
1824 args : pam_systemd.full_path())
1828 executable('systemd-user-runtime-dir',
1829 user_runtime_dir_sources,
1830 include_directories : includes,
1831 link_with : [libshared],
1832 install_rpath : rootlibexecdir,
1834 install_dir : rootlibexecdir)
1837 if conf.get('HAVE_PAM') == 1
1838 executable('systemd-user-sessions',
1839 'src/user-sessions/user-sessions.c',
1840 include_directories : includes,
1841 link_with : [libshared],
1842 install_rpath : rootlibexecdir,
1844 install_dir : rootlibexecdir)
1847 if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
1848 exe = executable('bootctl',
1849 'src/boot/bootctl.c',
1850 include_directories : includes,
1851 link_with : [libshared],
1852 dependencies : [libblkid],
1853 install_rpath : rootlibexecdir,
1855 public_programs += exe
1857 executable('systemd-bless-boot',
1858 'src/boot/bless-boot.c',
1859 include_directories : includes,
1860 link_with : [libshared],
1861 dependencies : [libblkid],
1862 install_rpath : rootlibexecdir,
1864 install_dir : rootlibexecdir)
1866 executable('systemd-bless-boot-generator',
1867 'src/boot/bless-boot-generator.c',
1868 include_directories : includes,
1869 link_with : [libshared],
1870 install_rpath : rootlibexecdir,
1872 install_dir : systemgeneratordir)
1875 executable('systemd-boot-check-no-failures',
1876 'src/boot/boot-check-no-failures.c',
1877 include_directories : includes,
1878 link_with : [libshared],
1879 dependencies : [libblkid],
1880 install_rpath : rootlibexecdir,
1882 install_dir : rootlibexecdir)
1884 exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1885 include_directories : includes,
1886 link_with : [libshared],
1887 dependencies : [threads],
1888 install_rpath : rootlibexecdir,
1890 public_programs += exe
1893 if get_option('link-systemctl-shared')
1894 systemctl_link_with = [libshared]
1896 systemctl_link_with = [libsystemd_static,
1902 exe = executable('systemctl',
1903 'src/systemctl/systemctl.c',
1904 'src/systemctl/sysv-compat.h',
1905 'src/systemctl/sysv-compat.c',
1906 include_directories : includes,
1907 link_with : systemctl_link_with,
1908 dependencies : [threads,
1913 install_rpath : rootlibexecdir,
1915 install_dir : rootbindir)
1916 public_programs += exe
1918 if conf.get('ENABLE_PORTABLED') == 1
1919 executable('systemd-portabled',
1920 systemd_portabled_sources,
1921 include_directories : includes,
1922 link_with : [libshared],
1923 dependencies : [threads],
1924 install_rpath : rootlibexecdir,
1926 install_dir : rootlibexecdir)
1928 exe = executable('portablectl', 'src/portable/portablectl.c',
1929 include_directories : includes,
1930 link_with : [libshared],
1931 dependencies : [threads],
1932 install_rpath : rootlibexecdir,
1934 install_dir : rootbindir)
1935 public_programs += exe
1938 foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1939 meson.add_install_script(meson_make_symlink,
1940 join_paths(rootbindir, 'systemctl'),
1941 join_paths(rootsbindir, alias))
1944 if conf.get('ENABLE_BACKLIGHT') == 1
1945 executable('systemd-backlight',
1946 'src/backlight/backlight.c',
1947 include_directories : includes,
1948 link_with : [libshared],
1949 install_rpath : rootlibexecdir,
1951 install_dir : rootlibexecdir)
1954 if conf.get('ENABLE_RFKILL') == 1
1955 executable('systemd-rfkill',
1956 'src/rfkill/rfkill.c',
1957 include_directories : includes,
1958 link_with : [libshared],
1959 install_rpath : rootlibexecdir,
1961 install_dir : rootlibexecdir)
1964 executable('systemd-system-update-generator',
1965 'src/system-update-generator/system-update-generator.c',
1966 include_directories : includes,
1967 link_with : [libshared],
1968 install_rpath : rootlibexecdir,
1970 install_dir : systemgeneratordir)
1972 if conf.get('HAVE_LIBCRYPTSETUP') == 1
1973 executable('systemd-cryptsetup',
1974 'src/cryptsetup/cryptsetup.c',
1975 include_directories : includes,
1976 link_with : [libshared],
1977 dependencies : [libcryptsetup],
1978 install_rpath : rootlibexecdir,
1980 install_dir : rootlibexecdir)
1982 executable('systemd-cryptsetup-generator',
1983 'src/cryptsetup/cryptsetup-generator.c',
1984 include_directories : includes,
1985 link_with : [libshared],
1986 dependencies : [libcryptsetup],
1987 install_rpath : rootlibexecdir,
1989 install_dir : systemgeneratordir)
1991 executable('systemd-veritysetup',
1992 'src/veritysetup/veritysetup.c',
1993 include_directories : includes,
1994 link_with : [libshared],
1995 dependencies : [libcryptsetup],
1996 install_rpath : rootlibexecdir,
1998 install_dir : rootlibexecdir)
2000 executable('systemd-veritysetup-generator',
2001 'src/veritysetup/veritysetup-generator.c',
2002 include_directories : includes,
2003 link_with : [libshared],
2004 dependencies : [libcryptsetup],
2005 install_rpath : rootlibexecdir,
2007 install_dir : systemgeneratordir)
2010 if conf.get('HAVE_SYSV_COMPAT') == 1
2011 executable('systemd-sysv-generator',
2012 'src/sysv-generator/sysv-generator.c',
2013 include_directories : includes,
2014 link_with : [libshared],
2015 install_rpath : rootlibexecdir,
2017 install_dir : systemgeneratordir)
2019 executable('systemd-rc-local-generator',
2020 'src/rc-local-generator/rc-local-generator.c',
2021 include_directories : includes,
2022 link_with : [libshared],
2023 install_rpath : rootlibexecdir,
2025 install_dir : systemgeneratordir)
2028 if conf.get('ENABLE_HOSTNAMED') == 1
2029 executable('systemd-hostnamed',
2030 'src/hostname/hostnamed.c',
2031 include_directories : includes,
2032 link_with : [libshared],
2033 install_rpath : rootlibexecdir,
2035 install_dir : rootlibexecdir)
2037 exe = executable('hostnamectl',
2038 'src/hostname/hostnamectl.c',
2039 include_directories : includes,
2040 link_with : [libshared],
2041 install_rpath : rootlibexecdir,
2043 public_programs += exe
2046 if conf.get('ENABLE_LOCALED') == 1
2047 if conf.get('HAVE_XKBCOMMON') == 1
2048 # logind will load libxkbcommon.so dynamically on its own
2054 executable('systemd-localed',
2055 systemd_localed_sources,
2056 include_directories : includes,
2057 link_with : [libshared],
2058 dependencies : deps,
2059 install_rpath : rootlibexecdir,
2061 install_dir : rootlibexecdir)
2063 exe = executable('localectl',
2065 include_directories : includes,
2066 link_with : [libshared],
2067 install_rpath : rootlibexecdir,
2069 public_programs += exe
2072 if conf.get('ENABLE_TIMEDATED') == 1
2073 executable('systemd-timedated',
2074 'src/timedate/timedated.c',
2075 include_directories : includes,
2076 link_with : [libshared],
2077 install_rpath : rootlibexecdir,
2079 install_dir : rootlibexecdir)
2082 if conf.get('ENABLE_TIMEDATECTL') == 1
2083 exe = executable('timedatectl',
2084 'src/timedate/timedatectl.c',
2085 include_directories : includes,
2086 install_rpath : rootlibexecdir,
2087 link_with : [libshared],
2088 dependencies : [libm],
2090 public_programs += exe
2093 if conf.get('ENABLE_TIMESYNCD') == 1
2094 executable('systemd-timesyncd',
2095 systemd_timesyncd_sources,
2096 include_directories : includes,
2097 link_with : [libshared],
2098 dependencies : [threads,
2100 install_rpath : rootlibexecdir,
2102 install_dir : rootlibexecdir)
2104 executable('systemd-time-wait-sync',
2105 'src/time-wait-sync/time-wait-sync.c',
2106 include_directories : includes,
2107 link_with : [libshared],
2108 install_rpath : rootlibexecdir,
2110 install_dir : rootlibexecdir)
2113 if conf.get('ENABLE_MACHINED') == 1
2114 executable('systemd-machined',
2115 systemd_machined_sources,
2116 include_directories : includes,
2117 link_with : [libmachine_core,
2119 install_rpath : rootlibexecdir,
2121 install_dir : rootlibexecdir)
2123 exe = executable('machinectl',
2124 'src/machine/machinectl.c',
2125 include_directories : includes,
2126 link_with : [libshared],
2127 dependencies : [threads,
2130 install_rpath : rootlibexecdir,
2132 install_dir : rootbindir)
2133 public_programs += exe
2136 if conf.get('ENABLE_IMPORTD') == 1
2137 executable('systemd-importd',
2138 systemd_importd_sources,
2139 include_directories : includes,
2140 link_with : [libshared],
2141 dependencies : [threads],
2142 install_rpath : rootlibexecdir,
2144 install_dir : rootlibexecdir)
2146 systemd_pull = executable('systemd-pull',
2147 systemd_pull_sources,
2148 include_directories : includes,
2149 link_with : [libshared],
2150 dependencies : [versiondep,
2156 install_rpath : rootlibexecdir,
2158 install_dir : rootlibexecdir)
2160 systemd_import = executable('systemd-import',
2161 systemd_import_sources,
2162 include_directories : includes,
2163 link_with : [libshared],
2164 dependencies : [libcurl,
2168 install_rpath : rootlibexecdir,
2170 install_dir : rootlibexecdir)
2172 systemd_import_fs = executable('systemd-import-fs',
2173 systemd_import_fs_sources,
2174 include_directories : includes,
2175 link_with : [libshared],
2176 install_rpath : rootlibexecdir,
2178 install_dir : rootlibexecdir)
2180 systemd_export = executable('systemd-export',
2181 systemd_export_sources,
2182 include_directories : includes,
2183 link_with : [libshared],
2184 dependencies : [libcurl,
2188 install_rpath : rootlibexecdir,
2190 install_dir : rootlibexecdir)
2192 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
2195 if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
2196 exe = executable('systemd-journal-upload',
2197 systemd_journal_upload_sources,
2198 include_directories : includes,
2199 link_with : [libshared],
2200 dependencies : [versiondep,
2206 install_rpath : rootlibexecdir,
2208 install_dir : rootlibexecdir)
2209 public_programs += exe
2212 if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
2213 s_j_remote = executable('systemd-journal-remote',
2214 systemd_journal_remote_sources,
2215 include_directories : includes,
2216 link_with : [libshared,
2217 libsystemd_journal_remote],
2218 dependencies : [threads,
2223 install_rpath : rootlibexecdir,
2225 install_dir : rootlibexecdir)
2227 s_j_gatewayd = executable('systemd-journal-gatewayd',
2228 systemd_journal_gatewayd_sources,
2229 include_directories : includes,
2230 link_with : [libshared],
2231 dependencies : [threads,
2236 install_rpath : rootlibexecdir,
2238 install_dir : rootlibexecdir)
2239 public_programs += [s_j_remote, s_j_gatewayd]
2242 if conf.get('ENABLE_COREDUMP') == 1
2243 executable('systemd-coredump',
2244 systemd_coredump_sources,
2245 include_directories : includes,
2246 link_with : [libshared],
2247 dependencies : [threads,
2252 install_rpath : rootlibexecdir,
2254 install_dir : rootlibexecdir)
2256 exe = executable('coredumpctl',
2257 coredumpctl_sources,
2258 include_directories : includes,
2259 link_with : [libshared],
2260 dependencies : [threads,
2263 install_rpath : rootlibexecdir,
2265 public_programs += exe
2268 if conf.get('ENABLE_PSTORE') == 1
2269 executable('systemd-pstore',
2270 systemd_pstore_sources,
2271 include_directories : includes,
2272 link_with : [libshared],
2273 dependencies : [threads,
2278 install_rpath : rootlibexecdir,
2280 install_dir : rootlibexecdir)
2283 if conf.get('ENABLE_BINFMT') == 1
2284 exe = executable('systemd-binfmt',
2285 'src/binfmt/binfmt.c',
2286 include_directories : includes,
2287 link_with : [libshared],
2288 install_rpath : rootlibexecdir,
2290 install_dir : rootlibexecdir)
2291 public_programs += exe
2293 meson.add_install_script('sh', '-c',
2294 mkdir_p.format(binfmtdir))
2295 meson.add_install_script('sh', '-c',
2296 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2299 if conf.get('ENABLE_VCONSOLE') == 1
2300 executable('systemd-vconsole-setup',
2301 'src/vconsole/vconsole-setup.c',
2302 include_directories : includes,
2303 link_with : [libshared],
2304 install_rpath : rootlibexecdir,
2306 install_dir : rootlibexecdir)
2309 if conf.get('ENABLE_RANDOMSEED') == 1
2310 executable('systemd-random-seed',
2311 'src/random-seed/random-seed.c',
2312 include_directories : includes,
2313 link_with : [libshared],
2314 install_rpath : rootlibexecdir,
2316 install_dir : rootlibexecdir)
2319 if conf.get('ENABLE_FIRSTBOOT') == 1
2320 executable('systemd-firstboot',
2321 'src/firstboot/firstboot.c',
2322 include_directories : includes,
2323 link_with : [libshared],
2324 dependencies : [libcrypt],
2325 install_rpath : rootlibexecdir,
2327 install_dir : rootbindir)
2330 executable('systemd-remount-fs',
2331 'src/remount-fs/remount-fs.c',
2332 include_directories : includes,
2333 link_with : [libcore_shared,
2335 install_rpath : rootlibexecdir,
2337 install_dir : rootlibexecdir)
2339 executable('systemd-machine-id-setup',
2340 'src/machine-id-setup/machine-id-setup-main.c',
2341 include_directories : includes,
2342 link_with : [libcore_shared,
2344 install_rpath : rootlibexecdir,
2346 install_dir : rootbindir)
2348 executable('systemd-fsck',
2350 include_directories : includes,
2351 link_with : [libshared],
2352 install_rpath : rootlibexecdir,
2354 install_dir : rootlibexecdir)
2356 executable('systemd-growfs',
2357 'src/partition/growfs.c',
2358 include_directories : includes,
2359 link_with : [libshared],
2360 dependencies : [libcryptsetup],
2361 install_rpath : rootlibexecdir,
2363 install_dir : rootlibexecdir)
2365 executable('systemd-makefs',
2366 'src/partition/makefs.c',
2367 include_directories : includes,
2368 link_with : [libshared],
2369 install_rpath : rootlibexecdir,
2371 install_dir : rootlibexecdir)
2373 executable('systemd-sleep',
2374 'src/sleep/sleep.c',
2375 include_directories : includes,
2376 link_with : [libshared],
2377 install_rpath : rootlibexecdir,
2379 install_dir : rootlibexecdir)
2381 install_data('src/sleep/sleep.conf',
2382 install_dir : pkgsysconfdir)
2384 exe = executable('systemd-sysctl',
2385 'src/sysctl/sysctl.c',
2386 include_directories : includes,
2387 link_with : [libshared],
2388 install_rpath : rootlibexecdir,
2390 install_dir : rootlibexecdir)
2391 public_programs += exe
2393 executable('systemd-ac-power',
2394 'src/ac-power/ac-power.c',
2395 include_directories : includes,
2396 link_with : [libshared],
2397 install_rpath : rootlibexecdir,
2399 install_dir : rootlibexecdir)
2401 exe = executable('systemd-detect-virt',
2402 'src/detect-virt/detect-virt.c',
2403 include_directories : includes,
2404 link_with : [libshared],
2405 install_rpath : rootlibexecdir,
2407 public_programs += exe
2409 exe = executable('systemd-delta',
2410 'src/delta/delta.c',
2411 include_directories : includes,
2412 link_with : [libshared],
2413 install_rpath : rootlibexecdir,
2415 public_programs += exe
2417 exe = executable('systemd-escape',
2418 'src/escape/escape.c',
2419 include_directories : includes,
2420 link_with : [libshared],
2421 install_rpath : rootlibexecdir,
2423 install_dir : rootbindir)
2424 public_programs += exe
2426 exe = executable('systemd-notify',
2427 'src/notify/notify.c',
2428 include_directories : includes,
2429 link_with : [libshared],
2430 install_rpath : rootlibexecdir,
2432 install_dir : rootbindir)
2433 public_programs += exe
2435 executable('systemd-volatile-root',
2436 'src/volatile-root/volatile-root.c',
2437 include_directories : includes,
2438 link_with : [libshared],
2439 install_rpath : rootlibexecdir,
2441 install_dir : rootlibexecdir)
2443 executable('systemd-cgroups-agent',
2444 'src/cgroups-agent/cgroups-agent.c',
2445 include_directories : includes,
2446 link_with : [libshared],
2447 install_rpath : rootlibexecdir,
2449 install_dir : rootlibexecdir)
2451 exe = executable('systemd-id128',
2452 'src/id128/id128.c',
2453 include_directories : includes,
2454 link_with : [libshared],
2455 install_rpath : rootlibexecdir,
2457 public_programs += exe
2459 exe = executable('systemd-path',
2461 include_directories : includes,
2462 link_with : [libshared],
2463 install_rpath : rootlibexecdir,
2465 public_programs += exe
2467 exe = executable('systemd-ask-password',
2468 'src/ask-password/ask-password.c',
2469 include_directories : includes,
2470 link_with : [libshared],
2471 install_rpath : rootlibexecdir,
2473 install_dir : rootbindir)
2474 public_programs += exe
2476 executable('systemd-reply-password',
2477 'src/reply-password/reply-password.c',
2478 include_directories : includes,
2479 link_with : [libshared],
2480 install_rpath : rootlibexecdir,
2482 install_dir : rootlibexecdir)
2484 exe = executable('systemd-tty-ask-password-agent',
2485 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2486 include_directories : includes,
2487 link_with : [libshared],
2488 install_rpath : rootlibexecdir,
2490 install_dir : rootbindir)
2491 public_programs += exe
2493 exe = executable('systemd-cgls',
2495 include_directories : includes,
2496 link_with : [libshared],
2497 install_rpath : rootlibexecdir,
2499 public_programs += exe
2501 exe = executable('systemd-cgtop',
2502 'src/cgtop/cgtop.c',
2503 include_directories : includes,
2504 link_with : [libshared],
2505 install_rpath : rootlibexecdir,
2507 public_programs += exe
2509 executable('systemd-initctl',
2510 'src/initctl/initctl.c',
2511 include_directories : includes,
2512 link_with : [libshared],
2513 install_rpath : rootlibexecdir,
2515 install_dir : rootlibexecdir)
2517 exe = executable('systemd-mount',
2518 'src/mount/mount-tool.c',
2519 include_directories : includes,
2520 link_with : [libshared],
2521 dependencies: [libmount],
2522 install_rpath : rootlibexecdir,
2524 public_programs += exe
2526 meson.add_install_script(meson_make_symlink,
2527 'systemd-mount', join_paths(bindir, 'systemd-umount'))
2529 exe = executable('systemd-run',
2531 include_directories : includes,
2532 link_with : [libshared],
2533 install_rpath : rootlibexecdir,
2535 public_programs += exe
2537 exe = executable('systemd-stdio-bridge',
2538 'src/stdio-bridge/stdio-bridge.c',
2539 include_directories : includes,
2540 link_with : [libshared],
2541 dependencies : [versiondep],
2542 install_rpath : rootlibexecdir,
2544 public_programs += exe
2546 exe = executable('busctl',
2547 'src/busctl/busctl.c',
2548 'src/busctl/busctl-introspect.c',
2549 'src/busctl/busctl-introspect.h',
2550 include_directories : includes,
2551 link_with : [libshared],
2552 install_rpath : rootlibexecdir,
2554 public_programs += exe
2556 if conf.get('ENABLE_SYSUSERS') == 1
2557 exe = executable('systemd-sysusers',
2558 'src/sysusers/sysusers.c',
2559 include_directories : includes,
2560 link_with : [libshared],
2561 install_rpath : rootlibexecdir,
2563 install_dir : rootbindir)
2564 public_programs += exe
2567 if conf.get('ENABLE_TMPFILES') == 1
2568 exe = executable('systemd-tmpfiles',
2569 'src/tmpfiles/tmpfiles.c',
2570 include_directories : includes,
2571 link_with : [libshared],
2572 dependencies : [libacl],
2573 install_rpath : rootlibexecdir,
2575 install_dir : rootbindir)
2576 public_programs += exe
2578 if want_tests != 'false'
2579 test('test-systemd-tmpfiles',
2580 test_systemd_tmpfiles_py,
2581 # https://github.com/mesonbuild/meson/issues/2681
2582 args : exe.full_path())
2586 if conf.get('ENABLE_HWDB') == 1
2587 exe = executable('systemd-hwdb',
2589 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2590 include_directories : includes,
2591 link_with : [libudev_static],
2592 install_rpath : udev_rpath,
2594 install_dir : rootbindir)
2595 public_programs += exe
2598 if conf.get('ENABLE_QUOTACHECK') == 1
2599 executable('systemd-quotacheck',
2600 'src/quotacheck/quotacheck.c',
2601 include_directories : includes,
2602 link_with : [libshared],
2603 install_rpath : rootlibexecdir,
2605 install_dir : rootlibexecdir)
2608 exe = executable('systemd-socket-proxyd',
2609 'src/socket-proxy/socket-proxyd.c',
2610 include_directories : includes,
2611 link_with : [libshared],
2612 dependencies : [threads],
2613 install_rpath : rootlibexecdir,
2615 install_dir : rootlibexecdir)
2616 public_programs += exe
2618 exe = executable('systemd-udevd',
2619 systemd_udevd_sources,
2620 include_directories : includes,
2621 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
2622 link_with : [libudev_core,
2625 dependencies : [versiondep,
2631 install_rpath : udev_rpath,
2633 install_dir : rootlibexecdir)
2634 public_programs += exe
2636 exe = executable('udevadm',
2638 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
2639 include_directories : includes,
2640 link_with : [libudev_core,
2643 dependencies : [versiondep,
2649 install_rpath : udev_rpath,
2651 install_dir : rootbindir)
2652 public_programs += exe
2654 executable('systemd-shutdown',
2655 systemd_shutdown_sources,
2656 include_directories : includes,
2657 link_with : [libcore_shared,
2659 dependencies : [libmount],
2660 install_rpath : rootlibexecdir,
2662 install_dir : rootlibexecdir)
2664 executable('systemd-update-done',
2665 'src/update-done/update-done.c',
2666 include_directories : includes,
2667 link_with : [libshared],
2668 install_rpath : rootlibexecdir,
2670 install_dir : rootlibexecdir)
2672 executable('systemd-update-utmp',
2673 'src/update-utmp/update-utmp.c',
2674 include_directories : includes,
2675 link_with : [libshared],
2676 dependencies : [libaudit],
2677 install_rpath : rootlibexecdir,
2679 install_dir : rootlibexecdir)
2681 if conf.get('HAVE_KMOD') == 1
2682 executable('systemd-modules-load',
2683 'src/modules-load/modules-load.c',
2684 include_directories : includes,
2685 link_with : [libshared],
2686 dependencies : [libkmod],
2687 install_rpath : rootlibexecdir,
2689 install_dir : rootlibexecdir)
2691 meson.add_install_script('sh', '-c',
2692 mkdir_p.format(modulesloaddir))
2693 meson.add_install_script('sh', '-c',
2694 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
2697 exe = executable('systemd-nspawn',
2698 systemd_nspawn_sources,
2699 include_directories : includes,
2700 link_with : [libcore_shared,
2703 dependencies : [libblkid,
2705 install_rpath : rootlibexecdir,
2707 public_programs += exe
2709 if conf.get('ENABLE_NETWORKD') == 1
2710 executable('systemd-networkd',
2711 systemd_networkd_sources,
2712 include_directories : network_include_dir,
2713 link_with : [libnetworkd_core,
2717 dependencies : [threads],
2718 install_rpath : rootlibexecdir,
2720 install_dir : rootlibexecdir)
2722 executable('systemd-networkd-wait-online',
2723 systemd_networkd_wait_online_sources,
2724 include_directories : includes,
2725 link_with : [libnetworkd_core,
2727 install_rpath : rootlibexecdir,
2729 install_dir : rootlibexecdir)
2731 exe = executable('networkctl',
2733 include_directories : includes,
2734 link_with : [libsystemd_network,
2736 install_rpath : rootlibexecdir,
2738 install_dir : rootbindir)
2739 public_programs += exe
2741 executable('systemd-network-generator',
2742 network_generator_sources,
2743 include_directories : includes,
2744 link_with : [libshared],
2745 install_rpath : rootlibexecdir,
2747 install_dir : rootlibexecdir)
2750 executable('systemd-sulogin-shell',
2751 ['src/sulogin-shell/sulogin-shell.c'],
2752 include_directories : includes,
2753 link_with : [libshared],
2754 install_rpath : rootlibexecdir,
2756 install_dir : rootlibexecdir)
2758 ############################################################
2761 'systemd-runtest.env',
2762 output : 'systemd-runtest.env',
2763 command : ['sh', '-c', '{ ' +
2764 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
2765 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
2767 build_by_default : true)
2769 foreach tuple : tests
2771 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2772 dependencies = tuple[2]
2773 condition = tuple.length() >= 4 ? tuple[3] : ''
2774 type = tuple.length() >= 5 ? tuple[4] : ''
2775 defs = tuple.length() >= 6 ? tuple[5] : []
2776 incs = tuple.length() >= 7 ? tuple[6] : includes
2779 name = sources[0].split('/')[-1].split('.')[0]
2780 if type.startswith('timeout=')
2781 timeout = type.split('=')[1].to_int()
2785 if condition == '' or conf.get(condition) == 1
2789 include_directories : incs,
2790 link_with : link_with,
2791 dependencies : [versiondep,
2794 build_by_default : want_tests != 'false',
2795 install_rpath : rootlibexecdir,
2796 install : install_tests,
2797 install_dir : join_paths(testsdir, type))
2800 message('@0@ is a manual test'.format(name))
2801 elif type == 'unsafe' and want_tests != 'unsafe'
2802 message('@0@ is an unsafe test'.format(name))
2803 elif want_tests != 'false'
2809 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2814 'test-libsystemd-sym',
2815 test_libsystemd_sym_c,
2816 include_directories : includes,
2817 link_with : [libsystemd],
2818 build_by_default : want_tests != 'false',
2819 install : install_tests,
2820 install_dir : testsdir)
2821 if want_tests != 'false'
2822 test('test-libsystemd-sym', exe)
2826 'test-libsystemd-static-sym',
2827 test_libsystemd_sym_c,
2828 include_directories : includes,
2829 link_with : [install_libsystemd_static],
2830 dependencies : [threads], # threads is already included in dependencies on the library,
2831 # but does not seem to get propagated. Add here as a work-around.
2832 build_by_default : want_tests != 'false' and static_libsystemd_pic,
2833 install : install_tests and static_libsystemd_pic,
2834 install_dir : testsdir)
2835 if want_tests != 'false' and static_libsystemd_pic
2836 test('test-libsystemd-static-sym', exe)
2842 include_directories : includes,
2843 c_args : '-Wno-deprecated-declarations',
2844 link_with : [libudev],
2845 build_by_default : want_tests != 'false',
2846 install : install_tests,
2847 install_dir : testsdir)
2848 if want_tests != 'false'
2849 test('test-libudev-sym', exe)
2853 'test-libudev-static-sym',
2855 include_directories : includes,
2856 c_args : '-Wno-deprecated-declarations',
2857 link_with : [install_libudev_static],
2858 build_by_default : want_tests != 'false' and static_libudev_pic,
2859 install : install_tests and static_libudev_pic,
2860 install_dir : testsdir)
2861 if want_tests != 'false' and static_libudev_pic
2862 test('test-libudev-static-sym', exe)
2865 ############################################################
2869 if get_option('tests') != 'false'
2870 foreach tuple : fuzzers
2872 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2873 dependencies = tuple[2]
2874 defs = tuple.length() >= 4 ? tuple[3] : []
2875 incs = tuple.length() >= 5 ? tuple[4] : includes
2878 if want_ossfuzz or want_fuzzbuzz
2879 dependencies += fuzzing_engine
2881 if fuzzing_engine.found()
2882 dependencies += fuzzing_engine
2884 link_args += ['-fsanitize=fuzzer']
2887 sources += 'src/fuzz/fuzz-main.c'
2891 sources += 'src/fuzz/fuzzer-entry-point.c'
2894 name = sources[0].split('/')[-1].split('.')[0]
2896 fuzzer_exes += executable(
2899 include_directories : [incs, include_directories('src/fuzz')],
2900 link_with : link_with,
2901 dependencies : dependencies,
2903 link_args: link_args,
2908 run_target('fuzzers',
2909 depends : fuzzer_exes,
2912 ############################################################
2914 make_directive_index_py = find_program('tools/make-directive-index.py')
2915 make_man_index_py = find_program('tools/make-man-index.py')
2916 xml_helper_py = find_program('tools/xml_helper.py')
2917 hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
2920 subdir('sysusers.d')
2921 subdir('tmpfiles.d')
2927 subdir('shell-completion/bash')
2928 subdir('shell-completion/zsh')
2929 subdir('docs/sysvinit')
2930 subdir('docs/var-log')
2932 install_subdir('factory/etc',
2933 install_dir : factorydir)
2935 install_data('xorg/50-systemd-user.sh',
2936 install_dir : xinitrcdir)
2937 install_data('modprobe.d/systemd.conf',
2938 install_dir : modprobedir)
2939 install_data('LICENSE.GPL2',
2943 'docs/CODING_STYLE.md',
2944 'docs/DISTRO_PORTING.md',
2945 'docs/ENVIRONMENT.md',
2947 'docs/TRANSIENT-SETTINGS.md',
2948 'docs/TRANSLATORS.md',
2949 'docs/UIDS-GIDS.md',
2950 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2951 install_dir : docdir)
2953 meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2954 meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2956 ############################################################
2958 meson_check_help = find_program('tools/meson-check-help.sh')
2960 foreach exec : public_programs
2961 name = exec.full_path().split('/')[-1]
2962 if want_tests != 'false'
2963 test('check-help-' + name,
2965 args : exec.full_path())
2969 ############################################################
2971 check_directives_sh = find_program('tools/check-directives.sh')
2973 if want_tests != 'false'
2974 test('check-directives',
2975 check_directives_sh,
2976 args : project_source_root)
2979 ############################################################
2981 # Enable tests for all supported sanitizers
2982 foreach tuple : sanitizers
2983 sanitizer = tuple[0]
2986 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
2988 foreach p : fuzz_regression_tests
2989 b = p.split('/')[-2]
2990 c = p.split('/')[-1]
2992 name = '@0@:@1@'.format(b, sanitizer)
2995 if want_tests == 'false'
2996 message('Not compiling @0@ because tests is set to false'.format(name))
2998 exe = custom_target(
3002 command : [env, 'ln', '-fs',
3003 join_paths(build.full_path(), b),
3005 build_by_default : true)
3007 message('Not compiling @0@ because slow-tests is set to false'.format(name))
3012 if want_tests != 'false' and slow_tests
3013 test('@0@:@1@:@2@'.format(b, c, sanitizer),
3015 args : [exe.full_path(),
3016 join_paths(project_source_root, p)])
3023 ############################################################
3026 all_files = run_command(
3028 ['--git-dir=@0@/.git'.format(project_source_root),
3031 all_files = files(all_files.stdout().split())
3036 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
3039 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
3043 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
3046 command : [meson_git_contrib_sh])
3050 git_head = run_command(
3052 ['--git-dir=@0@/.git'.format(project_source_root),
3053 'rev-parse', 'HEAD']).stdout().strip()
3054 git_head_short = run_command(
3056 ['--git-dir=@0@/.git'.format(project_source_root),
3057 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3061 command : ['git', 'archive',
3062 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
3064 '--prefix', 'systemd-@0@/'.format(git_head),
3068 ############################################################
3070 meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
3073 depends : [man, libsystemd, libudev],
3074 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
3076 ############################################################
3077 watchdog_opt = service_watchdog == '' ? 'disabled' : service_watchdog
3080 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3082 'split /usr: @0@'.format(split_usr),
3083 'split bin-sbin: @0@'.format(split_bin),
3084 'prefix directory: @0@'.format(prefixdir),
3085 'rootprefix directory: @0@'.format(rootprefixdir),
3086 'sysconf directory: @0@'.format(sysconfdir),
3087 'include directory: @0@'.format(includedir),
3088 'lib directory: @0@'.format(libdir),
3089 'rootlib directory: @0@'.format(rootlibdir),
3090 'SysV init scripts: @0@'.format(sysvinit_path),
3091 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
3092 'PAM modules directory: @0@'.format(pamlibdir),
3093 'PAM configuration directory: @0@'.format(pamconfdir),
3094 'RPM macros directory: @0@'.format(rpmmacrosdir),
3095 'modprobe.d directory: @0@'.format(modprobedir),
3096 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3097 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3098 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3099 'bash completions directory: @0@'.format(bashcompletiondir),
3100 'zsh completions directory: @0@'.format(zshcompletiondir),
3101 'extra start script: @0@'.format(get_option('rc-local')),
3102 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3103 get_option('debug-tty')),
3104 'TTY GID: @0@'.format(tty_gid),
3105 'users GID: @0@'.format(substs.get('USERS_GID')),
3106 'maximum system UID: @0@'.format(system_uid_max),
3107 'maximum system GID: @0@'.format(system_gid_max),
3108 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3109 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3110 'minimum container UID base: @0@'.format(container_uid_base_min),
3111 'maximum container UID base: @0@'.format(container_uid_base_max),
3112 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
3113 'render group access mode: @0@'.format(get_option('group-render-mode')),
3114 'certificate root directory: @0@'.format(get_option('certificate-root')),
3115 'support URL: @0@'.format(support_url),
3116 'nobody user name: @0@'.format(nobody_user),
3117 'nobody group name: @0@'.format(nobody_group),
3118 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
3119 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
3121 'default DNSSEC mode: @0@'.format(default_dnssec),
3122 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
3123 'default cgroup hierarchy: @0@'.format(default_hierarchy),
3124 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
3125 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
3126 'default locale: @0@'.format(default_locale),
3127 'default user $PATH: @0@'.format(
3128 default_user_path != '' ? default_user_path : '(same as system services)'),
3129 'systemd service watchdog: @0@'.format(watchdog_opt)]
3131 alt_dns_servers = '\n '.join(dns_servers.split(' '))
3132 alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3134 'default DNS servers: @0@'.format(alt_dns_servers),
3135 'default NTP servers: @0@'.format(alt_ntp_servers)]
3137 alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3138 '@@0@'.format(time_epoch)).stdout().strip()
3140 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3143 'static libsystemd: @0@'.format(static_libsystemd),
3144 'static libudev: @0@'.format(static_libudev)]
3147 # CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3148 # CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3149 # LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3151 if conf.get('ENABLE_EFI') == 1
3152 status += 'efi arch: @0@'.format(efi_arch)
3156 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
3157 'EFI CC @0@'.format(' '.join(efi_cc)),
3158 'EFI lib directory: @0@'.format(efi_libdir),
3159 'EFI lds directory: @0@'.format(efi_ldsdir),
3160 'EFI include directory: @0@'.format(efi_incdir)]
3212 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3213 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
3217 ['legacy pkla', install_polkit_pkla],
3219 ['gnu-efi', have_gnu_efi],
3232 ['man pages', want_man],
3233 ['html pages', want_html],
3234 ['man page indices', want_man and have_lxml],
3239 ['adm group', get_option('adm-group')],
3240 ['wheel group', get_option('wheel-group')],
3243 ['debug mmap cache'],
3245 ['valgrind', conf.get('VALGRIND') == 1],
3246 ['trace logging', conf.get('LOG_TRACE') == 1],
3247 ['link-udev-shared', get_option('link-udev-shared')],
3248 ['link-systemctl-shared', get_option('link-systemctl-shared')],
3251 if tuple.length() >= 2
3254 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3255 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
3256 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
3267 'enabled features: @0@'.format(', '.join(found)),
3269 'disabled features: @0@'.format(', '.join(missing)),
3271 message('\n '.join(status))
3273 if rootprefixdir != rootprefix_default
3275 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3276 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3277 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))