]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
ac-power: add simple getopt() argument parsing to systemd-ac-power (#8516)
[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',
5c3376ef 1306 'src/time-wait-sync',
5c23128d
ZJS
1307 'src/login',
1308 'src/udev',
1309 'src/libudev',
1310 'src/core',
1311 'src/libsystemd/sd-bus',
1312 'src/libsystemd/sd-device',
1313 'src/libsystemd/sd-hwdb',
1314 'src/libsystemd/sd-id128',
1315 'src/libsystemd/sd-netlink',
1316 'src/libsystemd/sd-network',
1317 'src/libsystemd-network',
2d4ceca8 1318 '.')
5c23128d
ZJS
1319
1320add_project_arguments('-include', 'config.h', language : 'c')
1321
5c23128d
ZJS
1322subdir('po')
1323subdir('catalog')
1324subdir('src/systemd')
1325subdir('src/basic')
1326subdir('src/libsystemd')
1327subdir('src/libsystemd-network')
5c23128d 1328subdir('src/journal')
5c23128d 1329subdir('src/login')
5c23128d
ZJS
1330
1331libjournal_core = static_library(
37efbbd8
ZJS
1332 'journal-core',
1333 libjournal_core_sources,
1334 journald_gperf_c,
1335 include_directories : includes,
1336 install : false)
5c23128d 1337
37ab1a25 1338libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
5c23128d 1339libsystemd = shared_library(
37efbbd8 1340 'systemd',
7f1ea2cc 1341 'src/systemd/sd-id128.h', # pick a header file at random to work around old meson bug
56d50ab1 1342 version : libsystemd_version,
37efbbd8
ZJS
1343 include_directories : includes,
1344 link_args : ['-shared',
1345 '-Wl,--version-script=' + libsystemd_sym_path],
34e221a5
ZJS
1346 link_with : [libbasic,
1347 libbasic_gcrypt],
5e3cec87
ZJS
1348 link_whole : [libsystemd_static,
1349 libjournal_client],
37efbbd8
ZJS
1350 dependencies : [threads,
1351 librt,
1352 libxz,
1353 liblz4],
1354 link_depends : libsystemd_sym,
1355 install : true,
1356 install_dir : rootlibdir)
5c23128d
ZJS
1357
1358############################################################
1359
83b6af36
ZJS
1360# binaries that have --help and are intended for use by humans,
1361# usually, but not always, installed in /bin.
1362public_programs = []
1363
1364subdir('src/libudev')
1365subdir('src/shared')
1366subdir('src/core')
1367subdir('src/udev')
1368subdir('src/network')
1369
1370subdir('src/analyze')
1371subdir('src/journal-remote')
1372subdir('src/coredump')
1373subdir('src/hostname')
1374subdir('src/import')
1375subdir('src/kernel-install')
1376subdir('src/locale')
1377subdir('src/machine')
1378subdir('src/nspawn')
1379subdir('src/resolve')
1380subdir('src/timedate')
1381subdir('src/timesync')
1382subdir('src/vconsole')
83b6af36
ZJS
1383subdir('src/boot/efi')
1384
1385subdir('src/test')
7db7d5b7 1386subdir('src/fuzz')
6b97bf22 1387subdir('rules')
83b6af36
ZJS
1388subdir('test')
1389
1390############################################################
1391
1392# only static linking apart from libdl, to make sure that the
1393# module is linked to all libraries that it uses.
1394test_dlopen = executable(
37efbbd8
ZJS
1395 'test-dlopen',
1396 test_dlopen_c,
1397 include_directories : includes,
1398 link_with : [libbasic],
1399 dependencies : [libdl])
83b6af36 1400
08cf5b8d 1401foreach tuple : [['myhostname', 'ENABLE_MYHOSTNAME'],
e7e11bbf 1402 ['systemd', 'ENABLE_NSS_SYSTEMD'],
5486a31d 1403 ['mymachines', 'ENABLE_MACHINED'],
1ec57f33 1404 ['resolve', 'ENABLE_RESOLVE']]
5c23128d 1405
349cc4a5 1406 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1407 if condition
1408 module = tuple[0]
37efbbd8
ZJS
1409
1410 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1411 version_script_arg = join_paths(meson.current_source_dir(), sym)
1412
1413 nss = shared_library(
1414 'nss_' + module,
1415 'src/nss-@0@/nss-@0@.c'.format(module),
1416 version : '2',
1417 include_directories : includes,
b4b36f44
LP
1418 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1419 link_args : ['-Wl,-z,nodelete',
1420 '-shared',
37efbbd8
ZJS
1421 '-Wl,--version-script=' + version_script_arg,
1422 '-Wl,--undefined'],
37e4d7a8 1423 link_with : [libsystemd_static,
37efbbd8
ZJS
1424 libbasic],
1425 dependencies : [threads,
5486a31d 1426 librt],
37efbbd8
ZJS
1427 link_depends : sym,
1428 install : true,
1429 install_dir : rootlibdir)
1430
1431 # We cannot use shared_module because it does not support version suffix.
1432 # Unfortunately shared_library insists on creating the symlink…
1433 meson.add_install_script('sh', '-c',
1434 'rm $DESTDIR@0@/libnss_@1@.so'
1435 .format(rootlibdir, module))
1436
1437 test('dlopen-nss_' + module,
1438 test_dlopen,
1439 args : [nss.full_path()]) # path to dlopen must include a slash
1440 endif
5c23128d
ZJS
1441endforeach
1442
1443############################################################
1444
5c23128d
ZJS
1445executable('systemd',
1446 systemd_sources,
1447 include_directories : includes,
1448 link_with : [libcore,
34ce0a52 1449 libshared],
5c23128d
ZJS
1450 dependencies : [threads,
1451 librt,
1452 libseccomp,
1453 libselinux,
f4ee10a2
ZJS
1454 libmount,
1455 libblkid],
421f0012 1456 install_rpath : rootlibexecdir,
5c23128d
ZJS
1457 install : true,
1458 install_dir : rootlibexecdir)
1459
ba7f4ae6
ZJS
1460meson.add_install_script(meson_make_symlink,
1461 join_paths(rootlibexecdir, 'systemd'),
1462 join_paths(rootsbindir, 'init'))
1463
005a29f2
ZJS
1464exe = executable('systemd-analyze',
1465 systemd_analyze_sources,
1466 include_directories : includes,
1467 link_with : [libcore,
005a29f2
ZJS
1468 libshared],
1469 dependencies : [threads,
1470 librt,
1471 libseccomp,
1472 libselinux,
1473 libmount,
1474 libblkid],
1475 install_rpath : rootlibexecdir,
1476 install : true)
1477public_programs += [exe]
5c23128d
ZJS
1478
1479executable('systemd-journald',
1480 systemd_journald_sources,
1481 include_directories : includes,
aac26058 1482 link_with : [libjournal_core,
34ce0a52 1483 libshared],
5c23128d
ZJS
1484 dependencies : [threads,
1485 libxz,
aac26058
ZJS
1486 liblz4,
1487 libselinux],
421f0012 1488 install_rpath : rootlibexecdir,
5c23128d
ZJS
1489 install : true,
1490 install_dir : rootlibexecdir)
1491
005a29f2
ZJS
1492exe = executable('systemd-cat',
1493 systemd_cat_sources,
1494 include_directories : includes,
1495 link_with : [libjournal_core,
34ce0a52 1496 libshared],
005a29f2
ZJS
1497 dependencies : [threads],
1498 install_rpath : rootlibexecdir,
1499 install : true)
1500public_programs += [exe]
1501
1502exe = executable('journalctl',
1503 journalctl_sources,
1504 include_directories : includes,
34ce0a52 1505 link_with : [libshared],
005a29f2
ZJS
1506 dependencies : [threads,
1507 libqrencode,
1508 libxz,
6becf48c
ZJS
1509 liblz4,
1510 libpcre2],
005a29f2
ZJS
1511 install_rpath : rootlibexecdir,
1512 install : true,
1513 install_dir : rootbindir)
1514public_programs += [exe]
5c23128d
ZJS
1515
1516executable('systemd-getty-generator',
1517 'src/getty-generator/getty-generator.c',
5c23128d 1518 include_directories : includes,
b2fc5836
ZJS
1519 link_with : [libshared],
1520 install_rpath : rootlibexecdir,
1521 install : true,
1522 install_dir : systemgeneratordir)
5c23128d
ZJS
1523
1524executable('systemd-debug-generator',
1525 'src/debug-generator/debug-generator.c',
5c23128d 1526 include_directories : includes,
b2fc5836
ZJS
1527 link_with : [libshared],
1528 install_rpath : rootlibexecdir,
1529 install : true,
1530 install_dir : systemgeneratordir)
5c23128d
ZJS
1531
1532executable('systemd-fstab-generator',
1533 'src/fstab-generator/fstab-generator.c',
1534 'src/core/mount-setup.c',
5c23128d 1535 include_directories : includes,
b2fc5836
ZJS
1536 link_with : [libshared],
1537 install_rpath : rootlibexecdir,
1538 install : true,
1539 install_dir : systemgeneratordir)
5c23128d 1540
349cc4a5 1541if conf.get('ENABLE_ENVIRONMENT_D') == 1
37efbbd8
ZJS
1542 executable('30-systemd-environment-d-generator',
1543 'src/environment-d-generator/environment-d-generator.c',
1544 include_directories : includes,
1545 link_with : [libshared],
1546 install_rpath : rootlibexecdir,
1547 install : true,
1548 install_dir : userenvgeneratordir)
7b76fce1 1549
37efbbd8
ZJS
1550 meson.add_install_script(meson_make_symlink,
1551 join_paths(sysconfdir, 'environment'),
1552 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1553endif
1554
349cc4a5 1555if conf.get('ENABLE_HIBERNATE') == 1
37efbbd8
ZJS
1556 executable('systemd-hibernate-resume-generator',
1557 'src/hibernate-resume/hibernate-resume-generator.c',
1558 include_directories : includes,
1559 link_with : [libshared],
1560 install_rpath : rootlibexecdir,
1561 install : true,
1562 install_dir : systemgeneratordir)
5c23128d 1563
37efbbd8
ZJS
1564 executable('systemd-hibernate-resume',
1565 'src/hibernate-resume/hibernate-resume.c',
005a29f2
ZJS
1566 include_directories : includes,
1567 link_with : [libshared],
1568 install_rpath : rootlibexecdir,
1569 install : true,
1570 install_dir : rootlibexecdir)
37efbbd8
ZJS
1571endif
1572
349cc4a5 1573if conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1574 executable('systemd-gpt-auto-generator',
1575 'src/gpt-auto-generator/gpt-auto-generator.c',
1576 'src/basic/blkid-util.h',
1577 include_directories : includes,
34ce0a52 1578 link_with : [libshared],
37efbbd8
ZJS
1579 dependencies : libblkid,
1580 install_rpath : rootlibexecdir,
1581 install : true,
1582 install_dir : systemgeneratordir)
1583
1584 exe = executable('systemd-dissect',
1585 'src/dissect/dissect.c',
1586 include_directories : includes,
1587 link_with : [libshared],
1588 install_rpath : rootlibexecdir,
1589 install : true,
1590 install_dir : rootlibexecdir)
1591 public_programs += [exe]
5c23128d
ZJS
1592endif
1593
1ec57f33 1594if conf.get('ENABLE_RESOLVE') == 1
37efbbd8
ZJS
1595 executable('systemd-resolved',
1596 systemd_resolved_sources,
005a29f2 1597 include_directories : includes,
34e221a5 1598 link_with : [libshared,
568a4ff8
ZJS
1599 libbasic_gcrypt,
1600 libsystemd_resolve_core],
005a29f2 1601 dependencies : [threads,
76c87410 1602 libgpg_error,
005a29f2
ZJS
1603 libm,
1604 libidn],
1605 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1606 install : true,
1607 install_dir : rootlibexecdir)
1608
1609 exe = executable('systemd-resolve',
1610 systemd_resolve_sources,
1611 include_directories : includes,
34e221a5 1612 link_with : [libshared,
568a4ff8
ZJS
1613 libbasic_gcrypt,
1614 libsystemd_resolve_core],
37efbbd8 1615 dependencies : [threads,
76c87410 1616 libgpg_error,
37efbbd8
ZJS
1617 libm,
1618 libidn],
1619 install_rpath : rootlibexecdir,
1620 install : true)
1621 public_programs += [exe]
088c1363
LP
1622
1623 meson.add_install_script(meson_make_symlink,
1624 join_paths(bindir, 'systemd-resolve'),
1625 join_paths(rootsbindir, 'resolvconf'))
5c23128d
ZJS
1626endif
1627
349cc4a5 1628if conf.get('ENABLE_LOGIND') == 1
37efbbd8
ZJS
1629 executable('systemd-logind',
1630 systemd_logind_sources,
005a29f2 1631 include_directories : includes,
37efbbd8 1632 link_with : [liblogind_core,
34ce0a52 1633 libshared],
005a29f2 1634 dependencies : [threads,
37efbbd8 1635 libacl],
005a29f2
ZJS
1636 install_rpath : rootlibexecdir,
1637 install : true,
37efbbd8
ZJS
1638 install_dir : rootlibexecdir)
1639
1640 exe = executable('loginctl',
1641 loginctl_sources,
1642 include_directories : includes,
34ce0a52 1643 link_with : [libshared],
37efbbd8
ZJS
1644 dependencies : [threads,
1645 liblz4,
1646 libxz],
1647 install_rpath : rootlibexecdir,
1648 install : true,
1649 install_dir : rootbindir)
1650 public_programs += [exe]
1651
1652 exe = executable('systemd-inhibit',
1653 'src/login/inhibit.c',
1654 include_directories : includes,
1655 link_with : [libshared],
1656 install_rpath : rootlibexecdir,
1657 install : true,
1658 install_dir : rootbindir)
1659 public_programs += [exe]
1660
349cc4a5 1661 if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1662 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1663 pam_systemd = shared_library(
1664 'pam_systemd',
1665 pam_systemd_c,
1666 name_prefix : '',
1667 include_directories : includes,
1668 link_args : ['-shared',
1669 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1670 link_with : [libsystemd_static,
37efbbd8
ZJS
1671 libshared_static],
1672 dependencies : [threads,
1673 libpam,
1674 libpam_misc],
1675 link_depends : pam_systemd_sym,
1676 install : true,
1677 install_dir : pamlibdir)
1678
1679 test('dlopen-pam_systemd',
1680 test_dlopen,
1681 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1682 endif
1683endif
005a29f2 1684
349cc4a5 1685if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1686 executable('systemd-user-sessions',
1687 'src/user-sessions/user-sessions.c',
005a29f2 1688 include_directories : includes,
aac26058 1689 link_with : [libshared],
005a29f2
ZJS
1690 install_rpath : rootlibexecdir,
1691 install : true,
37efbbd8 1692 install_dir : rootlibexecdir)
5c23128d
ZJS
1693endif
1694
349cc4a5 1695if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1696 exe = executable('bootctl',
1697 'src/boot/bootctl.c',
1698 include_directories : includes,
1699 link_with : [libshared],
1700 dependencies : [libblkid],
1701 install_rpath : rootlibexecdir,
1702 install : true)
1703 public_programs += [exe]
005a29f2
ZJS
1704endif
1705
1706exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1707 include_directories : includes,
1708 link_with : [libshared],
1709 dependencies : [threads],
1710 install_rpath : rootlibexecdir,
1711 install : true)
1712public_programs += [exe]
1713
1714exe = executable('systemctl', 'src/systemctl/systemctl.c',
1715 include_directories : includes,
aac26058 1716 link_with : [libshared],
005a29f2
ZJS
1717 dependencies : [threads,
1718 libcap,
1719 libselinux,
1720 libxz,
1721 liblz4],
1722 install_rpath : rootlibexecdir,
1723 install : true,
1724 install_dir : rootbindir)
1725public_programs += [exe]
5c23128d 1726
ba7f4ae6
ZJS
1727foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1728 meson.add_install_script(meson_make_symlink,
1729 join_paths(rootbindir, 'systemctl'),
1730 join_paths(rootsbindir, alias))
1731endforeach
1732
349cc4a5 1733if conf.get('ENABLE_BACKLIGHT') == 1
37efbbd8
ZJS
1734 executable('systemd-backlight',
1735 'src/backlight/backlight.c',
1736 include_directories : includes,
34ce0a52 1737 link_with : [libshared],
37efbbd8
ZJS
1738 install_rpath : rootlibexecdir,
1739 install : true,
1740 install_dir : rootlibexecdir)
5c23128d
ZJS
1741endif
1742
349cc4a5 1743if conf.get('ENABLE_RFKILL') == 1
37efbbd8
ZJS
1744 executable('systemd-rfkill',
1745 'src/rfkill/rfkill.c',
1746 include_directories : includes,
34ce0a52 1747 link_with : [libshared],
37efbbd8
ZJS
1748 install_rpath : rootlibexecdir,
1749 install : true,
1750 install_dir : rootlibexecdir)
5c23128d
ZJS
1751endif
1752
1753executable('systemd-system-update-generator',
1754 'src/system-update-generator/system-update-generator.c',
1755 include_directories : includes,
1756 link_with : [libshared],
b2fc5836 1757 install_rpath : rootlibexecdir,
5c23128d
ZJS
1758 install : true,
1759 install_dir : systemgeneratordir)
1760
349cc4a5 1761if conf.get('HAVE_LIBCRYPTSETUP') == 1
37efbbd8
ZJS
1762 executable('systemd-cryptsetup',
1763 'src/cryptsetup/cryptsetup.c',
1764 include_directories : includes,
1765 link_with : [libshared],
1766 dependencies : [libcryptsetup],
1767 install_rpath : rootlibexecdir,
1768 install : true,
1769 install_dir : rootlibexecdir)
1770
1771 executable('systemd-cryptsetup-generator',
1772 'src/cryptsetup/cryptsetup-generator.c',
1773 include_directories : includes,
1774 link_with : [libshared],
1775 dependencies : [libcryptsetup],
1776 install_rpath : rootlibexecdir,
1777 install : true,
1778 install_dir : systemgeneratordir)
1779
1780 executable('systemd-veritysetup',
1781 'src/veritysetup/veritysetup.c',
1782 include_directories : includes,
1783 link_with : [libshared],
1784 dependencies : [libcryptsetup],
1785 install_rpath : rootlibexecdir,
1786 install : true,
1787 install_dir : rootlibexecdir)
1788
1789 executable('systemd-veritysetup-generator',
1790 'src/veritysetup/veritysetup-generator.c',
1791 include_directories : includes,
1792 link_with : [libshared],
1793 dependencies : [libcryptsetup],
1794 install_rpath : rootlibexecdir,
1795 install : true,
1796 install_dir : systemgeneratordir)
5c23128d
ZJS
1797endif
1798
349cc4a5 1799if conf.get('HAVE_SYSV_COMPAT') == 1
37efbbd8
ZJS
1800 executable('systemd-sysv-generator',
1801 'src/sysv-generator/sysv-generator.c',
1802 include_directories : includes,
1803 link_with : [libshared],
1804 install_rpath : rootlibexecdir,
1805 install : true,
1806 install_dir : systemgeneratordir)
1807
1808 executable('systemd-rc-local-generator',
1809 'src/rc-local-generator/rc-local-generator.c',
1810 include_directories : includes,
1811 link_with : [libshared],
1812 install_rpath : rootlibexecdir,
1813 install : true,
1814 install_dir : systemgeneratordir)
5c23128d
ZJS
1815endif
1816
349cc4a5 1817if conf.get('ENABLE_HOSTNAMED') == 1
37efbbd8
ZJS
1818 executable('systemd-hostnamed',
1819 'src/hostname/hostnamed.c',
005a29f2 1820 include_directories : includes,
aac26058 1821 link_with : [libshared],
005a29f2 1822 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1823 install : true,
1824 install_dir : rootlibexecdir)
1825
1826 exe = executable('hostnamectl',
1827 'src/hostname/hostnamectl.c',
1828 include_directories : includes,
1829 link_with : [libshared],
1830 install_rpath : rootlibexecdir,
1831 install : true)
1832 public_programs += [exe]
5c23128d
ZJS
1833endif
1834
349cc4a5
ZJS
1835if conf.get('ENABLE_LOCALED') == 1
1836 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
1837 # logind will load libxkbcommon.so dynamically on its own
1838 deps = [libdl]
1839 else
1840 deps = []
1841 endif
1842
1843 executable('systemd-localed',
1844 systemd_localed_sources,
005a29f2 1845 include_directories : includes,
aac26058 1846 link_with : [libshared],
37efbbd8 1847 dependencies : deps,
005a29f2 1848 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1849 install : true,
1850 install_dir : rootlibexecdir)
1851
1852 exe = executable('localectl',
1853 localectl_sources,
1854 include_directories : includes,
1855 link_with : [libshared],
1856 install_rpath : rootlibexecdir,
1857 install : true)
1858 public_programs += [exe]
5c23128d
ZJS
1859endif
1860
349cc4a5 1861if conf.get('ENABLE_TIMEDATED') == 1
37efbbd8
ZJS
1862 executable('systemd-timedated',
1863 'src/timedate/timedated.c',
005a29f2 1864 include_directories : includes,
aac26058 1865 link_with : [libshared],
37efbbd8
ZJS
1866 install_rpath : rootlibexecdir,
1867 install : true,
1868 install_dir : rootlibexecdir)
5c23128d 1869
37efbbd8
ZJS
1870 exe = executable('timedatectl',
1871 'src/timedate/timedatectl.c',
1872 include_directories : includes,
1873 install_rpath : rootlibexecdir,
1874 link_with : [libshared],
1875 install : true)
1876 public_programs += [exe]
5c23128d
ZJS
1877endif
1878
349cc4a5 1879if conf.get('ENABLE_TIMESYNCD') == 1
37efbbd8
ZJS
1880 executable('systemd-timesyncd',
1881 systemd_timesyncd_sources,
005a29f2 1882 include_directories : includes,
aac26058 1883 link_with : [libshared],
005a29f2 1884 dependencies : [threads,
37efbbd8 1885 libm],
005a29f2
ZJS
1886 install_rpath : rootlibexecdir,
1887 install : true,
37efbbd8 1888 install_dir : rootlibexecdir)
5c3376ef
PB
1889
1890 executable('systemd-time-wait-sync',
1891 'src/time-wait-sync/time-wait-sync.c',
1892 include_directories : includes,
1893 link_with : [libshared],
1894 install_rpath : rootlibexecdir,
1895 install : true,
1896 install_dir : rootlibexecdir)
5c23128d
ZJS
1897endif
1898
349cc4a5 1899if conf.get('ENABLE_MACHINED') == 1
37efbbd8
ZJS
1900 executable('systemd-machined',
1901 systemd_machined_sources,
1902 include_directories : includes,
1903 link_with : [libmachine_core,
1904 libshared],
1905 install_rpath : rootlibexecdir,
1906 install : true,
1907 install_dir : rootlibexecdir)
1908
1909 exe = executable('machinectl',
1910 'src/machine/machinectl.c',
1911 include_directories : includes,
1912 link_with : [libshared],
1913 dependencies : [threads,
1914 libxz,
1915 liblz4],
1916 install_rpath : rootlibexecdir,
1917 install : true,
1918 install_dir : rootbindir)
1919 public_programs += [exe]
5c23128d
ZJS
1920endif
1921
349cc4a5 1922if conf.get('ENABLE_IMPORTD') == 1
37efbbd8
ZJS
1923 executable('systemd-importd',
1924 systemd_importd_sources,
005a29f2 1925 include_directories : includes,
aac26058 1926 link_with : [libshared],
37efbbd8 1927 dependencies : [threads],
005a29f2
ZJS
1928 install_rpath : rootlibexecdir,
1929 install : true,
1930 install_dir : rootlibexecdir)
37efbbd8
ZJS
1931
1932 systemd_pull = executable('systemd-pull',
1933 systemd_pull_sources,
1934 include_directories : includes,
1935 link_with : [libshared],
1936 dependencies : [libcurl,
1937 libz,
1938 libbzip2,
1939 libxz,
1940 libgcrypt],
1941 install_rpath : rootlibexecdir,
1942 install : true,
1943 install_dir : rootlibexecdir)
1944
1945 systemd_import = executable('systemd-import',
1946 systemd_import_sources,
1947 include_directories : includes,
1948 link_with : [libshared],
1949 dependencies : [libcurl,
1950 libz,
1951 libbzip2,
1952 libxz],
1953 install_rpath : rootlibexecdir,
1954 install : true,
1955 install_dir : rootlibexecdir)
1956
1957 systemd_export = executable('systemd-export',
1958 systemd_export_sources,
1959 include_directories : includes,
1960 link_with : [libshared],
1961 dependencies : [libcurl,
1962 libz,
1963 libbzip2,
1964 libxz],
1965 install_rpath : rootlibexecdir,
1966 install : true,
1967 install_dir : rootlibexecdir)
1968 public_programs += [systemd_pull, systemd_import, systemd_export]
1969endif
1970
349cc4a5 1971if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
37efbbd8
ZJS
1972 exe = executable('systemd-journal-upload',
1973 systemd_journal_upload_sources,
1974 include_directories : includes,
1975 link_with : [libshared],
1976 dependencies : [threads,
1977 libcurl,
1978 libgnutls,
1979 libxz,
1980 liblz4],
1981 install_rpath : rootlibexecdir,
1982 install : true,
1983 install_dir : rootlibexecdir)
1984 public_programs += [exe]
5c23128d
ZJS
1985endif
1986
349cc4a5 1987if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
37efbbd8
ZJS
1988 s_j_remote = executable('systemd-journal-remote',
1989 systemd_journal_remote_sources,
1990 include_directories : includes,
1991 link_with : [libshared],
1992 dependencies : [threads,
1993 libmicrohttpd,
1994 libgnutls,
1995 libxz,
1996 liblz4],
1997 install_rpath : rootlibexecdir,
1998 install : true,
1999 install_dir : rootlibexecdir)
2000
2001 s_j_gatewayd = executable('systemd-journal-gatewayd',
2002 systemd_journal_gatewayd_sources,
2003 include_directories : includes,
2004 link_with : [libshared],
2005 dependencies : [threads,
2006 libmicrohttpd,
2007 libgnutls,
2008 libxz,
2009 liblz4],
2010 install_rpath : rootlibexecdir,
2011 install : true,
2012 install_dir : rootlibexecdir)
2013 public_programs += [s_j_remote, s_j_gatewayd]
5c23128d
ZJS
2014endif
2015
349cc4a5 2016if conf.get('ENABLE_COREDUMP') == 1
37efbbd8
ZJS
2017 executable('systemd-coredump',
2018 systemd_coredump_sources,
005a29f2 2019 include_directories : includes,
aac26058 2020 link_with : [libshared],
005a29f2 2021 dependencies : [threads,
37efbbd8
ZJS
2022 libacl,
2023 libdw,
005a29f2
ZJS
2024 libxz,
2025 liblz4],
2026 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2027 install : true,
2028 install_dir : rootlibexecdir)
2029
2030 exe = executable('coredumpctl',
2031 coredumpctl_sources,
2032 include_directories : includes,
2033 link_with : [libshared],
2034 dependencies : [threads,
2035 libxz,
2036 liblz4],
2037 install_rpath : rootlibexecdir,
2038 install : true)
2039 public_programs += [exe]
5c23128d
ZJS
2040endif
2041
349cc4a5 2042if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2043 exe = executable('systemd-binfmt',
2044 'src/binfmt/binfmt.c',
2045 include_directories : includes,
2046 link_with : [libshared],
2047 install_rpath : rootlibexecdir,
2048 install : true,
2049 install_dir : rootlibexecdir)
2050 public_programs += [exe]
2051
2052 meson.add_install_script('sh', '-c',
2053 mkdir_p.format(binfmtdir))
2054 meson.add_install_script('sh', '-c',
2055 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2056endif
2057
349cc4a5 2058if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2059 executable('systemd-vconsole-setup',
2060 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2061 include_directories : includes,
2062 link_with : [libshared],
2063 install_rpath : rootlibexecdir,
2064 install : true,
2065 install_dir : rootlibexecdir)
5c23128d
ZJS
2066endif
2067
349cc4a5 2068if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2069 executable('systemd-random-seed',
2070 'src/random-seed/random-seed.c',
2071 include_directories : includes,
2072 link_with : [libshared],
2073 install_rpath : rootlibexecdir,
2074 install : true,
2075 install_dir : rootlibexecdir)
5c23128d
ZJS
2076endif
2077
349cc4a5 2078if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2079 executable('systemd-firstboot',
2080 'src/firstboot/firstboot.c',
2081 include_directories : includes,
2082 link_with : [libshared],
2083 dependencies : [libcrypt],
2084 install_rpath : rootlibexecdir,
2085 install : true,
2086 install_dir : rootbindir)
5c23128d
ZJS
2087endif
2088
2089executable('systemd-remount-fs',
2090 'src/remount-fs/remount-fs.c',
2091 'src/core/mount-setup.c',
2092 'src/core/mount-setup.h',
2093 include_directories : includes,
2094 link_with : [libshared],
b2fc5836 2095 install_rpath : rootlibexecdir,
5c23128d
ZJS
2096 install : true,
2097 install_dir : rootlibexecdir)
2098
2099executable('systemd-machine-id-setup',
2100 'src/machine-id-setup/machine-id-setup-main.c',
2101 'src/core/machine-id-setup.c',
2102 'src/core/machine-id-setup.h',
2103 include_directories : includes,
aac26058 2104 link_with : [libshared],
b2fc5836 2105 install_rpath : rootlibexecdir,
5c23128d
ZJS
2106 install : true,
2107 install_dir : rootbindir)
2108
2109executable('systemd-fsck',
2110 'src/fsck/fsck.c',
2111 include_directories : includes,
aac26058 2112 link_with : [libshared],
421f0012 2113 install_rpath : rootlibexecdir,
5c23128d
ZJS
2114 install : true,
2115 install_dir : rootlibexecdir)
2116
80750adb
ZJS
2117executable('systemd-growfs',
2118 'src/partition/growfs.c',
2119 include_directories : includes,
2120 link_with : [libshared],
c34b75a1 2121 dependencies : [libcryptsetup],
80750adb
ZJS
2122 install_rpath : rootlibexecdir,
2123 install : true,
2124 install_dir : rootlibexecdir)
2125
b7f28ac5
ZJS
2126executable('systemd-makefs',
2127 'src/partition/makefs.c',
2128 include_directories : includes,
2129 link_with : [libshared],
2130 install_rpath : rootlibexecdir,
2131 install : true,
2132 install_dir : rootlibexecdir)
2133
5c23128d
ZJS
2134executable('systemd-sleep',
2135 'src/sleep/sleep.c',
2136 include_directories : includes,
2137 link_with : [libshared],
421f0012 2138 install_rpath : rootlibexecdir,
5c23128d
ZJS
2139 install : true,
2140 install_dir : rootlibexecdir)
2141
005a29f2
ZJS
2142exe = executable('systemd-sysctl',
2143 'src/sysctl/sysctl.c',
2144 include_directories : includes,
2145 link_with : [libshared],
2146 install_rpath : rootlibexecdir,
2147 install : true,
2148 install_dir : rootlibexecdir)
2149public_programs += [exe]
5c23128d
ZJS
2150
2151executable('systemd-ac-power',
2152 'src/ac-power/ac-power.c',
2153 include_directories : includes,
2154 link_with : [libshared],
421f0012 2155 install_rpath : rootlibexecdir,
5c23128d
ZJS
2156 install : true,
2157 install_dir : rootlibexecdir)
2158
005a29f2
ZJS
2159exe = executable('systemd-detect-virt',
2160 'src/detect-virt/detect-virt.c',
2161 include_directories : includes,
2162 link_with : [libshared],
2163 install_rpath : rootlibexecdir,
2164 install : true)
2165public_programs += [exe]
2166
2167exe = executable('systemd-delta',
2168 'src/delta/delta.c',
2169 include_directories : includes,
2170 link_with : [libshared],
2171 install_rpath : rootlibexecdir,
2172 install : true)
2173public_programs += [exe]
2174
2175exe = executable('systemd-escape',
2176 'src/escape/escape.c',
2177 include_directories : includes,
2178 link_with : [libshared],
2179 install_rpath : rootlibexecdir,
2180 install : true,
2181 install_dir : rootbindir)
2182public_programs += [exe]
2183
2184exe = executable('systemd-notify',
2185 'src/notify/notify.c',
2186 include_directories : includes,
2187 link_with : [libshared],
2188 install_rpath : rootlibexecdir,
2189 install : true,
2190 install_dir : rootbindir)
2191public_programs += [exe]
5c23128d
ZJS
2192
2193executable('systemd-volatile-root',
2194 'src/volatile-root/volatile-root.c',
2195 include_directories : includes,
2196 link_with : [libshared],
421f0012 2197 install_rpath : rootlibexecdir,
5c23128d
ZJS
2198 install : true,
2199 install_dir : rootlibexecdir)
2200
2201executable('systemd-cgroups-agent',
2202 'src/cgroups-agent/cgroups-agent.c',
2203 include_directories : includes,
2204 link_with : [libshared],
421f0012 2205 install_rpath : rootlibexecdir,
5c23128d
ZJS
2206 install : true,
2207 install_dir : rootlibexecdir)
2208
005a29f2
ZJS
2209exe = executable('systemd-path',
2210 'src/path/path.c',
2211 include_directories : includes,
aac26058 2212 link_with : [libshared],
005a29f2
ZJS
2213 install_rpath : rootlibexecdir,
2214 install : true)
2215public_programs += [exe]
2216
2217exe = executable('systemd-ask-password',
2218 'src/ask-password/ask-password.c',
2219 include_directories : includes,
aac26058 2220 link_with : [libshared],
005a29f2
ZJS
2221 install_rpath : rootlibexecdir,
2222 install : true,
2223 install_dir : rootbindir)
2224public_programs += [exe]
5c23128d
ZJS
2225
2226executable('systemd-reply-password',
2227 'src/reply-password/reply-password.c',
2228 include_directories : includes,
aac26058 2229 link_with : [libshared],
421f0012 2230 install_rpath : rootlibexecdir,
5c23128d
ZJS
2231 install : true,
2232 install_dir : rootlibexecdir)
2233
005a29f2
ZJS
2234exe = executable('systemd-tty-ask-password-agent',
2235 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2236 include_directories : includes,
aac26058 2237 link_with : [libshared],
005a29f2
ZJS
2238 install_rpath : rootlibexecdir,
2239 install : true,
2240 install_dir : rootbindir)
2241public_programs += [exe]
2242
2243exe = executable('systemd-cgls',
2244 'src/cgls/cgls.c',
2245 include_directories : includes,
aac26058 2246 link_with : [libshared],
005a29f2
ZJS
2247 install_rpath : rootlibexecdir,
2248 install : true)
2249public_programs += [exe]
2250
2251exe = executable('systemd-cgtop',
2252 'src/cgtop/cgtop.c',
2253 include_directories : includes,
aac26058 2254 link_with : [libshared],
005a29f2
ZJS
2255 install_rpath : rootlibexecdir,
2256 install : true)
2257public_programs += [exe]
5c23128d
ZJS
2258
2259executable('systemd-initctl',
2260 'src/initctl/initctl.c',
2261 include_directories : includes,
aac26058 2262 link_with : [libshared],
421f0012 2263 install_rpath : rootlibexecdir,
5c23128d
ZJS
2264 install : true,
2265 install_dir : rootlibexecdir)
2266
005a29f2
ZJS
2267exe = executable('systemd-mount',
2268 'src/mount/mount-tool.c',
2269 include_directories : includes,
34ce0a52 2270 link_with : [libshared],
005a29f2
ZJS
2271 install_rpath : rootlibexecdir,
2272 install : true)
2273public_programs += [exe]
5c23128d 2274
7b76fce1 2275meson.add_install_script(meson_make_symlink,
e17e5ba9 2276 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2277
005a29f2
ZJS
2278exe = executable('systemd-run',
2279 'src/run/run.c',
2280 include_directories : includes,
aac26058 2281 link_with : [libshared],
005a29f2
ZJS
2282 install_rpath : rootlibexecdir,
2283 install : true)
2284public_programs += [exe]
2285
2286exe = executable('systemd-stdio-bridge',
2287 'src/stdio-bridge/stdio-bridge.c',
2288 include_directories : includes,
aac26058 2289 link_with : [libshared],
005a29f2
ZJS
2290 install_rpath : rootlibexecdir,
2291 install : true)
2292public_programs += [exe]
2293
2294exe = executable('busctl',
2295 'src/busctl/busctl.c',
2296 'src/busctl/busctl-introspect.c',
2297 'src/busctl/busctl-introspect.h',
2298 include_directories : includes,
aac26058 2299 link_with : [libshared],
005a29f2
ZJS
2300 install_rpath : rootlibexecdir,
2301 install : true)
2302public_programs += [exe]
5c23128d 2303
349cc4a5 2304if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2305 exe = executable('systemd-sysusers',
2306 'src/sysusers/sysusers.c',
2307 include_directories : includes,
2308 link_with : [libshared],
2309 install_rpath : rootlibexecdir,
2310 install : true,
2311 install_dir : rootbindir)
2312 public_programs += [exe]
5c23128d
ZJS
2313endif
2314
349cc4a5 2315if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2316 exe = executable('systemd-tmpfiles',
2317 'src/tmpfiles/tmpfiles.c',
2318 include_directories : includes,
2319 link_with : [libshared],
2320 dependencies : [libacl],
2321 install_rpath : rootlibexecdir,
2322 install : true,
2323 install_dir : rootbindir)
2324 public_programs += [exe]
d9daae55
ZJS
2325
2326 test('test-systemd-tmpfiles',
2327 test_systemd_tmpfiles_py,
2328 args : exe.full_path())
2329 # https://github.com/mesonbuild/meson/issues/2681
5c23128d
ZJS
2330endif
2331
349cc4a5 2332if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2333 exe = executable('systemd-hwdb',
2334 'src/hwdb/hwdb.c',
2335 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2336 include_directories : includes,
0c06b506 2337 link_with : [libudev_static],
0da6f396 2338 install_rpath : udev_rpath,
37efbbd8
ZJS
2339 install : true,
2340 install_dir : rootbindir)
2341 public_programs += [exe]
2342endif
2343
349cc4a5 2344if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2345 executable('systemd-quotacheck',
2346 'src/quotacheck/quotacheck.c',
005a29f2 2347 include_directories : includes,
aac26058 2348 link_with : [libshared],
005a29f2
ZJS
2349 install_rpath : rootlibexecdir,
2350 install : true,
37efbbd8 2351 install_dir : rootlibexecdir)
5c23128d
ZJS
2352endif
2353
005a29f2
ZJS
2354exe = executable('systemd-socket-proxyd',
2355 'src/socket-proxy/socket-proxyd.c',
2356 include_directories : includes,
aac26058 2357 link_with : [libshared],
005a29f2
ZJS
2358 dependencies : [threads],
2359 install_rpath : rootlibexecdir,
2360 install : true,
2361 install_dir : rootlibexecdir)
2362public_programs += [exe]
2363
2364exe = executable('systemd-udevd',
2365 systemd_udevd_sources,
2366 include_directories : includes,
5c72049f 2367 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2 2368 link_with : [libudev_core,
005a29f2 2369 libsystemd_network,
0c06b506 2370 libudev_static],
3a30f21f
ZJS
2371 dependencies : [threads,
2372 libkmod,
005a29f2 2373 libidn,
aac26058
ZJS
2374 libacl,
2375 libblkid],
1aec3ed9 2376 install_rpath : udev_rpath,
005a29f2
ZJS
2377 install : true,
2378 install_dir : rootlibexecdir)
2379public_programs += [exe]
2380
2381exe = executable('udevadm',
2382 udevadm_sources,
6671e818 2383 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
005a29f2
ZJS
2384 include_directories : includes,
2385 link_with : [libudev_core,
005a29f2 2386 libsystemd_network,
0c06b506 2387 libudev_static],
3a30f21f
ZJS
2388 dependencies : [threads,
2389 libkmod,
005a29f2 2390 libidn,
aac26058
ZJS
2391 libacl,
2392 libblkid],
1aec3ed9 2393 install_rpath : udev_rpath,
005a29f2
ZJS
2394 install : true,
2395 install_dir : rootbindir)
2396public_programs += [exe]
5c23128d
ZJS
2397
2398executable('systemd-shutdown',
2399 systemd_shutdown_sources,
2400 include_directories : includes,
34ce0a52 2401 link_with : [libshared],
95b862b0 2402 dependencies : [libmount],
421f0012 2403 install_rpath : rootlibexecdir,
5c23128d
ZJS
2404 install : true,
2405 install_dir : rootlibexecdir)
2406
2407executable('systemd-update-done',
2408 'src/update-done/update-done.c',
2409 include_directories : includes,
2410 link_with : [libshared],
421f0012 2411 install_rpath : rootlibexecdir,
5c23128d
ZJS
2412 install : true,
2413 install_dir : rootlibexecdir)
2414
2415executable('systemd-update-utmp',
2416 'src/update-utmp/update-utmp.c',
2417 include_directories : includes,
aac26058 2418 link_with : [libshared],
5c23128d 2419 dependencies : [libaudit],
421f0012 2420 install_rpath : rootlibexecdir,
5c23128d
ZJS
2421 install : true,
2422 install_dir : rootlibexecdir)
2423
349cc4a5 2424if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2425 executable('systemd-modules-load',
2426 'src/modules-load/modules-load.c',
2427 include_directories : includes,
2428 link_with : [libshared],
2429 dependencies : [libkmod],
2430 install_rpath : rootlibexecdir,
2431 install : true,
2432 install_dir : rootlibexecdir)
94e75a54 2433
37efbbd8
ZJS
2434 meson.add_install_script('sh', '-c',
2435 mkdir_p.format(modulesloaddir))
2436 meson.add_install_script('sh', '-c',
2437 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2438endif
2439
005a29f2
ZJS
2440exe = executable('systemd-nspawn',
2441 systemd_nspawn_sources,
2442 'src/core/mount-setup.c', # FIXME: use a variable?
2443 'src/core/mount-setup.h',
2444 'src/core/loopback-setup.c',
2445 'src/core/loopback-setup.h',
2446 include_directories : [includes, include_directories('src/nspawn')],
0bc91152 2447 link_with : [libshared],
005a29f2
ZJS
2448 dependencies : [libacl,
2449 libblkid,
2450 libseccomp,
2451 libselinux],
2452 install_rpath : rootlibexecdir,
2453 install : true)
2454public_programs += [exe]
5c23128d 2455
349cc4a5 2456if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2457 executable('systemd-networkd',
2458 systemd_networkd_sources,
2459 include_directories : includes,
2460 link_with : [libnetworkd_core,
37efbbd8 2461 libsystemd_network,
0c06b506 2462 libudev_static,
37efbbd8 2463 libshared],
4b57a272 2464 dependencies : [threads],
37efbbd8
ZJS
2465 install_rpath : rootlibexecdir,
2466 install : true,
2467 install_dir : rootlibexecdir)
2468
2469 executable('systemd-networkd-wait-online',
2470 systemd_networkd_wait_online_sources,
2471 include_directories : includes,
2472 link_with : [libnetworkd_core,
2473 libshared],
2474 install_rpath : rootlibexecdir,
2475 install : true,
2476 install_dir : rootlibexecdir)
5c23128d 2477
dcfe072a
FS
2478 exe = executable('networkctl',
2479 networkctl_sources,
2480 include_directories : includes,
2481 link_with : [libsystemd_network,
aac26058 2482 libshared],
dcfe072a
FS
2483 install_rpath : rootlibexecdir,
2484 install : true,
2485 install_dir : rootbindir)
2486 public_programs += [exe]
2487endif
e821f6a9
ZJS
2488
2489executable('systemd-sulogin-shell',
2490 ['src/sulogin-shell/sulogin-shell.c'],
2491 include_directories : includes,
2492 link_with : [libshared],
2493 install_rpath : rootlibexecdir,
2494 install : true,
2495 install_dir : rootlibexecdir)
2496
69e96427
ZJS
2497############################################################
2498
2499foreach tuple : tests
37efbbd8
ZJS
2500 sources = tuple[0]
2501 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2502 dependencies = tuple[2]
2503 condition = tuple.length() >= 4 ? tuple[3] : ''
2504 type = tuple.length() >= 5 ? tuple[4] : ''
2505 defs = tuple.length() >= 6 ? tuple[5] : []
2506 incs = tuple.length() >= 7 ? tuple[6] : includes
2507 timeout = 30
2508
2509 name = sources[0].split('/')[-1].split('.')[0]
2510 if type.startswith('timeout=')
2511 timeout = type.split('=')[1].to_int()
2512 type = ''
2513 endif
08318a2c
AD
2514 if want_tests == 'false'
2515 message('Not compiling @0@ because tests is set to false'.format(name))
2516 elif condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2517 exe = executable(
2518 name,
2519 sources,
2520 include_directories : incs,
2521 link_with : link_with,
2522 dependencies : dependencies,
2523 c_args : defs,
2524 install_rpath : rootlibexecdir,
7cdd9783
MB
2525 install : install_tests,
2526 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2527
2528 if type == 'manual'
2529 message('@0@ is a manual test'.format(name))
2530 elif type == 'unsafe' and want_tests != 'unsafe'
2531 message('@0@ is an unsafe test'.format(name))
2532 else
2533 test(name, exe,
2534 env : test_env,
2535 timeout : timeout)
2536 endif
2537 else
2538 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2539 endif
69e96427
ZJS
2540endforeach
2541
37ab1a25 2542test_libsystemd_sym = executable(
37efbbd8
ZJS
2543 'test-libsystemd-sym',
2544 test_libsystemd_sym_c,
2545 include_directories : includes,
2546 link_with : [libsystemd],
2547 install : install_tests,
2548 install_dir : testsdir)
37ab1a25
ZJS
2549test('test-libsystemd-sym',
2550 test_libsystemd_sym)
2551
e0bec52f 2552test_libudev_sym = executable(
37efbbd8
ZJS
2553 'test-libudev-sym',
2554 test_libudev_sym_c,
2555 include_directories : includes,
2556 c_args : ['-Wno-deprecated-declarations'],
2557 link_with : [libudev],
2558 install : install_tests,
2559 install_dir : testsdir)
e0bec52f
ZJS
2560test('test-libudev-sym',
2561 test_libudev_sym)
2562
69e96427 2563############################################################
5c23128d 2564
7db7d5b7
JR
2565fuzzer_exes = []
2566
2567foreach tuple : fuzzers
2568 sources = tuple[0]
2569 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2570 dependencies = tuple[2]
2571 defs = tuple.length() >= 4 ? tuple[3] : []
2572 incs = tuple.length() >= 5 ? tuple[4] : includes
2573
31e57a35 2574 if fuzzer_build
7db7d5b7
JR
2575 dependencies += fuzzing_engine
2576 else
2577 sources += 'src/fuzz/fuzz-main.c'
2578 endif
2579
2580 name = sources[0].split('/')[-1].split('.')[0]
2581
2582 fuzzer_exes += executable(
2583 name,
2584 sources,
2585 include_directories : [incs, include_directories('src/fuzz')],
2586 link_with : link_with,
2587 dependencies : dependencies,
2588 c_args : defs,
2589 install : false)
2590endforeach
2591
2592run_target('fuzzers',
2593 depends : fuzzer_exes,
2594 command : ['true'])
2595
2596############################################################
2597
5c23128d
ZJS
2598make_directive_index_py = find_program('tools/make-directive-index.py')
2599make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2600xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2601hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2602
2603subdir('units')
2604subdir('sysctl.d')
2605subdir('sysusers.d')
2606subdir('tmpfiles.d')
e783f957 2607subdir('presets')
5c23128d
ZJS
2608subdir('hwdb')
2609subdir('network')
2610subdir('man')
2611subdir('shell-completion/bash')
2612subdir('shell-completion/zsh')
2613subdir('docs/sysvinit')
2614subdir('docs/var-log')
2615
2616# FIXME: figure out if the warning is true:
2617# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2618install_subdir('factory/etc',
2619 install_dir : factorydir)
2620
2621
2622install_data('xorg/50-systemd-user.sh',
2623 install_dir : xinitrcdir)
582faeb4
DJL
2624install_data('modprobe.d/systemd.conf',
2625 install_dir : modprobedir)
f09eb768 2626install_data('LICENSE.GPL2',
5c23128d 2627 'LICENSE.LGPL2.1',
f09eb768
LP
2628 'NEWS',
2629 'README',
2630 'doc/CODING_STYLE',
2631 'doc/DISTRO_PORTING',
2632 'doc/ENVIRONMENT.md',
2633 'doc/HACKING',
2634 'doc/TRANSIENT-SETTINGS.md',
2635 'doc/TRANSLATORS',
2636 'doc/UIDS-GIDS.md',
5c23128d
ZJS
2637 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2638 install_dir : docdir)
d68b342b 2639
94e75a54
ZJS
2640meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2641meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2642
d68b342b
ZJS
2643############################################################
2644
005a29f2
ZJS
2645meson_check_help = find_program('tools/meson-check-help.sh')
2646
2647foreach exec : public_programs
37efbbd8
ZJS
2648 name = exec.full_path().split('/')[-1]
2649 test('check-help-' + name,
2650 meson_check_help,
2651 args : [exec.full_path()])
005a29f2
ZJS
2652endforeach
2653
2654############################################################
2655
52d4d1d3
ZJS
2656# Enable tests for all supported sanitizers
2657foreach tuple : sanitizers
2658 sanitizer = tuple[0]
2659 build = tuple[1]
b68dfb9e 2660
52d4d1d3
ZJS
2661 have = run_command(check_compilation_sh,
2662 cc.cmd_array(), '-x', 'c',
2663 '-fsanitize=@0@'.format(sanitizer),
2664 '-include', link_test_c).returncode() == 0
2665 message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no'))
b68dfb9e 2666
52d4d1d3
ZJS
2667 if have
2668 prev = ''
2669 foreach p : fuzz_regression_tests
2670 b = p.split('/')[-2]
2671 c = p.split('/')[-1]
2672
2673 name = '@0@:@1@'.format(b, sanitizer)
2674
2675 if name != prev
2676 if want_tests == 'false'
2677 message('Not compiling @0@ because tests is set to false'.format(name))
2678 elif slow_tests
2679 exe = custom_target(
2680 name,
2681 output : name,
2682 depends : build,
2683 command : [env, 'ln', '-fs',
2684 join_paths(build.full_path(), b),
2685 '@OUTPUT@'],
2686 build_by_default : true)
2687 else
2688 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2689 endif
2690 endif
2691 prev = name
2692
2693 if want_tests != 'false' and slow_tests
2694 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2695 env,
2696 args : [exe.full_path(),
2697 join_paths(meson.source_root(),
2698 'test/fuzz-regressions',
2699 p)])
2700 endif
2701 endforeach
b68dfb9e
ZJS
2702 endif
2703endforeach
2704
52d4d1d3 2705
b68dfb9e
ZJS
2706############################################################
2707
0700e8ba 2708if git.found()
37efbbd8
ZJS
2709 all_files = run_command(
2710 git,
450b60ba 2711 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
37efbbd8
ZJS
2712 'ls-files',
2713 ':/*.[ch]'])
2714 all_files = files(all_files.stdout().split())
d68b342b 2715
e85a690b 2716 custom_target(
0700e8ba 2717 'tags',
e85a690b 2718 output : 'tags',
25a82102 2719 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
e85a690b 2720 custom_target(
0700e8ba 2721 'ctags',
e85a690b 2722 output : 'ctags',
25a82102 2723 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
d68b342b 2724endif
177929c2
ZJS
2725
2726if git.found()
37efbbd8 2727 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 2728 run_target(
37efbbd8 2729 'git-contrib',
37efbbd8 2730 command : [meson_git_contrib_sh])
177929c2 2731endif
dd6ab3df
ZJS
2732
2733if git.found()
2734 git_head = run_command(
2735 git,
450b60ba 2736 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2737 'rev-parse', 'HEAD']).stdout().strip()
2738 git_head_short = run_command(
2739 git,
450b60ba 2740 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
dd6ab3df
ZJS
2741 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2742
2743 run_target(
2744 'git-snapshot',
2745 command : ['git', 'archive',
450b60ba 2746 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
dd6ab3df
ZJS
2747 git_head_short),
2748 '--prefix', 'systemd-@0@/'.format(git_head),
2749 'HEAD'])
2750endif
829257d1
ZJS
2751
2752############################################################
2753
51b13863
LP
2754meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
2755run_target(
2756 'check-api-docs',
2757 depends : [man, libsystemd, libudev],
2758 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
2759
2760############################################################
2761
829257d1
ZJS
2762status = [
2763 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2764
2675413e 2765 'split /usr: @0@'.format(split_usr),
157baa87 2766 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
2767 'prefix directory: @0@'.format(prefixdir),
2768 'rootprefix directory: @0@'.format(rootprefixdir),
2769 'sysconf directory: @0@'.format(sysconfdir),
2770 'include directory: @0@'.format(includedir),
2771 'lib directory: @0@'.format(libdir),
2772 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
2773 'SysV init scripts: @0@'.format(sysvinit_path),
2774 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
2775 'PAM modules directory: @0@'.format(pamlibdir),
2776 'PAM configuration directory: @0@'.format(pamconfdir),
2777 'RPM macros directory: @0@'.format(rpmmacrosdir),
2778 'modprobe.d directory: @0@'.format(modprobedir),
2779 'D-Bus policy directory: @0@'.format(dbuspolicydir),
2780 'D-Bus session directory: @0@'.format(dbussessionservicedir),
2781 'D-Bus system directory: @0@'.format(dbussystemservicedir),
2782 'bash completions directory: @0@'.format(bashcompletiondir),
2783 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1
ZJS
2784 'extra start script: @0@'.format(get_option('rc-local')),
2785 'extra stop script: @0@'.format(get_option('halt-local')),
2786 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2787 get_option('debug-tty')),
2788 'TTY GID: @0@'.format(tty_gid),
84786b8e 2789 'users GID: @0@'.format(users_gid),
829257d1
ZJS
2790 'maximum system UID: @0@'.format(system_uid_max),
2791 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
2792 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
2793 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
2794 'minimum container UID base: @0@'.format(container_uid_base_min),
2795 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 2796 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 2797 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 2798 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 2799 'support URL: @0@'.format(support_url),
afde4574
LP
2800 'nobody user name: @0@'.format(nobody_user),
2801 'nobody group name: @0@'.format(nobody_group),
829257d1 2802 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 2803 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
2804
2805 'default DNSSEC mode: @0@'.format(default_dnssec),
2806 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2807 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2808
2809alt_dns_servers = '\n '.join(dns_servers.split(' '))
2810alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2811status += [
2812 'default DNS servers: @0@'.format(alt_dns_servers),
2813 'default NTP servers: @0@'.format(alt_ntp_servers)]
2814
2815alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2816 '@@0@'.format(time_epoch)).stdout().strip()
2817status += [
2818 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2819
2820# TODO:
2821# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2822# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2823# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2824
349cc4a5 2825if conf.get('ENABLE_EFI') == 1
829257d1
ZJS
2826 status += [
2827 'efi arch: @0@'.format(efi_arch)]
2828
2829 if have_gnu_efi
2830 status += [
2831 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2832 'EFI CC @0@'.format(efi_cc),
359b496f
YW
2833 'EFI lib directory: @0@'.format(efi_libdir),
2834 'EFI lds directory: @0@'.format(efi_ldsdir),
2835 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
2836 endif
2837endif
2838
2839found = []
2840missing = []
2841
2842foreach tuple : [
2843 ['libcryptsetup'],
2844 ['PAM'],
2845 ['AUDIT'],
2846 ['IMA'],
2847 ['AppArmor'],
2848 ['SELinux'],
2849 ['SECCOMP'],
2850 ['SMACK'],
2851 ['zlib'],
2852 ['xz'],
2853 ['lz4'],
2854 ['bzip2'],
2855 ['ACL'],
2856 ['gcrypt'],
2857 ['qrencode'],
2858 ['microhttpd'],
2859 ['gnutls'],
2860 ['libcurl'],
d1bf5675 2861 ['idn'],
87057e24 2862 ['libidn2'],
829257d1 2863 ['libidn'],
e7e11bbf 2864 ['nss-systemd'],
829257d1
ZJS
2865 ['libiptc'],
2866 ['elfutils'],
2867 ['binfmt'],
2868 ['vconsole'],
2869 ['quotacheck'],
2870 ['tmpfiles'],
2871 ['environment.d'],
2872 ['sysusers'],
2873 ['firstboot'],
2874 ['randomseed'],
2875 ['backlight'],
2876 ['rfkill'],
2877 ['logind'],
2878 ['machined'],
2879 ['importd'],
2880 ['hostnamed'],
2881 ['timedated'],
2882 ['timesyncd'],
2883 ['localed'],
2884 ['networkd'],
a7456af5 2885 ['resolve'],
829257d1
ZJS
2886 ['coredump'],
2887 ['polkit'],
2888 ['legacy pkla', install_polkit_pkla],
2889 ['efi'],
2890 ['gnu-efi', have_gnu_efi],
2891 ['kmod'],
2892 ['xkbcommon'],
c4c978a0 2893 ['pcre2'],
829257d1
ZJS
2894 ['blkid'],
2895 ['dbus'],
2896 ['glib'],
08cf5b8d 2897 ['nss-myhostname', conf.get('ENABLE_MYHOSTNAME') == 1],
829257d1
ZJS
2898 ['hwdb'],
2899 ['tpm'],
2900 ['man pages', want_man],
2901 ['html pages', want_html],
2902 ['man page indices', want_man and have_lxml],
829257d1
ZJS
2903 ['SysV compat'],
2904 ['utmp'],
2905 ['ldconfig'],
2906 ['hibernate'],
2907 ['adm group', get_option('adm-group')],
2908 ['wheel group', get_option('wheel-group')],
b14e1b43 2909 ['gshadow'],
829257d1
ZJS
2910 ['debug hashmap'],
2911 ['debug mmap cache'],
2912]
2913
af4d7860
ZJS
2914 if tuple.length() >= 2
2915 cond = tuple[1]
2916 else
829257d1
ZJS
2917 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2918 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 2919 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
2920 endif
2921 if cond
2922 found += [tuple[0]]
2923 else
2924 missing += [tuple[0]]
2925 endif
2926endforeach
2927
2928status += [
9d39c1bf 2929 '',
829257d1 2930 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
2931 '',
2932 'disabled features: @0@'.format(', '.join(missing)),
2933 '']
829257d1 2934message('\n '.join(status))
9a8e64b0
ZJS
2935
2936if rootprefixdir != rootprefix_default
2937 message('WARNING:\n' +
2938 ' Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
2939 ' systemd used fixed names for unit file directories and other paths, so anything\n' +
2940 ' except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
2941endif