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