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