]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
shared/logs-show: export show_journal()
[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,
c064d8db
ZJS
2010 link_with : [libshared,
2011 libsystemd_journal_remote],
37efbbd8
ZJS
2012 dependencies : [threads,
2013 libmicrohttpd,
2014 libgnutls,
2015 libxz,
2016 liblz4],
2017 install_rpath : rootlibexecdir,
2018 install : true,
2019 install_dir : rootlibexecdir)
2020
2021 s_j_gatewayd = executable('systemd-journal-gatewayd',
2022 systemd_journal_gatewayd_sources,
2023 include_directories : includes,
2024 link_with : [libshared],
2025 dependencies : [threads,
2026 libmicrohttpd,
2027 libgnutls,
2028 libxz,
2029 liblz4],
2030 install_rpath : rootlibexecdir,
2031 install : true,
2032 install_dir : rootlibexecdir)
2033 public_programs += [s_j_remote, s_j_gatewayd]
5c23128d
ZJS
2034endif
2035
349cc4a5 2036if conf.get('ENABLE_COREDUMP') == 1
37efbbd8
ZJS
2037 executable('systemd-coredump',
2038 systemd_coredump_sources,
005a29f2 2039 include_directories : includes,
aac26058 2040 link_with : [libshared],
005a29f2 2041 dependencies : [threads,
37efbbd8
ZJS
2042 libacl,
2043 libdw,
005a29f2
ZJS
2044 libxz,
2045 liblz4],
2046 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2047 install : true,
2048 install_dir : rootlibexecdir)
2049
2050 exe = executable('coredumpctl',
2051 coredumpctl_sources,
2052 include_directories : includes,
2053 link_with : [libshared],
2054 dependencies : [threads,
2055 libxz,
2056 liblz4],
2057 install_rpath : rootlibexecdir,
2058 install : true)
2059 public_programs += [exe]
5c23128d
ZJS
2060endif
2061
349cc4a5 2062if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2063 exe = executable('systemd-binfmt',
2064 'src/binfmt/binfmt.c',
2065 include_directories : includes,
2066 link_with : [libshared],
2067 install_rpath : rootlibexecdir,
2068 install : true,
2069 install_dir : rootlibexecdir)
2070 public_programs += [exe]
2071
2072 meson.add_install_script('sh', '-c',
2073 mkdir_p.format(binfmtdir))
2074 meson.add_install_script('sh', '-c',
2075 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2076endif
2077
349cc4a5 2078if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2079 executable('systemd-vconsole-setup',
2080 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2081 include_directories : includes,
2082 link_with : [libshared],
2083 install_rpath : rootlibexecdir,
2084 install : true,
2085 install_dir : rootlibexecdir)
5c23128d
ZJS
2086endif
2087
349cc4a5 2088if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2089 executable('systemd-random-seed',
2090 'src/random-seed/random-seed.c',
2091 include_directories : includes,
2092 link_with : [libshared],
2093 install_rpath : rootlibexecdir,
2094 install : true,
2095 install_dir : rootlibexecdir)
5c23128d
ZJS
2096endif
2097
349cc4a5 2098if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2099 executable('systemd-firstboot',
2100 'src/firstboot/firstboot.c',
2101 include_directories : includes,
2102 link_with : [libshared],
2103 dependencies : [libcrypt],
2104 install_rpath : rootlibexecdir,
2105 install : true,
2106 install_dir : rootbindir)
5c23128d
ZJS
2107endif
2108
2109executable('systemd-remount-fs',
2110 'src/remount-fs/remount-fs.c',
2111 'src/core/mount-setup.c',
2112 'src/core/mount-setup.h',
2113 include_directories : includes,
2114 link_with : [libshared],
b2fc5836 2115 install_rpath : rootlibexecdir,
5c23128d
ZJS
2116 install : true,
2117 install_dir : rootlibexecdir)
2118
2119executable('systemd-machine-id-setup',
2120 'src/machine-id-setup/machine-id-setup-main.c',
2121 'src/core/machine-id-setup.c',
2122 'src/core/machine-id-setup.h',
2123 include_directories : includes,
aac26058 2124 link_with : [libshared],
b2fc5836 2125 install_rpath : rootlibexecdir,
5c23128d
ZJS
2126 install : true,
2127 install_dir : rootbindir)
2128
2129executable('systemd-fsck',
2130 'src/fsck/fsck.c',
2131 include_directories : includes,
aac26058 2132 link_with : [libshared],
421f0012 2133 install_rpath : rootlibexecdir,
5c23128d
ZJS
2134 install : true,
2135 install_dir : rootlibexecdir)
2136
80750adb
ZJS
2137executable('systemd-growfs',
2138 'src/partition/growfs.c',
2139 include_directories : includes,
2140 link_with : [libshared],
c34b75a1 2141 dependencies : [libcryptsetup],
80750adb
ZJS
2142 install_rpath : rootlibexecdir,
2143 install : true,
2144 install_dir : rootlibexecdir)
2145
b7f28ac5
ZJS
2146executable('systemd-makefs',
2147 'src/partition/makefs.c',
2148 include_directories : includes,
2149 link_with : [libshared],
2150 install_rpath : rootlibexecdir,
2151 install : true,
2152 install_dir : rootlibexecdir)
2153
5c23128d
ZJS
2154executable('systemd-sleep',
2155 'src/sleep/sleep.c',
2156 include_directories : includes,
2157 link_with : [libshared],
421f0012 2158 install_rpath : rootlibexecdir,
5c23128d
ZJS
2159 install : true,
2160 install_dir : rootlibexecdir)
2161
005a29f2
ZJS
2162exe = executable('systemd-sysctl',
2163 'src/sysctl/sysctl.c',
2164 include_directories : includes,
2165 link_with : [libshared],
2166 install_rpath : rootlibexecdir,
2167 install : true,
2168 install_dir : rootlibexecdir)
2169public_programs += [exe]
5c23128d
ZJS
2170
2171executable('systemd-ac-power',
2172 'src/ac-power/ac-power.c',
2173 include_directories : includes,
2174 link_with : [libshared],
421f0012 2175 install_rpath : rootlibexecdir,
5c23128d
ZJS
2176 install : true,
2177 install_dir : rootlibexecdir)
2178
005a29f2
ZJS
2179exe = executable('systemd-detect-virt',
2180 'src/detect-virt/detect-virt.c',
2181 include_directories : includes,
2182 link_with : [libshared],
2183 install_rpath : rootlibexecdir,
2184 install : true)
2185public_programs += [exe]
2186
2187exe = executable('systemd-delta',
2188 'src/delta/delta.c',
2189 include_directories : includes,
2190 link_with : [libshared],
2191 install_rpath : rootlibexecdir,
2192 install : true)
2193public_programs += [exe]
2194
2195exe = executable('systemd-escape',
2196 'src/escape/escape.c',
2197 include_directories : includes,
2198 link_with : [libshared],
2199 install_rpath : rootlibexecdir,
2200 install : true,
2201 install_dir : rootbindir)
2202public_programs += [exe]
2203
2204exe = executable('systemd-notify',
2205 'src/notify/notify.c',
2206 include_directories : includes,
2207 link_with : [libshared],
2208 install_rpath : rootlibexecdir,
2209 install : true,
2210 install_dir : rootbindir)
2211public_programs += [exe]
5c23128d
ZJS
2212
2213executable('systemd-volatile-root',
2214 'src/volatile-root/volatile-root.c',
2215 include_directories : includes,
2216 link_with : [libshared],
421f0012 2217 install_rpath : rootlibexecdir,
5c23128d
ZJS
2218 install : true,
2219 install_dir : rootlibexecdir)
2220
2221executable('systemd-cgroups-agent',
2222 'src/cgroups-agent/cgroups-agent.c',
2223 include_directories : includes,
2224 link_with : [libshared],
421f0012 2225 install_rpath : rootlibexecdir,
5c23128d
ZJS
2226 install : true,
2227 install_dir : rootlibexecdir)
2228
005a29f2
ZJS
2229exe = executable('systemd-path',
2230 'src/path/path.c',
2231 include_directories : includes,
aac26058 2232 link_with : [libshared],
005a29f2
ZJS
2233 install_rpath : rootlibexecdir,
2234 install : true)
2235public_programs += [exe]
2236
2237exe = executable('systemd-ask-password',
2238 'src/ask-password/ask-password.c',
2239 include_directories : includes,
aac26058 2240 link_with : [libshared],
005a29f2
ZJS
2241 install_rpath : rootlibexecdir,
2242 install : true,
2243 install_dir : rootbindir)
2244public_programs += [exe]
5c23128d
ZJS
2245
2246executable('systemd-reply-password',
2247 'src/reply-password/reply-password.c',
2248 include_directories : includes,
aac26058 2249 link_with : [libshared],
421f0012 2250 install_rpath : rootlibexecdir,
5c23128d
ZJS
2251 install : true,
2252 install_dir : rootlibexecdir)
2253
005a29f2
ZJS
2254exe = executable('systemd-tty-ask-password-agent',
2255 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2256 include_directories : includes,
aac26058 2257 link_with : [libshared],
005a29f2
ZJS
2258 install_rpath : rootlibexecdir,
2259 install : true,
2260 install_dir : rootbindir)
2261public_programs += [exe]
2262
2263exe = executable('systemd-cgls',
2264 'src/cgls/cgls.c',
2265 include_directories : includes,
aac26058 2266 link_with : [libshared],
005a29f2
ZJS
2267 install_rpath : rootlibexecdir,
2268 install : true)
2269public_programs += [exe]
2270
2271exe = executable('systemd-cgtop',
2272 'src/cgtop/cgtop.c',
2273 include_directories : includes,
aac26058 2274 link_with : [libshared],
005a29f2
ZJS
2275 install_rpath : rootlibexecdir,
2276 install : true)
2277public_programs += [exe]
5c23128d
ZJS
2278
2279executable('systemd-initctl',
2280 'src/initctl/initctl.c',
2281 include_directories : includes,
aac26058 2282 link_with : [libshared],
421f0012 2283 install_rpath : rootlibexecdir,
5c23128d
ZJS
2284 install : true,
2285 install_dir : rootlibexecdir)
2286
005a29f2
ZJS
2287exe = executable('systemd-mount',
2288 'src/mount/mount-tool.c',
2289 include_directories : includes,
34ce0a52 2290 link_with : [libshared],
005a29f2
ZJS
2291 install_rpath : rootlibexecdir,
2292 install : true)
2293public_programs += [exe]
5c23128d 2294
7b76fce1 2295meson.add_install_script(meson_make_symlink,
e17e5ba9 2296 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2297
005a29f2
ZJS
2298exe = executable('systemd-run',
2299 'src/run/run.c',
2300 include_directories : includes,
aac26058 2301 link_with : [libshared],
005a29f2
ZJS
2302 install_rpath : rootlibexecdir,
2303 install : true)
2304public_programs += [exe]
2305
2306exe = executable('systemd-stdio-bridge',
2307 'src/stdio-bridge/stdio-bridge.c',
2308 include_directories : includes,
aac26058 2309 link_with : [libshared],
005a29f2
ZJS
2310 install_rpath : rootlibexecdir,
2311 install : true)
2312public_programs += [exe]
2313
2314exe = executable('busctl',
2315 'src/busctl/busctl.c',
2316 'src/busctl/busctl-introspect.c',
2317 'src/busctl/busctl-introspect.h',
2318 include_directories : includes,
aac26058 2319 link_with : [libshared],
005a29f2
ZJS
2320 install_rpath : rootlibexecdir,
2321 install : true)
2322public_programs += [exe]
5c23128d 2323
349cc4a5 2324if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2325 exe = executable('systemd-sysusers',
2326 'src/sysusers/sysusers.c',
2327 include_directories : includes,
2328 link_with : [libshared],
2329 install_rpath : rootlibexecdir,
2330 install : true,
2331 install_dir : rootbindir)
2332 public_programs += [exe]
5c23128d
ZJS
2333endif
2334
349cc4a5 2335if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2336 exe = executable('systemd-tmpfiles',
2337 'src/tmpfiles/tmpfiles.c',
2338 include_directories : includes,
2339 link_with : [libshared],
2340 dependencies : [libacl],
2341 install_rpath : rootlibexecdir,
2342 install : true,
2343 install_dir : rootbindir)
2344 public_programs += [exe]
d9daae55
ZJS
2345
2346 test('test-systemd-tmpfiles',
2347 test_systemd_tmpfiles_py,
2348 args : exe.full_path())
2349 # https://github.com/mesonbuild/meson/issues/2681
5c23128d
ZJS
2350endif
2351
349cc4a5 2352if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2353 exe = executable('systemd-hwdb',
2354 'src/hwdb/hwdb.c',
2355 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2356 include_directories : includes,
0c06b506 2357 link_with : [libudev_static],
0da6f396 2358 install_rpath : udev_rpath,
37efbbd8
ZJS
2359 install : true,
2360 install_dir : rootbindir)
2361 public_programs += [exe]
2362endif
2363
349cc4a5 2364if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2365 executable('systemd-quotacheck',
2366 'src/quotacheck/quotacheck.c',
005a29f2 2367 include_directories : includes,
aac26058 2368 link_with : [libshared],
005a29f2
ZJS
2369 install_rpath : rootlibexecdir,
2370 install : true,
37efbbd8 2371 install_dir : rootlibexecdir)
5c23128d
ZJS
2372endif
2373
005a29f2
ZJS
2374exe = executable('systemd-socket-proxyd',
2375 'src/socket-proxy/socket-proxyd.c',
2376 include_directories : includes,
aac26058 2377 link_with : [libshared],
005a29f2
ZJS
2378 dependencies : [threads],
2379 install_rpath : rootlibexecdir,
2380 install : true,
2381 install_dir : rootlibexecdir)
2382public_programs += [exe]
2383
2384exe = executable('systemd-udevd',
2385 systemd_udevd_sources,
2386 include_directories : includes,
5c72049f 2387 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2 2388 link_with : [libudev_core,
005a29f2 2389 libsystemd_network,
0c06b506 2390 libudev_static],
3a30f21f
ZJS
2391 dependencies : [threads,
2392 libkmod,
005a29f2 2393 libidn,
aac26058
ZJS
2394 libacl,
2395 libblkid],
1aec3ed9 2396 install_rpath : udev_rpath,
005a29f2
ZJS
2397 install : true,
2398 install_dir : rootlibexecdir)
2399public_programs += [exe]
2400
2401exe = executable('udevadm',
2402 udevadm_sources,
6671e818 2403 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2
ZJS
2404 include_directories : includes,
2405 link_with : [libudev_core,
005a29f2 2406 libsystemd_network,
0c06b506 2407 libudev_static],
3a30f21f
ZJS
2408 dependencies : [threads,
2409 libkmod,
005a29f2 2410 libidn,
aac26058
ZJS
2411 libacl,
2412 libblkid],
1aec3ed9 2413 install_rpath : udev_rpath,
005a29f2
ZJS
2414 install : true,
2415 install_dir : rootbindir)
2416public_programs += [exe]
5c23128d
ZJS
2417
2418executable('systemd-shutdown',
2419 systemd_shutdown_sources,
2420 include_directories : includes,
34ce0a52 2421 link_with : [libshared],
95b862b0 2422 dependencies : [libmount],
421f0012 2423 install_rpath : rootlibexecdir,
5c23128d
ZJS
2424 install : true,
2425 install_dir : rootlibexecdir)
2426
2427executable('systemd-update-done',
2428 'src/update-done/update-done.c',
2429 include_directories : includes,
2430 link_with : [libshared],
421f0012 2431 install_rpath : rootlibexecdir,
5c23128d
ZJS
2432 install : true,
2433 install_dir : rootlibexecdir)
2434
2435executable('systemd-update-utmp',
2436 'src/update-utmp/update-utmp.c',
2437 include_directories : includes,
aac26058 2438 link_with : [libshared],
5c23128d 2439 dependencies : [libaudit],
421f0012 2440 install_rpath : rootlibexecdir,
5c23128d
ZJS
2441 install : true,
2442 install_dir : rootlibexecdir)
2443
349cc4a5 2444if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2445 executable('systemd-modules-load',
2446 'src/modules-load/modules-load.c',
2447 include_directories : includes,
2448 link_with : [libshared],
2449 dependencies : [libkmod],
2450 install_rpath : rootlibexecdir,
2451 install : true,
2452 install_dir : rootlibexecdir)
94e75a54 2453
37efbbd8
ZJS
2454 meson.add_install_script('sh', '-c',
2455 mkdir_p.format(modulesloaddir))
2456 meson.add_install_script('sh', '-c',
2457 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2458endif
2459
005a29f2
ZJS
2460exe = executable('systemd-nspawn',
2461 systemd_nspawn_sources,
2462 'src/core/mount-setup.c', # FIXME: use a variable?
2463 'src/core/mount-setup.h',
2464 'src/core/loopback-setup.c',
2465 'src/core/loopback-setup.h',
97d90615
ZJS
2466 include_directories : includes,
2467 link_with : [libnspawn_core,
2468 libshared],
2469 dependencies : [libblkid],
005a29f2
ZJS
2470 install_rpath : rootlibexecdir,
2471 install : true)
2472public_programs += [exe]
5c23128d 2473
349cc4a5 2474if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2475 executable('systemd-networkd',
2476 systemd_networkd_sources,
2477 include_directories : includes,
2478 link_with : [libnetworkd_core,
37efbbd8 2479 libsystemd_network,
0c06b506 2480 libudev_static,
37efbbd8 2481 libshared],
4b57a272 2482 dependencies : [threads],
37efbbd8
ZJS
2483 install_rpath : rootlibexecdir,
2484 install : true,
2485 install_dir : rootlibexecdir)
2486
2487 executable('systemd-networkd-wait-online',
2488 systemd_networkd_wait_online_sources,
2489 include_directories : includes,
2490 link_with : [libnetworkd_core,
2491 libshared],
2492 install_rpath : rootlibexecdir,
2493 install : true,
2494 install_dir : rootlibexecdir)
5c23128d 2495
dcfe072a
FS
2496 exe = executable('networkctl',
2497 networkctl_sources,
2498 include_directories : includes,
2499 link_with : [libsystemd_network,
aac26058 2500 libshared],
dcfe072a
FS
2501 install_rpath : rootlibexecdir,
2502 install : true,
2503 install_dir : rootbindir)
2504 public_programs += [exe]
2505endif
e821f6a9
ZJS
2506
2507executable('systemd-sulogin-shell',
2508 ['src/sulogin-shell/sulogin-shell.c'],
2509 include_directories : includes,
2510 link_with : [libshared],
2511 install_rpath : rootlibexecdir,
2512 install : true,
2513 install_dir : rootlibexecdir)
2514
69e96427
ZJS
2515############################################################
2516
2517foreach tuple : tests
37efbbd8
ZJS
2518 sources = tuple[0]
2519 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2520 dependencies = tuple[2]
2521 condition = tuple.length() >= 4 ? tuple[3] : ''
2522 type = tuple.length() >= 5 ? tuple[4] : ''
2523 defs = tuple.length() >= 6 ? tuple[5] : []
2524 incs = tuple.length() >= 7 ? tuple[6] : includes
2525 timeout = 30
2526
2527 name = sources[0].split('/')[-1].split('.')[0]
2528 if type.startswith('timeout=')
2529 timeout = type.split('=')[1].to_int()
2530 type = ''
2531 endif
08318a2c
AD
2532 if want_tests == 'false'
2533 message('Not compiling @0@ because tests is set to false'.format(name))
2534 elif condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2535 exe = executable(
2536 name,
2537 sources,
2538 include_directories : incs,
2539 link_with : link_with,
2540 dependencies : dependencies,
2541 c_args : defs,
2542 install_rpath : rootlibexecdir,
7cdd9783
MB
2543 install : install_tests,
2544 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2545
2546 if type == 'manual'
2547 message('@0@ is a manual test'.format(name))
2548 elif type == 'unsafe' and want_tests != 'unsafe'
2549 message('@0@ is an unsafe test'.format(name))
2550 else
2551 test(name, exe,
2552 env : test_env,
2553 timeout : timeout)
2554 endif
2555 else
2556 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2557 endif
69e96427
ZJS
2558endforeach
2559
0632b4cd 2560exe = executable(
37efbbd8
ZJS
2561 'test-libsystemd-sym',
2562 test_libsystemd_sym_c,
2563 include_directories : includes,
2564 link_with : [libsystemd],
2565 install : install_tests,
2566 install_dir : testsdir)
0632b4cd 2567test('test-libsystemd-sym', exe)
37ab1a25 2568
0632b4cd
ZJS
2569exe = executable(
2570 'test-libsystemd-static-sym',
2571 test_libsystemd_sym_c,
2572 include_directories : includes,
0632b4cd
ZJS
2573 link_with : [install_libsystemd_static],
2574 dependencies : [threads], # threads is already included in dependencies on the library,
2575 # but does not seem to get propagated. Add here as a work-around.
20f3d32d
DC
2576 build_by_default : static_libsystemd_pic,
2577 install : install_tests and static_libsystemd_pic,
0632b4cd 2578 install_dir : testsdir)
20f3d32d 2579if static_libsystemd_pic
0632b4cd
ZJS
2580 test('test-libsystemd-static-sym', exe)
2581endif
37ab1a25 2582
0632b4cd 2583exe = executable(
37efbbd8
ZJS
2584 'test-libudev-sym',
2585 test_libudev_sym_c,
2586 include_directories : includes,
2587 c_args : ['-Wno-deprecated-declarations'],
2588 link_with : [libudev],
2589 install : install_tests,
2590 install_dir : testsdir)
0632b4cd
ZJS
2591test('test-libudev-sym', exe)
2592
2593exe = executable(
2594 'test-libudev-static-sym',
2595 test_libudev_sym_c,
2596 include_directories : includes,
20f3d32d 2597 c_args : ['-Wno-deprecated-declarations'],
0632b4cd 2598 link_with : [install_libudev_static],
20f3d32d
DC
2599 build_by_default : static_libudev_pic,
2600 install : install_tests and static_libudev_pic,
0632b4cd 2601 install_dir : testsdir)
20f3d32d 2602if static_libudev_pic
0632b4cd
ZJS
2603 test('test-libudev-static-sym', exe)
2604endif
e0bec52f 2605
69e96427 2606############################################################
5c23128d 2607
7db7d5b7
JR
2608fuzzer_exes = []
2609
2610foreach tuple : fuzzers
2611 sources = tuple[0]
2612 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2613 dependencies = tuple[2]
2614 defs = tuple.length() >= 4 ? tuple[3] : []
2615 incs = tuple.length() >= 5 ? tuple[4] : includes
2616
31e57a35 2617 if fuzzer_build
7db7d5b7
JR
2618 dependencies += fuzzing_engine
2619 else
2620 sources += 'src/fuzz/fuzz-main.c'
2621 endif
2622
2623 name = sources[0].split('/')[-1].split('.')[0]
2624
2625 fuzzer_exes += executable(
2626 name,
2627 sources,
2628 include_directories : [incs, include_directories('src/fuzz')],
2629 link_with : link_with,
2630 dependencies : dependencies,
2631 c_args : defs,
2632 install : false)
2633endforeach
2634
2635run_target('fuzzers',
2636 depends : fuzzer_exes,
2637 command : ['true'])
2638
2639############################################################
2640
5c23128d
ZJS
2641make_directive_index_py = find_program('tools/make-directive-index.py')
2642make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2643xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2644hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2645
2646subdir('units')
2647subdir('sysctl.d')
2648subdir('sysusers.d')
2649subdir('tmpfiles.d')
e783f957 2650subdir('presets')
5c23128d
ZJS
2651subdir('hwdb')
2652subdir('network')
2653subdir('man')
2654subdir('shell-completion/bash')
2655subdir('shell-completion/zsh')
2d684e65
LP
2656subdir('doc/sysvinit')
2657subdir('doc/var-log')
5c23128d
ZJS
2658
2659# FIXME: figure out if the warning is true:
2660# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2661install_subdir('factory/etc',
2662 install_dir : factorydir)
2663
2664
2665install_data('xorg/50-systemd-user.sh',
2666 install_dir : xinitrcdir)
582faeb4
DJL
2667install_data('modprobe.d/systemd.conf',
2668 install_dir : modprobedir)
f09eb768 2669install_data('LICENSE.GPL2',
5c23128d 2670 'LICENSE.LGPL2.1',
f09eb768
LP
2671 'NEWS',
2672 'README',
2673 'doc/CODING_STYLE',
2674 'doc/DISTRO_PORTING',
2675 'doc/ENVIRONMENT.md',
2676 'doc/HACKING',
2677 'doc/TRANSIENT-SETTINGS.md',
2678 'doc/TRANSLATORS',
2679 'doc/UIDS-GIDS.md',
5c23128d
ZJS
2680 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2681 install_dir : docdir)
d68b342b 2682
94e75a54
ZJS
2683meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2684meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2685
d68b342b
ZJS
2686############################################################
2687
005a29f2
ZJS
2688meson_check_help = find_program('tools/meson-check-help.sh')
2689
2690foreach exec : public_programs
37efbbd8
ZJS
2691 name = exec.full_path().split('/')[-1]
2692 test('check-help-' + name,
2693 meson_check_help,
2694 args : [exec.full_path()])
005a29f2
ZJS
2695endforeach
2696
2697############################################################
2698
52d4d1d3
ZJS
2699# Enable tests for all supported sanitizers
2700foreach tuple : sanitizers
2701 sanitizer = tuple[0]
2702 build = tuple[1]
b68dfb9e 2703
52d4d1d3
ZJS
2704 have = run_command(check_compilation_sh,
2705 cc.cmd_array(), '-x', 'c',
2706 '-fsanitize=@0@'.format(sanitizer),
2707 '-include', link_test_c).returncode() == 0
2708 message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no'))
b68dfb9e 2709
52d4d1d3
ZJS
2710 if have
2711 prev = ''
2712 foreach p : fuzz_regression_tests
2713 b = p.split('/')[-2]
2714 c = p.split('/')[-1]
2715
2716 name = '@0@:@1@'.format(b, sanitizer)
2717
2718 if name != prev
2719 if want_tests == 'false'
2720 message('Not compiling @0@ because tests is set to false'.format(name))
2721 elif slow_tests
2722 exe = custom_target(
2723 name,
2724 output : name,
2725 depends : build,
2726 command : [env, 'ln', '-fs',
2727 join_paths(build.full_path(), b),
2728 '@OUTPUT@'],
2729 build_by_default : true)
2730 else
2731 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2732 endif
2733 endif
2734 prev = name
2735
2736 if want_tests != 'false' and slow_tests
2737 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2738 env,
2739 args : [exe.full_path(),
2740 join_paths(meson.source_root(),
2741 'test/fuzz-regressions',
2742 p)])
2743 endif
2744 endforeach
b68dfb9e
ZJS
2745 endif
2746endforeach
2747
52d4d1d3 2748
b68dfb9e
ZJS
2749############################################################
2750
0700e8ba 2751if git.found()
37efbbd8
ZJS
2752 all_files = run_command(
2753 git,
450b60ba 2754 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
37efbbd8
ZJS
2755 'ls-files',
2756 ':/*.[ch]'])
2757 all_files = files(all_files.stdout().split())
d68b342b 2758
e85a690b 2759 custom_target(
0700e8ba 2760 'tags',
e85a690b 2761 output : 'tags',
25a82102 2762 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
2f09974f 2763 run_target(
0700e8ba 2764 'ctags',
25a82102 2765 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
d68b342b 2766endif
177929c2
ZJS
2767
2768if git.found()
37efbbd8 2769 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 2770 run_target(
37efbbd8 2771 'git-contrib',
37efbbd8 2772 command : [meson_git_contrib_sh])
177929c2 2773endif
dd6ab3df
ZJS
2774
2775if git.found()
2776 git_head = run_command(
2777 git,
450b60ba 2778 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2779 'rev-parse', 'HEAD']).stdout().strip()
2780 git_head_short = run_command(
2781 git,
450b60ba 2782 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2783 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2784
2785 run_target(
2786 'git-snapshot',
2787 command : ['git', 'archive',
450b60ba 2788 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
dd6ab3df
ZJS
2789 git_head_short),
2790 '--prefix', 'systemd-@0@/'.format(git_head),
2791 'HEAD'])
2792endif
829257d1
ZJS
2793
2794############################################################
2795
51b13863
LP
2796meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
2797run_target(
2798 'check-api-docs',
2799 depends : [man, libsystemd, libudev],
2800 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
2801
2802############################################################
2803
829257d1
ZJS
2804status = [
2805 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2806
2675413e 2807 'split /usr: @0@'.format(split_usr),
157baa87 2808 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
2809 'prefix directory: @0@'.format(prefixdir),
2810 'rootprefix directory: @0@'.format(rootprefixdir),
2811 'sysconf directory: @0@'.format(sysconfdir),
2812 'include directory: @0@'.format(includedir),
2813 'lib directory: @0@'.format(libdir),
2814 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
2815 'SysV init scripts: @0@'.format(sysvinit_path),
2816 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
2817 'PAM modules directory: @0@'.format(pamlibdir),
2818 'PAM configuration directory: @0@'.format(pamconfdir),
2819 'RPM macros directory: @0@'.format(rpmmacrosdir),
2820 'modprobe.d directory: @0@'.format(modprobedir),
2821 'D-Bus policy directory: @0@'.format(dbuspolicydir),
2822 'D-Bus session directory: @0@'.format(dbussessionservicedir),
2823 'D-Bus system directory: @0@'.format(dbussystemservicedir),
2824 'bash completions directory: @0@'.format(bashcompletiondir),
2825 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1
ZJS
2826 'extra start script: @0@'.format(get_option('rc-local')),
2827 'extra stop script: @0@'.format(get_option('halt-local')),
2828 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2829 get_option('debug-tty')),
2830 'TTY GID: @0@'.format(tty_gid),
84786b8e 2831 'users GID: @0@'.format(users_gid),
829257d1
ZJS
2832 'maximum system UID: @0@'.format(system_uid_max),
2833 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
2834 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
2835 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
2836 'minimum container UID base: @0@'.format(container_uid_base_min),
2837 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 2838 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 2839 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 2840 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 2841 'support URL: @0@'.format(support_url),
afde4574
LP
2842 'nobody user name: @0@'.format(nobody_user),
2843 'nobody group name: @0@'.format(nobody_group),
829257d1 2844 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 2845 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
2846
2847 'default DNSSEC mode: @0@'.format(default_dnssec),
2848 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2849 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2850
2851alt_dns_servers = '\n '.join(dns_servers.split(' '))
2852alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2853status += [
2854 'default DNS servers: @0@'.format(alt_dns_servers),
2855 'default NTP servers: @0@'.format(alt_ntp_servers)]
2856
2857alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2858 '@@0@'.format(time_epoch)).stdout().strip()
2859status += [
2860 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2861
2862# TODO:
2863# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2864# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2865# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2866
349cc4a5 2867if conf.get('ENABLE_EFI') == 1
829257d1
ZJS
2868 status += [
2869 'efi arch: @0@'.format(efi_arch)]
2870
2871 if have_gnu_efi
2872 status += [
2873 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2874 'EFI CC @0@'.format(efi_cc),
359b496f
YW
2875 'EFI lib directory: @0@'.format(efi_libdir),
2876 'EFI lds directory: @0@'.format(efi_ldsdir),
2877 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
2878 endif
2879endif
2880
2881found = []
2882missing = []
2883
2884foreach tuple : [
2885 ['libcryptsetup'],
2886 ['PAM'],
2887 ['AUDIT'],
2888 ['IMA'],
2889 ['AppArmor'],
2890 ['SELinux'],
2891 ['SECCOMP'],
2892 ['SMACK'],
2893 ['zlib'],
2894 ['xz'],
2895 ['lz4'],
2896 ['bzip2'],
2897 ['ACL'],
2898 ['gcrypt'],
2899 ['qrencode'],
2900 ['microhttpd'],
2901 ['gnutls'],
2902 ['libcurl'],
d1bf5675 2903 ['idn'],
87057e24 2904 ['libidn2'],
829257d1 2905 ['libidn'],
e7e11bbf 2906 ['nss-systemd'],
829257d1
ZJS
2907 ['libiptc'],
2908 ['elfutils'],
2909 ['binfmt'],
2910 ['vconsole'],
2911 ['quotacheck'],
2912 ['tmpfiles'],
2913 ['environment.d'],
2914 ['sysusers'],
2915 ['firstboot'],
2916 ['randomseed'],
2917 ['backlight'],
2918 ['rfkill'],
2919 ['logind'],
2920 ['machined'],
61d0578b 2921 ['portabled'],
829257d1
ZJS
2922 ['importd'],
2923 ['hostnamed'],
2924 ['timedated'],
2925 ['timesyncd'],
2926 ['localed'],
2927 ['networkd'],
a7456af5 2928 ['resolve'],
829257d1
ZJS
2929 ['coredump'],
2930 ['polkit'],
2931 ['legacy pkla', install_polkit_pkla],
2932 ['efi'],
2933 ['gnu-efi', have_gnu_efi],
2934 ['kmod'],
2935 ['xkbcommon'],
c4c978a0 2936 ['pcre2'],
829257d1
ZJS
2937 ['blkid'],
2938 ['dbus'],
2939 ['glib'],
08cf5b8d 2940 ['nss-myhostname', conf.get('ENABLE_MYHOSTNAME') == 1],
829257d1
ZJS
2941 ['hwdb'],
2942 ['tpm'],
2943 ['man pages', want_man],
2944 ['html pages', want_html],
2945 ['man page indices', want_man and have_lxml],
829257d1
ZJS
2946 ['SysV compat'],
2947 ['utmp'],
2948 ['ldconfig'],
2949 ['hibernate'],
2950 ['adm group', get_option('adm-group')],
2951 ['wheel group', get_option('wheel-group')],
b14e1b43 2952 ['gshadow'],
829257d1
ZJS
2953 ['debug hashmap'],
2954 ['debug mmap cache'],
d18cb393 2955 ['valgrind', conf.get('VALGRIND') == 1],
829257d1
ZJS
2956]
2957
af4d7860
ZJS
2958 if tuple.length() >= 2
2959 cond = tuple[1]
2960 else
829257d1
ZJS
2961 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2962 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 2963 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
2964 endif
2965 if cond
2966 found += [tuple[0]]
2967 else
2968 missing += [tuple[0]]
2969 endif
2970endforeach
2971
2972status += [
9d39c1bf 2973 '',
829257d1 2974 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
2975 '',
2976 'disabled features: @0@'.format(', '.join(missing)),
2977 '']
829257d1 2978message('\n '.join(status))
9a8e64b0
ZJS
2979
2980if rootprefixdir != rootprefix_default
8ea9fad7
YW
2981 warning('\n' +
2982 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
2983 'systemd used fixed names for unit file directories and other paths, so anything\n' +
2984 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 2985endif