]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
Fix compilation without libcryptsetup (#17071)
[thirdparty/systemd.git] / meson.build
CommitLineData
3a726fcd 1# SPDX-License-Identifier: LGPL-2.1+
3a726fcd 2
5c23128d 3project('systemd', 'c',
3994922b 4 version : '246',
5c23128d
ZJS
5 license : 'LGPLv2+',
6 default_options: [
37efbbd8
ZJS
7 'c_std=gnu99',
8 'prefix=/usr',
9 'sysconfdir=/etc',
10 'localstatedir=/var',
827ca909 11 'warning_level=2',
5c23128d 12 ],
7a6397d2 13 meson_version : '>= 0.46',
5c23128d
ZJS
14 )
15
3994922b 16libsystemd_version = '0.29.0'
3b684be0 17libudev_version = '1.7.0'
56d50ab1 18
348b4437 19# We need the same data in two different formats, ugh!
5c23128d
ZJS
20# Also, for hysterical reasons, we use different variable
21# names, sometimes. Not all variables are included in every
22# set. Ugh, ugh, ugh!
23conf = configuration_data()
6ffeca8c
ZJS
24conf.set('PROJECT_VERSION', meson.project_version(),
25 description : 'Numerical project version (used where a simple number is expected)')
5c23128d
ZJS
26
27substs = configuration_data()
a67c318d 28substs.set('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
6ffeca8c
ZJS
29substs.set('PROJECT_VERSION', meson.project_version(),
30 description : 'Numerical project version (used where a simple number is expected)')
5c23128d 31
1485aacb
DC
32# This is to be used instead of meson.source_root(), as the latter will return
33# the wrong result when systemd is being built as a meson subproject
34project_source_root = meson.current_source_dir()
81e06775 35project_build_root = meson.current_build_dir()
a0b15b41 36relative_source_path = run_command('realpath',
81e06775 37 '--relative-to=@0@'.format(project_build_root),
a0b15b41
ZJS
38 project_source_root).stdout().strip()
39conf.set_quoted('RELATIVE_SOURCE_PATH', relative_source_path)
1485aacb 40
839bdf25
ZJS
41conf.set10('DEVELOPER_MODE', get_option('mode') == 'developer',
42 description : 'enable additional checks only suitable in development')
43
c09edc79
ZJS
44want_ossfuzz = get_option('oss-fuzz')
45want_libfuzzer = get_option('llvm-fuzz')
6b8d32ea
EV
46if want_ossfuzz + want_libfuzzer > 1
47 error('only one of oss-fuzz or llvm-fuzz can be specified')
c09edc79 48endif
87ac55a1
EV
49
50skip_deps = want_ossfuzz or want_libfuzzer
6b8d32ea 51fuzzer_build = want_ossfuzz or want_libfuzzer
c09edc79 52
5c23128d
ZJS
53#####################################################################
54
003c8879 55# Try to install the git pre-commit hook
e2d612a8
ZJS
56add_git_hook_sh = find_program('tools/add-git-hook.sh', required : false)
57if add_git_hook_sh.found()
58 git_hook = run_command(add_git_hook_sh)
59 if git_hook.returncode() == 0
60 message(git_hook.stdout().strip())
61 endif
003c8879
ZJS
62endif
63
64#####################################################################
65
2675413e
ZJS
66if get_option('split-usr') == 'auto'
67 split_usr = run_command('test', '-L', '/bin').returncode() != 0
68else
69 split_usr = get_option('split-usr') == 'true'
70endif
671f0f8d
ZJS
71conf.set10('HAVE_SPLIT_USR', split_usr,
72 description : '/usr/bin and /bin directories are separate')
9a8e64b0 73
157baa87
ZJS
74if get_option('split-bin') == 'auto'
75 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
76else
77 split_bin = get_option('split-bin') == 'true'
78endif
671f0f8d
ZJS
79conf.set10('HAVE_SPLIT_BIN', split_bin,
80 description : 'bin and sbin directories are separate')
157baa87 81
74344a17 82rootprefixdir = get_option('rootprefix')
74344a17
ZJS
83# Unusual rootprefixdir values are used by some distros
84# (see https://github.com/systemd/systemd/pull/7461).
ba7f4ae6 85rootprefix_default = split_usr ? '/' : '/usr'
9a8e64b0
ZJS
86if rootprefixdir == ''
87 rootprefixdir = rootprefix_default
74344a17 88endif
23bdba61 89rootprefixdir_noslash = rootprefixdir == '/' ? '' : rootprefixdir
5c23128d 90
8ef8f3d5
FB
91have_standalone_binaries = get_option('standalone-binaries')
92
5c23128d
ZJS
93sysvinit_path = get_option('sysvinit-path')
94sysvrcnd_path = get_option('sysvrcnd-path')
348b4437 95conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
349cc4a5 96 description : 'SysV init scripts and rcN.d links are supported')
5c23128d 97
cdf7ad38
NL
98if get_option('hibernate') and not get_option('initrd')
99 error('hibernate depends on initrd')
100endif
101
a8b627aa
LP
102conf.set10('BUMP_PROC_SYS_FS_FILE_MAX', get_option('bump-proc-sys-fs-file-max'))
103conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
09dad04c 104conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
a8b627aa 105
23bdba61 106# join_paths ignores the preceding arguments if an absolute component is
5c23128d
ZJS
107# encountered, so this should canonicalize various paths when they are
108# absolute or relative.
109prefixdir = get_option('prefix')
110if not prefixdir.startswith('/')
37efbbd8 111 error('Prefix is not absolute: "@0@"'.format(prefixdir))
5c23128d
ZJS
112endif
113bindir = join_paths(prefixdir, get_option('bindir'))
114libdir = join_paths(prefixdir, get_option('libdir'))
115sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
116includedir = join_paths(prefixdir, get_option('includedir'))
117datadir = join_paths(prefixdir, get_option('datadir'))
118localstatedir = join_paths('/', get_option('localstatedir'))
119
120rootbindir = join_paths(rootprefixdir, 'bin')
157baa87 121rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
5c23128d
ZJS
122rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
123
124rootlibdir = get_option('rootlibdir')
125if rootlibdir == ''
37efbbd8 126 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
5c23128d
ZJS
127endif
128
129# Dirs of external packages
a95696e3
BM
130pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
131pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
e17e5ba9
MB
132polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
133polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
134polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
e17e5ba9 135xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
8a38aac3
YW
136rpmmacrosdir = get_option('rpmmacrosdir')
137if rpmmacrosdir != 'no'
138 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
139endif
02fa054d 140modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
5c23128d
ZJS
141
142# Our own paths
e17e5ba9
MB
143pkgdatadir = join_paths(datadir, 'systemd')
144environmentdir = join_paths(prefixdir, 'lib/environment.d')
145pkgsysconfdir = join_paths(sysconfdir, 'systemd')
146userunitdir = join_paths(prefixdir, 'lib/systemd/user')
147userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
148tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
149sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
150sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
151binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
152modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
153networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
154pkgincludedir = join_paths(includedir, 'systemd')
155systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
156usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
157systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
158userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
159systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
160systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
161systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
162systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
163udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
e17e5ba9
MB
164udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
165udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
166catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
167kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
168factorydir = join_paths(datadir, 'factory')
e17e5ba9
MB
169bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
170testsdir = join_paths(prefixdir, 'lib/systemd/tests')
171systemdstatedir = join_paths(localstatedir, 'lib/systemd')
172catalogstatedir = join_paths(systemdstatedir, 'catalog')
173randomseeddir = join_paths(localstatedir, 'lib/systemd')
61d0578b 174profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
e5ea741c 175ntpservicelistdir = join_paths(rootprefixdir, 'lib/systemd/ntp-units.d')
5c23128d 176
75aaade1
TB
177docdir = get_option('docdir')
178if docdir == ''
179 docdir = join_paths(datadir, 'doc/systemd')
180endif
181
5c23128d
ZJS
182dbuspolicydir = get_option('dbuspolicydir')
183if dbuspolicydir == ''
37efbbd8 184 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
5c23128d
ZJS
185endif
186
187dbussessionservicedir = get_option('dbussessionservicedir')
188if dbussessionservicedir == ''
37efbbd8 189 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
5c23128d
ZJS
190endif
191
192dbussystemservicedir = get_option('dbussystemservicedir')
193if dbussystemservicedir == ''
37efbbd8 194 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
5c23128d
ZJS
195endif
196
197pamlibdir = get_option('pamlibdir')
198if pamlibdir == ''
37efbbd8 199 pamlibdir = join_paths(rootlibdir, 'security')
5c23128d
ZJS
200endif
201
202pamconfdir = get_option('pamconfdir')
203if pamconfdir == ''
bae66f4b 204 pamconfdir = join_paths(prefixdir, 'lib/pam.d')
5c23128d
ZJS
205endif
206
444d5863 207memory_accounting_default = get_option('memory-accounting-default')
36cf4507 208status_unit_format_default = get_option('status-unit-format-default')
444d5863 209
5c23128d 210conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
96d33e4a 211conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'system'))
5c23128d
ZJS
212conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
213conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
214conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
452d2dfd 215conf.set_quoted('RC_LOCAL_PATH', get_option('rc-local'))
96164a39 216
f7c5427c 217conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
96164a39 218
96d33e4a
ZJS
219conf.set_quoted('USER_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'user'))
220conf.set_quoted('USER_DATA_UNIT_DIR', userunitdir)
5c23128d 221conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
e17e5ba9
MB
222conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
223conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
224conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
225conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
da495a03 226conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
7f2806d5 227conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
e17e5ba9 228conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
e17e5ba9
MB
229conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
230conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
231conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
74344a17 232conf.set_quoted('ROOTPREFIX', rootprefixdir)
b612c26c 233conf.set_quoted('ROOTPREFIX_NOSLASH', rootprefixdir_noslash)
3131bfe3 234conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
e17e5ba9
MB
235conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
236conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
96d33e4a
ZJS
237conf.set_quoted('SYSTEM_GENERATOR_DIR', systemgeneratordir)
238conf.set_quoted('USER_GENERATOR_DIR', usergeneratordir)
239conf.set_quoted('SYSTEM_ENV_GENERATOR_DIR', systemenvgeneratordir)
240conf.set_quoted('USER_ENV_GENERATOR_DIR', userenvgeneratordir)
5c23128d
ZJS
241conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
242conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
e17e5ba9
MB
243conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
244conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
e2d41370 245conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
49cdae63 246conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
5c23128d 247conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
e17e5ba9 248conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
5c23128d
ZJS
249conf.set_quoted('LIBDIR', libdir)
250conf.set_quoted('ROOTLIBDIR', rootlibdir)
251conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
252conf.set_quoted('BOOTLIBDIR', bootlibdir)
e17e5ba9
MB
253conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
254conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
1d7579c4 255conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
e17e5ba9
MB
256conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
257conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
258conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
259conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
70a5db58 260conf.set_quoted('SYSTEMD_HOMEWORK_PATH', join_paths(rootlibexecdir, 'systemd-homework'))
d093b62c 261conf.set_quoted('SYSTEMD_USERWORK_PATH', join_paths(rootlibexecdir, 'systemd-userwork'))
30538ff1 262conf.set10('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default)
7f672e86 263conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
36cf4507 264conf.set('STATUS_UNIT_FORMAT_DEFAULT', 'STATUS_UNIT_FORMAT_' + status_unit_format_default.to_upper())
5c23128d 265
5c23128d 266substs.set('prefix', prefixdir)
1c2c7c6c 267substs.set('rootprefix', rootprefixdir)
23bdba61 268substs.set('rootprefix_noslash', rootprefixdir_noslash)
3131bfe3
ZJS
269substs.set('exec_prefix', prefixdir)
270substs.set('libdir', libdir)
271substs.set('rootlibdir', rootlibdir)
272substs.set('includedir', includedir)
1c2c7c6c 273substs.set('sysconfdir', sysconfdir)
3131bfe3
ZJS
274substs.set('bindir', bindir)
275substs.set('rootbindir', rootbindir)
5c23128d
ZJS
276substs.set('rootlibexecdir', rootlibexecdir)
277substs.set('systemunitdir', systemunitdir)
278substs.set('userunitdir', userunitdir)
279substs.set('systempresetdir', systempresetdir)
280substs.set('userpresetdir', userpresetdir)
281substs.set('udevhwdbdir', udevhwdbdir)
282substs.set('udevrulesdir', udevrulesdir)
3131bfe3 283substs.set('udevlibexecdir', udevlibexecdir)
424e80b4 284substs.set('environmentdir', environmentdir)
5c23128d
ZJS
285substs.set('catalogdir', catalogdir)
286substs.set('tmpfilesdir', tmpfilesdir)
287substs.set('sysusersdir', sysusersdir)
288substs.set('sysctldir', sysctldir)
289substs.set('binfmtdir', binfmtdir)
290substs.set('modulesloaddir', modulesloaddir)
424e80b4 291substs.set('modprobedir', modprobedir)
5c23128d
ZJS
292substs.set('systemgeneratordir', systemgeneratordir)
293substs.set('usergeneratordir', usergeneratordir)
294substs.set('systemenvgeneratordir', systemenvgeneratordir)
295substs.set('userenvgeneratordir', userenvgeneratordir)
296substs.set('systemshutdowndir', systemshutdowndir)
297substs.set('systemsleepdir', systemsleepdir)
2a4c156d 298substs.set('CERTIFICATEROOT', get_option('certificate-root'))
e17e5ba9 299substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
2a4c156d
ZJS
300substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
301substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
452d2dfd 302substs.set('RC_LOCAL_PATH', get_option('rc-local'))
444d5863 303substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
36cf4507 304substs.set('STATUS_UNIT_FORMAT_DEFAULT', status_unit_format_default)
c02b6ee4 305substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
81e06775 306substs.set('BUILD_ROOT', project_build_root)
5c23128d
ZJS
307
308#####################################################################
309
310cc = meson.get_compiler('c')
311pkgconfig = import('pkgconfig')
dd1e33c8 312check_compilation_sh = find_program('tools/check-compilation.sh')
b68dfb9e 313meson_build_sh = find_program('tools/meson-build.sh')
5c23128d 314
d3da291e
ZJS
315want_tests = get_option('tests')
316slow_tests = want_tests != 'false' and get_option('slow-tests')
c56463fd 317fuzz_tests = want_tests != 'false' and get_option('fuzz-tests')
d3da291e
ZJS
318install_tests = get_option('install-tests')
319
46e63a2a 320if add_languages('cpp', required : fuzzer_build)
3b2bdd62 321 # Used only for tests
e9f4f566
ZJS
322 cxx = meson.get_compiler('cpp')
323 cxx_cmd = ' '.join(cxx.cmd_array())
1b2acaa7 324else
9b0ca019 325 cxx_cmd = ''
94e2523b
ZJS
326endif
327
31e57a35 328if want_libfuzzer
9c5c4677
EV
329 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer', required : false)
330 if fuzzing_engine.found()
331 add_project_arguments('-fsanitize-coverage=trace-pc-guard,trace-cmp', language : 'c')
332 elif cc.has_argument('-fsanitize=fuzzer-no-link')
333 add_project_arguments('-fsanitize=fuzzer-no-link', language : 'c')
334 else
335 error('Looks like neither libFuzzer nor -fsanitize=fuzzer-no-link is supported')
336 endif
c09edc79 337elif want_ossfuzz
7db7d5b7
JR
338 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
339endif
340
e9f4f566
ZJS
341# Those generate many false positives, and we do not want to change the code to
342# avoid them.
343basic_disabled_warnings = [
344 '-Wno-unused-parameter',
345 '-Wno-missing-field-initializers',
346 '-Wno-unused-result',
347 '-Wno-format-signedness',
348]
e9f4f566 349
30a4ddff 350possible_cc_flags = [
30a4ddff
YW
351 '-Werror=undef',
352 '-Wlogical-op',
353 '-Wmissing-include-dirs',
354 '-Wold-style-definition',
355 '-Wpointer-arith',
356 '-Winit-self',
30a4ddff
YW
357 '-Wfloat-equal',
358 '-Wsuggest-attribute=noreturn',
359 '-Werror=missing-prototypes',
360 '-Werror=implicit-function-declaration',
361 '-Werror=missing-declarations',
362 '-Werror=return-type',
363 '-Werror=incompatible-pointer-types',
364 '-Werror=format=2',
365 '-Wstrict-prototypes',
366 '-Wredundant-decls',
367 '-Wmissing-noreturn',
368 '-Wimplicit-fallthrough=5',
369 '-Wshadow',
370 '-Wendif-labels',
371 '-Wstrict-aliasing=2',
372 '-Wwrite-strings',
373 '-Werror=overflow',
b05ecb8c 374 '-Werror=shift-count-overflow',
d28b67d4 375 '-Werror=shift-overflow=2',
30a4ddff
YW
376 '-Wdate-time',
377 '-Wnested-externs',
bf7efeb1
FB
378
379 # negative arguments are correctly detected starting with meson 0.46.
eed33623
ZJS
380 '-Wno-error=#warnings', # clang
381 '-Wno-string-plus-int', # clang
bf7efeb1 382
bf7efeb1
FB
383 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
384 # optimizations enabled, producing essentially false positives.
385 '-Wno-maybe-uninitialized',
386
30a4ddff
YW
387 '-ffast-math',
388 '-fno-common',
389 '-fdiagnostics-show-option',
390 '-fno-strict-aliasing',
391 '-fvisibility=hidden',
392 '-fstack-protector',
393 '-fstack-protector-strong',
394 '--param=ssp-buffer-size=4',
395]
396
397# --as-needed and --no-undefined are provided by meson by default,
398# run mesonconf to see what is enabled
399possible_link_flags = [
400 '-Wl,-z,relro',
401 '-Wl,-z,now',
68e70ac2 402 '-fstack-protector',
30a4ddff 403]
5c23128d 404
30a4ddff
YW
405if cc.get_id() == 'clang'
406 possible_cc_flags += [
407 '-Wno-typedef-redefinition',
408 '-Wno-gnu-variable-sized-type-not-at-end',
409 ]
410endif
411
412if get_option('buildtype') != 'debug'
413 possible_cc_flags += [
414 '-ffunction-sections',
415 '-fdata-sections',
416 ]
417
418 possible_link_flags += '-Wl,--gc-sections'
419endif
420
e9f4f566 421add_project_arguments(cc.get_supported_arguments(basic_disabled_warnings), language : 'c')
30a4ddff 422add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
7a6397d2 423add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
30a4ddff 424
94c0c5b7
ZJS
425have = cc.has_argument('-Wzero-length-bounds')
426conf.set10('HAVE_ZERO_LENGTH_BOUNDS', have)
427
9e70f2f8 428if cc.compiles('''
5c23128d
ZJS
429 #include <time.h>
430 #include <inttypes.h>
431 typedef uint64_t usec_t;
432 usec_t now(clockid_t clock);
433 int main(void) {
434 struct timespec now;
435 return 0;
436 }
38c1c96d 437''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
37efbbd8 438 add_project_arguments('-Werror=shadow', language : 'c')
5c23128d
ZJS
439endif
440
e9f4f566
ZJS
441if cxx_cmd != ''
442 add_project_arguments(cxx.get_supported_arguments(basic_disabled_warnings), language : 'cpp')
443endif
444
0e3cc902 445cpp = ' '.join(cc.cmd_array()) + ' -E'
9cc0e6e9 446
6695c200
ZJS
447has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
448
5c23128d
ZJS
449#####################################################################
450# compilation result tests
451
2c201c21
ZJS
452conf.set('_GNU_SOURCE', true)
453conf.set('__SANE_USERSPACE_TYPES__', true)
6695c200 454conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
5c23128d 455
5c23128d
ZJS
456conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
457conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
458conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
459conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
460
461decl_headers = '''
462#include <uchar.h>
4c2e1b39 463#include <sys/stat.h>
5c23128d 464'''
5c23128d
ZJS
465
466foreach decl : ['char16_t',
467 'char32_t',
4c2e1b39 468 'struct statx',
5c23128d 469 ]
2c201c21
ZJS
470
471 # We get -1 if the size cannot be determined
9c869d08
ZJS
472 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
473
474 if decl == 'struct statx'
475 if have
476 want_linux_stat_h = false
477 else
478 have = cc.sizeof(decl,
479 prefix : decl_headers + '#include <linux/stat.h>',
480 args : '-D_GNU_SOURCE') > 0
481 want_linux_stat_h = have
482 endif
483 endif
484
349cc4a5 485 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
5c23128d
ZJS
486endforeach
487
9c869d08 488conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
75720bff 489
5c23128d 490foreach ident : ['secure_getenv', '__secure_getenv']
349cc4a5 491 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
5c23128d
ZJS
492endforeach
493
494foreach ident : [
85db59b7 495 ['memfd_create', '''#include <sys/mman.h>'''],
7b961e40
LP
496 ['gettid', '''#include <sys/types.h>
497 #include <unistd.h>'''],
3c042add
LP
498 ['pivot_root', '''#include <stdlib.h>
499 #include <unistd.h>'''], # no known header declares pivot_root
85db59b7 500 ['name_to_handle_at', '''#include <sys/types.h>
37efbbd8
ZJS
501 #include <sys/stat.h>
502 #include <fcntl.h>'''],
85db59b7 503 ['setns', '''#include <sched.h>'''],
2acfd0ff
LP
504 ['renameat2', '''#include <stdio.h>
505 #include <fcntl.h>'''],
37efbbd8
ZJS
506 ['kcmp', '''#include <linux/kcmp.h>'''],
507 ['keyctl', '''#include <sys/types.h>
508 #include <keyutils.h>'''],
85db59b7 509 ['copy_file_range', '''#include <sys/syscall.h>
37efbbd8 510 #include <unistd.h>'''],
71e5200f
DM
511 ['bpf', '''#include <sys/syscall.h>
512 #include <unistd.h>'''],
4c2e1b39
LP
513 ['statx', '''#include <sys/types.h>
514 #include <sys/stat.h>
515 #include <unistd.h>'''],
aa484f35
ZJS
516 ['explicit_bzero' , '''#include <string.h>'''],
517 ['reallocarray', '''#include <malloc.h>'''],
b070c7c0
MS
518 ['set_mempolicy', '''#include <stdlib.h>
519 #include <unistd.h>'''],
520 ['get_mempolicy', '''#include <stdlib.h>
521 #include <unistd.h>'''],
5f152f43
LP
522 ['pidfd_send_signal', '''#include <stdlib.h>
523 #include <unistd.h>
524 #include <signal.h>
525 #include <sys/wait.h>'''],
526 ['pidfd_open', '''#include <stdlib.h>
527 #include <unistd.h>
528 #include <signal.h>
529 #include <sys/wait.h>'''],
5ead4e85
LP
530 ['rt_sigqueueinfo', '''#include <stdlib.h>
531 #include <unistd.h>
532 #include <signal.h>
533 #include <sys/wait.h>'''],
37efbbd8
ZJS
534]
535
85db59b7 536 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
4b9545f1 537 conf.set10('HAVE_' + ident[0].to_upper(), have)
5c23128d
ZJS
538endforeach
539
85db59b7 540if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
349cc4a5 541 conf.set10('USE_SYS_RANDOM_H', true)
4b9545f1 542 conf.set10('HAVE_GETRANDOM', true)
4984c8be
ZJS
543else
544 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
349cc4a5 545 conf.set10('USE_SYS_RANDOM_H', false)
4b9545f1 546 conf.set10('HAVE_GETRANDOM', have)
4984c8be
ZJS
547endif
548
5c23128d
ZJS
549#####################################################################
550
1485aacb
DC
551vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
552 project_source_root,
e1ca734e 553 get_option('version-tag'),
681bd2c5
ZJS
554 meson.project_version()]
555
d1084aa2
LT
556version_h = vcs_tag(
557 input : 'src/version/version.h.in',
558 output : 'version.h',
559 command: vcs_tagger)
560
561versiondep = declare_dependency(sources: version_h)
562
5c23128d 563sed = find_program('sed')
5c23128d 564awk = find_program('awk')
d730e2d1 565m4 = find_program('m4')
5c23128d 566stat = find_program('stat')
d68b342b 567git = find_program('git', required : false)
b68dfb9e 568env = find_program('env')
b1ffacb6 569perl = find_program('perl', required : false)
5c23128d 570
1485aacb 571meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
94e75a54 572mkdir_p = 'mkdir -p $DESTDIR/@0@'
d83f4f50
ZJS
573test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
574splash_bmp = files('test/splash.bmp')
94e75a54 575
5c23128d
ZJS
576# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
577# /usr/sbin, /sbin, and fall back to the default from middle column.
2fa645f1 578progs = [['quotaon', '/usr/sbin/quotaon' ],
5c23128d 579 ['quotacheck', '/usr/sbin/quotacheck' ],
5c23128d
ZJS
580 ['kmod', '/usr/bin/kmod' ],
581 ['kexec', '/usr/sbin/kexec' ],
582 ['sulogin', '/usr/sbin/sulogin' ],
583 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
584 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
585 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
586 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
6db90462 587 ['nologin', '/usr/sbin/nologin', ],
5c23128d
ZJS
588 ]
589foreach prog : progs
37efbbd8
ZJS
590 path = get_option(prog[0] + '-path')
591 if path != ''
592 message('Using @1@ for @0@'.format(prog[0], path))
593 else
594 exe = find_program(prog[0],
595 '/usr/sbin/' + prog[0],
596 '/sbin/' + prog[0],
597 required: false)
598 path = exe.found() ? exe.path() : prog[1]
599 endif
600 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
601 conf.set_quoted(name, path)
602 substs.set(name, path)
5c23128d
ZJS
603endforeach
604
2fa645f1
MG
605conf.set_quoted('TELINIT', get_option('telinit-path'))
606
1276a9f6 607if run_command('ln', '--relative', '--help').returncode() != 0
cd001016 608 error('ln does not support --relative (added in coreutils 8.16)')
1276a9f6 609endif
5c23128d
ZJS
610
611############################################################
612
613gperf = find_program('gperf')
614
615gperf_test_format = '''
616#include <string.h>
617const char * in_word_set(const char *, @0@);
618@1@
619'''
620gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
621gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
622gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
623if cc.compiles(gperf_test)
37efbbd8 624 gperf_len_type = 'size_t'
5c23128d 625else
37efbbd8
ZJS
626 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
627 if cc.compiles(gperf_test)
628 gperf_len_type = 'unsigned'
629 else
630 error('unable to determine gperf len type')
631 endif
5c23128d
ZJS
632endif
633message('gperf len type is @0@'.format(gperf_len_type))
37efbbd8
ZJS
634conf.set('GPERF_LEN_TYPE', gperf_len_type,
635 description : 'The type of gperf "len" parameter')
5c23128d
ZJS
636
637############################################################
638
639if not cc.has_header('sys/capability.h')
37efbbd8 640 error('POSIX caps headers not found')
5c23128d 641endif
9f555bba 642foreach header : ['crypt.h',
5c23128d
ZJS
643 'linux/memfd.h',
644 'linux/vm_sockets.h',
af8786b1 645 'sys/auxv.h',
5c23128d
ZJS
646 'valgrind/memcheck.h',
647 'valgrind/valgrind.h',
648 ]
2c201c21 649
349cc4a5
ZJS
650 conf.set10('HAVE_' + header.underscorify().to_upper(),
651 cc.has_header(header))
5c23128d
ZJS
652endforeach
653
654############################################################
655
eef4b800
ZJS
656fallback_hostname = get_option('fallback-hostname')
657if fallback_hostname == '' or fallback_hostname[0] == '.' or fallback_hostname[0] == '-'
658 error('Invalid fallback-hostname configuration')
659 # A more extensive test is done in test-hostname-util. Let's catch
660 # the most obvious errors here so we don't fail with an assert later.
661endif
662conf.set_quoted('FALLBACK_HOSTNAME', fallback_hostname)
663
5248e7e1
ZJS
664conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
665gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
5c23128d
ZJS
666
667default_hierarchy = get_option('default-hierarchy')
668conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
669 description : 'default cgroup hierarchy as string')
670if default_hierarchy == 'legacy'
37efbbd8 671 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
5c23128d 672elif default_hierarchy == 'hybrid'
37efbbd8 673 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
5c23128d 674else
37efbbd8 675 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
5c23128d
ZJS
676endif
677
06da5c63
ZJS
678default_net_naming_scheme = get_option('default-net-naming-scheme')
679conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
680
5c23128d 681time_epoch = get_option('time-epoch')
ac09340e 682if time_epoch == -1
0390b094
ZJS
683 time_epoch = run_command('sh', ['-c', 'echo "$SOURCE_DATE_EPOCH"']).stdout().strip()
684 if time_epoch == '' and git.found() and run_command('test', '-e', '.git').returncode() == 0
bd190899
DDM
685 # If we're in a git repository, use the creation time of the latest git tag.
686 latest_tag = run_command('git', 'describe', '--abbrev=0', '--tags').stdout().strip()
0390b094
ZJS
687 time_epoch = run_command('git', 'log', '-1', '--format=%at', latest_tag).stdout()
688 endif
689 if time_epoch == ''
6dbf352c 690 NEWS = files('NEWS')
0390b094 691 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
6dbf352c 692 endif
0390b094 693 time_epoch = time_epoch.to_int()
5c23128d 694endif
5c23128d
ZJS
695conf.set('TIME_EPOCH', time_epoch)
696
697system_uid_max = get_option('system-uid-max')
ac09340e 698if system_uid_max == -1
37efbbd8
ZJS
699 system_uid_max = run_command(
700 awk,
2f62cf35
CMOF
701 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
702 '/etc/login.defs').stdout().strip()
703 if system_uid_max == ''
ac09340e
YW
704 system_uid_max = 999
705 else
706 system_uid_max = system_uid_max.to_int()
2f62cf35 707 endif
5c23128d 708endif
5c23128d
ZJS
709conf.set('SYSTEM_UID_MAX', system_uid_max)
710substs.set('systemuidmax', system_uid_max)
5c23128d 711
5c23128d 712system_gid_max = get_option('system-gid-max')
ac09340e 713if system_gid_max == -1
37efbbd8
ZJS
714 system_gid_max = run_command(
715 awk,
2f62cf35
CMOF
716 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
717 '/etc/login.defs').stdout().strip()
718 if system_gid_max == ''
ac09340e
YW
719 system_gid_max = 999
720 else
721 system_gid_max = system_gid_max.to_int()
2f62cf35 722 endif
5c23128d 723endif
5c23128d
ZJS
724conf.set('SYSTEM_GID_MAX', system_gid_max)
725substs.set('systemgidmax', system_gid_max)
5c23128d 726
ac09340e
YW
727dynamic_uid_min = get_option('dynamic-uid-min')
728dynamic_uid_max = get_option('dynamic-uid-max')
87d5e4f2
LP
729conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
730conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
731substs.set('dynamicuidmin', dynamic_uid_min)
732substs.set('dynamicuidmax', dynamic_uid_max)
733
ac09340e
YW
734container_uid_base_min = get_option('container-uid-base-min')
735container_uid_base_max = get_option('container-uid-base-max')
87d5e4f2
LP
736conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
737conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
738substs.set('containeruidbasemin', container_uid_base_min)
739substs.set('containeruidbasemax', container_uid_base_max)
740
afde4574
LP
741nobody_user = get_option('nobody-user')
742nobody_group = get_option('nobody-group')
743
2484bff3
CQ
744if not meson.is_cross_build()
745 getent_result = run_command('getent', 'passwd', '65534')
746 if getent_result.returncode() == 0
747 name = getent_result.stdout().split(':')[0]
748 if name != nobody_user
749 warning('\n' +
750 '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) +
751 'Your build will result in an user table setup that is incompatible with the local system.')
752 endif
afde4574 753 endif
2484bff3
CQ
754 id_result = run_command('id', '-u', nobody_user)
755 if id_result.returncode() == 0
756 id = id_result.stdout().to_int()
757 if id != 65534
758 warning('\n' +
759 '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) +
760 'Your build will result in an user table setup that is incompatible with the local system.')
761 endif
afde4574 762 endif
afde4574 763
2484bff3
CQ
764 getent_result = run_command('getent', 'group', '65534')
765 if getent_result.returncode() == 0
766 name = getent_result.stdout().split(':')[0]
767 if name != nobody_group
768 warning('\n' +
769 '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) +
770 'Your build will result in an group table setup that is incompatible with the local system.')
771 endif
afde4574 772 endif
2484bff3
CQ
773 id_result = run_command('id', '-g', nobody_group)
774 if id_result.returncode() == 0
775 id = id_result.stdout().to_int()
776 if id != 65534
777 warning('\n' +
778 '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) +
779 'Your build will result in an group table setup that is incompatible with the local system.')
780 endif
afde4574
LP
781 endif
782endif
8374cc62 783if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
8ea9fad7
YW
784 warning('\n' +
785 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
786 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
8374cc62 787endif
afde4574
LP
788
789conf.set_quoted('NOBODY_USER_NAME', nobody_user)
790conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
60712021
YW
791substs.set('NOBODY_USER_NAME', nobody_user)
792substs.set('NOBODY_GROUP_NAME', nobody_group)
87d5e4f2 793
5c23128d
ZJS
794tty_gid = get_option('tty-gid')
795conf.set('TTY_GID', tty_gid)
2a4c156d 796substs.set('TTY_GID', tty_gid)
5c23128d 797
2aed63f4 798# Ensure provided GID argument is numeric, otherwise fall back to default assignment
ac09340e
YW
799users_gid = get_option('users-gid')
800substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
84786b8e 801
348b4437
YW
802conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
803conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
5c23128d 804
ace5e311
MB
805dev_kvm_mode = get_option('dev-kvm-mode')
806substs.set('DEV_KVM_MODE', dev_kvm_mode)
807conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
055a083a
MB
808group_render_mode = get_option('group-render-mode')
809substs.set('GROUP_RENDER_MODE', group_render_mode)
810conf.set10('GROUP_RENDER_UACCESS', group_render_mode != '0666')
5c23128d 811
2a4c156d
ZJS
812kill_user_processes = get_option('default-kill-user-processes')
813conf.set10('KILL_USER_PROCESSES', kill_user_processes)
c7f7e859 814conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
2a4c156d 815substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
5c23128d 816
829257d1
ZJS
817dns_servers = get_option('dns-servers')
818conf.set_quoted('DNS_SERVERS', dns_servers)
819substs.set('DNS_SERVERS', dns_servers)
5c23128d 820
829257d1
ZJS
821ntp_servers = get_option('ntp-servers')
822conf.set_quoted('NTP_SERVERS', ntp_servers)
823substs.set('NTP_SERVERS', ntp_servers)
5c23128d 824
8ca9e92c 825default_locale = get_option('default-locale')
03475e22 826if default_locale == ''
50f2fc77
JH
827 if not meson.is_cross_build()
828 choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
829 default_locale = run_command(choose_default_locale_sh).stdout().strip()
830 else
831 default_locale = 'C.UTF-8'
832 endif
03475e22 833endif
8ca9e92c
DR
834conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
835
5c23128d
ZJS
836conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
837
21d0dd5a 838service_watchdog = get_option('service-watchdog')
7bc9ea51
AZ
839watchdog_value = service_watchdog == '' ? '' : 'WatchdogSec=' + service_watchdog
840substs.set('SERVICE_WATCHDOG', watchdog_value)
21d0dd5a 841
3131bfe3
ZJS
842substs.set('SUSHELL', get_option('debug-shell'))
843substs.set('DEBUGTTY', get_option('debug-tty'))
93912e87 844conf.set_quoted('DEBUGTTY', get_option('debug-tty'))
3131bfe3 845
349cc4a5
ZJS
846enable_debug_hashmap = false
847enable_debug_mmap_cache = false
d6601495 848enable_debug_siphash = false
8f6b442a 849foreach name : get_option('debug-extra')
ad7aa760
YW
850 if name == 'hashmap'
851 enable_debug_hashmap = true
852 elif name == 'mmap-cache'
853 enable_debug_mmap_cache = true
d6601495
YW
854 elif name == 'siphash'
855 enable_debug_siphash = true
ad7aa760
YW
856 else
857 message('unknown debug option "@0@", ignoring'.format(name))
858 endif
859endforeach
349cc4a5
ZJS
860conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
861conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
d6601495 862conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
671677da 863
d18cb393 864conf.set10('VALGRIND', get_option('valgrind'))
fd5dec9a 865conf.set10('LOG_TRACE', get_option('log-trace'))
d18cb393 866
3602ca6f
ZJS
867default_user_path = get_option('user-path')
868if default_user_path != ''
869 conf.set_quoted('DEFAULT_USER_PATH', default_user_path)
5bc655cd
ZJS
870 default_user_path_display = default_user_path
871else
872 # meson 0.49 fails when ?: is used in .format()
873 default_user_path_display = '(same as system services)'
3602ca6f
ZJS
874endif
875
5bc655cd 876
5c23128d
ZJS
877#####################################################################
878
879threads = dependency('threads')
880librt = cc.find_library('rt')
881libm = cc.find_library('m')
882libdl = cc.find_library('dl')
883libcrypt = cc.find_library('crypt')
884
1800cc85
ZJS
885libcap = dependency('libcap', required : false)
886if not libcap.found()
887 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
888 libcap = cc.find_library('cap')
889endif
890
5c23128d 891libmount = dependency('mount',
c0b4b0f8 892 version : fuzzer_build ? '>= 0' : '>= 2.30')
5c23128d 893
e594a3b1
LP
894want_libfdisk = get_option('fdisk')
895if want_libfdisk != 'false' and not skip_deps
896 libfdisk = dependency('fdisk',
e71f5585 897 version : '>= 2.33',
e594a3b1
LP
898 required : want_libfdisk == 'true')
899 have = libfdisk.found()
900else
901 have = false
902 libfdisk = []
903endif
904conf.set10('HAVE_LIBFDISK', have)
905
70a5db58
LP
906want_pwquality = get_option('pwquality')
907if want_pwquality != 'false' and not skip_deps
908 libpwquality = dependency('pwquality', required : want_pwquality == 'true')
909 have = libpwquality.found()
910else
911 have = false
912 libpwquality = []
913endif
914conf.set10('HAVE_PWQUALITY', have)
915
5c23128d 916want_seccomp = get_option('seccomp')
87ac55a1 917if want_seccomp != 'false' and not skip_deps
37efbbd8 918 libseccomp = dependency('libseccomp',
9f0e9c01 919 version : '>= 2.3.1',
37efbbd8 920 required : want_seccomp == 'true')
349cc4a5 921 have = libseccomp.found()
5c23128d 922else
349cc4a5 923 have = false
37efbbd8 924 libseccomp = []
5c23128d 925endif
349cc4a5 926conf.set10('HAVE_SECCOMP', have)
5c23128d
ZJS
927
928want_selinux = get_option('selinux')
87ac55a1 929if want_selinux != 'false' and not skip_deps
37efbbd8
ZJS
930 libselinux = dependency('libselinux',
931 version : '>= 2.1.9',
932 required : want_selinux == 'true')
349cc4a5 933 have = libselinux.found()
5c23128d 934else
349cc4a5 935 have = false
37efbbd8 936 libselinux = []
5c23128d 937endif
349cc4a5 938conf.set10('HAVE_SELINUX', have)
5c23128d
ZJS
939
940want_apparmor = get_option('apparmor')
87ac55a1 941if want_apparmor != 'false' and not skip_deps
37efbbd8 942 libapparmor = dependency('libapparmor',
2ffadd3c 943 version : '>= 2.13',
37efbbd8 944 required : want_apparmor == 'true')
349cc4a5 945 have = libapparmor.found()
5c23128d 946else
349cc4a5 947 have = false
37efbbd8 948 libapparmor = []
5c23128d 949endif
349cc4a5 950conf.set10('HAVE_APPARMOR', have)
5c23128d 951
5c23128d
ZJS
952smack_run_label = get_option('smack-run-label')
953if smack_run_label != ''
37efbbd8 954 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
5c23128d
ZJS
955endif
956
3ca0cb73
ZJS
957want_polkit = get_option('polkit')
958install_polkit = false
959install_polkit_pkla = false
87ac55a1 960if want_polkit != 'false' and not skip_deps
37efbbd8 961 install_polkit = true
3ca0cb73 962
37efbbd8
ZJS
963 libpolkit = dependency('polkit-gobject-1',
964 required : false)
965 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
966 message('Old polkit detected, will install pkla files')
967 install_polkit_pkla = true
968 endif
3ca0cb73 969endif
349cc4a5 970conf.set10('ENABLE_POLKIT', install_polkit)
3ca0cb73 971
36f0387e 972want_acl = get_option('acl')
87ac55a1 973if want_acl != 'false' and not skip_deps
36f0387e 974 libacl = cc.find_library('acl', required : want_acl == 'true')
349cc4a5 975 have = libacl.found()
36f0387e 976else
349cc4a5 977 have = false
36f0387e
ZJS
978 libacl = []
979endif
349cc4a5 980conf.set10('HAVE_ACL', have)
36f0387e 981
5c23128d 982want_audit = get_option('audit')
87ac55a1 983if want_audit != 'false' and not skip_deps
37efbbd8 984 libaudit = dependency('audit', required : want_audit == 'true')
349cc4a5 985 have = libaudit.found()
5c23128d 986else
349cc4a5 987 have = false
37efbbd8 988 libaudit = []
5c23128d 989endif
349cc4a5 990conf.set10('HAVE_AUDIT', have)
5c23128d
ZJS
991
992want_blkid = get_option('blkid')
87ac55a1 993if want_blkid != 'false' and not skip_deps
37efbbd8 994 libblkid = dependency('blkid', required : want_blkid == 'true')
349cc4a5 995 have = libblkid.found()
5c23128d 996else
349cc4a5 997 have = false
37efbbd8 998 libblkid = []
5c23128d 999endif
349cc4a5 1000conf.set10('HAVE_BLKID', have)
5c23128d
ZJS
1001
1002want_kmod = get_option('kmod')
87ac55a1 1003if want_kmod != 'false' and not skip_deps
37efbbd8
ZJS
1004 libkmod = dependency('libkmod',
1005 version : '>= 15',
1006 required : want_kmod == 'true')
349cc4a5 1007 have = libkmod.found()
5c23128d 1008else
349cc4a5 1009 have = false
37efbbd8 1010 libkmod = []
5c23128d 1011endif
349cc4a5 1012conf.set10('HAVE_KMOD', have)
5c23128d
ZJS
1013
1014want_pam = get_option('pam')
87ac55a1 1015if want_pam != 'false' and not skip_deps
37efbbd8
ZJS
1016 libpam = cc.find_library('pam', required : want_pam == 'true')
1017 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
349cc4a5 1018 have = libpam.found() and libpam_misc.found()
5c23128d 1019else
349cc4a5 1020 have = false
37efbbd8
ZJS
1021 libpam = []
1022 libpam_misc = []
5c23128d 1023endif
349cc4a5 1024conf.set10('HAVE_PAM', have)
5c23128d
ZJS
1025
1026want_microhttpd = get_option('microhttpd')
87ac55a1 1027if want_microhttpd != 'false' and not skip_deps
37efbbd8
ZJS
1028 libmicrohttpd = dependency('libmicrohttpd',
1029 version : '>= 0.9.33',
1030 required : want_microhttpd == 'true')
349cc4a5 1031 have = libmicrohttpd.found()
5c23128d 1032else
349cc4a5 1033 have = false
37efbbd8 1034 libmicrohttpd = []
5c23128d 1035endif
349cc4a5 1036conf.set10('HAVE_MICROHTTPD', have)
5c23128d
ZJS
1037
1038want_libcryptsetup = get_option('libcryptsetup')
87ac55a1 1039if want_libcryptsetup != 'false' and not skip_deps
37efbbd8 1040 libcryptsetup = dependency('libcryptsetup',
d90874b4 1041 version : '>= 2.0.1',
37efbbd8 1042 required : want_libcryptsetup == 'true')
349cc4a5 1043 have = libcryptsetup.found()
70a5db58
LP
1044
1045 conf.set10('HAVE_CRYPT_SET_METADATA_SIZE',
1046 have and cc.has_function('crypt_set_metadata_size', dependencies : libcryptsetup))
c2923fdc
LB
1047 conf.set10('HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY',
1048 have and cc.has_function('crypt_activate_by_signed_key', dependencies : libcryptsetup))
5c23128d 1049else
349cc4a5 1050 have = false
37efbbd8 1051 libcryptsetup = []
5c23128d 1052endif
349cc4a5 1053conf.set10('HAVE_LIBCRYPTSETUP', have)
5c23128d
ZJS
1054
1055want_libcurl = get_option('libcurl')
87ac55a1 1056if want_libcurl != 'false' and not skip_deps
37efbbd8
ZJS
1057 libcurl = dependency('libcurl',
1058 version : '>= 7.32.0',
1059 required : want_libcurl == 'true')
349cc4a5 1060 have = libcurl.found()
5c23128d 1061else
349cc4a5 1062 have = false
37efbbd8 1063 libcurl = []
5c23128d 1064endif
349cc4a5 1065conf.set10('HAVE_LIBCURL', have)
5c23128d
ZJS
1066
1067want_libidn = get_option('libidn')
87057e24
ZJS
1068want_libidn2 = get_option('libidn2')
1069if want_libidn == 'true' and want_libidn2 == 'true'
1070 error('libidn and libidn2 cannot be requested simultaneously')
1071endif
1072
1b931399
YW
1073if want_libidn2 != 'false' and want_libidn != 'true' and not skip_deps
1074 libidn = dependency('libidn2',
1075 required : want_libidn2 == 'true')
349cc4a5 1076 have = libidn.found()
87057e24 1077else
349cc4a5 1078 have = false
87057e24
ZJS
1079 libidn = []
1080endif
1b931399
YW
1081conf.set10('HAVE_LIBIDN2', have)
1082if not have and want_libidn != 'false' and not skip_deps
7f7ab228 1083 # libidn is used for both libidn and libidn2 objects
1b931399
YW
1084 libidn = dependency('libidn',
1085 required : want_libidn == 'true')
349cc4a5
ZJS
1086 have = libidn.found()
1087else
1088 have = false
5c23128d 1089endif
1b931399 1090conf.set10('HAVE_LIBIDN', have)
5c23128d
ZJS
1091
1092want_libiptc = get_option('libiptc')
87ac55a1 1093if want_libiptc != 'false' and not skip_deps
37efbbd8
ZJS
1094 libiptc = dependency('libiptc',
1095 required : want_libiptc == 'true')
349cc4a5 1096 have = libiptc.found()
5c23128d 1097else
349cc4a5 1098 have = false
37efbbd8 1099 libiptc = []
5c23128d 1100endif
349cc4a5 1101conf.set10('HAVE_LIBIPTC', have)
5c23128d
ZJS
1102
1103want_qrencode = get_option('qrencode')
87ac55a1 1104if want_qrencode != 'false' and not skip_deps
37efbbd8
ZJS
1105 libqrencode = dependency('libqrencode',
1106 required : want_qrencode == 'true')
349cc4a5 1107 have = libqrencode.found()
5c23128d 1108else
349cc4a5 1109 have = false
37efbbd8 1110 libqrencode = []
5c23128d 1111endif
349cc4a5 1112conf.set10('HAVE_QRENCODE', have)
5c23128d 1113
a44fb601 1114want_gcrypt = get_option('gcrypt')
87ac55a1 1115if want_gcrypt != 'false' and not skip_deps
a44fb601
ZJS
1116 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1117 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
349cc4a5 1118 have = libgcrypt.found() and libgpg_error.found()
a44fb601 1119else
349cc4a5
ZJS
1120 have = false
1121endif
1122if not have
1123 # link to neither of the libs if one is not found
a44fb601
ZJS
1124 libgcrypt = []
1125 libgpg_error = []
1126endif
349cc4a5 1127conf.set10('HAVE_GCRYPT', have)
a44fb601 1128
5c23128d 1129want_gnutls = get_option('gnutls')
87ac55a1 1130if want_gnutls != 'false' and not skip_deps
37efbbd8
ZJS
1131 libgnutls = dependency('gnutls',
1132 version : '>= 3.1.4',
1133 required : want_gnutls == 'true')
349cc4a5 1134 have = libgnutls.found()
5c23128d 1135else
349cc4a5 1136 have = false
37efbbd8 1137 libgnutls = []
5c23128d 1138endif
349cc4a5 1139conf.set10('HAVE_GNUTLS', have)
5c23128d 1140
096cbdce 1141want_openssl = get_option('openssl')
87ac55a1 1142if want_openssl != 'false' and not skip_deps
096cbdce
IT
1143 libopenssl = dependency('openssl',
1144 version : '>= 1.1.0',
1145 required : want_openssl == 'true')
1146 have = libopenssl.found()
1147else
1148 have = false
1149 libopenssl = []
1150endif
1151conf.set10('HAVE_OPENSSL', have)
1152
839fddbe
LP
1153want_p11kit = get_option('p11kit')
1154if want_p11kit != 'false' and not skip_deps
1155 libp11kit = dependency('p11-kit-1',
6164ec4c
ZJS
1156 version : '>= 0.23.3',
1157 required : want_p11kit == 'true')
839fddbe
LP
1158 have = libp11kit.found()
1159else
1160 have = false
1161 libp11kit = []
1162endif
1163conf.set10('HAVE_P11KIT', have)
1164
af4fbd46
LP
1165want_libfido2 = get_option('libfido2')
1166if want_libfido2 != 'false' and not skip_deps
1167 libfido2 = dependency('libfido2',
1168 required : want_libfido2 == 'true')
1169 have = libfido2.found()
1170else
1171 have = false
1172 libfido2 = []
1173endif
1174conf.set10('HAVE_LIBFIDO2', have)
1175
5c23128d 1176want_elfutils = get_option('elfutils')
87ac55a1 1177if want_elfutils != 'false' and not skip_deps
37efbbd8
ZJS
1178 libdw = dependency('libdw',
1179 required : want_elfutils == 'true')
349cc4a5 1180 have = libdw.found()
5c23128d 1181else
349cc4a5 1182 have = false
37efbbd8 1183 libdw = []
5c23128d 1184endif
349cc4a5 1185conf.set10('HAVE_ELFUTILS', have)
5c23128d
ZJS
1186
1187want_zlib = get_option('zlib')
87ac55a1 1188if want_zlib != 'false' and not skip_deps
37efbbd8
ZJS
1189 libz = dependency('zlib',
1190 required : want_zlib == 'true')
349cc4a5 1191 have = libz.found()
5c23128d 1192else
349cc4a5 1193 have = false
37efbbd8 1194 libz = []
5c23128d 1195endif
349cc4a5 1196conf.set10('HAVE_ZLIB', have)
5c23128d
ZJS
1197
1198want_bzip2 = get_option('bzip2')
87ac55a1 1199if want_bzip2 != 'false' and not skip_deps
37efbbd8
ZJS
1200 libbzip2 = cc.find_library('bz2',
1201 required : want_bzip2 == 'true')
349cc4a5 1202 have = libbzip2.found()
5c23128d 1203else
349cc4a5 1204 have = false
37efbbd8 1205 libbzip2 = []
5c23128d 1206endif
349cc4a5 1207conf.set10('HAVE_BZIP2', have)
5c23128d
ZJS
1208
1209want_xz = get_option('xz')
87ac55a1 1210if want_xz != 'false' and not skip_deps
37efbbd8
ZJS
1211 libxz = dependency('liblzma',
1212 required : want_xz == 'true')
d80b051c 1213 have_xz = libxz.found()
5c23128d 1214else
d80b051c 1215 have_xz = false
37efbbd8 1216 libxz = []
5c23128d 1217endif
d80b051c 1218conf.set10('HAVE_XZ', have_xz)
5c23128d
ZJS
1219
1220want_lz4 = get_option('lz4')
87ac55a1 1221if want_lz4 != 'false' and not skip_deps
37efbbd8 1222 liblz4 = dependency('liblz4',
e0a1d4b0 1223 version : '>= 1.3.0',
37efbbd8 1224 required : want_lz4 == 'true')
d80b051c 1225 have_lz4 = liblz4.found()
5c23128d 1226else
d80b051c 1227 have_lz4 = false
37efbbd8 1228 liblz4 = []
5c23128d 1229endif
d80b051c 1230conf.set10('HAVE_LZ4', have_lz4)
5c23128d 1231
ef5924aa
NL
1232want_zstd = get_option('zstd')
1233if want_zstd != 'false' and not skip_deps
1234 libzstd = dependency('libzstd',
1235 required : want_zstd == 'true',
1236 version : '>= 1.4.0')
d80b051c 1237 have_zstd = libzstd.found()
ef5924aa 1238else
d80b051c 1239 have_zstd = false
ef5924aa
NL
1240 libzstd = []
1241endif
d80b051c
LP
1242conf.set10('HAVE_ZSTD', have_zstd)
1243
1244conf.set10('HAVE_COMPRESSION', have_xz or have_lz4 or have_zstd)
ef5924aa 1245
a44fb601 1246want_xkbcommon = get_option('xkbcommon')
87ac55a1 1247if want_xkbcommon != 'false' and not skip_deps
a44fb601
ZJS
1248 libxkbcommon = dependency('xkbcommon',
1249 version : '>= 0.3.0',
1250 required : want_xkbcommon == 'true')
349cc4a5 1251 have = libxkbcommon.found()
a44fb601 1252else
349cc4a5 1253 have = false
a44fb601
ZJS
1254 libxkbcommon = []
1255endif
349cc4a5 1256conf.set10('HAVE_XKBCOMMON', have)
a44fb601 1257
c4c978a0
ZJS
1258want_pcre2 = get_option('pcre2')
1259if want_pcre2 != 'false'
1260 libpcre2 = dependency('libpcre2-8',
1261 required : want_pcre2 == 'true')
1262 have = libpcre2.found()
1263else
1264 have = false
1265 libpcre2 = []
1266endif
1267conf.set10('HAVE_PCRE2', have)
1268
69e96427 1269want_glib = get_option('glib')
87ac55a1 1270if want_glib != 'false' and not skip_deps
37efbbd8
ZJS
1271 libglib = dependency('glib-2.0',
1272 version : '>= 2.22.0',
1273 required : want_glib == 'true')
1274 libgobject = dependency('gobject-2.0',
1275 version : '>= 2.22.0',
1276 required : want_glib == 'true')
1277 libgio = dependency('gio-2.0',
1278 required : want_glib == 'true')
2c201c21 1279 have = libglib.found() and libgobject.found() and libgio.found()
69e96427 1280else
349cc4a5 1281 have = false
37efbbd8
ZJS
1282 libglib = []
1283 libgobject = []
1284 libgio = []
69e96427 1285endif
349cc4a5 1286conf.set10('HAVE_GLIB', have)
69e96427
ZJS
1287
1288want_dbus = get_option('dbus')
87ac55a1 1289if want_dbus != 'false' and not skip_deps
37efbbd8
ZJS
1290 libdbus = dependency('dbus-1',
1291 version : '>= 1.3.2',
1292 required : want_dbus == 'true')
349cc4a5 1293 have = libdbus.found()
69e96427 1294else
349cc4a5 1295 have = false
37efbbd8 1296 libdbus = []
69e96427 1297endif
349cc4a5 1298conf.set10('HAVE_DBUS', have)
69e96427 1299
42303dcb 1300default_dnssec = get_option('default-dnssec')
87ac55a1 1301if skip_deps
b4081f3e
JR
1302 default_dnssec = 'no'
1303endif
349cc4a5 1304if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
42303dcb
YW
1305 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1306 default_dnssec = 'no'
1307endif
1308conf.set('DEFAULT_DNSSEC_MODE',
1309 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1310substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1311
56ddbf10
YW
1312dns_over_tls = get_option('dns-over-tls')
1313if dns_over_tls != 'false'
096cbdce
IT
1314 if dns_over_tls == 'openssl'
1315 have_gnutls = false
1316 else
38e053c5 1317 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.6.0'))
096cbdce
IT
1318 if dns_over_tls == 'gnutls' and not have_gnutls
1319 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1320 endif
56ddbf10 1321 endif
096cbdce
IT
1322 if dns_over_tls == 'gnutls' or have_gnutls
1323 have_openssl = false
1324 else
1325 have_openssl = conf.get('HAVE_OPENSSL') == 1
1326 if dns_over_tls != 'auto' and not have_openssl
1327 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
b349bc59 1328 error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
096cbdce
IT
1329 endif
1330 endif
1331 have = have_gnutls or have_openssl
56ddbf10 1332else
be5536a6
MO
1333 have = false
1334 have_gnutls = false
1335 have_openssl = false
56ddbf10
YW
1336endif
1337conf.set10('ENABLE_DNS_OVER_TLS', have)
096cbdce
IT
1338conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1339conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
56ddbf10 1340
c9299be2 1341default_dns_over_tls = get_option('default-dns-over-tls')
87ac55a1 1342if skip_deps
c9299be2 1343 default_dns_over_tls = 'no'
5d67a7ae 1344endif
56ddbf10 1345if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
4310bfc2 1346 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.')
c9299be2 1347 default_dns_over_tls = 'no'
5d67a7ae 1348endif
c9299be2
IT
1349conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1350 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1351substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
5d67a7ae 1352
3614df05
ZJS
1353default_mdns = get_option('default-mdns')
1354conf.set('DEFAULT_MDNS_MODE',
1355 'RESOLVE_SUPPORT_' + default_mdns.to_upper())
1356substs.set('DEFAULT_MDNS_MODE', default_mdns)
1357
1358default_llmnr = get_option('default-llmnr')
1359conf.set('DEFAULT_LLMNR_MODE',
1360 'RESOLVE_SUPPORT_' + default_llmnr.to_upper())
1361substs.set('DEFAULT_LLMNR_MODE', default_llmnr)
1362
e594a3b1
LP
1363want_repart = get_option('repart')
1364if want_repart != 'false'
1365 have = (conf.get('HAVE_OPENSSL') == 1 and
1366 conf.get('HAVE_LIBFDISK') == 1)
1367 if want_repart == 'true' and not have
1368 error('repart support was requested, but dependencies are not available')
1369 endif
1370else
1371 have = false
1372endif
1373conf.set10('ENABLE_REPART', have)
1374
5c23128d 1375want_importd = get_option('importd')
4390be30 1376if want_importd != 'false'
349cc4a5
ZJS
1377 have = (conf.get('HAVE_LIBCURL') == 1 and
1378 conf.get('HAVE_ZLIB') == 1 and
349cc4a5
ZJS
1379 conf.get('HAVE_XZ') == 1 and
1380 conf.get('HAVE_GCRYPT') == 1)
1381 if want_importd == 'true' and not have
37efbbd8
ZJS
1382 error('importd support was requested, but dependencies are not available')
1383 endif
349cc4a5
ZJS
1384else
1385 have = false
5c23128d 1386endif
349cc4a5 1387conf.set10('ENABLE_IMPORTD', have)
5c23128d 1388
70a5db58
LP
1389want_homed = get_option('homed')
1390if want_homed != 'false'
1391 have = (conf.get('HAVE_OPENSSL') == 1 and
1392 conf.get('HAVE_LIBFDISK') == 1 and
1393 conf.get('HAVE_LIBCRYPTSETUP') == 1)
1394 if want_homed == 'true' and not have
1395 error('homed support was requested, but dependencies are not available')
1396 endif
1397else
1398 have = false
1399endif
1400conf.set10('ENABLE_HOMED', have)
1401
af06ddf5
YW
1402have = have and conf.get('HAVE_PAM') == 1
1403conf.set10('ENABLE_PAM_HOME', have)
1404
5c23128d 1405want_remote = get_option('remote')
4390be30 1406if want_remote != 'false'
349cc4a5
ZJS
1407 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1408 conf.get('HAVE_LIBCURL') == 1]
37efbbd8
ZJS
1409 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1410 # it's possible to build one without the other. Complain only if
5238e957 1411 # support was explicitly requested. The auxiliary files like sysusers
37efbbd8
ZJS
1412 # config should be installed when any of the programs are built.
1413 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1414 error('remote support was requested, but dependencies are not available')
1415 endif
349cc4a5
ZJS
1416 have = have_deps[0] or have_deps[1]
1417else
1418 have = false
5c23128d 1419endif
349cc4a5 1420conf.set10('ENABLE_REMOTE', have)
5c23128d 1421
b3259a6e
ZJS
1422foreach term : ['analyze',
1423 'backlight',
a9149d87
ZJS
1424 'binfmt',
1425 'coredump',
b3259a6e
ZJS
1426 'efi',
1427 'environment-d',
1428 'firstboot',
1429 'gshadow',
1430 'hibernate',
a9149d87 1431 'hostnamed',
b3259a6e
ZJS
1432 'hwdb',
1433 'idn',
1434 'ima',
1435 'initrd',
1436 'ldconfig',
a9149d87 1437 'localed',
b3259a6e 1438 'logind',
a9149d87
ZJS
1439 'machined',
1440 'networkd',
b3259a6e
ZJS
1441 'nss-myhostname',
1442 'nss-systemd',
1443 'portabled',
1444 'pstore',
a9149d87 1445 'quotacheck',
b3259a6e
ZJS
1446 'randomseed',
1447 'resolve',
1448 'rfkill',
1449 'smack',
a9149d87 1450 'sysusers',
b3259a6e
ZJS
1451 'timedated',
1452 'timesyncd',
a9149d87 1453 'tmpfiles',
a9149d87 1454 'tpm',
b3259a6e
ZJS
1455 'userdb',
1456 'utmp',
1457 'vconsole',
1458 'xdg-autostart']
a9149d87
ZJS
1459 have = get_option(term)
1460 name = 'ENABLE_' + term.underscorify().to_upper()
1461 conf.set10(name, have)
5c23128d
ZJS
1462endforeach
1463
08540a95
YW
1464foreach tuple : [['nss-mymachines', 'machined'],
1465 ['nss-resolve', 'resolve']]
1466 want = get_option(tuple[0])
1467 if want != 'false'
1468 have = get_option(tuple[1])
1469 if want == 'true' and not have
1470 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1471 endif
1472 else
1473 have = false
1474 endif
1475 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1476 conf.set10(name, have)
1477endforeach
1478
1479enable_nss = false
1480foreach term : ['ENABLE_NSS_MYHOSTNAME',
1481 'ENABLE_NSS_MYMACHINES',
1482 'ENABLE_NSS_RESOLVE',
1483 'ENABLE_NSS_SYSTEMD']
1484 if conf.get(term) == 1
1485 enable_nss = true
1486 endif
1487endforeach
1488conf.set10('ENABLE_NSS', enable_nss)
1489
348b4437 1490conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
6129ec85 1491
69e96427 1492tests = []
7db7d5b7 1493fuzzers = []
69e96427 1494
b68dfb9e 1495conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
00d82c81 1496
5c23128d
ZJS
1497#####################################################################
1498
1499if get_option('efi')
37efbbd8 1500 efi_arch = host_machine.cpu_family()
b710072d 1501
6800fe7f 1502 if efi_arch == 'x86'
37efbbd8 1503 EFI_MACHINE_TYPE_NAME = 'ia32'
6800fe7f 1504 gnu_efi_arch = 'ia32'
37efbbd8
ZJS
1505 elif efi_arch == 'x86_64'
1506 EFI_MACHINE_TYPE_NAME = 'x64'
6800fe7f 1507 gnu_efi_arch = 'x86_64'
37efbbd8
ZJS
1508 elif efi_arch == 'arm'
1509 EFI_MACHINE_TYPE_NAME = 'arm'
6800fe7f 1510 gnu_efi_arch = 'arm'
37efbbd8
ZJS
1511 elif efi_arch == 'aarch64'
1512 EFI_MACHINE_TYPE_NAME = 'aa64'
6800fe7f 1513 gnu_efi_arch = 'aarch64'
37efbbd8
ZJS
1514 else
1515 EFI_MACHINE_TYPE_NAME = ''
6800fe7f 1516 gnu_efi_arch = ''
37efbbd8 1517 endif
5c23128d 1518
349cc4a5 1519 have = true
37efbbd8 1520 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
80c6fce8 1521
ac09340e 1522 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
349cc4a5
ZJS
1523else
1524 have = false
5c23128d 1525endif
349cc4a5 1526conf.set10('ENABLE_EFI', have)
5c23128d
ZJS
1527
1528#####################################################################
1529
1530config_h = configure_file(
37efbbd8
ZJS
1531 output : 'config.h',
1532 configuration : conf)
5c23128d 1533
348b4437
YW
1534meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1535
5c23128d 1536includes = include_directories('src/basic',
91b08bb0 1537 'src/boot',
c76dd733 1538 'src/home',
5c23128d
ZJS
1539 'src/shared',
1540 'src/systemd',
1541 'src/journal',
a38f7fec 1542 'src/journal-remote',
97d90615 1543 'src/nspawn',
5c23128d
ZJS
1544 'src/resolve',
1545 'src/timesync',
5c3376ef 1546 'src/time-wait-sync',
5c23128d
ZJS
1547 'src/login',
1548 'src/udev',
1549 'src/libudev',
1550 'src/core',
9e71f5d9 1551 'src/shutdown',
8feca247 1552 'src/xdg-autostart-generator',
5c23128d
ZJS
1553 'src/libsystemd/sd-bus',
1554 'src/libsystemd/sd-device',
a137a1c3 1555 'src/libsystemd/sd-event',
5c23128d
ZJS
1556 'src/libsystemd/sd-hwdb',
1557 'src/libsystemd/sd-id128',
1558 'src/libsystemd/sd-netlink',
1559 'src/libsystemd/sd-network',
ceb26cdb 1560 'src/libsystemd/sd-resolve',
5c23128d 1561 'src/libsystemd-network',
2d4ceca8 1562 '.')
5c23128d
ZJS
1563
1564add_project_arguments('-include', 'config.h', language : 'c')
1565
6ec439fd
YW
1566generate_gperfs = find_program('tools/generate-gperfs.py')
1567
5c23128d
ZJS
1568subdir('po')
1569subdir('catalog')
1570subdir('src/systemd')
1571subdir('src/basic')
1572subdir('src/libsystemd')
1573subdir('src/libsystemd-network')
5c23128d 1574subdir('src/journal')
5c23128d 1575subdir('src/login')
5c23128d
ZJS
1576
1577libjournal_core = static_library(
37efbbd8
ZJS
1578 'journal-core',
1579 libjournal_core_sources,
1580 journald_gperf_c,
1581 include_directories : includes,
1582 install : false)
5c23128d 1583
1485aacb 1584libsystemd_sym_path = '@0@/@1@'.format(project_source_root, libsystemd_sym)
5c23128d 1585libsystemd = shared_library(
37efbbd8 1586 'systemd',
a5d8835c 1587 disable_mempool_c,
56d50ab1 1588 version : libsystemd_version,
37efbbd8
ZJS
1589 include_directories : includes,
1590 link_args : ['-shared',
1591 '-Wl,--version-script=' + libsystemd_sym_path],
34e221a5
ZJS
1592 link_with : [libbasic,
1593 libbasic_gcrypt],
5e3cec87
ZJS
1594 link_whole : [libsystemd_static,
1595 libjournal_client],
37efbbd8
ZJS
1596 dependencies : [threads,
1597 librt,
1598 libxz,
ef5924aa 1599 libzstd,
37efbbd8
ZJS
1600 liblz4],
1601 link_depends : libsystemd_sym,
1602 install : true,
1603 install_dir : rootlibdir)
5c23128d 1604
70848ecf
DC
1605static_libsystemd = get_option('static-libsystemd')
1606static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1607
1608install_libsystemd_static = static_library(
1609 'systemd',
1610 libsystemd_sources,
1611 journal_client_sources,
975464e0
ZJS
1612 basic_sources,
1613 basic_gcrypt_sources,
be44b572 1614 disable_mempool_c,
70848ecf 1615 include_directories : includes,
70848ecf
DC
1616 build_by_default : static_libsystemd != 'false',
1617 install : static_libsystemd != 'false',
1618 install_dir : rootlibdir,
1619 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1620 dependencies : [threads,
1621 librt,
1622 libxz,
ef5924aa 1623 libzstd,
70848ecf 1624 liblz4,
975464e0
ZJS
1625 libcap,
1626 libblkid,
1627 libmount,
1628 libselinux,
70848ecf
DC
1629 libgcrypt],
1630 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1631
47354b44
ZJS
1632############################################################
1633
1634autosuspend_update_sh = find_program('tools/autosuspend-update.sh')
1635hwdb_update_sh = find_program('tools/hwdb-update.sh')
b61d777a 1636make_autosuspend_rules_py = find_program('tools/make-autosuspend-rules.py')
47354b44
ZJS
1637make_directive_index_py = find_program('tools/make-directive-index.py')
1638make_man_index_py = find_program('tools/make-man-index.py')
1639syscall_names_update_sh = find_program('tools/syscall-names-update.sh')
1640xml_helper_py = find_program('tools/xml_helper.py')
4cc73cf9 1641update_dbus_docs_py = find_program('tools/update-dbus-docs.py')
b61d777a 1642
5c23128d
ZJS
1643############################################################
1644
83b6af36
ZJS
1645# binaries that have --help and are intended for use by humans,
1646# usually, but not always, installed in /bin.
1647public_programs = []
1648
1649subdir('src/libudev')
1650subdir('src/shared')
1651subdir('src/core')
9e71f5d9 1652subdir('src/shutdown')
83b6af36
ZJS
1653subdir('src/udev')
1654subdir('src/network')
1655
1656subdir('src/analyze')
1657subdir('src/journal-remote')
1658subdir('src/coredump')
9b4abc69 1659subdir('src/pstore')
83b6af36
ZJS
1660subdir('src/hostname')
1661subdir('src/import')
e594a3b1 1662subdir('src/partition')
83b6af36
ZJS
1663subdir('src/kernel-install')
1664subdir('src/locale')
1665subdir('src/machine')
61d0578b 1666subdir('src/portable')
d093b62c 1667subdir('src/userdb')
70a5db58 1668subdir('src/home')
83b6af36
ZJS
1669subdir('src/nspawn')
1670subdir('src/resolve')
1671subdir('src/timedate')
1672subdir('src/timesync')
db64ba81 1673subdir('src/tmpfiles')
83b6af36 1674subdir('src/vconsole')
83b6af36
ZJS
1675subdir('src/boot/efi')
1676
1677subdir('src/test')
7db7d5b7 1678subdir('src/fuzz')
ef2ad30a 1679subdir('rules.d')
83b6af36
ZJS
1680subdir('test')
1681
1682############################################################
1683
1684# only static linking apart from libdl, to make sure that the
1685# module is linked to all libraries that it uses.
1686test_dlopen = executable(
37efbbd8
ZJS
1687 'test-dlopen',
1688 test_dlopen_c,
a5d8835c 1689 disable_mempool_c,
37efbbd8
ZJS
1690 include_directories : includes,
1691 link_with : [libbasic],
fd1939fb
YW
1692 dependencies : [libdl],
1693 build_by_default : want_tests != 'false')
83b6af36 1694
08540a95 1695foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
037b0a47 1696 ['systemd', 'ENABLE_NSS_SYSTEMD', 'src/nss-systemd/userdb-glue.c src/nss-systemd/userdb-glue.h src/nss-systemd/nss-systemd.h'],
08540a95
YW
1697 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1698 ['resolve', 'ENABLE_NSS_RESOLVE']]
5c23128d 1699
349cc4a5 1700 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1701 if condition
1702 module = tuple[0]
37efbbd8
ZJS
1703
1704 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1485aacb 1705 version_script_arg = join_paths(project_source_root, sym)
37efbbd8 1706
1684c56f
LP
1707 sources = ['src/nss-@0@/nss-@0@.c'.format(module)]
1708 if tuple.length() > 2
1709 sources += tuple[2].split()
1710 endif
1711
37efbbd8
ZJS
1712 nss = shared_library(
1713 'nss_' + module,
1684c56f 1714 sources,
a5d8835c 1715 disable_mempool_c,
37efbbd8
ZJS
1716 version : '2',
1717 include_directories : includes,
b4b36f44
LP
1718 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1719 link_args : ['-Wl,-z,nodelete',
1720 '-shared',
700805f6 1721 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1722 link_with : [libsystemd_static,
733cbd00 1723 libshared_static,
37efbbd8
ZJS
1724 libbasic],
1725 dependencies : [threads,
5486a31d 1726 librt],
37efbbd8
ZJS
1727 link_depends : sym,
1728 install : true,
1729 install_dir : rootlibdir)
1730
1731 # We cannot use shared_module because it does not support version suffix.
1732 # Unfortunately shared_library insists on creating the symlink…
1733 meson.add_install_script('sh', '-c',
1734 'rm $DESTDIR@0@/libnss_@1@.so'
1735 .format(rootlibdir, module))
1736
938be089
ZJS
1737 if want_tests != 'false'
1738 test('dlopen-nss_' + module,
1739 test_dlopen,
1740 # path to dlopen must include a slash
1741 args : nss.full_path())
1742 endif
37efbbd8 1743 endif
5c23128d
ZJS
1744endforeach
1745
1746############################################################
1747
6164ec4c
ZJS
1748executable(
1749 'systemd',
1750 systemd_sources,
1751 include_directories : includes,
1752 link_with : [libcore,
1753 libshared],
1754 dependencies : [versiondep,
1755 threads,
1756 librt,
1757 libseccomp,
1758 libselinux,
1759 libmount,
1760 libblkid],
1761 install_rpath : rootlibexecdir,
1762 install : true,
1763 install_dir : rootlibexecdir)
5c23128d 1764
ba7f4ae6
ZJS
1765meson.add_install_script(meson_make_symlink,
1766 join_paths(rootlibexecdir, 'systemd'),
1767 join_paths(rootsbindir, 'init'))
1768
6164ec4c
ZJS
1769public_programs += executable(
1770 'systemd-analyze',
1771 systemd_analyze_sources,
1772 include_directories : includes,
1773 link_with : [libcore,
1774 libshared],
1775 dependencies : [versiondep,
1776 threads,
1777 librt,
1778 libseccomp,
1779 libselinux,
1780 libmount,
1781 libblkid],
1782 install_rpath : rootlibexecdir,
b3259a6e 1783 install : conf.get('ENABLE_ANALYZE'))
5c23128d 1784
6164ec4c
ZJS
1785executable(
1786 'systemd-journald',
1787 systemd_journald_sources,
1788 include_directories : includes,
1789 link_with : [libjournal_core,
1790 libshared],
1791 dependencies : [threads,
1792 libxz,
1793 liblz4,
ef5924aa
NL
1794 libselinux,
1795 libzstd],
6164ec4c
ZJS
1796 install_rpath : rootlibexecdir,
1797 install : true,
1798 install_dir : rootlibexecdir)
5c23128d 1799
6164ec4c
ZJS
1800public_programs += executable(
1801 'systemd-cat',
1802 systemd_cat_sources,
1803 include_directories : includes,
1804 link_with : [libjournal_core,
1805 libshared],
1806 dependencies : [threads],
1807 install_rpath : rootlibexecdir,
1808 install : true)
1809
1810public_programs += executable(
1811 'journalctl',
1812 journalctl_sources,
1813 include_directories : includes,
1814 link_with : [libshared],
1815 dependencies : [threads,
e44b5004 1816 libdl,
6164ec4c
ZJS
1817 libxz,
1818 liblz4,
9200bb30
LP
1819 libzstd,
1820 libdl],
6164ec4c
ZJS
1821 install_rpath : rootlibexecdir,
1822 install : true,
1823 install_dir : rootbindir)
35a1ff4c 1824
6164ec4c
ZJS
1825executable(
1826 'systemd-getty-generator',
1827 'src/getty-generator/getty-generator.c',
1828 include_directories : includes,
1829 link_with : [libshared],
1830 install_rpath : rootlibexecdir,
1831 install : true,
1832 install_dir : systemgeneratordir)
5c23128d 1833
6164ec4c
ZJS
1834executable(
1835 'systemd-debug-generator',
1836 'src/debug-generator/debug-generator.c',
1837 include_directories : includes,
1838 link_with : [libshared],
1839 install_rpath : rootlibexecdir,
1840 install : true,
1841 install_dir : systemgeneratordir)
1842
1843executable(
1844 'systemd-run-generator',
1845 'src/run-generator/run-generator.c',
1846 include_directories : includes,
1847 link_with : [libshared],
1848 install_rpath : rootlibexecdir,
1849 install : true,
1850 install_dir : systemgeneratordir)
1851
1852executable(
1853 'systemd-fstab-generator',
1854 'src/fstab-generator/fstab-generator.c',
1855 include_directories : includes,
1856 link_with : [libcore_shared,
1857 libshared],
1858 install_rpath : rootlibexecdir,
1859 install : true,
1860 install_dir : systemgeneratordir)
5c23128d 1861
349cc4a5 1862if conf.get('ENABLE_ENVIRONMENT_D') == 1
6164ec4c
ZJS
1863 executable(
1864 '30-systemd-environment-d-generator',
1865 'src/environment-d-generator/environment-d-generator.c',
1866 include_directories : includes,
1867 link_with : [libshared],
1868 install_rpath : rootlibexecdir,
1869 install : true,
1870 install_dir : userenvgeneratordir)
7b76fce1 1871
37efbbd8
ZJS
1872 meson.add_install_script(meson_make_symlink,
1873 join_paths(sysconfdir, 'environment'),
1874 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1875endif
1876
349cc4a5 1877if conf.get('ENABLE_HIBERNATE') == 1
6164ec4c
ZJS
1878 executable(
1879 'systemd-hibernate-resume-generator',
1880 'src/hibernate-resume/hibernate-resume-generator.c',
1881 include_directories : includes,
1882 link_with : [libshared],
1883 install_rpath : rootlibexecdir,
1884 install : true,
1885 install_dir : systemgeneratordir)
1886
1887 executable(
1888 'systemd-hibernate-resume',
1889 'src/hibernate-resume/hibernate-resume.c',
1890 include_directories : includes,
1891 link_with : [libshared],
1892 install_rpath : rootlibexecdir,
1893 install : true,
1894 install_dir : rootlibexecdir)
37efbbd8
ZJS
1895endif
1896
349cc4a5 1897if conf.get('HAVE_BLKID') == 1
6164ec4c
ZJS
1898 executable(
1899 'systemd-gpt-auto-generator',
1900 'src/gpt-auto-generator/gpt-auto-generator.c',
1901 'src/shared/blkid-util.h',
1902 include_directories : includes,
1903 link_with : [libshared],
1904 dependencies : libblkid,
1905 install_rpath : rootlibexecdir,
1906 install : true,
1907 install_dir : systemgeneratordir)
1908
1909 public_programs += executable(
1910 'systemd-dissect',
1911 'src/dissect/dissect.c',
1912 include_directories : includes,
1913 link_with : [libshared],
1914 install_rpath : rootlibexecdir,
5a151082 1915 install : true)
5c23128d
ZJS
1916endif
1917
1ec57f33 1918if conf.get('ENABLE_RESOLVE') == 1
6164ec4c
ZJS
1919 executable(
1920 'systemd-resolved',
1921 systemd_resolved_sources,
1922 include_directories : includes,
1923 link_with : [libshared,
1924 libbasic_gcrypt,
1925 libsystemd_resolve_core],
1926 dependencies : systemd_resolved_dependencies,
1927 install_rpath : rootlibexecdir,
1928 install : true,
1929 install_dir : rootlibexecdir)
1930
1931 public_programs += executable(
1932 'resolvectl',
1933 resolvectl_sources,
1934 include_directories : includes,
1935 link_with : [libshared,
1936 libbasic_gcrypt,
1937 libsystemd_resolve_core],
1938 dependencies : [threads,
1939 libgpg_error,
1940 libm,
1941 libidn],
1942 install_rpath : rootlibexecdir,
1943 install : true)
088c1363
LP
1944
1945 meson.add_install_script(meson_make_symlink,
6164ec4c
ZJS
1946 join_paths(bindir, 'resolvectl'),
1947 join_paths(rootsbindir, 'resolvconf'))
c2e84cab
YW
1948
1949 meson.add_install_script(meson_make_symlink,
6164ec4c
ZJS
1950 join_paths(bindir, 'resolvectl'),
1951 join_paths(bindir, 'systemd-resolve'))
5c23128d
ZJS
1952endif
1953
349cc4a5 1954if conf.get('ENABLE_LOGIND') == 1
6164ec4c
ZJS
1955 executable(
1956 'systemd-logind',
1957 systemd_logind_sources,
1958 include_directories : includes,
1959 link_with : [liblogind_core,
1960 libshared],
1961 dependencies : [threads,
1962 libacl],
1963 install_rpath : rootlibexecdir,
1964 install : true,
1965 install_dir : rootlibexecdir)
1966
1967 public_programs += executable(
1968 'loginctl',
1969 loginctl_sources,
1970 include_directories : includes,
1971 link_with : [libshared],
1972 dependencies : [threads,
1973 liblz4,
ef5924aa
NL
1974 libxz,
1975 libzstd],
6164ec4c
ZJS
1976 install_rpath : rootlibexecdir,
1977 install : true,
1978 install_dir : rootbindir)
1979
1980 public_programs += executable(
1981 'systemd-inhibit',
1982 'src/login/inhibit.c',
1983 include_directories : includes,
1984 link_with : [libshared],
1985 install_rpath : rootlibexecdir,
1986 install : true,
1987 install_dir : rootbindir)
37efbbd8 1988
349cc4a5 1989 if conf.get('HAVE_PAM') == 1
1485aacb 1990 version_script_arg = join_paths(project_source_root, pam_systemd_sym)
37efbbd8
ZJS
1991 pam_systemd = shared_library(
1992 'pam_systemd',
1993 pam_systemd_c,
1994 name_prefix : '',
1995 include_directories : includes,
1996 link_args : ['-shared',
1997 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1998 link_with : [libsystemd_static,
37efbbd8
ZJS
1999 libshared_static],
2000 dependencies : [threads,
2001 libpam,
2002 libpam_misc],
2003 link_depends : pam_systemd_sym,
2004 install : true,
2005 install_dir : pamlibdir)
2006
938be089
ZJS
2007 if want_tests != 'false'
2008 test('dlopen-pam_systemd',
2009 test_dlopen,
2010 # path to dlopen must include a slash
c1cd6743 2011 args : pam_systemd.full_path())
938be089 2012 endif
37efbbd8 2013 endif
005a29f2 2014
6164ec4c
ZJS
2015 executable(
2016 'systemd-user-runtime-dir',
2017 user_runtime_dir_sources,
2018 include_directories : includes,
2019 link_with : [libshared],
2020 install_rpath : rootlibexecdir,
2021 install : true,
2022 install_dir : rootlibexecdir)
07ee5adb 2023endif
a9f0f5e5 2024
349cc4a5 2025if conf.get('HAVE_PAM') == 1
6164ec4c
ZJS
2026 executable(
2027 'systemd-user-sessions',
2028 'src/user-sessions/user-sessions.c',
2029 include_directories : includes,
2030 link_with : [libshared],
2031 install_rpath : rootlibexecdir,
2032 install : true,
2033 install_dir : rootlibexecdir)
5c23128d
ZJS
2034endif
2035
349cc4a5 2036if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
6164ec4c
ZJS
2037 public_programs += executable(
2038 'bootctl',
2039 'src/boot/bootctl.c',
2040 include_directories : includes,
2041 link_with : [libshared],
2042 dependencies : [libblkid],
2043 install_rpath : rootlibexecdir,
2044 install : true)
2045
2046 public_programs += executable(
2047 'systemd-bless-boot',
2048 'src/boot/bless-boot.c',
2049 include_directories : includes,
2050 link_with : [libshared],
2051 dependencies : [libblkid],
2052 install_rpath : rootlibexecdir,
2053 install : true,
2054 install_dir : rootlibexecdir)
2055
2056 executable(
2057 'systemd-bless-boot-generator',
2058 'src/boot/bless-boot-generator.c',
2059 include_directories : includes,
2060 link_with : [libshared],
2061 install_rpath : rootlibexecdir,
2062 install : true,
2063 install_dir : systemgeneratordir)
2064endif
2065
2066executable(
2067 'systemd-boot-check-no-failures',
2068 'src/boot/boot-check-no-failures.c',
2069 include_directories : includes,
2070 link_with : [libshared],
2071 dependencies : [libblkid],
2072 install_rpath : rootlibexecdir,
2073 install : true,
2074 install_dir : rootlibexecdir)
005a29f2 2075
6164ec4c
ZJS
2076public_programs += executable(
2077 'systemd-socket-activate',
2078 'src/activate/activate.c',
2079 include_directories : includes,
2080 link_with : [libshared],
2081 dependencies : [threads],
2082 install_rpath : rootlibexecdir,
2083 install : true)
f3794366
FS
2084
2085if get_option('link-systemctl-shared')
2086 systemctl_link_with = [libshared]
2087else
2088 systemctl_link_with = [libsystemd_static,
2089 libshared_static,
2090 libjournal_client,
2091 libbasic_gcrypt]
2092endif
2093
6164ec4c
ZJS
2094public_programs += executable(
2095 'systemctl',
2096 'src/systemctl/systemctl.c',
2097 'src/systemctl/sysv-compat.h',
2098 'src/systemctl/sysv-compat.c',
2099 include_directories : includes,
2100 link_with : systemctl_link_with,
2101 dependencies : [threads,
2102 libcap,
2103 libselinux,
2104 libxz,
ef5924aa
NL
2105 liblz4,
2106 libzstd],
6164ec4c
ZJS
2107 install_rpath : rootlibexecdir,
2108 install : true,
2109 install_dir : rootbindir)
5c23128d 2110
61d0578b 2111if conf.get('ENABLE_PORTABLED') == 1
6164ec4c
ZJS
2112 executable(
2113 'systemd-portabled',
2114 systemd_portabled_sources,
2115 include_directories : includes,
2116 link_with : [libshared],
2117 dependencies : [threads],
2118 install_rpath : rootlibexecdir,
2119 install : true,
2120 install_dir : rootlibexecdir)
2121
2122 public_programs += executable(
2123 'portablectl',
2124 'src/portable/portablectl.c',
2125 include_directories : includes,
2126 link_with : [libshared],
2127 dependencies : [threads],
2128 install_rpath : rootlibexecdir,
2129 install : true,
2130 install_dir : rootbindir)
61d0578b
LP
2131endif
2132
d093b62c 2133if conf.get('ENABLE_USERDB') == 1
6164ec4c
ZJS
2134 executable(
2135 'systemd-userwork',
2136 systemd_userwork_sources,
2137 include_directories : includes,
2138 link_with : [libshared],
2139 dependencies : [threads],
2140 install_rpath : rootlibexecdir,
2141 install : true,
2142 install_dir : rootlibexecdir)
2143
2144 executable(
2145 'systemd-userdbd',
2146 systemd_userdbd_sources,
2147 include_directories : includes,
2148 link_with : [libshared],
2149 dependencies : [threads],
2150 install_rpath : rootlibexecdir,
2151 install : true,
2152 install_dir : rootlibexecdir)
2153
460e5af0 2154 public_programs += executable(
6164ec4c
ZJS
2155 'userdbctl',
2156 userdbctl_sources,
2157 include_directories : includes,
2158 link_with : [libshared],
2159 dependencies : [threads],
2160 install_rpath : rootlibexecdir,
2161 install : true,
2162 install_dir : rootbindir)
d093b62c
LP
2163endif
2164
70a5db58 2165if conf.get('ENABLE_HOMED') == 1
6164ec4c
ZJS
2166 executable(
2167 'systemd-homework',
2168 systemd_homework_sources,
2169 include_directories : includes,
2170 link_with : [libshared],
2171 dependencies : [threads,
2172 libcryptsetup,
2173 libblkid,
2174 libcrypt,
2175 libopenssl,
2176 libfdisk,
7b78db28
LP
2177 libp11kit,
2178 libfido2],
6164ec4c
ZJS
2179 install_rpath : rootlibexecdir,
2180 install : true,
2181 install_dir : rootlibexecdir)
2182
2183 executable(
2184 'systemd-homed',
2185 systemd_homed_sources,
2186 include_directories : includes,
2187 link_with : [libshared],
2188 dependencies : [threads,
2189 libcrypt,
679badd7 2190 libopenssl],
6164ec4c
ZJS
2191 install_rpath : rootlibexecdir,
2192 install : true,
2193 install_dir : rootlibexecdir)
2194
460e5af0 2195 public_programs += executable(
6164ec4c
ZJS
2196 'homectl',
2197 homectl_sources,
2198 include_directories : includes,
2199 link_with : [libshared],
2200 dependencies : [threads,
2201 libcrypt,
2202 libopenssl,
2203 libp11kit,
da3920c3
LP
2204 libfido2,
2205 libdl],
6164ec4c
ZJS
2206 install_rpath : rootlibexecdir,
2207 install : true,
2208 install_dir : rootbindir)
26cf9fb7
LP
2209
2210 if conf.get('HAVE_PAM') == 1
2211 version_script_arg = join_paths(project_source_root, pam_systemd_home_sym)
2212 pam_systemd = shared_library(
2213 'pam_systemd_home',
2214 pam_systemd_home_c,
2215 name_prefix : '',
2216 include_directories : includes,
2217 link_args : ['-shared',
2218 '-Wl,--version-script=' + version_script_arg],
2219 link_with : [libsystemd_static,
2220 libshared_static],
2221 dependencies : [threads,
2222 libpam,
2223 libpam_misc,
2224 libcrypt],
2225 link_depends : pam_systemd_home_sym,
2226 install : true,
2227 install_dir : pamlibdir)
2228 endif
70a5db58
LP
2229endif
2230
6589a569
NL
2231foreach alias : (['halt', 'poweroff', 'reboot', 'shutdown'] +
2232 (conf.get('HAVE_SYSV_COMPAT') == 1 ? ['runlevel', 'telinit'] : []))
ba7f4ae6
ZJS
2233 meson.add_install_script(meson_make_symlink,
2234 join_paths(rootbindir, 'systemctl'),
2235 join_paths(rootsbindir, alias))
2236endforeach
2237
63e2d171
NL
2238meson.add_install_script(meson_make_symlink,
2239 join_paths(rootbindir, 'udevadm'),
2240 join_paths(rootlibexecdir, 'systemd-udevd'))
2241
349cc4a5 2242if conf.get('ENABLE_BACKLIGHT') == 1
6164ec4c
ZJS
2243 executable(
2244 'systemd-backlight',
2245 'src/backlight/backlight.c',
2246 include_directories : includes,
2247 link_with : [libshared],
2248 install_rpath : rootlibexecdir,
2249 install : true,
2250 install_dir : rootlibexecdir)
5c23128d
ZJS
2251endif
2252
349cc4a5 2253if conf.get('ENABLE_RFKILL') == 1
6164ec4c
ZJS
2254 executable(
2255 'systemd-rfkill',
2256 'src/rfkill/rfkill.c',
2257 include_directories : includes,
2258 link_with : [libshared],
2259 install_rpath : rootlibexecdir,
2260 install : true,
2261 install_dir : rootlibexecdir)
2262endif
2263
2264executable(
2265 'systemd-system-update-generator',
2266 'src/system-update-generator/system-update-generator.c',
2267 include_directories : includes,
2268 link_with : [libshared],
2269 install_rpath : rootlibexecdir,
2270 install : true,
2271 install_dir : systemgeneratordir)
5c23128d 2272
349cc4a5 2273if conf.get('HAVE_LIBCRYPTSETUP') == 1
08669709 2274 systemd_cryptsetup_sources = files('''
08669709 2275 src/cryptsetup/cryptsetup-pkcs11.h
1e2f3230
LP
2276 src/cryptsetup/cryptsetup-keyfile.c
2277 src/cryptsetup/cryptsetup-keyfile.h
23769fb3 2278 src/cryptsetup/cryptsetup.c
08669709
LP
2279'''.split())
2280
2281 if conf.get('HAVE_P11KIT') == 1
2282 systemd_cryptsetup_sources += files('src/cryptsetup/cryptsetup-pkcs11.c')
2283 endif
2284
6164ec4c
ZJS
2285 executable(
2286 'systemd-cryptsetup',
2287 systemd_cryptsetup_sources,
2288 include_directories : includes,
2289 link_with : [libshared],
2290 dependencies : [libcryptsetup,
2291 libp11kit],
2292 install_rpath : rootlibexecdir,
2293 install : true,
2294 install_dir : rootlibexecdir)
2295
2296 executable(
2297 'systemd-cryptsetup-generator',
2298 'src/cryptsetup/cryptsetup-generator.c',
2299 include_directories : includes,
2300 link_with : [libshared],
6164ec4c
ZJS
2301 install_rpath : rootlibexecdir,
2302 install : true,
2303 install_dir : systemgeneratordir)
2304
2305 executable(
2306 'systemd-veritysetup',
2307 'src/veritysetup/veritysetup.c',
2308 include_directories : includes,
2309 link_with : [libshared],
2310 dependencies : [libcryptsetup],
2311 install_rpath : rootlibexecdir,
2312 install : true,
2313 install_dir : rootlibexecdir)
2314
2315 executable(
2316 'systemd-veritysetup-generator',
2317 'src/veritysetup/veritysetup-generator.c',
2318 include_directories : includes,
2319 link_with : [libshared],
6164ec4c
ZJS
2320 install_rpath : rootlibexecdir,
2321 install : true,
2322 install_dir : systemgeneratordir)
5c23128d
ZJS
2323endif
2324
349cc4a5 2325if conf.get('HAVE_SYSV_COMPAT') == 1
6164ec4c
ZJS
2326 executable(
2327 'systemd-sysv-generator',
2328 'src/sysv-generator/sysv-generator.c',
2329 include_directories : includes,
2330 link_with : [libshared],
2331 install_rpath : rootlibexecdir,
2332 install : true,
2333 install_dir : systemgeneratordir)
2334
2335 executable(
2336 'systemd-rc-local-generator',
2337 'src/rc-local-generator/rc-local-generator.c',
2338 include_directories : includes,
2339 link_with : [libshared],
2340 install_rpath : rootlibexecdir,
2341 install : true,
2342 install_dir : systemgeneratordir)
5c23128d
ZJS
2343endif
2344
8feca247
BB
2345if conf.get('ENABLE_XDG_AUTOSTART') == 1
2346 executable(
2347 'systemd-xdg-autostart-generator',
2348 'src/xdg-autostart-generator/xdg-autostart-generator.c',
2349 'src/xdg-autostart-generator/xdg-autostart-service.c',
2350 include_directories : includes,
2351 link_with : [libshared],
2352 install_rpath : rootlibexecdir,
2353 install : true,
2354 install_dir : usergeneratordir)
2355
2356 executable(
2357 'systemd-xdg-autostart-condition',
2358 'src/xdg-autostart-generator/xdg-autostart-condition.c',
2359 include_directories : includes,
2360 link_with : [libshared],
2361 install_rpath : rootlibexecdir,
2362 install : true,
2363 install_dir : rootlibexecdir)
2364endif
2365
349cc4a5 2366if conf.get('ENABLE_HOSTNAMED') == 1
6164ec4c
ZJS
2367 executable(
2368 'systemd-hostnamed',
2369 'src/hostname/hostnamed.c',
2370 include_directories : includes,
2371 link_with : [libshared],
2372 install_rpath : rootlibexecdir,
2373 install : true,
2374 install_dir : rootlibexecdir)
2375
2376 public_programs += executable(
2377 'hostnamectl',
2378 'src/hostname/hostnamectl.c',
2379 include_directories : includes,
2380 link_with : [libshared],
2381 install_rpath : rootlibexecdir,
2382 install : true)
5c23128d
ZJS
2383endif
2384
349cc4a5
ZJS
2385if conf.get('ENABLE_LOCALED') == 1
2386 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
2387 # logind will load libxkbcommon.so dynamically on its own
2388 deps = [libdl]
2389 else
2390 deps = []
2391 endif
2392
6164ec4c
ZJS
2393 executable(
2394 'systemd-localed',
2395 systemd_localed_sources,
2396 include_directories : includes,
2397 link_with : [libshared],
2398 dependencies : deps,
2399 install_rpath : rootlibexecdir,
2400 install : true,
2401 install_dir : rootlibexecdir)
2402
2403 public_programs += executable(
2404 'localectl',
2405 localectl_sources,
2406 include_directories : includes,
2407 link_with : [libshared],
2408 install_rpath : rootlibexecdir,
2409 install : true)
5c23128d
ZJS
2410endif
2411
349cc4a5 2412if conf.get('ENABLE_TIMEDATED') == 1
6164ec4c
ZJS
2413 executable(
2414 'systemd-timedated',
2415 'src/timedate/timedated.c',
2416 include_directories : includes,
2417 link_with : [libshared],
2418 install_rpath : rootlibexecdir,
2419 install : true,
2420 install_dir : rootlibexecdir)
6129ec85 2421endif
5c23128d 2422
6129ec85 2423if conf.get('ENABLE_TIMEDATECTL') == 1
6164ec4c
ZJS
2424 public_programs += executable(
2425 'timedatectl',
2426 'src/timedate/timedatectl.c',
2427 include_directories : includes,
2428 install_rpath : rootlibexecdir,
2429 link_with : [libshared],
2430 dependencies : [libm],
2431 install : true)
5c23128d
ZJS
2432endif
2433
349cc4a5 2434if conf.get('ENABLE_TIMESYNCD') == 1
fd74a13e
RS
2435 if get_option('link-timesyncd-shared')
2436 timesyncd_link_with = [libshared]
2437 else
2438 timesyncd_link_with = [libsystemd_static,
2439 libshared_static,
2440 libjournal_client,
2441 libbasic_gcrypt]
2442 endif
2443
6164ec4c
ZJS
2444 executable(
2445 'systemd-timesyncd',
2446 systemd_timesyncd_sources,
2447 include_directories : includes,
2448 link_with : [timesyncd_link_with],
2449 dependencies : [threads,
2450 libm],
2451 install_rpath : rootlibexecdir,
2452 install : true,
2453 install_dir : rootlibexecdir)
2454
2455 executable(
2456 'systemd-time-wait-sync',
2457 'src/time-wait-sync/time-wait-sync.c',
2458 include_directories : includes,
2459 link_with : [timesyncd_link_with],
2460 install_rpath : rootlibexecdir,
2461 install : true,
2462 install_dir : rootlibexecdir)
5c23128d
ZJS
2463endif
2464
349cc4a5 2465if conf.get('ENABLE_MACHINED') == 1
6164ec4c
ZJS
2466 executable(
2467 'systemd-machined',
2468 systemd_machined_sources,
2469 include_directories : includes,
2470 link_with : [libmachine_core,
2471 libshared],
2472 install_rpath : rootlibexecdir,
2473 install : true,
2474 install_dir : rootlibexecdir)
2475
2476 public_programs += executable(
2477 'machinectl',
2478 'src/machine/machinectl.c',
2479 include_directories : includes,
2480 link_with : [libshared],
2481 dependencies : [threads,
2482 libxz,
ef5924aa
NL
2483 liblz4,
2484 libzstd],
6164ec4c
ZJS
2485 install_rpath : rootlibexecdir,
2486 install : true,
2487 install_dir : rootbindir)
5c23128d
ZJS
2488endif
2489
349cc4a5 2490if conf.get('ENABLE_IMPORTD') == 1
6164ec4c
ZJS
2491 executable(
2492 'systemd-importd',
2493 systemd_importd_sources,
2494 include_directories : includes,
2495 link_with : [libshared],
2496 dependencies : [threads],
2497 install_rpath : rootlibexecdir,
2498 install : true,
2499 install_dir : rootlibexecdir)
2500
2501 systemd_pull = executable(
2502 'systemd-pull',
2503 systemd_pull_sources,
2504 include_directories : includes,
2505 link_with : [libshared],
2506 dependencies : [versiondep,
2507 libcurl,
2508 libz,
2509 libbzip2,
2510 libxz,
2511 libgcrypt],
2512 install_rpath : rootlibexecdir,
2513 install : true,
2514 install_dir : rootlibexecdir)
2515
2516 systemd_import = executable(
2517 'systemd-import',
2518 systemd_import_sources,
2519 include_directories : includes,
2520 link_with : [libshared],
2521 dependencies : [libcurl,
2522 libz,
2523 libbzip2,
2524 libxz],
2525 install_rpath : rootlibexecdir,
2526 install : true,
2527 install_dir : rootlibexecdir)
2528
2529 systemd_import_fs = executable(
2530 'systemd-import-fs',
2531 systemd_import_fs_sources,
2532 include_directories : includes,
2533 link_with : [libshared],
2534 install_rpath : rootlibexecdir,
2535 install : true,
2536 install_dir : rootlibexecdir)
2537
2538 systemd_export = executable(
2539 'systemd-export',
2540 systemd_export_sources,
2541 include_directories : includes,
2542 link_with : [libshared],
2543 dependencies : [libcurl,
2544 libz,
2545 libbzip2,
2546 libxz],
2547 install_rpath : rootlibexecdir,
2548 install : true,
2549 install_dir : rootlibexecdir)
1d7579c4
LP
2550
2551 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
37efbbd8
ZJS
2552endif
2553
349cc4a5 2554if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
6164ec4c
ZJS
2555 public_programs += executable(
2556 'systemd-journal-upload',
2557 systemd_journal_upload_sources,
2558 include_directories : includes,
2559 link_with : [libshared],
2560 dependencies : [versiondep,
2561 threads,
2562 libcurl,
2563 libgnutls,
2564 libxz,
ef5924aa
NL
2565 liblz4,
2566 libzstd],
6164ec4c
ZJS
2567 install_rpath : rootlibexecdir,
2568 install : true,
2569 install_dir : rootlibexecdir)
5c23128d
ZJS
2570endif
2571
349cc4a5 2572if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
6164ec4c
ZJS
2573 public_programs += executable(
2574 'systemd-journal-remote',
2575 systemd_journal_remote_sources,
2576 include_directories : includes,
2577 link_with : [libshared,
2578 libsystemd_journal_remote],
2579 dependencies : [threads,
2580 libmicrohttpd,
2581 libgnutls,
2582 libxz,
ef5924aa
NL
2583 liblz4,
2584 libzstd],
6164ec4c
ZJS
2585 install_rpath : rootlibexecdir,
2586 install : true,
2587 install_dir : rootlibexecdir)
2588
2589 public_programs += executable(
2590 'systemd-journal-gatewayd',
2591 systemd_journal_gatewayd_sources,
2592 include_directories : includes,
2593 link_with : [libshared],
2594 dependencies : [threads,
2595 libmicrohttpd,
2596 libgnutls,
2597 libxz,
ef5924aa
NL
2598 liblz4,
2599 libzstd],
6164ec4c
ZJS
2600 install_rpath : rootlibexecdir,
2601 install : true,
2602 install_dir : rootlibexecdir)
5c23128d
ZJS
2603endif
2604
349cc4a5 2605if conf.get('ENABLE_COREDUMP') == 1
6164ec4c
ZJS
2606 executable(
2607 'systemd-coredump',
2608 systemd_coredump_sources,
2609 include_directories : includes,
2610 link_with : [libshared],
2611 dependencies : [threads,
2612 libacl,
2613 libdw,
2614 libxz,
ef5924aa
NL
2615 liblz4,
2616 libzstd],
6164ec4c
ZJS
2617 install_rpath : rootlibexecdir,
2618 install : true,
2619 install_dir : rootlibexecdir)
2620
2621 public_programs += executable(
2622 'coredumpctl',
2623 coredumpctl_sources,
2624 include_directories : includes,
2625 link_with : [libshared],
2626 dependencies : [threads,
2627 libxz,
ef5924aa
NL
2628 liblz4,
2629 libzstd],
6164ec4c
ZJS
2630 install_rpath : rootlibexecdir,
2631 install : true)
5c23128d
ZJS
2632endif
2633
9b4abc69 2634if conf.get('ENABLE_PSTORE') == 1
6164ec4c
ZJS
2635 executable(
2636 'systemd-pstore',
2637 systemd_pstore_sources,
2638 include_directories : includes,
2639 link_with : [libshared],
2640 dependencies : [threads,
2641 libacl,
2642 libdw,
2643 libxz,
ef5924aa
NL
2644 liblz4,
2645 libzstd],
6164ec4c
ZJS
2646 install_rpath : rootlibexecdir,
2647 install : true,
2648 install_dir : rootlibexecdir)
9b4abc69
ED
2649endif
2650
349cc4a5 2651if conf.get('ENABLE_BINFMT') == 1
6164ec4c
ZJS
2652 public_programs += executable(
2653 'systemd-binfmt',
2654 'src/binfmt/binfmt.c',
2655 include_directories : includes,
2656 link_with : [libshared],
2657 install_rpath : rootlibexecdir,
2658 install : true,
2659 install_dir : rootlibexecdir)
37efbbd8
ZJS
2660
2661 meson.add_install_script('sh', '-c',
2662 mkdir_p.format(binfmtdir))
2663 meson.add_install_script('sh', '-c',
2664 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2665endif
2666
e594a3b1 2667if conf.get('ENABLE_REPART') == 1
6164ec4c
ZJS
2668 exe = executable(
2669 'systemd-repart',
2670 systemd_repart_sources,
2671 include_directories : includes,
2672 link_with : [libshared],
2673 dependencies : [threads,
6164ec4c
ZJS
2674 libblkid,
2675 libfdisk,
2676 libopenssl],
2677 install_rpath : rootlibexecdir,
2678 install : true,
2679 install_dir : rootbindir)
2d2d0a57 2680 public_programs += exe
e29e4d57
ZJS
2681
2682 if want_tests != 'false'
2683 test('test-repart',
2684 test_repart_sh,
2685 args : exe.full_path())
2686 endif
e594a3b1
LP
2687endif
2688
349cc4a5 2689if conf.get('ENABLE_VCONSOLE') == 1
6164ec4c
ZJS
2690 executable(
2691 'systemd-vconsole-setup',
2692 'src/vconsole/vconsole-setup.c',
2693 include_directories : includes,
2694 link_with : [libshared],
2695 install_rpath : rootlibexecdir,
2696 install : true,
2697 install_dir : rootlibexecdir)
5c23128d
ZJS
2698endif
2699
349cc4a5 2700if conf.get('ENABLE_RANDOMSEED') == 1
6164ec4c
ZJS
2701 executable(
2702 'systemd-random-seed',
2703 'src/random-seed/random-seed.c',
2704 include_directories : includes,
2705 link_with : [libshared],
2706 install_rpath : rootlibexecdir,
2707 install : true,
2708 install_dir : rootlibexecdir)
5c23128d
ZJS
2709endif
2710
349cc4a5 2711if conf.get('ENABLE_FIRSTBOOT') == 1
6164ec4c
ZJS
2712 executable(
2713 'systemd-firstboot',
2714 'src/firstboot/firstboot.c',
2715 include_directories : includes,
2716 link_with : [libshared],
2717 dependencies : [libcrypt],
2718 install_rpath : rootlibexecdir,
2719 install : true,
2720 install_dir : rootbindir)
2721endif
2722
2723executable(
2724 'systemd-remount-fs',
2725 'src/remount-fs/remount-fs.c',
2726 include_directories : includes,
2727 link_with : [libcore_shared,
2728 libshared],
2729 install_rpath : rootlibexecdir,
2730 install : true,
2731 install_dir : rootlibexecdir)
5c23128d 2732
6164ec4c
ZJS
2733executable(
2734 'systemd-machine-id-setup',
2735 'src/machine-id-setup/machine-id-setup-main.c',
2736 include_directories : includes,
2737 link_with : [libcore_shared,
2738 libshared],
2739 install_rpath : rootlibexecdir,
2740 install : true,
2741 install_dir : rootbindir)
5c23128d 2742
6164ec4c
ZJS
2743executable(
2744 'systemd-fsck',
2745 'src/fsck/fsck.c',
2746 include_directories : includes,
2747 link_with : [libshared],
2748 install_rpath : rootlibexecdir,
2749 install : true,
2750 install_dir : rootlibexecdir)
5c23128d 2751
80750adb
ZJS
2752executable('systemd-growfs',
2753 'src/partition/growfs.c',
2754 include_directories : includes,
2755 link_with : [libshared],
2756 install_rpath : rootlibexecdir,
2757 install : true,
2758 install_dir : rootlibexecdir)
2759
6164ec4c
ZJS
2760executable(
2761 'systemd-makefs',
2762 'src/partition/makefs.c',
2763 include_directories : includes,
2764 link_with : [libshared],
2765 install_rpath : rootlibexecdir,
2766 install : true,
2767 install_dir : rootlibexecdir)
b7f28ac5 2768
6164ec4c
ZJS
2769executable(
2770 'systemd-sleep',
2771 'src/sleep/sleep.c',
2772 include_directories : includes,
2773 link_with : [libshared],
2774 install_rpath : rootlibexecdir,
2775 install : true,
2776 install_dir : rootlibexecdir)
5c23128d 2777
d25e127d
YW
2778install_data('src/sleep/sleep.conf',
2779 install_dir : pkgsysconfdir)
2780
6164ec4c
ZJS
2781public_programs += executable(
2782 'systemd-sysctl',
2783 'src/sysctl/sysctl.c',
2784 include_directories : includes,
2785 link_with : [libshared],
2786 install_rpath : rootlibexecdir,
2787 install : true,
2788 install_dir : rootlibexecdir)
5c23128d 2789
6164ec4c
ZJS
2790executable(
2791 'systemd-ac-power',
2792 'src/ac-power/ac-power.c',
2793 include_directories : includes,
2794 link_with : [libshared],
2795 install_rpath : rootlibexecdir,
2796 install : true,
2797 install_dir : rootlibexecdir)
5c23128d 2798
6164ec4c
ZJS
2799public_programs += executable(
2800 'systemd-detect-virt',
2801 'src/detect-virt/detect-virt.c',
2802 include_directories : includes,
2803 link_with : [libshared],
2804 install_rpath : rootlibexecdir,
2805 install : true)
5c23128d 2806
6164ec4c
ZJS
2807public_programs += executable(
2808 'systemd-delta',
2809 'src/delta/delta.c',
2810 include_directories : includes,
2811 link_with : [libshared],
2812 install_rpath : rootlibexecdir,
2813 install : true)
5c23128d 2814
6164ec4c
ZJS
2815public_programs += executable(
2816 'systemd-escape',
2817 'src/escape/escape.c',
2818 include_directories : includes,
2819 link_with : [libshared],
2820 install_rpath : rootlibexecdir,
2821 install : true,
2822 install_dir : rootbindir)
2823
2824public_programs += executable(
2825 'systemd-notify',
2826 'src/notify/notify.c',
2827 include_directories : includes,
2828 link_with : [libshared],
2829 install_rpath : rootlibexecdir,
2830 install : true,
2831 install_dir : rootbindir)
2832
2833executable(
2834 'systemd-volatile-root',
2835 'src/volatile-root/volatile-root.c',
2836 include_directories : includes,
2837 link_with : [libshared],
2838 install_rpath : rootlibexecdir,
cdf7ad38 2839 install : conf.get('ENABLE_INITRD') == 1,
6164ec4c
ZJS
2840 install_dir : rootlibexecdir)
2841
2842executable(
2843 'systemd-cgroups-agent',
2844 'src/cgroups-agent/cgroups-agent.c',
2845 include_directories : includes,
2846 link_with : [libshared],
2847 install_rpath : rootlibexecdir,
2848 install : true,
2849 install_dir : rootlibexecdir)
2850
2851public_programs += executable(
2852 'systemd-id128',
2853 'src/id128/id128.c',
2854 include_directories : includes,
2855 link_with : [libshared],
2856 install_rpath : rootlibexecdir,
2857 install : true)
2858
2859public_programs += executable(
2860 'systemd-path',
2861 'src/path/path.c',
2862 include_directories : includes,
2863 link_with : [libshared],
2864 install_rpath : rootlibexecdir,
2865 install : true)
2866
2867public_programs += executable(
2868 'systemd-ask-password',
2869 'src/ask-password/ask-password.c',
2870 include_directories : includes,
2871 link_with : [libshared],
2872 install_rpath : rootlibexecdir,
2873 install : true,
2874 install_dir : rootbindir)
2875
2876executable(
2877 'systemd-reply-password',
2878 'src/reply-password/reply-password.c',
2879 include_directories : includes,
2880 link_with : [libshared],
2881 install_rpath : rootlibexecdir,
2882 install : true,
2883 install_dir : rootlibexecdir)
2884
2885public_programs += executable(
2886 'systemd-tty-ask-password-agent',
2887 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2888 include_directories : includes,
2889 link_with : [libshared],
2890 install_rpath : rootlibexecdir,
2891 install : true,
2892 install_dir : rootbindir)
2893
2894public_programs += executable(
2895 'systemd-cgls',
2896 'src/cgls/cgls.c',
2897 include_directories : includes,
2898 link_with : [libshared],
2899 install_rpath : rootlibexecdir,
2900 install : true)
2901
2902public_programs += executable(
2903 'systemd-cgtop',
2904 'src/cgtop/cgtop.c',
2905 include_directories : includes,
2906 link_with : [libshared],
2907 install_rpath : rootlibexecdir,
2908 install : true)
2909
2910executable(
2911 'systemd-initctl',
2912 'src/initctl/initctl.c',
2913 include_directories : includes,
2914 link_with : [libshared],
2915 install_rpath : rootlibexecdir,
6589a569 2916 install : (conf.get('HAVE_SYSV_COMPAT') == 1),
6164ec4c 2917 install_dir : rootlibexecdir)
5c23128d 2918
6164ec4c
ZJS
2919public_programs += executable(
2920 'systemd-mount',
2921 'src/mount/mount-tool.c',
2922 include_directories : includes,
2923 link_with : [libshared],
2924 dependencies: [libmount],
2925 install_rpath : rootlibexecdir,
2926 install : true)
5c23128d 2927
7b76fce1 2928meson.add_install_script(meson_make_symlink,
e17e5ba9 2929 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2930
6164ec4c
ZJS
2931public_programs += executable(
2932 'systemd-run',
2933 'src/run/run.c',
2934 include_directories : includes,
2935 link_with : [libshared],
2936 install_rpath : rootlibexecdir,
2937 install : true)
2938
2939public_programs += executable(
2940 'systemd-stdio-bridge',
2941 'src/stdio-bridge/stdio-bridge.c',
2942 include_directories : includes,
2943 link_with : [libshared],
2944 dependencies : [versiondep],
2945 install_rpath : rootlibexecdir,
2946 install : true)
2947
2948public_programs += executable(
2949 'busctl',
2950 'src/busctl/busctl.c',
2951 'src/busctl/busctl-introspect.c',
2952 'src/busctl/busctl-introspect.h',
2953 include_directories : includes,
2954 link_with : [libshared],
2955 install_rpath : rootlibexecdir,
2956 install : true)
5c23128d 2957
349cc4a5 2958if conf.get('ENABLE_SYSUSERS') == 1
6164ec4c
ZJS
2959 public_programs += executable(
2960 'systemd-sysusers',
2961 'src/sysusers/sysusers.c',
2962 include_directories : includes,
2963 link_with : [libshared],
2964 install_rpath : rootlibexecdir,
2965 install : true,
2966 install_dir : rootbindir)
8ef8f3d5
FB
2967
2968 if have_standalone_binaries
2969 public_programs += executable(
2970 'systemd-sysusers.standalone',
2971 'src/sysusers/sysusers.c',
2972 include_directories : includes,
2973 link_with : [libshared_static,
2974 libbasic,
2975 libbasic_gcrypt,
2976 libsystemd_static,
2977 libjournal_client],
2978 install : true,
2979 install_dir : rootbindir)
2980 endif
5c23128d
ZJS
2981endif
2982
349cc4a5 2983if conf.get('ENABLE_TMPFILES') == 1
6164ec4c
ZJS
2984 exe = executable(
2985 'systemd-tmpfiles',
db64ba81 2986 systemd_tmpfiles_sources,
6164ec4c
ZJS
2987 include_directories : includes,
2988 link_with : [libshared],
2989 dependencies : [libacl],
2990 install_rpath : rootlibexecdir,
2991 install : true,
2992 install_dir : rootbindir)
5a8b1640 2993 public_programs += exe
d9daae55 2994
938be089
ZJS
2995 if want_tests != 'false'
2996 test('test-systemd-tmpfiles',
2997 test_systemd_tmpfiles_py,
2998 # https://github.com/mesonbuild/meson/issues/2681
2999 args : exe.full_path())
3000 endif
db64ba81
FB
3001
3002 if have_standalone_binaries
3003 public_programs += executable(
3004 'systemd-tmpfiles.standalone',
3005 systemd_tmpfiles_sources,
3006 include_directories : includes,
3007 link_with : [libshared_static,
3008 libbasic,
3009 libbasic_gcrypt,
3010 libsystemd_static,
3011 libjournal_client],
3012 dependencies : [libacl],
3013 install : true,
3014 install_dir : rootbindir)
3015 endif
5c23128d
ZJS
3016endif
3017
349cc4a5 3018if conf.get('ENABLE_HWDB') == 1
6164ec4c
ZJS
3019 public_programs += executable(
3020 'systemd-hwdb',
3021 'src/hwdb/hwdb.c',
3022 'src/libsystemd/sd-hwdb/hwdb-internal.h',
3023 include_directories : includes,
3024 link_with : [libudev_static],
3025 install_rpath : udev_rpath,
3026 install : true,
3027 install_dir : rootbindir)
37efbbd8
ZJS
3028endif
3029
349cc4a5 3030if conf.get('ENABLE_QUOTACHECK') == 1
6164ec4c
ZJS
3031 executable(
3032 'systemd-quotacheck',
3033 'src/quotacheck/quotacheck.c',
3034 include_directories : includes,
3035 link_with : [libshared],
3036 install_rpath : rootlibexecdir,
3037 install : true,
3038 install_dir : rootlibexecdir)
3039endif
3040
3041public_programs += executable(
3042 'systemd-socket-proxyd',
3043 'src/socket-proxy/socket-proxyd.c',
3044 include_directories : includes,
3045 link_with : [libshared],
3046 dependencies : [threads],
3047 install_rpath : rootlibexecdir,
3048 install : true,
3049 install_dir : rootlibexecdir)
5c23128d 3050
6164ec4c
ZJS
3051public_programs += executable(
3052 'udevadm',
3053 udevadm_sources,
3054 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
3055 include_directories : includes,
3056 link_with : [libudev_core,
3057 libsystemd_network,
3058 libudev_static],
3059 dependencies : [versiondep,
3060 threads,
3061 libkmod,
3062 libidn,
3063 libacl,
3064 libblkid],
3065 install_rpath : udev_rpath,
3066 install : true,
3067 install_dir : rootbindir)
3068
3069executable(
3070 'systemd-shutdown',
3071 systemd_shutdown_sources,
3072 include_directories : includes,
3073 link_with : [libcore_shared,
3074 libshared],
3075 dependencies : [libmount],
3076 install_rpath : rootlibexecdir,
3077 install : true,
3078 install_dir : rootlibexecdir)
3079
3080executable(
3081 'systemd-update-done',
3082 'src/update-done/update-done.c',
3083 include_directories : includes,
3084 link_with : [libshared],
3085 install_rpath : rootlibexecdir,
3086 install : true,
3087 install_dir : rootlibexecdir)
3088
3089executable(
3090 'systemd-update-utmp',
3091 'src/update-utmp/update-utmp.c',
3092 include_directories : includes,
3093 link_with : [libshared],
3094 dependencies : [libaudit],
3095 install_rpath : rootlibexecdir,
55678b9e 3096 install : (conf.get('ENABLE_UTMP') == 1),
6164ec4c 3097 install_dir : rootlibexecdir)
5c23128d 3098
349cc4a5 3099if conf.get('HAVE_KMOD') == 1
6164ec4c
ZJS
3100 executable(
3101 'systemd-modules-load',
3102 'src/modules-load/modules-load.c',
3103 include_directories : includes,
3104 link_with : [libshared],
3105 dependencies : [libkmod],
3106 install_rpath : rootlibexecdir,
3107 install : true,
3108 install_dir : rootlibexecdir)
94e75a54 3109
37efbbd8
ZJS
3110 meson.add_install_script('sh', '-c',
3111 mkdir_p.format(modulesloaddir))
3112 meson.add_install_script('sh', '-c',
3113 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
3114endif
3115
6164ec4c
ZJS
3116public_programs += executable(
3117 'systemd-nspawn',
3118 systemd_nspawn_sources,
3119 include_directories : includes,
3120 link_with : [libcore_shared,
3121 libnspawn_core,
3122 libshared],
3123 dependencies : [libblkid,
3124 libseccomp],
3125 install_rpath : rootlibexecdir,
3126 install : true)
5c23128d 3127
349cc4a5 3128if conf.get('ENABLE_NETWORKD') == 1
6164ec4c
ZJS
3129 executable(
3130 'systemd-networkd',
3131 systemd_networkd_sources,
3132 include_directories : network_include_dir,
3133 link_with : [libnetworkd_core,
3134 libsystemd_network,
3135 libudev_static,
3136 networkd_link_with],
3137 dependencies : [threads],
3138 install_rpath : rootlibexecdir,
3139 install : true,
3140 install_dir : rootlibexecdir)
3141
3142 executable(
3143 'systemd-networkd-wait-online',
3144 systemd_networkd_wait_online_sources,
3145 include_directories : includes,
3146 link_with : [libnetworkd_core,
3147 networkd_link_with],
3148 install_rpath : rootlibexecdir,
3149 install : true,
3150 install_dir : rootlibexecdir)
3151
3152 public_programs += executable(
3153 'networkctl',
3154 networkctl_sources,
3155 include_directories : includes,
3156 link_with : [libsystemd_network,
3157 networkd_link_with],
3158 install_rpath : rootlibexecdir,
3159 install : true,
3160 install_dir : rootbindir)
3161
3162 exe = executable(
3163 'systemd-network-generator',
3164 network_generator_sources,
3165 include_directories : includes,
3166 link_with : [networkd_link_with],
3167 install_rpath : rootlibexecdir,
3168 install : true,
3169 install_dir : rootlibexecdir)
fbaa1137
ZJS
3170
3171 if want_tests != 'false'
3172 test('test-network-generator-conversion',
3173 test_network_generator_conversion_sh,
3174 # https://github.com/mesonbuild/meson/issues/2681
3175 args : exe.full_path())
3176 endif
dcfe072a 3177endif
e821f6a9 3178
6164ec4c
ZJS
3179executable(
3180 'systemd-sulogin-shell',
3181 ['src/sulogin-shell/sulogin-shell.c'],
3182 include_directories : includes,
3183 link_with : [libshared],
3184 install_rpath : rootlibexecdir,
3185 install : true,
3186 install_dir : rootlibexecdir)
e821f6a9 3187
69e96427
ZJS
3188############################################################
3189
e2d41370
FB
3190custom_target(
3191 'systemd-runtest.env',
3192 output : 'systemd-runtest.env',
3193 command : ['sh', '-c', '{ ' +
1485aacb 3194 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
81e06775 3195 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(project_build_root, 'catalog')) +
e2d41370
FB
3196 '} >@OUTPUT@'],
3197 build_by_default : true)
3198
69e96427 3199foreach tuple : tests
37efbbd8
ZJS
3200 sources = tuple[0]
3201 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
3202 dependencies = tuple[2]
3203 condition = tuple.length() >= 4 ? tuple[3] : ''
3204 type = tuple.length() >= 5 ? tuple[4] : ''
3205 defs = tuple.length() >= 6 ? tuple[5] : []
3206 incs = tuple.length() >= 7 ? tuple[6] : includes
3207 timeout = 30
3208
3209 name = sources[0].split('/')[-1].split('.')[0]
3210 if type.startswith('timeout=')
3211 timeout = type.split('=')[1].to_int()
3212 type = ''
3213 endif
3b2bdd62
ZJS
3214
3215 if condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
3216 exe = executable(
3217 name,
3218 sources,
3219 include_directories : incs,
3220 link_with : link_with,
60722ad7
ZJS
3221 dependencies : [versiondep,
3222 dependencies],
37efbbd8 3223 c_args : defs,
3b2bdd62 3224 build_by_default : want_tests != 'false',
37efbbd8 3225 install_rpath : rootlibexecdir,
7cdd9783
MB
3226 install : install_tests,
3227 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
3228
3229 if type == 'manual'
3230 message('@0@ is a manual test'.format(name))
3231 elif type == 'unsafe' and want_tests != 'unsafe'
3232 message('@0@ is an unsafe test'.format(name))
3b2bdd62 3233 elif want_tests != 'false'
37efbbd8
ZJS
3234 test(name, exe,
3235 env : test_env,
3236 timeout : timeout)
3237 endif
3238 else
3239 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
3240 endif
69e96427
ZJS
3241endforeach
3242
0632b4cd 3243exe = executable(
37efbbd8
ZJS
3244 'test-libsystemd-sym',
3245 test_libsystemd_sym_c,
3246 include_directories : includes,
3247 link_with : [libsystemd],
fd1939fb 3248 build_by_default : want_tests != 'false',
37efbbd8
ZJS
3249 install : install_tests,
3250 install_dir : testsdir)
938be089
ZJS
3251if want_tests != 'false'
3252 test('test-libsystemd-sym', exe)
3253endif
37ab1a25 3254
0632b4cd
ZJS
3255exe = executable(
3256 'test-libsystemd-static-sym',
3257 test_libsystemd_sym_c,
3258 include_directories : includes,
0632b4cd
ZJS
3259 link_with : [install_libsystemd_static],
3260 dependencies : [threads], # threads is already included in dependencies on the library,
3261 # but does not seem to get propagated. Add here as a work-around.
fd1939fb 3262 build_by_default : want_tests != 'false' and static_libsystemd_pic,
20f3d32d 3263 install : install_tests and static_libsystemd_pic,
0632b4cd 3264 install_dir : testsdir)
938be089 3265if want_tests != 'false' and static_libsystemd_pic
0632b4cd
ZJS
3266 test('test-libsystemd-static-sym', exe)
3267endif
37ab1a25 3268
0632b4cd 3269exe = executable(
37efbbd8
ZJS
3270 'test-libudev-sym',
3271 test_libudev_sym_c,
3272 include_directories : includes,
c1cd6743 3273 c_args : '-Wno-deprecated-declarations',
37efbbd8 3274 link_with : [libudev],
fd1939fb 3275 build_by_default : want_tests != 'false',
37efbbd8
ZJS
3276 install : install_tests,
3277 install_dir : testsdir)
938be089
ZJS
3278if want_tests != 'false'
3279 test('test-libudev-sym', exe)
3280endif
0632b4cd
ZJS
3281
3282exe = executable(
3283 'test-libudev-static-sym',
3284 test_libudev_sym_c,
3285 include_directories : includes,
c1cd6743 3286 c_args : '-Wno-deprecated-declarations',
0632b4cd 3287 link_with : [install_libudev_static],
fd1939fb 3288 build_by_default : want_tests != 'false' and static_libudev_pic,
20f3d32d 3289 install : install_tests and static_libudev_pic,
0632b4cd 3290 install_dir : testsdir)
938be089 3291if want_tests != 'false' and static_libudev_pic
0632b4cd
ZJS
3292 test('test-libudev-static-sym', exe)
3293endif
e0bec52f 3294
69e96427 3295############################################################
5c23128d 3296
7db7d5b7
JR
3297fuzzer_exes = []
3298
5996740a 3299if get_option('tests') != 'false'
6164ec4c
ZJS
3300 foreach tuple : fuzzers
3301 sources = tuple[0]
3302 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
3303 dependencies = tuple[2]
3304 defs = tuple.length() >= 4 ? tuple[3] : []
3305 incs = tuple.length() >= 5 ? tuple[4] : includes
3306 link_args = []
3307
3308 if want_ossfuzz
9c5c4677 3309 dependencies += fuzzing_engine
6164ec4c
ZJS
3310 elif want_libfuzzer
3311 if fuzzing_engine.found()
3312 dependencies += fuzzing_engine
3313 else
3314 link_args += ['-fsanitize=fuzzer']
3315 endif
9c5c4677 3316 else
6164ec4c 3317 sources += 'src/fuzz/fuzz-main.c'
9c5c4677 3318 endif
7db7d5b7 3319
6164ec4c 3320 name = sources[0].split('/')[-1].split('.')[0]
7db7d5b7 3321
6164ec4c
ZJS
3322 fuzzer_exes += executable(
3323 name,
3324 sources,
3325 include_directories : [incs, include_directories('src/fuzz')],
3326 link_with : link_with,
3327 dependencies : dependencies,
3328 c_args : defs,
3329 link_args: link_args,
3330 install : false)
3331 endforeach
5996740a 3332endif
7db7d5b7 3333
6164ec4c
ZJS
3334run_target(
3335 'fuzzers',
63058f43 3336 depends : fuzzer_exes,
7db7d5b7
JR
3337 command : ['true'])
3338
3339############################################################
3340
5c23128d
ZJS
3341subdir('sysctl.d')
3342subdir('sysusers.d')
3343subdir('tmpfiles.d')
4f10b807
ZJS
3344subdir('hwdb.d')
3345subdir('units')
e783f957 3346subdir('presets')
5c23128d
ZJS
3347subdir('network')
3348subdir('man')
3349subdir('shell-completion/bash')
3350subdir('shell-completion/zsh')
9e825ebf
FB
3351subdir('docs/sysvinit')
3352subdir('docs/var-log')
5c23128d 3353
5c23128d
ZJS
3354install_subdir('factory/etc',
3355 install_dir : factorydir)
3356
5c23128d
ZJS
3357install_data('xorg/50-systemd-user.sh',
3358 install_dir : xinitrcdir)
582faeb4
DJL
3359install_data('modprobe.d/systemd.conf',
3360 install_dir : modprobedir)
f09eb768 3361install_data('LICENSE.GPL2',
5c23128d 3362 'LICENSE.LGPL2.1',
f09eb768
LP
3363 'NEWS',
3364 'README',
eea98402 3365 'docs/CODING_STYLE.md',
1d1cb168 3366 'docs/DISTRO_PORTING.md',
9e825ebf 3367 'docs/ENVIRONMENT.md',
5425f8a5 3368 'docs/HACKING.md',
9e825ebf 3369 'docs/TRANSIENT-SETTINGS.md',
b6dc0d7d 3370 'docs/TRANSLATORS.md',
9e825ebf 3371 'docs/UIDS-GIDS.md',
5c23128d
ZJS
3372 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
3373 install_dir : docdir)
d68b342b 3374
94e75a54
ZJS
3375meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
3376meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
3377
d68b342b
ZJS
3378############################################################
3379
dd1e33c8 3380check_help = find_program('tools/check-help.sh')
005a29f2
ZJS
3381
3382foreach exec : public_programs
37efbbd8 3383 name = exec.full_path().split('/')[-1]
938be089
ZJS
3384 if want_tests != 'false'
3385 test('check-help-' + name,
dd1e33c8 3386 check_help,
c1cd6743 3387 args : exec.full_path())
938be089 3388 endif
005a29f2
ZJS
3389endforeach
3390
3391############################################################
3392
c6448ee3
ZJS
3393check_directives_sh = find_program('tools/check-directives.sh')
3394
3395if want_tests != 'false'
3396 test('check-directives',
3397 check_directives_sh,
3398 args : project_source_root)
3399endif
3400
3401############################################################
3402
52d4d1d3
ZJS
3403# Enable tests for all supported sanitizers
3404foreach tuple : sanitizers
3405 sanitizer = tuple[0]
3406 build = tuple[1]
b68dfb9e 3407
7a6397d2 3408 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
52d4d1d3
ZJS
3409 prev = ''
3410 foreach p : fuzz_regression_tests
3411 b = p.split('/')[-2]
3412 c = p.split('/')[-1]
3413
3414 name = '@0@:@1@'.format(b, sanitizer)
3415
3416 if name != prev
3417 if want_tests == 'false'
3418 message('Not compiling @0@ because tests is set to false'.format(name))
c56463fd 3419 elif slow_tests or fuzz_tests
52d4d1d3
ZJS
3420 exe = custom_target(
3421 name,
3422 output : name,
3423 depends : build,
3424 command : [env, 'ln', '-fs',
3425 join_paths(build.full_path(), b),
3426 '@OUTPUT@'],
3427 build_by_default : true)
3428 else
c56463fd 3429 message('Not compiling @0@ because slow-tests/fuzz-tests is set to false'.format(name))
52d4d1d3
ZJS
3430 endif
3431 endif
3432 prev = name
3433
c56463fd 3434 if want_tests != 'false' and (slow_tests or fuzz_tests)
52d4d1d3
ZJS
3435 test('@0@:@1@:@2@'.format(b, c, sanitizer),
3436 env,
89767158
EV
3437 env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],
3438 timeout : 60,
52d4d1d3 3439 args : [exe.full_path(),
1485aacb 3440 join_paths(project_source_root, p)])
52d4d1d3
ZJS
3441 endif
3442 endforeach
b68dfb9e
ZJS
3443 endif
3444endforeach
3445
52d4d1d3 3446
b68dfb9e
ZJS
3447############################################################
3448
0700e8ba 3449if git.found()
37efbbd8
ZJS
3450 all_files = run_command(
3451 git,
1485aacb 3452 ['--git-dir=@0@/.git'.format(project_source_root),
37efbbd8
ZJS
3453 'ls-files',
3454 ':/*.[ch]'])
3455 all_files = files(all_files.stdout().split())
d68b342b 3456
e85a690b 3457 custom_target(
0700e8ba 3458 'tags',
e85a690b 3459 output : 'tags',
1485aacb 3460 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
2f09974f 3461 run_target(
0700e8ba 3462 'ctags',
1485aacb 3463 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
d68b342b 3464endif
177929c2
ZJS
3465
3466if git.found()
dd1e33c8 3467 git_contrib_sh = find_program('tools/git-contrib.sh')
a923e085 3468 run_target(
37efbbd8 3469 'git-contrib',
dd1e33c8 3470 command : [git_contrib_sh])
177929c2 3471endif
dd6ab3df
ZJS
3472
3473if git.found()
3474 git_head = run_command(
3475 git,
1485aacb 3476 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3477 'rev-parse', 'HEAD']).stdout().strip()
3478 git_head_short = run_command(
3479 git,
1485aacb 3480 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3481 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3482
3483 run_target(
3484 'git-snapshot',
3485 command : ['git', 'archive',
1485aacb 3486 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
dd6ab3df
ZJS
3487 git_head_short),
3488 '--prefix', 'systemd-@0@/'.format(git_head),
3489 'HEAD'])
3490endif
829257d1
ZJS
3491
3492############################################################
3493
dd1e33c8 3494check_api_docs_sh = find_program('tools/check-api-docs.sh')
51b13863
LP
3495run_target(
3496 'check-api-docs',
3497 depends : [man, libsystemd, libudev],
dd1e33c8 3498 command : [check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
51b13863
LP
3499
3500############################################################
7bc9ea51 3501watchdog_opt = service_watchdog == '' ? 'disabled' : service_watchdog
51b13863 3502
829257d1
ZJS
3503status = [
3504 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3505
2675413e 3506 'split /usr: @0@'.format(split_usr),
157baa87 3507 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
3508 'prefix directory: @0@'.format(prefixdir),
3509 'rootprefix directory: @0@'.format(rootprefixdir),
3510 'sysconf directory: @0@'.format(sysconfdir),
3511 'include directory: @0@'.format(includedir),
3512 'lib directory: @0@'.format(libdir),
3513 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
3514 'SysV init scripts: @0@'.format(sysvinit_path),
3515 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
3516 'PAM modules directory: @0@'.format(pamlibdir),
3517 'PAM configuration directory: @0@'.format(pamconfdir),
3518 'RPM macros directory: @0@'.format(rpmmacrosdir),
3519 'modprobe.d directory: @0@'.format(modprobedir),
3520 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3521 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3522 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3523 'bash completions directory: @0@'.format(bashcompletiondir),
3524 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1 3525 'extra start script: @0@'.format(get_option('rc-local')),
829257d1
ZJS
3526 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3527 get_option('debug-tty')),
3528 'TTY GID: @0@'.format(tty_gid),
ac09340e 3529 'users GID: @0@'.format(substs.get('USERS_GID')),
829257d1
ZJS
3530 'maximum system UID: @0@'.format(system_uid_max),
3531 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
3532 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3533 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3534 'minimum container UID base: @0@'.format(container_uid_base_min),
3535 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 3536 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 3537 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 3538 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 3539 'support URL: @0@'.format(support_url),
afde4574
LP
3540 'nobody user name: @0@'.format(nobody_user),
3541 'nobody group name: @0@'.format(nobody_group),
829257d1 3542 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 3543 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
3544
3545 'default DNSSEC mode: @0@'.format(default_dnssec),
c9299be2 3546 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
3614df05
ZJS
3547 'default mDNS mode: @0@'.format(default_mdns),
3548 'default LLMNR mode: @0@'.format(default_llmnr),
829257d1 3549 'default cgroup hierarchy: @0@'.format(default_hierarchy),
06da5c63 3550 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
8ca9e92c 3551 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
21d0dd5a 3552 'default locale: @0@'.format(default_locale),
5bc655cd 3553 'default user $PATH: @0@'.format(default_user_path_display),
7bc9ea51 3554 'systemd service watchdog: @0@'.format(watchdog_opt)]
829257d1
ZJS
3555
3556alt_dns_servers = '\n '.join(dns_servers.split(' '))
3557alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3558status += [
3559 'default DNS servers: @0@'.format(alt_dns_servers),
3560 'default NTP servers: @0@'.format(alt_ntp_servers)]
3561
3562alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3563 '@@0@'.format(time_epoch)).stdout().strip()
3564status += [
3565 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3566
19d8c9c9 3567status += [
abc8caf7
ZJS
3568 'static libsystemd: @0@'.format(static_libsystemd),
3569 'static libudev: @0@'.format(static_libudev)]
19d8c9c9 3570
829257d1
ZJS
3571# TODO:
3572# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3573# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3574# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3575
349cc4a5 3576if conf.get('ENABLE_EFI') == 1
5a8b1640 3577 status += 'efi arch: @0@'.format(efi_arch)
829257d1
ZJS
3578
3579 if have_gnu_efi
3580 status += [
3581 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
c512dfb9 3582 'EFI CC @0@'.format(' '.join(efi_cc)),
ce4121c6
ZJS
3583 'EFI lds: @0@'.format(efi_lds),
3584 'EFI crt0: @0@'.format(efi_crt0),
359b496f 3585 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
3586 endif
3587endif
3588
3589found = []
3590missing = []
3591
3592foreach tuple : [
3593 ['libcryptsetup'],
3594 ['PAM'],
70a5db58 3595 ['pwquality'],
c757517d 3596 ['libfdisk'],
839fddbe 3597 ['p11kit'],
af4fbd46 3598 ['libfido2'],
829257d1
ZJS
3599 ['AUDIT'],
3600 ['IMA'],
3601 ['AppArmor'],
3602 ['SELinux'],
3603 ['SECCOMP'],
3604 ['SMACK'],
3605 ['zlib'],
3606 ['xz'],
ef5924aa 3607 ['zstd'],
829257d1
ZJS
3608 ['lz4'],
3609 ['bzip2'],
3610 ['ACL'],
3611 ['gcrypt'],
3612 ['qrencode'],
3613 ['microhttpd'],
3614 ['gnutls'],
096cbdce 3615 ['openssl'],
829257d1 3616 ['libcurl'],
d1bf5675 3617 ['idn'],
cdf7ad38 3618 ['initrd'],
87057e24 3619 ['libidn2'],
829257d1
ZJS
3620 ['libidn'],
3621 ['libiptc'],
3622 ['elfutils'],
3623 ['binfmt'],
e594a3b1 3624 ['repart'],
829257d1
ZJS
3625 ['vconsole'],
3626 ['quotacheck'],
3627 ['tmpfiles'],
3628 ['environment.d'],
3629 ['sysusers'],
3630 ['firstboot'],
3631 ['randomseed'],
3632 ['backlight'],
3633 ['rfkill'],
8feca247 3634 ['xdg-autostart'],
829257d1
ZJS
3635 ['logind'],
3636 ['machined'],
61d0578b 3637 ['portabled'],
d093b62c 3638 ['userdb'],
70a5db58 3639 ['homed'],
829257d1
ZJS
3640 ['importd'],
3641 ['hostnamed'],
3642 ['timedated'],
3643 ['timesyncd'],
3644 ['localed'],
3645 ['networkd'],
a7456af5 3646 ['resolve'],
096cbdce
IT
3647 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3648 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
829257d1 3649 ['coredump'],
9b4abc69 3650 ['pstore'],
829257d1
ZJS
3651 ['polkit'],
3652 ['legacy pkla', install_polkit_pkla],
3653 ['efi'],
3654 ['gnu-efi', have_gnu_efi],
3655 ['kmod'],
3656 ['xkbcommon'],
c4c978a0 3657 ['pcre2'],
829257d1
ZJS
3658 ['blkid'],
3659 ['dbus'],
3660 ['glib'],
6bd2bc8e
ZJS
3661 ['nss-myhostname'],
3662 ['nss-mymachines'],
3663 ['nss-resolve'],
3664 ['nss-systemd'],
829257d1
ZJS
3665 ['hwdb'],
3666 ['tpm'],
3667 ['man pages', want_man],
3668 ['html pages', want_html],
3669 ['man page indices', want_man and have_lxml],
829257d1
ZJS
3670 ['SysV compat'],
3671 ['utmp'],
3672 ['ldconfig'],
3673 ['hibernate'],
3674 ['adm group', get_option('adm-group')],
3675 ['wheel group', get_option('wheel-group')],
b14e1b43 3676 ['gshadow'],
829257d1
ZJS
3677 ['debug hashmap'],
3678 ['debug mmap cache'],
d6601495 3679 ['debug siphash'],
d18cb393 3680 ['valgrind', conf.get('VALGRIND') == 1],
fd5dec9a 3681 ['trace logging', conf.get('LOG_TRACE') == 1],
b6261be8 3682 ['install tests', install_tests],
19d8c9c9
LP
3683 ['link-udev-shared', get_option('link-udev-shared')],
3684 ['link-systemctl-shared', get_option('link-systemctl-shared')],
5ac8b50d 3685 ['link-networkd-shared', get_option('link-networkd-shared')],
fd74a13e 3686 ['link-timesyncd-shared', get_option('link-timesyncd-shared')],
f30bf4d9 3687 ['kernel-install', get_option('kernel-install')],
b3259a6e 3688 ['systemd-analyze', conf.get('ENABLE_ANALYZE') == 1],
829257d1
ZJS
3689]
3690
af4d7860
ZJS
3691 if tuple.length() >= 2
3692 cond = tuple[1]
3693 else
829257d1
ZJS
3694 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3695 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 3696 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
3697 endif
3698 if cond
5a8b1640 3699 found += tuple[0]
829257d1 3700 else
5a8b1640 3701 missing += tuple[0]
829257d1
ZJS
3702 endif
3703endforeach
3704
3705status += [
9d39c1bf 3706 '',
829257d1 3707 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
3708 '',
3709 'disabled features: @0@'.format(', '.join(missing)),
3710 '']
829257d1 3711message('\n '.join(status))
9a8e64b0
ZJS
3712
3713if rootprefixdir != rootprefix_default
8ea9fad7
YW
3714 warning('\n' +
3715 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3716 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3717 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 3718endif