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