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