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