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