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