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