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