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