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