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