]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
meson: add test-lib{systemd,udev}-static-sym
[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 1344
70848ecf
DC
1345static_libsystemd = get_option('static-libsystemd')
1346static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1347
1348install_libsystemd_static = static_library(
1349 'systemd',
1350 libsystemd_sources,
1351 journal_client_sources,
1352 include_directories : includes,
1353 link_with : [libbasic,
1354 libbasic_gcrypt],
1355 build_by_default : static_libsystemd != 'false',
1356 install : static_libsystemd != 'false',
1357 install_dir : rootlibdir,
1358 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1359 dependencies : [threads,
1360 librt,
1361 libxz,
1362 liblz4,
1363 libgcrypt],
1364 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1365
5c23128d
ZJS
1366############################################################
1367
83b6af36
ZJS
1368# binaries that have --help and are intended for use by humans,
1369# usually, but not always, installed in /bin.
1370public_programs = []
1371
1372subdir('src/libudev')
1373subdir('src/shared')
1374subdir('src/core')
1375subdir('src/udev')
1376subdir('src/network')
1377
1378subdir('src/analyze')
1379subdir('src/journal-remote')
1380subdir('src/coredump')
1381subdir('src/hostname')
1382subdir('src/import')
1383subdir('src/kernel-install')
1384subdir('src/locale')
1385subdir('src/machine')
1386subdir('src/nspawn')
1387subdir('src/resolve')
1388subdir('src/timedate')
1389subdir('src/timesync')
1390subdir('src/vconsole')
83b6af36
ZJS
1391subdir('src/boot/efi')
1392
1393subdir('src/test')
7db7d5b7 1394subdir('src/fuzz')
6b97bf22 1395subdir('rules')
83b6af36
ZJS
1396subdir('test')
1397
1398############################################################
1399
1400# only static linking apart from libdl, to make sure that the
1401# module is linked to all libraries that it uses.
1402test_dlopen = executable(
37efbbd8
ZJS
1403 'test-dlopen',
1404 test_dlopen_c,
1405 include_directories : includes,
1406 link_with : [libbasic],
1407 dependencies : [libdl])
83b6af36 1408
08cf5b8d 1409foreach tuple : [['myhostname', 'ENABLE_MYHOSTNAME'],
e7e11bbf 1410 ['systemd', 'ENABLE_NSS_SYSTEMD'],
5486a31d 1411 ['mymachines', 'ENABLE_MACHINED'],
1ec57f33 1412 ['resolve', 'ENABLE_RESOLVE']]
5c23128d 1413
349cc4a5 1414 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1415 if condition
1416 module = tuple[0]
37efbbd8
ZJS
1417
1418 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1419 version_script_arg = join_paths(meson.current_source_dir(), sym)
1420
1421 nss = shared_library(
1422 'nss_' + module,
1423 'src/nss-@0@/nss-@0@.c'.format(module),
1424 version : '2',
1425 include_directories : includes,
b4b36f44
LP
1426 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1427 link_args : ['-Wl,-z,nodelete',
1428 '-shared',
37efbbd8
ZJS
1429 '-Wl,--version-script=' + version_script_arg,
1430 '-Wl,--undefined'],
37e4d7a8 1431 link_with : [libsystemd_static,
37efbbd8
ZJS
1432 libbasic],
1433 dependencies : [threads,
5486a31d 1434 librt],
37efbbd8
ZJS
1435 link_depends : sym,
1436 install : true,
1437 install_dir : rootlibdir)
1438
1439 # We cannot use shared_module because it does not support version suffix.
1440 # Unfortunately shared_library insists on creating the symlink…
1441 meson.add_install_script('sh', '-c',
1442 'rm $DESTDIR@0@/libnss_@1@.so'
1443 .format(rootlibdir, module))
1444
1445 test('dlopen-nss_' + module,
1446 test_dlopen,
1447 args : [nss.full_path()]) # path to dlopen must include a slash
1448 endif
5c23128d
ZJS
1449endforeach
1450
1451############################################################
1452
5c23128d
ZJS
1453executable('systemd',
1454 systemd_sources,
1455 include_directories : includes,
1456 link_with : [libcore,
34ce0a52 1457 libshared],
5c23128d
ZJS
1458 dependencies : [threads,
1459 librt,
1460 libseccomp,
1461 libselinux,
f4ee10a2
ZJS
1462 libmount,
1463 libblkid],
421f0012 1464 install_rpath : rootlibexecdir,
5c23128d
ZJS
1465 install : true,
1466 install_dir : rootlibexecdir)
1467
ba7f4ae6
ZJS
1468meson.add_install_script(meson_make_symlink,
1469 join_paths(rootlibexecdir, 'systemd'),
1470 join_paths(rootsbindir, 'init'))
1471
005a29f2
ZJS
1472exe = executable('systemd-analyze',
1473 systemd_analyze_sources,
1474 include_directories : includes,
1475 link_with : [libcore,
005a29f2
ZJS
1476 libshared],
1477 dependencies : [threads,
1478 librt,
1479 libseccomp,
1480 libselinux,
1481 libmount,
1482 libblkid],
1483 install_rpath : rootlibexecdir,
1484 install : true)
1485public_programs += [exe]
5c23128d
ZJS
1486
1487executable('systemd-journald',
1488 systemd_journald_sources,
1489 include_directories : includes,
aac26058 1490 link_with : [libjournal_core,
34ce0a52 1491 libshared],
5c23128d
ZJS
1492 dependencies : [threads,
1493 libxz,
aac26058
ZJS
1494 liblz4,
1495 libselinux],
421f0012 1496 install_rpath : rootlibexecdir,
5c23128d
ZJS
1497 install : true,
1498 install_dir : rootlibexecdir)
1499
005a29f2
ZJS
1500exe = executable('systemd-cat',
1501 systemd_cat_sources,
1502 include_directories : includes,
1503 link_with : [libjournal_core,
34ce0a52 1504 libshared],
005a29f2
ZJS
1505 dependencies : [threads],
1506 install_rpath : rootlibexecdir,
1507 install : true)
1508public_programs += [exe]
1509
1510exe = executable('journalctl',
1511 journalctl_sources,
1512 include_directories : includes,
34ce0a52 1513 link_with : [libshared],
005a29f2
ZJS
1514 dependencies : [threads,
1515 libqrencode,
1516 libxz,
6becf48c
ZJS
1517 liblz4,
1518 libpcre2],
005a29f2
ZJS
1519 install_rpath : rootlibexecdir,
1520 install : true,
1521 install_dir : rootbindir)
1522public_programs += [exe]
5c23128d
ZJS
1523
1524executable('systemd-getty-generator',
1525 'src/getty-generator/getty-generator.c',
5c23128d 1526 include_directories : includes,
b2fc5836
ZJS
1527 link_with : [libshared],
1528 install_rpath : rootlibexecdir,
1529 install : true,
1530 install_dir : systemgeneratordir)
5c23128d
ZJS
1531
1532executable('systemd-debug-generator',
1533 'src/debug-generator/debug-generator.c',
5c23128d 1534 include_directories : includes,
b2fc5836
ZJS
1535 link_with : [libshared],
1536 install_rpath : rootlibexecdir,
1537 install : true,
1538 install_dir : systemgeneratordir)
5c23128d
ZJS
1539
1540executable('systemd-fstab-generator',
1541 'src/fstab-generator/fstab-generator.c',
1542 'src/core/mount-setup.c',
5c23128d 1543 include_directories : includes,
b2fc5836
ZJS
1544 link_with : [libshared],
1545 install_rpath : rootlibexecdir,
1546 install : true,
1547 install_dir : systemgeneratordir)
5c23128d 1548
349cc4a5 1549if conf.get('ENABLE_ENVIRONMENT_D') == 1
37efbbd8
ZJS
1550 executable('30-systemd-environment-d-generator',
1551 'src/environment-d-generator/environment-d-generator.c',
1552 include_directories : includes,
1553 link_with : [libshared],
1554 install_rpath : rootlibexecdir,
1555 install : true,
1556 install_dir : userenvgeneratordir)
7b76fce1 1557
37efbbd8
ZJS
1558 meson.add_install_script(meson_make_symlink,
1559 join_paths(sysconfdir, 'environment'),
1560 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1561endif
1562
349cc4a5 1563if conf.get('ENABLE_HIBERNATE') == 1
37efbbd8
ZJS
1564 executable('systemd-hibernate-resume-generator',
1565 'src/hibernate-resume/hibernate-resume-generator.c',
1566 include_directories : includes,
1567 link_with : [libshared],
1568 install_rpath : rootlibexecdir,
1569 install : true,
1570 install_dir : systemgeneratordir)
5c23128d 1571
37efbbd8
ZJS
1572 executable('systemd-hibernate-resume',
1573 'src/hibernate-resume/hibernate-resume.c',
005a29f2
ZJS
1574 include_directories : includes,
1575 link_with : [libshared],
1576 install_rpath : rootlibexecdir,
1577 install : true,
1578 install_dir : rootlibexecdir)
37efbbd8
ZJS
1579endif
1580
349cc4a5 1581if conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1582 executable('systemd-gpt-auto-generator',
1583 'src/gpt-auto-generator/gpt-auto-generator.c',
1584 'src/basic/blkid-util.h',
1585 include_directories : includes,
34ce0a52 1586 link_with : [libshared],
37efbbd8
ZJS
1587 dependencies : libblkid,
1588 install_rpath : rootlibexecdir,
1589 install : true,
1590 install_dir : systemgeneratordir)
1591
1592 exe = executable('systemd-dissect',
1593 'src/dissect/dissect.c',
1594 include_directories : includes,
1595 link_with : [libshared],
1596 install_rpath : rootlibexecdir,
1597 install : true,
1598 install_dir : rootlibexecdir)
1599 public_programs += [exe]
5c23128d
ZJS
1600endif
1601
1ec57f33 1602if conf.get('ENABLE_RESOLVE') == 1
37efbbd8
ZJS
1603 executable('systemd-resolved',
1604 systemd_resolved_sources,
005a29f2 1605 include_directories : includes,
34e221a5 1606 link_with : [libshared,
568a4ff8
ZJS
1607 libbasic_gcrypt,
1608 libsystemd_resolve_core],
005a29f2 1609 dependencies : [threads,
76c87410 1610 libgpg_error,
005a29f2
ZJS
1611 libm,
1612 libidn],
1613 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1614 install : true,
1615 install_dir : rootlibexecdir)
1616
c2e84cab
YW
1617 exe = executable('resolvectl',
1618 resolvectl_sources,
37efbbd8 1619 include_directories : includes,
34e221a5 1620 link_with : [libshared,
568a4ff8
ZJS
1621 libbasic_gcrypt,
1622 libsystemd_resolve_core],
37efbbd8 1623 dependencies : [threads,
76c87410 1624 libgpg_error,
37efbbd8
ZJS
1625 libm,
1626 libidn],
1627 install_rpath : rootlibexecdir,
1628 install : true)
1629 public_programs += [exe]
088c1363
LP
1630
1631 meson.add_install_script(meson_make_symlink,
c2e84cab 1632 join_paths(bindir, 'resolvectl'),
088c1363 1633 join_paths(rootsbindir, 'resolvconf'))
c2e84cab
YW
1634
1635 meson.add_install_script(meson_make_symlink,
1636 join_paths(bindir, 'resolvectl'),
1637 join_paths(bindir, 'systemd-resolve'))
5c23128d
ZJS
1638endif
1639
349cc4a5 1640if conf.get('ENABLE_LOGIND') == 1
37efbbd8
ZJS
1641 executable('systemd-logind',
1642 systemd_logind_sources,
005a29f2 1643 include_directories : includes,
37efbbd8 1644 link_with : [liblogind_core,
34ce0a52 1645 libshared],
005a29f2 1646 dependencies : [threads,
37efbbd8 1647 libacl],
005a29f2
ZJS
1648 install_rpath : rootlibexecdir,
1649 install : true,
37efbbd8
ZJS
1650 install_dir : rootlibexecdir)
1651
1652 exe = executable('loginctl',
1653 loginctl_sources,
1654 include_directories : includes,
34ce0a52 1655 link_with : [libshared],
37efbbd8
ZJS
1656 dependencies : [threads,
1657 liblz4,
1658 libxz],
1659 install_rpath : rootlibexecdir,
1660 install : true,
1661 install_dir : rootbindir)
1662 public_programs += [exe]
1663
1664 exe = executable('systemd-inhibit',
1665 'src/login/inhibit.c',
1666 include_directories : includes,
1667 link_with : [libshared],
1668 install_rpath : rootlibexecdir,
1669 install : true,
1670 install_dir : rootbindir)
1671 public_programs += [exe]
1672
349cc4a5 1673 if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1674 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1675 pam_systemd = shared_library(
1676 'pam_systemd',
1677 pam_systemd_c,
1678 name_prefix : '',
1679 include_directories : includes,
1680 link_args : ['-shared',
1681 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1682 link_with : [libsystemd_static,
37efbbd8
ZJS
1683 libshared_static],
1684 dependencies : [threads,
1685 libpam,
1686 libpam_misc],
1687 link_depends : pam_systemd_sym,
1688 install : true,
1689 install_dir : pamlibdir)
1690
1691 test('dlopen-pam_systemd',
1692 test_dlopen,
1693 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1694 endif
1695endif
005a29f2 1696
349cc4a5 1697if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1698 executable('systemd-user-sessions',
1699 'src/user-sessions/user-sessions.c',
005a29f2 1700 include_directories : includes,
aac26058 1701 link_with : [libshared],
005a29f2
ZJS
1702 install_rpath : rootlibexecdir,
1703 install : true,
37efbbd8 1704 install_dir : rootlibexecdir)
5c23128d
ZJS
1705endif
1706
349cc4a5 1707if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1708 exe = executable('bootctl',
1709 'src/boot/bootctl.c',
1710 include_directories : includes,
1711 link_with : [libshared],
1712 dependencies : [libblkid],
1713 install_rpath : rootlibexecdir,
1714 install : true)
1715 public_programs += [exe]
005a29f2
ZJS
1716endif
1717
1718exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1719 include_directories : includes,
1720 link_with : [libshared],
1721 dependencies : [threads],
1722 install_rpath : rootlibexecdir,
1723 install : true)
1724public_programs += [exe]
1725
1726exe = executable('systemctl', 'src/systemctl/systemctl.c',
1727 include_directories : includes,
aac26058 1728 link_with : [libshared],
005a29f2
ZJS
1729 dependencies : [threads,
1730 libcap,
1731 libselinux,
1732 libxz,
1733 liblz4],
1734 install_rpath : rootlibexecdir,
1735 install : true,
1736 install_dir : rootbindir)
1737public_programs += [exe]
5c23128d 1738
ba7f4ae6
ZJS
1739foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1740 meson.add_install_script(meson_make_symlink,
1741 join_paths(rootbindir, 'systemctl'),
1742 join_paths(rootsbindir, alias))
1743endforeach
1744
349cc4a5 1745if conf.get('ENABLE_BACKLIGHT') == 1
37efbbd8
ZJS
1746 executable('systemd-backlight',
1747 'src/backlight/backlight.c',
1748 include_directories : includes,
34ce0a52 1749 link_with : [libshared],
37efbbd8
ZJS
1750 install_rpath : rootlibexecdir,
1751 install : true,
1752 install_dir : rootlibexecdir)
5c23128d
ZJS
1753endif
1754
349cc4a5 1755if conf.get('ENABLE_RFKILL') == 1
37efbbd8
ZJS
1756 executable('systemd-rfkill',
1757 'src/rfkill/rfkill.c',
1758 include_directories : includes,
34ce0a52 1759 link_with : [libshared],
37efbbd8
ZJS
1760 install_rpath : rootlibexecdir,
1761 install : true,
1762 install_dir : rootlibexecdir)
5c23128d
ZJS
1763endif
1764
1765executable('systemd-system-update-generator',
1766 'src/system-update-generator/system-update-generator.c',
1767 include_directories : includes,
1768 link_with : [libshared],
b2fc5836 1769 install_rpath : rootlibexecdir,
5c23128d
ZJS
1770 install : true,
1771 install_dir : systemgeneratordir)
1772
349cc4a5 1773if conf.get('HAVE_LIBCRYPTSETUP') == 1
37efbbd8
ZJS
1774 executable('systemd-cryptsetup',
1775 'src/cryptsetup/cryptsetup.c',
1776 include_directories : includes,
1777 link_with : [libshared],
1778 dependencies : [libcryptsetup],
1779 install_rpath : rootlibexecdir,
1780 install : true,
1781 install_dir : rootlibexecdir)
1782
1783 executable('systemd-cryptsetup-generator',
1784 'src/cryptsetup/cryptsetup-generator.c',
1785 include_directories : includes,
1786 link_with : [libshared],
1787 dependencies : [libcryptsetup],
1788 install_rpath : rootlibexecdir,
1789 install : true,
1790 install_dir : systemgeneratordir)
1791
1792 executable('systemd-veritysetup',
1793 'src/veritysetup/veritysetup.c',
1794 include_directories : includes,
1795 link_with : [libshared],
1796 dependencies : [libcryptsetup],
1797 install_rpath : rootlibexecdir,
1798 install : true,
1799 install_dir : rootlibexecdir)
1800
1801 executable('systemd-veritysetup-generator',
1802 'src/veritysetup/veritysetup-generator.c',
1803 include_directories : includes,
1804 link_with : [libshared],
1805 dependencies : [libcryptsetup],
1806 install_rpath : rootlibexecdir,
1807 install : true,
1808 install_dir : systemgeneratordir)
5c23128d
ZJS
1809endif
1810
349cc4a5 1811if conf.get('HAVE_SYSV_COMPAT') == 1
37efbbd8
ZJS
1812 executable('systemd-sysv-generator',
1813 'src/sysv-generator/sysv-generator.c',
1814 include_directories : includes,
1815 link_with : [libshared],
1816 install_rpath : rootlibexecdir,
1817 install : true,
1818 install_dir : systemgeneratordir)
1819
1820 executable('systemd-rc-local-generator',
1821 'src/rc-local-generator/rc-local-generator.c',
1822 include_directories : includes,
1823 link_with : [libshared],
1824 install_rpath : rootlibexecdir,
1825 install : true,
1826 install_dir : systemgeneratordir)
5c23128d
ZJS
1827endif
1828
349cc4a5 1829if conf.get('ENABLE_HOSTNAMED') == 1
37efbbd8
ZJS
1830 executable('systemd-hostnamed',
1831 'src/hostname/hostnamed.c',
005a29f2 1832 include_directories : includes,
aac26058 1833 link_with : [libshared],
005a29f2 1834 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1835 install : true,
1836 install_dir : rootlibexecdir)
1837
1838 exe = executable('hostnamectl',
1839 'src/hostname/hostnamectl.c',
1840 include_directories : includes,
1841 link_with : [libshared],
1842 install_rpath : rootlibexecdir,
1843 install : true)
1844 public_programs += [exe]
5c23128d
ZJS
1845endif
1846
349cc4a5
ZJS
1847if conf.get('ENABLE_LOCALED') == 1
1848 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
1849 # logind will load libxkbcommon.so dynamically on its own
1850 deps = [libdl]
1851 else
1852 deps = []
1853 endif
1854
1855 executable('systemd-localed',
1856 systemd_localed_sources,
005a29f2 1857 include_directories : includes,
aac26058 1858 link_with : [libshared],
37efbbd8 1859 dependencies : deps,
005a29f2 1860 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1861 install : true,
1862 install_dir : rootlibexecdir)
1863
1864 exe = executable('localectl',
1865 localectl_sources,
1866 include_directories : includes,
1867 link_with : [libshared],
1868 install_rpath : rootlibexecdir,
1869 install : true)
1870 public_programs += [exe]
5c23128d
ZJS
1871endif
1872
349cc4a5 1873if conf.get('ENABLE_TIMEDATED') == 1
37efbbd8
ZJS
1874 executable('systemd-timedated',
1875 'src/timedate/timedated.c',
005a29f2 1876 include_directories : includes,
aac26058 1877 link_with : [libshared],
37efbbd8
ZJS
1878 install_rpath : rootlibexecdir,
1879 install : true,
1880 install_dir : rootlibexecdir)
5c23128d 1881
37efbbd8
ZJS
1882 exe = executable('timedatectl',
1883 'src/timedate/timedatectl.c',
1884 include_directories : includes,
1885 install_rpath : rootlibexecdir,
1886 link_with : [libshared],
1887 install : true)
1888 public_programs += [exe]
5c23128d
ZJS
1889endif
1890
349cc4a5 1891if conf.get('ENABLE_TIMESYNCD') == 1
37efbbd8
ZJS
1892 executable('systemd-timesyncd',
1893 systemd_timesyncd_sources,
005a29f2 1894 include_directories : includes,
aac26058 1895 link_with : [libshared],
005a29f2 1896 dependencies : [threads,
37efbbd8 1897 libm],
005a29f2
ZJS
1898 install_rpath : rootlibexecdir,
1899 install : true,
37efbbd8 1900 install_dir : rootlibexecdir)
5c3376ef
PB
1901
1902 executable('systemd-time-wait-sync',
1903 'src/time-wait-sync/time-wait-sync.c',
1904 include_directories : includes,
1905 link_with : [libshared],
1906 install_rpath : rootlibexecdir,
1907 install : true,
1908 install_dir : rootlibexecdir)
5c23128d
ZJS
1909endif
1910
349cc4a5 1911if conf.get('ENABLE_MACHINED') == 1
37efbbd8
ZJS
1912 executable('systemd-machined',
1913 systemd_machined_sources,
1914 include_directories : includes,
1915 link_with : [libmachine_core,
1916 libshared],
1917 install_rpath : rootlibexecdir,
1918 install : true,
1919 install_dir : rootlibexecdir)
1920
1921 exe = executable('machinectl',
1922 'src/machine/machinectl.c',
1923 include_directories : includes,
1924 link_with : [libshared],
1925 dependencies : [threads,
1926 libxz,
1927 liblz4],
1928 install_rpath : rootlibexecdir,
1929 install : true,
1930 install_dir : rootbindir)
1931 public_programs += [exe]
5c23128d
ZJS
1932endif
1933
349cc4a5 1934if conf.get('ENABLE_IMPORTD') == 1
37efbbd8
ZJS
1935 executable('systemd-importd',
1936 systemd_importd_sources,
005a29f2 1937 include_directories : includes,
aac26058 1938 link_with : [libshared],
37efbbd8 1939 dependencies : [threads],
005a29f2
ZJS
1940 install_rpath : rootlibexecdir,
1941 install : true,
1942 install_dir : rootlibexecdir)
37efbbd8
ZJS
1943
1944 systemd_pull = executable('systemd-pull',
1945 systemd_pull_sources,
1946 include_directories : includes,
1947 link_with : [libshared],
1948 dependencies : [libcurl,
1949 libz,
1950 libbzip2,
1951 libxz,
1952 libgcrypt],
1953 install_rpath : rootlibexecdir,
1954 install : true,
1955 install_dir : rootlibexecdir)
1956
1957 systemd_import = executable('systemd-import',
1958 systemd_import_sources,
1959 include_directories : includes,
1960 link_with : [libshared],
1961 dependencies : [libcurl,
1962 libz,
1963 libbzip2,
1964 libxz],
1965 install_rpath : rootlibexecdir,
1966 install : true,
1967 install_dir : rootlibexecdir)
1968
1969 systemd_export = executable('systemd-export',
1970 systemd_export_sources,
1971 include_directories : includes,
1972 link_with : [libshared],
1973 dependencies : [libcurl,
1974 libz,
1975 libbzip2,
1976 libxz],
1977 install_rpath : rootlibexecdir,
1978 install : true,
1979 install_dir : rootlibexecdir)
1980 public_programs += [systemd_pull, systemd_import, systemd_export]
1981endif
1982
349cc4a5 1983if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
37efbbd8
ZJS
1984 exe = executable('systemd-journal-upload',
1985 systemd_journal_upload_sources,
1986 include_directories : includes,
1987 link_with : [libshared],
1988 dependencies : [threads,
1989 libcurl,
1990 libgnutls,
1991 libxz,
1992 liblz4],
1993 install_rpath : rootlibexecdir,
1994 install : true,
1995 install_dir : rootlibexecdir)
1996 public_programs += [exe]
5c23128d
ZJS
1997endif
1998
349cc4a5 1999if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
37efbbd8
ZJS
2000 s_j_remote = executable('systemd-journal-remote',
2001 systemd_journal_remote_sources,
2002 include_directories : includes,
2003 link_with : [libshared],
2004 dependencies : [threads,
2005 libmicrohttpd,
2006 libgnutls,
2007 libxz,
2008 liblz4],
2009 install_rpath : rootlibexecdir,
2010 install : true,
2011 install_dir : rootlibexecdir)
2012
2013 s_j_gatewayd = executable('systemd-journal-gatewayd',
2014 systemd_journal_gatewayd_sources,
2015 include_directories : includes,
2016 link_with : [libshared],
2017 dependencies : [threads,
2018 libmicrohttpd,
2019 libgnutls,
2020 libxz,
2021 liblz4],
2022 install_rpath : rootlibexecdir,
2023 install : true,
2024 install_dir : rootlibexecdir)
2025 public_programs += [s_j_remote, s_j_gatewayd]
5c23128d
ZJS
2026endif
2027
349cc4a5 2028if conf.get('ENABLE_COREDUMP') == 1
37efbbd8
ZJS
2029 executable('systemd-coredump',
2030 systemd_coredump_sources,
005a29f2 2031 include_directories : includes,
aac26058 2032 link_with : [libshared],
005a29f2 2033 dependencies : [threads,
37efbbd8
ZJS
2034 libacl,
2035 libdw,
005a29f2
ZJS
2036 libxz,
2037 liblz4],
2038 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2039 install : true,
2040 install_dir : rootlibexecdir)
2041
2042 exe = executable('coredumpctl',
2043 coredumpctl_sources,
2044 include_directories : includes,
2045 link_with : [libshared],
2046 dependencies : [threads,
2047 libxz,
2048 liblz4],
2049 install_rpath : rootlibexecdir,
2050 install : true)
2051 public_programs += [exe]
5c23128d
ZJS
2052endif
2053
349cc4a5 2054if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2055 exe = executable('systemd-binfmt',
2056 'src/binfmt/binfmt.c',
2057 include_directories : includes,
2058 link_with : [libshared],
2059 install_rpath : rootlibexecdir,
2060 install : true,
2061 install_dir : rootlibexecdir)
2062 public_programs += [exe]
2063
2064 meson.add_install_script('sh', '-c',
2065 mkdir_p.format(binfmtdir))
2066 meson.add_install_script('sh', '-c',
2067 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2068endif
2069
349cc4a5 2070if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2071 executable('systemd-vconsole-setup',
2072 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2073 include_directories : includes,
2074 link_with : [libshared],
2075 install_rpath : rootlibexecdir,
2076 install : true,
2077 install_dir : rootlibexecdir)
5c23128d
ZJS
2078endif
2079
349cc4a5 2080if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2081 executable('systemd-random-seed',
2082 'src/random-seed/random-seed.c',
2083 include_directories : includes,
2084 link_with : [libshared],
2085 install_rpath : rootlibexecdir,
2086 install : true,
2087 install_dir : rootlibexecdir)
5c23128d
ZJS
2088endif
2089
349cc4a5 2090if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2091 executable('systemd-firstboot',
2092 'src/firstboot/firstboot.c',
2093 include_directories : includes,
2094 link_with : [libshared],
2095 dependencies : [libcrypt],
2096 install_rpath : rootlibexecdir,
2097 install : true,
2098 install_dir : rootbindir)
5c23128d
ZJS
2099endif
2100
2101executable('systemd-remount-fs',
2102 'src/remount-fs/remount-fs.c',
2103 'src/core/mount-setup.c',
2104 'src/core/mount-setup.h',
2105 include_directories : includes,
2106 link_with : [libshared],
b2fc5836 2107 install_rpath : rootlibexecdir,
5c23128d
ZJS
2108 install : true,
2109 install_dir : rootlibexecdir)
2110
2111executable('systemd-machine-id-setup',
2112 'src/machine-id-setup/machine-id-setup-main.c',
2113 'src/core/machine-id-setup.c',
2114 'src/core/machine-id-setup.h',
2115 include_directories : includes,
aac26058 2116 link_with : [libshared],
b2fc5836 2117 install_rpath : rootlibexecdir,
5c23128d
ZJS
2118 install : true,
2119 install_dir : rootbindir)
2120
2121executable('systemd-fsck',
2122 'src/fsck/fsck.c',
2123 include_directories : includes,
aac26058 2124 link_with : [libshared],
421f0012 2125 install_rpath : rootlibexecdir,
5c23128d
ZJS
2126 install : true,
2127 install_dir : rootlibexecdir)
2128
80750adb
ZJS
2129executable('systemd-growfs',
2130 'src/partition/growfs.c',
2131 include_directories : includes,
2132 link_with : [libshared],
c34b75a1 2133 dependencies : [libcryptsetup],
80750adb
ZJS
2134 install_rpath : rootlibexecdir,
2135 install : true,
2136 install_dir : rootlibexecdir)
2137
b7f28ac5
ZJS
2138executable('systemd-makefs',
2139 'src/partition/makefs.c',
2140 include_directories : includes,
2141 link_with : [libshared],
2142 install_rpath : rootlibexecdir,
2143 install : true,
2144 install_dir : rootlibexecdir)
2145
5c23128d
ZJS
2146executable('systemd-sleep',
2147 'src/sleep/sleep.c',
2148 include_directories : includes,
2149 link_with : [libshared],
421f0012 2150 install_rpath : rootlibexecdir,
5c23128d
ZJS
2151 install : true,
2152 install_dir : rootlibexecdir)
2153
005a29f2
ZJS
2154exe = executable('systemd-sysctl',
2155 'src/sysctl/sysctl.c',
2156 include_directories : includes,
2157 link_with : [libshared],
2158 install_rpath : rootlibexecdir,
2159 install : true,
2160 install_dir : rootlibexecdir)
2161public_programs += [exe]
5c23128d
ZJS
2162
2163executable('systemd-ac-power',
2164 'src/ac-power/ac-power.c',
2165 include_directories : includes,
2166 link_with : [libshared],
421f0012 2167 install_rpath : rootlibexecdir,
5c23128d
ZJS
2168 install : true,
2169 install_dir : rootlibexecdir)
2170
005a29f2
ZJS
2171exe = executable('systemd-detect-virt',
2172 'src/detect-virt/detect-virt.c',
2173 include_directories : includes,
2174 link_with : [libshared],
2175 install_rpath : rootlibexecdir,
2176 install : true)
2177public_programs += [exe]
2178
2179exe = executable('systemd-delta',
2180 'src/delta/delta.c',
2181 include_directories : includes,
2182 link_with : [libshared],
2183 install_rpath : rootlibexecdir,
2184 install : true)
2185public_programs += [exe]
2186
2187exe = executable('systemd-escape',
2188 'src/escape/escape.c',
2189 include_directories : includes,
2190 link_with : [libshared],
2191 install_rpath : rootlibexecdir,
2192 install : true,
2193 install_dir : rootbindir)
2194public_programs += [exe]
2195
2196exe = executable('systemd-notify',
2197 'src/notify/notify.c',
2198 include_directories : includes,
2199 link_with : [libshared],
2200 install_rpath : rootlibexecdir,
2201 install : true,
2202 install_dir : rootbindir)
2203public_programs += [exe]
5c23128d
ZJS
2204
2205executable('systemd-volatile-root',
2206 'src/volatile-root/volatile-root.c',
2207 include_directories : includes,
2208 link_with : [libshared],
421f0012 2209 install_rpath : rootlibexecdir,
5c23128d
ZJS
2210 install : true,
2211 install_dir : rootlibexecdir)
2212
2213executable('systemd-cgroups-agent',
2214 'src/cgroups-agent/cgroups-agent.c',
2215 include_directories : includes,
2216 link_with : [libshared],
421f0012 2217 install_rpath : rootlibexecdir,
5c23128d
ZJS
2218 install : true,
2219 install_dir : rootlibexecdir)
2220
005a29f2
ZJS
2221exe = executable('systemd-path',
2222 'src/path/path.c',
2223 include_directories : includes,
aac26058 2224 link_with : [libshared],
005a29f2
ZJS
2225 install_rpath : rootlibexecdir,
2226 install : true)
2227public_programs += [exe]
2228
2229exe = executable('systemd-ask-password',
2230 'src/ask-password/ask-password.c',
2231 include_directories : includes,
aac26058 2232 link_with : [libshared],
005a29f2
ZJS
2233 install_rpath : rootlibexecdir,
2234 install : true,
2235 install_dir : rootbindir)
2236public_programs += [exe]
5c23128d
ZJS
2237
2238executable('systemd-reply-password',
2239 'src/reply-password/reply-password.c',
2240 include_directories : includes,
aac26058 2241 link_with : [libshared],
421f0012 2242 install_rpath : rootlibexecdir,
5c23128d
ZJS
2243 install : true,
2244 install_dir : rootlibexecdir)
2245
005a29f2
ZJS
2246exe = executable('systemd-tty-ask-password-agent',
2247 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2248 include_directories : includes,
aac26058 2249 link_with : [libshared],
005a29f2
ZJS
2250 install_rpath : rootlibexecdir,
2251 install : true,
2252 install_dir : rootbindir)
2253public_programs += [exe]
2254
2255exe = executable('systemd-cgls',
2256 'src/cgls/cgls.c',
2257 include_directories : includes,
aac26058 2258 link_with : [libshared],
005a29f2
ZJS
2259 install_rpath : rootlibexecdir,
2260 install : true)
2261public_programs += [exe]
2262
2263exe = executable('systemd-cgtop',
2264 'src/cgtop/cgtop.c',
2265 include_directories : includes,
aac26058 2266 link_with : [libshared],
005a29f2
ZJS
2267 install_rpath : rootlibexecdir,
2268 install : true)
2269public_programs += [exe]
5c23128d
ZJS
2270
2271executable('systemd-initctl',
2272 'src/initctl/initctl.c',
2273 include_directories : includes,
aac26058 2274 link_with : [libshared],
421f0012 2275 install_rpath : rootlibexecdir,
5c23128d
ZJS
2276 install : true,
2277 install_dir : rootlibexecdir)
2278
005a29f2
ZJS
2279exe = executable('systemd-mount',
2280 'src/mount/mount-tool.c',
2281 include_directories : includes,
34ce0a52 2282 link_with : [libshared],
005a29f2
ZJS
2283 install_rpath : rootlibexecdir,
2284 install : true)
2285public_programs += [exe]
5c23128d 2286
7b76fce1 2287meson.add_install_script(meson_make_symlink,
e17e5ba9 2288 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2289
005a29f2
ZJS
2290exe = executable('systemd-run',
2291 'src/run/run.c',
2292 include_directories : includes,
aac26058 2293 link_with : [libshared],
005a29f2
ZJS
2294 install_rpath : rootlibexecdir,
2295 install : true)
2296public_programs += [exe]
2297
2298exe = executable('systemd-stdio-bridge',
2299 'src/stdio-bridge/stdio-bridge.c',
2300 include_directories : includes,
aac26058 2301 link_with : [libshared],
005a29f2
ZJS
2302 install_rpath : rootlibexecdir,
2303 install : true)
2304public_programs += [exe]
2305
2306exe = executable('busctl',
2307 'src/busctl/busctl.c',
2308 'src/busctl/busctl-introspect.c',
2309 'src/busctl/busctl-introspect.h',
2310 include_directories : includes,
aac26058 2311 link_with : [libshared],
005a29f2
ZJS
2312 install_rpath : rootlibexecdir,
2313 install : true)
2314public_programs += [exe]
5c23128d 2315
349cc4a5 2316if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2317 exe = executable('systemd-sysusers',
2318 'src/sysusers/sysusers.c',
2319 include_directories : includes,
2320 link_with : [libshared],
2321 install_rpath : rootlibexecdir,
2322 install : true,
2323 install_dir : rootbindir)
2324 public_programs += [exe]
5c23128d
ZJS
2325endif
2326
349cc4a5 2327if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2328 exe = executable('systemd-tmpfiles',
2329 'src/tmpfiles/tmpfiles.c',
2330 include_directories : includes,
2331 link_with : [libshared],
2332 dependencies : [libacl],
2333 install_rpath : rootlibexecdir,
2334 install : true,
2335 install_dir : rootbindir)
2336 public_programs += [exe]
d9daae55
ZJS
2337
2338 test('test-systemd-tmpfiles',
2339 test_systemd_tmpfiles_py,
2340 args : exe.full_path())
2341 # https://github.com/mesonbuild/meson/issues/2681
5c23128d
ZJS
2342endif
2343
349cc4a5 2344if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2345 exe = executable('systemd-hwdb',
2346 'src/hwdb/hwdb.c',
2347 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2348 include_directories : includes,
0c06b506 2349 link_with : [libudev_static],
0da6f396 2350 install_rpath : udev_rpath,
37efbbd8
ZJS
2351 install : true,
2352 install_dir : rootbindir)
2353 public_programs += [exe]
2354endif
2355
349cc4a5 2356if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2357 executable('systemd-quotacheck',
2358 'src/quotacheck/quotacheck.c',
005a29f2 2359 include_directories : includes,
aac26058 2360 link_with : [libshared],
005a29f2
ZJS
2361 install_rpath : rootlibexecdir,
2362 install : true,
37efbbd8 2363 install_dir : rootlibexecdir)
5c23128d
ZJS
2364endif
2365
005a29f2
ZJS
2366exe = executable('systemd-socket-proxyd',
2367 'src/socket-proxy/socket-proxyd.c',
2368 include_directories : includes,
aac26058 2369 link_with : [libshared],
005a29f2
ZJS
2370 dependencies : [threads],
2371 install_rpath : rootlibexecdir,
2372 install : true,
2373 install_dir : rootlibexecdir)
2374public_programs += [exe]
2375
2376exe = executable('systemd-udevd',
2377 systemd_udevd_sources,
2378 include_directories : includes,
5c72049f 2379 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2 2380 link_with : [libudev_core,
005a29f2 2381 libsystemd_network,
0c06b506 2382 libudev_static],
3a30f21f
ZJS
2383 dependencies : [threads,
2384 libkmod,
005a29f2 2385 libidn,
aac26058
ZJS
2386 libacl,
2387 libblkid],
1aec3ed9 2388 install_rpath : udev_rpath,
005a29f2
ZJS
2389 install : true,
2390 install_dir : rootlibexecdir)
2391public_programs += [exe]
2392
2393exe = executable('udevadm',
2394 udevadm_sources,
6671e818 2395 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2
ZJS
2396 include_directories : includes,
2397 link_with : [libudev_core,
005a29f2 2398 libsystemd_network,
0c06b506 2399 libudev_static],
3a30f21f
ZJS
2400 dependencies : [threads,
2401 libkmod,
005a29f2 2402 libidn,
aac26058
ZJS
2403 libacl,
2404 libblkid],
1aec3ed9 2405 install_rpath : udev_rpath,
005a29f2
ZJS
2406 install : true,
2407 install_dir : rootbindir)
2408public_programs += [exe]
5c23128d
ZJS
2409
2410executable('systemd-shutdown',
2411 systemd_shutdown_sources,
2412 include_directories : includes,
34ce0a52 2413 link_with : [libshared],
95b862b0 2414 dependencies : [libmount],
421f0012 2415 install_rpath : rootlibexecdir,
5c23128d
ZJS
2416 install : true,
2417 install_dir : rootlibexecdir)
2418
2419executable('systemd-update-done',
2420 'src/update-done/update-done.c',
2421 include_directories : includes,
2422 link_with : [libshared],
421f0012 2423 install_rpath : rootlibexecdir,
5c23128d
ZJS
2424 install : true,
2425 install_dir : rootlibexecdir)
2426
2427executable('systemd-update-utmp',
2428 'src/update-utmp/update-utmp.c',
2429 include_directories : includes,
aac26058 2430 link_with : [libshared],
5c23128d 2431 dependencies : [libaudit],
421f0012 2432 install_rpath : rootlibexecdir,
5c23128d
ZJS
2433 install : true,
2434 install_dir : rootlibexecdir)
2435
349cc4a5 2436if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2437 executable('systemd-modules-load',
2438 'src/modules-load/modules-load.c',
2439 include_directories : includes,
2440 link_with : [libshared],
2441 dependencies : [libkmod],
2442 install_rpath : rootlibexecdir,
2443 install : true,
2444 install_dir : rootlibexecdir)
94e75a54 2445
37efbbd8
ZJS
2446 meson.add_install_script('sh', '-c',
2447 mkdir_p.format(modulesloaddir))
2448 meson.add_install_script('sh', '-c',
2449 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2450endif
2451
005a29f2
ZJS
2452exe = executable('systemd-nspawn',
2453 systemd_nspawn_sources,
2454 'src/core/mount-setup.c', # FIXME: use a variable?
2455 'src/core/mount-setup.h',
2456 'src/core/loopback-setup.c',
2457 'src/core/loopback-setup.h',
2458 include_directories : [includes, include_directories('src/nspawn')],
0bc91152 2459 link_with : [libshared],
005a29f2
ZJS
2460 dependencies : [libacl,
2461 libblkid,
2462 libseccomp,
2463 libselinux],
2464 install_rpath : rootlibexecdir,
2465 install : true)
2466public_programs += [exe]
5c23128d 2467
349cc4a5 2468if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2469 executable('systemd-networkd',
2470 systemd_networkd_sources,
2471 include_directories : includes,
2472 link_with : [libnetworkd_core,
37efbbd8 2473 libsystemd_network,
0c06b506 2474 libudev_static,
37efbbd8 2475 libshared],
4b57a272 2476 dependencies : [threads],
37efbbd8
ZJS
2477 install_rpath : rootlibexecdir,
2478 install : true,
2479 install_dir : rootlibexecdir)
2480
2481 executable('systemd-networkd-wait-online',
2482 systemd_networkd_wait_online_sources,
2483 include_directories : includes,
2484 link_with : [libnetworkd_core,
2485 libshared],
2486 install_rpath : rootlibexecdir,
2487 install : true,
2488 install_dir : rootlibexecdir)
5c23128d 2489
dcfe072a
FS
2490 exe = executable('networkctl',
2491 networkctl_sources,
2492 include_directories : includes,
2493 link_with : [libsystemd_network,
aac26058 2494 libshared],
dcfe072a
FS
2495 install_rpath : rootlibexecdir,
2496 install : true,
2497 install_dir : rootbindir)
2498 public_programs += [exe]
2499endif
e821f6a9
ZJS
2500
2501executable('systemd-sulogin-shell',
2502 ['src/sulogin-shell/sulogin-shell.c'],
2503 include_directories : includes,
2504 link_with : [libshared],
2505 install_rpath : rootlibexecdir,
2506 install : true,
2507 install_dir : rootlibexecdir)
2508
69e96427
ZJS
2509############################################################
2510
2511foreach tuple : tests
37efbbd8
ZJS
2512 sources = tuple[0]
2513 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2514 dependencies = tuple[2]
2515 condition = tuple.length() >= 4 ? tuple[3] : ''
2516 type = tuple.length() >= 5 ? tuple[4] : ''
2517 defs = tuple.length() >= 6 ? tuple[5] : []
2518 incs = tuple.length() >= 7 ? tuple[6] : includes
2519 timeout = 30
2520
2521 name = sources[0].split('/')[-1].split('.')[0]
2522 if type.startswith('timeout=')
2523 timeout = type.split('=')[1].to_int()
2524 type = ''
2525 endif
08318a2c
AD
2526 if want_tests == 'false'
2527 message('Not compiling @0@ because tests is set to false'.format(name))
2528 elif condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2529 exe = executable(
2530 name,
2531 sources,
2532 include_directories : incs,
2533 link_with : link_with,
2534 dependencies : dependencies,
2535 c_args : defs,
2536 install_rpath : rootlibexecdir,
7cdd9783
MB
2537 install : install_tests,
2538 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2539
2540 if type == 'manual'
2541 message('@0@ is a manual test'.format(name))
2542 elif type == 'unsafe' and want_tests != 'unsafe'
2543 message('@0@ is an unsafe test'.format(name))
2544 else
2545 test(name, exe,
2546 env : test_env,
2547 timeout : timeout)
2548 endif
2549 else
2550 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2551 endif
69e96427
ZJS
2552endforeach
2553
0632b4cd 2554exe = executable(
37efbbd8
ZJS
2555 'test-libsystemd-sym',
2556 test_libsystemd_sym_c,
2557 include_directories : includes,
2558 link_with : [libsystemd],
2559 install : install_tests,
2560 install_dir : testsdir)
0632b4cd 2561test('test-libsystemd-sym', exe)
37ab1a25 2562
0632b4cd
ZJS
2563exe = executable(
2564 'test-libsystemd-static-sym',
2565 test_libsystemd_sym_c,
2566 include_directories : includes,
2567 c_args : static_libsystemd_pic ? [] : ['-fno-PIC'],
2568 link_args : static_libsystemd_pic ? [] : ['-fno-PIC'],
2569 link_with : [install_libsystemd_static],
2570 dependencies : [threads], # threads is already included in dependencies on the library,
2571 # but does not seem to get propagated. Add here as a work-around.
2572 build_by_default : static_libsystemd != 'false',
2573 install : install_tests and static_libsystemd != 'false',
2574 install_dir : testsdir)
2575if static_libsystemd != 'false'
2576 test('test-libsystemd-static-sym', exe)
2577endif
2578
2579exe = executable(
37efbbd8
ZJS
2580 'test-libudev-sym',
2581 test_libudev_sym_c,
2582 include_directories : includes,
2583 c_args : ['-Wno-deprecated-declarations'],
2584 link_with : [libudev],
2585 install : install_tests,
2586 install_dir : testsdir)
0632b4cd
ZJS
2587test('test-libudev-sym', exe)
2588
2589exe = executable(
2590 'test-libudev-static-sym',
2591 test_libudev_sym_c,
2592 include_directories : includes,
2593 c_args : ['-Wno-deprecated-declarations'] +
2594 (static_libsystemd_pic ? [] : ['-fno-PIC']),
2595 link_with : [install_libudev_static],
2596 build_by_default : static_libudev != 'false',
2597 install : install_tests and static_libudev != 'false',
2598 install_dir : testsdir)
2599if static_libudev != 'false'
2600 test('test-libudev-static-sym', exe)
2601endif
e0bec52f 2602
69e96427 2603############################################################
5c23128d 2604
7db7d5b7
JR
2605fuzzer_exes = []
2606
2607foreach tuple : fuzzers
2608 sources = tuple[0]
2609 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2610 dependencies = tuple[2]
2611 defs = tuple.length() >= 4 ? tuple[3] : []
2612 incs = tuple.length() >= 5 ? tuple[4] : includes
2613
31e57a35 2614 if fuzzer_build
7db7d5b7
JR
2615 dependencies += fuzzing_engine
2616 else
2617 sources += 'src/fuzz/fuzz-main.c'
2618 endif
2619
2620 name = sources[0].split('/')[-1].split('.')[0]
2621
2622 fuzzer_exes += executable(
2623 name,
2624 sources,
2625 include_directories : [incs, include_directories('src/fuzz')],
2626 link_with : link_with,
2627 dependencies : dependencies,
2628 c_args : defs,
2629 install : false)
2630endforeach
2631
2632run_target('fuzzers',
2633 depends : fuzzer_exes,
2634 command : ['true'])
2635
2636############################################################
2637
5c23128d
ZJS
2638make_directive_index_py = find_program('tools/make-directive-index.py')
2639make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2640xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2641hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2642
2643subdir('units')
2644subdir('sysctl.d')
2645subdir('sysusers.d')
2646subdir('tmpfiles.d')
e783f957 2647subdir('presets')
5c23128d
ZJS
2648subdir('hwdb')
2649subdir('network')
2650subdir('man')
2651subdir('shell-completion/bash')
2652subdir('shell-completion/zsh')
2d684e65
LP
2653subdir('doc/sysvinit')
2654subdir('doc/var-log')
5c23128d
ZJS
2655
2656# FIXME: figure out if the warning is true:
2657# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2658install_subdir('factory/etc',
2659 install_dir : factorydir)
2660
2661
2662install_data('xorg/50-systemd-user.sh',
2663 install_dir : xinitrcdir)
582faeb4
DJL
2664install_data('modprobe.d/systemd.conf',
2665 install_dir : modprobedir)
f09eb768 2666install_data('LICENSE.GPL2',
5c23128d 2667 'LICENSE.LGPL2.1',
f09eb768
LP
2668 'NEWS',
2669 'README',
2670 'doc/CODING_STYLE',
2671 'doc/DISTRO_PORTING',
2672 'doc/ENVIRONMENT.md',
2673 'doc/HACKING',
2674 'doc/TRANSIENT-SETTINGS.md',
2675 'doc/TRANSLATORS',
2676 'doc/UIDS-GIDS.md',
5c23128d
ZJS
2677 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2678 install_dir : docdir)
d68b342b 2679
94e75a54
ZJS
2680meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2681meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2682
d68b342b
ZJS
2683############################################################
2684
005a29f2
ZJS
2685meson_check_help = find_program('tools/meson-check-help.sh')
2686
2687foreach exec : public_programs
37efbbd8
ZJS
2688 name = exec.full_path().split('/')[-1]
2689 test('check-help-' + name,
2690 meson_check_help,
2691 args : [exec.full_path()])
005a29f2
ZJS
2692endforeach
2693
2694############################################################
2695
52d4d1d3
ZJS
2696# Enable tests for all supported sanitizers
2697foreach tuple : sanitizers
2698 sanitizer = tuple[0]
2699 build = tuple[1]
b68dfb9e 2700
52d4d1d3
ZJS
2701 have = run_command(check_compilation_sh,
2702 cc.cmd_array(), '-x', 'c',
2703 '-fsanitize=@0@'.format(sanitizer),
2704 '-include', link_test_c).returncode() == 0
2705 message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no'))
b68dfb9e 2706
52d4d1d3
ZJS
2707 if have
2708 prev = ''
2709 foreach p : fuzz_regression_tests
2710 b = p.split('/')[-2]
2711 c = p.split('/')[-1]
2712
2713 name = '@0@:@1@'.format(b, sanitizer)
2714
2715 if name != prev
2716 if want_tests == 'false'
2717 message('Not compiling @0@ because tests is set to false'.format(name))
2718 elif slow_tests
2719 exe = custom_target(
2720 name,
2721 output : name,
2722 depends : build,
2723 command : [env, 'ln', '-fs',
2724 join_paths(build.full_path(), b),
2725 '@OUTPUT@'],
2726 build_by_default : true)
2727 else
2728 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2729 endif
2730 endif
2731 prev = name
2732
2733 if want_tests != 'false' and slow_tests
2734 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2735 env,
2736 args : [exe.full_path(),
2737 join_paths(meson.source_root(),
2738 'test/fuzz-regressions',
2739 p)])
2740 endif
2741 endforeach
b68dfb9e
ZJS
2742 endif
2743endforeach
2744
52d4d1d3 2745
b68dfb9e
ZJS
2746############################################################
2747
0700e8ba 2748if git.found()
37efbbd8
ZJS
2749 all_files = run_command(
2750 git,
450b60ba 2751 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
37efbbd8
ZJS
2752 'ls-files',
2753 ':/*.[ch]'])
2754 all_files = files(all_files.stdout().split())
d68b342b 2755
e85a690b 2756 custom_target(
0700e8ba 2757 'tags',
e85a690b 2758 output : 'tags',
25a82102 2759 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
e85a690b 2760 custom_target(
0700e8ba 2761 'ctags',
e85a690b 2762 output : 'ctags',
25a82102 2763 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
d68b342b 2764endif
177929c2
ZJS
2765
2766if git.found()
37efbbd8 2767 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 2768 run_target(
37efbbd8 2769 'git-contrib',
37efbbd8 2770 command : [meson_git_contrib_sh])
177929c2 2771endif
dd6ab3df
ZJS
2772
2773if git.found()
2774 git_head = run_command(
2775 git,
450b60ba 2776 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2777 'rev-parse', 'HEAD']).stdout().strip()
2778 git_head_short = run_command(
2779 git,
450b60ba 2780 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2781 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2782
2783 run_target(
2784 'git-snapshot',
2785 command : ['git', 'archive',
450b60ba 2786 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
dd6ab3df
ZJS
2787 git_head_short),
2788 '--prefix', 'systemd-@0@/'.format(git_head),
2789 'HEAD'])
2790endif
829257d1
ZJS
2791
2792############################################################
2793
51b13863
LP
2794meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
2795run_target(
2796 'check-api-docs',
2797 depends : [man, libsystemd, libudev],
2798 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
2799
2800############################################################
2801
829257d1
ZJS
2802status = [
2803 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2804
2675413e 2805 'split /usr: @0@'.format(split_usr),
157baa87 2806 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
2807 'prefix directory: @0@'.format(prefixdir),
2808 'rootprefix directory: @0@'.format(rootprefixdir),
2809 'sysconf directory: @0@'.format(sysconfdir),
2810 'include directory: @0@'.format(includedir),
2811 'lib directory: @0@'.format(libdir),
2812 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
2813 'SysV init scripts: @0@'.format(sysvinit_path),
2814 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
2815 'PAM modules directory: @0@'.format(pamlibdir),
2816 'PAM configuration directory: @0@'.format(pamconfdir),
2817 'RPM macros directory: @0@'.format(rpmmacrosdir),
2818 'modprobe.d directory: @0@'.format(modprobedir),
2819 'D-Bus policy directory: @0@'.format(dbuspolicydir),
2820 'D-Bus session directory: @0@'.format(dbussessionservicedir),
2821 'D-Bus system directory: @0@'.format(dbussystemservicedir),
2822 'bash completions directory: @0@'.format(bashcompletiondir),
2823 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1
ZJS
2824 'extra start script: @0@'.format(get_option('rc-local')),
2825 'extra stop script: @0@'.format(get_option('halt-local')),
2826 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2827 get_option('debug-tty')),
2828 'TTY GID: @0@'.format(tty_gid),
84786b8e 2829 'users GID: @0@'.format(users_gid),
829257d1
ZJS
2830 'maximum system UID: @0@'.format(system_uid_max),
2831 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
2832 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
2833 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
2834 'minimum container UID base: @0@'.format(container_uid_base_min),
2835 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 2836 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 2837 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 2838 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 2839 'support URL: @0@'.format(support_url),
afde4574
LP
2840 'nobody user name: @0@'.format(nobody_user),
2841 'nobody group name: @0@'.format(nobody_group),
829257d1 2842 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 2843 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
2844
2845 'default DNSSEC mode: @0@'.format(default_dnssec),
2846 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2847 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2848
2849alt_dns_servers = '\n '.join(dns_servers.split(' '))
2850alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2851status += [
2852 'default DNS servers: @0@'.format(alt_dns_servers),
2853 'default NTP servers: @0@'.format(alt_ntp_servers)]
2854
2855alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2856 '@@0@'.format(time_epoch)).stdout().strip()
2857status += [
2858 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2859
2860# TODO:
2861# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2862# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2863# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2864
349cc4a5 2865if conf.get('ENABLE_EFI') == 1
829257d1
ZJS
2866 status += [
2867 'efi arch: @0@'.format(efi_arch)]
2868
2869 if have_gnu_efi
2870 status += [
2871 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2872 'EFI CC @0@'.format(efi_cc),
359b496f
YW
2873 'EFI lib directory: @0@'.format(efi_libdir),
2874 'EFI lds directory: @0@'.format(efi_ldsdir),
2875 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
2876 endif
2877endif
2878
2879found = []
2880missing = []
2881
2882foreach tuple : [
2883 ['libcryptsetup'],
2884 ['PAM'],
2885 ['AUDIT'],
2886 ['IMA'],
2887 ['AppArmor'],
2888 ['SELinux'],
2889 ['SECCOMP'],
2890 ['SMACK'],
2891 ['zlib'],
2892 ['xz'],
2893 ['lz4'],
2894 ['bzip2'],
2895 ['ACL'],
2896 ['gcrypt'],
2897 ['qrencode'],
2898 ['microhttpd'],
2899 ['gnutls'],
2900 ['libcurl'],
d1bf5675 2901 ['idn'],
87057e24 2902 ['libidn2'],
829257d1 2903 ['libidn'],
e7e11bbf 2904 ['nss-systemd'],
829257d1
ZJS
2905 ['libiptc'],
2906 ['elfutils'],
2907 ['binfmt'],
2908 ['vconsole'],
2909 ['quotacheck'],
2910 ['tmpfiles'],
2911 ['environment.d'],
2912 ['sysusers'],
2913 ['firstboot'],
2914 ['randomseed'],
2915 ['backlight'],
2916 ['rfkill'],
2917 ['logind'],
2918 ['machined'],
2919 ['importd'],
2920 ['hostnamed'],
2921 ['timedated'],
2922 ['timesyncd'],
2923 ['localed'],
2924 ['networkd'],
a7456af5 2925 ['resolve'],
829257d1
ZJS
2926 ['coredump'],
2927 ['polkit'],
2928 ['legacy pkla', install_polkit_pkla],
2929 ['efi'],
2930 ['gnu-efi', have_gnu_efi],
2931 ['kmod'],
2932 ['xkbcommon'],
c4c978a0 2933 ['pcre2'],
829257d1
ZJS
2934 ['blkid'],
2935 ['dbus'],
2936 ['glib'],
08cf5b8d 2937 ['nss-myhostname', conf.get('ENABLE_MYHOSTNAME') == 1],
829257d1
ZJS
2938 ['hwdb'],
2939 ['tpm'],
2940 ['man pages', want_man],
2941 ['html pages', want_html],
2942 ['man page indices', want_man and have_lxml],
829257d1
ZJS
2943 ['SysV compat'],
2944 ['utmp'],
2945 ['ldconfig'],
2946 ['hibernate'],
2947 ['adm group', get_option('adm-group')],
2948 ['wheel group', get_option('wheel-group')],
b14e1b43 2949 ['gshadow'],
829257d1
ZJS
2950 ['debug hashmap'],
2951 ['debug mmap cache'],
2952]
2953
af4d7860
ZJS
2954 if tuple.length() >= 2
2955 cond = tuple[1]
2956 else
829257d1
ZJS
2957 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2958 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 2959 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
2960 endif
2961 if cond
2962 found += [tuple[0]]
2963 else
2964 missing += [tuple[0]]
2965 endif
2966endforeach
2967
2968status += [
9d39c1bf 2969 '',
829257d1 2970 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
2971 '',
2972 'disabled features: @0@'.format(', '.join(missing)),
2973 '']
829257d1 2974message('\n '.join(status))
9a8e64b0
ZJS
2975
2976if rootprefixdir != rootprefix_default
2977 message('WARNING:\n' +
2978 ' Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
2979 ' systemd used fixed names for unit file directories and other paths, so anything\n' +
2980 ' except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
2981endif