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