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