]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
Use a dash-truncated drop-in for user-%j.slice configuration
[thirdparty/systemd.git] / meson.build
CommitLineData
3a726fcd
ZJS
1# SPDX-License-Identifier: LGPL-2.1+
2#
3# Copyright 2017 Zbigniew Jędrzejewski-Szmek
3a726fcd 4
5c23128d 5project('systemd', 'c',
ad6a0853 6 version : '238',
5c23128d
ZJS
7 license : 'LGPLv2+',
8 default_options: [
37efbbd8
ZJS
9 'c_std=gnu99',
10 'prefix=/usr',
11 'sysconfdir=/etc',
12 'localstatedir=/var',
5c23128d 13 ],
86ea8d70 14 meson_version : '>= 0.41',
5c23128d
ZJS
15 )
16
ad6a0853
ZJS
17libsystemd_version = '0.22.0'
18libudev_version = '1.6.10'
56d50ab1 19
5c23128d
ZJS
20# We need the same data in three different formats, ugh!
21# Also, for hysterical reasons, we use different variable
22# names, sometimes. Not all variables are included in every
23# set. Ugh, ugh, ugh!
24conf = configuration_data()
25conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
26conf.set_quoted('PACKAGE_VERSION', meson.project_version())
27
28substs = configuration_data()
29substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
30substs.set('PACKAGE_VERSION', meson.project_version())
31
32m4_defines = []
33
34#####################################################################
35
003c8879
ZJS
36# Try to install the git pre-commit hook
37git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
38if git_hook.returncode() == 0
39 message(git_hook.stdout().strip())
40endif
41
42#####################################################################
43
2675413e
ZJS
44if get_option('split-usr') == 'auto'
45 split_usr = run_command('test', '-L', '/bin').returncode() != 0
46else
47 split_usr = get_option('split-usr') == 'true'
48endif
671f0f8d
ZJS
49conf.set10('HAVE_SPLIT_USR', split_usr,
50 description : '/usr/bin and /bin directories are separate')
9a8e64b0 51
157baa87
ZJS
52if get_option('split-bin') == 'auto'
53 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
54else
55 split_bin = get_option('split-bin') == 'true'
56endif
671f0f8d
ZJS
57conf.set10('HAVE_SPLIT_BIN', split_bin,
58 description : 'bin and sbin directories are separate')
157baa87 59
74344a17 60rootprefixdir = get_option('rootprefix')
74344a17
ZJS
61# Unusual rootprefixdir values are used by some distros
62# (see https://github.com/systemd/systemd/pull/7461).
ba7f4ae6 63rootprefix_default = split_usr ? '/' : '/usr'
9a8e64b0
ZJS
64if rootprefixdir == ''
65 rootprefixdir = rootprefix_default
74344a17 66endif
5c23128d
ZJS
67
68sysvinit_path = get_option('sysvinit-path')
69sysvrcnd_path = get_option('sysvrcnd-path')
5424824a 70have = sysvinit_path != '' and sysvrcnd_path != ''
349cc4a5
ZJS
71conf.set10('HAVE_SYSV_COMPAT', have,
72 description : 'SysV init scripts and rcN.d links are supported')
73m4_defines += have ? ['-DHAVE_SYSV_COMPAT'] : []
5c23128d
ZJS
74
75# join_paths ignore the preceding arguments if an absolute component is
76# encountered, so this should canonicalize various paths when they are
77# absolute or relative.
78prefixdir = get_option('prefix')
79if not prefixdir.startswith('/')
37efbbd8 80 error('Prefix is not absolute: "@0@"'.format(prefixdir))
5c23128d
ZJS
81endif
82bindir = join_paths(prefixdir, get_option('bindir'))
83libdir = join_paths(prefixdir, get_option('libdir'))
84sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
85includedir = join_paths(prefixdir, get_option('includedir'))
86datadir = join_paths(prefixdir, get_option('datadir'))
87localstatedir = join_paths('/', get_option('localstatedir'))
88
89rootbindir = join_paths(rootprefixdir, 'bin')
157baa87 90rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
5c23128d
ZJS
91rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
92
93rootlibdir = get_option('rootlibdir')
94if rootlibdir == ''
37efbbd8 95 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
5c23128d
ZJS
96endif
97
98# Dirs of external packages
e17e5ba9
MB
99pkgconfigdatadir = join_paths(datadir, 'pkgconfig')
100pkgconfiglibdir = join_paths(libdir, 'pkgconfig')
101polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
102polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
103polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
104varlogdir = join_paths(localstatedir, 'log')
105xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
8a38aac3
YW
106rpmmacrosdir = get_option('rpmmacrosdir')
107if rpmmacrosdir != 'no'
108 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
109endif
02fa054d 110modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
5c23128d
ZJS
111
112# Our own paths
e17e5ba9
MB
113pkgdatadir = join_paths(datadir, 'systemd')
114environmentdir = join_paths(prefixdir, 'lib/environment.d')
115pkgsysconfdir = join_paths(sysconfdir, 'systemd')
116userunitdir = join_paths(prefixdir, 'lib/systemd/user')
117userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
118tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
119sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
120sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
121binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
122modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
123networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
124pkgincludedir = join_paths(includedir, 'systemd')
125systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
126usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
127systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
128userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
129systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
130systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
131systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
132systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
133udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
134udevhomedir = udevlibexecdir
135udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
136udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
137catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
138kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
139factorydir = join_paths(datadir, 'factory')
e17e5ba9
MB
140bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
141testsdir = join_paths(prefixdir, 'lib/systemd/tests')
142systemdstatedir = join_paths(localstatedir, 'lib/systemd')
143catalogstatedir = join_paths(systemdstatedir, 'catalog')
144randomseeddir = join_paths(localstatedir, 'lib/systemd')
5c23128d 145
75aaade1
TB
146docdir = get_option('docdir')
147if docdir == ''
148 docdir = join_paths(datadir, 'doc/systemd')
149endif
150
5c23128d
ZJS
151dbuspolicydir = get_option('dbuspolicydir')
152if dbuspolicydir == ''
37efbbd8 153 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
5c23128d
ZJS
154endif
155
156dbussessionservicedir = get_option('dbussessionservicedir')
157if dbussessionservicedir == ''
37efbbd8 158 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
5c23128d
ZJS
159endif
160
161dbussystemservicedir = get_option('dbussystemservicedir')
162if dbussystemservicedir == ''
37efbbd8 163 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
5c23128d
ZJS
164endif
165
166pamlibdir = get_option('pamlibdir')
167if pamlibdir == ''
37efbbd8 168 pamlibdir = join_paths(rootlibdir, 'security')
5c23128d
ZJS
169endif
170
171pamconfdir = get_option('pamconfdir')
172if pamconfdir == ''
37efbbd8 173 pamconfdir = join_paths(sysconfdir, 'pam.d')
5c23128d
ZJS
174endif
175
444d5863
ZJS
176memory_accounting_default = get_option('memory-accounting-default')
177
5c23128d 178conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
e17e5ba9 179conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
5c23128d
ZJS
180conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
181conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
182conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
2a4c156d
ZJS
183conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
184conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
96164a39 185
f7c5427c 186conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
96164a39 187
e17e5ba9 188conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
5c23128d
ZJS
189conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
190conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
e17e5ba9
MB
191conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
192conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
193conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
194conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
da495a03 195conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
7f2806d5 196conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
e17e5ba9
MB
197conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
198conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
199conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
200conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
201conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
74344a17 202conf.set_quoted('ROOTPREFIX', rootprefixdir)
3131bfe3 203conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
e17e5ba9
MB
204conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
205conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
5c23128d
ZJS
206conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
207conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
208conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
209conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
210conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
211conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
e17e5ba9
MB
212conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
213conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
5c23128d 214conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
e17e5ba9 215conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
5c23128d
ZJS
216conf.set_quoted('LIBDIR', libdir)
217conf.set_quoted('ROOTLIBDIR', rootlibdir)
218conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
219conf.set_quoted('BOOTLIBDIR', bootlibdir)
e17e5ba9
MB
220conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
221conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
222conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
223conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
224conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
225conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
444d5863 226conf.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'true' : 'false')
7f672e86 227conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
5c23128d
ZJS
228
229conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
230conf.set_quoted('ABS_SRC_DIR', meson.source_root())
231
232substs.set('prefix', prefixdir)
3131bfe3
ZJS
233substs.set('exec_prefix', prefixdir)
234substs.set('libdir', libdir)
235substs.set('rootlibdir', rootlibdir)
236substs.set('includedir', includedir)
5c23128d 237substs.set('pkgsysconfdir', pkgsysconfdir)
3131bfe3
ZJS
238substs.set('bindir', bindir)
239substs.set('rootbindir', rootbindir)
5c23128d
ZJS
240substs.set('rootlibexecdir', rootlibexecdir)
241substs.set('systemunitdir', systemunitdir)
242substs.set('userunitdir', userunitdir)
243substs.set('systempresetdir', systempresetdir)
244substs.set('userpresetdir', userpresetdir)
245substs.set('udevhwdbdir', udevhwdbdir)
246substs.set('udevrulesdir', udevrulesdir)
3131bfe3 247substs.set('udevlibexecdir', udevlibexecdir)
5c23128d
ZJS
248substs.set('catalogdir', catalogdir)
249substs.set('tmpfilesdir', tmpfilesdir)
250substs.set('sysusersdir', sysusersdir)
251substs.set('sysctldir', sysctldir)
252substs.set('binfmtdir', binfmtdir)
253substs.set('modulesloaddir', modulesloaddir)
254substs.set('systemgeneratordir', systemgeneratordir)
255substs.set('usergeneratordir', usergeneratordir)
256substs.set('systemenvgeneratordir', systemenvgeneratordir)
257substs.set('userenvgeneratordir', userenvgeneratordir)
258substs.set('systemshutdowndir', systemshutdowndir)
259substs.set('systemsleepdir', systemsleepdir)
2a4c156d
ZJS
260substs.set('VARLOGDIR', varlogdir)
261substs.set('CERTIFICATEROOT', get_option('certificate-root'))
e17e5ba9
MB
262substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
263substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
2a4c156d
ZJS
264substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
265substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
266substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
267substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
444d5863 268substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
5c23128d
ZJS
269
270#####################################################################
271
272cc = meson.get_compiler('c')
273pkgconfig = import('pkgconfig')
6e2afb1c 274check_compilation_sh = find_program('tools/meson-check-compilation.sh')
b68dfb9e 275meson_build_sh = find_program('tools/meson-build.sh')
5c23128d 276
08318a2c
AD
277if get_option('tests') != 'false'
278 cxx = find_program('c++', required : false)
279 if cxx.found()
280 # Used only for tests
281 add_languages('cpp')
282 endif
94e2523b
ZJS
283endif
284
31e57a35
JR
285want_ossfuzz = get_option('oss-fuzz')
286want_libfuzzer = get_option('llvm-fuzz')
287fuzzer_build = want_ossfuzz or want_libfuzzer
288if want_ossfuzz and want_libfuzzer
289 error('only one of oss-fuzz and llvm-fuzz can be specified')
290endif
291if want_libfuzzer
292 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer')
293endif
294if want_ossfuzz
7db7d5b7
JR
295 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
296endif
297
75cf1d66 298foreach arg : ['-Wextra',
70160ce8 299 '-Werror=undef',
5c23128d
ZJS
300 '-Wlogical-op',
301 '-Wmissing-include-dirs',
302 '-Wold-style-definition',
303 '-Wpointer-arith',
304 '-Winit-self',
305 '-Wdeclaration-after-statement',
306 '-Wfloat-equal',
307 '-Wsuggest-attribute=noreturn',
308 '-Werror=missing-prototypes',
309 '-Werror=implicit-function-declaration',
310 '-Werror=missing-declarations',
311 '-Werror=return-type',
312 '-Werror=incompatible-pointer-types',
313 '-Werror=format=2',
314 '-Wstrict-prototypes',
315 '-Wredundant-decls',
316 '-Wmissing-noreturn',
97279d83 317 '-Wimplicit-fallthrough=5',
5c23128d
ZJS
318 '-Wshadow',
319 '-Wendif-labels',
320 '-Wstrict-aliasing=2',
321 '-Wwrite-strings',
5c23128d
ZJS
322 '-Werror=overflow',
323 '-Wdate-time',
324 '-Wnested-externs',
325 '-ffast-math',
326 '-fno-common',
327 '-fdiagnostics-show-option',
328 '-fno-strict-aliasing',
329 '-fvisibility=hidden',
330 '-fstack-protector',
331 '-fstack-protector-strong',
5c23128d
ZJS
332 '--param=ssp-buffer-size=4',
333 ]
37efbbd8
ZJS
334 if cc.has_argument(arg)
335 add_project_arguments(arg, language : 'c')
336 endif
5c23128d
ZJS
337endforeach
338
7db7d5b7
JR
339# the oss-fuzz fuzzers are not built with -fPIE, so don't
340# enable it when we are linking against them
31e57a35 341if not fuzzer_build
7db7d5b7
JR
342 if cc.has_argument('-fPIE')
343 add_project_arguments('-fPIE', language : 'c')
344 endif
345endif
346
2c5434ad
ZJS
347# "negative" arguments: gcc on purpose does not return an error for "-Wno-"
348# arguments, just emits a warnings. So test for the "positive" version instead.
349foreach arg : ['unused-parameter',
350 'missing-field-initializers',
351 'unused-result',
fb1b5882
ZJS
352 'format-signedness',
353 'error=nonnull', # work-around for gcc 7.1 turning this on on its own
354 ]
2c5434ad
ZJS
355 if cc.has_argument('-W' + arg)
356 add_project_arguments('-Wno-' + arg, language : 'c')
357 endif
358endforeach
359
9e70f2f8 360if cc.compiles('''
5c23128d
ZJS
361 #include <time.h>
362 #include <inttypes.h>
363 typedef uint64_t usec_t;
364 usec_t now(clockid_t clock);
365 int main(void) {
366 struct timespec now;
367 return 0;
368 }
9e70f2f8 369''', name : '-Werror=shadow with local shadowing')
37efbbd8 370 add_project_arguments('-Werror=shadow', language : 'c')
5c23128d
ZJS
371endif
372
373if cc.get_id() == 'clang'
37efbbd8
ZJS
374 foreach arg : ['-Wno-typedef-redefinition',
375 '-Wno-gnu-variable-sized-type-not-at-end',
376 ]
7572aa80
ZJS
377 if cc.has_argument(arg,
378 name : '@0@ is supported'.format(arg))
37efbbd8
ZJS
379 add_project_arguments(arg, language : 'c')
380 endif
381 endforeach
5c23128d
ZJS
382endif
383
6e2afb1c
ZJS
384link_test_c = files('tools/meson-link-test.c')
385
5c23128d
ZJS
386# --as-needed and --no-undefined are provided by meson by default,
387# run mesonconf to see what is enabled
388foreach arg : ['-Wl,-z,relro',
389 '-Wl,-z,now',
390 '-pie',
5c23128d 391 ]
6e2afb1c
ZJS
392
393 have = run_command(check_compilation_sh,
394 cc.cmd_array(), '-x', 'c', arg,
395 '-include', link_test_c).returncode() == 0
396 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
31e57a35 397 if have and (arg != '-pie' or not fuzzer_build)
37efbbd8
ZJS
398 add_project_link_arguments(arg, language : 'c')
399 endif
5c23128d
ZJS
400endforeach
401
41afb5eb
ZJS
402if get_option('buildtype') != 'debug'
403 foreach arg : ['-ffunction-sections',
404 '-fdata-sections']
7572aa80
ZJS
405 if cc.has_argument(arg,
406 name : '@0@ is supported'.format(arg))
41afb5eb
ZJS
407 add_project_arguments(arg, language : 'c')
408 endif
409 endforeach
410
411 foreach arg : ['-Wl,--gc-sections']
6e2afb1c
ZJS
412 have = run_command(check_compilation_sh,
413 cc.cmd_array(), '-x', 'c', arg,
414 '-include', link_test_c).returncode() == 0
415 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
416 if have
41afb5eb
ZJS
417 add_project_link_arguments(arg, language : 'c')
418 endif
419 endforeach
420endif
421
9cc0e6e9
ZJS
422cpp = ' '.join(cc.cmd_array()) + ' -E'
423
5c23128d
ZJS
424#####################################################################
425# compilation result tests
426
2c201c21
ZJS
427conf.set('_GNU_SOURCE', true)
428conf.set('__SANE_USERSPACE_TYPES__', true)
5c23128d
ZJS
429
430conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
431conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
432conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
433conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
434conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
435conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
436conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
437
438decl_headers = '''
439#include <uchar.h>
440#include <linux/ethtool.h>
bce67bbe 441#include <linux/fib_rules.h>
4c2e1b39
LP
442#include <linux/stat.h>
443#include <sys/stat.h>
5c23128d
ZJS
444'''
445# FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
446
447foreach decl : ['char16_t',
448 'char32_t',
449 'key_serial_t',
450 'struct ethtool_link_settings',
bce67bbe 451 'struct fib_rule_uid_range',
4c2e1b39 452 'struct statx',
5c23128d 453 ]
2c201c21
ZJS
454
455 # We get -1 if the size cannot be determined
456 have = cc.sizeof(decl, prefix : decl_headers) > 0
349cc4a5 457 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
5c23128d
ZJS
458endforeach
459
460foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
461 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
462 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
463 ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'],
d384826f 464 ['IFLA_IPVLAN_FLAGS', 'linux/if_link.h'],
5c23128d
ZJS
465 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
466 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
467 ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'],
468 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
469 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
9dfed8dd 470 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
5c23128d
ZJS
471 # if_tunnel.h is buggy and cannot be included on its own
472 ['IFLA_VTI_REMOTE', 'linux/if_tunnel.h', '#include <net/if.h>'],
473 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
474 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
475 ['IFLA_BRIDGE_VLAN_INFO', 'linux/if_bridge.h'],
476 ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'],
477 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
478 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
d384826f 479 ['IPVLAN_F_PRIVATE', 'linux/if_link.h'],
5c23128d
ZJS
480 ['NDA_IFINDEX', 'linux/neighbour.h'],
481 ['IFA_FLAGS', 'linux/if_addr.h'],
bce67bbe 482 ['FRA_UID_RANGE', 'linux/fib_rules.h'],
5c23128d 483 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
d6df583c 484 ['VXCAN_INFO_PEER', 'linux/can/vxcan.h'],
5c23128d 485 ]
37efbbd8
ZJS
486 prefix = decl.length() > 2 ? decl[2] : ''
487 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
4b9545f1 488 conf.set10('HAVE_' + decl[0], have)
5c23128d
ZJS
489endforeach
490
5c23128d 491foreach ident : ['secure_getenv', '__secure_getenv']
349cc4a5 492 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
5c23128d
ZJS
493endforeach
494
495foreach ident : [
85db59b7 496 ['memfd_create', '''#include <sys/mman.h>'''],
7b961e40
LP
497 ['gettid', '''#include <sys/types.h>
498 #include <unistd.h>'''],
3c042add
LP
499 ['pivot_root', '''#include <stdlib.h>
500 #include <unistd.h>'''], # no known header declares pivot_root
85db59b7 501 ['name_to_handle_at', '''#include <sys/types.h>
37efbbd8
ZJS
502 #include <sys/stat.h>
503 #include <fcntl.h>'''],
85db59b7 504 ['setns', '''#include <sched.h>'''],
2acfd0ff
LP
505 ['renameat2', '''#include <stdio.h>
506 #include <fcntl.h>'''],
37efbbd8
ZJS
507 ['kcmp', '''#include <linux/kcmp.h>'''],
508 ['keyctl', '''#include <sys/types.h>
509 #include <keyutils.h>'''],
85db59b7 510 ['copy_file_range', '''#include <sys/syscall.h>
37efbbd8 511 #include <unistd.h>'''],
71e5200f
DM
512 ['bpf', '''#include <sys/syscall.h>
513 #include <unistd.h>'''],
4c2e1b39
LP
514 ['statx', '''#include <sys/types.h>
515 #include <sys/stat.h>
516 #include <unistd.h>'''],
aa484f35
ZJS
517 ['explicit_bzero' , '''#include <string.h>'''],
518 ['reallocarray', '''#include <malloc.h>'''],
37efbbd8
ZJS
519]
520
85db59b7 521 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
4b9545f1 522 conf.set10('HAVE_' + ident[0].to_upper(), have)
5c23128d
ZJS
523endforeach
524
85db59b7 525if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
349cc4a5 526 conf.set10('USE_SYS_RANDOM_H', true)
4b9545f1 527 conf.set10('HAVE_GETRANDOM', true)
4984c8be
ZJS
528else
529 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
349cc4a5 530 conf.set10('USE_SYS_RANDOM_H', false)
4b9545f1 531 conf.set10('HAVE_GETRANDOM', have)
4984c8be
ZJS
532endif
533
5c23128d
ZJS
534#####################################################################
535
536sed = find_program('sed')
5c23128d 537awk = find_program('awk')
d730e2d1 538m4 = find_program('m4')
5c23128d 539stat = find_program('stat')
d68b342b 540git = find_program('git', required : false)
b68dfb9e 541env = find_program('env')
b1ffacb6 542perl = find_program('perl', required : false)
5c23128d 543
7b76fce1 544meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
94e75a54 545mkdir_p = 'mkdir -p $DESTDIR/@0@'
d83f4f50
ZJS
546test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
547splash_bmp = files('test/splash.bmp')
94e75a54 548
5c23128d
ZJS
549# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
550# /usr/sbin, /sbin, and fall back to the default from middle column.
2fa645f1 551progs = [['quotaon', '/usr/sbin/quotaon' ],
5c23128d 552 ['quotacheck', '/usr/sbin/quotacheck' ],
5c23128d
ZJS
553 ['kmod', '/usr/bin/kmod' ],
554 ['kexec', '/usr/sbin/kexec' ],
555 ['sulogin', '/usr/sbin/sulogin' ],
556 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
557 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
558 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
559 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
560 ]
561foreach prog : progs
37efbbd8
ZJS
562 path = get_option(prog[0] + '-path')
563 if path != ''
564 message('Using @1@ for @0@'.format(prog[0], path))
565 else
566 exe = find_program(prog[0],
567 '/usr/sbin/' + prog[0],
568 '/sbin/' + prog[0],
569 required: false)
570 path = exe.found() ? exe.path() : prog[1]
571 endif
572 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
573 conf.set_quoted(name, path)
574 substs.set(name, path)
5c23128d
ZJS
575endforeach
576
2fa645f1
MG
577conf.set_quoted('TELINIT', get_option('telinit-path'))
578
1276a9f6 579if run_command('ln', '--relative', '--help').returncode() != 0
cd001016 580 error('ln does not support --relative (added in coreutils 8.16)')
1276a9f6 581endif
5c23128d
ZJS
582
583############################################################
584
585gperf = find_program('gperf')
586
587gperf_test_format = '''
588#include <string.h>
589const char * in_word_set(const char *, @0@);
590@1@
591'''
592gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
593gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
594gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
595if cc.compiles(gperf_test)
37efbbd8 596 gperf_len_type = 'size_t'
5c23128d 597else
37efbbd8
ZJS
598 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
599 if cc.compiles(gperf_test)
600 gperf_len_type = 'unsigned'
601 else
602 error('unable to determine gperf len type')
603 endif
5c23128d
ZJS
604endif
605message('gperf len type is @0@'.format(gperf_len_type))
37efbbd8
ZJS
606conf.set('GPERF_LEN_TYPE', gperf_len_type,
607 description : 'The type of gperf "len" parameter')
5c23128d
ZJS
608
609############################################################
610
611if not cc.has_header('sys/capability.h')
37efbbd8 612 error('POSIX caps headers not found')
5c23128d 613endif
9f555bba
BE
614foreach header : ['crypt.h',
615 'linux/btrfs.h',
5c23128d
ZJS
616 'linux/memfd.h',
617 'linux/vm_sockets.h',
af8786b1 618 'sys/auxv.h',
5c23128d
ZJS
619 'valgrind/memcheck.h',
620 'valgrind/valgrind.h',
621 ]
2c201c21 622
349cc4a5
ZJS
623 conf.set10('HAVE_' + header.underscorify().to_upper(),
624 cc.has_header(header))
5c23128d
ZJS
625endforeach
626
627############################################################
628
629conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
5248e7e1
ZJS
630conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
631gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
5c23128d
ZJS
632
633default_hierarchy = get_option('default-hierarchy')
634conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
635 description : 'default cgroup hierarchy as string')
636if default_hierarchy == 'legacy'
37efbbd8 637 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
5c23128d 638elif default_hierarchy == 'hybrid'
37efbbd8 639 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
5c23128d 640else
37efbbd8 641 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
5c23128d
ZJS
642endif
643
644time_epoch = get_option('time-epoch')
645if time_epoch == ''
37efbbd8
ZJS
646 NEWS = files('NEWS')
647 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
5c23128d
ZJS
648endif
649time_epoch = time_epoch.to_int()
650conf.set('TIME_EPOCH', time_epoch)
651
652system_uid_max = get_option('system-uid-max')
653if system_uid_max == ''
37efbbd8
ZJS
654 system_uid_max = run_command(
655 awk,
2f62cf35
CMOF
656 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
657 '/etc/login.defs').stdout().strip()
658 if system_uid_max == ''
659 system_uid_max = '999'
660 endif
5c23128d
ZJS
661endif
662system_uid_max = system_uid_max.to_int()
663conf.set('SYSTEM_UID_MAX', system_uid_max)
664substs.set('systemuidmax', system_uid_max)
7572aa80 665message('maximum system UID is @0@'.format(system_uid_max))
5c23128d 666
5c23128d
ZJS
667system_gid_max = get_option('system-gid-max')
668if system_gid_max == ''
37efbbd8
ZJS
669 system_gid_max = run_command(
670 awk,
2f62cf35
CMOF
671 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
672 '/etc/login.defs').stdout().strip()
673 if system_gid_max == ''
674 system_gid_max = '999'
675 endif
5c23128d
ZJS
676endif
677system_gid_max = system_gid_max.to_int()
678conf.set('SYSTEM_GID_MAX', system_gid_max)
679substs.set('systemgidmax', system_gid_max)
7572aa80 680message('maximum system GID is @0@'.format(system_gid_max))
5c23128d 681
87d5e4f2
LP
682dynamic_uid_min = get_option('dynamic-uid-min').to_int()
683dynamic_uid_max = get_option('dynamic-uid-max').to_int()
684conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
685conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
686substs.set('dynamicuidmin', dynamic_uid_min)
687substs.set('dynamicuidmax', dynamic_uid_max)
688
689container_uid_base_min = get_option('container-uid-base-min').to_int()
690container_uid_base_max = get_option('container-uid-base-max').to_int()
691conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
692conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
693substs.set('containeruidbasemin', container_uid_base_min)
694substs.set('containeruidbasemax', container_uid_base_max)
695
afde4574
LP
696nobody_user = get_option('nobody-user')
697nobody_group = get_option('nobody-group')
698
699getent_result = run_command('getent', 'passwd', '65534')
700if getent_result.returncode() == 0
701 name = getent_result.stdout().split(':')[0]
702 if name != nobody_user
703 message('WARNING:\n' +
704 ' 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) +
705 ' Your build will result in an user table setup that is incompatible with the local system.')
706 endif
707endif
708id_result = run_command('id', '-u', nobody_user)
709if id_result.returncode() == 0
710 id = id_result.stdout().to_int()
711 if id != 65534
712 message('WARNING:\n' +
713 ' 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) +
714 ' Your build will result in an user table setup that is incompatible with the local system.')
715 endif
716endif
717
718getent_result = run_command('getent', 'group', '65534')
719if getent_result.returncode() == 0
720 name = getent_result.stdout().split(':')[0]
721 if name != nobody_group
722 message('WARNING:\n' +
723 ' 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) +
724 ' Your build will result in an group table setup that is incompatible with the local system.')
725 endif
726endif
727id_result = run_command('id', '-g', nobody_group)
728if id_result.returncode() == 0
729 id = id_result.stdout().to_int()
730 if id != 65534
731 message('WARNING:\n' +
732 ' 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) +
733 ' Your build will result in an group table setup that is incompatible with the local system.')
734 endif
735endif
8374cc62
YW
736if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
737 message('WARNING:\n' +
738 ' The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
739 ' Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
740endif
afde4574
LP
741
742conf.set_quoted('NOBODY_USER_NAME', nobody_user)
743conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
60712021
YW
744substs.set('NOBODY_USER_NAME', nobody_user)
745substs.set('NOBODY_GROUP_NAME', nobody_group)
87d5e4f2 746
5c23128d
ZJS
747tty_gid = get_option('tty-gid')
748conf.set('TTY_GID', tty_gid)
2a4c156d 749substs.set('TTY_GID', tty_gid)
5c23128d 750
84786b8e
ID
751# Ensure provided GID argument is numeric, otherwise fallback to default assignment
752if get_option('users-gid') != ''
d6806870 753 users_gid = get_option('users-gid').to_int()
84786b8e 754else
d6806870 755 users_gid = '-'
84786b8e
ID
756endif
757substs.set('USERS_GID', users_gid)
758
5c23128d 759if get_option('adm-group')
37efbbd8 760 m4_defines += ['-DENABLE_ADM_GROUP']
5c23128d
ZJS
761endif
762
763if get_option('wheel-group')
37efbbd8 764 m4_defines += ['-DENABLE_WHEEL_GROUP']
5c23128d
ZJS
765endif
766
767substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
4e15a734 768substs.set('GROUP_RENDER_MODE', get_option('group-render-mode'))
5c23128d 769
2a4c156d
ZJS
770kill_user_processes = get_option('default-kill-user-processes')
771conf.set10('KILL_USER_PROCESSES', kill_user_processes)
c7f7e859 772conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
2a4c156d 773substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
5c23128d 774
829257d1
ZJS
775dns_servers = get_option('dns-servers')
776conf.set_quoted('DNS_SERVERS', dns_servers)
777substs.set('DNS_SERVERS', dns_servers)
5c23128d 778
829257d1
ZJS
779ntp_servers = get_option('ntp-servers')
780conf.set_quoted('NTP_SERVERS', ntp_servers)
781substs.set('NTP_SERVERS', ntp_servers)
5c23128d
ZJS
782
783conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
784
3131bfe3
ZJS
785substs.set('SUSHELL', get_option('debug-shell'))
786substs.set('DEBUGTTY', get_option('debug-tty'))
787
671677da 788debug = get_option('debug')
349cc4a5
ZJS
789enable_debug_hashmap = false
790enable_debug_mmap_cache = false
671677da
ZJS
791if debug != ''
792 foreach name : debug.split(',')
793 if name == 'hashmap'
349cc4a5 794 enable_debug_hashmap = true
671677da 795 elif name == 'mmap-cache'
349cc4a5 796 enable_debug_mmap_cache = true
671677da
ZJS
797 else
798 message('unknown debug option "@0@", ignoring'.format(name))
799 endif
800 endforeach
801endif
349cc4a5
ZJS
802conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
803conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
671677da 804
5c23128d
ZJS
805#####################################################################
806
807threads = dependency('threads')
808librt = cc.find_library('rt')
809libm = cc.find_library('m')
810libdl = cc.find_library('dl')
811libcrypt = cc.find_library('crypt')
812
1800cc85
ZJS
813libcap = dependency('libcap', required : false)
814if not libcap.found()
815 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
816 libcap = cc.find_library('cap')
817endif
818
5c23128d 819libmount = dependency('mount',
c0b4b0f8 820 version : fuzzer_build ? '>= 0' : '>= 2.30')
5c23128d
ZJS
821
822want_seccomp = get_option('seccomp')
31e57a35 823if want_seccomp != 'false' and not fuzzer_build
37efbbd8 824 libseccomp = dependency('libseccomp',
9f0e9c01 825 version : '>= 2.3.1',
37efbbd8 826 required : want_seccomp == 'true')
349cc4a5 827 have = libseccomp.found()
5c23128d 828else
349cc4a5 829 have = false
37efbbd8 830 libseccomp = []
5c23128d 831endif
349cc4a5
ZJS
832conf.set10('HAVE_SECCOMP', have)
833m4_defines += have ? ['-DHAVE_SECCOMP'] : []
5c23128d
ZJS
834
835want_selinux = get_option('selinux')
31e57a35 836if want_selinux != 'false' and not fuzzer_build
37efbbd8
ZJS
837 libselinux = dependency('libselinux',
838 version : '>= 2.1.9',
839 required : want_selinux == 'true')
349cc4a5 840 have = libselinux.found()
5c23128d 841else
349cc4a5 842 have = false
37efbbd8 843 libselinux = []
5c23128d 844endif
349cc4a5
ZJS
845conf.set10('HAVE_SELINUX', have)
846m4_defines += have ? ['-DHAVE_SELINUX'] : []
5c23128d
ZJS
847
848want_apparmor = get_option('apparmor')
31e57a35 849if want_apparmor != 'false' and not fuzzer_build
37efbbd8
ZJS
850 libapparmor = dependency('libapparmor',
851 required : want_apparmor == 'true')
349cc4a5 852 have = libapparmor.found()
5c23128d 853else
349cc4a5 854 have = false
37efbbd8 855 libapparmor = []
5c23128d 856endif
349cc4a5
ZJS
857conf.set10('HAVE_APPARMOR', have)
858m4_defines += have ? ['-DHAVE_APPARMOR'] : []
5c23128d 859
5c23128d
ZJS
860smack_run_label = get_option('smack-run-label')
861if smack_run_label != ''
37efbbd8
ZJS
862 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
863 m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
5c23128d
ZJS
864endif
865
3ca0cb73
ZJS
866want_polkit = get_option('polkit')
867install_polkit = false
868install_polkit_pkla = false
31e57a35 869if want_polkit != 'false' and not fuzzer_build
37efbbd8 870 install_polkit = true
3ca0cb73 871
37efbbd8
ZJS
872 libpolkit = dependency('polkit-gobject-1',
873 required : false)
874 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
875 message('Old polkit detected, will install pkla files')
876 install_polkit_pkla = true
877 endif
3ca0cb73 878endif
349cc4a5 879conf.set10('ENABLE_POLKIT', install_polkit)
3ca0cb73 880
36f0387e 881want_acl = get_option('acl')
31e57a35 882if want_acl != 'false' and not fuzzer_build
36f0387e 883 libacl = cc.find_library('acl', required : want_acl == 'true')
349cc4a5 884 have = libacl.found()
36f0387e 885else
349cc4a5 886 have = false
36f0387e
ZJS
887 libacl = []
888endif
349cc4a5
ZJS
889conf.set10('HAVE_ACL', have)
890m4_defines += have ? ['-DHAVE_ACL'] : []
36f0387e 891
5c23128d 892want_audit = get_option('audit')
31e57a35 893if want_audit != 'false' and not fuzzer_build
37efbbd8 894 libaudit = dependency('audit', required : want_audit == 'true')
349cc4a5 895 have = libaudit.found()
5c23128d 896else
349cc4a5 897 have = false
37efbbd8 898 libaudit = []
5c23128d 899endif
349cc4a5 900conf.set10('HAVE_AUDIT', have)
5c23128d
ZJS
901
902want_blkid = get_option('blkid')
31e57a35 903if want_blkid != 'false' and not fuzzer_build
37efbbd8 904 libblkid = dependency('blkid', required : want_blkid == 'true')
349cc4a5 905 have = libblkid.found()
5c23128d 906else
349cc4a5 907 have = false
37efbbd8 908 libblkid = []
5c23128d 909endif
349cc4a5 910conf.set10('HAVE_BLKID', have)
5c23128d
ZJS
911
912want_kmod = get_option('kmod')
31e57a35 913if want_kmod != 'false' and not fuzzer_build
37efbbd8
ZJS
914 libkmod = dependency('libkmod',
915 version : '>= 15',
916 required : want_kmod == 'true')
349cc4a5 917 have = libkmod.found()
5c23128d 918else
349cc4a5 919 have = false
37efbbd8 920 libkmod = []
5c23128d 921endif
349cc4a5 922conf.set10('HAVE_KMOD', have)
5c23128d
ZJS
923
924want_pam = get_option('pam')
31e57a35 925if want_pam != 'false' and not fuzzer_build
37efbbd8
ZJS
926 libpam = cc.find_library('pam', required : want_pam == 'true')
927 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
349cc4a5 928 have = libpam.found() and libpam_misc.found()
5c23128d 929else
349cc4a5 930 have = false
37efbbd8
ZJS
931 libpam = []
932 libpam_misc = []
5c23128d 933endif
349cc4a5
ZJS
934conf.set10('HAVE_PAM', have)
935m4_defines += have ? ['-DHAVE_PAM'] : []
5c23128d
ZJS
936
937want_microhttpd = get_option('microhttpd')
31e57a35 938if want_microhttpd != 'false' and not fuzzer_build
37efbbd8
ZJS
939 libmicrohttpd = dependency('libmicrohttpd',
940 version : '>= 0.9.33',
941 required : want_microhttpd == 'true')
349cc4a5 942 have = libmicrohttpd.found()
5c23128d 943else
349cc4a5 944 have = false
37efbbd8 945 libmicrohttpd = []
5c23128d 946endif
349cc4a5
ZJS
947conf.set10('HAVE_MICROHTTPD', have)
948m4_defines += have ? ['-DHAVE_MICROHTTPD'] : []
5c23128d
ZJS
949
950want_libcryptsetup = get_option('libcryptsetup')
31e57a35 951if want_libcryptsetup != 'false' and not fuzzer_build
37efbbd8
ZJS
952 libcryptsetup = dependency('libcryptsetup',
953 version : '>= 1.6.0',
954 required : want_libcryptsetup == 'true')
349cc4a5 955 have = libcryptsetup.found()
5c23128d 956else
349cc4a5 957 have = false
37efbbd8 958 libcryptsetup = []
5c23128d 959endif
349cc4a5 960conf.set10('HAVE_LIBCRYPTSETUP', have)
5c23128d
ZJS
961
962want_libcurl = get_option('libcurl')
31e57a35 963if want_libcurl != 'false' and not fuzzer_build
37efbbd8
ZJS
964 libcurl = dependency('libcurl',
965 version : '>= 7.32.0',
966 required : want_libcurl == 'true')
349cc4a5 967 have = libcurl.found()
5c23128d 968else
349cc4a5 969 have = false
37efbbd8 970 libcurl = []
5c23128d 971endif
349cc4a5
ZJS
972conf.set10('HAVE_LIBCURL', have)
973m4_defines += have ? ['-DHAVE_LIBCURL'] : []
5c23128d
ZJS
974
975want_libidn = get_option('libidn')
87057e24
ZJS
976want_libidn2 = get_option('libidn2')
977if want_libidn == 'true' and want_libidn2 == 'true'
978 error('libidn and libidn2 cannot be requested simultaneously')
979endif
980
31e57a35 981if want_libidn != 'false' and want_libidn2 != 'true' and not fuzzer_build
7f7ab228
ZJS
982 libidn = dependency('libidn',
983 required : want_libidn == 'true')
349cc4a5 984 have = libidn.found()
87057e24 985else
349cc4a5 986 have = false
87057e24
ZJS
987 libidn = []
988endif
349cc4a5
ZJS
989conf.set10('HAVE_LIBIDN', have)
990m4_defines += have ? ['-DHAVE_LIBIDN'] : []
31e57a35 991if not have and want_libidn2 != 'false' and not fuzzer_build
7f7ab228
ZJS
992 # libidn is used for both libidn and libidn2 objects
993 libidn = dependency('libidn2',
994 required : want_libidn2 == 'true')
349cc4a5
ZJS
995 have = libidn.found()
996else
997 have = false
5c23128d 998endif
349cc4a5
ZJS
999conf.set10('HAVE_LIBIDN2', have)
1000m4_defines += have ? ['-DHAVE_LIBIDN2'] : []
5c23128d
ZJS
1001
1002want_libiptc = get_option('libiptc')
31e57a35 1003if want_libiptc != 'false' and not fuzzer_build
37efbbd8
ZJS
1004 libiptc = dependency('libiptc',
1005 required : want_libiptc == 'true')
349cc4a5 1006 have = libiptc.found()
5c23128d 1007else
349cc4a5 1008 have = false
37efbbd8 1009 libiptc = []
5c23128d 1010endif
349cc4a5
ZJS
1011conf.set10('HAVE_LIBIPTC', have)
1012m4_defines += have ? ['-DHAVE_LIBIPTC'] : []
5c23128d
ZJS
1013
1014want_qrencode = get_option('qrencode')
31e57a35 1015if want_qrencode != 'false' and not fuzzer_build
37efbbd8
ZJS
1016 libqrencode = dependency('libqrencode',
1017 required : want_qrencode == 'true')
349cc4a5 1018 have = libqrencode.found()
5c23128d 1019else
349cc4a5 1020 have = false
37efbbd8 1021 libqrencode = []
5c23128d 1022endif
349cc4a5 1023conf.set10('HAVE_QRENCODE', have)
5c23128d 1024
a44fb601 1025want_gcrypt = get_option('gcrypt')
31e57a35 1026if want_gcrypt != 'false' and not fuzzer_build
a44fb601
ZJS
1027 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1028 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
349cc4a5 1029 have = libgcrypt.found() and libgpg_error.found()
a44fb601 1030else
349cc4a5
ZJS
1031 have = false
1032endif
1033if not have
1034 # link to neither of the libs if one is not found
a44fb601
ZJS
1035 libgcrypt = []
1036 libgpg_error = []
1037endif
349cc4a5 1038conf.set10('HAVE_GCRYPT', have)
a44fb601 1039
5c23128d 1040want_gnutls = get_option('gnutls')
31e57a35 1041if want_gnutls != 'false' and not fuzzer_build
37efbbd8
ZJS
1042 libgnutls = dependency('gnutls',
1043 version : '>= 3.1.4',
1044 required : want_gnutls == 'true')
349cc4a5 1045 have = libgnutls.found()
5c23128d 1046else
349cc4a5 1047 have = false
37efbbd8 1048 libgnutls = []
5c23128d 1049endif
349cc4a5 1050conf.set10('HAVE_GNUTLS', have)
5c23128d
ZJS
1051
1052want_elfutils = get_option('elfutils')
31e57a35 1053if want_elfutils != 'false' and not fuzzer_build
37efbbd8
ZJS
1054 libdw = dependency('libdw',
1055 required : want_elfutils == 'true')
349cc4a5 1056 have = libdw.found()
5c23128d 1057else
349cc4a5 1058 have = false
37efbbd8 1059 libdw = []
5c23128d 1060endif
349cc4a5 1061conf.set10('HAVE_ELFUTILS', have)
5c23128d
ZJS
1062
1063want_zlib = get_option('zlib')
31e57a35 1064if want_zlib != 'false' and not fuzzer_build
37efbbd8
ZJS
1065 libz = dependency('zlib',
1066 required : want_zlib == 'true')
349cc4a5 1067 have = libz.found()
5c23128d 1068else
349cc4a5 1069 have = false
37efbbd8 1070 libz = []
5c23128d 1071endif
349cc4a5 1072conf.set10('HAVE_ZLIB', have)
5c23128d
ZJS
1073
1074want_bzip2 = get_option('bzip2')
31e57a35 1075if want_bzip2 != 'false' and not fuzzer_build
37efbbd8
ZJS
1076 libbzip2 = cc.find_library('bz2',
1077 required : want_bzip2 == 'true')
349cc4a5 1078 have = libbzip2.found()
5c23128d 1079else
349cc4a5 1080 have = false
37efbbd8 1081 libbzip2 = []
5c23128d 1082endif
349cc4a5 1083conf.set10('HAVE_BZIP2', have)
5c23128d
ZJS
1084
1085want_xz = get_option('xz')
31e57a35 1086if want_xz != 'false' and not fuzzer_build
37efbbd8
ZJS
1087 libxz = dependency('liblzma',
1088 required : want_xz == 'true')
349cc4a5 1089 have = libxz.found()
5c23128d 1090else
349cc4a5 1091 have = false
37efbbd8 1092 libxz = []
5c23128d 1093endif
349cc4a5 1094conf.set10('HAVE_XZ', have)
5c23128d
ZJS
1095
1096want_lz4 = get_option('lz4')
31e57a35 1097if want_lz4 != 'false' and not fuzzer_build
37efbbd8
ZJS
1098 liblz4 = dependency('liblz4',
1099 required : want_lz4 == 'true')
349cc4a5 1100 have = liblz4.found()
5c23128d 1101else
349cc4a5 1102 have = false
37efbbd8 1103 liblz4 = []
5c23128d 1104endif
349cc4a5 1105conf.set10('HAVE_LZ4', have)
5c23128d 1106
a44fb601 1107want_xkbcommon = get_option('xkbcommon')
31e57a35 1108if want_xkbcommon != 'false' and not fuzzer_build
a44fb601
ZJS
1109 libxkbcommon = dependency('xkbcommon',
1110 version : '>= 0.3.0',
1111 required : want_xkbcommon == 'true')
349cc4a5 1112 have = libxkbcommon.found()
a44fb601 1113else
349cc4a5 1114 have = false
a44fb601
ZJS
1115 libxkbcommon = []
1116endif
349cc4a5 1117conf.set10('HAVE_XKBCOMMON', have)
a44fb601 1118
c4c978a0
ZJS
1119want_pcre2 = get_option('pcre2')
1120if want_pcre2 != 'false'
1121 libpcre2 = dependency('libpcre2-8',
1122 required : want_pcre2 == 'true')
1123 have = libpcre2.found()
1124else
1125 have = false
1126 libpcre2 = []
1127endif
1128conf.set10('HAVE_PCRE2', have)
1129
69e96427 1130want_glib = get_option('glib')
31e57a35 1131if want_glib != 'false' and not fuzzer_build
37efbbd8
ZJS
1132 libglib = dependency('glib-2.0',
1133 version : '>= 2.22.0',
1134 required : want_glib == 'true')
1135 libgobject = dependency('gobject-2.0',
1136 version : '>= 2.22.0',
1137 required : want_glib == 'true')
1138 libgio = dependency('gio-2.0',
1139 required : want_glib == 'true')
2c201c21 1140 have = libglib.found() and libgobject.found() and libgio.found()
69e96427 1141else
349cc4a5 1142 have = false
37efbbd8
ZJS
1143 libglib = []
1144 libgobject = []
1145 libgio = []
69e96427 1146endif
349cc4a5 1147conf.set10('HAVE_GLIB', have)
69e96427
ZJS
1148
1149want_dbus = get_option('dbus')
31e57a35 1150if want_dbus != 'false' and not fuzzer_build
37efbbd8
ZJS
1151 libdbus = dependency('dbus-1',
1152 version : '>= 1.3.2',
1153 required : want_dbus == 'true')
349cc4a5 1154 have = libdbus.found()
69e96427 1155else
349cc4a5 1156 have = false
37efbbd8 1157 libdbus = []
69e96427 1158endif
349cc4a5 1159conf.set10('HAVE_DBUS', have)
69e96427 1160
42303dcb 1161default_dnssec = get_option('default-dnssec')
31e57a35 1162if fuzzer_build
b4081f3e
JR
1163 default_dnssec = 'no'
1164endif
349cc4a5 1165if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
42303dcb
YW
1166 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1167 default_dnssec = 'no'
1168endif
1169conf.set('DEFAULT_DNSSEC_MODE',
1170 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1171substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1172
5c23128d 1173want_importd = get_option('importd')
4390be30 1174if want_importd != 'false'
349cc4a5
ZJS
1175 have = (conf.get('HAVE_LIBCURL') == 1 and
1176 conf.get('HAVE_ZLIB') == 1 and
1177 conf.get('HAVE_BZIP2') == 1 and
1178 conf.get('HAVE_XZ') == 1 and
1179 conf.get('HAVE_GCRYPT') == 1)
1180 if want_importd == 'true' and not have
37efbbd8
ZJS
1181 error('importd support was requested, but dependencies are not available')
1182 endif
349cc4a5
ZJS
1183else
1184 have = false
5c23128d 1185endif
349cc4a5 1186conf.set10('ENABLE_IMPORTD', have)
5c23128d
ZJS
1187
1188want_remote = get_option('remote')
4390be30 1189if want_remote != 'false'
349cc4a5
ZJS
1190 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1191 conf.get('HAVE_LIBCURL') == 1]
37efbbd8
ZJS
1192 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1193 # it's possible to build one without the other. Complain only if
1194 # support was explictly requested. The auxiliary files like sysusers
1195 # config should be installed when any of the programs are built.
1196 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1197 error('remote support was requested, but dependencies are not available')
1198 endif
349cc4a5
ZJS
1199 have = have_deps[0] or have_deps[1]
1200else
1201 have = false
5c23128d 1202endif
349cc4a5 1203conf.set10('ENABLE_REMOTE', have)
5c23128d 1204
a9149d87
ZJS
1205foreach term : ['utmp',
1206 'hibernate',
1207 'environment-d',
1208 'binfmt',
1209 'coredump',
1210 'resolve',
1211 'logind',
1212 'hostnamed',
1213 'localed',
1214 'machined',
1215 'networkd',
1216 'timedated',
1217 'timesyncd',
1218 'myhostname',
1219 'firstboot',
1220 'randomseed',
1221 'backlight',
1222 'vconsole',
1223 'quotacheck',
1224 'sysusers',
1225 'tmpfiles',
1226 'hwdb',
1227 'rfkill',
1228 'ldconfig',
1229 'efi',
1230 'tpm',
1231 'ima',
1232 'smack',
1233 'gshadow',
1234 'idn',
1235 'nss-systemd']
1236 have = get_option(term)
1237 name = 'ENABLE_' + term.underscorify().to_upper()
1238 conf.set10(name, have)
1239 m4_defines += have ? ['-D' + name] : []
5c23128d
ZJS
1240endforeach
1241
69e96427 1242want_tests = get_option('tests')
572baca1 1243install_tests = get_option('install-tests')
b68dfb9e 1244slow_tests = get_option('slow-tests')
69e96427 1245tests = []
7db7d5b7 1246fuzzers = []
69e96427 1247
b68dfb9e 1248conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
00d82c81 1249
5c23128d
ZJS
1250#####################################################################
1251
1252if get_option('efi')
37efbbd8 1253 efi_arch = host_machine.cpu_family()
b710072d 1254
6800fe7f 1255 if efi_arch == 'x86'
37efbbd8 1256 EFI_MACHINE_TYPE_NAME = 'ia32'
6800fe7f 1257 gnu_efi_arch = 'ia32'
37efbbd8
ZJS
1258 elif efi_arch == 'x86_64'
1259 EFI_MACHINE_TYPE_NAME = 'x64'
6800fe7f 1260 gnu_efi_arch = 'x86_64'
37efbbd8
ZJS
1261 elif efi_arch == 'arm'
1262 EFI_MACHINE_TYPE_NAME = 'arm'
6800fe7f 1263 gnu_efi_arch = 'arm'
37efbbd8
ZJS
1264 elif efi_arch == 'aarch64'
1265 EFI_MACHINE_TYPE_NAME = 'aa64'
6800fe7f 1266 gnu_efi_arch = 'aarch64'
37efbbd8
ZJS
1267 else
1268 EFI_MACHINE_TYPE_NAME = ''
6800fe7f 1269 gnu_efi_arch = ''
37efbbd8 1270 endif
5c23128d 1271
349cc4a5 1272 have = true
37efbbd8 1273 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
80c6fce8
ZJS
1274
1275 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex').to_int())
349cc4a5
ZJS
1276else
1277 have = false
5c23128d 1278endif
349cc4a5 1279conf.set10('ENABLE_EFI', have)
5c23128d
ZJS
1280
1281#####################################################################
1282
1283config_h = configure_file(
37efbbd8
ZJS
1284 output : 'config.h',
1285 configuration : conf)
5c23128d
ZJS
1286
1287includes = include_directories('src/basic',
1288 'src/shared',
1289 'src/systemd',
1290 'src/journal',
1291 'src/resolve',
1292 'src/timesync',
5c3376ef 1293 'src/time-wait-sync',
5c23128d
ZJS
1294 'src/login',
1295 'src/udev',
1296 'src/libudev',
1297 'src/core',
1298 'src/libsystemd/sd-bus',
1299 'src/libsystemd/sd-device',
1300 'src/libsystemd/sd-hwdb',
1301 'src/libsystemd/sd-id128',
1302 'src/libsystemd/sd-netlink',
1303 'src/libsystemd/sd-network',
1304 'src/libsystemd-network',
2d4ceca8 1305 '.')
5c23128d
ZJS
1306
1307add_project_arguments('-include', 'config.h', language : 'c')
1308
5c23128d
ZJS
1309subdir('po')
1310subdir('catalog')
1311subdir('src/systemd')
1312subdir('src/basic')
1313subdir('src/libsystemd')
1314subdir('src/libsystemd-network')
5c23128d 1315subdir('src/journal')
5c23128d 1316subdir('src/login')
5c23128d
ZJS
1317
1318libjournal_core = static_library(
37efbbd8
ZJS
1319 'journal-core',
1320 libjournal_core_sources,
1321 journald_gperf_c,
1322 include_directories : includes,
1323 install : false)
5c23128d 1324
37ab1a25 1325libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
5c23128d 1326libsystemd = shared_library(
37efbbd8 1327 'systemd',
7f1ea2cc 1328 'src/systemd/sd-id128.h', # pick a header file at random to work around old meson bug
56d50ab1 1329 version : libsystemd_version,
37efbbd8
ZJS
1330 include_directories : includes,
1331 link_args : ['-shared',
1332 '-Wl,--version-script=' + libsystemd_sym_path],
34e221a5
ZJS
1333 link_with : [libbasic,
1334 libbasic_gcrypt],
5e3cec87
ZJS
1335 link_whole : [libsystemd_static,
1336 libjournal_client],
37efbbd8
ZJS
1337 dependencies : [threads,
1338 librt,
1339 libxz,
1340 liblz4],
1341 link_depends : libsystemd_sym,
1342 install : true,
1343 install_dir : rootlibdir)
5c23128d
ZJS
1344
1345############################################################
1346
83b6af36
ZJS
1347# binaries that have --help and are intended for use by humans,
1348# usually, but not always, installed in /bin.
1349public_programs = []
1350
1351subdir('src/libudev')
1352subdir('src/shared')
1353subdir('src/core')
1354subdir('src/udev')
1355subdir('src/network')
1356
1357subdir('src/analyze')
1358subdir('src/journal-remote')
1359subdir('src/coredump')
1360subdir('src/hostname')
1361subdir('src/import')
1362subdir('src/kernel-install')
1363subdir('src/locale')
1364subdir('src/machine')
1365subdir('src/nspawn')
1366subdir('src/resolve')
1367subdir('src/timedate')
1368subdir('src/timesync')
1369subdir('src/vconsole')
83b6af36
ZJS
1370subdir('src/boot/efi')
1371
1372subdir('src/test')
7db7d5b7 1373subdir('src/fuzz')
6b97bf22 1374subdir('rules')
83b6af36
ZJS
1375subdir('test')
1376
1377############################################################
1378
1379# only static linking apart from libdl, to make sure that the
1380# module is linked to all libraries that it uses.
1381test_dlopen = executable(
37efbbd8
ZJS
1382 'test-dlopen',
1383 test_dlopen_c,
1384 include_directories : includes,
1385 link_with : [libbasic],
1386 dependencies : [libdl])
83b6af36 1387
08cf5b8d 1388foreach tuple : [['myhostname', 'ENABLE_MYHOSTNAME'],
e7e11bbf 1389 ['systemd', 'ENABLE_NSS_SYSTEMD'],
5486a31d 1390 ['mymachines', 'ENABLE_MACHINED'],
1ec57f33 1391 ['resolve', 'ENABLE_RESOLVE']]
5c23128d 1392
349cc4a5 1393 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1394 if condition
1395 module = tuple[0]
37efbbd8
ZJS
1396
1397 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1398 version_script_arg = join_paths(meson.current_source_dir(), sym)
1399
1400 nss = shared_library(
1401 'nss_' + module,
1402 'src/nss-@0@/nss-@0@.c'.format(module),
1403 version : '2',
1404 include_directories : includes,
b4b36f44
LP
1405 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1406 link_args : ['-Wl,-z,nodelete',
1407 '-shared',
37efbbd8
ZJS
1408 '-Wl,--version-script=' + version_script_arg,
1409 '-Wl,--undefined'],
37e4d7a8 1410 link_with : [libsystemd_static,
37efbbd8
ZJS
1411 libbasic],
1412 dependencies : [threads,
5486a31d 1413 librt],
37efbbd8
ZJS
1414 link_depends : sym,
1415 install : true,
1416 install_dir : rootlibdir)
1417
1418 # We cannot use shared_module because it does not support version suffix.
1419 # Unfortunately shared_library insists on creating the symlink…
1420 meson.add_install_script('sh', '-c',
1421 'rm $DESTDIR@0@/libnss_@1@.so'
1422 .format(rootlibdir, module))
1423
1424 test('dlopen-nss_' + module,
1425 test_dlopen,
1426 args : [nss.full_path()]) # path to dlopen must include a slash
1427 endif
5c23128d
ZJS
1428endforeach
1429
1430############################################################
1431
5c23128d
ZJS
1432executable('systemd',
1433 systemd_sources,
1434 include_directories : includes,
1435 link_with : [libcore,
34ce0a52 1436 libshared],
5c23128d
ZJS
1437 dependencies : [threads,
1438 librt,
1439 libseccomp,
1440 libselinux,
f4ee10a2
ZJS
1441 libmount,
1442 libblkid],
421f0012 1443 install_rpath : rootlibexecdir,
5c23128d
ZJS
1444 install : true,
1445 install_dir : rootlibexecdir)
1446
ba7f4ae6
ZJS
1447meson.add_install_script(meson_make_symlink,
1448 join_paths(rootlibexecdir, 'systemd'),
1449 join_paths(rootsbindir, 'init'))
1450
005a29f2
ZJS
1451exe = executable('systemd-analyze',
1452 systemd_analyze_sources,
1453 include_directories : includes,
1454 link_with : [libcore,
005a29f2
ZJS
1455 libshared],
1456 dependencies : [threads,
1457 librt,
1458 libseccomp,
1459 libselinux,
1460 libmount,
1461 libblkid],
1462 install_rpath : rootlibexecdir,
1463 install : true)
1464public_programs += [exe]
5c23128d
ZJS
1465
1466executable('systemd-journald',
1467 systemd_journald_sources,
1468 include_directories : includes,
aac26058 1469 link_with : [libjournal_core,
34ce0a52 1470 libshared],
5c23128d
ZJS
1471 dependencies : [threads,
1472 libxz,
aac26058
ZJS
1473 liblz4,
1474 libselinux],
421f0012 1475 install_rpath : rootlibexecdir,
5c23128d
ZJS
1476 install : true,
1477 install_dir : rootlibexecdir)
1478
005a29f2
ZJS
1479exe = executable('systemd-cat',
1480 systemd_cat_sources,
1481 include_directories : includes,
1482 link_with : [libjournal_core,
34ce0a52 1483 libshared],
005a29f2
ZJS
1484 dependencies : [threads],
1485 install_rpath : rootlibexecdir,
1486 install : true)
1487public_programs += [exe]
1488
1489exe = executable('journalctl',
1490 journalctl_sources,
1491 include_directories : includes,
34ce0a52 1492 link_with : [libshared],
005a29f2
ZJS
1493 dependencies : [threads,
1494 libqrencode,
1495 libxz,
6becf48c
ZJS
1496 liblz4,
1497 libpcre2],
005a29f2
ZJS
1498 install_rpath : rootlibexecdir,
1499 install : true,
1500 install_dir : rootbindir)
1501public_programs += [exe]
5c23128d
ZJS
1502
1503executable('systemd-getty-generator',
1504 'src/getty-generator/getty-generator.c',
5c23128d 1505 include_directories : includes,
b2fc5836
ZJS
1506 link_with : [libshared],
1507 install_rpath : rootlibexecdir,
1508 install : true,
1509 install_dir : systemgeneratordir)
5c23128d
ZJS
1510
1511executable('systemd-debug-generator',
1512 'src/debug-generator/debug-generator.c',
5c23128d 1513 include_directories : includes,
b2fc5836
ZJS
1514 link_with : [libshared],
1515 install_rpath : rootlibexecdir,
1516 install : true,
1517 install_dir : systemgeneratordir)
5c23128d
ZJS
1518
1519executable('systemd-fstab-generator',
1520 'src/fstab-generator/fstab-generator.c',
1521 'src/core/mount-setup.c',
5c23128d 1522 include_directories : includes,
b2fc5836
ZJS
1523 link_with : [libshared],
1524 install_rpath : rootlibexecdir,
1525 install : true,
1526 install_dir : systemgeneratordir)
5c23128d 1527
349cc4a5 1528if conf.get('ENABLE_ENVIRONMENT_D') == 1
37efbbd8
ZJS
1529 executable('30-systemd-environment-d-generator',
1530 'src/environment-d-generator/environment-d-generator.c',
1531 include_directories : includes,
1532 link_with : [libshared],
1533 install_rpath : rootlibexecdir,
1534 install : true,
1535 install_dir : userenvgeneratordir)
7b76fce1 1536
37efbbd8
ZJS
1537 meson.add_install_script(meson_make_symlink,
1538 join_paths(sysconfdir, 'environment'),
1539 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1540endif
1541
349cc4a5 1542if conf.get('ENABLE_HIBERNATE') == 1
37efbbd8
ZJS
1543 executable('systemd-hibernate-resume-generator',
1544 'src/hibernate-resume/hibernate-resume-generator.c',
1545 include_directories : includes,
1546 link_with : [libshared],
1547 install_rpath : rootlibexecdir,
1548 install : true,
1549 install_dir : systemgeneratordir)
5c23128d 1550
37efbbd8
ZJS
1551 executable('systemd-hibernate-resume',
1552 'src/hibernate-resume/hibernate-resume.c',
005a29f2
ZJS
1553 include_directories : includes,
1554 link_with : [libshared],
1555 install_rpath : rootlibexecdir,
1556 install : true,
1557 install_dir : rootlibexecdir)
37efbbd8
ZJS
1558endif
1559
349cc4a5 1560if conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1561 executable('systemd-gpt-auto-generator',
1562 'src/gpt-auto-generator/gpt-auto-generator.c',
1563 'src/basic/blkid-util.h',
1564 include_directories : includes,
34ce0a52 1565 link_with : [libshared],
37efbbd8
ZJS
1566 dependencies : libblkid,
1567 install_rpath : rootlibexecdir,
1568 install : true,
1569 install_dir : systemgeneratordir)
1570
1571 exe = executable('systemd-dissect',
1572 'src/dissect/dissect.c',
1573 include_directories : includes,
1574 link_with : [libshared],
1575 install_rpath : rootlibexecdir,
1576 install : true,
1577 install_dir : rootlibexecdir)
1578 public_programs += [exe]
5c23128d
ZJS
1579endif
1580
1ec57f33 1581if conf.get('ENABLE_RESOLVE') == 1
37efbbd8
ZJS
1582 executable('systemd-resolved',
1583 systemd_resolved_sources,
005a29f2 1584 include_directories : includes,
34e221a5 1585 link_with : [libshared,
568a4ff8
ZJS
1586 libbasic_gcrypt,
1587 libsystemd_resolve_core],
005a29f2 1588 dependencies : [threads,
76c87410 1589 libgpg_error,
005a29f2
ZJS
1590 libm,
1591 libidn],
1592 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1593 install : true,
1594 install_dir : rootlibexecdir)
1595
c2e84cab
YW
1596 exe = executable('resolvectl',
1597 resolvectl_sources,
37efbbd8 1598 include_directories : includes,
34e221a5 1599 link_with : [libshared,
568a4ff8
ZJS
1600 libbasic_gcrypt,
1601 libsystemd_resolve_core],
37efbbd8 1602 dependencies : [threads,
76c87410 1603 libgpg_error,
37efbbd8
ZJS
1604 libm,
1605 libidn],
1606 install_rpath : rootlibexecdir,
1607 install : true)
1608 public_programs += [exe]
088c1363
LP
1609
1610 meson.add_install_script(meson_make_symlink,
c2e84cab 1611 join_paths(bindir, 'resolvectl'),
088c1363 1612 join_paths(rootsbindir, 'resolvconf'))
c2e84cab
YW
1613
1614 meson.add_install_script(meson_make_symlink,
1615 join_paths(bindir, 'resolvectl'),
1616 join_paths(bindir, 'systemd-resolve'))
5c23128d
ZJS
1617endif
1618
349cc4a5 1619if conf.get('ENABLE_LOGIND') == 1
37efbbd8
ZJS
1620 executable('systemd-logind',
1621 systemd_logind_sources,
005a29f2 1622 include_directories : includes,
37efbbd8 1623 link_with : [liblogind_core,
34ce0a52 1624 libshared],
005a29f2 1625 dependencies : [threads,
37efbbd8 1626 libacl],
005a29f2
ZJS
1627 install_rpath : rootlibexecdir,
1628 install : true,
37efbbd8
ZJS
1629 install_dir : rootlibexecdir)
1630
1631 exe = executable('loginctl',
1632 loginctl_sources,
1633 include_directories : includes,
34ce0a52 1634 link_with : [libshared],
37efbbd8
ZJS
1635 dependencies : [threads,
1636 liblz4,
1637 libxz],
1638 install_rpath : rootlibexecdir,
1639 install : true,
1640 install_dir : rootbindir)
1641 public_programs += [exe]
1642
1643 exe = executable('systemd-inhibit',
1644 'src/login/inhibit.c',
1645 include_directories : includes,
1646 link_with : [libshared],
1647 install_rpath : rootlibexecdir,
1648 install : true,
1649 install_dir : rootbindir)
1650 public_programs += [exe]
1651
349cc4a5 1652 if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1653 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1654 pam_systemd = shared_library(
1655 'pam_systemd',
1656 pam_systemd_c,
1657 name_prefix : '',
1658 include_directories : includes,
1659 link_args : ['-shared',
1660 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1661 link_with : [libsystemd_static,
37efbbd8
ZJS
1662 libshared_static],
1663 dependencies : [threads,
1664 libpam,
1665 libpam_misc],
1666 link_depends : pam_systemd_sym,
1667 install : true,
1668 install_dir : pamlibdir)
1669
1670 test('dlopen-pam_systemd',
1671 test_dlopen,
1672 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1673 endif
1674endif
005a29f2 1675
349cc4a5 1676if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1677 executable('systemd-user-sessions',
1678 'src/user-sessions/user-sessions.c',
005a29f2 1679 include_directories : includes,
aac26058 1680 link_with : [libshared],
005a29f2
ZJS
1681 install_rpath : rootlibexecdir,
1682 install : true,
37efbbd8 1683 install_dir : rootlibexecdir)
5c23128d
ZJS
1684endif
1685
349cc4a5 1686if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1687 exe = executable('bootctl',
1688 'src/boot/bootctl.c',
1689 include_directories : includes,
1690 link_with : [libshared],
1691 dependencies : [libblkid],
1692 install_rpath : rootlibexecdir,
1693 install : true)
1694 public_programs += [exe]
005a29f2
ZJS
1695endif
1696
1697exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1698 include_directories : includes,
1699 link_with : [libshared],
1700 dependencies : [threads],
1701 install_rpath : rootlibexecdir,
1702 install : true)
1703public_programs += [exe]
1704
1705exe = executable('systemctl', 'src/systemctl/systemctl.c',
1706 include_directories : includes,
aac26058 1707 link_with : [libshared],
005a29f2
ZJS
1708 dependencies : [threads,
1709 libcap,
1710 libselinux,
1711 libxz,
1712 liblz4],
1713 install_rpath : rootlibexecdir,
1714 install : true,
1715 install_dir : rootbindir)
1716public_programs += [exe]
5c23128d 1717
ba7f4ae6
ZJS
1718foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1719 meson.add_install_script(meson_make_symlink,
1720 join_paths(rootbindir, 'systemctl'),
1721 join_paths(rootsbindir, alias))
1722endforeach
1723
349cc4a5 1724if conf.get('ENABLE_BACKLIGHT') == 1
37efbbd8
ZJS
1725 executable('systemd-backlight',
1726 'src/backlight/backlight.c',
1727 include_directories : includes,
34ce0a52 1728 link_with : [libshared],
37efbbd8
ZJS
1729 install_rpath : rootlibexecdir,
1730 install : true,
1731 install_dir : rootlibexecdir)
5c23128d
ZJS
1732endif
1733
349cc4a5 1734if conf.get('ENABLE_RFKILL') == 1
37efbbd8
ZJS
1735 executable('systemd-rfkill',
1736 'src/rfkill/rfkill.c',
1737 include_directories : includes,
34ce0a52 1738 link_with : [libshared],
37efbbd8
ZJS
1739 install_rpath : rootlibexecdir,
1740 install : true,
1741 install_dir : rootlibexecdir)
5c23128d
ZJS
1742endif
1743
1744executable('systemd-system-update-generator',
1745 'src/system-update-generator/system-update-generator.c',
1746 include_directories : includes,
1747 link_with : [libshared],
b2fc5836 1748 install_rpath : rootlibexecdir,
5c23128d
ZJS
1749 install : true,
1750 install_dir : systemgeneratordir)
1751
349cc4a5 1752if conf.get('HAVE_LIBCRYPTSETUP') == 1
37efbbd8
ZJS
1753 executable('systemd-cryptsetup',
1754 'src/cryptsetup/cryptsetup.c',
1755 include_directories : includes,
1756 link_with : [libshared],
1757 dependencies : [libcryptsetup],
1758 install_rpath : rootlibexecdir,
1759 install : true,
1760 install_dir : rootlibexecdir)
1761
1762 executable('systemd-cryptsetup-generator',
1763 'src/cryptsetup/cryptsetup-generator.c',
1764 include_directories : includes,
1765 link_with : [libshared],
1766 dependencies : [libcryptsetup],
1767 install_rpath : rootlibexecdir,
1768 install : true,
1769 install_dir : systemgeneratordir)
1770
1771 executable('systemd-veritysetup',
1772 'src/veritysetup/veritysetup.c',
1773 include_directories : includes,
1774 link_with : [libshared],
1775 dependencies : [libcryptsetup],
1776 install_rpath : rootlibexecdir,
1777 install : true,
1778 install_dir : rootlibexecdir)
1779
1780 executable('systemd-veritysetup-generator',
1781 'src/veritysetup/veritysetup-generator.c',
1782 include_directories : includes,
1783 link_with : [libshared],
1784 dependencies : [libcryptsetup],
1785 install_rpath : rootlibexecdir,
1786 install : true,
1787 install_dir : systemgeneratordir)
5c23128d
ZJS
1788endif
1789
349cc4a5 1790if conf.get('HAVE_SYSV_COMPAT') == 1
37efbbd8
ZJS
1791 executable('systemd-sysv-generator',
1792 'src/sysv-generator/sysv-generator.c',
1793 include_directories : includes,
1794 link_with : [libshared],
1795 install_rpath : rootlibexecdir,
1796 install : true,
1797 install_dir : systemgeneratordir)
1798
1799 executable('systemd-rc-local-generator',
1800 'src/rc-local-generator/rc-local-generator.c',
1801 include_directories : includes,
1802 link_with : [libshared],
1803 install_rpath : rootlibexecdir,
1804 install : true,
1805 install_dir : systemgeneratordir)
5c23128d
ZJS
1806endif
1807
349cc4a5 1808if conf.get('ENABLE_HOSTNAMED') == 1
37efbbd8
ZJS
1809 executable('systemd-hostnamed',
1810 'src/hostname/hostnamed.c',
005a29f2 1811 include_directories : includes,
aac26058 1812 link_with : [libshared],
005a29f2 1813 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1814 install : true,
1815 install_dir : rootlibexecdir)
1816
1817 exe = executable('hostnamectl',
1818 'src/hostname/hostnamectl.c',
1819 include_directories : includes,
1820 link_with : [libshared],
1821 install_rpath : rootlibexecdir,
1822 install : true)
1823 public_programs += [exe]
5c23128d
ZJS
1824endif
1825
349cc4a5
ZJS
1826if conf.get('ENABLE_LOCALED') == 1
1827 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
1828 # logind will load libxkbcommon.so dynamically on its own
1829 deps = [libdl]
1830 else
1831 deps = []
1832 endif
1833
1834 executable('systemd-localed',
1835 systemd_localed_sources,
005a29f2 1836 include_directories : includes,
aac26058 1837 link_with : [libshared],
37efbbd8 1838 dependencies : deps,
005a29f2 1839 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1840 install : true,
1841 install_dir : rootlibexecdir)
1842
1843 exe = executable('localectl',
1844 localectl_sources,
1845 include_directories : includes,
1846 link_with : [libshared],
1847 install_rpath : rootlibexecdir,
1848 install : true)
1849 public_programs += [exe]
5c23128d
ZJS
1850endif
1851
349cc4a5 1852if conf.get('ENABLE_TIMEDATED') == 1
37efbbd8
ZJS
1853 executable('systemd-timedated',
1854 'src/timedate/timedated.c',
005a29f2 1855 include_directories : includes,
aac26058 1856 link_with : [libshared],
37efbbd8
ZJS
1857 install_rpath : rootlibexecdir,
1858 install : true,
1859 install_dir : rootlibexecdir)
5c23128d 1860
37efbbd8
ZJS
1861 exe = executable('timedatectl',
1862 'src/timedate/timedatectl.c',
1863 include_directories : includes,
1864 install_rpath : rootlibexecdir,
1865 link_with : [libshared],
1866 install : true)
1867 public_programs += [exe]
5c23128d
ZJS
1868endif
1869
349cc4a5 1870if conf.get('ENABLE_TIMESYNCD') == 1
37efbbd8
ZJS
1871 executable('systemd-timesyncd',
1872 systemd_timesyncd_sources,
005a29f2 1873 include_directories : includes,
aac26058 1874 link_with : [libshared],
005a29f2 1875 dependencies : [threads,
37efbbd8 1876 libm],
005a29f2
ZJS
1877 install_rpath : rootlibexecdir,
1878 install : true,
37efbbd8 1879 install_dir : rootlibexecdir)
5c3376ef
PB
1880
1881 executable('systemd-time-wait-sync',
1882 'src/time-wait-sync/time-wait-sync.c',
1883 include_directories : includes,
1884 link_with : [libshared],
1885 install_rpath : rootlibexecdir,
1886 install : true,
1887 install_dir : rootlibexecdir)
5c23128d
ZJS
1888endif
1889
349cc4a5 1890if conf.get('ENABLE_MACHINED') == 1
37efbbd8
ZJS
1891 executable('systemd-machined',
1892 systemd_machined_sources,
1893 include_directories : includes,
1894 link_with : [libmachine_core,
1895 libshared],
1896 install_rpath : rootlibexecdir,
1897 install : true,
1898 install_dir : rootlibexecdir)
1899
1900 exe = executable('machinectl',
1901 'src/machine/machinectl.c',
1902 include_directories : includes,
1903 link_with : [libshared],
1904 dependencies : [threads,
1905 libxz,
1906 liblz4],
1907 install_rpath : rootlibexecdir,
1908 install : true,
1909 install_dir : rootbindir)
1910 public_programs += [exe]
5c23128d
ZJS
1911endif
1912
349cc4a5 1913if conf.get('ENABLE_IMPORTD') == 1
37efbbd8
ZJS
1914 executable('systemd-importd',
1915 systemd_importd_sources,
005a29f2 1916 include_directories : includes,
aac26058 1917 link_with : [libshared],
37efbbd8 1918 dependencies : [threads],
005a29f2
ZJS
1919 install_rpath : rootlibexecdir,
1920 install : true,
1921 install_dir : rootlibexecdir)
37efbbd8
ZJS
1922
1923 systemd_pull = executable('systemd-pull',
1924 systemd_pull_sources,
1925 include_directories : includes,
1926 link_with : [libshared],
1927 dependencies : [libcurl,
1928 libz,
1929 libbzip2,
1930 libxz,
1931 libgcrypt],
1932 install_rpath : rootlibexecdir,
1933 install : true,
1934 install_dir : rootlibexecdir)
1935
1936 systemd_import = executable('systemd-import',
1937 systemd_import_sources,
1938 include_directories : includes,
1939 link_with : [libshared],
1940 dependencies : [libcurl,
1941 libz,
1942 libbzip2,
1943 libxz],
1944 install_rpath : rootlibexecdir,
1945 install : true,
1946 install_dir : rootlibexecdir)
1947
1948 systemd_export = executable('systemd-export',
1949 systemd_export_sources,
1950 include_directories : includes,
1951 link_with : [libshared],
1952 dependencies : [libcurl,
1953 libz,
1954 libbzip2,
1955 libxz],
1956 install_rpath : rootlibexecdir,
1957 install : true,
1958 install_dir : rootlibexecdir)
1959 public_programs += [systemd_pull, systemd_import, systemd_export]
1960endif
1961
349cc4a5 1962if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
37efbbd8
ZJS
1963 exe = executable('systemd-journal-upload',
1964 systemd_journal_upload_sources,
1965 include_directories : includes,
1966 link_with : [libshared],
1967 dependencies : [threads,
1968 libcurl,
1969 libgnutls,
1970 libxz,
1971 liblz4],
1972 install_rpath : rootlibexecdir,
1973 install : true,
1974 install_dir : rootlibexecdir)
1975 public_programs += [exe]
5c23128d
ZJS
1976endif
1977
349cc4a5 1978if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
37efbbd8
ZJS
1979 s_j_remote = executable('systemd-journal-remote',
1980 systemd_journal_remote_sources,
1981 include_directories : includes,
1982 link_with : [libshared],
1983 dependencies : [threads,
1984 libmicrohttpd,
1985 libgnutls,
1986 libxz,
1987 liblz4],
1988 install_rpath : rootlibexecdir,
1989 install : true,
1990 install_dir : rootlibexecdir)
1991
1992 s_j_gatewayd = executable('systemd-journal-gatewayd',
1993 systemd_journal_gatewayd_sources,
1994 include_directories : includes,
1995 link_with : [libshared],
1996 dependencies : [threads,
1997 libmicrohttpd,
1998 libgnutls,
1999 libxz,
2000 liblz4],
2001 install_rpath : rootlibexecdir,
2002 install : true,
2003 install_dir : rootlibexecdir)
2004 public_programs += [s_j_remote, s_j_gatewayd]
5c23128d
ZJS
2005endif
2006
349cc4a5 2007if conf.get('ENABLE_COREDUMP') == 1
37efbbd8
ZJS
2008 executable('systemd-coredump',
2009 systemd_coredump_sources,
005a29f2 2010 include_directories : includes,
aac26058 2011 link_with : [libshared],
005a29f2 2012 dependencies : [threads,
37efbbd8
ZJS
2013 libacl,
2014 libdw,
005a29f2
ZJS
2015 libxz,
2016 liblz4],
2017 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2018 install : true,
2019 install_dir : rootlibexecdir)
2020
2021 exe = executable('coredumpctl',
2022 coredumpctl_sources,
2023 include_directories : includes,
2024 link_with : [libshared],
2025 dependencies : [threads,
2026 libxz,
2027 liblz4],
2028 install_rpath : rootlibexecdir,
2029 install : true)
2030 public_programs += [exe]
5c23128d
ZJS
2031endif
2032
349cc4a5 2033if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2034 exe = executable('systemd-binfmt',
2035 'src/binfmt/binfmt.c',
2036 include_directories : includes,
2037 link_with : [libshared],
2038 install_rpath : rootlibexecdir,
2039 install : true,
2040 install_dir : rootlibexecdir)
2041 public_programs += [exe]
2042
2043 meson.add_install_script('sh', '-c',
2044 mkdir_p.format(binfmtdir))
2045 meson.add_install_script('sh', '-c',
2046 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2047endif
2048
349cc4a5 2049if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2050 executable('systemd-vconsole-setup',
2051 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2052 include_directories : includes,
2053 link_with : [libshared],
2054 install_rpath : rootlibexecdir,
2055 install : true,
2056 install_dir : rootlibexecdir)
5c23128d
ZJS
2057endif
2058
349cc4a5 2059if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2060 executable('systemd-random-seed',
2061 'src/random-seed/random-seed.c',
2062 include_directories : includes,
2063 link_with : [libshared],
2064 install_rpath : rootlibexecdir,
2065 install : true,
2066 install_dir : rootlibexecdir)
5c23128d
ZJS
2067endif
2068
349cc4a5 2069if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2070 executable('systemd-firstboot',
2071 'src/firstboot/firstboot.c',
2072 include_directories : includes,
2073 link_with : [libshared],
2074 dependencies : [libcrypt],
2075 install_rpath : rootlibexecdir,
2076 install : true,
2077 install_dir : rootbindir)
5c23128d
ZJS
2078endif
2079
2080executable('systemd-remount-fs',
2081 'src/remount-fs/remount-fs.c',
2082 'src/core/mount-setup.c',
2083 'src/core/mount-setup.h',
2084 include_directories : includes,
2085 link_with : [libshared],
b2fc5836 2086 install_rpath : rootlibexecdir,
5c23128d
ZJS
2087 install : true,
2088 install_dir : rootlibexecdir)
2089
2090executable('systemd-machine-id-setup',
2091 'src/machine-id-setup/machine-id-setup-main.c',
2092 'src/core/machine-id-setup.c',
2093 'src/core/machine-id-setup.h',
2094 include_directories : includes,
aac26058 2095 link_with : [libshared],
b2fc5836 2096 install_rpath : rootlibexecdir,
5c23128d
ZJS
2097 install : true,
2098 install_dir : rootbindir)
2099
2100executable('systemd-fsck',
2101 'src/fsck/fsck.c',
2102 include_directories : includes,
aac26058 2103 link_with : [libshared],
421f0012 2104 install_rpath : rootlibexecdir,
5c23128d
ZJS
2105 install : true,
2106 install_dir : rootlibexecdir)
2107
80750adb
ZJS
2108executable('systemd-growfs',
2109 'src/partition/growfs.c',
2110 include_directories : includes,
2111 link_with : [libshared],
c34b75a1 2112 dependencies : [libcryptsetup],
80750adb
ZJS
2113 install_rpath : rootlibexecdir,
2114 install : true,
2115 install_dir : rootlibexecdir)
2116
b7f28ac5
ZJS
2117executable('systemd-makefs',
2118 'src/partition/makefs.c',
2119 include_directories : includes,
2120 link_with : [libshared],
2121 install_rpath : rootlibexecdir,
2122 install : true,
2123 install_dir : rootlibexecdir)
2124
5c23128d
ZJS
2125executable('systemd-sleep',
2126 'src/sleep/sleep.c',
2127 include_directories : includes,
2128 link_with : [libshared],
421f0012 2129 install_rpath : rootlibexecdir,
5c23128d
ZJS
2130 install : true,
2131 install_dir : rootlibexecdir)
2132
005a29f2
ZJS
2133exe = executable('systemd-sysctl',
2134 'src/sysctl/sysctl.c',
2135 include_directories : includes,
2136 link_with : [libshared],
2137 install_rpath : rootlibexecdir,
2138 install : true,
2139 install_dir : rootlibexecdir)
2140public_programs += [exe]
5c23128d
ZJS
2141
2142executable('systemd-ac-power',
2143 'src/ac-power/ac-power.c',
2144 include_directories : includes,
2145 link_with : [libshared],
421f0012 2146 install_rpath : rootlibexecdir,
5c23128d
ZJS
2147 install : true,
2148 install_dir : rootlibexecdir)
2149
005a29f2
ZJS
2150exe = executable('systemd-detect-virt',
2151 'src/detect-virt/detect-virt.c',
2152 include_directories : includes,
2153 link_with : [libshared],
2154 install_rpath : rootlibexecdir,
2155 install : true)
2156public_programs += [exe]
2157
2158exe = executable('systemd-delta',
2159 'src/delta/delta.c',
2160 include_directories : includes,
2161 link_with : [libshared],
2162 install_rpath : rootlibexecdir,
2163 install : true)
2164public_programs += [exe]
2165
2166exe = executable('systemd-escape',
2167 'src/escape/escape.c',
2168 include_directories : includes,
2169 link_with : [libshared],
2170 install_rpath : rootlibexecdir,
2171 install : true,
2172 install_dir : rootbindir)
2173public_programs += [exe]
2174
2175exe = executable('systemd-notify',
2176 'src/notify/notify.c',
2177 include_directories : includes,
2178 link_with : [libshared],
2179 install_rpath : rootlibexecdir,
2180 install : true,
2181 install_dir : rootbindir)
2182public_programs += [exe]
5c23128d
ZJS
2183
2184executable('systemd-volatile-root',
2185 'src/volatile-root/volatile-root.c',
2186 include_directories : includes,
2187 link_with : [libshared],
421f0012 2188 install_rpath : rootlibexecdir,
5c23128d
ZJS
2189 install : true,
2190 install_dir : rootlibexecdir)
2191
2192executable('systemd-cgroups-agent',
2193 'src/cgroups-agent/cgroups-agent.c',
2194 include_directories : includes,
2195 link_with : [libshared],
421f0012 2196 install_rpath : rootlibexecdir,
5c23128d
ZJS
2197 install : true,
2198 install_dir : rootlibexecdir)
2199
005a29f2
ZJS
2200exe = executable('systemd-path',
2201 'src/path/path.c',
2202 include_directories : includes,
aac26058 2203 link_with : [libshared],
005a29f2
ZJS
2204 install_rpath : rootlibexecdir,
2205 install : true)
2206public_programs += [exe]
2207
2208exe = executable('systemd-ask-password',
2209 'src/ask-password/ask-password.c',
2210 include_directories : includes,
aac26058 2211 link_with : [libshared],
005a29f2
ZJS
2212 install_rpath : rootlibexecdir,
2213 install : true,
2214 install_dir : rootbindir)
2215public_programs += [exe]
5c23128d
ZJS
2216
2217executable('systemd-reply-password',
2218 'src/reply-password/reply-password.c',
2219 include_directories : includes,
aac26058 2220 link_with : [libshared],
421f0012 2221 install_rpath : rootlibexecdir,
5c23128d
ZJS
2222 install : true,
2223 install_dir : rootlibexecdir)
2224
005a29f2
ZJS
2225exe = executable('systemd-tty-ask-password-agent',
2226 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2227 include_directories : includes,
aac26058 2228 link_with : [libshared],
005a29f2
ZJS
2229 install_rpath : rootlibexecdir,
2230 install : true,
2231 install_dir : rootbindir)
2232public_programs += [exe]
2233
2234exe = executable('systemd-cgls',
2235 'src/cgls/cgls.c',
2236 include_directories : includes,
aac26058 2237 link_with : [libshared],
005a29f2
ZJS
2238 install_rpath : rootlibexecdir,
2239 install : true)
2240public_programs += [exe]
2241
2242exe = executable('systemd-cgtop',
2243 'src/cgtop/cgtop.c',
2244 include_directories : includes,
aac26058 2245 link_with : [libshared],
005a29f2
ZJS
2246 install_rpath : rootlibexecdir,
2247 install : true)
2248public_programs += [exe]
5c23128d
ZJS
2249
2250executable('systemd-initctl',
2251 'src/initctl/initctl.c',
2252 include_directories : includes,
aac26058 2253 link_with : [libshared],
421f0012 2254 install_rpath : rootlibexecdir,
5c23128d
ZJS
2255 install : true,
2256 install_dir : rootlibexecdir)
2257
005a29f2
ZJS
2258exe = executable('systemd-mount',
2259 'src/mount/mount-tool.c',
2260 include_directories : includes,
34ce0a52 2261 link_with : [libshared],
005a29f2
ZJS
2262 install_rpath : rootlibexecdir,
2263 install : true)
2264public_programs += [exe]
5c23128d 2265
7b76fce1 2266meson.add_install_script(meson_make_symlink,
e17e5ba9 2267 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2268
005a29f2
ZJS
2269exe = executable('systemd-run',
2270 'src/run/run.c',
2271 include_directories : includes,
aac26058 2272 link_with : [libshared],
005a29f2
ZJS
2273 install_rpath : rootlibexecdir,
2274 install : true)
2275public_programs += [exe]
2276
2277exe = executable('systemd-stdio-bridge',
2278 'src/stdio-bridge/stdio-bridge.c',
2279 include_directories : includes,
aac26058 2280 link_with : [libshared],
005a29f2
ZJS
2281 install_rpath : rootlibexecdir,
2282 install : true)
2283public_programs += [exe]
2284
2285exe = executable('busctl',
2286 'src/busctl/busctl.c',
2287 'src/busctl/busctl-introspect.c',
2288 'src/busctl/busctl-introspect.h',
2289 include_directories : includes,
aac26058 2290 link_with : [libshared],
005a29f2
ZJS
2291 install_rpath : rootlibexecdir,
2292 install : true)
2293public_programs += [exe]
5c23128d 2294
349cc4a5 2295if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2296 exe = executable('systemd-sysusers',
2297 'src/sysusers/sysusers.c',
2298 include_directories : includes,
2299 link_with : [libshared],
2300 install_rpath : rootlibexecdir,
2301 install : true,
2302 install_dir : rootbindir)
2303 public_programs += [exe]
5c23128d
ZJS
2304endif
2305
349cc4a5 2306if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2307 exe = executable('systemd-tmpfiles',
2308 'src/tmpfiles/tmpfiles.c',
2309 include_directories : includes,
2310 link_with : [libshared],
2311 dependencies : [libacl],
2312 install_rpath : rootlibexecdir,
2313 install : true,
2314 install_dir : rootbindir)
2315 public_programs += [exe]
d9daae55
ZJS
2316
2317 test('test-systemd-tmpfiles',
2318 test_systemd_tmpfiles_py,
2319 args : exe.full_path())
2320 # https://github.com/mesonbuild/meson/issues/2681
5c23128d
ZJS
2321endif
2322
349cc4a5 2323if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2324 exe = executable('systemd-hwdb',
2325 'src/hwdb/hwdb.c',
2326 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2327 include_directories : includes,
0c06b506 2328 link_with : [libudev_static],
0da6f396 2329 install_rpath : udev_rpath,
37efbbd8
ZJS
2330 install : true,
2331 install_dir : rootbindir)
2332 public_programs += [exe]
2333endif
2334
349cc4a5 2335if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2336 executable('systemd-quotacheck',
2337 'src/quotacheck/quotacheck.c',
005a29f2 2338 include_directories : includes,
aac26058 2339 link_with : [libshared],
005a29f2
ZJS
2340 install_rpath : rootlibexecdir,
2341 install : true,
37efbbd8 2342 install_dir : rootlibexecdir)
5c23128d
ZJS
2343endif
2344
005a29f2
ZJS
2345exe = executable('systemd-socket-proxyd',
2346 'src/socket-proxy/socket-proxyd.c',
2347 include_directories : includes,
aac26058 2348 link_with : [libshared],
005a29f2
ZJS
2349 dependencies : [threads],
2350 install_rpath : rootlibexecdir,
2351 install : true,
2352 install_dir : rootlibexecdir)
2353public_programs += [exe]
2354
2355exe = executable('systemd-udevd',
2356 systemd_udevd_sources,
2357 include_directories : includes,
5c72049f 2358 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2 2359 link_with : [libudev_core,
005a29f2 2360 libsystemd_network,
0c06b506 2361 libudev_static],
3a30f21f
ZJS
2362 dependencies : [threads,
2363 libkmod,
005a29f2 2364 libidn,
aac26058
ZJS
2365 libacl,
2366 libblkid],
1aec3ed9 2367 install_rpath : udev_rpath,
005a29f2
ZJS
2368 install : true,
2369 install_dir : rootlibexecdir)
2370public_programs += [exe]
2371
2372exe = executable('udevadm',
2373 udevadm_sources,
6671e818 2374 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2
ZJS
2375 include_directories : includes,
2376 link_with : [libudev_core,
005a29f2 2377 libsystemd_network,
0c06b506 2378 libudev_static],
3a30f21f
ZJS
2379 dependencies : [threads,
2380 libkmod,
005a29f2 2381 libidn,
aac26058
ZJS
2382 libacl,
2383 libblkid],
1aec3ed9 2384 install_rpath : udev_rpath,
005a29f2
ZJS
2385 install : true,
2386 install_dir : rootbindir)
2387public_programs += [exe]
5c23128d
ZJS
2388
2389executable('systemd-shutdown',
2390 systemd_shutdown_sources,
2391 include_directories : includes,
34ce0a52 2392 link_with : [libshared],
95b862b0 2393 dependencies : [libmount],
421f0012 2394 install_rpath : rootlibexecdir,
5c23128d
ZJS
2395 install : true,
2396 install_dir : rootlibexecdir)
2397
2398executable('systemd-update-done',
2399 'src/update-done/update-done.c',
2400 include_directories : includes,
2401 link_with : [libshared],
421f0012 2402 install_rpath : rootlibexecdir,
5c23128d
ZJS
2403 install : true,
2404 install_dir : rootlibexecdir)
2405
2406executable('systemd-update-utmp',
2407 'src/update-utmp/update-utmp.c',
2408 include_directories : includes,
aac26058 2409 link_with : [libshared],
5c23128d 2410 dependencies : [libaudit],
421f0012 2411 install_rpath : rootlibexecdir,
5c23128d
ZJS
2412 install : true,
2413 install_dir : rootlibexecdir)
2414
349cc4a5 2415if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2416 executable('systemd-modules-load',
2417 'src/modules-load/modules-load.c',
2418 include_directories : includes,
2419 link_with : [libshared],
2420 dependencies : [libkmod],
2421 install_rpath : rootlibexecdir,
2422 install : true,
2423 install_dir : rootlibexecdir)
94e75a54 2424
37efbbd8
ZJS
2425 meson.add_install_script('sh', '-c',
2426 mkdir_p.format(modulesloaddir))
2427 meson.add_install_script('sh', '-c',
2428 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2429endif
2430
005a29f2
ZJS
2431exe = executable('systemd-nspawn',
2432 systemd_nspawn_sources,
2433 'src/core/mount-setup.c', # FIXME: use a variable?
2434 'src/core/mount-setup.h',
2435 'src/core/loopback-setup.c',
2436 'src/core/loopback-setup.h',
2437 include_directories : [includes, include_directories('src/nspawn')],
0bc91152 2438 link_with : [libshared],
005a29f2
ZJS
2439 dependencies : [libacl,
2440 libblkid,
2441 libseccomp,
2442 libselinux],
2443 install_rpath : rootlibexecdir,
2444 install : true)
2445public_programs += [exe]
5c23128d 2446
349cc4a5 2447if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2448 executable('systemd-networkd',
2449 systemd_networkd_sources,
2450 include_directories : includes,
2451 link_with : [libnetworkd_core,
37efbbd8 2452 libsystemd_network,
0c06b506 2453 libudev_static,
37efbbd8 2454 libshared],
4b57a272 2455 dependencies : [threads],
37efbbd8
ZJS
2456 install_rpath : rootlibexecdir,
2457 install : true,
2458 install_dir : rootlibexecdir)
2459
2460 executable('systemd-networkd-wait-online',
2461 systemd_networkd_wait_online_sources,
2462 include_directories : includes,
2463 link_with : [libnetworkd_core,
2464 libshared],
2465 install_rpath : rootlibexecdir,
2466 install : true,
2467 install_dir : rootlibexecdir)
5c23128d 2468
dcfe072a
FS
2469 exe = executable('networkctl',
2470 networkctl_sources,
2471 include_directories : includes,
2472 link_with : [libsystemd_network,
aac26058 2473 libshared],
dcfe072a
FS
2474 install_rpath : rootlibexecdir,
2475 install : true,
2476 install_dir : rootbindir)
2477 public_programs += [exe]
2478endif
e821f6a9
ZJS
2479
2480executable('systemd-sulogin-shell',
2481 ['src/sulogin-shell/sulogin-shell.c'],
2482 include_directories : includes,
2483 link_with : [libshared],
2484 install_rpath : rootlibexecdir,
2485 install : true,
2486 install_dir : rootlibexecdir)
2487
69e96427
ZJS
2488############################################################
2489
2490foreach tuple : tests
37efbbd8
ZJS
2491 sources = tuple[0]
2492 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2493 dependencies = tuple[2]
2494 condition = tuple.length() >= 4 ? tuple[3] : ''
2495 type = tuple.length() >= 5 ? tuple[4] : ''
2496 defs = tuple.length() >= 6 ? tuple[5] : []
2497 incs = tuple.length() >= 7 ? tuple[6] : includes
2498 timeout = 30
2499
2500 name = sources[0].split('/')[-1].split('.')[0]
2501 if type.startswith('timeout=')
2502 timeout = type.split('=')[1].to_int()
2503 type = ''
2504 endif
08318a2c
AD
2505 if want_tests == 'false'
2506 message('Not compiling @0@ because tests is set to false'.format(name))
2507 elif condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2508 exe = executable(
2509 name,
2510 sources,
2511 include_directories : incs,
2512 link_with : link_with,
2513 dependencies : dependencies,
2514 c_args : defs,
2515 install_rpath : rootlibexecdir,
7cdd9783
MB
2516 install : install_tests,
2517 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2518
2519 if type == 'manual'
2520 message('@0@ is a manual test'.format(name))
2521 elif type == 'unsafe' and want_tests != 'unsafe'
2522 message('@0@ is an unsafe test'.format(name))
2523 else
2524 test(name, exe,
2525 env : test_env,
2526 timeout : timeout)
2527 endif
2528 else
2529 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2530 endif
69e96427
ZJS
2531endforeach
2532
37ab1a25 2533test_libsystemd_sym = executable(
37efbbd8
ZJS
2534 'test-libsystemd-sym',
2535 test_libsystemd_sym_c,
2536 include_directories : includes,
2537 link_with : [libsystemd],
2538 install : install_tests,
2539 install_dir : testsdir)
37ab1a25
ZJS
2540test('test-libsystemd-sym',
2541 test_libsystemd_sym)
2542
e0bec52f 2543test_libudev_sym = executable(
37efbbd8
ZJS
2544 'test-libudev-sym',
2545 test_libudev_sym_c,
2546 include_directories : includes,
2547 c_args : ['-Wno-deprecated-declarations'],
2548 link_with : [libudev],
2549 install : install_tests,
2550 install_dir : testsdir)
e0bec52f
ZJS
2551test('test-libudev-sym',
2552 test_libudev_sym)
2553
69e96427 2554############################################################
5c23128d 2555
7db7d5b7
JR
2556fuzzer_exes = []
2557
2558foreach tuple : fuzzers
2559 sources = tuple[0]
2560 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2561 dependencies = tuple[2]
2562 defs = tuple.length() >= 4 ? tuple[3] : []
2563 incs = tuple.length() >= 5 ? tuple[4] : includes
2564
31e57a35 2565 if fuzzer_build
7db7d5b7
JR
2566 dependencies += fuzzing_engine
2567 else
2568 sources += 'src/fuzz/fuzz-main.c'
2569 endif
2570
2571 name = sources[0].split('/')[-1].split('.')[0]
2572
2573 fuzzer_exes += executable(
2574 name,
2575 sources,
2576 include_directories : [incs, include_directories('src/fuzz')],
2577 link_with : link_with,
2578 dependencies : dependencies,
2579 c_args : defs,
2580 install : false)
2581endforeach
2582
2583run_target('fuzzers',
2584 depends : fuzzer_exes,
2585 command : ['true'])
2586
2587############################################################
2588
5c23128d
ZJS
2589make_directive_index_py = find_program('tools/make-directive-index.py')
2590make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2591xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2592hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2593
2594subdir('units')
2595subdir('sysctl.d')
2596subdir('sysusers.d')
2597subdir('tmpfiles.d')
e783f957 2598subdir('presets')
5c23128d
ZJS
2599subdir('hwdb')
2600subdir('network')
2601subdir('man')
2602subdir('shell-completion/bash')
2603subdir('shell-completion/zsh')
2d684e65
LP
2604subdir('doc/sysvinit')
2605subdir('doc/var-log')
5c23128d
ZJS
2606
2607# FIXME: figure out if the warning is true:
2608# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2609install_subdir('factory/etc',
2610 install_dir : factorydir)
2611
2612
2613install_data('xorg/50-systemd-user.sh',
2614 install_dir : xinitrcdir)
582faeb4
DJL
2615install_data('modprobe.d/systemd.conf',
2616 install_dir : modprobedir)
f09eb768 2617install_data('LICENSE.GPL2',
5c23128d 2618 'LICENSE.LGPL2.1',
f09eb768
LP
2619 'NEWS',
2620 'README',
2621 'doc/CODING_STYLE',
2622 'doc/DISTRO_PORTING',
2623 'doc/ENVIRONMENT.md',
2624 'doc/HACKING',
2625 'doc/TRANSIENT-SETTINGS.md',
2626 'doc/TRANSLATORS',
2627 'doc/UIDS-GIDS.md',
5c23128d
ZJS
2628 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2629 install_dir : docdir)
d68b342b 2630
94e75a54
ZJS
2631meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2632meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2633
d68b342b
ZJS
2634############################################################
2635
005a29f2
ZJS
2636meson_check_help = find_program('tools/meson-check-help.sh')
2637
2638foreach exec : public_programs
37efbbd8
ZJS
2639 name = exec.full_path().split('/')[-1]
2640 test('check-help-' + name,
2641 meson_check_help,
2642 args : [exec.full_path()])
005a29f2
ZJS
2643endforeach
2644
2645############################################################
2646
52d4d1d3
ZJS
2647# Enable tests for all supported sanitizers
2648foreach tuple : sanitizers
2649 sanitizer = tuple[0]
2650 build = tuple[1]
b68dfb9e 2651
52d4d1d3
ZJS
2652 have = run_command(check_compilation_sh,
2653 cc.cmd_array(), '-x', 'c',
2654 '-fsanitize=@0@'.format(sanitizer),
2655 '-include', link_test_c).returncode() == 0
2656 message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no'))
b68dfb9e 2657
52d4d1d3
ZJS
2658 if have
2659 prev = ''
2660 foreach p : fuzz_regression_tests
2661 b = p.split('/')[-2]
2662 c = p.split('/')[-1]
2663
2664 name = '@0@:@1@'.format(b, sanitizer)
2665
2666 if name != prev
2667 if want_tests == 'false'
2668 message('Not compiling @0@ because tests is set to false'.format(name))
2669 elif slow_tests
2670 exe = custom_target(
2671 name,
2672 output : name,
2673 depends : build,
2674 command : [env, 'ln', '-fs',
2675 join_paths(build.full_path(), b),
2676 '@OUTPUT@'],
2677 build_by_default : true)
2678 else
2679 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2680 endif
2681 endif
2682 prev = name
2683
2684 if want_tests != 'false' and slow_tests
2685 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2686 env,
2687 args : [exe.full_path(),
2688 join_paths(meson.source_root(),
2689 'test/fuzz-regressions',
2690 p)])
2691 endif
2692 endforeach
b68dfb9e
ZJS
2693 endif
2694endforeach
2695
52d4d1d3 2696
b68dfb9e
ZJS
2697############################################################
2698
0700e8ba 2699if git.found()
37efbbd8
ZJS
2700 all_files = run_command(
2701 git,
450b60ba 2702 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
37efbbd8
ZJS
2703 'ls-files',
2704 ':/*.[ch]'])
2705 all_files = files(all_files.stdout().split())
d68b342b 2706
e85a690b 2707 custom_target(
0700e8ba 2708 'tags',
e85a690b 2709 output : 'tags',
25a82102 2710 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
e85a690b 2711 custom_target(
0700e8ba 2712 'ctags',
e85a690b 2713 output : 'ctags',
25a82102 2714 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
d68b342b 2715endif
177929c2
ZJS
2716
2717if git.found()
37efbbd8 2718 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 2719 run_target(
37efbbd8 2720 'git-contrib',
37efbbd8 2721 command : [meson_git_contrib_sh])
177929c2 2722endif
dd6ab3df
ZJS
2723
2724if git.found()
2725 git_head = run_command(
2726 git,
450b60ba 2727 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2728 'rev-parse', 'HEAD']).stdout().strip()
2729 git_head_short = run_command(
2730 git,
450b60ba 2731 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2732 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2733
2734 run_target(
2735 'git-snapshot',
2736 command : ['git', 'archive',
450b60ba 2737 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
dd6ab3df
ZJS
2738 git_head_short),
2739 '--prefix', 'systemd-@0@/'.format(git_head),
2740 'HEAD'])
2741endif
829257d1
ZJS
2742
2743############################################################
2744
51b13863
LP
2745meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
2746run_target(
2747 'check-api-docs',
2748 depends : [man, libsystemd, libudev],
2749 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
2750
2751############################################################
2752
829257d1
ZJS
2753status = [
2754 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2755
2675413e 2756 'split /usr: @0@'.format(split_usr),
157baa87 2757 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
2758 'prefix directory: @0@'.format(prefixdir),
2759 'rootprefix directory: @0@'.format(rootprefixdir),
2760 'sysconf directory: @0@'.format(sysconfdir),
2761 'include directory: @0@'.format(includedir),
2762 'lib directory: @0@'.format(libdir),
2763 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
2764 'SysV init scripts: @0@'.format(sysvinit_path),
2765 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
2766 'PAM modules directory: @0@'.format(pamlibdir),
2767 'PAM configuration directory: @0@'.format(pamconfdir),
2768 'RPM macros directory: @0@'.format(rpmmacrosdir),
2769 'modprobe.d directory: @0@'.format(modprobedir),
2770 'D-Bus policy directory: @0@'.format(dbuspolicydir),
2771 'D-Bus session directory: @0@'.format(dbussessionservicedir),
2772 'D-Bus system directory: @0@'.format(dbussystemservicedir),
2773 'bash completions directory: @0@'.format(bashcompletiondir),
2774 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1
ZJS
2775 'extra start script: @0@'.format(get_option('rc-local')),
2776 'extra stop script: @0@'.format(get_option('halt-local')),
2777 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2778 get_option('debug-tty')),
2779 'TTY GID: @0@'.format(tty_gid),
84786b8e 2780 'users GID: @0@'.format(users_gid),
829257d1
ZJS
2781 'maximum system UID: @0@'.format(system_uid_max),
2782 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
2783 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
2784 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
2785 'minimum container UID base: @0@'.format(container_uid_base_min),
2786 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 2787 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 2788 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 2789 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 2790 'support URL: @0@'.format(support_url),
afde4574
LP
2791 'nobody user name: @0@'.format(nobody_user),
2792 'nobody group name: @0@'.format(nobody_group),
829257d1 2793 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 2794 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
2795
2796 'default DNSSEC mode: @0@'.format(default_dnssec),
2797 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2798 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2799
2800alt_dns_servers = '\n '.join(dns_servers.split(' '))
2801alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2802status += [
2803 'default DNS servers: @0@'.format(alt_dns_servers),
2804 'default NTP servers: @0@'.format(alt_ntp_servers)]
2805
2806alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2807 '@@0@'.format(time_epoch)).stdout().strip()
2808status += [
2809 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2810
2811# TODO:
2812# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2813# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2814# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2815
349cc4a5 2816if conf.get('ENABLE_EFI') == 1
829257d1
ZJS
2817 status += [
2818 'efi arch: @0@'.format(efi_arch)]
2819
2820 if have_gnu_efi
2821 status += [
2822 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2823 'EFI CC @0@'.format(efi_cc),
359b496f
YW
2824 'EFI lib directory: @0@'.format(efi_libdir),
2825 'EFI lds directory: @0@'.format(efi_ldsdir),
2826 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
2827 endif
2828endif
2829
2830found = []
2831missing = []
2832
2833foreach tuple : [
2834 ['libcryptsetup'],
2835 ['PAM'],
2836 ['AUDIT'],
2837 ['IMA'],
2838 ['AppArmor'],
2839 ['SELinux'],
2840 ['SECCOMP'],
2841 ['SMACK'],
2842 ['zlib'],
2843 ['xz'],
2844 ['lz4'],
2845 ['bzip2'],
2846 ['ACL'],
2847 ['gcrypt'],
2848 ['qrencode'],
2849 ['microhttpd'],
2850 ['gnutls'],
2851 ['libcurl'],
d1bf5675 2852 ['idn'],
87057e24 2853 ['libidn2'],
829257d1 2854 ['libidn'],
e7e11bbf 2855 ['nss-systemd'],
829257d1
ZJS
2856 ['libiptc'],
2857 ['elfutils'],
2858 ['binfmt'],
2859 ['vconsole'],
2860 ['quotacheck'],
2861 ['tmpfiles'],
2862 ['environment.d'],
2863 ['sysusers'],
2864 ['firstboot'],
2865 ['randomseed'],
2866 ['backlight'],
2867 ['rfkill'],
2868 ['logind'],
2869 ['machined'],
2870 ['importd'],
2871 ['hostnamed'],
2872 ['timedated'],
2873 ['timesyncd'],
2874 ['localed'],
2875 ['networkd'],
a7456af5 2876 ['resolve'],
829257d1
ZJS
2877 ['coredump'],
2878 ['polkit'],
2879 ['legacy pkla', install_polkit_pkla],
2880 ['efi'],
2881 ['gnu-efi', have_gnu_efi],
2882 ['kmod'],
2883 ['xkbcommon'],
c4c978a0 2884 ['pcre2'],
829257d1
ZJS
2885 ['blkid'],
2886 ['dbus'],
2887 ['glib'],
08cf5b8d 2888 ['nss-myhostname', conf.get('ENABLE_MYHOSTNAME') == 1],
829257d1
ZJS
2889 ['hwdb'],
2890 ['tpm'],
2891 ['man pages', want_man],
2892 ['html pages', want_html],
2893 ['man page indices', want_man and have_lxml],
829257d1
ZJS
2894 ['SysV compat'],
2895 ['utmp'],
2896 ['ldconfig'],
2897 ['hibernate'],
2898 ['adm group', get_option('adm-group')],
2899 ['wheel group', get_option('wheel-group')],
b14e1b43 2900 ['gshadow'],
829257d1
ZJS
2901 ['debug hashmap'],
2902 ['debug mmap cache'],
2903]
2904
af4d7860
ZJS
2905 if tuple.length() >= 2
2906 cond = tuple[1]
2907 else
829257d1
ZJS
2908 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2909 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 2910 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
2911 endif
2912 if cond
2913 found += [tuple[0]]
2914 else
2915 missing += [tuple[0]]
2916 endif
2917endforeach
2918
2919status += [
9d39c1bf 2920 '',
829257d1 2921 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
2922 '',
2923 'disabled features: @0@'.format(', '.join(missing)),
2924 '']
829257d1 2925message('\n '.join(status))
9a8e64b0
ZJS
2926
2927if rootprefixdir != rootprefix_default
2928 message('WARNING:\n' +
2929 ' Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
2930 ' systemd used fixed names for unit file directories and other paths, so anything\n' +
2931 ' except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
2932endif