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