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