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