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