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