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