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