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