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