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