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