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