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