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