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