1 project('systemd', 'c',
10 meson_version : '>= 0.40',
13 libsystemd_version = '0.19.0'
14 libudev_version = '1.6.6'
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
20 conf = configuration_data()
21 conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
22 conf.set_quoted('PACKAGE_VERSION', meson.project_version())
24 substs = configuration_data()
25 substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
26 substs.set('PACKAGE_VERSION', meson.project_version())
30 #####################################################################
32 # Try to install the git pre-commit hook
33 git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
34 if git_hook.returncode() == 0
35 message(git_hook.stdout().strip())
38 #####################################################################
40 rootprefixdir = get_option('rootprefix')
41 if get_option('split-usr')
42 conf.set('HAVE_SPLIT_USR', true)
43 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/'
45 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/usr'
48 sysvinit_path = get_option('sysvinit-path')
49 sysvrcnd_path = get_option('sysvrcnd-path')
50 if sysvinit_path != '' or sysvrcnd_path != ''
51 conf.set('HAVE_SYSV_COMPAT', true,
52 description : 'SysV init scripts and rcN.d links are supported')
53 m4_defines += ['-DHAVE_SYSV_COMPAT']
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.
59 prefixdir = get_option('prefix')
60 if not prefixdir.startswith('/')
61 error('Prefix is not absolute: "@0@"'.format(prefixdir))
63 bindir = join_paths(prefixdir, get_option('bindir'))
64 libdir = join_paths(prefixdir, get_option('libdir'))
65 sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
66 includedir = join_paths(prefixdir, get_option('includedir'))
67 datadir = join_paths(prefixdir, get_option('datadir'))
68 localstatedir = join_paths('/', get_option('localstatedir'))
70 rootbindir = join_paths(rootprefixdir, 'bin')
71 rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
73 rootlibdir = get_option('rootlibdir')
75 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
78 # Dirs of external packages
79 pkgconfigdatadir = join_paths(datadir, 'pkgconfig')
80 pkgconfiglibdir = join_paths(libdir, 'pkgconfig')
81 polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
82 polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
83 polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
84 varlogdir = join_paths(localstatedir, 'log')
85 xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
86 rpmmacrosdir = get_option('rpmmacrosdir')
87 modprobedir = join_paths(prefixdir, 'lib/modprobe.d')
90 pkgdatadir = join_paths(datadir, 'systemd')
91 environmentdir = join_paths(prefixdir, 'lib/environment.d')
92 pkgsysconfdir = join_paths(sysconfdir, 'systemd')
93 userunitdir = join_paths(prefixdir, 'lib/systemd/user')
94 userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
95 tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
96 sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
97 sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
98 binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
99 modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
100 networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
101 pkgincludedir = join_paths(includedir, 'systemd')
102 systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
103 usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
104 systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
105 userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
106 systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
107 systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
108 systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
109 systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
110 udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
111 udevhomedir = udevlibexecdir
112 udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
113 udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
114 catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
115 kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
116 factorydir = join_paths(datadir, 'factory')
117 docdir = join_paths(datadir, 'doc/systemd')
118 bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
119 testsdir = join_paths(prefixdir, 'lib/systemd/tests')
120 systemdstatedir = join_paths(localstatedir, 'lib/systemd')
121 catalogstatedir = join_paths(systemdstatedir, 'catalog')
122 randomseeddir = join_paths(localstatedir, 'lib/systemd')
124 dbuspolicydir = get_option('dbuspolicydir')
125 if dbuspolicydir == ''
126 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
129 dbussessionservicedir = get_option('dbussessionservicedir')
130 if dbussessionservicedir == ''
131 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
134 dbussystemservicedir = get_option('dbussystemservicedir')
135 if dbussystemservicedir == ''
136 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
139 pamlibdir = get_option('pamlibdir')
141 pamlibdir = join_paths(rootlibdir, 'security')
144 pamconfdir = get_option('pamconfdir')
146 pamconfdir = join_paths(sysconfdir, 'pam.d')
149 conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
150 conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
151 conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
152 conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
153 conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
154 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
155 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
156 conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
157 conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
158 conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
159 conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
160 conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
161 conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
162 conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
163 conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
164 conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
165 conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
166 conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
167 conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
168 conf.set_quoted('ROOTPREFIX', rootprefixdir)
169 conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
170 conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
171 conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
172 conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
173 conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
174 conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
175 conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
176 conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
177 conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
178 conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
179 conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
180 conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
181 conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
182 conf.set_quoted('LIBDIR', libdir)
183 conf.set_quoted('ROOTLIBDIR', rootlibdir)
184 conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
185 conf.set_quoted('BOOTLIBDIR', bootlibdir)
186 conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
187 conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
188 conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
189 conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
190 conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
191 conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
193 conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
194 conf.set_quoted('ABS_SRC_DIR', meson.source_root())
196 substs.set('prefix', prefixdir)
197 substs.set('exec_prefix', prefixdir)
198 substs.set('libdir', libdir)
199 substs.set('rootlibdir', rootlibdir)
200 substs.set('includedir', includedir)
201 substs.set('pkgsysconfdir', pkgsysconfdir)
202 substs.set('bindir', bindir)
203 substs.set('rootbindir', rootbindir)
204 substs.set('rootlibexecdir', rootlibexecdir)
205 substs.set('systemunitdir', systemunitdir)
206 substs.set('userunitdir', userunitdir)
207 substs.set('systempresetdir', systempresetdir)
208 substs.set('userpresetdir', userpresetdir)
209 substs.set('udevhwdbdir', udevhwdbdir)
210 substs.set('udevrulesdir', udevrulesdir)
211 substs.set('udevlibexecdir', udevlibexecdir)
212 substs.set('catalogdir', catalogdir)
213 substs.set('tmpfilesdir', tmpfilesdir)
214 substs.set('sysusersdir', sysusersdir)
215 substs.set('sysctldir', sysctldir)
216 substs.set('binfmtdir', binfmtdir)
217 substs.set('modulesloaddir', modulesloaddir)
218 substs.set('systemgeneratordir', systemgeneratordir)
219 substs.set('usergeneratordir', usergeneratordir)
220 substs.set('systemenvgeneratordir', systemenvgeneratordir)
221 substs.set('userenvgeneratordir', userenvgeneratordir)
222 substs.set('systemshutdowndir', systemshutdowndir)
223 substs.set('systemsleepdir', systemsleepdir)
224 substs.set('VARLOGDIR', varlogdir)
225 substs.set('CERTIFICATEROOT', get_option('certificate-root'))
226 substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
227 substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
228 substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
229 substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
230 substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
231 substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
233 #####################################################################
235 cc = meson.get_compiler('c')
236 pkgconfig = import('pkgconfig')
237 check_compilation_sh = find_program('tools/meson-check-compilation.sh')
239 cxx = find_program('c++', required : false)
241 # Used only for tests
245 foreach arg : ['-Wextra',
248 '-Wmissing-include-dirs',
249 '-Wold-style-definition',
252 '-Wdeclaration-after-statement',
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',
261 '-Wstrict-prototypes',
263 '-Wmissing-noreturn',
266 '-Wstrict-aliasing=2',
273 '-fdiagnostics-show-option',
274 '-fno-strict-aliasing',
275 '-fvisibility=hidden',
277 '-fstack-protector-strong',
279 '--param=ssp-buffer-size=4',
281 if cc.has_argument(arg)
282 add_project_arguments(arg, language : 'c')
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.
288 foreach arg : ['unused-parameter',
289 'missing-field-initializers',
292 'error=nonnull', # work-around for gcc 7.1 turning this on on its own
294 if cc.has_argument('-W' + arg)
295 add_project_arguments('-Wno-' + arg, language : 'c')
301 #include <inttypes.h>
302 typedef uint64_t usec_t;
303 usec_t now(clockid_t clock);
308 ', name : '-Werror=shadow with local shadowing')
309 add_project_arguments('-Werror=shadow', language : 'c')
312 if cc.get_id() == 'clang'
313 foreach arg : ['-Wno-typedef-redefinition',
314 '-Wno-gnu-variable-sized-type-not-at-end',
316 if cc.has_argument(arg,
317 name : '@0@ is supported'.format(arg))
318 add_project_arguments(arg, language : 'c')
323 link_test_c = files('tools/meson-link-test.c')
325 # --as-needed and --no-undefined are provided by meson by default,
326 # run mesonconf to see what is enabled
327 foreach arg : ['-Wl,-z,relro',
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'))
337 add_project_link_arguments(arg, language : 'c')
341 if get_option('buildtype') != 'debug'
342 foreach arg : ['-ffunction-sections',
344 if cc.has_argument(arg,
345 name : '@0@ is supported'.format(arg))
346 add_project_arguments(arg, language : 'c')
350 foreach arg : ['-Wl,--gc-sections']
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'))
356 add_project_link_arguments(arg, language : 'c')
361 cpp = ' '.join(cc.cmd_array()) + ' -E'
363 #####################################################################
364 # compilation result tests
366 conf.set('_GNU_SOURCE', true)
367 conf.set('__SANE_USERSPACE_TYPES__', true)
369 conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
370 conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
371 conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
372 conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
373 conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
374 conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
375 conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
379 #include <linux/ethtool.h>
380 #include <linux/fib_rules.h>
382 # FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
384 foreach decl : ['char16_t',
387 'struct ethtool_link_settings',
388 'struct fib_rule_uid_range',
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)
396 foreach 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'],
406 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
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'],
417 ['FRA_UID_RANGE', 'linux/fib_rules.h'],
418 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
420 prefix = decl.length() > 2 ? decl[2] : ''
421 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
422 conf.set10('HAVE_DECL_' + decl[0], have)
426 foreach ident : ['secure_getenv', '__secure_getenv']
427 if not skip and cc.has_function(ident)
428 conf.set('HAVE_' + ident.to_upper(), true)
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>'''],
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>'''],
449 ['bpf', '''#include <sys/syscall.h>
450 #include <unistd.h>'''],
451 ['explicit_bzero' , '''#include <string.h>'''],
454 have = cc.has_function(ident[0], prefix : ident[1])
455 conf.set10('HAVE_DECL_' + ident[0].to_upper(), have)
458 if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''')
459 conf.set('USE_SYS_RANDOM_H', true)
460 conf.set10('HAVE_DECL_GETRANDOM', true)
462 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
463 conf.set10('HAVE_DECL_GETRANDOM', have)
466 #####################################################################
468 sed = find_program('sed')
469 grep = find_program('grep')
470 awk = find_program('awk')
471 m4 = find_program('m4')
472 stat = find_program('stat')
473 git = find_program('git', required : false)
475 meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
476 mkdir_p = 'mkdir -p $DESTDIR/@0@'
477 test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
478 splash_bmp = files('test/splash.bmp')
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.
482 progs = [['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'],
495 path = get_option(prog[0] + '-path')
497 message('Using @1@ for @0@'.format(prog[0], path))
499 exe = find_program(prog[0],
500 '/usr/sbin/' + prog[0],
503 path = exe.found() ? exe.path() : prog[1]
505 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
506 conf.set_quoted(name, path)
507 substs.set(name, path)
510 if run_command('ln', '--relative', '--help').returncode() != 0
511 error('ln does not support --relative')
514 ############################################################
516 gperf = find_program('gperf')
518 gperf_test_format = '''
520 const char * in_word_set(const char *, @0@);
523 gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
524 gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
525 gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
526 if cc.compiles(gperf_test)
527 gperf_len_type = 'size_t'
529 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
530 if cc.compiles(gperf_test)
531 gperf_len_type = 'unsigned'
533 error('unable to determine gperf len type')
536 message('gperf len type is @0@'.format(gperf_len_type))
537 conf.set('GPERF_LEN_TYPE', gperf_len_type,
538 description : 'The type of gperf "len" parameter')
540 ############################################################
542 if not cc.has_header('sys/capability.h')
543 error('POSIX caps headers not found')
545 foreach header : ['linux/btrfs.h',
547 'linux/vm_sockets.h',
548 'valgrind/memcheck.h',
549 'valgrind/valgrind.h',
552 conf.set('HAVE_' + header.underscorify().to_upper(),
553 cc.has_header(header))
556 ############################################################
558 conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
559 conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
560 gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
562 default_hierarchy = get_option('default-hierarchy')
563 conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
564 description : 'default cgroup hierarchy as string')
565 if default_hierarchy == 'legacy'
566 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
567 elif default_hierarchy == 'hybrid'
568 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
570 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
573 time_epoch = get_option('time-epoch')
576 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
578 time_epoch = time_epoch.to_int()
579 conf.set('TIME_EPOCH', time_epoch)
581 system_uid_max = get_option('system-uid-max')
582 if system_uid_max == ''
583 system_uid_max = run_command(
585 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
586 '/etc/login.defs').stdout()
588 system_uid_max = system_uid_max.to_int()
589 conf.set('SYSTEM_UID_MAX', system_uid_max)
590 substs.set('systemuidmax', system_uid_max)
591 message('maximum system UID is @0@'.format(system_uid_max))
593 conf.set_quoted('NOBODY_USER_NAME', get_option('nobody-user'))
594 conf.set_quoted('NOBODY_GROUP_NAME', get_option('nobody-group'))
596 system_gid_max = get_option('system-gid-max')
597 if system_gid_max == ''
598 system_gid_max = run_command(
600 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
601 '/etc/login.defs').stdout()
603 system_gid_max = system_gid_max.to_int()
604 conf.set('SYSTEM_GID_MAX', system_gid_max)
605 substs.set('systemgidmax', system_gid_max)
606 message('maximum system GID is @0@'.format(system_gid_max))
608 tty_gid = get_option('tty-gid')
609 conf.set('TTY_GID', tty_gid)
610 substs.set('TTY_GID', tty_gid)
612 if get_option('adm-group')
613 m4_defines += ['-DENABLE_ADM_GROUP']
616 if get_option('wheel-group')
617 m4_defines += ['-DENABLE_WHEEL_GROUP']
620 substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
622 kill_user_processes = get_option('default-kill-user-processes')
623 conf.set10('KILL_USER_PROCESSES', kill_user_processes)
624 substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
626 dns_servers = get_option('dns-servers')
627 conf.set_quoted('DNS_SERVERS', dns_servers)
628 substs.set('DNS_SERVERS', dns_servers)
630 ntp_servers = get_option('ntp-servers')
631 conf.set_quoted('NTP_SERVERS', ntp_servers)
632 substs.set('NTP_SERVERS', ntp_servers)
634 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
636 substs.set('SUSHELL', get_option('debug-shell'))
637 substs.set('DEBUGTTY', get_option('debug-tty'))
639 debug = get_option('debug')
641 foreach name : debug.split(',')
643 conf.set('ENABLE_DEBUG_HASHMAP', true)
644 elif name == 'mmap-cache'
645 conf.set('ENABLE_DEBUG_MMAP_CACHE', true)
647 message('unknown debug option "@0@", ignoring'.format(name))
652 #####################################################################
654 threads = dependency('threads')
655 librt = cc.find_library('rt')
656 libm = cc.find_library('m')
657 libdl = cc.find_library('dl')
658 libcrypt = cc.find_library('crypt')
660 libcap = dependency('libcap', required : false)
661 if not libcap.found()
662 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
663 libcap = cc.find_library('cap')
666 libmount = dependency('mount',
669 want_seccomp = get_option('seccomp')
670 if want_seccomp != 'false'
671 libseccomp = dependency('libseccomp',
672 version : '>= 2.3.1',
673 required : want_seccomp == 'true')
674 if libseccomp.found()
675 conf.set('HAVE_SECCOMP', true)
676 m4_defines += ['-DHAVE_SECCOMP']
682 want_selinux = get_option('selinux')
683 if want_selinux != 'false'
684 libselinux = dependency('libselinux',
685 version : '>= 2.1.9',
686 required : want_selinux == 'true')
687 if libselinux.found()
688 conf.set('HAVE_SELINUX', true)
689 m4_defines += ['-DHAVE_SELINUX']
695 want_apparmor = get_option('apparmor')
696 if want_apparmor != 'false'
697 libapparmor = dependency('libapparmor',
698 required : want_apparmor == 'true')
699 if libapparmor.found()
700 conf.set('HAVE_APPARMOR', true)
701 m4_defines += ['-DHAVE_APPARMOR']
707 smack_run_label = get_option('smack-run-label')
708 if smack_run_label != ''
709 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
710 m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
713 want_polkit = get_option('polkit')
714 install_polkit = false
715 install_polkit_pkla = false
716 if want_polkit != 'false'
717 conf.set('ENABLE_POLKIT', true)
718 install_polkit = true
720 libpolkit = dependency('polkit-gobject-1',
722 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
723 message('Old polkit detected, will install pkla files')
724 install_polkit_pkla = true
728 want_acl = get_option('acl')
729 if want_acl != 'false'
730 libacl = cc.find_library('acl', required : want_acl == 'true')
732 conf.set('HAVE_ACL', true)
733 m4_defines += ['-DHAVE_ACL']
739 want_audit = get_option('audit')
740 if want_audit != 'false'
741 libaudit = dependency('audit', required : want_audit == 'true')
742 conf.set('HAVE_AUDIT', libaudit.found())
747 want_blkid = get_option('blkid')
748 if want_blkid != 'false'
749 libblkid = dependency('blkid', required : want_blkid == 'true')
750 conf.set('HAVE_BLKID', libblkid.found())
755 want_kmod = get_option('kmod')
756 if want_kmod != 'false'
757 libkmod = dependency('libkmod',
759 required : want_kmod == 'true')
760 conf.set('HAVE_KMOD', libkmod.found())
765 want_pam = get_option('pam')
766 if want_pam != 'false'
767 libpam = cc.find_library('pam', required : want_pam == 'true')
768 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
769 if libpam.found() and libpam_misc.found()
770 conf.set('HAVE_PAM', true)
771 m4_defines += ['-DHAVE_PAM']
778 want_microhttpd = get_option('microhttpd')
779 if want_microhttpd != 'false'
780 libmicrohttpd = dependency('libmicrohttpd',
781 version : '>= 0.9.33',
782 required : want_microhttpd == 'true')
783 if libmicrohttpd.found()
784 conf.set('HAVE_MICROHTTPD', true)
785 m4_defines += ['-DHAVE_MICROHTTPD']
791 want_libcryptsetup = get_option('libcryptsetup')
792 if want_libcryptsetup != 'false'
793 libcryptsetup = dependency('libcryptsetup',
794 version : '>= 1.6.0',
795 required : want_libcryptsetup == 'true')
796 conf.set('HAVE_LIBCRYPTSETUP', libcryptsetup.found())
801 want_libcurl = get_option('libcurl')
802 if want_libcurl != 'false'
803 libcurl = dependency('libcurl',
804 version : '>= 7.32.0',
805 required : want_libcurl == 'true')
807 conf.set('HAVE_LIBCURL', true)
808 m4_defines += ['-DHAVE_LIBCURL']
814 want_libidn = get_option('libidn')
815 want_libidn2 = get_option('libidn2')
816 if want_libidn == 'true' and want_libidn2 == 'true'
817 error('libidn and libidn2 cannot be requested simultaneously')
820 if want_libidn != 'false' and want_libidn2 != 'true'
821 libidn = dependency('libidn',
822 required : want_libidn == 'true')
824 conf.set('HAVE_LIBIDN', true)
825 m4_defines += ['-DHAVE_LIBIDN']
830 if not conf.get('HAVE_LIBIDN', false) and want_libidn2 != 'false'
831 # libidn is used for both libidn and libidn2 objects
832 libidn = dependency('libidn2',
833 required : want_libidn2 == 'true')
835 conf.set('HAVE_LIBIDN2', true)
836 m4_defines += ['-DHAVE_LIBIDN2']
840 want_libiptc = get_option('libiptc')
841 if want_libiptc != 'false'
842 libiptc = dependency('libiptc',
843 required : want_libiptc == 'true')
845 conf.set('HAVE_LIBIPTC', true)
846 m4_defines += ['-DHAVE_LIBIPTC']
852 want_qrencode = get_option('qrencode')
853 if want_qrencode != 'false'
854 libqrencode = dependency('libqrencode',
855 required : want_qrencode == 'true')
856 conf.set('HAVE_QRENCODE', libqrencode.found())
861 want_gcrypt = get_option('gcrypt')
862 if want_gcrypt != 'false'
863 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
864 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
866 have_deps = libgcrypt.found() and libgpg_error.found()
867 conf.set('HAVE_GCRYPT', have_deps)
869 # link to neither of the libs if one is not found
878 want_gnutls = get_option('gnutls')
879 if want_gnutls != 'false'
880 libgnutls = dependency('gnutls',
881 version : '>= 3.1.4',
882 required : want_gnutls == 'true')
883 conf.set('HAVE_GNUTLS', libgnutls.found())
888 want_elfutils = get_option('elfutils')
889 if want_elfutils != 'false'
890 libdw = dependency('libdw',
891 required : want_elfutils == 'true')
892 conf.set('HAVE_ELFUTILS', libdw.found())
897 want_zlib = get_option('zlib')
898 if want_zlib != 'false'
899 libz = dependency('zlib',
900 required : want_zlib == 'true')
901 conf.set('HAVE_ZLIB', libz.found())
906 want_bzip2 = get_option('bzip2')
907 if want_bzip2 != 'false'
908 libbzip2 = cc.find_library('bz2',
909 required : want_bzip2 == 'true')
910 conf.set('HAVE_BZIP2', libbzip2.found())
915 want_xz = get_option('xz')
916 if want_xz != 'false'
917 libxz = dependency('liblzma',
918 required : want_xz == 'true')
919 conf.set('HAVE_XZ', libxz.found())
924 want_lz4 = get_option('lz4')
925 if want_lz4 != 'false'
926 liblz4 = dependency('liblz4',
927 required : want_lz4 == 'true')
928 conf.set('HAVE_LZ4', liblz4.found())
933 want_xkbcommon = get_option('xkbcommon')
934 if want_xkbcommon != 'false'
935 libxkbcommon = dependency('xkbcommon',
936 version : '>= 0.3.0',
937 required : want_xkbcommon == 'true')
938 conf.set('HAVE_XKBCOMMON', libxkbcommon.found())
943 want_glib = get_option('glib')
944 if want_glib != 'false'
945 libglib = dependency('glib-2.0',
946 version : '>= 2.22.0',
947 required : want_glib == 'true')
948 libgobject = dependency('gobject-2.0',
949 version : '>= 2.22.0',
950 required : want_glib == 'true')
951 libgio = dependency('gio-2.0',
952 required : want_glib == 'true')
953 have = libglib.found() and libgobject.found() and libgio.found()
954 conf.set('HAVE_GLIB', have)
961 want_dbus = get_option('dbus')
962 if want_dbus != 'false'
963 libdbus = dependency('dbus-1',
964 version : '>= 1.3.2',
965 required : want_dbus == 'true')
966 conf.set('HAVE_DBUS', libdbus.found())
971 default_dnssec = get_option('default-dnssec')
972 if default_dnssec != 'no' and not conf.get('HAVE_GCRYPT', false)
973 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
974 default_dnssec = 'no'
976 conf.set('DEFAULT_DNSSEC_MODE',
977 'DNSSEC_' + default_dnssec.underscorify().to_upper())
978 substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
980 want_importd = get_option('importd')
981 if want_importd != 'false'
982 have_deps = (conf.get('HAVE_LIBCURL', false) and
983 conf.get('HAVE_ZLIB', false) and
984 conf.get('HAVE_BZIP2', false) and
985 conf.get('HAVE_XZ', false) and
986 conf.get('HAVE_GCRYPT', false))
987 conf.set('ENABLE_IMPORTD', have_deps)
988 if want_importd == 'true' and not have_deps
989 error('importd support was requested, but dependencies are not available')
993 want_remote = get_option('remote')
994 if want_remote != 'false'
995 have_deps = [conf.get('HAVE_MICROHTTPD', false),
996 conf.get('HAVE_LIBCURL', false)]
997 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
998 # it's possible to build one without the other. Complain only if
999 # support was explictly requested. The auxiliary files like sysusers
1000 # config should be installed when any of the programs are built.
1001 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1002 error('remote support was requested, but dependencies are not available')
1004 conf.set('ENABLE_REMOTE', have_deps[0] or have_deps[1])
1007 foreach pair : [['utmp', 'HAVE_UTMP'],
1008 ['hibernate', 'ENABLE_HIBERNATE'],
1009 ['environment-d', 'ENABLE_ENVIRONMENT_D'],
1010 ['binfmt', 'ENABLE_BINFMT'],
1011 ['coredump', 'ENABLE_COREDUMP'],
1012 ['resolve', 'ENABLE_RESOLVED'],
1013 ['logind', 'ENABLE_LOGIND'],
1014 ['hostnamed', 'ENABLE_HOSTNAMED'],
1015 ['localed', 'ENABLE_LOCALED'],
1016 ['machined', 'ENABLE_MACHINED'],
1017 ['networkd', 'ENABLE_NETWORKD'],
1018 ['timedated', 'ENABLE_TIMEDATED'],
1019 ['timesyncd', 'ENABLE_TIMESYNCD'],
1020 ['myhostname', 'HAVE_MYHOSTNAME'],
1021 ['firstboot', 'ENABLE_FIRSTBOOT'],
1022 ['randomseed', 'ENABLE_RANDOMSEED'],
1023 ['backlight', 'ENABLE_BACKLIGHT'],
1024 ['vconsole', 'ENABLE_VCONSOLE'],
1025 ['quotacheck', 'ENABLE_QUOTACHECK'],
1026 ['sysusers', 'ENABLE_SYSUSERS'],
1027 ['tmpfiles', 'ENABLE_TMPFILES'],
1028 ['hwdb', 'ENABLE_HWDB'],
1029 ['rfkill', 'ENABLE_RFKILL'],
1030 ['ldconfig', 'ENABLE_LDCONFIG'],
1031 ['efi', 'ENABLE_EFI'],
1032 ['tpm', 'ENABLE_TPM'],
1033 ['ima', 'HAVE_IMA'],
1034 ['smack', 'HAVE_SMACK'],
1035 ['gshadow', 'ENABLE_GSHADOW'],
1036 ['idn', 'ENABLE_IDN'],
1037 ['nss-systemd', 'ENABLE_NSS_SYSTEMD'],
1040 if get_option(pair[0])
1041 conf.set(pair[1], true)
1042 m4_defines += ['-D' + pair[1]]
1046 want_tests = get_option('tests')
1047 install_tests = get_option('install-tests')
1050 conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', get_option('slow-tests'))
1052 #####################################################################
1054 if get_option('efi')
1055 efi_arch = host_machine.cpu_family()
1057 if efi_arch == 'x86'
1058 EFI_MACHINE_TYPE_NAME = 'ia32'
1059 gnu_efi_arch = 'ia32'
1060 elif efi_arch == 'x86_64'
1061 EFI_MACHINE_TYPE_NAME = 'x64'
1062 gnu_efi_arch = 'x86_64'
1063 elif efi_arch == 'arm'
1064 EFI_MACHINE_TYPE_NAME = 'arm'
1065 gnu_efi_arch = 'arm'
1066 elif efi_arch == 'aarch64'
1067 EFI_MACHINE_TYPE_NAME = 'aa64'
1068 gnu_efi_arch = 'aarch64'
1070 EFI_MACHINE_TYPE_NAME = ''
1074 conf.set('ENABLE_EFI', true)
1075 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
1077 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex').to_int())
1080 #####################################################################
1082 config_h = configure_file(
1083 output : 'config.h',
1084 configuration : conf)
1086 includes = include_directories('src/basic',
1096 'src/libsystemd/sd-bus',
1097 'src/libsystemd/sd-device',
1098 'src/libsystemd/sd-hwdb',
1099 'src/libsystemd/sd-id128',
1100 'src/libsystemd/sd-netlink',
1101 'src/libsystemd/sd-network',
1102 'src/libsystemd-network',
1106 add_project_arguments('-include', 'config.h', language : 'c')
1108 gcrypt_util_sources = files('src/shared/gcrypt-util.h',
1109 'src/shared/gcrypt-util.c')
1113 subdir('src/systemd')
1115 subdir('src/libsystemd')
1116 subdir('src/libsystemd-network')
1117 subdir('src/journal')
1120 libjournal_core = static_library(
1122 libjournal_core_sources,
1124 include_directories : includes,
1127 libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
1128 libsystemd = shared_library(
1130 libsystemd_internal_sources,
1131 journal_internal_sources,
1132 version : libsystemd_version,
1133 include_directories : includes,
1134 link_args : ['-shared',
1135 '-Wl,--version-script=' + libsystemd_sym_path],
1136 link_with : [libbasic],
1137 dependencies : [threads,
1142 link_depends : libsystemd_sym,
1144 install_dir : rootlibdir)
1146 ############################################################
1148 # binaries that have --help and are intended for use by humans,
1149 # usually, but not always, installed in /bin.
1150 public_programs = []
1152 subdir('src/libudev')
1153 subdir('src/shared')
1156 subdir('src/network')
1158 subdir('src/analyze')
1159 subdir('src/journal-remote')
1160 subdir('src/coredump')
1161 subdir('src/hostname')
1162 subdir('src/import')
1163 subdir('src/kernel-install')
1164 subdir('src/locale')
1165 subdir('src/machine')
1166 subdir('src/nspawn')
1167 subdir('src/resolve')
1168 subdir('src/timedate')
1169 subdir('src/timesync')
1170 subdir('src/vconsole')
1171 subdir('src/sulogin-shell')
1172 subdir('src/boot/efi')
1177 ############################################################
1179 # only static linking apart from libdl, to make sure that the
1180 # module is linked to all libraries that it uses.
1181 test_dlopen = executable(
1184 include_directories : includes,
1185 link_with : [libbasic],
1186 dependencies : [libdl])
1188 foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME'],
1189 ['systemd', 'ENABLE_NSS_SYSTEMD'],
1190 ['mymachines', 'ENABLE_MACHINED'],
1191 ['resolve', 'ENABLE_RESOLVED']]
1193 condition = tuple[1] == '' or conf.get(tuple[1], false)
1197 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1198 version_script_arg = join_paths(meson.current_source_dir(), sym)
1200 nss = shared_library(
1202 'src/nss-@0@/nss-@0@.c'.format(module),
1204 include_directories : includes,
1205 link_args : ['-shared',
1206 '-Wl,--version-script=' + version_script_arg,
1208 link_with : [libsystemd_internal,
1210 dependencies : [threads,
1214 install_dir : rootlibdir)
1216 # We cannot use shared_module because it does not support version suffix.
1217 # Unfortunately shared_library insists on creating the symlink…
1218 meson.add_install_script('sh', '-c',
1219 'rm $DESTDIR@0@/libnss_@1@.so'
1220 .format(rootlibdir, module))
1222 test('dlopen-nss_' + module,
1224 args : [nss.full_path()]) # path to dlopen must include a slash
1228 ############################################################
1230 executable('systemd',
1232 include_directories : includes,
1233 link_with : [libcore,
1235 dependencies : [threads,
1241 install_rpath : rootlibexecdir,
1243 install_dir : rootlibexecdir)
1245 exe = executable('systemd-analyze',
1246 systemd_analyze_sources,
1247 include_directories : includes,
1248 link_with : [libcore,
1250 dependencies : [threads,
1256 install_rpath : rootlibexecdir,
1258 public_programs += [exe]
1260 executable('systemd-journald',
1261 systemd_journald_sources,
1262 include_directories : includes,
1263 link_with : [libjournal_core,
1265 dependencies : [threads,
1269 install_rpath : rootlibexecdir,
1271 install_dir : rootlibexecdir)
1273 exe = executable('systemd-cat',
1274 systemd_cat_sources,
1275 include_directories : includes,
1276 link_with : [libjournal_core,
1278 dependencies : [threads],
1279 install_rpath : rootlibexecdir,
1281 public_programs += [exe]
1283 exe = executable('journalctl',
1285 include_directories : includes,
1286 link_with : [libshared],
1287 dependencies : [threads,
1291 install_rpath : rootlibexecdir,
1293 install_dir : rootbindir)
1294 public_programs += [exe]
1296 executable('systemd-getty-generator',
1297 'src/getty-generator/getty-generator.c',
1298 include_directories : includes,
1299 link_with : [libshared],
1300 install_rpath : rootlibexecdir,
1302 install_dir : systemgeneratordir)
1304 executable('systemd-debug-generator',
1305 'src/debug-generator/debug-generator.c',
1306 include_directories : includes,
1307 link_with : [libshared],
1308 install_rpath : rootlibexecdir,
1310 install_dir : systemgeneratordir)
1312 executable('systemd-fstab-generator',
1313 'src/fstab-generator/fstab-generator.c',
1314 'src/core/mount-setup.c',
1315 include_directories : includes,
1316 link_with : [libshared],
1317 install_rpath : rootlibexecdir,
1319 install_dir : systemgeneratordir)
1321 if conf.get('ENABLE_ENVIRONMENT_D', false)
1322 executable('30-systemd-environment-d-generator',
1323 'src/environment-d-generator/environment-d-generator.c',
1324 include_directories : includes,
1325 link_with : [libshared],
1326 install_rpath : rootlibexecdir,
1328 install_dir : userenvgeneratordir)
1330 meson.add_install_script(meson_make_symlink,
1331 join_paths(sysconfdir, 'environment'),
1332 join_paths(environmentdir, '99-environment.conf'))
1335 if conf.get('ENABLE_HIBERNATE', false)
1336 executable('systemd-hibernate-resume-generator',
1337 'src/hibernate-resume/hibernate-resume-generator.c',
1338 include_directories : includes,
1339 link_with : [libshared],
1340 install_rpath : rootlibexecdir,
1342 install_dir : systemgeneratordir)
1344 executable('systemd-hibernate-resume',
1345 'src/hibernate-resume/hibernate-resume.c',
1346 include_directories : includes,
1347 link_with : [libshared],
1348 install_rpath : rootlibexecdir,
1350 install_dir : rootlibexecdir)
1353 if conf.get('HAVE_BLKID', false)
1354 executable('systemd-gpt-auto-generator',
1355 'src/gpt-auto-generator/gpt-auto-generator.c',
1356 'src/basic/blkid-util.h',
1357 include_directories : includes,
1358 link_with : [libshared],
1359 dependencies : libblkid,
1360 install_rpath : rootlibexecdir,
1362 install_dir : systemgeneratordir)
1364 exe = executable('systemd-dissect',
1365 'src/dissect/dissect.c',
1366 include_directories : includes,
1367 link_with : [libshared],
1368 install_rpath : rootlibexecdir,
1370 install_dir : rootlibexecdir)
1371 public_programs += [exe]
1374 if conf.get('ENABLE_RESOLVED', false)
1375 executable('systemd-resolved',
1376 systemd_resolved_sources,
1377 gcrypt_util_sources,
1378 include_directories : includes,
1379 link_with : [libshared],
1380 dependencies : [threads,
1385 install_rpath : rootlibexecdir,
1387 install_dir : rootlibexecdir)
1389 exe = executable('systemd-resolve',
1390 systemd_resolve_sources,
1391 gcrypt_util_sources,
1392 include_directories : includes,
1393 link_with : [libshared],
1394 dependencies : [threads,
1399 install_rpath : rootlibexecdir,
1401 public_programs += [exe]
1404 if conf.get('ENABLE_LOGIND', false)
1405 executable('systemd-logind',
1406 systemd_logind_sources,
1407 include_directories : includes,
1408 link_with : [liblogind_core,
1410 dependencies : [threads,
1412 install_rpath : rootlibexecdir,
1414 install_dir : rootlibexecdir)
1416 exe = executable('loginctl',
1418 include_directories : includes,
1419 link_with : [libshared],
1420 dependencies : [threads,
1423 install_rpath : rootlibexecdir,
1425 install_dir : rootbindir)
1426 public_programs += [exe]
1428 exe = executable('systemd-inhibit',
1429 'src/login/inhibit.c',
1430 include_directories : includes,
1431 link_with : [libshared],
1432 install_rpath : rootlibexecdir,
1434 install_dir : rootbindir)
1435 public_programs += [exe]
1437 if conf.get('HAVE_PAM', false)
1438 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1439 pam_systemd = shared_library(
1443 include_directories : includes,
1444 link_args : ['-shared',
1445 '-Wl,--version-script=' + version_script_arg],
1446 link_with : [libsystemd_internal,
1448 dependencies : [threads,
1451 link_depends : pam_systemd_sym,
1453 install_dir : pamlibdir)
1455 test('dlopen-pam_systemd',
1457 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1461 if conf.get('HAVE_PAM', false)
1462 executable('systemd-user-sessions',
1463 'src/user-sessions/user-sessions.c',
1464 include_directories : includes,
1465 link_with : [libshared],
1466 install_rpath : rootlibexecdir,
1468 install_dir : rootlibexecdir)
1471 if conf.get('ENABLE_EFI', false) and conf.get('HAVE_BLKID', false)
1472 exe = executable('bootctl',
1473 'src/boot/bootctl.c',
1474 include_directories : includes,
1475 link_with : [libshared],
1476 dependencies : [libblkid],
1477 install_rpath : rootlibexecdir,
1479 public_programs += [exe]
1482 exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1483 include_directories : includes,
1484 link_with : [libshared],
1485 dependencies : [threads],
1486 install_rpath : rootlibexecdir,
1488 public_programs += [exe]
1490 exe = executable('systemctl', 'src/systemctl/systemctl.c',
1491 include_directories : includes,
1492 link_with : [libshared],
1493 dependencies : [threads,
1498 install_rpath : rootlibexecdir,
1500 install_dir : rootbindir)
1501 public_programs += [exe]
1503 if conf.get('ENABLE_BACKLIGHT', false)
1504 executable('systemd-backlight',
1505 'src/backlight/backlight.c',
1506 include_directories : includes,
1507 link_with : [libshared],
1508 install_rpath : rootlibexecdir,
1510 install_dir : rootlibexecdir)
1513 if conf.get('ENABLE_RFKILL', false)
1514 executable('systemd-rfkill',
1515 'src/rfkill/rfkill.c',
1516 include_directories : includes,
1517 link_with : [libshared],
1518 install_rpath : rootlibexecdir,
1520 install_dir : rootlibexecdir)
1523 executable('systemd-system-update-generator',
1524 'src/system-update-generator/system-update-generator.c',
1525 include_directories : includes,
1526 link_with : [libshared],
1527 install_rpath : rootlibexecdir,
1529 install_dir : systemgeneratordir)
1531 if conf.get('HAVE_LIBCRYPTSETUP', false)
1532 executable('systemd-cryptsetup',
1533 'src/cryptsetup/cryptsetup.c',
1534 include_directories : includes,
1535 link_with : [libshared],
1536 dependencies : [libcryptsetup],
1537 install_rpath : rootlibexecdir,
1539 install_dir : rootlibexecdir)
1541 executable('systemd-cryptsetup-generator',
1542 'src/cryptsetup/cryptsetup-generator.c',
1543 include_directories : includes,
1544 link_with : [libshared],
1545 dependencies : [libcryptsetup],
1546 install_rpath : rootlibexecdir,
1548 install_dir : systemgeneratordir)
1550 executable('systemd-veritysetup',
1551 'src/veritysetup/veritysetup.c',
1552 include_directories : includes,
1553 link_with : [libshared],
1554 dependencies : [libcryptsetup],
1555 install_rpath : rootlibexecdir,
1557 install_dir : rootlibexecdir)
1559 executable('systemd-veritysetup-generator',
1560 'src/veritysetup/veritysetup-generator.c',
1561 include_directories : includes,
1562 link_with : [libshared],
1563 dependencies : [libcryptsetup],
1564 install_rpath : rootlibexecdir,
1566 install_dir : systemgeneratordir)
1569 if conf.get('HAVE_SYSV_COMPAT', false)
1570 executable('systemd-sysv-generator',
1571 'src/sysv-generator/sysv-generator.c',
1572 include_directories : includes,
1573 link_with : [libshared],
1574 install_rpath : rootlibexecdir,
1576 install_dir : systemgeneratordir)
1578 executable('systemd-rc-local-generator',
1579 'src/rc-local-generator/rc-local-generator.c',
1580 include_directories : includes,
1581 link_with : [libshared],
1582 install_rpath : rootlibexecdir,
1584 install_dir : systemgeneratordir)
1587 if conf.get('ENABLE_HOSTNAMED', false)
1588 executable('systemd-hostnamed',
1589 'src/hostname/hostnamed.c',
1590 include_directories : includes,
1591 link_with : [libshared],
1592 install_rpath : rootlibexecdir,
1594 install_dir : rootlibexecdir)
1596 exe = executable('hostnamectl',
1597 'src/hostname/hostnamectl.c',
1598 include_directories : includes,
1599 link_with : [libshared],
1600 install_rpath : rootlibexecdir,
1602 public_programs += [exe]
1605 if conf.get('ENABLE_LOCALED', false)
1606 if conf.get('HAVE_XKBCOMMON', false)
1607 # logind will load libxkbcommon.so dynamically on its own
1613 executable('systemd-localed',
1614 systemd_localed_sources,
1615 include_directories : includes,
1616 link_with : [libshared],
1617 dependencies : deps,
1618 install_rpath : rootlibexecdir,
1620 install_dir : rootlibexecdir)
1622 exe = executable('localectl',
1624 include_directories : includes,
1625 link_with : [libshared],
1626 install_rpath : rootlibexecdir,
1628 public_programs += [exe]
1631 if conf.get('ENABLE_TIMEDATED', false)
1632 executable('systemd-timedated',
1633 'src/timedate/timedated.c',
1634 include_directories : includes,
1635 link_with : [libshared],
1636 install_rpath : rootlibexecdir,
1638 install_dir : rootlibexecdir)
1640 exe = executable('timedatectl',
1641 'src/timedate/timedatectl.c',
1642 include_directories : includes,
1643 install_rpath : rootlibexecdir,
1644 link_with : [libshared],
1646 public_programs += [exe]
1649 if conf.get('ENABLE_TIMESYNCD', false)
1650 executable('systemd-timesyncd',
1651 systemd_timesyncd_sources,
1652 include_directories : includes,
1653 link_with : [libshared],
1654 dependencies : [threads,
1656 install_rpath : rootlibexecdir,
1658 install_dir : rootlibexecdir)
1661 if conf.get('ENABLE_MACHINED', false)
1662 executable('systemd-machined',
1663 systemd_machined_sources,
1664 include_directories : includes,
1665 link_with : [libmachine_core,
1667 install_rpath : rootlibexecdir,
1669 install_dir : rootlibexecdir)
1671 exe = executable('machinectl',
1672 'src/machine/machinectl.c',
1673 include_directories : includes,
1674 link_with : [libshared],
1675 dependencies : [threads,
1678 install_rpath : rootlibexecdir,
1680 install_dir : rootbindir)
1681 public_programs += [exe]
1684 if conf.get('ENABLE_IMPORTD', false)
1685 executable('systemd-importd',
1686 systemd_importd_sources,
1687 include_directories : includes,
1688 link_with : [libshared],
1689 dependencies : [threads],
1690 install_rpath : rootlibexecdir,
1692 install_dir : rootlibexecdir)
1694 systemd_pull = executable('systemd-pull',
1695 systemd_pull_sources,
1696 include_directories : includes,
1697 link_with : [libshared],
1698 dependencies : [libcurl,
1703 install_rpath : rootlibexecdir,
1705 install_dir : rootlibexecdir)
1707 systemd_import = executable('systemd-import',
1708 systemd_import_sources,
1709 include_directories : includes,
1710 link_with : [libshared],
1711 dependencies : [libcurl,
1715 install_rpath : rootlibexecdir,
1717 install_dir : rootlibexecdir)
1719 systemd_export = executable('systemd-export',
1720 systemd_export_sources,
1721 include_directories : includes,
1722 link_with : [libshared],
1723 dependencies : [libcurl,
1727 install_rpath : rootlibexecdir,
1729 install_dir : rootlibexecdir)
1730 public_programs += [systemd_pull, systemd_import, systemd_export]
1733 if conf.get('ENABLE_REMOTE', false) and conf.get('HAVE_LIBCURL', false)
1734 exe = executable('systemd-journal-upload',
1735 systemd_journal_upload_sources,
1736 include_directories : includes,
1737 link_with : [libshared],
1738 dependencies : [threads,
1743 install_rpath : rootlibexecdir,
1745 install_dir : rootlibexecdir)
1746 public_programs += [exe]
1749 if conf.get('ENABLE_REMOTE', false) and conf.get('HAVE_MICROHTTPD', false)
1750 s_j_remote = executable('systemd-journal-remote',
1751 systemd_journal_remote_sources,
1752 include_directories : includes,
1753 link_with : [libshared],
1754 dependencies : [threads,
1759 install_rpath : rootlibexecdir,
1761 install_dir : rootlibexecdir)
1763 s_j_gatewayd = executable('systemd-journal-gatewayd',
1764 systemd_journal_gatewayd_sources,
1765 include_directories : includes,
1766 link_with : [libshared],
1767 dependencies : [threads,
1772 install_rpath : rootlibexecdir,
1774 install_dir : rootlibexecdir)
1775 public_programs += [s_j_remote, s_j_gatewayd]
1778 if conf.get('ENABLE_COREDUMP', false)
1779 executable('systemd-coredump',
1780 systemd_coredump_sources,
1781 include_directories : includes,
1782 link_with : [libshared],
1783 dependencies : [threads,
1788 install_rpath : rootlibexecdir,
1790 install_dir : rootlibexecdir)
1792 exe = executable('coredumpctl',
1793 coredumpctl_sources,
1794 include_directories : includes,
1795 link_with : [libshared],
1796 dependencies : [threads,
1799 install_rpath : rootlibexecdir,
1801 public_programs += [exe]
1804 if conf.get('ENABLE_BINFMT', false)
1805 exe = executable('systemd-binfmt',
1806 'src/binfmt/binfmt.c',
1807 include_directories : includes,
1808 link_with : [libshared],
1809 install_rpath : rootlibexecdir,
1811 install_dir : rootlibexecdir)
1812 public_programs += [exe]
1814 meson.add_install_script('sh', '-c',
1815 mkdir_p.format(binfmtdir))
1816 meson.add_install_script('sh', '-c',
1817 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
1820 if conf.get('ENABLE_VCONSOLE', false)
1821 executable('systemd-vconsole-setup',
1822 'src/vconsole/vconsole-setup.c',
1823 include_directories : includes,
1824 link_with : [libshared],
1825 install_rpath : rootlibexecdir,
1827 install_dir : rootlibexecdir)
1830 if conf.get('ENABLE_RANDOMSEED', false)
1831 executable('systemd-random-seed',
1832 'src/random-seed/random-seed.c',
1833 include_directories : includes,
1834 link_with : [libshared],
1835 install_rpath : rootlibexecdir,
1837 install_dir : rootlibexecdir)
1840 if conf.get('ENABLE_FIRSTBOOT', false)
1841 executable('systemd-firstboot',
1842 'src/firstboot/firstboot.c',
1843 include_directories : includes,
1844 link_with : [libshared],
1845 dependencies : [libcrypt],
1846 install_rpath : rootlibexecdir,
1848 install_dir : rootbindir)
1851 executable('systemd-remount-fs',
1852 'src/remount-fs/remount-fs.c',
1853 'src/core/mount-setup.c',
1854 'src/core/mount-setup.h',
1855 include_directories : includes,
1856 link_with : [libshared],
1857 install_rpath : rootlibexecdir,
1859 install_dir : rootlibexecdir)
1861 executable('systemd-machine-id-setup',
1862 'src/machine-id-setup/machine-id-setup-main.c',
1863 'src/core/machine-id-setup.c',
1864 'src/core/machine-id-setup.h',
1865 include_directories : includes,
1866 link_with : [libshared],
1867 install_rpath : rootlibexecdir,
1869 install_dir : rootbindir)
1871 executable('systemd-fsck',
1873 include_directories : includes,
1874 link_with : [libshared],
1875 install_rpath : rootlibexecdir,
1877 install_dir : rootlibexecdir)
1879 executable('systemd-sleep',
1880 'src/sleep/sleep.c',
1881 include_directories : includes,
1882 link_with : [libshared],
1883 install_rpath : rootlibexecdir,
1885 install_dir : rootlibexecdir)
1887 exe = executable('systemd-sysctl',
1888 'src/sysctl/sysctl.c',
1889 include_directories : includes,
1890 link_with : [libshared],
1891 install_rpath : rootlibexecdir,
1893 install_dir : rootlibexecdir)
1894 public_programs += [exe]
1896 executable('systemd-ac-power',
1897 'src/ac-power/ac-power.c',
1898 include_directories : includes,
1899 link_with : [libshared],
1900 install_rpath : rootlibexecdir,
1902 install_dir : rootlibexecdir)
1904 exe = executable('systemd-detect-virt',
1905 'src/detect-virt/detect-virt.c',
1906 include_directories : includes,
1907 link_with : [libshared],
1908 install_rpath : rootlibexecdir,
1910 public_programs += [exe]
1912 exe = executable('systemd-delta',
1913 'src/delta/delta.c',
1914 include_directories : includes,
1915 link_with : [libshared],
1916 install_rpath : rootlibexecdir,
1918 public_programs += [exe]
1920 exe = executable('systemd-escape',
1921 'src/escape/escape.c',
1922 include_directories : includes,
1923 link_with : [libshared],
1924 install_rpath : rootlibexecdir,
1926 install_dir : rootbindir)
1927 public_programs += [exe]
1929 exe = executable('systemd-notify',
1930 'src/notify/notify.c',
1931 include_directories : includes,
1932 link_with : [libshared],
1933 install_rpath : rootlibexecdir,
1935 install_dir : rootbindir)
1936 public_programs += [exe]
1938 executable('systemd-volatile-root',
1939 'src/volatile-root/volatile-root.c',
1940 include_directories : includes,
1941 link_with : [libshared],
1942 install_rpath : rootlibexecdir,
1944 install_dir : rootlibexecdir)
1946 executable('systemd-cgroups-agent',
1947 'src/cgroups-agent/cgroups-agent.c',
1948 include_directories : includes,
1949 link_with : [libshared],
1950 install_rpath : rootlibexecdir,
1952 install_dir : rootlibexecdir)
1954 exe = executable('systemd-path',
1956 include_directories : includes,
1957 link_with : [libshared],
1958 install_rpath : rootlibexecdir,
1960 public_programs += [exe]
1962 exe = executable('systemd-ask-password',
1963 'src/ask-password/ask-password.c',
1964 include_directories : includes,
1965 link_with : [libshared],
1966 install_rpath : rootlibexecdir,
1968 install_dir : rootbindir)
1969 public_programs += [exe]
1971 executable('systemd-reply-password',
1972 'src/reply-password/reply-password.c',
1973 include_directories : includes,
1974 link_with : [libshared],
1975 install_rpath : rootlibexecdir,
1977 install_dir : rootlibexecdir)
1979 exe = executable('systemd-tty-ask-password-agent',
1980 'src/tty-ask-password-agent/tty-ask-password-agent.c',
1981 include_directories : includes,
1982 link_with : [libshared],
1983 install_rpath : rootlibexecdir,
1985 install_dir : rootbindir)
1986 public_programs += [exe]
1988 exe = executable('systemd-cgls',
1990 include_directories : includes,
1991 link_with : [libshared],
1992 install_rpath : rootlibexecdir,
1994 public_programs += [exe]
1996 exe = executable('systemd-cgtop',
1997 'src/cgtop/cgtop.c',
1998 include_directories : includes,
1999 link_with : [libshared],
2000 install_rpath : rootlibexecdir,
2002 public_programs += [exe]
2004 executable('systemd-initctl',
2005 'src/initctl/initctl.c',
2006 include_directories : includes,
2007 link_with : [libshared],
2008 install_rpath : rootlibexecdir,
2010 install_dir : rootlibexecdir)
2012 exe = executable('systemd-mount',
2013 'src/mount/mount-tool.c',
2014 include_directories : includes,
2015 link_with : [libshared],
2016 install_rpath : rootlibexecdir,
2018 public_programs += [exe]
2020 meson.add_install_script(meson_make_symlink,
2021 'systemd-mount', join_paths(bindir, 'systemd-umount'))
2023 exe = executable('systemd-run',
2025 include_directories : includes,
2026 link_with : [libshared],
2027 install_rpath : rootlibexecdir,
2029 public_programs += [exe]
2031 exe = executable('systemd-stdio-bridge',
2032 'src/stdio-bridge/stdio-bridge.c',
2033 include_directories : includes,
2034 link_with : [libshared],
2035 install_rpath : rootlibexecdir,
2037 public_programs += [exe]
2039 exe = executable('busctl',
2040 'src/busctl/busctl.c',
2041 'src/busctl/busctl-introspect.c',
2042 'src/busctl/busctl-introspect.h',
2043 include_directories : includes,
2044 link_with : [libshared],
2045 install_rpath : rootlibexecdir,
2047 public_programs += [exe]
2049 if conf.get('ENABLE_SYSUSERS', false)
2050 exe = executable('systemd-sysusers',
2051 'src/sysusers/sysusers.c',
2052 include_directories : includes,
2053 link_with : [libshared],
2054 install_rpath : rootlibexecdir,
2056 install_dir : rootbindir)
2057 public_programs += [exe]
2060 if conf.get('ENABLE_TMPFILES', false)
2061 exe = executable('systemd-tmpfiles',
2062 'src/tmpfiles/tmpfiles.c',
2063 include_directories : includes,
2064 link_with : [libshared],
2065 dependencies : [libacl],
2066 install_rpath : rootlibexecdir,
2068 install_dir : rootbindir)
2069 public_programs += [exe]
2072 if conf.get('ENABLE_HWDB', false)
2073 exe = executable('systemd-hwdb',
2075 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2076 include_directories : includes,
2077 link_with : [libudev_internal],
2078 install_rpath : udev_rpath,
2080 install_dir : rootbindir)
2081 public_programs += [exe]
2084 if conf.get('ENABLE_QUOTACHECK', false)
2085 executable('systemd-quotacheck',
2086 'src/quotacheck/quotacheck.c',
2087 include_directories : includes,
2088 link_with : [libshared],
2089 install_rpath : rootlibexecdir,
2091 install_dir : rootlibexecdir)
2094 exe = executable('systemd-socket-proxyd',
2095 'src/socket-proxy/socket-proxyd.c',
2096 include_directories : includes,
2097 link_with : [libshared],
2098 dependencies : [threads],
2099 install_rpath : rootlibexecdir,
2101 install_dir : rootlibexecdir)
2102 public_programs += [exe]
2104 exe = executable('systemd-udevd',
2105 systemd_udevd_sources,
2106 include_directories : includes,
2107 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
2108 link_with : [libudev_core,
2111 dependencies : [threads,
2116 install_rpath : udev_rpath,
2118 install_dir : rootlibexecdir)
2119 public_programs += [exe]
2121 exe = executable('udevadm',
2123 include_directories : includes,
2124 link_with : [libudev_core,
2127 dependencies : [threads,
2132 install_rpath : udev_rpath,
2134 install_dir : rootbindir)
2135 public_programs += [exe]
2137 executable('systemd-shutdown',
2138 systemd_shutdown_sources,
2139 include_directories : includes,
2140 link_with : [libshared],
2141 install_rpath : rootlibexecdir,
2143 install_dir : rootlibexecdir)
2145 executable('systemd-update-done',
2146 'src/update-done/update-done.c',
2147 include_directories : includes,
2148 link_with : [libshared],
2149 install_rpath : rootlibexecdir,
2151 install_dir : rootlibexecdir)
2153 executable('systemd-update-utmp',
2154 'src/update-utmp/update-utmp.c',
2155 include_directories : includes,
2156 link_with : [libshared],
2157 dependencies : [libaudit],
2158 install_rpath : rootlibexecdir,
2160 install_dir : rootlibexecdir)
2162 if conf.get('HAVE_KMOD', false)
2163 executable('systemd-modules-load',
2164 'src/modules-load/modules-load.c',
2165 include_directories : includes,
2166 link_with : [libshared],
2167 dependencies : [libkmod],
2168 install_rpath : rootlibexecdir,
2170 install_dir : rootlibexecdir)
2172 meson.add_install_script('sh', '-c',
2173 mkdir_p.format(modulesloaddir))
2174 meson.add_install_script('sh', '-c',
2175 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
2178 exe = executable('systemd-nspawn',
2179 systemd_nspawn_sources,
2180 'src/core/mount-setup.c', # FIXME: use a variable?
2181 'src/core/mount-setup.h',
2182 'src/core/loopback-setup.c',
2183 'src/core/loopback-setup.h',
2184 include_directories : [includes, include_directories('src/nspawn')],
2185 link_with : [libshared],
2186 dependencies : [libacl,
2190 install_rpath : rootlibexecdir,
2192 public_programs += [exe]
2194 if conf.get('ENABLE_NETWORKD', false)
2195 executable('systemd-networkd',
2196 systemd_networkd_sources,
2197 include_directories : includes,
2198 link_with : [libnetworkd_core,
2202 dependencies : [threads],
2203 install_rpath : rootlibexecdir,
2205 install_dir : rootlibexecdir)
2207 executable('systemd-networkd-wait-online',
2208 systemd_networkd_wait_online_sources,
2209 include_directories : includes,
2210 link_with : [libnetworkd_core,
2212 install_rpath : rootlibexecdir,
2214 install_dir : rootlibexecdir)
2216 exe = executable('networkctl',
2218 include_directories : includes,
2219 link_with : [libsystemd_network,
2221 install_rpath : rootlibexecdir,
2223 install_dir : rootbindir)
2224 public_programs += [exe]
2226 ############################################################
2228 foreach tuple : tests
2230 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2231 dependencies = tuple[2]
2232 condition = tuple.length() >= 4 ? tuple[3] : ''
2233 type = tuple.length() >= 5 ? tuple[4] : ''
2234 defs = tuple.length() >= 6 ? tuple[5] : []
2235 incs = tuple.length() >= 7 ? tuple[6] : includes
2238 name = sources[0].split('/')[-1].split('.')[0]
2239 if type.startswith('timeout=')
2240 timeout = type.split('=')[1].to_int()
2244 if condition == '' or conf.get(condition, false)
2248 include_directories : incs,
2249 link_with : link_with,
2250 dependencies : dependencies,
2252 install_rpath : rootlibexecdir,
2253 install : install_tests,
2254 install_dir : join_paths(testsdir, type))
2257 message('@0@ is a manual test'.format(name))
2258 elif type == 'unsafe' and want_tests != 'unsafe'
2259 message('@0@ is an unsafe test'.format(name))
2266 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2270 test_libsystemd_sym = executable(
2271 'test-libsystemd-sym',
2272 test_libsystemd_sym_c,
2273 include_directories : includes,
2274 link_with : [libsystemd],
2275 install : install_tests,
2276 install_dir : testsdir)
2277 test('test-libsystemd-sym',
2278 test_libsystemd_sym)
2280 test_libudev_sym = executable(
2283 include_directories : includes,
2284 c_args : ['-Wno-deprecated-declarations'],
2285 link_with : [libudev],
2286 install : install_tests,
2287 install_dir : testsdir)
2288 test('test-libudev-sym',
2291 ############################################################
2293 make_directive_index_py = find_program('tools/make-directive-index.py')
2294 make_man_index_py = find_program('tools/make-man-index.py')
2295 xml_helper_py = find_program('tools/xml_helper.py')
2296 hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
2300 subdir('sysusers.d')
2301 subdir('tmpfiles.d')
2306 subdir('shell-completion/bash')
2307 subdir('shell-completion/zsh')
2308 subdir('docs/sysvinit')
2309 subdir('docs/var-log')
2311 # FIXME: figure out if the warning is true:
2312 # https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2313 install_subdir('factory/etc',
2314 install_dir : factorydir)
2317 install_data('xorg/50-systemd-user.sh',
2318 install_dir : xinitrcdir)
2319 install_data('system-preset/90-systemd.preset',
2320 install_dir : systempresetdir)
2321 install_data('modprobe.d/systemd.conf',
2322 install_dir : modprobedir)
2323 install_data('README',
2330 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2331 install_dir : docdir)
2333 meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2334 meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2336 ############################################################
2338 meson_check_help = find_program('tools/meson-check-help.sh')
2340 foreach exec : public_programs
2341 name = exec.full_path().split('/')[-1]
2342 test('check-help-' + name,
2344 args : [exec.full_path()])
2347 ############################################################
2350 all_files = run_command(
2352 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
2355 all_files = files(all_files.stdout().split())
2360 command : ['env', 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
2364 command : ['env', 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
2368 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
2371 command : [meson_git_contrib_sh])
2375 git_head = run_command(
2377 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
2378 'rev-parse', 'HEAD']).stdout().strip()
2379 git_head_short = run_command(
2381 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
2382 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2386 command : ['git', 'archive',
2387 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
2389 '--prefix', 'systemd-@0@/'.format(git_head),
2393 ############################################################
2396 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2398 'prefix: @0@'.format(prefixdir),
2399 'rootprefix: @0@'.format(rootprefixdir),
2400 'sysconf dir: @0@'.format(sysconfdir),
2401 'includedir: @0@'.format(includedir),
2402 'lib dir: @0@'.format(libdir),
2403 'rootlib dir: @0@'.format(rootlibdir),
2404 'SysV init scripts: @0@'.format(sysvinit_path),
2405 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
2406 'PAM modules dir: @0@'.format(pamlibdir),
2407 'PAM configuration dir: @0@'.format(pamconfdir),
2408 'RPM macros dir: @0@'.format(rpmmacrosdir),
2409 'modprobe.d dir: @0@'.format(modprobedir),
2410 'D-Bus policy dir: @0@'.format(dbuspolicydir),
2411 'D-Bus session dir: @0@'.format(dbussessionservicedir),
2412 'D-Bus system dir: @0@'.format(dbussystemservicedir),
2413 'bash completions dir: @0@'.format(bashcompletiondir),
2414 'zsh completions dir: @0@'.format(zshcompletiondir),
2415 'extra start script: @0@'.format(get_option('rc-local')),
2416 'extra stop script: @0@'.format(get_option('halt-local')),
2417 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2418 get_option('debug-tty')),
2419 'TTY GID: @0@'.format(tty_gid),
2420 'maximum system UID: @0@'.format(system_uid_max),
2421 'maximum system GID: @0@'.format(system_gid_max),
2422 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
2423 'certificate root: @0@'.format(get_option('certificate-root')),
2424 'support URL: @0@'.format(support_url),
2425 'nobody user name: @0@'.format(get_option('nobody-user')),
2426 'nobody group name: @0@'.format(get_option('nobody-group')),
2427 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
2428 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
2430 'default DNSSEC mode: @0@'.format(default_dnssec),
2431 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2432 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2434 alt_dns_servers = '\n '.join(dns_servers.split(' '))
2435 alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2437 'default DNS servers: @0@'.format(alt_dns_servers),
2438 'default NTP servers: @0@'.format(alt_ntp_servers)]
2440 alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2441 '@@0@'.format(time_epoch)).stdout().strip()
2443 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2446 # CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2447 # CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2448 # LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2450 if conf.get('ENABLE_EFI', false)
2452 'efi arch: @0@'.format(efi_arch)]
2456 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2457 'EFI CC @0@'.format(efi_cc),
2458 'EFI libdir: @0@'.format(efi_libdir),
2459 'EFI ldsdir: @0@'.format(efi_ldsdir),
2460 'EFI includedir: @0@'.format(efi_incdir)]
2513 ['legacy pkla', install_polkit_pkla],
2515 ['gnu-efi', have_gnu_efi],
2521 ['nss-myhostname', conf.get('HAVE_MYHOSTNAME', false)],
2524 ['man pages', want_man],
2525 ['html pages', want_html],
2526 ['man page indices', want_man and have_lxml],
2527 ['split /usr', conf.get('HAVE_SPLIT_USR', false)],
2532 ['adm group', get_option('adm-group')],
2533 ['wheel group', get_option('wheel-group')],
2536 ['debug mmap cache'],
2539 cond = tuple.get(1, '')
2541 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2542 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
2543 cond = conf.get(ident1, false) or conf.get(ident2, false)
2548 missing += [tuple[0]]
2554 'enabled features: @0@'.format(', '.join(found)),
2556 'disabled features: @0@'.format(', '.join(missing)),
2558 message('\n '.join(status))