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