]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
man: document systemd-oomd and related items
[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)
5c616ecf
AZ
2674
2675 public_programs += executable(
2676 'oomctl',
2677 oomctl_sources,
2678 include_directories : includes,
2679 link_with : [libshared],
2680 dependencies : [],
2681 install_rpath : rootlibexecdir,
2682 install : true,
2683 install_dir : rootbindir)
9de5e321
AZ
2684endif
2685
349cc4a5 2686if conf.get('ENABLE_BINFMT') == 1
6164ec4c
ZJS
2687 public_programs += executable(
2688 'systemd-binfmt',
2689 'src/binfmt/binfmt.c',
2690 include_directories : includes,
2691 link_with : [libshared],
2692 install_rpath : rootlibexecdir,
2693 install : true,
2694 install_dir : rootlibexecdir)
37efbbd8
ZJS
2695
2696 meson.add_install_script('sh', '-c',
2697 mkdir_p.format(binfmtdir))
2698 meson.add_install_script('sh', '-c',
2699 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2700endif
2701
e594a3b1 2702if conf.get('ENABLE_REPART') == 1
6164ec4c
ZJS
2703 exe = executable(
2704 'systemd-repart',
2705 systemd_repart_sources,
2706 include_directories : includes,
2707 link_with : [libshared],
2708 dependencies : [threads,
6164ec4c
ZJS
2709 libblkid,
2710 libfdisk,
2711 libopenssl],
2712 install_rpath : rootlibexecdir,
2713 install : true,
2714 install_dir : rootbindir)
2d2d0a57 2715 public_programs += exe
e29e4d57
ZJS
2716
2717 if want_tests != 'false'
2718 test('test-repart',
2719 test_repart_sh,
2720 args : exe.full_path())
2721 endif
e594a3b1
LP
2722endif
2723
349cc4a5 2724if conf.get('ENABLE_VCONSOLE') == 1
6164ec4c
ZJS
2725 executable(
2726 'systemd-vconsole-setup',
2727 'src/vconsole/vconsole-setup.c',
2728 include_directories : includes,
2729 link_with : [libshared],
2730 install_rpath : rootlibexecdir,
2731 install : true,
2732 install_dir : rootlibexecdir)
5c23128d
ZJS
2733endif
2734
349cc4a5 2735if conf.get('ENABLE_RANDOMSEED') == 1
6164ec4c
ZJS
2736 executable(
2737 'systemd-random-seed',
2738 'src/random-seed/random-seed.c',
2739 include_directories : includes,
2740 link_with : [libshared],
2741 install_rpath : rootlibexecdir,
2742 install : true,
2743 install_dir : rootlibexecdir)
5c23128d
ZJS
2744endif
2745
349cc4a5 2746if conf.get('ENABLE_FIRSTBOOT') == 1
6164ec4c
ZJS
2747 executable(
2748 'systemd-firstboot',
2749 'src/firstboot/firstboot.c',
2750 include_directories : includes,
2751 link_with : [libshared],
2752 dependencies : [libcrypt],
2753 install_rpath : rootlibexecdir,
2754 install : true,
2755 install_dir : rootbindir)
2756endif
2757
2758executable(
2759 'systemd-remount-fs',
2760 'src/remount-fs/remount-fs.c',
2761 include_directories : includes,
2762 link_with : [libcore_shared,
2763 libshared],
2764 install_rpath : rootlibexecdir,
2765 install : true,
2766 install_dir : rootlibexecdir)
5c23128d 2767
6164ec4c
ZJS
2768executable(
2769 'systemd-machine-id-setup',
2770 'src/machine-id-setup/machine-id-setup-main.c',
2771 include_directories : includes,
2772 link_with : [libcore_shared,
2773 libshared],
2774 install_rpath : rootlibexecdir,
2775 install : true,
2776 install_dir : rootbindir)
5c23128d 2777
6164ec4c
ZJS
2778executable(
2779 'systemd-fsck',
2780 'src/fsck/fsck.c',
2781 include_directories : includes,
2782 link_with : [libshared],
2783 install_rpath : rootlibexecdir,
2784 install : true,
2785 install_dir : rootlibexecdir)
5c23128d 2786
80750adb
ZJS
2787executable('systemd-growfs',
2788 'src/partition/growfs.c',
2789 include_directories : includes,
2790 link_with : [libshared],
2791 install_rpath : rootlibexecdir,
2792 install : true,
2793 install_dir : rootlibexecdir)
2794
6164ec4c
ZJS
2795executable(
2796 'systemd-makefs',
2797 'src/partition/makefs.c',
2798 include_directories : includes,
2799 link_with : [libshared],
2800 install_rpath : rootlibexecdir,
2801 install : true,
2802 install_dir : rootlibexecdir)
b7f28ac5 2803
6164ec4c
ZJS
2804executable(
2805 'systemd-sleep',
2806 'src/sleep/sleep.c',
2807 include_directories : includes,
2808 link_with : [libshared],
2809 install_rpath : rootlibexecdir,
2810 install : true,
2811 install_dir : rootlibexecdir)
5c23128d 2812
d25e127d
YW
2813install_data('src/sleep/sleep.conf',
2814 install_dir : pkgsysconfdir)
2815
6164ec4c
ZJS
2816public_programs += executable(
2817 'systemd-sysctl',
2818 'src/sysctl/sysctl.c',
2819 include_directories : includes,
2820 link_with : [libshared],
2821 install_rpath : rootlibexecdir,
2822 install : true,
2823 install_dir : rootlibexecdir)
5c23128d 2824
6164ec4c
ZJS
2825executable(
2826 'systemd-ac-power',
2827 'src/ac-power/ac-power.c',
2828 include_directories : includes,
2829 link_with : [libshared],
2830 install_rpath : rootlibexecdir,
2831 install : true,
2832 install_dir : rootlibexecdir)
5c23128d 2833
6164ec4c
ZJS
2834public_programs += executable(
2835 'systemd-detect-virt',
2836 'src/detect-virt/detect-virt.c',
2837 include_directories : includes,
2838 link_with : [libshared],
2839 install_rpath : rootlibexecdir,
2840 install : true)
5c23128d 2841
6164ec4c
ZJS
2842public_programs += executable(
2843 'systemd-delta',
2844 'src/delta/delta.c',
2845 include_directories : includes,
2846 link_with : [libshared],
2847 install_rpath : rootlibexecdir,
2848 install : true)
5c23128d 2849
6164ec4c
ZJS
2850public_programs += executable(
2851 'systemd-escape',
2852 'src/escape/escape.c',
2853 include_directories : includes,
2854 link_with : [libshared],
2855 install_rpath : rootlibexecdir,
2856 install : true,
2857 install_dir : rootbindir)
2858
2859public_programs += executable(
2860 'systemd-notify',
2861 'src/notify/notify.c',
2862 include_directories : includes,
2863 link_with : [libshared],
2864 install_rpath : rootlibexecdir,
2865 install : true,
2866 install_dir : rootbindir)
2867
2868executable(
2869 'systemd-volatile-root',
2870 'src/volatile-root/volatile-root.c',
2871 include_directories : includes,
2872 link_with : [libshared],
2873 install_rpath : rootlibexecdir,
cdf7ad38 2874 install : conf.get('ENABLE_INITRD') == 1,
6164ec4c
ZJS
2875 install_dir : rootlibexecdir)
2876
2877executable(
2878 'systemd-cgroups-agent',
2879 'src/cgroups-agent/cgroups-agent.c',
2880 include_directories : includes,
2881 link_with : [libshared],
2882 install_rpath : rootlibexecdir,
2883 install : true,
2884 install_dir : rootlibexecdir)
2885
2886public_programs += executable(
2887 'systemd-id128',
2888 'src/id128/id128.c',
2889 include_directories : includes,
2890 link_with : [libshared],
2891 install_rpath : rootlibexecdir,
2892 install : true)
2893
2894public_programs += executable(
2895 'systemd-path',
2896 'src/path/path.c',
2897 include_directories : includes,
2898 link_with : [libshared],
2899 install_rpath : rootlibexecdir,
2900 install : true)
2901
2902public_programs += executable(
2903 'systemd-ask-password',
2904 'src/ask-password/ask-password.c',
2905 include_directories : includes,
2906 link_with : [libshared],
2907 install_rpath : rootlibexecdir,
2908 install : true,
2909 install_dir : rootbindir)
2910
2911executable(
2912 'systemd-reply-password',
2913 'src/reply-password/reply-password.c',
2914 include_directories : includes,
2915 link_with : [libshared],
2916 install_rpath : rootlibexecdir,
2917 install : true,
2918 install_dir : rootlibexecdir)
2919
2920public_programs += executable(
2921 'systemd-tty-ask-password-agent',
2922 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2923 include_directories : includes,
2924 link_with : [libshared],
2925 install_rpath : rootlibexecdir,
2926 install : true,
2927 install_dir : rootbindir)
2928
2929public_programs += executable(
2930 'systemd-cgls',
2931 'src/cgls/cgls.c',
2932 include_directories : includes,
2933 link_with : [libshared],
2934 install_rpath : rootlibexecdir,
2935 install : true)
2936
2937public_programs += executable(
2938 'systemd-cgtop',
2939 'src/cgtop/cgtop.c',
2940 include_directories : includes,
2941 link_with : [libshared],
2942 install_rpath : rootlibexecdir,
2943 install : true)
2944
2945executable(
2946 'systemd-initctl',
2947 'src/initctl/initctl.c',
2948 include_directories : includes,
2949 link_with : [libshared],
2950 install_rpath : rootlibexecdir,
6589a569 2951 install : (conf.get('HAVE_SYSV_COMPAT') == 1),
6164ec4c 2952 install_dir : rootlibexecdir)
5c23128d 2953
6164ec4c
ZJS
2954public_programs += executable(
2955 'systemd-mount',
2956 'src/mount/mount-tool.c',
2957 include_directories : includes,
2958 link_with : [libshared],
2959 dependencies: [libmount],
2960 install_rpath : rootlibexecdir,
2961 install : true)
5c23128d 2962
7b76fce1 2963meson.add_install_script(meson_make_symlink,
e17e5ba9 2964 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2965
6164ec4c
ZJS
2966public_programs += executable(
2967 'systemd-run',
2968 'src/run/run.c',
2969 include_directories : includes,
2970 link_with : [libshared],
2971 install_rpath : rootlibexecdir,
2972 install : true)
2973
2974public_programs += executable(
2975 'systemd-stdio-bridge',
2976 'src/stdio-bridge/stdio-bridge.c',
2977 include_directories : includes,
2978 link_with : [libshared],
2979 dependencies : [versiondep],
2980 install_rpath : rootlibexecdir,
2981 install : true)
2982
2983public_programs += executable(
2984 'busctl',
2985 'src/busctl/busctl.c',
2986 'src/busctl/busctl-introspect.c',
2987 'src/busctl/busctl-introspect.h',
2988 include_directories : includes,
2989 link_with : [libshared],
2990 install_rpath : rootlibexecdir,
2991 install : true)
5c23128d 2992
bd7e6aa7
ZJS
2993if enable_sysusers
2994 exe = executable(
6164ec4c
ZJS
2995 'systemd-sysusers',
2996 'src/sysusers/sysusers.c',
2997 include_directories : includes,
2998 link_with : [libshared],
2999 install_rpath : rootlibexecdir,
3000 install : true,
3001 install_dir : rootbindir)
bd7e6aa7
ZJS
3002 public_programs += exe
3003
3004 if want_tests != 'false'
3005 test('test-sysusers',
3006 test_sysusers_sh,
3007 # https://github.com/mesonbuild/meson/issues/2681
3008 args : exe.full_path())
3009 endif
8ef8f3d5
FB
3010
3011 if have_standalone_binaries
bd7e6aa7 3012 exe = executable(
8ef8f3d5
FB
3013 'systemd-sysusers.standalone',
3014 'src/sysusers/sysusers.c',
3015 include_directories : includes,
3016 link_with : [libshared_static,
3017 libbasic,
3018 libbasic_gcrypt,
3019 libsystemd_static,
3020 libjournal_client],
3021 install : true,
3022 install_dir : rootbindir)
bd7e6aa7
ZJS
3023 public_programs += exe
3024
3025 if want_tests != 'false'
3026 test('test-sysusers.standalone',
3027 test_sysusers_sh,
3028 # https://github.com/mesonbuild/meson/issues/2681
3029 args : exe.full_path())
3030 endif
8ef8f3d5 3031 endif
5c23128d
ZJS
3032endif
3033
349cc4a5 3034if conf.get('ENABLE_TMPFILES') == 1
6164ec4c
ZJS
3035 exe = executable(
3036 'systemd-tmpfiles',
db64ba81 3037 systemd_tmpfiles_sources,
6164ec4c
ZJS
3038 include_directories : includes,
3039 link_with : [libshared],
3040 dependencies : [libacl],
3041 install_rpath : rootlibexecdir,
3042 install : true,
3043 install_dir : rootbindir)
5a8b1640 3044 public_programs += exe
d9daae55 3045
938be089
ZJS
3046 if want_tests != 'false'
3047 test('test-systemd-tmpfiles',
3048 test_systemd_tmpfiles_py,
3049 # https://github.com/mesonbuild/meson/issues/2681
3050 args : exe.full_path())
3051 endif
db64ba81
FB
3052
3053 if have_standalone_binaries
3054 public_programs += executable(
3055 'systemd-tmpfiles.standalone',
3056 systemd_tmpfiles_sources,
3057 include_directories : includes,
3058 link_with : [libshared_static,
3059 libbasic,
3060 libbasic_gcrypt,
3061 libsystemd_static,
3062 libjournal_client],
3063 dependencies : [libacl],
3064 install : true,
3065 install_dir : rootbindir)
3066 endif
5c23128d
ZJS
3067endif
3068
349cc4a5 3069if conf.get('ENABLE_HWDB') == 1
6164ec4c
ZJS
3070 public_programs += executable(
3071 'systemd-hwdb',
3072 'src/hwdb/hwdb.c',
3073 'src/libsystemd/sd-hwdb/hwdb-internal.h',
3074 include_directories : includes,
3075 link_with : [libudev_static],
3076 install_rpath : udev_rpath,
3077 install : true,
3078 install_dir : rootbindir)
37efbbd8
ZJS
3079endif
3080
349cc4a5 3081if conf.get('ENABLE_QUOTACHECK') == 1
6164ec4c
ZJS
3082 executable(
3083 'systemd-quotacheck',
3084 'src/quotacheck/quotacheck.c',
3085 include_directories : includes,
3086 link_with : [libshared],
3087 install_rpath : rootlibexecdir,
3088 install : true,
3089 install_dir : rootlibexecdir)
3090endif
3091
3092public_programs += executable(
3093 'systemd-socket-proxyd',
3094 'src/socket-proxy/socket-proxyd.c',
3095 include_directories : includes,
3096 link_with : [libshared],
3097 dependencies : [threads],
3098 install_rpath : rootlibexecdir,
3099 install : true,
3100 install_dir : rootlibexecdir)
5c23128d 3101
6164ec4c
ZJS
3102public_programs += executable(
3103 'udevadm',
3104 udevadm_sources,
3105 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
3106 include_directories : includes,
3107 link_with : [libudev_core,
3108 libsystemd_network,
3109 libudev_static],
3110 dependencies : [versiondep,
3111 threads,
3112 libkmod,
3113 libidn,
3114 libacl,
3115 libblkid],
3116 install_rpath : udev_rpath,
3117 install : true,
3118 install_dir : rootbindir)
3119
3120executable(
3121 'systemd-shutdown',
3122 systemd_shutdown_sources,
3123 include_directories : includes,
3124 link_with : [libcore_shared,
3125 libshared],
3126 dependencies : [libmount],
3127 install_rpath : rootlibexecdir,
3128 install : true,
3129 install_dir : rootlibexecdir)
3130
3131executable(
3132 'systemd-update-done',
3133 'src/update-done/update-done.c',
3134 include_directories : includes,
3135 link_with : [libshared],
3136 install_rpath : rootlibexecdir,
3137 install : true,
3138 install_dir : rootlibexecdir)
3139
3140executable(
3141 'systemd-update-utmp',
3142 'src/update-utmp/update-utmp.c',
3143 include_directories : includes,
3144 link_with : [libshared],
3145 dependencies : [libaudit],
3146 install_rpath : rootlibexecdir,
55678b9e 3147 install : (conf.get('ENABLE_UTMP') == 1),
6164ec4c 3148 install_dir : rootlibexecdir)
5c23128d 3149
349cc4a5 3150if conf.get('HAVE_KMOD') == 1
6164ec4c
ZJS
3151 executable(
3152 'systemd-modules-load',
3153 'src/modules-load/modules-load.c',
3154 include_directories : includes,
3155 link_with : [libshared],
3156 dependencies : [libkmod],
3157 install_rpath : rootlibexecdir,
3158 install : true,
3159 install_dir : rootlibexecdir)
94e75a54 3160
37efbbd8
ZJS
3161 meson.add_install_script('sh', '-c',
3162 mkdir_p.format(modulesloaddir))
3163 meson.add_install_script('sh', '-c',
3164 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
3165endif
3166
6164ec4c
ZJS
3167public_programs += executable(
3168 'systemd-nspawn',
3169 systemd_nspawn_sources,
3170 include_directories : includes,
3171 link_with : [libcore_shared,
3172 libnspawn_core,
3173 libshared],
3174 dependencies : [libblkid,
3175 libseccomp],
3176 install_rpath : rootlibexecdir,
3177 install : true)
5c23128d 3178
349cc4a5 3179if conf.get('ENABLE_NETWORKD') == 1
6164ec4c
ZJS
3180 executable(
3181 'systemd-networkd',
3182 systemd_networkd_sources,
3183 include_directories : network_include_dir,
3184 link_with : [libnetworkd_core,
3185 libsystemd_network,
3186 libudev_static,
3187 networkd_link_with],
3188 dependencies : [threads],
3189 install_rpath : rootlibexecdir,
3190 install : true,
3191 install_dir : rootlibexecdir)
3192
3193 executable(
3194 'systemd-networkd-wait-online',
3195 systemd_networkd_wait_online_sources,
3196 include_directories : includes,
3197 link_with : [libnetworkd_core,
3198 networkd_link_with],
3199 install_rpath : rootlibexecdir,
3200 install : true,
3201 install_dir : rootlibexecdir)
3202
3203 public_programs += executable(
3204 'networkctl',
3205 networkctl_sources,
3206 include_directories : includes,
3207 link_with : [libsystemd_network,
3208 networkd_link_with],
3209 install_rpath : rootlibexecdir,
3210 install : true,
3211 install_dir : rootbindir)
3212
3213 exe = executable(
3214 'systemd-network-generator',
3215 network_generator_sources,
3216 include_directories : includes,
3217 link_with : [networkd_link_with],
3218 install_rpath : rootlibexecdir,
3219 install : true,
3220 install_dir : rootlibexecdir)
fbaa1137
ZJS
3221
3222 if want_tests != 'false'
3223 test('test-network-generator-conversion',
3224 test_network_generator_conversion_sh,
3225 # https://github.com/mesonbuild/meson/issues/2681
3226 args : exe.full_path())
3227 endif
dcfe072a 3228endif
e821f6a9 3229
6164ec4c
ZJS
3230executable(
3231 'systemd-sulogin-shell',
3232 ['src/sulogin-shell/sulogin-shell.c'],
3233 include_directories : includes,
3234 link_with : [libshared],
3235 install_rpath : rootlibexecdir,
3236 install : true,
3237 install_dir : rootlibexecdir)
e821f6a9 3238
69e96427
ZJS
3239############################################################
3240
e2d41370
FB
3241custom_target(
3242 'systemd-runtest.env',
3243 output : 'systemd-runtest.env',
3244 command : ['sh', '-c', '{ ' +
1485aacb 3245 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
81e06775 3246 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(project_build_root, 'catalog')) +
e2d41370
FB
3247 '} >@OUTPUT@'],
3248 build_by_default : true)
3249
69e96427 3250foreach tuple : tests
37efbbd8
ZJS
3251 sources = tuple[0]
3252 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
3253 dependencies = tuple[2]
3254 condition = tuple.length() >= 4 ? tuple[3] : ''
3255 type = tuple.length() >= 5 ? tuple[4] : ''
3256 defs = tuple.length() >= 6 ? tuple[5] : []
3257 incs = tuple.length() >= 7 ? tuple[6] : includes
3258 timeout = 30
3259
3260 name = sources[0].split('/')[-1].split('.')[0]
3261 if type.startswith('timeout=')
3262 timeout = type.split('=')[1].to_int()
3263 type = ''
3264 endif
3b2bdd62
ZJS
3265
3266 if condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
3267 exe = executable(
3268 name,
3269 sources,
3270 include_directories : incs,
3271 link_with : link_with,
60722ad7
ZJS
3272 dependencies : [versiondep,
3273 dependencies],
37efbbd8 3274 c_args : defs,
3b2bdd62 3275 build_by_default : want_tests != 'false',
37efbbd8 3276 install_rpath : rootlibexecdir,
7cdd9783
MB
3277 install : install_tests,
3278 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
3279
3280 if type == 'manual'
3281 message('@0@ is a manual test'.format(name))
3282 elif type == 'unsafe' and want_tests != 'unsafe'
3283 message('@0@ is an unsafe test'.format(name))
3b2bdd62 3284 elif want_tests != 'false'
37efbbd8
ZJS
3285 test(name, exe,
3286 env : test_env,
3287 timeout : timeout)
3288 endif
3289 else
3290 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
3291 endif
69e96427
ZJS
3292endforeach
3293
0632b4cd 3294exe = executable(
37efbbd8
ZJS
3295 'test-libsystemd-sym',
3296 test_libsystemd_sym_c,
3297 include_directories : includes,
3298 link_with : [libsystemd],
fd1939fb 3299 build_by_default : want_tests != 'false',
37efbbd8
ZJS
3300 install : install_tests,
3301 install_dir : testsdir)
938be089
ZJS
3302if want_tests != 'false'
3303 test('test-libsystemd-sym', exe)
3304endif
37ab1a25 3305
0632b4cd
ZJS
3306exe = executable(
3307 'test-libsystemd-static-sym',
3308 test_libsystemd_sym_c,
3309 include_directories : includes,
0632b4cd
ZJS
3310 link_with : [install_libsystemd_static],
3311 dependencies : [threads], # threads is already included in dependencies on the library,
3312 # but does not seem to get propagated. Add here as a work-around.
fd1939fb 3313 build_by_default : want_tests != 'false' and static_libsystemd_pic,
20f3d32d 3314 install : install_tests and static_libsystemd_pic,
0632b4cd 3315 install_dir : testsdir)
938be089 3316if want_tests != 'false' and static_libsystemd_pic
0632b4cd
ZJS
3317 test('test-libsystemd-static-sym', exe)
3318endif
37ab1a25 3319
0632b4cd 3320exe = executable(
37efbbd8
ZJS
3321 'test-libudev-sym',
3322 test_libudev_sym_c,
3323 include_directories : includes,
c1cd6743 3324 c_args : '-Wno-deprecated-declarations',
37efbbd8 3325 link_with : [libudev],
fd1939fb 3326 build_by_default : want_tests != 'false',
37efbbd8
ZJS
3327 install : install_tests,
3328 install_dir : testsdir)
938be089
ZJS
3329if want_tests != 'false'
3330 test('test-libudev-sym', exe)
3331endif
0632b4cd
ZJS
3332
3333exe = executable(
3334 'test-libudev-static-sym',
3335 test_libudev_sym_c,
3336 include_directories : includes,
c1cd6743 3337 c_args : '-Wno-deprecated-declarations',
0632b4cd 3338 link_with : [install_libudev_static],
fd1939fb 3339 build_by_default : want_tests != 'false' and static_libudev_pic,
20f3d32d 3340 install : install_tests and static_libudev_pic,
0632b4cd 3341 install_dir : testsdir)
938be089 3342if want_tests != 'false' and static_libudev_pic
0632b4cd
ZJS
3343 test('test-libudev-static-sym', exe)
3344endif
e0bec52f 3345
69e96427 3346############################################################
5c23128d 3347
7db7d5b7
JR
3348fuzzer_exes = []
3349
5996740a 3350if get_option('tests') != 'false'
6164ec4c
ZJS
3351 foreach tuple : fuzzers
3352 sources = tuple[0]
3353 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
3354 dependencies = tuple[2]
3355 defs = tuple.length() >= 4 ? tuple[3] : []
3356 incs = tuple.length() >= 5 ? tuple[4] : includes
3357 link_args = []
3358
3359 if want_ossfuzz
9c5c4677 3360 dependencies += fuzzing_engine
6164ec4c
ZJS
3361 elif want_libfuzzer
3362 if fuzzing_engine.found()
3363 dependencies += fuzzing_engine
3364 else
3365 link_args += ['-fsanitize=fuzzer']
3366 endif
9c5c4677 3367 else
6164ec4c 3368 sources += 'src/fuzz/fuzz-main.c'
9c5c4677 3369 endif
7db7d5b7 3370
6164ec4c 3371 name = sources[0].split('/')[-1].split('.')[0]
7db7d5b7 3372
6164ec4c
ZJS
3373 fuzzer_exes += executable(
3374 name,
3375 sources,
3376 include_directories : [incs, include_directories('src/fuzz')],
3377 link_with : link_with,
3378 dependencies : dependencies,
3379 c_args : defs,
3380 link_args: link_args,
3381 install : false)
3382 endforeach
5996740a 3383endif
7db7d5b7 3384
6164ec4c
ZJS
3385run_target(
3386 'fuzzers',
63058f43 3387 depends : fuzzer_exes,
7db7d5b7
JR
3388 command : ['true'])
3389
3390############################################################
3391
5c23128d
ZJS
3392subdir('sysctl.d')
3393subdir('sysusers.d')
3394subdir('tmpfiles.d')
4f10b807
ZJS
3395subdir('hwdb.d')
3396subdir('units')
e783f957 3397subdir('presets')
5c23128d
ZJS
3398subdir('network')
3399subdir('man')
3400subdir('shell-completion/bash')
3401subdir('shell-completion/zsh')
9e825ebf
FB
3402subdir('docs/sysvinit')
3403subdir('docs/var-log')
5c23128d 3404
5c23128d
ZJS
3405install_subdir('factory/etc',
3406 install_dir : factorydir)
3407
5c23128d
ZJS
3408install_data('xorg/50-systemd-user.sh',
3409 install_dir : xinitrcdir)
582faeb4
DJL
3410install_data('modprobe.d/systemd.conf',
3411 install_dir : modprobedir)
f09eb768 3412install_data('LICENSE.GPL2',
5c23128d 3413 'LICENSE.LGPL2.1',
f09eb768
LP
3414 'NEWS',
3415 'README',
eea98402 3416 'docs/CODING_STYLE.md',
1d1cb168 3417 'docs/DISTRO_PORTING.md',
9e825ebf 3418 'docs/ENVIRONMENT.md',
5425f8a5 3419 'docs/HACKING.md',
9e825ebf 3420 'docs/TRANSIENT-SETTINGS.md',
b6dc0d7d 3421 'docs/TRANSLATORS.md',
9e825ebf 3422 'docs/UIDS-GIDS.md',
5c23128d
ZJS
3423 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
3424 install_dir : docdir)
d68b342b 3425
94e75a54
ZJS
3426meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
3427meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
3428
d68b342b
ZJS
3429############################################################
3430
dd1e33c8 3431check_help = find_program('tools/check-help.sh')
005a29f2
ZJS
3432
3433foreach exec : public_programs
37efbbd8 3434 name = exec.full_path().split('/')[-1]
938be089
ZJS
3435 if want_tests != 'false'
3436 test('check-help-' + name,
dd1e33c8 3437 check_help,
c1cd6743 3438 args : exec.full_path())
938be089 3439 endif
005a29f2
ZJS
3440endforeach
3441
3442############################################################
3443
c6448ee3
ZJS
3444check_directives_sh = find_program('tools/check-directives.sh')
3445
3446if want_tests != 'false'
3447 test('check-directives',
3448 check_directives_sh,
3449 args : project_source_root)
3450endif
3451
3452############################################################
3453
52d4d1d3
ZJS
3454# Enable tests for all supported sanitizers
3455foreach tuple : sanitizers
3456 sanitizer = tuple[0]
3457 build = tuple[1]
b68dfb9e 3458
7a6397d2 3459 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
52d4d1d3
ZJS
3460 prev = ''
3461 foreach p : fuzz_regression_tests
3462 b = p.split('/')[-2]
3463 c = p.split('/')[-1]
3464
3465 name = '@0@:@1@'.format(b, sanitizer)
3466
3467 if name != prev
3468 if want_tests == 'false'
3469 message('Not compiling @0@ because tests is set to false'.format(name))
c56463fd 3470 elif slow_tests or fuzz_tests
52d4d1d3
ZJS
3471 exe = custom_target(
3472 name,
3473 output : name,
3474 depends : build,
3475 command : [env, 'ln', '-fs',
3476 join_paths(build.full_path(), b),
3477 '@OUTPUT@'],
3478 build_by_default : true)
3479 else
c56463fd 3480 message('Not compiling @0@ because slow-tests/fuzz-tests is set to false'.format(name))
52d4d1d3
ZJS
3481 endif
3482 endif
3483 prev = name
3484
c56463fd 3485 if want_tests != 'false' and (slow_tests or fuzz_tests)
52d4d1d3
ZJS
3486 test('@0@:@1@:@2@'.format(b, c, sanitizer),
3487 env,
89767158
EV
3488 env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],
3489 timeout : 60,
52d4d1d3 3490 args : [exe.full_path(),
1485aacb 3491 join_paths(project_source_root, p)])
52d4d1d3
ZJS
3492 endif
3493 endforeach
b68dfb9e
ZJS
3494 endif
3495endforeach
3496
52d4d1d3 3497
b68dfb9e
ZJS
3498############################################################
3499
0700e8ba 3500if git.found()
37efbbd8
ZJS
3501 all_files = run_command(
3502 git,
1485aacb 3503 ['--git-dir=@0@/.git'.format(project_source_root),
37efbbd8
ZJS
3504 'ls-files',
3505 ':/*.[ch]'])
3506 all_files = files(all_files.stdout().split())
d68b342b 3507
e85a690b 3508 custom_target(
0700e8ba 3509 'tags',
e85a690b 3510 output : 'tags',
1485aacb 3511 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
2f09974f 3512 run_target(
0700e8ba 3513 'ctags',
1485aacb 3514 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
d68b342b 3515endif
177929c2
ZJS
3516
3517if git.found()
dd1e33c8 3518 git_contrib_sh = find_program('tools/git-contrib.sh')
a923e085 3519 run_target(
37efbbd8 3520 'git-contrib',
dd1e33c8 3521 command : [git_contrib_sh])
177929c2 3522endif
dd6ab3df
ZJS
3523
3524if git.found()
3525 git_head = run_command(
3526 git,
1485aacb 3527 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3528 'rev-parse', 'HEAD']).stdout().strip()
3529 git_head_short = run_command(
3530 git,
1485aacb 3531 ['--git-dir=@0@/.git'.format(project_source_root),
dd6ab3df
ZJS
3532 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3533
3534 run_target(
3535 'git-snapshot',
3536 command : ['git', 'archive',
1485aacb 3537 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
dd6ab3df
ZJS
3538 git_head_short),
3539 '--prefix', 'systemd-@0@/'.format(git_head),
3540 'HEAD'])
3541endif
829257d1
ZJS
3542
3543############################################################
3544
dd1e33c8 3545check_api_docs_sh = find_program('tools/check-api-docs.sh')
51b13863
LP
3546run_target(
3547 'check-api-docs',
3548 depends : [man, libsystemd, libudev],
dd1e33c8 3549 command : [check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
51b13863
LP
3550
3551############################################################
7bc9ea51 3552watchdog_opt = service_watchdog == '' ? 'disabled' : service_watchdog
51b13863 3553
829257d1
ZJS
3554status = [
3555 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3556
4c8e5f44 3557 'build mode: @0@'.format(get_option('mode')),
2675413e 3558 'split /usr: @0@'.format(split_usr),
157baa87 3559 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
3560 'prefix directory: @0@'.format(prefixdir),
3561 'rootprefix directory: @0@'.format(rootprefixdir),
3562 'sysconf directory: @0@'.format(sysconfdir),
3563 'include directory: @0@'.format(includedir),
3564 'lib directory: @0@'.format(libdir),
3565 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
3566 'SysV init scripts: @0@'.format(sysvinit_path),
3567 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
3568 'PAM modules directory: @0@'.format(pamlibdir),
3569 'PAM configuration directory: @0@'.format(pamconfdir),
3570 'RPM macros directory: @0@'.format(rpmmacrosdir),
3571 'modprobe.d directory: @0@'.format(modprobedir),
3572 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3573 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3574 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3575 'bash completions directory: @0@'.format(bashcompletiondir),
3576 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1 3577 'extra start script: @0@'.format(get_option('rc-local')),
829257d1
ZJS
3578 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3579 get_option('debug-tty')),
3580 'TTY GID: @0@'.format(tty_gid),
ac09340e 3581 'users GID: @0@'.format(substs.get('USERS_GID')),
fc1a5d1a
ZJS
3582 'system UIDs: <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_UID_MAX'),
3583 conf.get('SYSTEM_ALLOC_UID_MIN')),
3584 'system GIDs: <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_GID_MAX'),
3585 conf.get('SYSTEM_ALLOC_GID_MIN')),
3586 'dynamic UIDs: @0@–@1@'.format(dynamic_uid_min, dynamic_uid_max),
3587 'container UID bases: @0@–@1@'.format(container_uid_base_min, container_uid_base_max),
829257d1 3588 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 3589 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 3590 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 3591 'support URL: @0@'.format(support_url),
afde4574
LP
3592 'nobody user name: @0@'.format(nobody_user),
3593 'nobody group name: @0@'.format(nobody_group),
829257d1 3594 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 3595 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
3596
3597 'default DNSSEC mode: @0@'.format(default_dnssec),
c9299be2 3598 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
3614df05
ZJS
3599 'default mDNS mode: @0@'.format(default_mdns),
3600 'default LLMNR mode: @0@'.format(default_llmnr),
829257d1 3601 'default cgroup hierarchy: @0@'.format(default_hierarchy),
06da5c63 3602 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
8ca9e92c 3603 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
21d0dd5a 3604 'default locale: @0@'.format(default_locale),
5bc655cd 3605 'default user $PATH: @0@'.format(default_user_path_display),
7bc9ea51 3606 'systemd service watchdog: @0@'.format(watchdog_opt)]
829257d1
ZJS
3607
3608alt_dns_servers = '\n '.join(dns_servers.split(' '))
3609alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3610status += [
3611 'default DNS servers: @0@'.format(alt_dns_servers),
3612 'default NTP servers: @0@'.format(alt_ntp_servers)]
3613
3614alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3615 '@@0@'.format(time_epoch)).stdout().strip()
3616status += [
3617 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3618
19d8c9c9 3619status += [
abc8caf7
ZJS
3620 'static libsystemd: @0@'.format(static_libsystemd),
3621 'static libudev: @0@'.format(static_libudev)]
19d8c9c9 3622
829257d1
ZJS
3623# TODO:
3624# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3625# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3626# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3627
349cc4a5 3628if conf.get('ENABLE_EFI') == 1
5a8b1640 3629 status += 'efi arch: @0@'.format(efi_arch)
829257d1
ZJS
3630
3631 if have_gnu_efi
3632 status += [
3633 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
c512dfb9 3634 'EFI CC @0@'.format(' '.join(efi_cc)),
ce4121c6
ZJS
3635 'EFI lds: @0@'.format(efi_lds),
3636 'EFI crt0: @0@'.format(efi_crt0),
359b496f 3637 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
3638 endif
3639endif
3640
3641found = []
3642missing = []
3643
3644foreach tuple : [
3645 ['libcryptsetup'],
3646 ['PAM'],
70a5db58 3647 ['pwquality'],
c757517d 3648 ['libfdisk'],
839fddbe 3649 ['p11kit'],
af4fbd46 3650 ['libfido2'],
829257d1
ZJS
3651 ['AUDIT'],
3652 ['IMA'],
3653 ['AppArmor'],
3654 ['SELinux'],
3655 ['SECCOMP'],
3656 ['SMACK'],
3657 ['zlib'],
3658 ['xz'],
ef5924aa 3659 ['zstd'],
829257d1
ZJS
3660 ['lz4'],
3661 ['bzip2'],
3662 ['ACL'],
3663 ['gcrypt'],
3664 ['qrencode'],
3665 ['microhttpd'],
3666 ['gnutls'],
096cbdce 3667 ['openssl'],
829257d1 3668 ['libcurl'],
d1bf5675 3669 ['idn'],
cdf7ad38 3670 ['initrd'],
53393c89 3671 ['compat-mutable-uid-boundaries'],
87057e24 3672 ['libidn2'],
829257d1
ZJS
3673 ['libidn'],
3674 ['libiptc'],
3675 ['elfutils'],
3676 ['binfmt'],
e594a3b1 3677 ['repart'],
829257d1
ZJS
3678 ['vconsole'],
3679 ['quotacheck'],
3680 ['tmpfiles'],
3681 ['environment.d'],
3682 ['sysusers'],
3683 ['firstboot'],
3684 ['randomseed'],
3685 ['backlight'],
3686 ['rfkill'],
8feca247 3687 ['xdg-autostart'],
829257d1
ZJS
3688 ['logind'],
3689 ['machined'],
61d0578b 3690 ['portabled'],
d093b62c 3691 ['userdb'],
70a5db58 3692 ['homed'],
829257d1
ZJS
3693 ['importd'],
3694 ['hostnamed'],
3695 ['timedated'],
3696 ['timesyncd'],
3697 ['localed'],
3698 ['networkd'],
a7456af5 3699 ['resolve'],
096cbdce
IT
3700 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3701 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
829257d1 3702 ['coredump'],
9b4abc69 3703 ['pstore'],
61ff7397 3704 ['oomd'],
829257d1
ZJS
3705 ['polkit'],
3706 ['legacy pkla', install_polkit_pkla],
3707 ['efi'],
3708 ['gnu-efi', have_gnu_efi],
3709 ['kmod'],
3710 ['xkbcommon'],
c4c978a0 3711 ['pcre2'],
829257d1
ZJS
3712 ['blkid'],
3713 ['dbus'],
3714 ['glib'],
6bd2bc8e
ZJS
3715 ['nss-myhostname'],
3716 ['nss-mymachines'],
3717 ['nss-resolve'],
3718 ['nss-systemd'],
829257d1
ZJS
3719 ['hwdb'],
3720 ['tpm'],
3721 ['man pages', want_man],
3722 ['html pages', want_html],
3723 ['man page indices', want_man and have_lxml],
829257d1
ZJS
3724 ['SysV compat'],
3725 ['utmp'],
3726 ['ldconfig'],
3727 ['hibernate'],
3728 ['adm group', get_option('adm-group')],
3729 ['wheel group', get_option('wheel-group')],
b14e1b43 3730 ['gshadow'],
829257d1
ZJS
3731 ['debug hashmap'],
3732 ['debug mmap cache'],
d6601495 3733 ['debug siphash'],
d18cb393 3734 ['valgrind', conf.get('VALGRIND') == 1],
fd5dec9a 3735 ['trace logging', conf.get('LOG_TRACE') == 1],
b6261be8 3736 ['install tests', install_tests],
19d8c9c9
LP
3737 ['link-udev-shared', get_option('link-udev-shared')],
3738 ['link-systemctl-shared', get_option('link-systemctl-shared')],
5ac8b50d 3739 ['link-networkd-shared', get_option('link-networkd-shared')],
fd74a13e 3740 ['link-timesyncd-shared', get_option('link-timesyncd-shared')],
f30bf4d9 3741 ['kernel-install', get_option('kernel-install')],
b3259a6e 3742 ['systemd-analyze', conf.get('ENABLE_ANALYZE') == 1],
829257d1
ZJS
3743]
3744
af4d7860
ZJS
3745 if tuple.length() >= 2
3746 cond = tuple[1]
3747 else
829257d1
ZJS
3748 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3749 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 3750 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
3751 endif
3752 if cond
5a8b1640 3753 found += tuple[0]
829257d1 3754 else
5a8b1640 3755 missing += tuple[0]
829257d1
ZJS
3756 endif
3757endforeach
3758
3759status += [
9d39c1bf 3760 '',
829257d1 3761 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
3762 '',
3763 'disabled features: @0@'.format(', '.join(missing)),
3764 '']
829257d1 3765message('\n '.join(status))
9a8e64b0
ZJS
3766
3767if rootprefixdir != rootprefix_default
8ea9fad7
YW
3768 warning('\n' +
3769 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3770 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3771 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 3772endif