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