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