]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
core: systemd1.manage-unit-files policy implies systemd1.reload-daemon
[thirdparty/systemd.git] / meson.build
CommitLineData
3a726fcd
ZJS
1# SPDX-License-Identifier: LGPL-2.1+
2#
3# Copyright 2017 Zbigniew Jędrzejewski-Szmek
3a726fcd 4
5c23128d 5project('systemd', 'c',
ad6a0853 6 version : '238',
5c23128d
ZJS
7 license : 'LGPLv2+',
8 default_options: [
37efbbd8
ZJS
9 'c_std=gnu99',
10 'prefix=/usr',
11 'sysconfdir=/etc',
12 'localstatedir=/var',
5c23128d 13 ],
8ea9fad7 14 meson_version : '>= 0.44',
5c23128d
ZJS
15 )
16
ad6a0853
ZJS
17libsystemd_version = '0.22.0'
18libudev_version = '1.6.10'
56d50ab1 19
348b4437 20# We need the same data in two different formats, ugh!
5c23128d
ZJS
21# Also, for hysterical reasons, we use different variable
22# names, sometimes. Not all variables are included in every
23# set. Ugh, ugh, ugh!
24conf = configuration_data()
25conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
26conf.set_quoted('PACKAGE_VERSION', meson.project_version())
27
28substs = configuration_data()
29substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
30substs.set('PACKAGE_VERSION', meson.project_version())
31
5c23128d
ZJS
32#####################################################################
33
003c8879
ZJS
34# Try to install the git pre-commit hook
35git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
36if git_hook.returncode() == 0
37 message(git_hook.stdout().strip())
38endif
39
40#####################################################################
41
2675413e
ZJS
42if get_option('split-usr') == 'auto'
43 split_usr = run_command('test', '-L', '/bin').returncode() != 0
44else
45 split_usr = get_option('split-usr') == 'true'
46endif
671f0f8d
ZJS
47conf.set10('HAVE_SPLIT_USR', split_usr,
48 description : '/usr/bin and /bin directories are separate')
9a8e64b0 49
157baa87
ZJS
50if get_option('split-bin') == 'auto'
51 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
52else
53 split_bin = get_option('split-bin') == 'true'
54endif
671f0f8d
ZJS
55conf.set10('HAVE_SPLIT_BIN', split_bin,
56 description : 'bin and sbin directories are separate')
157baa87 57
74344a17 58rootprefixdir = get_option('rootprefix')
74344a17
ZJS
59# Unusual rootprefixdir values are used by some distros
60# (see https://github.com/systemd/systemd/pull/7461).
ba7f4ae6 61rootprefix_default = split_usr ? '/' : '/usr'
9a8e64b0
ZJS
62if rootprefixdir == ''
63 rootprefixdir = rootprefix_default
74344a17 64endif
5c23128d
ZJS
65
66sysvinit_path = get_option('sysvinit-path')
67sysvrcnd_path = get_option('sysvrcnd-path')
348b4437 68conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
349cc4a5 69 description : 'SysV init scripts and rcN.d links are supported')
5c23128d
ZJS
70
71# join_paths ignore the preceding arguments if an absolute component is
72# encountered, so this should canonicalize various paths when they are
73# absolute or relative.
74prefixdir = get_option('prefix')
75if not prefixdir.startswith('/')
37efbbd8 76 error('Prefix is not absolute: "@0@"'.format(prefixdir))
5c23128d
ZJS
77endif
78bindir = join_paths(prefixdir, get_option('bindir'))
79libdir = join_paths(prefixdir, get_option('libdir'))
80sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
81includedir = join_paths(prefixdir, get_option('includedir'))
82datadir = join_paths(prefixdir, get_option('datadir'))
83localstatedir = join_paths('/', get_option('localstatedir'))
84
85rootbindir = join_paths(rootprefixdir, 'bin')
157baa87 86rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
5c23128d
ZJS
87rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
88
89rootlibdir = get_option('rootlibdir')
90if rootlibdir == ''
37efbbd8 91 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
5c23128d
ZJS
92endif
93
94# Dirs of external packages
e17e5ba9
MB
95pkgconfigdatadir = join_paths(datadir, 'pkgconfig')
96pkgconfiglibdir = join_paths(libdir, 'pkgconfig')
97polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
98polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
99polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
100varlogdir = join_paths(localstatedir, 'log')
101xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
8a38aac3
YW
102rpmmacrosdir = get_option('rpmmacrosdir')
103if rpmmacrosdir != 'no'
104 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
105endif
02fa054d 106modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
5c23128d
ZJS
107
108# Our own paths
e17e5ba9
MB
109pkgdatadir = join_paths(datadir, 'systemd')
110environmentdir = join_paths(prefixdir, 'lib/environment.d')
111pkgsysconfdir = join_paths(sysconfdir, 'systemd')
112userunitdir = join_paths(prefixdir, 'lib/systemd/user')
113userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
114tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
115sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
116sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
117binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
118modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
119networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
120pkgincludedir = join_paths(includedir, 'systemd')
121systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
122usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
123systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
124userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
125systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
126systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
127systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
128systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
129udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
130udevhomedir = udevlibexecdir
131udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
132udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
133catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
134kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
135factorydir = join_paths(datadir, 'factory')
e17e5ba9
MB
136bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
137testsdir = join_paths(prefixdir, 'lib/systemd/tests')
138systemdstatedir = join_paths(localstatedir, 'lib/systemd')
139catalogstatedir = join_paths(systemdstatedir, 'catalog')
140randomseeddir = join_paths(localstatedir, 'lib/systemd')
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
8ea9fad7
YW
683 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.')
afde4574
LP
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
8ea9fad7
YW
692 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.')
afde4574
LP
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
8ea9fad7
YW
702 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.')
afde4574
LP
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
8ea9fad7
YW
711 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.')
afde4574
LP
714 endif
715endif
8374cc62 716if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
8ea9fad7
YW
717 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.')
8374cc62 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
349cc4a5
ZJS
763enable_debug_hashmap = false
764enable_debug_mmap_cache = false
ad7aa760
YW
765foreach name : get_option('debug')
766 if name == 'hashmap'
767 enable_debug_hashmap = true
768 elif name == 'mmap-cache'
769 enable_debug_mmap_cache = true
770 else
771 message('unknown debug option "@0@", ignoring'.format(name))
772 endif
773endforeach
349cc4a5
ZJS
774conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
775conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
671677da 776
5c23128d
ZJS
777#####################################################################
778
779threads = dependency('threads')
780librt = cc.find_library('rt')
781libm = cc.find_library('m')
782libdl = cc.find_library('dl')
783libcrypt = cc.find_library('crypt')
784
1800cc85
ZJS
785libcap = dependency('libcap', required : false)
786if not libcap.found()
787 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
788 libcap = cc.find_library('cap')
789endif
790
5c23128d 791libmount = dependency('mount',
c0b4b0f8 792 version : fuzzer_build ? '>= 0' : '>= 2.30')
5c23128d
ZJS
793
794want_seccomp = get_option('seccomp')
31e57a35 795if want_seccomp != 'false' and not fuzzer_build
37efbbd8 796 libseccomp = dependency('libseccomp',
9f0e9c01 797 version : '>= 2.3.1',
37efbbd8 798 required : want_seccomp == 'true')
349cc4a5 799 have = libseccomp.found()
5c23128d 800else
349cc4a5 801 have = false
37efbbd8 802 libseccomp = []
5c23128d 803endif
349cc4a5 804conf.set10('HAVE_SECCOMP', have)
5c23128d
ZJS
805
806want_selinux = get_option('selinux')
31e57a35 807if want_selinux != 'false' and not fuzzer_build
37efbbd8
ZJS
808 libselinux = dependency('libselinux',
809 version : '>= 2.1.9',
810 required : want_selinux == 'true')
349cc4a5 811 have = libselinux.found()
5c23128d 812else
349cc4a5 813 have = false
37efbbd8 814 libselinux = []
5c23128d 815endif
349cc4a5 816conf.set10('HAVE_SELINUX', have)
5c23128d
ZJS
817
818want_apparmor = get_option('apparmor')
31e57a35 819if want_apparmor != 'false' and not fuzzer_build
37efbbd8
ZJS
820 libapparmor = dependency('libapparmor',
821 required : want_apparmor == 'true')
349cc4a5 822 have = libapparmor.found()
5c23128d 823else
349cc4a5 824 have = false
37efbbd8 825 libapparmor = []
5c23128d 826endif
349cc4a5 827conf.set10('HAVE_APPARMOR', have)
5c23128d 828
5c23128d
ZJS
829smack_run_label = get_option('smack-run-label')
830if smack_run_label != ''
37efbbd8 831 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
5c23128d
ZJS
832endif
833
3ca0cb73
ZJS
834want_polkit = get_option('polkit')
835install_polkit = false
836install_polkit_pkla = false
31e57a35 837if want_polkit != 'false' and not fuzzer_build
37efbbd8 838 install_polkit = true
3ca0cb73 839
37efbbd8
ZJS
840 libpolkit = dependency('polkit-gobject-1',
841 required : false)
842 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
843 message('Old polkit detected, will install pkla files')
844 install_polkit_pkla = true
845 endif
3ca0cb73 846endif
349cc4a5 847conf.set10('ENABLE_POLKIT', install_polkit)
3ca0cb73 848
36f0387e 849want_acl = get_option('acl')
31e57a35 850if want_acl != 'false' and not fuzzer_build
36f0387e 851 libacl = cc.find_library('acl', required : want_acl == 'true')
349cc4a5 852 have = libacl.found()
36f0387e 853else
349cc4a5 854 have = false
36f0387e
ZJS
855 libacl = []
856endif
349cc4a5 857conf.set10('HAVE_ACL', have)
36f0387e 858
5c23128d 859want_audit = get_option('audit')
31e57a35 860if want_audit != 'false' and not fuzzer_build
37efbbd8 861 libaudit = dependency('audit', required : want_audit == 'true')
349cc4a5 862 have = libaudit.found()
5c23128d 863else
349cc4a5 864 have = false
37efbbd8 865 libaudit = []
5c23128d 866endif
349cc4a5 867conf.set10('HAVE_AUDIT', have)
5c23128d
ZJS
868
869want_blkid = get_option('blkid')
31e57a35 870if want_blkid != 'false' and not fuzzer_build
37efbbd8 871 libblkid = dependency('blkid', required : want_blkid == 'true')
349cc4a5 872 have = libblkid.found()
5c23128d 873else
349cc4a5 874 have = false
37efbbd8 875 libblkid = []
5c23128d 876endif
349cc4a5 877conf.set10('HAVE_BLKID', have)
5c23128d
ZJS
878
879want_kmod = get_option('kmod')
31e57a35 880if want_kmod != 'false' and not fuzzer_build
37efbbd8
ZJS
881 libkmod = dependency('libkmod',
882 version : '>= 15',
883 required : want_kmod == 'true')
349cc4a5 884 have = libkmod.found()
5c23128d 885else
349cc4a5 886 have = false
37efbbd8 887 libkmod = []
5c23128d 888endif
349cc4a5 889conf.set10('HAVE_KMOD', have)
5c23128d
ZJS
890
891want_pam = get_option('pam')
31e57a35 892if want_pam != 'false' and not fuzzer_build
37efbbd8
ZJS
893 libpam = cc.find_library('pam', required : want_pam == 'true')
894 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
349cc4a5 895 have = libpam.found() and libpam_misc.found()
5c23128d 896else
349cc4a5 897 have = false
37efbbd8
ZJS
898 libpam = []
899 libpam_misc = []
5c23128d 900endif
349cc4a5 901conf.set10('HAVE_PAM', have)
5c23128d
ZJS
902
903want_microhttpd = get_option('microhttpd')
31e57a35 904if want_microhttpd != 'false' and not fuzzer_build
37efbbd8
ZJS
905 libmicrohttpd = dependency('libmicrohttpd',
906 version : '>= 0.9.33',
907 required : want_microhttpd == 'true')
349cc4a5 908 have = libmicrohttpd.found()
5c23128d 909else
349cc4a5 910 have = false
37efbbd8 911 libmicrohttpd = []
5c23128d 912endif
349cc4a5 913conf.set10('HAVE_MICROHTTPD', have)
5c23128d
ZJS
914
915want_libcryptsetup = get_option('libcryptsetup')
31e57a35 916if want_libcryptsetup != 'false' and not fuzzer_build
37efbbd8
ZJS
917 libcryptsetup = dependency('libcryptsetup',
918 version : '>= 1.6.0',
919 required : want_libcryptsetup == 'true')
349cc4a5 920 have = libcryptsetup.found()
5c23128d 921else
349cc4a5 922 have = false
37efbbd8 923 libcryptsetup = []
5c23128d 924endif
349cc4a5 925conf.set10('HAVE_LIBCRYPTSETUP', have)
5c23128d
ZJS
926
927want_libcurl = get_option('libcurl')
31e57a35 928if want_libcurl != 'false' and not fuzzer_build
37efbbd8
ZJS
929 libcurl = dependency('libcurl',
930 version : '>= 7.32.0',
931 required : want_libcurl == 'true')
349cc4a5 932 have = libcurl.found()
5c23128d 933else
349cc4a5 934 have = false
37efbbd8 935 libcurl = []
5c23128d 936endif
349cc4a5 937conf.set10('HAVE_LIBCURL', have)
5c23128d
ZJS
938
939want_libidn = get_option('libidn')
87057e24
ZJS
940want_libidn2 = get_option('libidn2')
941if want_libidn == 'true' and want_libidn2 == 'true'
942 error('libidn and libidn2 cannot be requested simultaneously')
943endif
944
31e57a35 945if want_libidn != 'false' and want_libidn2 != 'true' and not fuzzer_build
7f7ab228
ZJS
946 libidn = dependency('libidn',
947 required : want_libidn == 'true')
349cc4a5 948 have = libidn.found()
87057e24 949else
349cc4a5 950 have = false
87057e24
ZJS
951 libidn = []
952endif
349cc4a5 953conf.set10('HAVE_LIBIDN', have)
31e57a35 954if not have and want_libidn2 != 'false' and not fuzzer_build
7f7ab228
ZJS
955 # libidn is used for both libidn and libidn2 objects
956 libidn = dependency('libidn2',
957 required : want_libidn2 == 'true')
349cc4a5
ZJS
958 have = libidn.found()
959else
960 have = false
5c23128d 961endif
349cc4a5 962conf.set10('HAVE_LIBIDN2', have)
5c23128d
ZJS
963
964want_libiptc = get_option('libiptc')
31e57a35 965if want_libiptc != 'false' and not fuzzer_build
37efbbd8
ZJS
966 libiptc = dependency('libiptc',
967 required : want_libiptc == 'true')
349cc4a5 968 have = libiptc.found()
5c23128d 969else
349cc4a5 970 have = false
37efbbd8 971 libiptc = []
5c23128d 972endif
349cc4a5 973conf.set10('HAVE_LIBIPTC', have)
5c23128d
ZJS
974
975want_qrencode = get_option('qrencode')
31e57a35 976if want_qrencode != 'false' and not fuzzer_build
37efbbd8
ZJS
977 libqrencode = dependency('libqrencode',
978 required : want_qrencode == 'true')
349cc4a5 979 have = libqrencode.found()
5c23128d 980else
349cc4a5 981 have = false
37efbbd8 982 libqrencode = []
5c23128d 983endif
349cc4a5 984conf.set10('HAVE_QRENCODE', have)
5c23128d 985
a44fb601 986want_gcrypt = get_option('gcrypt')
31e57a35 987if want_gcrypt != 'false' and not fuzzer_build
a44fb601
ZJS
988 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
989 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
349cc4a5 990 have = libgcrypt.found() and libgpg_error.found()
a44fb601 991else
349cc4a5
ZJS
992 have = false
993endif
994if not have
995 # link to neither of the libs if one is not found
a44fb601
ZJS
996 libgcrypt = []
997 libgpg_error = []
998endif
349cc4a5 999conf.set10('HAVE_GCRYPT', have)
a44fb601 1000
5c23128d 1001want_gnutls = get_option('gnutls')
31e57a35 1002if want_gnutls != 'false' and not fuzzer_build
37efbbd8
ZJS
1003 libgnutls = dependency('gnutls',
1004 version : '>= 3.1.4',
1005 required : want_gnutls == 'true')
349cc4a5 1006 have = libgnutls.found()
5c23128d 1007else
349cc4a5 1008 have = false
37efbbd8 1009 libgnutls = []
5c23128d 1010endif
349cc4a5 1011conf.set10('HAVE_GNUTLS', have)
5c23128d
ZJS
1012
1013want_elfutils = get_option('elfutils')
31e57a35 1014if want_elfutils != 'false' and not fuzzer_build
37efbbd8
ZJS
1015 libdw = dependency('libdw',
1016 required : want_elfutils == 'true')
349cc4a5 1017 have = libdw.found()
5c23128d 1018else
349cc4a5 1019 have = false
37efbbd8 1020 libdw = []
5c23128d 1021endif
349cc4a5 1022conf.set10('HAVE_ELFUTILS', have)
5c23128d
ZJS
1023
1024want_zlib = get_option('zlib')
31e57a35 1025if want_zlib != 'false' and not fuzzer_build
37efbbd8
ZJS
1026 libz = dependency('zlib',
1027 required : want_zlib == 'true')
349cc4a5 1028 have = libz.found()
5c23128d 1029else
349cc4a5 1030 have = false
37efbbd8 1031 libz = []
5c23128d 1032endif
349cc4a5 1033conf.set10('HAVE_ZLIB', have)
5c23128d
ZJS
1034
1035want_bzip2 = get_option('bzip2')
31e57a35 1036if want_bzip2 != 'false' and not fuzzer_build
37efbbd8
ZJS
1037 libbzip2 = cc.find_library('bz2',
1038 required : want_bzip2 == 'true')
349cc4a5 1039 have = libbzip2.found()
5c23128d 1040else
349cc4a5 1041 have = false
37efbbd8 1042 libbzip2 = []
5c23128d 1043endif
349cc4a5 1044conf.set10('HAVE_BZIP2', have)
5c23128d
ZJS
1045
1046want_xz = get_option('xz')
31e57a35 1047if want_xz != 'false' and not fuzzer_build
37efbbd8
ZJS
1048 libxz = dependency('liblzma',
1049 required : want_xz == 'true')
349cc4a5 1050 have = libxz.found()
5c23128d 1051else
349cc4a5 1052 have = false
37efbbd8 1053 libxz = []
5c23128d 1054endif
349cc4a5 1055conf.set10('HAVE_XZ', have)
5c23128d
ZJS
1056
1057want_lz4 = get_option('lz4')
31e57a35 1058if want_lz4 != 'false' and not fuzzer_build
37efbbd8
ZJS
1059 liblz4 = dependency('liblz4',
1060 required : want_lz4 == 'true')
349cc4a5 1061 have = liblz4.found()
5c23128d 1062else
349cc4a5 1063 have = false
37efbbd8 1064 liblz4 = []
5c23128d 1065endif
349cc4a5 1066conf.set10('HAVE_LZ4', have)
5c23128d 1067
a44fb601 1068want_xkbcommon = get_option('xkbcommon')
31e57a35 1069if want_xkbcommon != 'false' and not fuzzer_build
a44fb601
ZJS
1070 libxkbcommon = dependency('xkbcommon',
1071 version : '>= 0.3.0',
1072 required : want_xkbcommon == 'true')
349cc4a5 1073 have = libxkbcommon.found()
a44fb601 1074else
349cc4a5 1075 have = false
a44fb601
ZJS
1076 libxkbcommon = []
1077endif
349cc4a5 1078conf.set10('HAVE_XKBCOMMON', have)
a44fb601 1079
c4c978a0
ZJS
1080want_pcre2 = get_option('pcre2')
1081if want_pcre2 != 'false'
1082 libpcre2 = dependency('libpcre2-8',
1083 required : want_pcre2 == 'true')
1084 have = libpcre2.found()
1085else
1086 have = false
1087 libpcre2 = []
1088endif
1089conf.set10('HAVE_PCRE2', have)
1090
69e96427 1091want_glib = get_option('glib')
31e57a35 1092if want_glib != 'false' and not fuzzer_build
37efbbd8
ZJS
1093 libglib = dependency('glib-2.0',
1094 version : '>= 2.22.0',
1095 required : want_glib == 'true')
1096 libgobject = dependency('gobject-2.0',
1097 version : '>= 2.22.0',
1098 required : want_glib == 'true')
1099 libgio = dependency('gio-2.0',
1100 required : want_glib == 'true')
2c201c21 1101 have = libglib.found() and libgobject.found() and libgio.found()
69e96427 1102else
349cc4a5 1103 have = false
37efbbd8
ZJS
1104 libglib = []
1105 libgobject = []
1106 libgio = []
69e96427 1107endif
349cc4a5 1108conf.set10('HAVE_GLIB', have)
69e96427
ZJS
1109
1110want_dbus = get_option('dbus')
31e57a35 1111if want_dbus != 'false' and not fuzzer_build
37efbbd8
ZJS
1112 libdbus = dependency('dbus-1',
1113 version : '>= 1.3.2',
1114 required : want_dbus == 'true')
349cc4a5 1115 have = libdbus.found()
69e96427 1116else
349cc4a5 1117 have = false
37efbbd8 1118 libdbus = []
69e96427 1119endif
349cc4a5 1120conf.set10('HAVE_DBUS', have)
69e96427 1121
42303dcb 1122default_dnssec = get_option('default-dnssec')
31e57a35 1123if fuzzer_build
b4081f3e
JR
1124 default_dnssec = 'no'
1125endif
349cc4a5 1126if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
42303dcb
YW
1127 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1128 default_dnssec = 'no'
1129endif
1130conf.set('DEFAULT_DNSSEC_MODE',
1131 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1132substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1133
5c23128d 1134want_importd = get_option('importd')
4390be30 1135if want_importd != 'false'
349cc4a5
ZJS
1136 have = (conf.get('HAVE_LIBCURL') == 1 and
1137 conf.get('HAVE_ZLIB') == 1 and
1138 conf.get('HAVE_BZIP2') == 1 and
1139 conf.get('HAVE_XZ') == 1 and
1140 conf.get('HAVE_GCRYPT') == 1)
1141 if want_importd == 'true' and not have
37efbbd8
ZJS
1142 error('importd support was requested, but dependencies are not available')
1143 endif
349cc4a5
ZJS
1144else
1145 have = false
5c23128d 1146endif
349cc4a5 1147conf.set10('ENABLE_IMPORTD', have)
5c23128d
ZJS
1148
1149want_remote = get_option('remote')
4390be30 1150if want_remote != 'false'
349cc4a5
ZJS
1151 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1152 conf.get('HAVE_LIBCURL') == 1]
37efbbd8
ZJS
1153 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1154 # it's possible to build one without the other. Complain only if
1155 # support was explictly requested. The auxiliary files like sysusers
1156 # config should be installed when any of the programs are built.
1157 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1158 error('remote support was requested, but dependencies are not available')
1159 endif
349cc4a5
ZJS
1160 have = have_deps[0] or have_deps[1]
1161else
1162 have = false
5c23128d 1163endif
349cc4a5 1164conf.set10('ENABLE_REMOTE', have)
5c23128d 1165
a9149d87
ZJS
1166foreach term : ['utmp',
1167 'hibernate',
1168 'environment-d',
1169 'binfmt',
1170 'coredump',
1171 'resolve',
1172 'logind',
1173 'hostnamed',
1174 'localed',
1175 'machined',
1176 'networkd',
1177 'timedated',
1178 'timesyncd',
1179 'myhostname',
1180 'firstboot',
1181 'randomseed',
1182 'backlight',
1183 'vconsole',
1184 'quotacheck',
1185 'sysusers',
1186 'tmpfiles',
1187 'hwdb',
1188 'rfkill',
1189 'ldconfig',
1190 'efi',
1191 'tpm',
1192 'ima',
1193 'smack',
1194 'gshadow',
1195 'idn',
1196 'nss-systemd']
1197 have = get_option(term)
1198 name = 'ENABLE_' + term.underscorify().to_upper()
1199 conf.set10(name, have)
5c23128d
ZJS
1200endforeach
1201
348b4437 1202conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
6129ec85 1203
69e96427 1204want_tests = get_option('tests')
572baca1 1205install_tests = get_option('install-tests')
b68dfb9e 1206slow_tests = get_option('slow-tests')
69e96427 1207tests = []
7db7d5b7 1208fuzzers = []
69e96427 1209
b68dfb9e 1210conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
00d82c81 1211
5c23128d
ZJS
1212#####################################################################
1213
1214if get_option('efi')
37efbbd8 1215 efi_arch = host_machine.cpu_family()
b710072d 1216
6800fe7f 1217 if efi_arch == 'x86'
37efbbd8 1218 EFI_MACHINE_TYPE_NAME = 'ia32'
6800fe7f 1219 gnu_efi_arch = 'ia32'
37efbbd8
ZJS
1220 elif efi_arch == 'x86_64'
1221 EFI_MACHINE_TYPE_NAME = 'x64'
6800fe7f 1222 gnu_efi_arch = 'x86_64'
37efbbd8
ZJS
1223 elif efi_arch == 'arm'
1224 EFI_MACHINE_TYPE_NAME = 'arm'
6800fe7f 1225 gnu_efi_arch = 'arm'
37efbbd8
ZJS
1226 elif efi_arch == 'aarch64'
1227 EFI_MACHINE_TYPE_NAME = 'aa64'
6800fe7f 1228 gnu_efi_arch = 'aarch64'
37efbbd8
ZJS
1229 else
1230 EFI_MACHINE_TYPE_NAME = ''
6800fe7f 1231 gnu_efi_arch = ''
37efbbd8 1232 endif
5c23128d 1233
349cc4a5 1234 have = true
37efbbd8 1235 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
80c6fce8
ZJS
1236
1237 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex').to_int())
349cc4a5
ZJS
1238else
1239 have = false
5c23128d 1240endif
349cc4a5 1241conf.set10('ENABLE_EFI', have)
5c23128d
ZJS
1242
1243#####################################################################
1244
1245config_h = configure_file(
37efbbd8
ZJS
1246 output : 'config.h',
1247 configuration : conf)
5c23128d 1248
348b4437
YW
1249meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1250
5c23128d
ZJS
1251includes = include_directories('src/basic',
1252 'src/shared',
1253 'src/systemd',
1254 'src/journal',
1255 'src/resolve',
1256 'src/timesync',
5c3376ef 1257 'src/time-wait-sync',
5c23128d
ZJS
1258 'src/login',
1259 'src/udev',
1260 'src/libudev',
1261 'src/core',
1262 'src/libsystemd/sd-bus',
1263 'src/libsystemd/sd-device',
1264 'src/libsystemd/sd-hwdb',
1265 'src/libsystemd/sd-id128',
1266 'src/libsystemd/sd-netlink',
1267 'src/libsystemd/sd-network',
1268 'src/libsystemd-network',
2d4ceca8 1269 '.')
5c23128d
ZJS
1270
1271add_project_arguments('-include', 'config.h', language : 'c')
1272
5c23128d
ZJS
1273subdir('po')
1274subdir('catalog')
1275subdir('src/systemd')
1276subdir('src/basic')
1277subdir('src/libsystemd')
1278subdir('src/libsystemd-network')
5c23128d 1279subdir('src/journal')
5c23128d 1280subdir('src/login')
5c23128d
ZJS
1281
1282libjournal_core = static_library(
37efbbd8
ZJS
1283 'journal-core',
1284 libjournal_core_sources,
1285 journald_gperf_c,
1286 include_directories : includes,
1287 install : false)
5c23128d 1288
37ab1a25 1289libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
5c23128d 1290libsystemd = shared_library(
37efbbd8 1291 'systemd',
7f1ea2cc 1292 'src/systemd/sd-id128.h', # pick a header file at random to work around old meson bug
56d50ab1 1293 version : libsystemd_version,
37efbbd8
ZJS
1294 include_directories : includes,
1295 link_args : ['-shared',
1296 '-Wl,--version-script=' + libsystemd_sym_path],
34e221a5
ZJS
1297 link_with : [libbasic,
1298 libbasic_gcrypt],
5e3cec87
ZJS
1299 link_whole : [libsystemd_static,
1300 libjournal_client],
37efbbd8
ZJS
1301 dependencies : [threads,
1302 librt,
1303 libxz,
1304 liblz4],
1305 link_depends : libsystemd_sym,
1306 install : true,
1307 install_dir : rootlibdir)
5c23128d 1308
70848ecf
DC
1309static_libsystemd = get_option('static-libsystemd')
1310static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1311
1312install_libsystemd_static = static_library(
1313 'systemd',
1314 libsystemd_sources,
1315 journal_client_sources,
975464e0
ZJS
1316 basic_sources,
1317 basic_gcrypt_sources,
70848ecf 1318 include_directories : includes,
70848ecf
DC
1319 build_by_default : static_libsystemd != 'false',
1320 install : static_libsystemd != 'false',
1321 install_dir : rootlibdir,
1322 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1323 dependencies : [threads,
1324 librt,
1325 libxz,
1326 liblz4,
975464e0
ZJS
1327 libcap,
1328 libblkid,
1329 libmount,
1330 libselinux,
70848ecf
DC
1331 libgcrypt],
1332 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1333
5c23128d
ZJS
1334############################################################
1335
83b6af36
ZJS
1336# binaries that have --help and are intended for use by humans,
1337# usually, but not always, installed in /bin.
1338public_programs = []
1339
1340subdir('src/libudev')
1341subdir('src/shared')
1342subdir('src/core')
1343subdir('src/udev')
1344subdir('src/network')
1345
1346subdir('src/analyze')
1347subdir('src/journal-remote')
1348subdir('src/coredump')
1349subdir('src/hostname')
1350subdir('src/import')
1351subdir('src/kernel-install')
1352subdir('src/locale')
1353subdir('src/machine')
1354subdir('src/nspawn')
1355subdir('src/resolve')
1356subdir('src/timedate')
1357subdir('src/timesync')
1358subdir('src/vconsole')
83b6af36
ZJS
1359subdir('src/boot/efi')
1360
1361subdir('src/test')
7db7d5b7 1362subdir('src/fuzz')
6b97bf22 1363subdir('rules')
83b6af36
ZJS
1364subdir('test')
1365
1366############################################################
1367
1368# only static linking apart from libdl, to make sure that the
1369# module is linked to all libraries that it uses.
1370test_dlopen = executable(
37efbbd8
ZJS
1371 'test-dlopen',
1372 test_dlopen_c,
1373 include_directories : includes,
1374 link_with : [libbasic],
1375 dependencies : [libdl])
83b6af36 1376
08cf5b8d 1377foreach tuple : [['myhostname', 'ENABLE_MYHOSTNAME'],
e7e11bbf 1378 ['systemd', 'ENABLE_NSS_SYSTEMD'],
5486a31d 1379 ['mymachines', 'ENABLE_MACHINED'],
1ec57f33 1380 ['resolve', 'ENABLE_RESOLVE']]
5c23128d 1381
349cc4a5 1382 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1383 if condition
1384 module = tuple[0]
37efbbd8
ZJS
1385
1386 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1387 version_script_arg = join_paths(meson.current_source_dir(), sym)
1388
1389 nss = shared_library(
1390 'nss_' + module,
1391 'src/nss-@0@/nss-@0@.c'.format(module),
1392 version : '2',
1393 include_directories : includes,
b4b36f44
LP
1394 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1395 link_args : ['-Wl,-z,nodelete',
1396 '-shared',
37efbbd8
ZJS
1397 '-Wl,--version-script=' + version_script_arg,
1398 '-Wl,--undefined'],
37e4d7a8 1399 link_with : [libsystemd_static,
37efbbd8
ZJS
1400 libbasic],
1401 dependencies : [threads,
5486a31d 1402 librt],
37efbbd8
ZJS
1403 link_depends : sym,
1404 install : true,
1405 install_dir : rootlibdir)
1406
1407 # We cannot use shared_module because it does not support version suffix.
1408 # Unfortunately shared_library insists on creating the symlink…
1409 meson.add_install_script('sh', '-c',
1410 'rm $DESTDIR@0@/libnss_@1@.so'
1411 .format(rootlibdir, module))
1412
1413 test('dlopen-nss_' + module,
1414 test_dlopen,
1415 args : [nss.full_path()]) # path to dlopen must include a slash
1416 endif
5c23128d
ZJS
1417endforeach
1418
1419############################################################
1420
5c23128d
ZJS
1421executable('systemd',
1422 systemd_sources,
1423 include_directories : includes,
1424 link_with : [libcore,
34ce0a52 1425 libshared],
5c23128d
ZJS
1426 dependencies : [threads,
1427 librt,
1428 libseccomp,
1429 libselinux,
f4ee10a2
ZJS
1430 libmount,
1431 libblkid],
421f0012 1432 install_rpath : rootlibexecdir,
5c23128d
ZJS
1433 install : true,
1434 install_dir : rootlibexecdir)
1435
ba7f4ae6
ZJS
1436meson.add_install_script(meson_make_symlink,
1437 join_paths(rootlibexecdir, 'systemd'),
1438 join_paths(rootsbindir, 'init'))
1439
005a29f2
ZJS
1440exe = executable('systemd-analyze',
1441 systemd_analyze_sources,
1442 include_directories : includes,
1443 link_with : [libcore,
005a29f2
ZJS
1444 libshared],
1445 dependencies : [threads,
1446 librt,
1447 libseccomp,
1448 libselinux,
1449 libmount,
1450 libblkid],
1451 install_rpath : rootlibexecdir,
1452 install : true)
1453public_programs += [exe]
5c23128d
ZJS
1454
1455executable('systemd-journald',
1456 systemd_journald_sources,
1457 include_directories : includes,
aac26058 1458 link_with : [libjournal_core,
34ce0a52 1459 libshared],
5c23128d
ZJS
1460 dependencies : [threads,
1461 libxz,
aac26058
ZJS
1462 liblz4,
1463 libselinux],
421f0012 1464 install_rpath : rootlibexecdir,
5c23128d
ZJS
1465 install : true,
1466 install_dir : rootlibexecdir)
1467
005a29f2
ZJS
1468exe = executable('systemd-cat',
1469 systemd_cat_sources,
1470 include_directories : includes,
1471 link_with : [libjournal_core,
34ce0a52 1472 libshared],
005a29f2
ZJS
1473 dependencies : [threads],
1474 install_rpath : rootlibexecdir,
1475 install : true)
1476public_programs += [exe]
1477
1478exe = executable('journalctl',
1479 journalctl_sources,
1480 include_directories : includes,
34ce0a52 1481 link_with : [libshared],
005a29f2
ZJS
1482 dependencies : [threads,
1483 libqrencode,
1484 libxz,
6becf48c
ZJS
1485 liblz4,
1486 libpcre2],
005a29f2
ZJS
1487 install_rpath : rootlibexecdir,
1488 install : true,
1489 install_dir : rootbindir)
1490public_programs += [exe]
5c23128d
ZJS
1491
1492executable('systemd-getty-generator',
1493 'src/getty-generator/getty-generator.c',
5c23128d 1494 include_directories : includes,
b2fc5836
ZJS
1495 link_with : [libshared],
1496 install_rpath : rootlibexecdir,
1497 install : true,
1498 install_dir : systemgeneratordir)
5c23128d
ZJS
1499
1500executable('systemd-debug-generator',
1501 'src/debug-generator/debug-generator.c',
5c23128d 1502 include_directories : includes,
b2fc5836
ZJS
1503 link_with : [libshared],
1504 install_rpath : rootlibexecdir,
1505 install : true,
1506 install_dir : systemgeneratordir)
5c23128d
ZJS
1507
1508executable('systemd-fstab-generator',
1509 'src/fstab-generator/fstab-generator.c',
1510 'src/core/mount-setup.c',
5c23128d 1511 include_directories : includes,
b2fc5836
ZJS
1512 link_with : [libshared],
1513 install_rpath : rootlibexecdir,
1514 install : true,
1515 install_dir : systemgeneratordir)
5c23128d 1516
349cc4a5 1517if conf.get('ENABLE_ENVIRONMENT_D') == 1
37efbbd8
ZJS
1518 executable('30-systemd-environment-d-generator',
1519 'src/environment-d-generator/environment-d-generator.c',
1520 include_directories : includes,
1521 link_with : [libshared],
1522 install_rpath : rootlibexecdir,
1523 install : true,
1524 install_dir : userenvgeneratordir)
7b76fce1 1525
37efbbd8
ZJS
1526 meson.add_install_script(meson_make_symlink,
1527 join_paths(sysconfdir, 'environment'),
1528 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1529endif
1530
349cc4a5 1531if conf.get('ENABLE_HIBERNATE') == 1
37efbbd8
ZJS
1532 executable('systemd-hibernate-resume-generator',
1533 'src/hibernate-resume/hibernate-resume-generator.c',
1534 include_directories : includes,
1535 link_with : [libshared],
1536 install_rpath : rootlibexecdir,
1537 install : true,
1538 install_dir : systemgeneratordir)
5c23128d 1539
37efbbd8
ZJS
1540 executable('systemd-hibernate-resume',
1541 'src/hibernate-resume/hibernate-resume.c',
005a29f2
ZJS
1542 include_directories : includes,
1543 link_with : [libshared],
1544 install_rpath : rootlibexecdir,
1545 install : true,
1546 install_dir : rootlibexecdir)
37efbbd8
ZJS
1547endif
1548
349cc4a5 1549if conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1550 executable('systemd-gpt-auto-generator',
1551 'src/gpt-auto-generator/gpt-auto-generator.c',
1552 'src/basic/blkid-util.h',
1553 include_directories : includes,
34ce0a52 1554 link_with : [libshared],
37efbbd8
ZJS
1555 dependencies : libblkid,
1556 install_rpath : rootlibexecdir,
1557 install : true,
1558 install_dir : systemgeneratordir)
1559
1560 exe = executable('systemd-dissect',
1561 'src/dissect/dissect.c',
1562 include_directories : includes,
1563 link_with : [libshared],
1564 install_rpath : rootlibexecdir,
1565 install : true,
1566 install_dir : rootlibexecdir)
1567 public_programs += [exe]
5c23128d
ZJS
1568endif
1569
1ec57f33 1570if conf.get('ENABLE_RESOLVE') == 1
37efbbd8
ZJS
1571 executable('systemd-resolved',
1572 systemd_resolved_sources,
005a29f2 1573 include_directories : includes,
34e221a5 1574 link_with : [libshared,
568a4ff8
ZJS
1575 libbasic_gcrypt,
1576 libsystemd_resolve_core],
005a29f2 1577 dependencies : [threads,
76c87410 1578 libgpg_error,
005a29f2
ZJS
1579 libm,
1580 libidn],
1581 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1582 install : true,
1583 install_dir : rootlibexecdir)
1584
c2e84cab
YW
1585 exe = executable('resolvectl',
1586 resolvectl_sources,
37efbbd8 1587 include_directories : includes,
34e221a5 1588 link_with : [libshared,
568a4ff8
ZJS
1589 libbasic_gcrypt,
1590 libsystemd_resolve_core],
37efbbd8 1591 dependencies : [threads,
76c87410 1592 libgpg_error,
37efbbd8
ZJS
1593 libm,
1594 libidn],
1595 install_rpath : rootlibexecdir,
1596 install : true)
1597 public_programs += [exe]
088c1363
LP
1598
1599 meson.add_install_script(meson_make_symlink,
c2e84cab 1600 join_paths(bindir, 'resolvectl'),
088c1363 1601 join_paths(rootsbindir, 'resolvconf'))
c2e84cab
YW
1602
1603 meson.add_install_script(meson_make_symlink,
1604 join_paths(bindir, 'resolvectl'),
1605 join_paths(bindir, 'systemd-resolve'))
5c23128d
ZJS
1606endif
1607
349cc4a5 1608if conf.get('ENABLE_LOGIND') == 1
37efbbd8
ZJS
1609 executable('systemd-logind',
1610 systemd_logind_sources,
005a29f2 1611 include_directories : includes,
37efbbd8 1612 link_with : [liblogind_core,
34ce0a52 1613 libshared],
005a29f2 1614 dependencies : [threads,
37efbbd8 1615 libacl],
005a29f2
ZJS
1616 install_rpath : rootlibexecdir,
1617 install : true,
37efbbd8
ZJS
1618 install_dir : rootlibexecdir)
1619
1620 exe = executable('loginctl',
1621 loginctl_sources,
1622 include_directories : includes,
34ce0a52 1623 link_with : [libshared],
37efbbd8
ZJS
1624 dependencies : [threads,
1625 liblz4,
1626 libxz],
1627 install_rpath : rootlibexecdir,
1628 install : true,
1629 install_dir : rootbindir)
1630 public_programs += [exe]
1631
1632 exe = executable('systemd-inhibit',
1633 'src/login/inhibit.c',
1634 include_directories : includes,
1635 link_with : [libshared],
1636 install_rpath : rootlibexecdir,
1637 install : true,
1638 install_dir : rootbindir)
1639 public_programs += [exe]
1640
349cc4a5 1641 if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1642 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1643 pam_systemd = shared_library(
1644 'pam_systemd',
1645 pam_systemd_c,
1646 name_prefix : '',
1647 include_directories : includes,
1648 link_args : ['-shared',
1649 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1650 link_with : [libsystemd_static,
37efbbd8
ZJS
1651 libshared_static],
1652 dependencies : [threads,
1653 libpam,
1654 libpam_misc],
1655 link_depends : pam_systemd_sym,
1656 install : true,
1657 install_dir : pamlibdir)
1658
1659 test('dlopen-pam_systemd',
1660 test_dlopen,
1661 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1662 endif
1663endif
005a29f2 1664
a9f0f5e5
ZJS
1665executable('systemd-user-runtime-dir',
1666 user_runtime_dir_sources,
1667 include_directories : includes,
1668 link_with : [libshared, liblogind_core],
1669 install_rpath : rootlibexecdir,
1670 install : true,
1671 install_dir : rootlibexecdir)
1672
349cc4a5 1673if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1674 executable('systemd-user-sessions',
1675 'src/user-sessions/user-sessions.c',
005a29f2 1676 include_directories : includes,
aac26058 1677 link_with : [libshared],
005a29f2
ZJS
1678 install_rpath : rootlibexecdir,
1679 install : true,
37efbbd8 1680 install_dir : rootlibexecdir)
5c23128d
ZJS
1681endif
1682
349cc4a5 1683if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1684 exe = executable('bootctl',
1685 'src/boot/bootctl.c',
1686 include_directories : includes,
1687 link_with : [libshared],
1688 dependencies : [libblkid],
1689 install_rpath : rootlibexecdir,
1690 install : true)
1691 public_programs += [exe]
005a29f2
ZJS
1692endif
1693
1694exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1695 include_directories : includes,
1696 link_with : [libshared],
1697 dependencies : [threads],
1698 install_rpath : rootlibexecdir,
1699 install : true)
1700public_programs += [exe]
1701
1702exe = executable('systemctl', 'src/systemctl/systemctl.c',
1703 include_directories : includes,
aac26058 1704 link_with : [libshared],
005a29f2
ZJS
1705 dependencies : [threads,
1706 libcap,
1707 libselinux,
1708 libxz,
1709 liblz4],
1710 install_rpath : rootlibexecdir,
1711 install : true,
1712 install_dir : rootbindir)
1713public_programs += [exe]
5c23128d 1714
ba7f4ae6
ZJS
1715foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1716 meson.add_install_script(meson_make_symlink,
1717 join_paths(rootbindir, 'systemctl'),
1718 join_paths(rootsbindir, alias))
1719endforeach
1720
349cc4a5 1721if conf.get('ENABLE_BACKLIGHT') == 1
37efbbd8
ZJS
1722 executable('systemd-backlight',
1723 'src/backlight/backlight.c',
1724 include_directories : includes,
34ce0a52 1725 link_with : [libshared],
37efbbd8
ZJS
1726 install_rpath : rootlibexecdir,
1727 install : true,
1728 install_dir : rootlibexecdir)
5c23128d
ZJS
1729endif
1730
349cc4a5 1731if conf.get('ENABLE_RFKILL') == 1
37efbbd8
ZJS
1732 executable('systemd-rfkill',
1733 'src/rfkill/rfkill.c',
1734 include_directories : includes,
34ce0a52 1735 link_with : [libshared],
37efbbd8
ZJS
1736 install_rpath : rootlibexecdir,
1737 install : true,
1738 install_dir : rootlibexecdir)
5c23128d
ZJS
1739endif
1740
1741executable('systemd-system-update-generator',
1742 'src/system-update-generator/system-update-generator.c',
1743 include_directories : includes,
1744 link_with : [libshared],
b2fc5836 1745 install_rpath : rootlibexecdir,
5c23128d
ZJS
1746 install : true,
1747 install_dir : systemgeneratordir)
1748
349cc4a5 1749if conf.get('HAVE_LIBCRYPTSETUP') == 1
37efbbd8
ZJS
1750 executable('systemd-cryptsetup',
1751 'src/cryptsetup/cryptsetup.c',
1752 include_directories : includes,
1753 link_with : [libshared],
1754 dependencies : [libcryptsetup],
1755 install_rpath : rootlibexecdir,
1756 install : true,
1757 install_dir : rootlibexecdir)
1758
1759 executable('systemd-cryptsetup-generator',
1760 'src/cryptsetup/cryptsetup-generator.c',
1761 include_directories : includes,
1762 link_with : [libshared],
1763 dependencies : [libcryptsetup],
1764 install_rpath : rootlibexecdir,
1765 install : true,
1766 install_dir : systemgeneratordir)
1767
1768 executable('systemd-veritysetup',
1769 'src/veritysetup/veritysetup.c',
1770 include_directories : includes,
1771 link_with : [libshared],
1772 dependencies : [libcryptsetup],
1773 install_rpath : rootlibexecdir,
1774 install : true,
1775 install_dir : rootlibexecdir)
1776
1777 executable('systemd-veritysetup-generator',
1778 'src/veritysetup/veritysetup-generator.c',
1779 include_directories : includes,
1780 link_with : [libshared],
1781 dependencies : [libcryptsetup],
1782 install_rpath : rootlibexecdir,
1783 install : true,
1784 install_dir : systemgeneratordir)
5c23128d
ZJS
1785endif
1786
349cc4a5 1787if conf.get('HAVE_SYSV_COMPAT') == 1
37efbbd8
ZJS
1788 executable('systemd-sysv-generator',
1789 'src/sysv-generator/sysv-generator.c',
1790 include_directories : includes,
1791 link_with : [libshared],
1792 install_rpath : rootlibexecdir,
1793 install : true,
1794 install_dir : systemgeneratordir)
1795
1796 executable('systemd-rc-local-generator',
1797 'src/rc-local-generator/rc-local-generator.c',
1798 include_directories : includes,
1799 link_with : [libshared],
1800 install_rpath : rootlibexecdir,
1801 install : true,
1802 install_dir : systemgeneratordir)
5c23128d
ZJS
1803endif
1804
349cc4a5 1805if conf.get('ENABLE_HOSTNAMED') == 1
37efbbd8
ZJS
1806 executable('systemd-hostnamed',
1807 'src/hostname/hostnamed.c',
005a29f2 1808 include_directories : includes,
aac26058 1809 link_with : [libshared],
005a29f2 1810 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1811 install : true,
1812 install_dir : rootlibexecdir)
1813
1814 exe = executable('hostnamectl',
1815 'src/hostname/hostnamectl.c',
1816 include_directories : includes,
1817 link_with : [libshared],
1818 install_rpath : rootlibexecdir,
1819 install : true)
1820 public_programs += [exe]
5c23128d
ZJS
1821endif
1822
349cc4a5
ZJS
1823if conf.get('ENABLE_LOCALED') == 1
1824 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
1825 # logind will load libxkbcommon.so dynamically on its own
1826 deps = [libdl]
1827 else
1828 deps = []
1829 endif
1830
1831 executable('systemd-localed',
1832 systemd_localed_sources,
005a29f2 1833 include_directories : includes,
aac26058 1834 link_with : [libshared],
37efbbd8 1835 dependencies : deps,
005a29f2 1836 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1837 install : true,
1838 install_dir : rootlibexecdir)
1839
1840 exe = executable('localectl',
1841 localectl_sources,
1842 include_directories : includes,
1843 link_with : [libshared],
1844 install_rpath : rootlibexecdir,
1845 install : true)
1846 public_programs += [exe]
5c23128d
ZJS
1847endif
1848
349cc4a5 1849if conf.get('ENABLE_TIMEDATED') == 1
37efbbd8
ZJS
1850 executable('systemd-timedated',
1851 'src/timedate/timedated.c',
005a29f2 1852 include_directories : includes,
aac26058 1853 link_with : [libshared],
37efbbd8
ZJS
1854 install_rpath : rootlibexecdir,
1855 install : true,
1856 install_dir : rootlibexecdir)
6129ec85 1857endif
5c23128d 1858
6129ec85 1859if conf.get('ENABLE_TIMEDATECTL') == 1
37efbbd8
ZJS
1860 exe = executable('timedatectl',
1861 'src/timedate/timedatectl.c',
1862 include_directories : includes,
1863 install_rpath : rootlibexecdir,
1864 link_with : [libshared],
6129ec85 1865 dependencies : [libm],
37efbbd8
ZJS
1866 install : true)
1867 public_programs += [exe]
5c23128d
ZJS
1868endif
1869
349cc4a5 1870if conf.get('ENABLE_TIMESYNCD') == 1
37efbbd8
ZJS
1871 executable('systemd-timesyncd',
1872 systemd_timesyncd_sources,
005a29f2 1873 include_directories : includes,
aac26058 1874 link_with : [libshared],
005a29f2 1875 dependencies : [threads,
37efbbd8 1876 libm],
005a29f2
ZJS
1877 install_rpath : rootlibexecdir,
1878 install : true,
37efbbd8 1879 install_dir : rootlibexecdir)
5c3376ef
PB
1880
1881 executable('systemd-time-wait-sync',
1882 'src/time-wait-sync/time-wait-sync.c',
1883 include_directories : includes,
1884 link_with : [libshared],
1885 install_rpath : rootlibexecdir,
1886 install : true,
1887 install_dir : rootlibexecdir)
5c23128d
ZJS
1888endif
1889
349cc4a5 1890if conf.get('ENABLE_MACHINED') == 1
37efbbd8
ZJS
1891 executable('systemd-machined',
1892 systemd_machined_sources,
1893 include_directories : includes,
1894 link_with : [libmachine_core,
1895 libshared],
1896 install_rpath : rootlibexecdir,
1897 install : true,
1898 install_dir : rootlibexecdir)
1899
1900 exe = executable('machinectl',
1901 'src/machine/machinectl.c',
1902 include_directories : includes,
1903 link_with : [libshared],
1904 dependencies : [threads,
1905 libxz,
1906 liblz4],
1907 install_rpath : rootlibexecdir,
1908 install : true,
1909 install_dir : rootbindir)
1910 public_programs += [exe]
5c23128d
ZJS
1911endif
1912
349cc4a5 1913if conf.get('ENABLE_IMPORTD') == 1
37efbbd8
ZJS
1914 executable('systemd-importd',
1915 systemd_importd_sources,
005a29f2 1916 include_directories : includes,
aac26058 1917 link_with : [libshared],
37efbbd8 1918 dependencies : [threads],
005a29f2
ZJS
1919 install_rpath : rootlibexecdir,
1920 install : true,
1921 install_dir : rootlibexecdir)
37efbbd8
ZJS
1922
1923 systemd_pull = executable('systemd-pull',
1924 systemd_pull_sources,
1925 include_directories : includes,
1926 link_with : [libshared],
1927 dependencies : [libcurl,
1928 libz,
1929 libbzip2,
1930 libxz,
1931 libgcrypt],
1932 install_rpath : rootlibexecdir,
1933 install : true,
1934 install_dir : rootlibexecdir)
1935
1936 systemd_import = executable('systemd-import',
1937 systemd_import_sources,
1938 include_directories : includes,
1939 link_with : [libshared],
1940 dependencies : [libcurl,
1941 libz,
1942 libbzip2,
1943 libxz],
1944 install_rpath : rootlibexecdir,
1945 install : true,
1946 install_dir : rootlibexecdir)
1947
1948 systemd_export = executable('systemd-export',
1949 systemd_export_sources,
1950 include_directories : includes,
1951 link_with : [libshared],
1952 dependencies : [libcurl,
1953 libz,
1954 libbzip2,
1955 libxz],
1956 install_rpath : rootlibexecdir,
1957 install : true,
1958 install_dir : rootlibexecdir)
1959 public_programs += [systemd_pull, systemd_import, systemd_export]
1960endif
1961
349cc4a5 1962if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
37efbbd8
ZJS
1963 exe = executable('systemd-journal-upload',
1964 systemd_journal_upload_sources,
1965 include_directories : includes,
1966 link_with : [libshared],
1967 dependencies : [threads,
1968 libcurl,
1969 libgnutls,
1970 libxz,
1971 liblz4],
1972 install_rpath : rootlibexecdir,
1973 install : true,
1974 install_dir : rootlibexecdir)
1975 public_programs += [exe]
5c23128d
ZJS
1976endif
1977
349cc4a5 1978if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
37efbbd8
ZJS
1979 s_j_remote = executable('systemd-journal-remote',
1980 systemd_journal_remote_sources,
1981 include_directories : includes,
1982 link_with : [libshared],
1983 dependencies : [threads,
1984 libmicrohttpd,
1985 libgnutls,
1986 libxz,
1987 liblz4],
1988 install_rpath : rootlibexecdir,
1989 install : true,
1990 install_dir : rootlibexecdir)
1991
1992 s_j_gatewayd = executable('systemd-journal-gatewayd',
1993 systemd_journal_gatewayd_sources,
1994 include_directories : includes,
1995 link_with : [libshared],
1996 dependencies : [threads,
1997 libmicrohttpd,
1998 libgnutls,
1999 libxz,
2000 liblz4],
2001 install_rpath : rootlibexecdir,
2002 install : true,
2003 install_dir : rootlibexecdir)
2004 public_programs += [s_j_remote, s_j_gatewayd]
5c23128d
ZJS
2005endif
2006
349cc4a5 2007if conf.get('ENABLE_COREDUMP') == 1
37efbbd8
ZJS
2008 executable('systemd-coredump',
2009 systemd_coredump_sources,
005a29f2 2010 include_directories : includes,
aac26058 2011 link_with : [libshared],
005a29f2 2012 dependencies : [threads,
37efbbd8
ZJS
2013 libacl,
2014 libdw,
005a29f2
ZJS
2015 libxz,
2016 liblz4],
2017 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2018 install : true,
2019 install_dir : rootlibexecdir)
2020
2021 exe = executable('coredumpctl',
2022 coredumpctl_sources,
2023 include_directories : includes,
2024 link_with : [libshared],
2025 dependencies : [threads,
2026 libxz,
2027 liblz4],
2028 install_rpath : rootlibexecdir,
2029 install : true)
2030 public_programs += [exe]
5c23128d
ZJS
2031endif
2032
349cc4a5 2033if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2034 exe = executable('systemd-binfmt',
2035 'src/binfmt/binfmt.c',
2036 include_directories : includes,
2037 link_with : [libshared],
2038 install_rpath : rootlibexecdir,
2039 install : true,
2040 install_dir : rootlibexecdir)
2041 public_programs += [exe]
2042
2043 meson.add_install_script('sh', '-c',
2044 mkdir_p.format(binfmtdir))
2045 meson.add_install_script('sh', '-c',
2046 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2047endif
2048
349cc4a5 2049if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2050 executable('systemd-vconsole-setup',
2051 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2052 include_directories : includes,
2053 link_with : [libshared],
2054 install_rpath : rootlibexecdir,
2055 install : true,
2056 install_dir : rootlibexecdir)
5c23128d
ZJS
2057endif
2058
349cc4a5 2059if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2060 executable('systemd-random-seed',
2061 'src/random-seed/random-seed.c',
2062 include_directories : includes,
2063 link_with : [libshared],
2064 install_rpath : rootlibexecdir,
2065 install : true,
2066 install_dir : rootlibexecdir)
5c23128d
ZJS
2067endif
2068
349cc4a5 2069if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2070 executable('systemd-firstboot',
2071 'src/firstboot/firstboot.c',
2072 include_directories : includes,
2073 link_with : [libshared],
2074 dependencies : [libcrypt],
2075 install_rpath : rootlibexecdir,
2076 install : true,
2077 install_dir : rootbindir)
5c23128d
ZJS
2078endif
2079
2080executable('systemd-remount-fs',
2081 'src/remount-fs/remount-fs.c',
2082 'src/core/mount-setup.c',
2083 'src/core/mount-setup.h',
2084 include_directories : includes,
2085 link_with : [libshared],
b2fc5836 2086 install_rpath : rootlibexecdir,
5c23128d
ZJS
2087 install : true,
2088 install_dir : rootlibexecdir)
2089
2090executable('systemd-machine-id-setup',
2091 'src/machine-id-setup/machine-id-setup-main.c',
2092 'src/core/machine-id-setup.c',
2093 'src/core/machine-id-setup.h',
2094 include_directories : includes,
aac26058 2095 link_with : [libshared],
b2fc5836 2096 install_rpath : rootlibexecdir,
5c23128d
ZJS
2097 install : true,
2098 install_dir : rootbindir)
2099
2100executable('systemd-fsck',
2101 'src/fsck/fsck.c',
2102 include_directories : includes,
aac26058 2103 link_with : [libshared],
421f0012 2104 install_rpath : rootlibexecdir,
5c23128d
ZJS
2105 install : true,
2106 install_dir : rootlibexecdir)
2107
80750adb
ZJS
2108executable('systemd-growfs',
2109 'src/partition/growfs.c',
2110 include_directories : includes,
2111 link_with : [libshared],
c34b75a1 2112 dependencies : [libcryptsetup],
80750adb
ZJS
2113 install_rpath : rootlibexecdir,
2114 install : true,
2115 install_dir : rootlibexecdir)
2116
b7f28ac5
ZJS
2117executable('systemd-makefs',
2118 'src/partition/makefs.c',
2119 include_directories : includes,
2120 link_with : [libshared],
2121 install_rpath : rootlibexecdir,
2122 install : true,
2123 install_dir : rootlibexecdir)
2124
5c23128d
ZJS
2125executable('systemd-sleep',
2126 'src/sleep/sleep.c',
2127 include_directories : includes,
2128 link_with : [libshared],
421f0012 2129 install_rpath : rootlibexecdir,
5c23128d
ZJS
2130 install : true,
2131 install_dir : rootlibexecdir)
2132
005a29f2
ZJS
2133exe = executable('systemd-sysctl',
2134 'src/sysctl/sysctl.c',
2135 include_directories : includes,
2136 link_with : [libshared],
2137 install_rpath : rootlibexecdir,
2138 install : true,
2139 install_dir : rootlibexecdir)
2140public_programs += [exe]
5c23128d
ZJS
2141
2142executable('systemd-ac-power',
2143 'src/ac-power/ac-power.c',
2144 include_directories : includes,
2145 link_with : [libshared],
421f0012 2146 install_rpath : rootlibexecdir,
5c23128d
ZJS
2147 install : true,
2148 install_dir : rootlibexecdir)
2149
005a29f2
ZJS
2150exe = executable('systemd-detect-virt',
2151 'src/detect-virt/detect-virt.c',
2152 include_directories : includes,
2153 link_with : [libshared],
2154 install_rpath : rootlibexecdir,
2155 install : true)
2156public_programs += [exe]
2157
2158exe = executable('systemd-delta',
2159 'src/delta/delta.c',
2160 include_directories : includes,
2161 link_with : [libshared],
2162 install_rpath : rootlibexecdir,
2163 install : true)
2164public_programs += [exe]
2165
2166exe = executable('systemd-escape',
2167 'src/escape/escape.c',
2168 include_directories : includes,
2169 link_with : [libshared],
2170 install_rpath : rootlibexecdir,
2171 install : true,
2172 install_dir : rootbindir)
2173public_programs += [exe]
2174
2175exe = executable('systemd-notify',
2176 'src/notify/notify.c',
2177 include_directories : includes,
2178 link_with : [libshared],
2179 install_rpath : rootlibexecdir,
2180 install : true,
2181 install_dir : rootbindir)
2182public_programs += [exe]
5c23128d
ZJS
2183
2184executable('systemd-volatile-root',
2185 'src/volatile-root/volatile-root.c',
2186 include_directories : includes,
2187 link_with : [libshared],
421f0012 2188 install_rpath : rootlibexecdir,
5c23128d
ZJS
2189 install : true,
2190 install_dir : rootlibexecdir)
2191
2192executable('systemd-cgroups-agent',
2193 'src/cgroups-agent/cgroups-agent.c',
2194 include_directories : includes,
2195 link_with : [libshared],
421f0012 2196 install_rpath : rootlibexecdir,
5c23128d
ZJS
2197 install : true,
2198 install_dir : rootlibexecdir)
2199
005a29f2
ZJS
2200exe = executable('systemd-path',
2201 'src/path/path.c',
2202 include_directories : includes,
aac26058 2203 link_with : [libshared],
005a29f2
ZJS
2204 install_rpath : rootlibexecdir,
2205 install : true)
2206public_programs += [exe]
2207
2208exe = executable('systemd-ask-password',
2209 'src/ask-password/ask-password.c',
2210 include_directories : includes,
aac26058 2211 link_with : [libshared],
005a29f2
ZJS
2212 install_rpath : rootlibexecdir,
2213 install : true,
2214 install_dir : rootbindir)
2215public_programs += [exe]
5c23128d
ZJS
2216
2217executable('systemd-reply-password',
2218 'src/reply-password/reply-password.c',
2219 include_directories : includes,
aac26058 2220 link_with : [libshared],
421f0012 2221 install_rpath : rootlibexecdir,
5c23128d
ZJS
2222 install : true,
2223 install_dir : rootlibexecdir)
2224
005a29f2
ZJS
2225exe = executable('systemd-tty-ask-password-agent',
2226 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2227 include_directories : includes,
aac26058 2228 link_with : [libshared],
005a29f2
ZJS
2229 install_rpath : rootlibexecdir,
2230 install : true,
2231 install_dir : rootbindir)
2232public_programs += [exe]
2233
2234exe = executable('systemd-cgls',
2235 'src/cgls/cgls.c',
2236 include_directories : includes,
aac26058 2237 link_with : [libshared],
005a29f2
ZJS
2238 install_rpath : rootlibexecdir,
2239 install : true)
2240public_programs += [exe]
2241
2242exe = executable('systemd-cgtop',
2243 'src/cgtop/cgtop.c',
2244 include_directories : includes,
aac26058 2245 link_with : [libshared],
005a29f2
ZJS
2246 install_rpath : rootlibexecdir,
2247 install : true)
2248public_programs += [exe]
5c23128d
ZJS
2249
2250executable('systemd-initctl',
2251 'src/initctl/initctl.c',
2252 include_directories : includes,
aac26058 2253 link_with : [libshared],
421f0012 2254 install_rpath : rootlibexecdir,
5c23128d
ZJS
2255 install : true,
2256 install_dir : rootlibexecdir)
2257
005a29f2
ZJS
2258exe = executable('systemd-mount',
2259 'src/mount/mount-tool.c',
2260 include_directories : includes,
34ce0a52 2261 link_with : [libshared],
005a29f2
ZJS
2262 install_rpath : rootlibexecdir,
2263 install : true)
2264public_programs += [exe]
5c23128d 2265
7b76fce1 2266meson.add_install_script(meson_make_symlink,
e17e5ba9 2267 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2268
005a29f2
ZJS
2269exe = executable('systemd-run',
2270 'src/run/run.c',
2271 include_directories : includes,
aac26058 2272 link_with : [libshared],
005a29f2
ZJS
2273 install_rpath : rootlibexecdir,
2274 install : true)
2275public_programs += [exe]
2276
2277exe = executable('systemd-stdio-bridge',
2278 'src/stdio-bridge/stdio-bridge.c',
2279 include_directories : includes,
aac26058 2280 link_with : [libshared],
005a29f2
ZJS
2281 install_rpath : rootlibexecdir,
2282 install : true)
2283public_programs += [exe]
2284
2285exe = executable('busctl',
2286 'src/busctl/busctl.c',
2287 'src/busctl/busctl-introspect.c',
2288 'src/busctl/busctl-introspect.h',
2289 include_directories : includes,
aac26058 2290 link_with : [libshared],
005a29f2
ZJS
2291 install_rpath : rootlibexecdir,
2292 install : true)
2293public_programs += [exe]
5c23128d 2294
349cc4a5 2295if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2296 exe = executable('systemd-sysusers',
2297 'src/sysusers/sysusers.c',
2298 include_directories : includes,
2299 link_with : [libshared],
2300 install_rpath : rootlibexecdir,
2301 install : true,
2302 install_dir : rootbindir)
2303 public_programs += [exe]
5c23128d
ZJS
2304endif
2305
349cc4a5 2306if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2307 exe = executable('systemd-tmpfiles',
2308 'src/tmpfiles/tmpfiles.c',
2309 include_directories : includes,
2310 link_with : [libshared],
2311 dependencies : [libacl],
2312 install_rpath : rootlibexecdir,
2313 install : true,
2314 install_dir : rootbindir)
2315 public_programs += [exe]
d9daae55
ZJS
2316
2317 test('test-systemd-tmpfiles',
2318 test_systemd_tmpfiles_py,
2319 args : exe.full_path())
2320 # https://github.com/mesonbuild/meson/issues/2681
5c23128d
ZJS
2321endif
2322
349cc4a5 2323if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2324 exe = executable('systemd-hwdb',
2325 'src/hwdb/hwdb.c',
2326 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2327 include_directories : includes,
0c06b506 2328 link_with : [libudev_static],
0da6f396 2329 install_rpath : udev_rpath,
37efbbd8
ZJS
2330 install : true,
2331 install_dir : rootbindir)
2332 public_programs += [exe]
2333endif
2334
349cc4a5 2335if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2336 executable('systemd-quotacheck',
2337 'src/quotacheck/quotacheck.c',
005a29f2 2338 include_directories : includes,
aac26058 2339 link_with : [libshared],
005a29f2
ZJS
2340 install_rpath : rootlibexecdir,
2341 install : true,
37efbbd8 2342 install_dir : rootlibexecdir)
5c23128d
ZJS
2343endif
2344
005a29f2
ZJS
2345exe = executable('systemd-socket-proxyd',
2346 'src/socket-proxy/socket-proxyd.c',
2347 include_directories : includes,
aac26058 2348 link_with : [libshared],
005a29f2
ZJS
2349 dependencies : [threads],
2350 install_rpath : rootlibexecdir,
2351 install : true,
2352 install_dir : rootlibexecdir)
2353public_programs += [exe]
2354
2355exe = executable('systemd-udevd',
2356 systemd_udevd_sources,
2357 include_directories : includes,
5c72049f 2358 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2 2359 link_with : [libudev_core,
005a29f2 2360 libsystemd_network,
0c06b506 2361 libudev_static],
3a30f21f
ZJS
2362 dependencies : [threads,
2363 libkmod,
005a29f2 2364 libidn,
aac26058
ZJS
2365 libacl,
2366 libblkid],
1aec3ed9 2367 install_rpath : udev_rpath,
005a29f2
ZJS
2368 install : true,
2369 install_dir : rootlibexecdir)
2370public_programs += [exe]
2371
2372exe = executable('udevadm',
2373 udevadm_sources,
6671e818 2374 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2
ZJS
2375 include_directories : includes,
2376 link_with : [libudev_core,
005a29f2 2377 libsystemd_network,
0c06b506 2378 libudev_static],
3a30f21f
ZJS
2379 dependencies : [threads,
2380 libkmod,
005a29f2 2381 libidn,
aac26058
ZJS
2382 libacl,
2383 libblkid],
1aec3ed9 2384 install_rpath : udev_rpath,
005a29f2
ZJS
2385 install : true,
2386 install_dir : rootbindir)
2387public_programs += [exe]
5c23128d
ZJS
2388
2389executable('systemd-shutdown',
2390 systemd_shutdown_sources,
2391 include_directories : includes,
34ce0a52 2392 link_with : [libshared],
95b862b0 2393 dependencies : [libmount],
421f0012 2394 install_rpath : rootlibexecdir,
5c23128d
ZJS
2395 install : true,
2396 install_dir : rootlibexecdir)
2397
2398executable('systemd-update-done',
2399 'src/update-done/update-done.c',
2400 include_directories : includes,
2401 link_with : [libshared],
421f0012 2402 install_rpath : rootlibexecdir,
5c23128d
ZJS
2403 install : true,
2404 install_dir : rootlibexecdir)
2405
2406executable('systemd-update-utmp',
2407 'src/update-utmp/update-utmp.c',
2408 include_directories : includes,
aac26058 2409 link_with : [libshared],
5c23128d 2410 dependencies : [libaudit],
421f0012 2411 install_rpath : rootlibexecdir,
5c23128d
ZJS
2412 install : true,
2413 install_dir : rootlibexecdir)
2414
349cc4a5 2415if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2416 executable('systemd-modules-load',
2417 'src/modules-load/modules-load.c',
2418 include_directories : includes,
2419 link_with : [libshared],
2420 dependencies : [libkmod],
2421 install_rpath : rootlibexecdir,
2422 install : true,
2423 install_dir : rootlibexecdir)
94e75a54 2424
37efbbd8
ZJS
2425 meson.add_install_script('sh', '-c',
2426 mkdir_p.format(modulesloaddir))
2427 meson.add_install_script('sh', '-c',
2428 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2429endif
2430
005a29f2
ZJS
2431exe = executable('systemd-nspawn',
2432 systemd_nspawn_sources,
2433 'src/core/mount-setup.c', # FIXME: use a variable?
2434 'src/core/mount-setup.h',
2435 'src/core/loopback-setup.c',
2436 'src/core/loopback-setup.h',
2437 include_directories : [includes, include_directories('src/nspawn')],
0bc91152 2438 link_with : [libshared],
005a29f2
ZJS
2439 dependencies : [libacl,
2440 libblkid,
2441 libseccomp,
2442 libselinux],
2443 install_rpath : rootlibexecdir,
2444 install : true)
2445public_programs += [exe]
5c23128d 2446
349cc4a5 2447if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2448 executable('systemd-networkd',
2449 systemd_networkd_sources,
2450 include_directories : includes,
2451 link_with : [libnetworkd_core,
37efbbd8 2452 libsystemd_network,
0c06b506 2453 libudev_static,
37efbbd8 2454 libshared],
4b57a272 2455 dependencies : [threads],
37efbbd8
ZJS
2456 install_rpath : rootlibexecdir,
2457 install : true,
2458 install_dir : rootlibexecdir)
2459
2460 executable('systemd-networkd-wait-online',
2461 systemd_networkd_wait_online_sources,
2462 include_directories : includes,
2463 link_with : [libnetworkd_core,
2464 libshared],
2465 install_rpath : rootlibexecdir,
2466 install : true,
2467 install_dir : rootlibexecdir)
5c23128d 2468
dcfe072a
FS
2469 exe = executable('networkctl',
2470 networkctl_sources,
2471 include_directories : includes,
2472 link_with : [libsystemd_network,
aac26058 2473 libshared],
dcfe072a
FS
2474 install_rpath : rootlibexecdir,
2475 install : true,
2476 install_dir : rootbindir)
2477 public_programs += [exe]
2478endif
e821f6a9
ZJS
2479
2480executable('systemd-sulogin-shell',
2481 ['src/sulogin-shell/sulogin-shell.c'],
2482 include_directories : includes,
2483 link_with : [libshared],
2484 install_rpath : rootlibexecdir,
2485 install : true,
2486 install_dir : rootlibexecdir)
2487
69e96427
ZJS
2488############################################################
2489
2490foreach tuple : tests
37efbbd8
ZJS
2491 sources = tuple[0]
2492 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2493 dependencies = tuple[2]
2494 condition = tuple.length() >= 4 ? tuple[3] : ''
2495 type = tuple.length() >= 5 ? tuple[4] : ''
2496 defs = tuple.length() >= 6 ? tuple[5] : []
2497 incs = tuple.length() >= 7 ? tuple[6] : includes
2498 timeout = 30
2499
2500 name = sources[0].split('/')[-1].split('.')[0]
2501 if type.startswith('timeout=')
2502 timeout = type.split('=')[1].to_int()
2503 type = ''
2504 endif
08318a2c
AD
2505 if want_tests == 'false'
2506 message('Not compiling @0@ because tests is set to false'.format(name))
2507 elif condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2508 exe = executable(
2509 name,
2510 sources,
2511 include_directories : incs,
2512 link_with : link_with,
2513 dependencies : dependencies,
2514 c_args : defs,
2515 install_rpath : rootlibexecdir,
7cdd9783
MB
2516 install : install_tests,
2517 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2518
2519 if type == 'manual'
2520 message('@0@ is a manual test'.format(name))
2521 elif type == 'unsafe' and want_tests != 'unsafe'
2522 message('@0@ is an unsafe test'.format(name))
2523 else
2524 test(name, exe,
2525 env : test_env,
2526 timeout : timeout)
2527 endif
2528 else
2529 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2530 endif
69e96427
ZJS
2531endforeach
2532
0632b4cd 2533exe = executable(
37efbbd8
ZJS
2534 'test-libsystemd-sym',
2535 test_libsystemd_sym_c,
2536 include_directories : includes,
2537 link_with : [libsystemd],
2538 install : install_tests,
2539 install_dir : testsdir)
0632b4cd 2540test('test-libsystemd-sym', exe)
37ab1a25 2541
0632b4cd
ZJS
2542exe = executable(
2543 'test-libsystemd-static-sym',
2544 test_libsystemd_sym_c,
2545 include_directories : includes,
0632b4cd
ZJS
2546 link_with : [install_libsystemd_static],
2547 dependencies : [threads], # threads is already included in dependencies on the library,
2548 # but does not seem to get propagated. Add here as a work-around.
20f3d32d
DC
2549 build_by_default : static_libsystemd_pic,
2550 install : install_tests and static_libsystemd_pic,
0632b4cd 2551 install_dir : testsdir)
20f3d32d 2552if static_libsystemd_pic
0632b4cd
ZJS
2553 test('test-libsystemd-static-sym', exe)
2554endif
37ab1a25 2555
0632b4cd 2556exe = executable(
37efbbd8
ZJS
2557 'test-libudev-sym',
2558 test_libudev_sym_c,
2559 include_directories : includes,
2560 c_args : ['-Wno-deprecated-declarations'],
2561 link_with : [libudev],
2562 install : install_tests,
2563 install_dir : testsdir)
0632b4cd
ZJS
2564test('test-libudev-sym', exe)
2565
2566exe = executable(
2567 'test-libudev-static-sym',
2568 test_libudev_sym_c,
2569 include_directories : includes,
20f3d32d 2570 c_args : ['-Wno-deprecated-declarations'],
0632b4cd 2571 link_with : [install_libudev_static],
20f3d32d
DC
2572 build_by_default : static_libudev_pic,
2573 install : install_tests and static_libudev_pic,
0632b4cd 2574 install_dir : testsdir)
20f3d32d 2575if static_libudev_pic
0632b4cd
ZJS
2576 test('test-libudev-static-sym', exe)
2577endif
e0bec52f 2578
69e96427 2579############################################################
5c23128d 2580
7db7d5b7
JR
2581fuzzer_exes = []
2582
2583foreach tuple : fuzzers
2584 sources = tuple[0]
2585 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2586 dependencies = tuple[2]
2587 defs = tuple.length() >= 4 ? tuple[3] : []
2588 incs = tuple.length() >= 5 ? tuple[4] : includes
2589
31e57a35 2590 if fuzzer_build
7db7d5b7
JR
2591 dependencies += fuzzing_engine
2592 else
2593 sources += 'src/fuzz/fuzz-main.c'
2594 endif
2595
2596 name = sources[0].split('/')[-1].split('.')[0]
2597
2598 fuzzer_exes += executable(
2599 name,
2600 sources,
2601 include_directories : [incs, include_directories('src/fuzz')],
2602 link_with : link_with,
2603 dependencies : dependencies,
2604 c_args : defs,
2605 install : false)
2606endforeach
2607
2608run_target('fuzzers',
2609 depends : fuzzer_exes,
2610 command : ['true'])
2611
2612############################################################
2613
5c23128d
ZJS
2614make_directive_index_py = find_program('tools/make-directive-index.py')
2615make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2616xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2617hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2618
2619subdir('units')
2620subdir('sysctl.d')
2621subdir('sysusers.d')
2622subdir('tmpfiles.d')
e783f957 2623subdir('presets')
5c23128d
ZJS
2624subdir('hwdb')
2625subdir('network')
2626subdir('man')
2627subdir('shell-completion/bash')
2628subdir('shell-completion/zsh')
2d684e65
LP
2629subdir('doc/sysvinit')
2630subdir('doc/var-log')
5c23128d
ZJS
2631
2632# FIXME: figure out if the warning is true:
2633# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2634install_subdir('factory/etc',
2635 install_dir : factorydir)
2636
2637
2638install_data('xorg/50-systemd-user.sh',
2639 install_dir : xinitrcdir)
582faeb4
DJL
2640install_data('modprobe.d/systemd.conf',
2641 install_dir : modprobedir)
f09eb768 2642install_data('LICENSE.GPL2',
5c23128d 2643 'LICENSE.LGPL2.1',
f09eb768
LP
2644 'NEWS',
2645 'README',
2646 'doc/CODING_STYLE',
2647 'doc/DISTRO_PORTING',
2648 'doc/ENVIRONMENT.md',
2649 'doc/HACKING',
2650 'doc/TRANSIENT-SETTINGS.md',
2651 'doc/TRANSLATORS',
2652 'doc/UIDS-GIDS.md',
5c23128d
ZJS
2653 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2654 install_dir : docdir)
d68b342b 2655
94e75a54
ZJS
2656meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2657meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2658
d68b342b
ZJS
2659############################################################
2660
005a29f2
ZJS
2661meson_check_help = find_program('tools/meson-check-help.sh')
2662
2663foreach exec : public_programs
37efbbd8
ZJS
2664 name = exec.full_path().split('/')[-1]
2665 test('check-help-' + name,
2666 meson_check_help,
2667 args : [exec.full_path()])
005a29f2
ZJS
2668endforeach
2669
2670############################################################
2671
52d4d1d3
ZJS
2672# Enable tests for all supported sanitizers
2673foreach tuple : sanitizers
2674 sanitizer = tuple[0]
2675 build = tuple[1]
b68dfb9e 2676
52d4d1d3
ZJS
2677 have = run_command(check_compilation_sh,
2678 cc.cmd_array(), '-x', 'c',
2679 '-fsanitize=@0@'.format(sanitizer),
2680 '-include', link_test_c).returncode() == 0
2681 message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no'))
b68dfb9e 2682
52d4d1d3
ZJS
2683 if have
2684 prev = ''
2685 foreach p : fuzz_regression_tests
2686 b = p.split('/')[-2]
2687 c = p.split('/')[-1]
2688
2689 name = '@0@:@1@'.format(b, sanitizer)
2690
2691 if name != prev
2692 if want_tests == 'false'
2693 message('Not compiling @0@ because tests is set to false'.format(name))
2694 elif slow_tests
2695 exe = custom_target(
2696 name,
2697 output : name,
2698 depends : build,
2699 command : [env, 'ln', '-fs',
2700 join_paths(build.full_path(), b),
2701 '@OUTPUT@'],
2702 build_by_default : true)
2703 else
2704 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2705 endif
2706 endif
2707 prev = name
2708
2709 if want_tests != 'false' and slow_tests
2710 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2711 env,
2712 args : [exe.full_path(),
2713 join_paths(meson.source_root(),
2714 'test/fuzz-regressions',
2715 p)])
2716 endif
2717 endforeach
b68dfb9e
ZJS
2718 endif
2719endforeach
2720
52d4d1d3 2721
b68dfb9e
ZJS
2722############################################################
2723
0700e8ba 2724if git.found()
37efbbd8
ZJS
2725 all_files = run_command(
2726 git,
450b60ba 2727 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
37efbbd8
ZJS
2728 'ls-files',
2729 ':/*.[ch]'])
2730 all_files = files(all_files.stdout().split())
d68b342b 2731
e85a690b 2732 custom_target(
0700e8ba 2733 'tags',
e85a690b 2734 output : 'tags',
25a82102 2735 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
e85a690b 2736 custom_target(
0700e8ba 2737 'ctags',
e85a690b 2738 output : 'ctags',
25a82102 2739 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
d68b342b 2740endif
177929c2
ZJS
2741
2742if git.found()
37efbbd8 2743 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 2744 run_target(
37efbbd8 2745 'git-contrib',
37efbbd8 2746 command : [meson_git_contrib_sh])
177929c2 2747endif
dd6ab3df
ZJS
2748
2749if git.found()
2750 git_head = run_command(
2751 git,
450b60ba 2752 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2753 'rev-parse', 'HEAD']).stdout().strip()
2754 git_head_short = run_command(
2755 git,
450b60ba 2756 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2757 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2758
2759 run_target(
2760 'git-snapshot',
2761 command : ['git', 'archive',
450b60ba 2762 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
dd6ab3df
ZJS
2763 git_head_short),
2764 '--prefix', 'systemd-@0@/'.format(git_head),
2765 'HEAD'])
2766endif
829257d1
ZJS
2767
2768############################################################
2769
51b13863
LP
2770meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
2771run_target(
2772 'check-api-docs',
2773 depends : [man, libsystemd, libudev],
2774 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
2775
2776############################################################
2777
829257d1
ZJS
2778status = [
2779 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2780
2675413e 2781 'split /usr: @0@'.format(split_usr),
157baa87 2782 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
2783 'prefix directory: @0@'.format(prefixdir),
2784 'rootprefix directory: @0@'.format(rootprefixdir),
2785 'sysconf directory: @0@'.format(sysconfdir),
2786 'include directory: @0@'.format(includedir),
2787 'lib directory: @0@'.format(libdir),
2788 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
2789 'SysV init scripts: @0@'.format(sysvinit_path),
2790 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
2791 'PAM modules directory: @0@'.format(pamlibdir),
2792 'PAM configuration directory: @0@'.format(pamconfdir),
2793 'RPM macros directory: @0@'.format(rpmmacrosdir),
2794 'modprobe.d directory: @0@'.format(modprobedir),
2795 'D-Bus policy directory: @0@'.format(dbuspolicydir),
2796 'D-Bus session directory: @0@'.format(dbussessionservicedir),
2797 'D-Bus system directory: @0@'.format(dbussystemservicedir),
2798 'bash completions directory: @0@'.format(bashcompletiondir),
2799 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1
ZJS
2800 'extra start script: @0@'.format(get_option('rc-local')),
2801 'extra stop script: @0@'.format(get_option('halt-local')),
2802 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2803 get_option('debug-tty')),
2804 'TTY GID: @0@'.format(tty_gid),
84786b8e 2805 'users GID: @0@'.format(users_gid),
829257d1
ZJS
2806 'maximum system UID: @0@'.format(system_uid_max),
2807 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
2808 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
2809 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
2810 'minimum container UID base: @0@'.format(container_uid_base_min),
2811 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 2812 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 2813 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 2814 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 2815 'support URL: @0@'.format(support_url),
afde4574
LP
2816 'nobody user name: @0@'.format(nobody_user),
2817 'nobody group name: @0@'.format(nobody_group),
829257d1 2818 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 2819 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
2820
2821 'default DNSSEC mode: @0@'.format(default_dnssec),
2822 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2823 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2824
2825alt_dns_servers = '\n '.join(dns_servers.split(' '))
2826alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2827status += [
2828 'default DNS servers: @0@'.format(alt_dns_servers),
2829 'default NTP servers: @0@'.format(alt_ntp_servers)]
2830
2831alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2832 '@@0@'.format(time_epoch)).stdout().strip()
2833status += [
2834 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2835
2836# TODO:
2837# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2838# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2839# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2840
349cc4a5 2841if conf.get('ENABLE_EFI') == 1
829257d1
ZJS
2842 status += [
2843 'efi arch: @0@'.format(efi_arch)]
2844
2845 if have_gnu_efi
2846 status += [
2847 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2848 'EFI CC @0@'.format(efi_cc),
359b496f
YW
2849 'EFI lib directory: @0@'.format(efi_libdir),
2850 'EFI lds directory: @0@'.format(efi_ldsdir),
2851 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
2852 endif
2853endif
2854
2855found = []
2856missing = []
2857
2858foreach tuple : [
2859 ['libcryptsetup'],
2860 ['PAM'],
2861 ['AUDIT'],
2862 ['IMA'],
2863 ['AppArmor'],
2864 ['SELinux'],
2865 ['SECCOMP'],
2866 ['SMACK'],
2867 ['zlib'],
2868 ['xz'],
2869 ['lz4'],
2870 ['bzip2'],
2871 ['ACL'],
2872 ['gcrypt'],
2873 ['qrencode'],
2874 ['microhttpd'],
2875 ['gnutls'],
2876 ['libcurl'],
d1bf5675 2877 ['idn'],
87057e24 2878 ['libidn2'],
829257d1 2879 ['libidn'],
e7e11bbf 2880 ['nss-systemd'],
829257d1
ZJS
2881 ['libiptc'],
2882 ['elfutils'],
2883 ['binfmt'],
2884 ['vconsole'],
2885 ['quotacheck'],
2886 ['tmpfiles'],
2887 ['environment.d'],
2888 ['sysusers'],
2889 ['firstboot'],
2890 ['randomseed'],
2891 ['backlight'],
2892 ['rfkill'],
2893 ['logind'],
2894 ['machined'],
2895 ['importd'],
2896 ['hostnamed'],
2897 ['timedated'],
2898 ['timesyncd'],
2899 ['localed'],
2900 ['networkd'],
a7456af5 2901 ['resolve'],
829257d1
ZJS
2902 ['coredump'],
2903 ['polkit'],
2904 ['legacy pkla', install_polkit_pkla],
2905 ['efi'],
2906 ['gnu-efi', have_gnu_efi],
2907 ['kmod'],
2908 ['xkbcommon'],
c4c978a0 2909 ['pcre2'],
829257d1
ZJS
2910 ['blkid'],
2911 ['dbus'],
2912 ['glib'],
08cf5b8d 2913 ['nss-myhostname', conf.get('ENABLE_MYHOSTNAME') == 1],
829257d1
ZJS
2914 ['hwdb'],
2915 ['tpm'],
2916 ['man pages', want_man],
2917 ['html pages', want_html],
2918 ['man page indices', want_man and have_lxml],
829257d1
ZJS
2919 ['SysV compat'],
2920 ['utmp'],
2921 ['ldconfig'],
2922 ['hibernate'],
2923 ['adm group', get_option('adm-group')],
2924 ['wheel group', get_option('wheel-group')],
b14e1b43 2925 ['gshadow'],
829257d1
ZJS
2926 ['debug hashmap'],
2927 ['debug mmap cache'],
2928]
2929
af4d7860
ZJS
2930 if tuple.length() >= 2
2931 cond = tuple[1]
2932 else
829257d1
ZJS
2933 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2934 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 2935 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
2936 endif
2937 if cond
2938 found += [tuple[0]]
2939 else
2940 missing += [tuple[0]]
2941 endif
2942endforeach
2943
2944status += [
9d39c1bf 2945 '',
829257d1 2946 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
2947 '',
2948 'disabled features: @0@'.format(', '.join(missing)),
2949 '']
829257d1 2950message('\n '.join(status))
9a8e64b0
ZJS
2951
2952if rootprefixdir != rootprefix_default
8ea9fad7
YW
2953 warning('\n' +
2954 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
2955 'systemd used fixed names for unit file directories and other paths, so anything\n' +
2956 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 2957endif