]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
test-chown-rec: use logging helper here too
[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
ZJS
457 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
458 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
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
ZJS
1094 liblz4 = dependency('liblz4',
1095 required : want_lz4 == 'true')
349cc4a5 1096 have = liblz4.found()
5c23128d 1097else
349cc4a5 1098 have = false
37efbbd8 1099 liblz4 = []
5c23128d 1100endif
349cc4a5 1101conf.set10('HAVE_LZ4', have)
5c23128d 1102
a44fb601 1103want_xkbcommon = get_option('xkbcommon')
31e57a35 1104if want_xkbcommon != 'false' and not fuzzer_build
a44fb601
ZJS
1105 libxkbcommon = dependency('xkbcommon',
1106 version : '>= 0.3.0',
1107 required : want_xkbcommon == 'true')
349cc4a5 1108 have = libxkbcommon.found()
a44fb601 1109else
349cc4a5 1110 have = false
a44fb601
ZJS
1111 libxkbcommon = []
1112endif
349cc4a5 1113conf.set10('HAVE_XKBCOMMON', have)
a44fb601 1114
c4c978a0
ZJS
1115want_pcre2 = get_option('pcre2')
1116if want_pcre2 != 'false'
1117 libpcre2 = dependency('libpcre2-8',
1118 required : want_pcre2 == 'true')
1119 have = libpcre2.found()
1120else
1121 have = false
1122 libpcre2 = []
1123endif
1124conf.set10('HAVE_PCRE2', have)
1125
69e96427 1126want_glib = get_option('glib')
31e57a35 1127if want_glib != 'false' and not fuzzer_build
37efbbd8
ZJS
1128 libglib = dependency('glib-2.0',
1129 version : '>= 2.22.0',
1130 required : want_glib == 'true')
1131 libgobject = dependency('gobject-2.0',
1132 version : '>= 2.22.0',
1133 required : want_glib == 'true')
1134 libgio = dependency('gio-2.0',
1135 required : want_glib == 'true')
2c201c21 1136 have = libglib.found() and libgobject.found() and libgio.found()
69e96427 1137else
349cc4a5 1138 have = false
37efbbd8
ZJS
1139 libglib = []
1140 libgobject = []
1141 libgio = []
69e96427 1142endif
349cc4a5 1143conf.set10('HAVE_GLIB', have)
69e96427
ZJS
1144
1145want_dbus = get_option('dbus')
31e57a35 1146if want_dbus != 'false' and not fuzzer_build
37efbbd8
ZJS
1147 libdbus = dependency('dbus-1',
1148 version : '>= 1.3.2',
1149 required : want_dbus == 'true')
349cc4a5 1150 have = libdbus.found()
69e96427 1151else
349cc4a5 1152 have = false
37efbbd8 1153 libdbus = []
69e96427 1154endif
349cc4a5 1155conf.set10('HAVE_DBUS', have)
69e96427 1156
42303dcb 1157default_dnssec = get_option('default-dnssec')
31e57a35 1158if fuzzer_build
b4081f3e
JR
1159 default_dnssec = 'no'
1160endif
349cc4a5 1161if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
42303dcb
YW
1162 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1163 default_dnssec = 'no'
1164endif
1165conf.set('DEFAULT_DNSSEC_MODE',
1166 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1167substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1168
56ddbf10
YW
1169dns_over_tls = get_option('dns-over-tls')
1170if dns_over_tls != 'false'
096cbdce
IT
1171 if dns_over_tls == 'openssl'
1172 have_gnutls = false
1173 else
1174 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.5.3'))
1175 if dns_over_tls == 'gnutls' and not have_gnutls
1176 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1177 endif
56ddbf10 1178 endif
096cbdce
IT
1179 if dns_over_tls == 'gnutls' or have_gnutls
1180 have_openssl = false
1181 else
1182 have_openssl = conf.get('HAVE_OPENSSL') == 1
1183 if dns_over_tls != 'auto' and not have_openssl
1184 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
1185 error('DNS-over-TLS support was requested$0$, but dependencies are not available'.format(str))
1186 endif
1187 endif
1188 have = have_gnutls or have_openssl
56ddbf10 1189else
096cbdce 1190 have = have_gnutls = have_openssl = false
56ddbf10
YW
1191endif
1192conf.set10('ENABLE_DNS_OVER_TLS', have)
096cbdce
IT
1193conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1194conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
56ddbf10 1195
c9299be2 1196default_dns_over_tls = get_option('default-dns-over-tls')
5d67a7ae 1197if fuzzer_build
c9299be2 1198 default_dns_over_tls = 'no'
5d67a7ae 1199endif
56ddbf10
YW
1200if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
1201 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 1202 default_dns_over_tls = 'no'
5d67a7ae 1203endif
c9299be2
IT
1204conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1205 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1206substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
5d67a7ae 1207
5c23128d 1208want_importd = get_option('importd')
4390be30 1209if want_importd != 'false'
349cc4a5
ZJS
1210 have = (conf.get('HAVE_LIBCURL') == 1 and
1211 conf.get('HAVE_ZLIB') == 1 and
349cc4a5
ZJS
1212 conf.get('HAVE_XZ') == 1 and
1213 conf.get('HAVE_GCRYPT') == 1)
1214 if want_importd == 'true' and not have
37efbbd8
ZJS
1215 error('importd support was requested, but dependencies are not available')
1216 endif
349cc4a5
ZJS
1217else
1218 have = false
5c23128d 1219endif
349cc4a5 1220conf.set10('ENABLE_IMPORTD', have)
5c23128d
ZJS
1221
1222want_remote = get_option('remote')
4390be30 1223if want_remote != 'false'
349cc4a5
ZJS
1224 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1225 conf.get('HAVE_LIBCURL') == 1]
37efbbd8
ZJS
1226 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1227 # it's possible to build one without the other. Complain only if
1228 # support was explictly requested. The auxiliary files like sysusers
1229 # config should be installed when any of the programs are built.
1230 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1231 error('remote support was requested, but dependencies are not available')
1232 endif
349cc4a5
ZJS
1233 have = have_deps[0] or have_deps[1]
1234else
1235 have = false
5c23128d 1236endif
349cc4a5 1237conf.set10('ENABLE_REMOTE', have)
5c23128d 1238
a9149d87
ZJS
1239foreach term : ['utmp',
1240 'hibernate',
1241 'environment-d',
1242 'binfmt',
1243 'coredump',
1244 'resolve',
1245 'logind',
1246 'hostnamed',
1247 'localed',
1248 'machined',
61d0578b 1249 'portabled',
a9149d87
ZJS
1250 'networkd',
1251 'timedated',
1252 'timesyncd',
a9149d87
ZJS
1253 'firstboot',
1254 'randomseed',
1255 'backlight',
1256 'vconsole',
1257 'quotacheck',
1258 'sysusers',
1259 'tmpfiles',
1260 'hwdb',
1261 'rfkill',
1262 'ldconfig',
1263 'efi',
1264 'tpm',
1265 'ima',
1266 'smack',
1267 'gshadow',
1268 'idn',
08540a95 1269 'nss-myhostname',
a9149d87
ZJS
1270 'nss-systemd']
1271 have = get_option(term)
1272 name = 'ENABLE_' + term.underscorify().to_upper()
1273 conf.set10(name, have)
5c23128d
ZJS
1274endforeach
1275
08540a95
YW
1276foreach tuple : [['nss-mymachines', 'machined'],
1277 ['nss-resolve', 'resolve']]
1278 want = get_option(tuple[0])
1279 if want != 'false'
1280 have = get_option(tuple[1])
1281 if want == 'true' and not have
1282 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1283 endif
1284 else
1285 have = false
1286 endif
1287 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1288 conf.set10(name, have)
1289endforeach
1290
1291enable_nss = false
1292foreach term : ['ENABLE_NSS_MYHOSTNAME',
1293 'ENABLE_NSS_MYMACHINES',
1294 'ENABLE_NSS_RESOLVE',
1295 'ENABLE_NSS_SYSTEMD']
1296 if conf.get(term) == 1
1297 enable_nss = true
1298 endif
1299endforeach
1300conf.set10('ENABLE_NSS', enable_nss)
1301
348b4437 1302conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
6129ec85 1303
69e96427 1304tests = []
7db7d5b7 1305fuzzers = []
69e96427 1306
b68dfb9e 1307conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
00d82c81 1308
5c23128d
ZJS
1309#####################################################################
1310
1311if get_option('efi')
37efbbd8 1312 efi_arch = host_machine.cpu_family()
b710072d 1313
6800fe7f 1314 if efi_arch == 'x86'
37efbbd8 1315 EFI_MACHINE_TYPE_NAME = 'ia32'
6800fe7f 1316 gnu_efi_arch = 'ia32'
37efbbd8
ZJS
1317 elif efi_arch == 'x86_64'
1318 EFI_MACHINE_TYPE_NAME = 'x64'
6800fe7f 1319 gnu_efi_arch = 'x86_64'
37efbbd8
ZJS
1320 elif efi_arch == 'arm'
1321 EFI_MACHINE_TYPE_NAME = 'arm'
6800fe7f 1322 gnu_efi_arch = 'arm'
37efbbd8
ZJS
1323 elif efi_arch == 'aarch64'
1324 EFI_MACHINE_TYPE_NAME = 'aa64'
6800fe7f 1325 gnu_efi_arch = 'aarch64'
37efbbd8
ZJS
1326 else
1327 EFI_MACHINE_TYPE_NAME = ''
6800fe7f 1328 gnu_efi_arch = ''
37efbbd8 1329 endif
5c23128d 1330
349cc4a5 1331 have = true
37efbbd8 1332 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
80c6fce8 1333
ac09340e 1334 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
349cc4a5
ZJS
1335else
1336 have = false
5c23128d 1337endif
349cc4a5 1338conf.set10('ENABLE_EFI', have)
5c23128d
ZJS
1339
1340#####################################################################
1341
1342config_h = configure_file(
37efbbd8
ZJS
1343 output : 'config.h',
1344 configuration : conf)
5c23128d 1345
348b4437
YW
1346meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1347
5c23128d
ZJS
1348includes = include_directories('src/basic',
1349 'src/shared',
1350 'src/systemd',
1351 'src/journal',
a38f7fec 1352 'src/journal-remote',
97d90615 1353 'src/nspawn',
5c23128d
ZJS
1354 'src/resolve',
1355 'src/timesync',
5c3376ef 1356 'src/time-wait-sync',
5c23128d
ZJS
1357 'src/login',
1358 'src/udev',
1359 'src/libudev',
1360 'src/core',
1361 'src/libsystemd/sd-bus',
1362 'src/libsystemd/sd-device',
1363 'src/libsystemd/sd-hwdb',
1364 'src/libsystemd/sd-id128',
1365 'src/libsystemd/sd-netlink',
1366 'src/libsystemd/sd-network',
1367 'src/libsystemd-network',
2d4ceca8 1368 '.')
5c23128d
ZJS
1369
1370add_project_arguments('-include', 'config.h', language : 'c')
1371
5c23128d
ZJS
1372subdir('po')
1373subdir('catalog')
1374subdir('src/systemd')
1375subdir('src/basic')
1376subdir('src/libsystemd')
1377subdir('src/libsystemd-network')
5c23128d 1378subdir('src/journal')
5c23128d 1379subdir('src/login')
5c23128d
ZJS
1380
1381libjournal_core = static_library(
37efbbd8
ZJS
1382 'journal-core',
1383 libjournal_core_sources,
1384 journald_gperf_c,
1385 include_directories : includes,
1386 install : false)
5c23128d 1387
37ab1a25 1388libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
5c23128d 1389libsystemd = shared_library(
37efbbd8 1390 'systemd',
a5d8835c 1391 disable_mempool_c,
56d50ab1 1392 version : libsystemd_version,
37efbbd8
ZJS
1393 include_directories : includes,
1394 link_args : ['-shared',
1395 '-Wl,--version-script=' + libsystemd_sym_path],
34e221a5
ZJS
1396 link_with : [libbasic,
1397 libbasic_gcrypt],
5e3cec87
ZJS
1398 link_whole : [libsystemd_static,
1399 libjournal_client],
37efbbd8
ZJS
1400 dependencies : [threads,
1401 librt,
1402 libxz,
1403 liblz4],
1404 link_depends : libsystemd_sym,
1405 install : true,
1406 install_dir : rootlibdir)
5c23128d 1407
70848ecf
DC
1408static_libsystemd = get_option('static-libsystemd')
1409static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1410
1411install_libsystemd_static = static_library(
1412 'systemd',
1413 libsystemd_sources,
1414 journal_client_sources,
975464e0
ZJS
1415 basic_sources,
1416 basic_gcrypt_sources,
be44b572 1417 disable_mempool_c,
70848ecf 1418 include_directories : includes,
70848ecf
DC
1419 build_by_default : static_libsystemd != 'false',
1420 install : static_libsystemd != 'false',
1421 install_dir : rootlibdir,
1422 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1423 dependencies : [threads,
1424 librt,
1425 libxz,
1426 liblz4,
975464e0
ZJS
1427 libcap,
1428 libblkid,
1429 libmount,
1430 libselinux,
70848ecf
DC
1431 libgcrypt],
1432 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1433
5c23128d
ZJS
1434############################################################
1435
83b6af36
ZJS
1436# binaries that have --help and are intended for use by humans,
1437# usually, but not always, installed in /bin.
1438public_programs = []
1439
1440subdir('src/libudev')
1441subdir('src/shared')
1442subdir('src/core')
1443subdir('src/udev')
1444subdir('src/network')
1445
1446subdir('src/analyze')
1447subdir('src/journal-remote')
1448subdir('src/coredump')
1449subdir('src/hostname')
1450subdir('src/import')
1451subdir('src/kernel-install')
1452subdir('src/locale')
1453subdir('src/machine')
61d0578b 1454subdir('src/portable')
83b6af36
ZJS
1455subdir('src/nspawn')
1456subdir('src/resolve')
1457subdir('src/timedate')
1458subdir('src/timesync')
1459subdir('src/vconsole')
83b6af36
ZJS
1460subdir('src/boot/efi')
1461
1462subdir('src/test')
7db7d5b7 1463subdir('src/fuzz')
6b97bf22 1464subdir('rules')
83b6af36
ZJS
1465subdir('test')
1466
1467############################################################
1468
1469# only static linking apart from libdl, to make sure that the
1470# module is linked to all libraries that it uses.
1471test_dlopen = executable(
37efbbd8
ZJS
1472 'test-dlopen',
1473 test_dlopen_c,
a5d8835c 1474 disable_mempool_c,
37efbbd8
ZJS
1475 include_directories : includes,
1476 link_with : [libbasic],
fd1939fb
YW
1477 dependencies : [libdl],
1478 build_by_default : want_tests != 'false')
83b6af36 1479
08540a95 1480foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
e7e11bbf 1481 ['systemd', 'ENABLE_NSS_SYSTEMD'],
08540a95
YW
1482 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1483 ['resolve', 'ENABLE_NSS_RESOLVE']]
5c23128d 1484
349cc4a5 1485 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
37efbbd8
ZJS
1486 if condition
1487 module = tuple[0]
37efbbd8
ZJS
1488
1489 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
243e5cec 1490 version_script_arg = join_paths(meson.source_root(), sym)
37efbbd8
ZJS
1491
1492 nss = shared_library(
1493 'nss_' + module,
1494 'src/nss-@0@/nss-@0@.c'.format(module),
a5d8835c 1495 disable_mempool_c,
37efbbd8
ZJS
1496 version : '2',
1497 include_directories : includes,
b4b36f44
LP
1498 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1499 link_args : ['-Wl,-z,nodelete',
1500 '-shared',
37efbbd8
ZJS
1501 '-Wl,--version-script=' + version_script_arg,
1502 '-Wl,--undefined'],
37e4d7a8 1503 link_with : [libsystemd_static,
37efbbd8
ZJS
1504 libbasic],
1505 dependencies : [threads,
5486a31d 1506 librt],
37efbbd8
ZJS
1507 link_depends : sym,
1508 install : true,
1509 install_dir : rootlibdir)
1510
1511 # We cannot use shared_module because it does not support version suffix.
1512 # Unfortunately shared_library insists on creating the symlink…
1513 meson.add_install_script('sh', '-c',
1514 'rm $DESTDIR@0@/libnss_@1@.so'
1515 .format(rootlibdir, module))
1516
938be089
ZJS
1517 if want_tests != 'false'
1518 test('dlopen-nss_' + module,
1519 test_dlopen,
1520 # path to dlopen must include a slash
1521 args : nss.full_path())
1522 endif
37efbbd8 1523 endif
5c23128d
ZJS
1524endforeach
1525
1526############################################################
1527
5c23128d
ZJS
1528executable('systemd',
1529 systemd_sources,
1530 include_directories : includes,
1531 link_with : [libcore,
34ce0a52 1532 libshared],
5c23128d
ZJS
1533 dependencies : [threads,
1534 librt,
1535 libseccomp,
1536 libselinux,
f4ee10a2
ZJS
1537 libmount,
1538 libblkid],
421f0012 1539 install_rpath : rootlibexecdir,
5c23128d
ZJS
1540 install : true,
1541 install_dir : rootlibexecdir)
1542
ba7f4ae6
ZJS
1543meson.add_install_script(meson_make_symlink,
1544 join_paths(rootlibexecdir, 'systemd'),
1545 join_paths(rootsbindir, 'init'))
1546
005a29f2
ZJS
1547exe = executable('systemd-analyze',
1548 systemd_analyze_sources,
1549 include_directories : includes,
1550 link_with : [libcore,
005a29f2
ZJS
1551 libshared],
1552 dependencies : [threads,
1553 librt,
1554 libseccomp,
1555 libselinux,
1556 libmount,
1557 libblkid],
1558 install_rpath : rootlibexecdir,
1559 install : true)
5a8b1640 1560public_programs += exe
5c23128d
ZJS
1561
1562executable('systemd-journald',
1563 systemd_journald_sources,
1564 include_directories : includes,
aac26058 1565 link_with : [libjournal_core,
34ce0a52 1566 libshared],
5c23128d
ZJS
1567 dependencies : [threads,
1568 libxz,
aac26058
ZJS
1569 liblz4,
1570 libselinux],
421f0012 1571 install_rpath : rootlibexecdir,
5c23128d
ZJS
1572 install : true,
1573 install_dir : rootlibexecdir)
1574
005a29f2
ZJS
1575exe = executable('systemd-cat',
1576 systemd_cat_sources,
1577 include_directories : includes,
1578 link_with : [libjournal_core,
34ce0a52 1579 libshared],
005a29f2
ZJS
1580 dependencies : [threads],
1581 install_rpath : rootlibexecdir,
1582 install : true)
5a8b1640 1583public_programs += exe
005a29f2
ZJS
1584
1585exe = executable('journalctl',
1586 journalctl_sources,
1587 include_directories : includes,
34ce0a52 1588 link_with : [libshared],
005a29f2
ZJS
1589 dependencies : [threads,
1590 libqrencode,
1591 libxz,
6becf48c
ZJS
1592 liblz4,
1593 libpcre2],
005a29f2
ZJS
1594 install_rpath : rootlibexecdir,
1595 install : true,
1596 install_dir : rootbindir)
5a8b1640 1597public_programs += exe
5c23128d
ZJS
1598
1599executable('systemd-getty-generator',
1600 'src/getty-generator/getty-generator.c',
5c23128d 1601 include_directories : includes,
b2fc5836
ZJS
1602 link_with : [libshared],
1603 install_rpath : rootlibexecdir,
1604 install : true,
1605 install_dir : systemgeneratordir)
5c23128d
ZJS
1606
1607executable('systemd-debug-generator',
1608 'src/debug-generator/debug-generator.c',
5c23128d 1609 include_directories : includes,
b2fc5836
ZJS
1610 link_with : [libshared],
1611 install_rpath : rootlibexecdir,
1612 install : true,
1613 install_dir : systemgeneratordir)
5c23128d
ZJS
1614
1615executable('systemd-fstab-generator',
1616 'src/fstab-generator/fstab-generator.c',
1617 'src/core/mount-setup.c',
5c23128d 1618 include_directories : includes,
b2fc5836
ZJS
1619 link_with : [libshared],
1620 install_rpath : rootlibexecdir,
1621 install : true,
1622 install_dir : systemgeneratordir)
5c23128d 1623
349cc4a5 1624if conf.get('ENABLE_ENVIRONMENT_D') == 1
37efbbd8
ZJS
1625 executable('30-systemd-environment-d-generator',
1626 'src/environment-d-generator/environment-d-generator.c',
1627 include_directories : includes,
1628 link_with : [libshared],
1629 install_rpath : rootlibexecdir,
1630 install : true,
1631 install_dir : userenvgeneratordir)
7b76fce1 1632
37efbbd8
ZJS
1633 meson.add_install_script(meson_make_symlink,
1634 join_paths(sysconfdir, 'environment'),
1635 join_paths(environmentdir, '99-environment.conf'))
5c23128d
ZJS
1636endif
1637
349cc4a5 1638if conf.get('ENABLE_HIBERNATE') == 1
37efbbd8
ZJS
1639 executable('systemd-hibernate-resume-generator',
1640 'src/hibernate-resume/hibernate-resume-generator.c',
1641 include_directories : includes,
1642 link_with : [libshared],
1643 install_rpath : rootlibexecdir,
1644 install : true,
1645 install_dir : systemgeneratordir)
5c23128d 1646
37efbbd8
ZJS
1647 executable('systemd-hibernate-resume',
1648 'src/hibernate-resume/hibernate-resume.c',
005a29f2
ZJS
1649 include_directories : includes,
1650 link_with : [libshared],
1651 install_rpath : rootlibexecdir,
1652 install : true,
1653 install_dir : rootlibexecdir)
37efbbd8
ZJS
1654endif
1655
349cc4a5 1656if conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1657 executable('systemd-gpt-auto-generator',
1658 'src/gpt-auto-generator/gpt-auto-generator.c',
1659 'src/basic/blkid-util.h',
1660 include_directories : includes,
34ce0a52 1661 link_with : [libshared],
37efbbd8
ZJS
1662 dependencies : libblkid,
1663 install_rpath : rootlibexecdir,
1664 install : true,
1665 install_dir : systemgeneratordir)
1666
1667 exe = executable('systemd-dissect',
1668 'src/dissect/dissect.c',
1669 include_directories : includes,
1670 link_with : [libshared],
1671 install_rpath : rootlibexecdir,
1672 install : true,
1673 install_dir : rootlibexecdir)
5a8b1640 1674 public_programs += exe
5c23128d
ZJS
1675endif
1676
1ec57f33 1677if conf.get('ENABLE_RESOLVE') == 1
37efbbd8
ZJS
1678 executable('systemd-resolved',
1679 systemd_resolved_sources,
005a29f2 1680 include_directories : includes,
34e221a5 1681 link_with : [libshared,
568a4ff8
ZJS
1682 libbasic_gcrypt,
1683 libsystemd_resolve_core],
56ddbf10 1684 dependencies : systemd_resolved_dependencies,
005a29f2 1685 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1686 install : true,
1687 install_dir : rootlibexecdir)
1688
c2e84cab
YW
1689 exe = executable('resolvectl',
1690 resolvectl_sources,
37efbbd8 1691 include_directories : includes,
34e221a5 1692 link_with : [libshared,
568a4ff8
ZJS
1693 libbasic_gcrypt,
1694 libsystemd_resolve_core],
37efbbd8 1695 dependencies : [threads,
76c87410 1696 libgpg_error,
37efbbd8
ZJS
1697 libm,
1698 libidn],
1699 install_rpath : rootlibexecdir,
1700 install : true)
5a8b1640 1701 public_programs += exe
088c1363
LP
1702
1703 meson.add_install_script(meson_make_symlink,
c2e84cab 1704 join_paths(bindir, 'resolvectl'),
088c1363 1705 join_paths(rootsbindir, 'resolvconf'))
c2e84cab
YW
1706
1707 meson.add_install_script(meson_make_symlink,
1708 join_paths(bindir, 'resolvectl'),
1709 join_paths(bindir, 'systemd-resolve'))
5c23128d
ZJS
1710endif
1711
349cc4a5 1712if conf.get('ENABLE_LOGIND') == 1
37efbbd8
ZJS
1713 executable('systemd-logind',
1714 systemd_logind_sources,
005a29f2 1715 include_directories : includes,
37efbbd8 1716 link_with : [liblogind_core,
34ce0a52 1717 libshared],
005a29f2 1718 dependencies : [threads,
37efbbd8 1719 libacl],
005a29f2
ZJS
1720 install_rpath : rootlibexecdir,
1721 install : true,
37efbbd8
ZJS
1722 install_dir : rootlibexecdir)
1723
1724 exe = executable('loginctl',
1725 loginctl_sources,
1726 include_directories : includes,
34ce0a52 1727 link_with : [libshared],
37efbbd8
ZJS
1728 dependencies : [threads,
1729 liblz4,
1730 libxz],
1731 install_rpath : rootlibexecdir,
1732 install : true,
1733 install_dir : rootbindir)
5a8b1640 1734 public_programs += exe
37efbbd8
ZJS
1735
1736 exe = executable('systemd-inhibit',
1737 'src/login/inhibit.c',
1738 include_directories : includes,
1739 link_with : [libshared],
1740 install_rpath : rootlibexecdir,
1741 install : true,
1742 install_dir : rootbindir)
5a8b1640 1743 public_programs += exe
37efbbd8 1744
349cc4a5 1745 if conf.get('HAVE_PAM') == 1
243e5cec 1746 version_script_arg = join_paths(meson.source_root(), pam_systemd_sym)
37efbbd8
ZJS
1747 pam_systemd = shared_library(
1748 'pam_systemd',
1749 pam_systemd_c,
1750 name_prefix : '',
1751 include_directories : includes,
1752 link_args : ['-shared',
1753 '-Wl,--version-script=' + version_script_arg],
37e4d7a8 1754 link_with : [libsystemd_static,
37efbbd8
ZJS
1755 libshared_static],
1756 dependencies : [threads,
1757 libpam,
1758 libpam_misc],
1759 link_depends : pam_systemd_sym,
1760 install : true,
1761 install_dir : pamlibdir)
1762
938be089
ZJS
1763 if want_tests != 'false'
1764 test('dlopen-pam_systemd',
1765 test_dlopen,
1766 # path to dlopen must include a slash
c1cd6743 1767 args : pam_systemd.full_path())
938be089 1768 endif
37efbbd8 1769 endif
005a29f2 1770
07ee5adb
LP
1771 executable('systemd-user-runtime-dir',
1772 user_runtime_dir_sources,
1773 include_directories : includes,
1774 link_with : [libshared],
1775 install_rpath : rootlibexecdir,
1776 install : true,
1777 install_dir : rootlibexecdir)
1778endif
a9f0f5e5 1779
349cc4a5 1780if conf.get('HAVE_PAM') == 1
37efbbd8
ZJS
1781 executable('systemd-user-sessions',
1782 'src/user-sessions/user-sessions.c',
005a29f2 1783 include_directories : includes,
aac26058 1784 link_with : [libshared],
005a29f2
ZJS
1785 install_rpath : rootlibexecdir,
1786 install : true,
37efbbd8 1787 install_dir : rootlibexecdir)
5c23128d
ZJS
1788endif
1789
349cc4a5 1790if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
37efbbd8
ZJS
1791 exe = executable('bootctl',
1792 'src/boot/bootctl.c',
1793 include_directories : includes,
1794 link_with : [libshared],
1795 dependencies : [libblkid],
1796 install_rpath : rootlibexecdir,
1797 install : true)
5a8b1640 1798 public_programs += exe
36695e88
LP
1799
1800 executable('systemd-bless-boot',
1801 'src/boot/bless-boot.c',
1802 include_directories : includes,
1803 link_with : [libshared],
1804 dependencies : [libblkid],
1805 install_rpath : rootlibexecdir,
1806 install : true,
1807 install_dir : rootlibexecdir)
8d16ed07
LP
1808
1809 executable('systemd-bless-boot-generator',
1810 'src/boot/bless-boot-generator.c',
1811 include_directories : includes,
1812 link_with : [libshared],
1813 install_rpath : rootlibexecdir,
1814 install : true,
1815 install_dir : systemgeneratordir)
005a29f2
ZJS
1816endif
1817
f876f537
LP
1818executable('systemd-boot-check-no-failures',
1819 'src/boot/boot-check-no-failures.c',
1820 include_directories : includes,
1821 link_with : [libshared],
1822 dependencies : [libblkid],
1823 install_rpath : rootlibexecdir,
1824 install : true,
1825 install_dir : rootlibexecdir)
1826
005a29f2
ZJS
1827exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1828 include_directories : includes,
1829 link_with : [libshared],
1830 dependencies : [threads],
1831 install_rpath : rootlibexecdir,
1832 install : true)
5a8b1640 1833public_programs += exe
005a29f2 1834
f3794366
FS
1835
1836if get_option('link-systemctl-shared')
1837 systemctl_link_with = [libshared]
1838else
1839 systemctl_link_with = [libsystemd_static,
1840 libshared_static,
1841 libjournal_client,
1842 libbasic_gcrypt]
1843endif
1844
005a29f2
ZJS
1845exe = executable('systemctl', 'src/systemctl/systemctl.c',
1846 include_directories : includes,
f3794366 1847 link_with : systemctl_link_with,
005a29f2
ZJS
1848 dependencies : [threads,
1849 libcap,
1850 libselinux,
1851 libxz,
1852 liblz4],
1853 install_rpath : rootlibexecdir,
1854 install : true,
1855 install_dir : rootbindir)
5a8b1640 1856public_programs += exe
5c23128d 1857
61d0578b
LP
1858if conf.get('ENABLE_PORTABLED') == 1
1859 executable('systemd-portabled',
1860 systemd_portabled_sources,
1861 include_directories : includes,
1862 link_with : [libshared],
1863 dependencies : [threads],
1864 install_rpath : rootlibexecdir,
1865 install : true,
1866 install_dir : rootlibexecdir)
1867
1868 exe = executable('portablectl', 'src/portable/portablectl.c',
1869 include_directories : includes,
1870 link_with : [libshared],
1871 dependencies : [threads],
1872 install_rpath : rootlibexecdir,
1873 install : true,
80f39b81 1874 install_dir : rootbindir)
5a8b1640 1875 public_programs += exe
61d0578b
LP
1876endif
1877
ba7f4ae6
ZJS
1878foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1879 meson.add_install_script(meson_make_symlink,
1880 join_paths(rootbindir, 'systemctl'),
1881 join_paths(rootsbindir, alias))
1882endforeach
1883
349cc4a5 1884if conf.get('ENABLE_BACKLIGHT') == 1
37efbbd8
ZJS
1885 executable('systemd-backlight',
1886 'src/backlight/backlight.c',
1887 include_directories : includes,
34ce0a52 1888 link_with : [libshared],
37efbbd8
ZJS
1889 install_rpath : rootlibexecdir,
1890 install : true,
1891 install_dir : rootlibexecdir)
5c23128d
ZJS
1892endif
1893
349cc4a5 1894if conf.get('ENABLE_RFKILL') == 1
37efbbd8
ZJS
1895 executable('systemd-rfkill',
1896 'src/rfkill/rfkill.c',
1897 include_directories : includes,
34ce0a52 1898 link_with : [libshared],
37efbbd8
ZJS
1899 install_rpath : rootlibexecdir,
1900 install : true,
1901 install_dir : rootlibexecdir)
5c23128d
ZJS
1902endif
1903
1904executable('systemd-system-update-generator',
1905 'src/system-update-generator/system-update-generator.c',
1906 include_directories : includes,
1907 link_with : [libshared],
b2fc5836 1908 install_rpath : rootlibexecdir,
5c23128d
ZJS
1909 install : true,
1910 install_dir : systemgeneratordir)
1911
349cc4a5 1912if conf.get('HAVE_LIBCRYPTSETUP') == 1
37efbbd8
ZJS
1913 executable('systemd-cryptsetup',
1914 'src/cryptsetup/cryptsetup.c',
1915 include_directories : includes,
1916 link_with : [libshared],
1917 dependencies : [libcryptsetup],
1918 install_rpath : rootlibexecdir,
1919 install : true,
1920 install_dir : rootlibexecdir)
1921
1922 executable('systemd-cryptsetup-generator',
1923 'src/cryptsetup/cryptsetup-generator.c',
1924 include_directories : includes,
1925 link_with : [libshared],
1926 dependencies : [libcryptsetup],
1927 install_rpath : rootlibexecdir,
1928 install : true,
1929 install_dir : systemgeneratordir)
1930
1931 executable('systemd-veritysetup',
1932 'src/veritysetup/veritysetup.c',
1933 include_directories : includes,
1934 link_with : [libshared],
1935 dependencies : [libcryptsetup],
1936 install_rpath : rootlibexecdir,
1937 install : true,
1938 install_dir : rootlibexecdir)
1939
1940 executable('systemd-veritysetup-generator',
1941 'src/veritysetup/veritysetup-generator.c',
1942 include_directories : includes,
1943 link_with : [libshared],
1944 dependencies : [libcryptsetup],
1945 install_rpath : rootlibexecdir,
1946 install : true,
1947 install_dir : systemgeneratordir)
5c23128d
ZJS
1948endif
1949
349cc4a5 1950if conf.get('HAVE_SYSV_COMPAT') == 1
37efbbd8
ZJS
1951 executable('systemd-sysv-generator',
1952 'src/sysv-generator/sysv-generator.c',
1953 include_directories : includes,
1954 link_with : [libshared],
1955 install_rpath : rootlibexecdir,
1956 install : true,
1957 install_dir : systemgeneratordir)
1958
1959 executable('systemd-rc-local-generator',
1960 'src/rc-local-generator/rc-local-generator.c',
1961 include_directories : includes,
1962 link_with : [libshared],
1963 install_rpath : rootlibexecdir,
1964 install : true,
1965 install_dir : systemgeneratordir)
5c23128d
ZJS
1966endif
1967
349cc4a5 1968if conf.get('ENABLE_HOSTNAMED') == 1
37efbbd8
ZJS
1969 executable('systemd-hostnamed',
1970 'src/hostname/hostnamed.c',
005a29f2 1971 include_directories : includes,
aac26058 1972 link_with : [libshared],
005a29f2 1973 install_rpath : rootlibexecdir,
37efbbd8
ZJS
1974 install : true,
1975 install_dir : rootlibexecdir)
1976
1977 exe = executable('hostnamectl',
1978 'src/hostname/hostnamectl.c',
1979 include_directories : includes,
1980 link_with : [libshared],
1981 install_rpath : rootlibexecdir,
1982 install : true)
5a8b1640 1983 public_programs += exe
5c23128d
ZJS
1984endif
1985
349cc4a5
ZJS
1986if conf.get('ENABLE_LOCALED') == 1
1987 if conf.get('HAVE_XKBCOMMON') == 1
37efbbd8
ZJS
1988 # logind will load libxkbcommon.so dynamically on its own
1989 deps = [libdl]
1990 else
1991 deps = []
1992 endif
1993
1994 executable('systemd-localed',
1995 systemd_localed_sources,
005a29f2 1996 include_directories : includes,
aac26058 1997 link_with : [libshared],
37efbbd8 1998 dependencies : deps,
005a29f2 1999 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2000 install : true,
2001 install_dir : rootlibexecdir)
2002
2003 exe = executable('localectl',
2004 localectl_sources,
2005 include_directories : includes,
2006 link_with : [libshared],
2007 install_rpath : rootlibexecdir,
2008 install : true)
5a8b1640 2009 public_programs += exe
5c23128d
ZJS
2010endif
2011
349cc4a5 2012if conf.get('ENABLE_TIMEDATED') == 1
37efbbd8
ZJS
2013 executable('systemd-timedated',
2014 'src/timedate/timedated.c',
005a29f2 2015 include_directories : includes,
aac26058 2016 link_with : [libshared],
37efbbd8
ZJS
2017 install_rpath : rootlibexecdir,
2018 install : true,
2019 install_dir : rootlibexecdir)
6129ec85 2020endif
5c23128d 2021
6129ec85 2022if conf.get('ENABLE_TIMEDATECTL') == 1
37efbbd8
ZJS
2023 exe = executable('timedatectl',
2024 'src/timedate/timedatectl.c',
2025 include_directories : includes,
2026 install_rpath : rootlibexecdir,
2027 link_with : [libshared],
6129ec85 2028 dependencies : [libm],
37efbbd8 2029 install : true)
5a8b1640 2030 public_programs += exe
5c23128d
ZJS
2031endif
2032
349cc4a5 2033if conf.get('ENABLE_TIMESYNCD') == 1
37efbbd8
ZJS
2034 executable('systemd-timesyncd',
2035 systemd_timesyncd_sources,
005a29f2 2036 include_directories : includes,
aac26058 2037 link_with : [libshared],
005a29f2 2038 dependencies : [threads,
37efbbd8 2039 libm],
005a29f2
ZJS
2040 install_rpath : rootlibexecdir,
2041 install : true,
37efbbd8 2042 install_dir : rootlibexecdir)
5c3376ef
PB
2043
2044 executable('systemd-time-wait-sync',
2045 'src/time-wait-sync/time-wait-sync.c',
2046 include_directories : includes,
2047 link_with : [libshared],
2048 install_rpath : rootlibexecdir,
2049 install : true,
2050 install_dir : rootlibexecdir)
5c23128d
ZJS
2051endif
2052
349cc4a5 2053if conf.get('ENABLE_MACHINED') == 1
37efbbd8
ZJS
2054 executable('systemd-machined',
2055 systemd_machined_sources,
2056 include_directories : includes,
2057 link_with : [libmachine_core,
2058 libshared],
2059 install_rpath : rootlibexecdir,
2060 install : true,
2061 install_dir : rootlibexecdir)
2062
2063 exe = executable('machinectl',
2064 'src/machine/machinectl.c',
2065 include_directories : includes,
2066 link_with : [libshared],
2067 dependencies : [threads,
2068 libxz,
2069 liblz4],
2070 install_rpath : rootlibexecdir,
2071 install : true,
2072 install_dir : rootbindir)
5a8b1640 2073 public_programs += exe
5c23128d
ZJS
2074endif
2075
349cc4a5 2076if conf.get('ENABLE_IMPORTD') == 1
37efbbd8
ZJS
2077 executable('systemd-importd',
2078 systemd_importd_sources,
005a29f2 2079 include_directories : includes,
aac26058 2080 link_with : [libshared],
37efbbd8 2081 dependencies : [threads],
005a29f2
ZJS
2082 install_rpath : rootlibexecdir,
2083 install : true,
2084 install_dir : rootlibexecdir)
37efbbd8
ZJS
2085
2086 systemd_pull = executable('systemd-pull',
2087 systemd_pull_sources,
2088 include_directories : includes,
2089 link_with : [libshared],
2090 dependencies : [libcurl,
2091 libz,
2092 libbzip2,
2093 libxz,
2094 libgcrypt],
2095 install_rpath : rootlibexecdir,
2096 install : true,
2097 install_dir : rootlibexecdir)
2098
2099 systemd_import = executable('systemd-import',
2100 systemd_import_sources,
2101 include_directories : includes,
2102 link_with : [libshared],
2103 dependencies : [libcurl,
2104 libz,
2105 libbzip2,
2106 libxz],
2107 install_rpath : rootlibexecdir,
2108 install : true,
2109 install_dir : rootlibexecdir)
2110
2111 systemd_export = executable('systemd-export',
2112 systemd_export_sources,
2113 include_directories : includes,
2114 link_with : [libshared],
2115 dependencies : [libcurl,
2116 libz,
2117 libbzip2,
2118 libxz],
2119 install_rpath : rootlibexecdir,
2120 install : true,
2121 install_dir : rootlibexecdir)
2122 public_programs += [systemd_pull, systemd_import, systemd_export]
2123endif
2124
349cc4a5 2125if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
37efbbd8
ZJS
2126 exe = executable('systemd-journal-upload',
2127 systemd_journal_upload_sources,
2128 include_directories : includes,
2129 link_with : [libshared],
2130 dependencies : [threads,
2131 libcurl,
2132 libgnutls,
2133 libxz,
2134 liblz4],
2135 install_rpath : rootlibexecdir,
2136 install : true,
2137 install_dir : rootlibexecdir)
5a8b1640 2138 public_programs += exe
5c23128d
ZJS
2139endif
2140
349cc4a5 2141if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
37efbbd8
ZJS
2142 s_j_remote = executable('systemd-journal-remote',
2143 systemd_journal_remote_sources,
2144 include_directories : includes,
c064d8db
ZJS
2145 link_with : [libshared,
2146 libsystemd_journal_remote],
37efbbd8
ZJS
2147 dependencies : [threads,
2148 libmicrohttpd,
2149 libgnutls,
2150 libxz,
2151 liblz4],
2152 install_rpath : rootlibexecdir,
2153 install : true,
2154 install_dir : rootlibexecdir)
2155
2156 s_j_gatewayd = executable('systemd-journal-gatewayd',
2157 systemd_journal_gatewayd_sources,
2158 include_directories : includes,
2159 link_with : [libshared],
2160 dependencies : [threads,
2161 libmicrohttpd,
2162 libgnutls,
2163 libxz,
2164 liblz4],
2165 install_rpath : rootlibexecdir,
2166 install : true,
2167 install_dir : rootlibexecdir)
2168 public_programs += [s_j_remote, s_j_gatewayd]
5c23128d
ZJS
2169endif
2170
349cc4a5 2171if conf.get('ENABLE_COREDUMP') == 1
37efbbd8
ZJS
2172 executable('systemd-coredump',
2173 systemd_coredump_sources,
005a29f2 2174 include_directories : includes,
aac26058 2175 link_with : [libshared],
005a29f2 2176 dependencies : [threads,
37efbbd8
ZJS
2177 libacl,
2178 libdw,
005a29f2
ZJS
2179 libxz,
2180 liblz4],
2181 install_rpath : rootlibexecdir,
37efbbd8
ZJS
2182 install : true,
2183 install_dir : rootlibexecdir)
2184
2185 exe = executable('coredumpctl',
2186 coredumpctl_sources,
2187 include_directories : includes,
2188 link_with : [libshared],
2189 dependencies : [threads,
2190 libxz,
2191 liblz4],
2192 install_rpath : rootlibexecdir,
2193 install : true)
5a8b1640 2194 public_programs += exe
5c23128d
ZJS
2195endif
2196
349cc4a5 2197if conf.get('ENABLE_BINFMT') == 1
37efbbd8
ZJS
2198 exe = executable('systemd-binfmt',
2199 'src/binfmt/binfmt.c',
2200 include_directories : includes,
2201 link_with : [libshared],
2202 install_rpath : rootlibexecdir,
2203 install : true,
2204 install_dir : rootlibexecdir)
5a8b1640 2205 public_programs += exe
37efbbd8
ZJS
2206
2207 meson.add_install_script('sh', '-c',
2208 mkdir_p.format(binfmtdir))
2209 meson.add_install_script('sh', '-c',
2210 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2211endif
2212
349cc4a5 2213if conf.get('ENABLE_VCONSOLE') == 1
37efbbd8
ZJS
2214 executable('systemd-vconsole-setup',
2215 'src/vconsole/vconsole-setup.c',
005a29f2
ZJS
2216 include_directories : includes,
2217 link_with : [libshared],
2218 install_rpath : rootlibexecdir,
2219 install : true,
2220 install_dir : rootlibexecdir)
5c23128d
ZJS
2221endif
2222
349cc4a5 2223if conf.get('ENABLE_RANDOMSEED') == 1
37efbbd8
ZJS
2224 executable('systemd-random-seed',
2225 'src/random-seed/random-seed.c',
2226 include_directories : includes,
2227 link_with : [libshared],
2228 install_rpath : rootlibexecdir,
2229 install : true,
2230 install_dir : rootlibexecdir)
5c23128d
ZJS
2231endif
2232
349cc4a5 2233if conf.get('ENABLE_FIRSTBOOT') == 1
37efbbd8
ZJS
2234 executable('systemd-firstboot',
2235 'src/firstboot/firstboot.c',
2236 include_directories : includes,
2237 link_with : [libshared],
2238 dependencies : [libcrypt],
2239 install_rpath : rootlibexecdir,
2240 install : true,
2241 install_dir : rootbindir)
5c23128d
ZJS
2242endif
2243
2244executable('systemd-remount-fs',
2245 'src/remount-fs/remount-fs.c',
2246 'src/core/mount-setup.c',
2247 'src/core/mount-setup.h',
2248 include_directories : includes,
2249 link_with : [libshared],
b2fc5836 2250 install_rpath : rootlibexecdir,
5c23128d
ZJS
2251 install : true,
2252 install_dir : rootlibexecdir)
2253
2254executable('systemd-machine-id-setup',
2255 'src/machine-id-setup/machine-id-setup-main.c',
2256 'src/core/machine-id-setup.c',
2257 'src/core/machine-id-setup.h',
2258 include_directories : includes,
aac26058 2259 link_with : [libshared],
b2fc5836 2260 install_rpath : rootlibexecdir,
5c23128d
ZJS
2261 install : true,
2262 install_dir : rootbindir)
2263
2264executable('systemd-fsck',
2265 'src/fsck/fsck.c',
2266 include_directories : includes,
aac26058 2267 link_with : [libshared],
421f0012 2268 install_rpath : rootlibexecdir,
5c23128d
ZJS
2269 install : true,
2270 install_dir : rootlibexecdir)
2271
80750adb
ZJS
2272executable('systemd-growfs',
2273 'src/partition/growfs.c',
2274 include_directories : includes,
2275 link_with : [libshared],
c34b75a1 2276 dependencies : [libcryptsetup],
80750adb
ZJS
2277 install_rpath : rootlibexecdir,
2278 install : true,
2279 install_dir : rootlibexecdir)
2280
b7f28ac5
ZJS
2281executable('systemd-makefs',
2282 'src/partition/makefs.c',
2283 include_directories : includes,
2284 link_with : [libshared],
2285 install_rpath : rootlibexecdir,
2286 install : true,
2287 install_dir : rootlibexecdir)
2288
5c23128d
ZJS
2289executable('systemd-sleep',
2290 'src/sleep/sleep.c',
2291 include_directories : includes,
2292 link_with : [libshared],
421f0012 2293 install_rpath : rootlibexecdir,
5c23128d
ZJS
2294 install : true,
2295 install_dir : rootlibexecdir)
2296
005a29f2
ZJS
2297exe = executable('systemd-sysctl',
2298 'src/sysctl/sysctl.c',
2299 include_directories : includes,
2300 link_with : [libshared],
2301 install_rpath : rootlibexecdir,
2302 install : true,
2303 install_dir : rootlibexecdir)
5a8b1640 2304public_programs += exe
5c23128d
ZJS
2305
2306executable('systemd-ac-power',
2307 'src/ac-power/ac-power.c',
2308 include_directories : includes,
2309 link_with : [libshared],
421f0012 2310 install_rpath : rootlibexecdir,
5c23128d
ZJS
2311 install : true,
2312 install_dir : rootlibexecdir)
2313
005a29f2
ZJS
2314exe = executable('systemd-detect-virt',
2315 'src/detect-virt/detect-virt.c',
2316 include_directories : includes,
2317 link_with : [libshared],
2318 install_rpath : rootlibexecdir,
2319 install : true)
5a8b1640 2320public_programs += exe
005a29f2
ZJS
2321
2322exe = executable('systemd-delta',
2323 'src/delta/delta.c',
2324 include_directories : includes,
2325 link_with : [libshared],
2326 install_rpath : rootlibexecdir,
2327 install : true)
5a8b1640 2328public_programs += exe
005a29f2
ZJS
2329
2330exe = executable('systemd-escape',
2331 'src/escape/escape.c',
2332 include_directories : includes,
2333 link_with : [libshared],
2334 install_rpath : rootlibexecdir,
2335 install : true,
2336 install_dir : rootbindir)
5a8b1640 2337public_programs += exe
005a29f2
ZJS
2338
2339exe = executable('systemd-notify',
2340 'src/notify/notify.c',
2341 include_directories : includes,
2342 link_with : [libshared],
2343 install_rpath : rootlibexecdir,
2344 install : true,
2345 install_dir : rootbindir)
5a8b1640 2346public_programs += exe
5c23128d
ZJS
2347
2348executable('systemd-volatile-root',
2349 'src/volatile-root/volatile-root.c',
2350 include_directories : includes,
2351 link_with : [libshared],
421f0012 2352 install_rpath : rootlibexecdir,
5c23128d
ZJS
2353 install : true,
2354 install_dir : rootlibexecdir)
2355
2356executable('systemd-cgroups-agent',
2357 'src/cgroups-agent/cgroups-agent.c',
2358 include_directories : includes,
2359 link_with : [libshared],
421f0012 2360 install_rpath : rootlibexecdir,
5c23128d
ZJS
2361 install : true,
2362 install_dir : rootlibexecdir)
2363
0d1d512f
ZJS
2364exe = executable('systemd-id128',
2365 'src/id128/id128.c',
2366 include_directories : includes,
2367 link_with : [libshared],
2368 install_rpath : rootlibexecdir,
2369 install : true)
2370public_programs += exe
2371
005a29f2
ZJS
2372exe = executable('systemd-path',
2373 'src/path/path.c',
2374 include_directories : includes,
aac26058 2375 link_with : [libshared],
005a29f2
ZJS
2376 install_rpath : rootlibexecdir,
2377 install : true)
5a8b1640 2378public_programs += exe
005a29f2
ZJS
2379
2380exe = executable('systemd-ask-password',
2381 'src/ask-password/ask-password.c',
2382 include_directories : includes,
aac26058 2383 link_with : [libshared],
005a29f2
ZJS
2384 install_rpath : rootlibexecdir,
2385 install : true,
2386 install_dir : rootbindir)
5a8b1640 2387public_programs += exe
5c23128d
ZJS
2388
2389executable('systemd-reply-password',
2390 'src/reply-password/reply-password.c',
2391 include_directories : includes,
aac26058 2392 link_with : [libshared],
421f0012 2393 install_rpath : rootlibexecdir,
5c23128d
ZJS
2394 install : true,
2395 install_dir : rootlibexecdir)
2396
005a29f2
ZJS
2397exe = executable('systemd-tty-ask-password-agent',
2398 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2399 include_directories : includes,
aac26058 2400 link_with : [libshared],
005a29f2
ZJS
2401 install_rpath : rootlibexecdir,
2402 install : true,
2403 install_dir : rootbindir)
5a8b1640 2404public_programs += exe
005a29f2
ZJS
2405
2406exe = executable('systemd-cgls',
2407 'src/cgls/cgls.c',
2408 include_directories : includes,
aac26058 2409 link_with : [libshared],
005a29f2
ZJS
2410 install_rpath : rootlibexecdir,
2411 install : true)
5a8b1640 2412public_programs += exe
005a29f2
ZJS
2413
2414exe = executable('systemd-cgtop',
2415 'src/cgtop/cgtop.c',
2416 include_directories : includes,
aac26058 2417 link_with : [libshared],
005a29f2
ZJS
2418 install_rpath : rootlibexecdir,
2419 install : true)
5a8b1640 2420public_programs += exe
5c23128d
ZJS
2421
2422executable('systemd-initctl',
2423 'src/initctl/initctl.c',
2424 include_directories : includes,
aac26058 2425 link_with : [libshared],
421f0012 2426 install_rpath : rootlibexecdir,
5c23128d
ZJS
2427 install : true,
2428 install_dir : rootlibexecdir)
2429
005a29f2
ZJS
2430exe = executable('systemd-mount',
2431 'src/mount/mount-tool.c',
2432 include_directories : includes,
34ce0a52 2433 link_with : [libshared],
005a29f2
ZJS
2434 install_rpath : rootlibexecdir,
2435 install : true)
5a8b1640 2436public_programs += exe
5c23128d 2437
7b76fce1 2438meson.add_install_script(meson_make_symlink,
e17e5ba9 2439 'systemd-mount', join_paths(bindir, 'systemd-umount'))
7b76fce1 2440
005a29f2
ZJS
2441exe = executable('systemd-run',
2442 'src/run/run.c',
2443 include_directories : includes,
aac26058 2444 link_with : [libshared],
005a29f2
ZJS
2445 install_rpath : rootlibexecdir,
2446 install : true)
5a8b1640 2447public_programs += exe
005a29f2
ZJS
2448
2449exe = executable('systemd-stdio-bridge',
2450 'src/stdio-bridge/stdio-bridge.c',
2451 include_directories : includes,
aac26058 2452 link_with : [libshared],
005a29f2
ZJS
2453 install_rpath : rootlibexecdir,
2454 install : true)
5a8b1640 2455public_programs += exe
005a29f2
ZJS
2456
2457exe = executable('busctl',
2458 'src/busctl/busctl.c',
2459 'src/busctl/busctl-introspect.c',
2460 'src/busctl/busctl-introspect.h',
2461 include_directories : includes,
aac26058 2462 link_with : [libshared],
005a29f2
ZJS
2463 install_rpath : rootlibexecdir,
2464 install : true)
5a8b1640 2465public_programs += exe
5c23128d 2466
349cc4a5 2467if conf.get('ENABLE_SYSUSERS') == 1
37efbbd8
ZJS
2468 exe = executable('systemd-sysusers',
2469 'src/sysusers/sysusers.c',
2470 include_directories : includes,
2471 link_with : [libshared],
2472 install_rpath : rootlibexecdir,
2473 install : true,
2474 install_dir : rootbindir)
5a8b1640 2475 public_programs += exe
5c23128d
ZJS
2476endif
2477
349cc4a5 2478if conf.get('ENABLE_TMPFILES') == 1
37efbbd8
ZJS
2479 exe = executable('systemd-tmpfiles',
2480 'src/tmpfiles/tmpfiles.c',
2481 include_directories : includes,
2482 link_with : [libshared],
2483 dependencies : [libacl],
2484 install_rpath : rootlibexecdir,
2485 install : true,
2486 install_dir : rootbindir)
5a8b1640 2487 public_programs += exe
d9daae55 2488
938be089
ZJS
2489 if want_tests != 'false'
2490 test('test-systemd-tmpfiles',
2491 test_systemd_tmpfiles_py,
2492 # https://github.com/mesonbuild/meson/issues/2681
2493 args : exe.full_path())
2494 endif
5c23128d
ZJS
2495endif
2496
349cc4a5 2497if conf.get('ENABLE_HWDB') == 1
37efbbd8
ZJS
2498 exe = executable('systemd-hwdb',
2499 'src/hwdb/hwdb.c',
2500 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2501 include_directories : includes,
0c06b506 2502 link_with : [libudev_static],
0da6f396 2503 install_rpath : udev_rpath,
37efbbd8
ZJS
2504 install : true,
2505 install_dir : rootbindir)
5a8b1640 2506 public_programs += exe
37efbbd8
ZJS
2507endif
2508
349cc4a5 2509if conf.get('ENABLE_QUOTACHECK') == 1
37efbbd8
ZJS
2510 executable('systemd-quotacheck',
2511 'src/quotacheck/quotacheck.c',
005a29f2 2512 include_directories : includes,
aac26058 2513 link_with : [libshared],
005a29f2
ZJS
2514 install_rpath : rootlibexecdir,
2515 install : true,
37efbbd8 2516 install_dir : rootlibexecdir)
5c23128d
ZJS
2517endif
2518
005a29f2
ZJS
2519exe = executable('systemd-socket-proxyd',
2520 'src/socket-proxy/socket-proxyd.c',
2521 include_directories : includes,
aac26058 2522 link_with : [libshared],
005a29f2
ZJS
2523 dependencies : [threads],
2524 install_rpath : rootlibexecdir,
2525 install : true,
2526 install_dir : rootlibexecdir)
5a8b1640 2527public_programs += exe
005a29f2
ZJS
2528
2529exe = executable('systemd-udevd',
2530 systemd_udevd_sources,
2531 include_directories : includes,
c1cd6743 2532 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
005a29f2 2533 link_with : [libudev_core,
005a29f2 2534 libsystemd_network,
0c06b506 2535 libudev_static],
3a30f21f
ZJS
2536 dependencies : [threads,
2537 libkmod,
005a29f2 2538 libidn,
aac26058
ZJS
2539 libacl,
2540 libblkid],
1aec3ed9 2541 install_rpath : udev_rpath,
005a29f2
ZJS
2542 install : true,
2543 install_dir : rootlibexecdir)
5a8b1640 2544public_programs += exe
005a29f2
ZJS
2545
2546exe = executable('udevadm',
2547 udevadm_sources,
c1cd6743 2548 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
005a29f2
ZJS
2549 include_directories : includes,
2550 link_with : [libudev_core,
005a29f2 2551 libsystemd_network,
0c06b506 2552 libudev_static],
3a30f21f
ZJS
2553 dependencies : [threads,
2554 libkmod,
005a29f2 2555 libidn,
aac26058
ZJS
2556 libacl,
2557 libblkid],
1aec3ed9 2558 install_rpath : udev_rpath,
005a29f2
ZJS
2559 install : true,
2560 install_dir : rootbindir)
5a8b1640 2561public_programs += exe
5c23128d
ZJS
2562
2563executable('systemd-shutdown',
2564 systemd_shutdown_sources,
2565 include_directories : includes,
34ce0a52 2566 link_with : [libshared],
95b862b0 2567 dependencies : [libmount],
421f0012 2568 install_rpath : rootlibexecdir,
5c23128d
ZJS
2569 install : true,
2570 install_dir : rootlibexecdir)
2571
2572executable('systemd-update-done',
2573 'src/update-done/update-done.c',
2574 include_directories : includes,
2575 link_with : [libshared],
421f0012 2576 install_rpath : rootlibexecdir,
5c23128d
ZJS
2577 install : true,
2578 install_dir : rootlibexecdir)
2579
2580executable('systemd-update-utmp',
2581 'src/update-utmp/update-utmp.c',
2582 include_directories : includes,
aac26058 2583 link_with : [libshared],
5c23128d 2584 dependencies : [libaudit],
421f0012 2585 install_rpath : rootlibexecdir,
5c23128d
ZJS
2586 install : true,
2587 install_dir : rootlibexecdir)
2588
349cc4a5 2589if conf.get('HAVE_KMOD') == 1
37efbbd8
ZJS
2590 executable('systemd-modules-load',
2591 'src/modules-load/modules-load.c',
2592 include_directories : includes,
2593 link_with : [libshared],
2594 dependencies : [libkmod],
2595 install_rpath : rootlibexecdir,
2596 install : true,
2597 install_dir : rootlibexecdir)
94e75a54 2598
37efbbd8
ZJS
2599 meson.add_install_script('sh', '-c',
2600 mkdir_p.format(modulesloaddir))
2601 meson.add_install_script('sh', '-c',
2602 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
5c23128d
ZJS
2603endif
2604
005a29f2
ZJS
2605exe = executable('systemd-nspawn',
2606 systemd_nspawn_sources,
2607 'src/core/mount-setup.c', # FIXME: use a variable?
2608 'src/core/mount-setup.h',
2609 'src/core/loopback-setup.c',
2610 'src/core/loopback-setup.h',
97d90615
ZJS
2611 include_directories : includes,
2612 link_with : [libnspawn_core,
2613 libshared],
2614 dependencies : [libblkid],
005a29f2
ZJS
2615 install_rpath : rootlibexecdir,
2616 install : true)
5a8b1640 2617public_programs += exe
5c23128d 2618
349cc4a5 2619if conf.get('ENABLE_NETWORKD') == 1
37efbbd8
ZJS
2620 executable('systemd-networkd',
2621 systemd_networkd_sources,
2622 include_directories : includes,
2623 link_with : [libnetworkd_core,
37efbbd8 2624 libsystemd_network,
0c06b506 2625 libudev_static,
37efbbd8 2626 libshared],
4b57a272 2627 dependencies : [threads],
37efbbd8
ZJS
2628 install_rpath : rootlibexecdir,
2629 install : true,
2630 install_dir : rootlibexecdir)
2631
2632 executable('systemd-networkd-wait-online',
2633 systemd_networkd_wait_online_sources,
2634 include_directories : includes,
2635 link_with : [libnetworkd_core,
2636 libshared],
2637 install_rpath : rootlibexecdir,
2638 install : true,
2639 install_dir : rootlibexecdir)
5c23128d 2640
dcfe072a
FS
2641 exe = executable('networkctl',
2642 networkctl_sources,
2643 include_directories : includes,
2644 link_with : [libsystemd_network,
aac26058 2645 libshared],
dcfe072a
FS
2646 install_rpath : rootlibexecdir,
2647 install : true,
2648 install_dir : rootbindir)
5a8b1640 2649 public_programs += exe
dcfe072a 2650endif
e821f6a9
ZJS
2651
2652executable('systemd-sulogin-shell',
2653 ['src/sulogin-shell/sulogin-shell.c'],
2654 include_directories : includes,
2655 link_with : [libshared],
2656 install_rpath : rootlibexecdir,
2657 install : true,
2658 install_dir : rootlibexecdir)
2659
69e96427
ZJS
2660############################################################
2661
e2d41370
FB
2662custom_target(
2663 'systemd-runtest.env',
2664 output : 'systemd-runtest.env',
2665 command : ['sh', '-c', '{ ' +
2666 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(meson.current_source_dir(), 'test')) +
49cdae63 2667 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
e2d41370
FB
2668 '} >@OUTPUT@'],
2669 build_by_default : true)
2670
69e96427 2671foreach tuple : tests
37efbbd8
ZJS
2672 sources = tuple[0]
2673 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2674 dependencies = tuple[2]
2675 condition = tuple.length() >= 4 ? tuple[3] : ''
2676 type = tuple.length() >= 5 ? tuple[4] : ''
2677 defs = tuple.length() >= 6 ? tuple[5] : []
2678 incs = tuple.length() >= 7 ? tuple[6] : includes
2679 timeout = 30
2680
2681 name = sources[0].split('/')[-1].split('.')[0]
2682 if type.startswith('timeout=')
2683 timeout = type.split('=')[1].to_int()
2684 type = ''
2685 endif
3b2bdd62
ZJS
2686
2687 if condition == '' or conf.get(condition) == 1
37efbbd8
ZJS
2688 exe = executable(
2689 name,
2690 sources,
2691 include_directories : incs,
2692 link_with : link_with,
2693 dependencies : dependencies,
2694 c_args : defs,
3b2bdd62 2695 build_by_default : want_tests != 'false',
37efbbd8 2696 install_rpath : rootlibexecdir,
7cdd9783
MB
2697 install : install_tests,
2698 install_dir : join_paths(testsdir, type))
37efbbd8
ZJS
2699
2700 if type == 'manual'
2701 message('@0@ is a manual test'.format(name))
2702 elif type == 'unsafe' and want_tests != 'unsafe'
2703 message('@0@ is an unsafe test'.format(name))
3b2bdd62 2704 elif want_tests != 'false'
37efbbd8
ZJS
2705 test(name, exe,
2706 env : test_env,
2707 timeout : timeout)
2708 endif
2709 else
2710 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2711 endif
69e96427
ZJS
2712endforeach
2713
0632b4cd 2714exe = executable(
37efbbd8
ZJS
2715 'test-libsystemd-sym',
2716 test_libsystemd_sym_c,
2717 include_directories : includes,
2718 link_with : [libsystemd],
fd1939fb 2719 build_by_default : want_tests != 'false',
37efbbd8
ZJS
2720 install : install_tests,
2721 install_dir : testsdir)
938be089
ZJS
2722if want_tests != 'false'
2723 test('test-libsystemd-sym', exe)
2724endif
37ab1a25 2725
0632b4cd
ZJS
2726exe = executable(
2727 'test-libsystemd-static-sym',
2728 test_libsystemd_sym_c,
2729 include_directories : includes,
0632b4cd
ZJS
2730 link_with : [install_libsystemd_static],
2731 dependencies : [threads], # threads is already included in dependencies on the library,
2732 # but does not seem to get propagated. Add here as a work-around.
fd1939fb 2733 build_by_default : want_tests != 'false' and static_libsystemd_pic,
20f3d32d 2734 install : install_tests and static_libsystemd_pic,
0632b4cd 2735 install_dir : testsdir)
938be089 2736if want_tests != 'false' and static_libsystemd_pic
0632b4cd
ZJS
2737 test('test-libsystemd-static-sym', exe)
2738endif
37ab1a25 2739
0632b4cd 2740exe = executable(
37efbbd8
ZJS
2741 'test-libudev-sym',
2742 test_libudev_sym_c,
2743 include_directories : includes,
c1cd6743 2744 c_args : '-Wno-deprecated-declarations',
37efbbd8 2745 link_with : [libudev],
fd1939fb 2746 build_by_default : want_tests != 'false',
37efbbd8
ZJS
2747 install : install_tests,
2748 install_dir : testsdir)
938be089
ZJS
2749if want_tests != 'false'
2750 test('test-libudev-sym', exe)
2751endif
0632b4cd
ZJS
2752
2753exe = executable(
2754 'test-libudev-static-sym',
2755 test_libudev_sym_c,
2756 include_directories : includes,
c1cd6743 2757 c_args : '-Wno-deprecated-declarations',
0632b4cd 2758 link_with : [install_libudev_static],
fd1939fb 2759 build_by_default : want_tests != 'false' and static_libudev_pic,
20f3d32d 2760 install : install_tests and static_libudev_pic,
0632b4cd 2761 install_dir : testsdir)
938be089 2762if want_tests != 'false' and static_libudev_pic
0632b4cd
ZJS
2763 test('test-libudev-static-sym', exe)
2764endif
e0bec52f 2765
69e96427 2766############################################################
5c23128d 2767
7db7d5b7
JR
2768fuzzer_exes = []
2769
2770foreach tuple : fuzzers
2771 sources = tuple[0]
2772 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2773 dependencies = tuple[2]
2774 defs = tuple.length() >= 4 ? tuple[3] : []
2775 incs = tuple.length() >= 5 ? tuple[4] : includes
2776
31e57a35 2777 if fuzzer_build
7db7d5b7
JR
2778 dependencies += fuzzing_engine
2779 else
2780 sources += 'src/fuzz/fuzz-main.c'
2781 endif
2782
2783 name = sources[0].split('/')[-1].split('.')[0]
2784
2785 fuzzer_exes += executable(
2786 name,
2787 sources,
2788 include_directories : [incs, include_directories('src/fuzz')],
2789 link_with : link_with,
2790 dependencies : dependencies,
2791 c_args : defs,
2792 install : false)
2793endforeach
2794
2795run_target('fuzzers',
2796 depends : fuzzer_exes,
2797 command : ['true'])
2798
2799############################################################
2800
5c23128d
ZJS
2801make_directive_index_py = find_program('tools/make-directive-index.py')
2802make_man_index_py = find_program('tools/make-man-index.py')
b184e8fe 2803xml_helper_py = find_program('tools/xml_helper.py')
abba22c5 2804hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
5c23128d
ZJS
2805
2806subdir('units')
2807subdir('sysctl.d')
2808subdir('sysusers.d')
2809subdir('tmpfiles.d')
e783f957 2810subdir('presets')
5c23128d
ZJS
2811subdir('hwdb')
2812subdir('network')
2813subdir('man')
2814subdir('shell-completion/bash')
2815subdir('shell-completion/zsh')
9e825ebf
FB
2816subdir('docs/sysvinit')
2817subdir('docs/var-log')
5c23128d 2818
5c23128d
ZJS
2819install_subdir('factory/etc',
2820 install_dir : factorydir)
2821
5c23128d
ZJS
2822install_data('xorg/50-systemd-user.sh',
2823 install_dir : xinitrcdir)
582faeb4
DJL
2824install_data('modprobe.d/systemd.conf',
2825 install_dir : modprobedir)
f09eb768 2826install_data('LICENSE.GPL2',
5c23128d 2827 'LICENSE.LGPL2.1',
f09eb768
LP
2828 'NEWS',
2829 'README',
9e825ebf 2830 'docs/CODING_STYLE',
1d1cb168 2831 'docs/DISTRO_PORTING.md',
9e825ebf
FB
2832 'docs/ENVIRONMENT.md',
2833 'docs/HACKING',
2834 'docs/TRANSIENT-SETTINGS.md',
b6dc0d7d 2835 'docs/TRANSLATORS.md',
9e825ebf 2836 'docs/UIDS-GIDS.md',
5c23128d
ZJS
2837 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2838 install_dir : docdir)
d68b342b 2839
94e75a54
ZJS
2840meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2841meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2842
d68b342b
ZJS
2843############################################################
2844
005a29f2
ZJS
2845meson_check_help = find_program('tools/meson-check-help.sh')
2846
2847foreach exec : public_programs
37efbbd8 2848 name = exec.full_path().split('/')[-1]
938be089
ZJS
2849 if want_tests != 'false'
2850 test('check-help-' + name,
2851 meson_check_help,
c1cd6743 2852 args : exec.full_path())
938be089 2853 endif
005a29f2
ZJS
2854endforeach
2855
2856############################################################
2857
52d4d1d3
ZJS
2858# Enable tests for all supported sanitizers
2859foreach tuple : sanitizers
2860 sanitizer = tuple[0]
2861 build = tuple[1]
b68dfb9e 2862
7a6397d2 2863 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
52d4d1d3
ZJS
2864 prev = ''
2865 foreach p : fuzz_regression_tests
2866 b = p.split('/')[-2]
2867 c = p.split('/')[-1]
2868
2869 name = '@0@:@1@'.format(b, sanitizer)
2870
2871 if name != prev
2872 if want_tests == 'false'
2873 message('Not compiling @0@ because tests is set to false'.format(name))
2874 elif slow_tests
2875 exe = custom_target(
2876 name,
2877 output : name,
2878 depends : build,
2879 command : [env, 'ln', '-fs',
2880 join_paths(build.full_path(), b),
2881 '@OUTPUT@'],
2882 build_by_default : true)
2883 else
2884 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2885 endif
2886 endif
2887 prev = name
2888
2889 if want_tests != 'false' and slow_tests
2890 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2891 env,
2892 args : [exe.full_path(),
e6bad674 2893 join_paths(meson.source_root(), p)])
52d4d1d3
ZJS
2894 endif
2895 endforeach
b68dfb9e
ZJS
2896 endif
2897endforeach
2898
52d4d1d3 2899
b68dfb9e
ZJS
2900############################################################
2901
0700e8ba 2902if git.found()
37efbbd8
ZJS
2903 all_files = run_command(
2904 git,
243e5cec 2905 ['--git-dir=@0@/.git'.format(meson.source_root()),
37efbbd8
ZJS
2906 'ls-files',
2907 ':/*.[ch]'])
2908 all_files = files(all_files.stdout().split())
d68b342b 2909
e85a690b 2910 custom_target(
0700e8ba 2911 'tags',
e85a690b 2912 output : 'tags',
243e5cec 2913 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.source_root())] + all_files)
2f09974f 2914 run_target(
0700e8ba 2915 'ctags',
243e5cec 2916 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.source_root())] + all_files)
d68b342b 2917endif
177929c2
ZJS
2918
2919if git.found()
37efbbd8 2920 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
a923e085 2921 run_target(
37efbbd8 2922 'git-contrib',
37efbbd8 2923 command : [meson_git_contrib_sh])
177929c2 2924endif
dd6ab3df
ZJS
2925
2926if git.found()
2927 git_head = run_command(
2928 git,
243e5cec 2929 ['--git-dir=@0@/.git'.format(meson.source_root()),
dd6ab3df
ZJS
2930 'rev-parse', 'HEAD']).stdout().strip()
2931 git_head_short = run_command(
2932 git,
243e5cec 2933 ['--git-dir=@0@/.git'.format(meson.source_root()),
dd6ab3df
ZJS
2934 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2935
2936 run_target(
2937 'git-snapshot',
2938 command : ['git', 'archive',
243e5cec 2939 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.source_root(),
dd6ab3df
ZJS
2940 git_head_short),
2941 '--prefix', 'systemd-@0@/'.format(git_head),
2942 'HEAD'])
2943endif
829257d1
ZJS
2944
2945############################################################
2946
51b13863
LP
2947meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
2948run_target(
2949 'check-api-docs',
2950 depends : [man, libsystemd, libudev],
2951 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
2952
0bc7a22d
LP
2953run_target(
2954 'make-index-md',
2955 command : ['sh', '@0@/tools/make-index-md.sh'.format(meson.source_root()), meson.source_root()])
2956
51b13863
LP
2957############################################################
2958
829257d1
ZJS
2959status = [
2960 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2961
2675413e 2962 'split /usr: @0@'.format(split_usr),
157baa87 2963 'split bin-sbin: @0@'.format(split_bin),
359b496f
YW
2964 'prefix directory: @0@'.format(prefixdir),
2965 'rootprefix directory: @0@'.format(rootprefixdir),
2966 'sysconf directory: @0@'.format(sysconfdir),
2967 'include directory: @0@'.format(includedir),
2968 'lib directory: @0@'.format(libdir),
2969 'rootlib directory: @0@'.format(rootlibdir),
829257d1
ZJS
2970 'SysV init scripts: @0@'.format(sysvinit_path),
2971 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
359b496f
YW
2972 'PAM modules directory: @0@'.format(pamlibdir),
2973 'PAM configuration directory: @0@'.format(pamconfdir),
2974 'RPM macros directory: @0@'.format(rpmmacrosdir),
2975 'modprobe.d directory: @0@'.format(modprobedir),
2976 'D-Bus policy directory: @0@'.format(dbuspolicydir),
2977 'D-Bus session directory: @0@'.format(dbussessionservicedir),
2978 'D-Bus system directory: @0@'.format(dbussystemservicedir),
2979 'bash completions directory: @0@'.format(bashcompletiondir),
2980 'zsh completions directory: @0@'.format(zshcompletiondir),
829257d1
ZJS
2981 'extra start script: @0@'.format(get_option('rc-local')),
2982 'extra stop script: @0@'.format(get_option('halt-local')),
2983 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2984 get_option('debug-tty')),
2985 'TTY GID: @0@'.format(tty_gid),
ac09340e 2986 'users GID: @0@'.format(substs.get('USERS_GID')),
829257d1
ZJS
2987 'maximum system UID: @0@'.format(system_uid_max),
2988 'maximum system GID: @0@'.format(system_gid_max),
87d5e4f2
LP
2989 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
2990 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
2991 'minimum container UID base: @0@'.format(container_uid_base_min),
2992 'maximum container UID base: @0@'.format(container_uid_base_max),
829257d1 2993 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
4e15a734 2994 'render group access mode: @0@'.format(get_option('group-render-mode')),
359b496f 2995 'certificate root directory: @0@'.format(get_option('certificate-root')),
829257d1 2996 'support URL: @0@'.format(support_url),
afde4574
LP
2997 'nobody user name: @0@'.format(nobody_user),
2998 'nobody group name: @0@'.format(nobody_group),
829257d1 2999 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
5248e7e1 3000 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
829257d1
ZJS
3001
3002 'default DNSSEC mode: @0@'.format(default_dnssec),
c9299be2 3003 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
829257d1
ZJS
3004 'default cgroup hierarchy: @0@'.format(default_hierarchy),
3005 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
3006
3007alt_dns_servers = '\n '.join(dns_servers.split(' '))
3008alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3009status += [
3010 'default DNS servers: @0@'.format(alt_dns_servers),
3011 'default NTP servers: @0@'.format(alt_ntp_servers)]
3012
3013alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3014 '@@0@'.format(time_epoch)).stdout().strip()
3015status += [
3016 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3017
19d8c9c9 3018status += [
abc8caf7
ZJS
3019 'static libsystemd: @0@'.format(static_libsystemd),
3020 'static libudev: @0@'.format(static_libudev)]
19d8c9c9 3021
829257d1
ZJS
3022# TODO:
3023# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3024# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3025# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3026
349cc4a5 3027if conf.get('ENABLE_EFI') == 1
5a8b1640 3028 status += 'efi arch: @0@'.format(efi_arch)
829257d1
ZJS
3029
3030 if have_gnu_efi
3031 status += [
3032 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
3033 'EFI CC @0@'.format(efi_cc),
359b496f
YW
3034 'EFI lib directory: @0@'.format(efi_libdir),
3035 'EFI lds directory: @0@'.format(efi_ldsdir),
3036 'EFI include directory: @0@'.format(efi_incdir)]
829257d1
ZJS
3037 endif
3038endif
3039
3040found = []
3041missing = []
3042
3043foreach tuple : [
3044 ['libcryptsetup'],
3045 ['PAM'],
3046 ['AUDIT'],
3047 ['IMA'],
3048 ['AppArmor'],
3049 ['SELinux'],
3050 ['SECCOMP'],
3051 ['SMACK'],
3052 ['zlib'],
3053 ['xz'],
3054 ['lz4'],
3055 ['bzip2'],
3056 ['ACL'],
3057 ['gcrypt'],
3058 ['qrencode'],
3059 ['microhttpd'],
3060 ['gnutls'],
096cbdce 3061 ['openssl'],
829257d1 3062 ['libcurl'],
d1bf5675 3063 ['idn'],
87057e24 3064 ['libidn2'],
829257d1
ZJS
3065 ['libidn'],
3066 ['libiptc'],
3067 ['elfutils'],
3068 ['binfmt'],
3069 ['vconsole'],
3070 ['quotacheck'],
3071 ['tmpfiles'],
3072 ['environment.d'],
3073 ['sysusers'],
3074 ['firstboot'],
3075 ['randomseed'],
3076 ['backlight'],
3077 ['rfkill'],
3078 ['logind'],
3079 ['machined'],
61d0578b 3080 ['portabled'],
829257d1
ZJS
3081 ['importd'],
3082 ['hostnamed'],
3083 ['timedated'],
3084 ['timesyncd'],
3085 ['localed'],
3086 ['networkd'],
a7456af5 3087 ['resolve'],
096cbdce
IT
3088 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3089 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
829257d1
ZJS
3090 ['coredump'],
3091 ['polkit'],
3092 ['legacy pkla', install_polkit_pkla],
3093 ['efi'],
3094 ['gnu-efi', have_gnu_efi],
3095 ['kmod'],
3096 ['xkbcommon'],
c4c978a0 3097 ['pcre2'],
829257d1
ZJS
3098 ['blkid'],
3099 ['dbus'],
3100 ['glib'],
6bd2bc8e
ZJS
3101 ['nss-myhostname'],
3102 ['nss-mymachines'],
3103 ['nss-resolve'],
3104 ['nss-systemd'],
829257d1
ZJS
3105 ['hwdb'],
3106 ['tpm'],
3107 ['man pages', want_man],
3108 ['html pages', want_html],
3109 ['man page indices', want_man and have_lxml],
829257d1
ZJS
3110 ['SysV compat'],
3111 ['utmp'],
3112 ['ldconfig'],
3113 ['hibernate'],
3114 ['adm group', get_option('adm-group')],
3115 ['wheel group', get_option('wheel-group')],
b14e1b43 3116 ['gshadow'],
829257d1
ZJS
3117 ['debug hashmap'],
3118 ['debug mmap cache'],
d18cb393 3119 ['valgrind', conf.get('VALGRIND') == 1],
fd5dec9a 3120 ['trace logging', conf.get('LOG_TRACE') == 1],
19d8c9c9
LP
3121 ['link-udev-shared', get_option('link-udev-shared')],
3122 ['link-systemctl-shared', get_option('link-systemctl-shared')],
829257d1
ZJS
3123]
3124
af4d7860
ZJS
3125 if tuple.length() >= 2
3126 cond = tuple[1]
3127 else
829257d1
ZJS
3128 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3129 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
349cc4a5 3130 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
829257d1
ZJS
3131 endif
3132 if cond
5a8b1640 3133 found += tuple[0]
829257d1 3134 else
5a8b1640 3135 missing += tuple[0]
829257d1
ZJS
3136 endif
3137endforeach
3138
3139status += [
9d39c1bf 3140 '',
829257d1 3141 'enabled features: @0@'.format(', '.join(found)),
9d39c1bf
ZJS
3142 '',
3143 'disabled features: @0@'.format(', '.join(missing)),
3144 '']
829257d1 3145message('\n '.join(status))
9a8e64b0
ZJS
3146
3147if rootprefixdir != rootprefix_default
8ea9fad7
YW
3148 warning('\n' +
3149 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3150 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3151 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
9a8e64b0 3152endif