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