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