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