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