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