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