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