1 project('systemd', 'c',
10 meson_version : '>= 0.40',
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
17 conf = configuration_data()
18 conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
19 conf.set_quoted('PACKAGE_VERSION', meson.project_version())
21 substs = configuration_data()
22 substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
23 substs.set('PACKAGE_VERSION', meson.project_version())
27 #####################################################################
29 # Try to install the git pre-commit hook
30 git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
31 if git_hook.returncode() == 0
32 message(git_hook.stdout().strip())
35 #####################################################################
37 rootprefixdir = get_option('rootprefix')
38 if get_option('split-usr')
39 conf.set('HAVE_SPLIT_USR', true)
40 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/'
42 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/usr'
45 sysvinit_path = get_option('sysvinit-path')
46 sysvrcnd_path = get_option('sysvrcnd-path')
47 if sysvinit_path != '' or sysvrcnd_path != ''
48 conf.set('HAVE_SYSV_COMPAT', true,
49 description : 'SysV init scripts and rcN.d links are supported')
50 m4_defines += ['-DHAVE_SYSV_COMPAT']
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.
56 prefixdir = get_option('prefix')
57 if not prefixdir.startswith('/')
58 error('Prefix is not absolute: "@0@"'.format(prefixdir))
60 bindir = join_paths(prefixdir, get_option('bindir'))
61 libdir = join_paths(prefixdir, get_option('libdir'))
62 sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
63 includedir = join_paths(prefixdir, get_option('includedir'))
64 datadir = join_paths(prefixdir, get_option('datadir'))
65 localstatedir = join_paths('/', get_option('localstatedir'))
67 rootbindir = join_paths(rootprefixdir, 'bin')
68 rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
70 rootlibdir = get_option('rootlibdir')
72 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
75 # Dirs of external packages
76 pkgconfigdatadir = join_paths(datadir, 'pkgconfig')
77 pkgconfiglibdir = join_paths(libdir, 'pkgconfig')
78 polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
79 polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
80 polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
81 varlogdir = join_paths(localstatedir, 'log')
82 xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
83 rpmmacrosdir = get_option('rpmmacrosdir')
84 modprobedir = join_paths(prefixdir, 'lib/modprobe.d')
87 pkgdatadir = join_paths(datadir, 'systemd')
88 environmentdir = join_paths(prefixdir, 'lib/environment.d')
89 pkgsysconfdir = join_paths(sysconfdir, 'systemd')
90 userunitdir = join_paths(prefixdir, 'lib/systemd/user')
91 userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
92 tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
93 sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
94 sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
95 binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
96 modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
97 networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
98 pkgincludedir = join_paths(includedir, 'systemd')
99 systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
100 usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
101 systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
102 userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
103 systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
104 systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
105 systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
106 systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
107 udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
108 udevhomedir = udevlibexecdir
109 udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
110 udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
111 catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
112 kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
113 factorydir = join_paths(datadir, 'factory')
114 docdir = join_paths(datadir, 'doc/systemd')
115 bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
116 testsdir = join_paths(prefixdir, 'lib/systemd/tests')
117 systemdstatedir = join_paths(localstatedir, 'lib/systemd')
118 catalogstatedir = join_paths(systemdstatedir, 'catalog')
119 randomseeddir = join_paths(localstatedir, 'lib/systemd')
121 dbuspolicydir = get_option('dbuspolicydir')
122 if dbuspolicydir == ''
123 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
126 dbussessionservicedir = get_option('dbussessionservicedir')
127 if dbussessionservicedir == ''
128 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
131 dbussystemservicedir = get_option('dbussystemservicedir')
132 if dbussystemservicedir == ''
133 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
136 pamlibdir = get_option('pamlibdir')
138 pamlibdir = join_paths(rootlibdir, 'security')
141 pamconfdir = get_option('pamconfdir')
143 pamconfdir = join_paths(sysconfdir, 'pam.d')
146 conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
147 conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
148 conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
149 conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
150 conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
151 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
152 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
153 conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
154 conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
155 conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
156 conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
157 conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
158 conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
159 conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
160 conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
161 conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
162 conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
163 conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
164 conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
165 conf.set_quoted('ROOTPREFIX', rootprefixdir)
166 conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
167 conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
168 conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
169 conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
170 conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
171 conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
172 conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
173 conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
174 conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
175 conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
176 conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
177 conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
178 conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
179 conf.set_quoted('LIBDIR', libdir)
180 conf.set_quoted('ROOTLIBDIR', rootlibdir)
181 conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
182 conf.set_quoted('BOOTLIBDIR', bootlibdir)
183 conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
184 conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
185 conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
186 conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
187 conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
188 conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
190 conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
191 conf.set_quoted('ABS_SRC_DIR', meson.source_root())
193 substs.set('prefix', prefixdir)
194 substs.set('exec_prefix', prefixdir)
195 substs.set('libdir', libdir)
196 substs.set('rootlibdir', rootlibdir)
197 substs.set('includedir', includedir)
198 substs.set('pkgsysconfdir', pkgsysconfdir)
199 substs.set('bindir', bindir)
200 substs.set('rootbindir', rootbindir)
201 substs.set('rootlibexecdir', rootlibexecdir)
202 substs.set('systemunitdir', systemunitdir)
203 substs.set('userunitdir', userunitdir)
204 substs.set('systempresetdir', systempresetdir)
205 substs.set('userpresetdir', userpresetdir)
206 substs.set('udevhwdbdir', udevhwdbdir)
207 substs.set('udevrulesdir', udevrulesdir)
208 substs.set('udevlibexecdir', udevlibexecdir)
209 substs.set('catalogdir', catalogdir)
210 substs.set('tmpfilesdir', tmpfilesdir)
211 substs.set('sysusersdir', sysusersdir)
212 substs.set('sysctldir', sysctldir)
213 substs.set('binfmtdir', binfmtdir)
214 substs.set('modulesloaddir', modulesloaddir)
215 substs.set('systemgeneratordir', systemgeneratordir)
216 substs.set('usergeneratordir', usergeneratordir)
217 substs.set('systemenvgeneratordir', systemenvgeneratordir)
218 substs.set('userenvgeneratordir', userenvgeneratordir)
219 substs.set('systemshutdowndir', systemshutdowndir)
220 substs.set('systemsleepdir', systemsleepdir)
221 substs.set('VARLOGDIR', varlogdir)
222 substs.set('CERTIFICATEROOT', get_option('certificate-root'))
223 substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
224 substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
225 substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
226 substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
227 substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
228 substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
230 #####################################################################
232 cc = meson.get_compiler('c')
233 pkgconfig = import('pkgconfig')
234 check_compilation_sh = find_program('tools/meson-check-compilation.sh')
236 cxx = find_program('c++', required : false)
238 # Used only for tests
242 foreach arg : ['-Wextra',
245 '-Wmissing-include-dirs',
246 '-Wold-style-definition',
249 '-Wdeclaration-after-statement',
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',
258 '-Wstrict-prototypes',
260 '-Wmissing-noreturn',
263 '-Wstrict-aliasing=2',
270 '-fdiagnostics-show-option',
271 '-fno-strict-aliasing',
272 '-fvisibility=hidden',
274 '-fstack-protector-strong',
276 '--param=ssp-buffer-size=4',
278 if cc.has_argument(arg)
279 add_project_arguments(arg, language : 'c')
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.
285 foreach arg : ['unused-parameter',
286 'missing-field-initializers',
289 if cc.has_argument('-W' + arg)
290 add_project_arguments('-Wno-' + arg, language : 'c')
296 #include <inttypes.h>
297 typedef uint64_t usec_t;
298 usec_t now(clockid_t clock);
303 ', name : '-Werror=shadow with local shadowing')
304 add_project_arguments('-Werror=shadow', language : 'c')
307 if cc.get_id() == 'clang'
308 foreach arg : ['-Wno-typedef-redefinition',
309 '-Wno-gnu-variable-sized-type-not-at-end',
311 if cc.has_argument(arg,
312 name : '@0@ is supported'.format(arg))
313 add_project_arguments(arg, language : 'c')
318 link_test_c = files('tools/meson-link-test.c')
320 # --as-needed and --no-undefined are provided by meson by default,
321 # run mesonconf to see what is enabled
322 foreach arg : ['-Wl,-z,relro',
327 have = run_command(check_compilation_sh,
328 cc.cmd_array(), '-x', 'c', arg,
329 '-include', link_test_c).returncode() == 0
330 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
332 add_project_link_arguments(arg, language : 'c')
336 if get_option('buildtype') != 'debug'
337 foreach arg : ['-ffunction-sections',
339 if cc.has_argument(arg,
340 name : '@0@ is supported'.format(arg))
341 add_project_arguments(arg, language : 'c')
345 foreach arg : ['-Wl,--gc-sections']
346 have = run_command(check_compilation_sh,
347 cc.cmd_array(), '-x', 'c', arg,
348 '-include', link_test_c).returncode() == 0
349 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
351 add_project_link_arguments(arg, language : 'c')
356 cpp = ' '.join(cc.cmd_array()) + ' -E'
358 #####################################################################
359 # compilation result tests
361 conf.set('_GNU_SOURCE', true)
362 conf.set('__SANE_USERSPACE_TYPES__', true)
364 conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
365 conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
366 conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
367 conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
368 conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
369 conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
370 conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
374 #include <linux/ethtool.h>
376 # FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
378 foreach decl : ['char16_t',
381 'struct ethtool_link_settings',
384 # We get -1 if the size cannot be determined
385 have = cc.sizeof(decl, prefix : decl_headers) > 0
386 conf.set('HAVE_' + decl.underscorify().to_upper(), have)
389 foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
390 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
391 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
392 ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'],
393 ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
394 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
395 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
396 ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'],
397 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
398 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
399 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
400 # if_tunnel.h is buggy and cannot be included on its own
401 ['IFLA_VTI_REMOTE', 'linux/if_tunnel.h', '#include <net/if.h>'],
402 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
403 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
404 ['IFLA_BRIDGE_VLAN_INFO', 'linux/if_bridge.h'],
405 ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'],
406 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
407 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
408 ['NDA_IFINDEX', 'linux/neighbour.h'],
409 ['IFA_FLAGS', 'linux/if_addr.h'],
410 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
412 prefix = decl.length() > 2 ? decl[2] : ''
413 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
414 conf.set10('HAVE_DECL_' + decl[0], have)
418 foreach ident : ['secure_getenv', '__secure_getenv']
419 if not skip and cc.has_function(ident)
420 conf.set('HAVE_' + ident.to_upper(), true)
426 ['memfd_create', '''#include <sys/memfd.h>'''],
427 ['gettid', '''#include <sys/types.h>'''],
428 ['pivot_root', '''#include <stdlib.h>'''], # no known header declares pivot_root
429 ['name_to_handle_at', '''#define _GNU_SOURCE
430 #include <sys/types.h>
431 #include <sys/stat.h>
432 #include <fcntl.h>'''],
433 ['setns', '''#define _GNU_SOURCE
434 #include <sched.h>'''],
435 ['renameat2', '''#include <stdio.h>'''],
436 ['kcmp', '''#include <linux/kcmp.h>'''],
437 ['keyctl', '''#include <sys/types.h>
438 #include <keyutils.h>'''],
439 ['copy_file_range', '''#include <sys/syscall.h>
440 #include <unistd.h>'''],
441 ['explicit_bzero' , '''#include <string.h>'''],
444 have = cc.has_function(ident[0], prefix : ident[1])
445 conf.set10('HAVE_DECL_' + ident[0].to_upper(), have)
448 if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''')
449 conf.set('USE_SYS_RANDOM_H', true)
450 conf.set10('HAVE_DECL_GETRANDOM', true)
452 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
453 conf.set10('HAVE_DECL_GETRANDOM', have)
456 #####################################################################
458 sed = find_program('sed')
459 grep = find_program('grep')
460 awk = find_program('awk')
461 m4 = find_program('m4')
462 stat = find_program('stat')
463 git = find_program('git', required : false)
465 meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
466 mkdir_p = 'mkdir -p $DESTDIR/@0@'
467 test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
468 splash_bmp = files('test/splash.bmp')
470 # if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
471 # /usr/sbin, /sbin, and fall back to the default from middle column.
472 progs = [['telinit', '/lib/sysvinit/telinit'],
473 ['quotaon', '/usr/sbin/quotaon' ],
474 ['quotacheck', '/usr/sbin/quotacheck' ],
475 ['kill', '/usr/bin/kill' ],
476 ['kmod', '/usr/bin/kmod' ],
477 ['kexec', '/usr/sbin/kexec' ],
478 ['sulogin', '/usr/sbin/sulogin' ],
479 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
480 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
481 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
482 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
485 path = get_option(prog[0] + '-path')
487 message('Using @1@ for @0@'.format(prog[0], path))
489 exe = find_program(prog[0],
490 '/usr/sbin/' + prog[0],
493 path = exe.found() ? exe.path() : prog[1]
495 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
496 conf.set_quoted(name, path)
497 substs.set(name, path)
500 if run_command('ln', '--relative', '--help').returncode() != 0
501 error('ln does not support --relative')
504 ############################################################
506 gperf = find_program('gperf')
508 gperf_test_format = '''
510 const char * in_word_set(const char *, @0@);
513 gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
514 gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
515 gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
516 if cc.compiles(gperf_test)
517 gperf_len_type = 'size_t'
519 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
520 if cc.compiles(gperf_test)
521 gperf_len_type = 'unsigned'
523 error('unable to determine gperf len type')
526 message('gperf len type is @0@'.format(gperf_len_type))
527 conf.set('GPERF_LEN_TYPE', gperf_len_type,
528 description : 'The type of gperf "len" parameter')
530 ############################################################
532 if not cc.has_header('sys/capability.h')
533 error('POSIX caps headers not found')
535 foreach header : ['linux/btrfs.h',
537 'linux/vm_sockets.h',
538 'valgrind/memcheck.h',
539 'valgrind/valgrind.h',
542 conf.set('HAVE_' + header.underscorify().to_upper(),
543 cc.has_header(header))
546 ############################################################
548 conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
549 conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
550 gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
552 default_hierarchy = get_option('default-hierarchy')
553 conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
554 description : 'default cgroup hierarchy as string')
555 if default_hierarchy == 'legacy'
556 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
557 elif default_hierarchy == 'hybrid'
558 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
560 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
563 time_epoch = get_option('time-epoch')
566 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
568 time_epoch = time_epoch.to_int()
569 conf.set('TIME_EPOCH', time_epoch)
571 system_uid_max = get_option('system-uid-max')
572 if system_uid_max == ''
573 system_uid_max = run_command(
575 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
576 '/etc/login.defs').stdout()
578 system_uid_max = system_uid_max.to_int()
579 conf.set('SYSTEM_UID_MAX', system_uid_max)
580 substs.set('systemuidmax', system_uid_max)
581 message('maximum system UID is @0@'.format(system_uid_max))
583 conf.set_quoted('NOBODY_USER_NAME', get_option('nobody-user'))
584 conf.set_quoted('NOBODY_GROUP_NAME', get_option('nobody-group'))
586 system_gid_max = get_option('system-gid-max')
587 if system_gid_max == ''
588 system_gid_max = run_command(
590 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
591 '/etc/login.defs').stdout()
593 system_gid_max = system_gid_max.to_int()
594 conf.set('SYSTEM_GID_MAX', system_gid_max)
595 substs.set('systemgidmax', system_gid_max)
596 message('maximum system GID is @0@'.format(system_gid_max))
598 tty_gid = get_option('tty-gid')
599 conf.set('TTY_GID', tty_gid)
600 substs.set('TTY_GID', tty_gid)
602 if get_option('adm-group')
603 m4_defines += ['-DENABLE_ADM_GROUP']
606 if get_option('wheel-group')
607 m4_defines += ['-DENABLE_WHEEL_GROUP']
610 substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
612 kill_user_processes = get_option('default-kill-user-processes')
613 conf.set10('KILL_USER_PROCESSES', kill_user_processes)
614 substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
616 dns_servers = get_option('dns-servers')
617 conf.set_quoted('DNS_SERVERS', dns_servers)
618 substs.set('DNS_SERVERS', dns_servers)
620 ntp_servers = get_option('ntp-servers')
621 conf.set_quoted('NTP_SERVERS', ntp_servers)
622 substs.set('NTP_SERVERS', ntp_servers)
624 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
626 substs.set('SUSHELL', get_option('debug-shell'))
627 substs.set('DEBUGTTY', get_option('debug-tty'))
629 debug = get_option('debug')
631 foreach name : debug.split(',')
633 conf.set('ENABLE_DEBUG_HASHMAP', true)
634 elif name == 'mmap-cache'
635 conf.set('ENABLE_DEBUG_MMAP_CACHE', true)
637 message('unknown debug option "@0@", ignoring'.format(name))
642 #####################################################################
644 threads = dependency('threads')
645 librt = cc.find_library('rt')
646 libm = cc.find_library('m')
647 libdl = cc.find_library('dl')
648 libcrypt = cc.find_library('crypt')
650 libcap = dependency('libcap', required : false)
651 if not libcap.found()
652 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
653 libcap = cc.find_library('cap')
656 libmount = dependency('mount',
659 want_seccomp = get_option('seccomp')
660 if want_seccomp != 'false'
661 libseccomp = dependency('libseccomp',
662 version : '>= 2.3.1',
663 required : want_seccomp == 'true')
664 if libseccomp.found()
665 conf.set('HAVE_SECCOMP', true)
666 m4_defines += ['-DHAVE_SECCOMP']
672 want_selinux = get_option('selinux')
673 if want_selinux != 'false'
674 libselinux = dependency('libselinux',
675 version : '>= 2.1.9',
676 required : want_selinux == 'true')
677 if libselinux.found()
678 conf.set('HAVE_SELINUX', true)
679 m4_defines += ['-DHAVE_SELINUX']
685 want_apparmor = get_option('apparmor')
686 if want_apparmor != 'false'
687 libapparmor = dependency('libapparmor',
688 required : want_apparmor == 'true')
689 if libapparmor.found()
690 conf.set('HAVE_APPARMOR', true)
691 m4_defines += ['-DHAVE_APPARMOR']
697 smack_run_label = get_option('smack-run-label')
698 if smack_run_label != ''
699 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
700 m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
703 want_polkit = get_option('polkit')
704 install_polkit = false
705 install_polkit_pkla = false
706 if want_polkit != 'false'
707 conf.set('ENABLE_POLKIT', true)
708 install_polkit = true
710 libpolkit = dependency('polkit-gobject-1',
712 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
713 message('Old polkit detected, will install pkla files')
714 install_polkit_pkla = true
718 want_acl = get_option('acl')
719 if want_acl != 'false'
720 libacl = cc.find_library('acl', required : want_acl == 'true')
722 conf.set('HAVE_ACL', true)
723 m4_defines += ['-DHAVE_ACL']
729 want_audit = get_option('audit')
730 if want_audit != 'false'
731 libaudit = dependency('audit', required : want_audit == 'true')
732 conf.set('HAVE_AUDIT', libaudit.found())
737 want_blkid = get_option('blkid')
738 if want_blkid != 'false'
739 libblkid = dependency('blkid', required : want_blkid == 'true')
740 conf.set('HAVE_BLKID', libblkid.found())
745 want_kmod = get_option('kmod')
746 if want_kmod != 'false'
747 libkmod = dependency('libkmod',
749 required : want_kmod == 'true')
750 conf.set('HAVE_KMOD', libkmod.found())
755 want_pam = get_option('pam')
756 if want_pam != 'false'
757 libpam = cc.find_library('pam', required : want_pam == 'true')
758 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
759 if libpam.found() and libpam_misc.found()
760 conf.set('HAVE_PAM', true)
761 m4_defines += ['-DHAVE_PAM']
768 want_microhttpd = get_option('microhttpd')
769 if want_microhttpd != 'false'
770 libmicrohttpd = dependency('libmicrohttpd',
771 version : '>= 0.9.33',
772 required : want_microhttpd == 'true')
773 if libmicrohttpd.found()
774 conf.set('HAVE_MICROHTTPD', true)
775 m4_defines += ['-DHAVE_MICROHTTPD']
781 want_libcryptsetup = get_option('libcryptsetup')
782 if want_libcryptsetup != 'false'
783 libcryptsetup = dependency('libcryptsetup',
784 version : '>= 1.6.0',
785 required : want_libcryptsetup == 'true')
786 conf.set('HAVE_LIBCRYPTSETUP', libcryptsetup.found())
791 want_libcurl = get_option('libcurl')
792 if want_libcurl != 'false'
793 libcurl = dependency('libcurl',
794 version : '>= 7.32.0',
795 required : want_libcurl == 'true')
797 conf.set('HAVE_LIBCURL', true)
798 m4_defines += ['-DHAVE_LIBCURL']
804 want_libidn = get_option('libidn')
805 want_libidn2 = get_option('libidn2')
806 if want_libidn == 'true' and want_libidn2 == 'true'
807 error('libidn and libidn2 cannot be requested simultaneously')
810 if want_libidn != 'false' and want_libidn2 != 'true'
811 libidn = dependency('libidn',
812 required : want_libidn == 'true')
814 conf.set('HAVE_LIBIDN', true)
815 m4_defines += ['-DHAVE_LIBIDN']
820 if not conf.get('HAVE_LIBIDN', false) and want_libidn2 != 'false'
821 # libidn is used for both libidn and libidn2 objects
822 libidn = dependency('libidn2',
823 required : want_libidn2 == 'true')
825 conf.set('HAVE_LIBIDN2', true)
826 m4_defines += ['-DHAVE_LIBIDN2']
830 want_libiptc = get_option('libiptc')
831 if want_libiptc != 'false'
832 libiptc = dependency('libiptc',
833 required : want_libiptc == 'true')
835 conf.set('HAVE_LIBIPTC', true)
836 m4_defines += ['-DHAVE_LIBIPTC']
842 want_qrencode = get_option('qrencode')
843 if want_qrencode != 'false'
844 libqrencode = dependency('libqrencode',
845 required : want_qrencode == 'true')
846 conf.set('HAVE_QRENCODE', libqrencode.found())
851 want_gcrypt = get_option('gcrypt')
852 if want_gcrypt != 'false'
853 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
854 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
856 have_deps = libgcrypt.found() and libgpg_error.found()
857 conf.set('HAVE_GCRYPT', have_deps)
859 # link to neither of the libs if one is not found
868 want_gnutls = get_option('gnutls')
869 if want_gnutls != 'false'
870 libgnutls = dependency('gnutls',
871 version : '>= 3.1.4',
872 required : want_gnutls == 'true')
873 conf.set('HAVE_GNUTLS', libgnutls.found())
878 want_elfutils = get_option('elfutils')
879 if want_elfutils != 'false'
880 libdw = dependency('libdw',
881 required : want_elfutils == 'true')
882 conf.set('HAVE_ELFUTILS', libdw.found())
887 want_zlib = get_option('zlib')
888 if want_zlib != 'false'
889 libz = dependency('zlib',
890 required : want_zlib == 'true')
891 conf.set('HAVE_ZLIB', libz.found())
896 want_bzip2 = get_option('bzip2')
897 if want_bzip2 != 'false'
898 libbzip2 = cc.find_library('bz2',
899 required : want_bzip2 == 'true')
900 conf.set('HAVE_BZIP2', libbzip2.found())
905 want_xz = get_option('xz')
906 if want_xz != 'false'
907 libxz = dependency('liblzma',
908 required : want_xz == 'true')
909 conf.set('HAVE_XZ', libxz.found())
914 want_lz4 = get_option('lz4')
915 if want_lz4 != 'false'
916 liblz4 = dependency('liblz4',
917 required : want_lz4 == 'true')
918 conf.set('HAVE_LZ4', liblz4.found())
923 want_xkbcommon = get_option('xkbcommon')
924 if want_xkbcommon != 'false'
925 libxkbcommon = dependency('xkbcommon',
926 version : '>= 0.3.0',
927 required : want_xkbcommon == 'true')
928 conf.set('HAVE_XKBCOMMON', libxkbcommon.found())
933 want_glib = get_option('glib')
934 if want_glib != 'false'
935 libglib = dependency('glib-2.0',
936 version : '>= 2.22.0',
937 required : want_glib == 'true')
938 libgobject = dependency('gobject-2.0',
939 version : '>= 2.22.0',
940 required : want_glib == 'true')
941 libgio = dependency('gio-2.0',
942 required : want_glib == 'true')
943 have = libglib.found() and libgobject.found() and libgio.found()
944 conf.set('HAVE_GLIB', have)
951 want_dbus = get_option('dbus')
952 if want_dbus != 'false'
953 libdbus = dependency('dbus-1',
954 version : '>= 1.3.2',
955 required : want_dbus == 'true')
956 conf.set('HAVE_DBUS', libdbus.found())
961 default_dnssec = get_option('default-dnssec')
962 if default_dnssec != 'no' and not conf.get('HAVE_GCRYPT', false)
963 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
964 default_dnssec = 'no'
966 conf.set('DEFAULT_DNSSEC_MODE',
967 'DNSSEC_' + default_dnssec.underscorify().to_upper())
968 substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
970 want_importd = get_option('importd')
971 if want_importd != 'false'
972 have_deps = (conf.get('HAVE_LIBCURL', false) and
973 conf.get('HAVE_ZLIB', false) and
974 conf.get('HAVE_BZIP2', false) and
975 conf.get('HAVE_XZ', false) and
976 conf.get('HAVE_GCRYPT', false))
977 conf.set('ENABLE_IMPORTD', have_deps)
978 if want_importd == 'true' and not have_deps
979 error('importd support was requested, but dependencies are not available')
983 want_remote = get_option('remote')
984 if want_remote != 'false'
985 have_deps = [conf.get('HAVE_MICROHTTPD', false),
986 conf.get('HAVE_LIBCURL', false)]
987 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
988 # it's possible to build one without the other. Complain only if
989 # support was explictly requested. The auxiliary files like sysusers
990 # config should be installed when any of the programs are built.
991 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
992 error('remote support was requested, but dependencies are not available')
994 conf.set('ENABLE_REMOTE', have_deps[0] or have_deps[1])
997 foreach pair : [['utmp', 'HAVE_UTMP'],
998 ['hibernate', 'ENABLE_HIBERNATE'],
999 ['environment-d', 'ENABLE_ENVIRONMENT_D'],
1000 ['binfmt', 'ENABLE_BINFMT'],
1001 ['coredump', 'ENABLE_COREDUMP'],
1002 ['resolve', 'ENABLE_RESOLVED'],
1003 ['logind', 'ENABLE_LOGIND'],
1004 ['hostnamed', 'ENABLE_HOSTNAMED'],
1005 ['localed', 'ENABLE_LOCALED'],
1006 ['machined', 'ENABLE_MACHINED'],
1007 ['networkd', 'ENABLE_NETWORKD'],
1008 ['timedated', 'ENABLE_TIMEDATED'],
1009 ['timesyncd', 'ENABLE_TIMESYNCD'],
1010 ['myhostname', 'HAVE_MYHOSTNAME'],
1011 ['firstboot', 'ENABLE_FIRSTBOOT'],
1012 ['randomseed', 'ENABLE_RANDOMSEED'],
1013 ['backlight', 'ENABLE_BACKLIGHT'],
1014 ['vconsole', 'ENABLE_VCONSOLE'],
1015 ['quotacheck', 'ENABLE_QUOTACHECK'],
1016 ['sysusers', 'ENABLE_SYSUSERS'],
1017 ['tmpfiles', 'ENABLE_TMPFILES'],
1018 ['hwdb', 'ENABLE_HWDB'],
1019 ['rfkill', 'ENABLE_RFKILL'],
1020 ['ldconfig', 'ENABLE_LDCONFIG'],
1021 ['efi', 'ENABLE_EFI'],
1022 ['tpm', 'ENABLE_TPM'],
1023 ['ima', 'HAVE_IMA'],
1024 ['smack', 'HAVE_SMACK'],
1025 ['gshadow', 'ENABLE_GSHADOW'],
1026 ['idn', 'ENABLE_IDN'],
1027 ['nss-systemd', 'ENABLE_NSS_SYSTEMD'],
1030 if get_option(pair[0])
1031 conf.set(pair[1], true)
1032 m4_defines += ['-D' + pair[1]]
1036 want_tests = get_option('tests')
1037 install_tests = get_option('install-tests')
1040 conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', get_option('slow-tests'))
1042 #####################################################################
1044 if get_option('efi')
1045 efi_arch = host_machine.cpu_family()
1047 if efi_arch == 'x86'
1048 EFI_MACHINE_TYPE_NAME = 'ia32'
1049 gnu_efi_arch = 'ia32'
1050 elif efi_arch == 'x86_64'
1051 EFI_MACHINE_TYPE_NAME = 'x64'
1052 gnu_efi_arch = 'x86_64'
1053 elif efi_arch == 'arm'
1054 EFI_MACHINE_TYPE_NAME = 'arm'
1055 gnu_efi_arch = 'arm'
1056 elif efi_arch == 'aarch64'
1057 EFI_MACHINE_TYPE_NAME = 'aa64'
1058 gnu_efi_arch = 'aarch64'
1060 EFI_MACHINE_TYPE_NAME = ''
1064 conf.set('ENABLE_EFI', true)
1065 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
1067 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex').to_int())
1070 #####################################################################
1072 config_h = configure_file(
1073 output : 'config.h',
1074 configuration : conf)
1076 includes = include_directories('src/basic',
1086 'src/libsystemd/sd-bus',
1087 'src/libsystemd/sd-device',
1088 'src/libsystemd/sd-hwdb',
1089 'src/libsystemd/sd-id128',
1090 'src/libsystemd/sd-netlink',
1091 'src/libsystemd/sd-network',
1092 'src/libsystemd-network',
1095 add_project_arguments('-include', 'config.h', language : 'c')
1097 gcrypt_util_sources = files('src/shared/gcrypt-util.h',
1098 'src/shared/gcrypt-util.c')
1102 subdir('src/systemd')
1104 subdir('src/libsystemd')
1105 subdir('src/libsystemd-network')
1106 subdir('src/journal')
1109 libjournal_core = static_library(
1111 libjournal_core_sources,
1113 include_directories : includes,
1116 libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
1117 libsystemd = shared_library(
1119 libsystemd_internal_sources,
1120 journal_internal_sources,
1122 include_directories : includes,
1123 link_args : ['-shared',
1124 '-Wl,--version-script=' + libsystemd_sym_path],
1125 link_with : [libbasic],
1126 dependencies : [threads,
1131 link_depends : libsystemd_sym,
1133 install_dir : rootlibdir)
1135 ############################################################
1137 # binaries that have --help and are intended for use by humans,
1138 # usually, but not always, installed in /bin.
1139 public_programs = []
1141 subdir('src/libudev')
1142 subdir('src/shared')
1145 subdir('src/network')
1147 subdir('src/analyze')
1148 subdir('src/journal-remote')
1149 subdir('src/coredump')
1150 subdir('src/hostname')
1151 subdir('src/import')
1152 subdir('src/kernel-install')
1153 subdir('src/locale')
1154 subdir('src/machine')
1155 subdir('src/nspawn')
1156 subdir('src/resolve')
1157 subdir('src/timedate')
1158 subdir('src/timesync')
1159 subdir('src/vconsole')
1160 subdir('src/sulogin-shell')
1161 subdir('src/boot/efi')
1166 ############################################################
1168 # only static linking apart from libdl, to make sure that the
1169 # module is linked to all libraries that it uses.
1170 test_dlopen = executable(
1173 include_directories : includes,
1174 link_with : [libbasic],
1175 dependencies : [libdl])
1177 foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME'],
1178 ['systemd', 'ENABLE_NSS_SYSTEMD'],
1179 ['mymachines', 'ENABLE_MACHINED'],
1180 ['resolve', 'ENABLE_RESOLVED']]
1182 condition = tuple[1] == '' or conf.get(tuple[1], false)
1186 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1187 version_script_arg = join_paths(meson.current_source_dir(), sym)
1189 nss = shared_library(
1191 'src/nss-@0@/nss-@0@.c'.format(module),
1193 include_directories : includes,
1194 link_args : ['-shared',
1195 '-Wl,--version-script=' + version_script_arg,
1197 link_with : [libsystemd_internal,
1199 dependencies : [threads,
1203 install_dir : rootlibdir)
1205 # We cannot use shared_module because it does not support version suffix.
1206 # Unfortunately shared_library insists on creating the symlink…
1207 meson.add_install_script('sh', '-c',
1208 'rm $DESTDIR@0@/libnss_@1@.so'
1209 .format(rootlibdir, module))
1211 test('dlopen-nss_' + module,
1213 args : [nss.full_path()]) # path to dlopen must include a slash
1217 ############################################################
1219 executable('systemd',
1221 include_directories : includes,
1222 link_with : [libcore,
1224 dependencies : [threads,
1230 install_rpath : rootlibexecdir,
1232 install_dir : rootlibexecdir)
1234 exe = executable('systemd-analyze',
1235 systemd_analyze_sources,
1236 include_directories : includes,
1237 link_with : [libcore,
1239 dependencies : [threads,
1245 install_rpath : rootlibexecdir,
1247 public_programs += [exe]
1249 executable('systemd-journald',
1250 systemd_journald_sources,
1251 include_directories : includes,
1252 link_with : [libjournal_core,
1254 dependencies : [threads,
1258 install_rpath : rootlibexecdir,
1260 install_dir : rootlibexecdir)
1262 exe = executable('systemd-cat',
1263 systemd_cat_sources,
1264 include_directories : includes,
1265 link_with : [libjournal_core,
1267 dependencies : [threads],
1268 install_rpath : rootlibexecdir,
1270 public_programs += [exe]
1272 exe = executable('journalctl',
1274 include_directories : includes,
1275 link_with : [libshared],
1276 dependencies : [threads,
1280 install_rpath : rootlibexecdir,
1282 install_dir : rootbindir)
1283 public_programs += [exe]
1285 executable('systemd-getty-generator',
1286 'src/getty-generator/getty-generator.c',
1287 include_directories : includes,
1288 link_with : [libshared],
1289 install_rpath : rootlibexecdir,
1291 install_dir : systemgeneratordir)
1293 executable('systemd-debug-generator',
1294 'src/debug-generator/debug-generator.c',
1295 include_directories : includes,
1296 link_with : [libshared],
1297 install_rpath : rootlibexecdir,
1299 install_dir : systemgeneratordir)
1301 executable('systemd-fstab-generator',
1302 'src/fstab-generator/fstab-generator.c',
1303 'src/core/mount-setup.c',
1304 include_directories : includes,
1305 link_with : [libshared],
1306 install_rpath : rootlibexecdir,
1308 install_dir : systemgeneratordir)
1310 if conf.get('ENABLE_ENVIRONMENT_D', false)
1311 executable('30-systemd-environment-d-generator',
1312 'src/environment-d-generator/environment-d-generator.c',
1313 include_directories : includes,
1314 link_with : [libshared],
1315 install_rpath : rootlibexecdir,
1317 install_dir : userenvgeneratordir)
1319 meson.add_install_script(meson_make_symlink,
1320 join_paths(sysconfdir, 'environment'),
1321 join_paths(environmentdir, '99-environment.conf'))
1324 if conf.get('ENABLE_HIBERNATE', false)
1325 executable('systemd-hibernate-resume-generator',
1326 'src/hibernate-resume/hibernate-resume-generator.c',
1327 include_directories : includes,
1328 link_with : [libshared],
1329 install_rpath : rootlibexecdir,
1331 install_dir : systemgeneratordir)
1333 executable('systemd-hibernate-resume',
1334 'src/hibernate-resume/hibernate-resume.c',
1335 include_directories : includes,
1336 link_with : [libshared],
1337 install_rpath : rootlibexecdir,
1339 install_dir : rootlibexecdir)
1342 if conf.get('HAVE_BLKID', false)
1343 executable('systemd-gpt-auto-generator',
1344 'src/gpt-auto-generator/gpt-auto-generator.c',
1345 'src/basic/blkid-util.h',
1346 include_directories : includes,
1347 link_with : [libshared],
1348 dependencies : libblkid,
1349 install_rpath : rootlibexecdir,
1351 install_dir : systemgeneratordir)
1353 exe = executable('systemd-dissect',
1354 'src/dissect/dissect.c',
1355 include_directories : includes,
1356 link_with : [libshared],
1357 install_rpath : rootlibexecdir,
1359 install_dir : rootlibexecdir)
1360 public_programs += [exe]
1363 if conf.get('ENABLE_RESOLVED', false)
1364 executable('systemd-resolved',
1365 systemd_resolved_sources,
1366 gcrypt_util_sources,
1367 include_directories : includes,
1368 link_with : [libshared],
1369 dependencies : [threads,
1374 install_rpath : rootlibexecdir,
1376 install_dir : rootlibexecdir)
1378 exe = executable('systemd-resolve',
1379 systemd_resolve_sources,
1380 gcrypt_util_sources,
1381 include_directories : includes,
1382 link_with : [libshared],
1383 dependencies : [threads,
1388 install_rpath : rootlibexecdir,
1390 public_programs += [exe]
1393 if conf.get('ENABLE_LOGIND', false)
1394 executable('systemd-logind',
1395 systemd_logind_sources,
1396 include_directories : includes,
1397 link_with : [liblogind_core,
1399 dependencies : [threads,
1401 install_rpath : rootlibexecdir,
1403 install_dir : rootlibexecdir)
1405 exe = executable('loginctl',
1407 include_directories : includes,
1408 link_with : [libshared],
1409 dependencies : [threads,
1412 install_rpath : rootlibexecdir,
1414 install_dir : rootbindir)
1415 public_programs += [exe]
1417 exe = executable('systemd-inhibit',
1418 'src/login/inhibit.c',
1419 include_directories : includes,
1420 link_with : [libshared],
1421 install_rpath : rootlibexecdir,
1423 install_dir : rootbindir)
1424 public_programs += [exe]
1426 if conf.get('HAVE_PAM', false)
1427 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1428 pam_systemd = shared_library(
1432 include_directories : includes,
1433 link_args : ['-shared',
1434 '-Wl,--version-script=' + version_script_arg],
1435 link_with : [libsystemd_internal,
1437 dependencies : [threads,
1440 link_depends : pam_systemd_sym,
1442 install_dir : pamlibdir)
1444 test('dlopen-pam_systemd',
1446 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1450 if conf.get('HAVE_PAM', false)
1451 executable('systemd-user-sessions',
1452 'src/user-sessions/user-sessions.c',
1453 include_directories : includes,
1454 link_with : [libshared],
1455 install_rpath : rootlibexecdir,
1457 install_dir : rootlibexecdir)
1460 if conf.get('ENABLE_EFI', false) and conf.get('HAVE_BLKID', false)
1461 exe = executable('bootctl',
1462 'src/boot/bootctl.c',
1463 include_directories : includes,
1464 link_with : [libshared],
1465 dependencies : [libblkid],
1466 install_rpath : rootlibexecdir,
1468 public_programs += [exe]
1471 exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1472 include_directories : includes,
1473 link_with : [libshared],
1474 dependencies : [threads],
1475 install_rpath : rootlibexecdir,
1477 public_programs += [exe]
1479 exe = executable('systemctl', 'src/systemctl/systemctl.c',
1480 include_directories : includes,
1481 link_with : [libshared],
1482 dependencies : [threads,
1487 install_rpath : rootlibexecdir,
1489 install_dir : rootbindir)
1490 public_programs += [exe]
1492 if conf.get('ENABLE_BACKLIGHT', false)
1493 executable('systemd-backlight',
1494 'src/backlight/backlight.c',
1495 include_directories : includes,
1496 link_with : [libshared],
1497 install_rpath : rootlibexecdir,
1499 install_dir : rootlibexecdir)
1502 if conf.get('ENABLE_RFKILL', false)
1503 executable('systemd-rfkill',
1504 'src/rfkill/rfkill.c',
1505 include_directories : includes,
1506 link_with : [libshared],
1507 install_rpath : rootlibexecdir,
1509 install_dir : rootlibexecdir)
1512 executable('systemd-system-update-generator',
1513 'src/system-update-generator/system-update-generator.c',
1514 include_directories : includes,
1515 link_with : [libshared],
1516 install_rpath : rootlibexecdir,
1518 install_dir : systemgeneratordir)
1520 if conf.get('HAVE_LIBCRYPTSETUP', false)
1521 executable('systemd-cryptsetup',
1522 'src/cryptsetup/cryptsetup.c',
1523 include_directories : includes,
1524 link_with : [libshared],
1525 dependencies : [libcryptsetup],
1526 install_rpath : rootlibexecdir,
1528 install_dir : rootlibexecdir)
1530 executable('systemd-cryptsetup-generator',
1531 'src/cryptsetup/cryptsetup-generator.c',
1532 include_directories : includes,
1533 link_with : [libshared],
1534 dependencies : [libcryptsetup],
1535 install_rpath : rootlibexecdir,
1537 install_dir : systemgeneratordir)
1539 executable('systemd-veritysetup',
1540 'src/veritysetup/veritysetup.c',
1541 include_directories : includes,
1542 link_with : [libshared],
1543 dependencies : [libcryptsetup],
1544 install_rpath : rootlibexecdir,
1546 install_dir : rootlibexecdir)
1548 executable('systemd-veritysetup-generator',
1549 'src/veritysetup/veritysetup-generator.c',
1550 include_directories : includes,
1551 link_with : [libshared],
1552 dependencies : [libcryptsetup],
1553 install_rpath : rootlibexecdir,
1555 install_dir : systemgeneratordir)
1558 if conf.get('HAVE_SYSV_COMPAT', false)
1559 executable('systemd-sysv-generator',
1560 'src/sysv-generator/sysv-generator.c',
1561 include_directories : includes,
1562 link_with : [libshared],
1563 install_rpath : rootlibexecdir,
1565 install_dir : systemgeneratordir)
1567 executable('systemd-rc-local-generator',
1568 'src/rc-local-generator/rc-local-generator.c',
1569 include_directories : includes,
1570 link_with : [libshared],
1571 install_rpath : rootlibexecdir,
1573 install_dir : systemgeneratordir)
1576 if conf.get('ENABLE_HOSTNAMED', false)
1577 executable('systemd-hostnamed',
1578 'src/hostname/hostnamed.c',
1579 include_directories : includes,
1580 link_with : [libshared],
1581 install_rpath : rootlibexecdir,
1583 install_dir : rootlibexecdir)
1585 exe = executable('hostnamectl',
1586 'src/hostname/hostnamectl.c',
1587 include_directories : includes,
1588 link_with : [libshared],
1589 install_rpath : rootlibexecdir,
1591 public_programs += [exe]
1594 if conf.get('ENABLE_LOCALED', false)
1595 if conf.get('HAVE_XKBCOMMON', false)
1596 # logind will load libxkbcommon.so dynamically on its own
1602 executable('systemd-localed',
1603 systemd_localed_sources,
1604 include_directories : includes,
1605 link_with : [libshared],
1606 dependencies : deps,
1607 install_rpath : rootlibexecdir,
1609 install_dir : rootlibexecdir)
1611 exe = executable('localectl',
1613 include_directories : includes,
1614 link_with : [libshared],
1615 install_rpath : rootlibexecdir,
1617 public_programs += [exe]
1620 if conf.get('ENABLE_TIMEDATED', false)
1621 executable('systemd-timedated',
1622 'src/timedate/timedated.c',
1623 include_directories : includes,
1624 link_with : [libshared],
1625 install_rpath : rootlibexecdir,
1627 install_dir : rootlibexecdir)
1629 exe = executable('timedatectl',
1630 'src/timedate/timedatectl.c',
1631 include_directories : includes,
1632 install_rpath : rootlibexecdir,
1633 link_with : [libshared],
1635 public_programs += [exe]
1638 if conf.get('ENABLE_TIMESYNCD', false)
1639 executable('systemd-timesyncd',
1640 systemd_timesyncd_sources,
1641 include_directories : includes,
1642 link_with : [libshared],
1643 dependencies : [threads,
1645 install_rpath : rootlibexecdir,
1647 install_dir : rootlibexecdir)
1650 if conf.get('ENABLE_MACHINED', false)
1651 executable('systemd-machined',
1652 systemd_machined_sources,
1653 include_directories : includes,
1654 link_with : [libmachine_core,
1656 install_rpath : rootlibexecdir,
1658 install_dir : rootlibexecdir)
1660 exe = executable('machinectl',
1661 'src/machine/machinectl.c',
1662 include_directories : includes,
1663 link_with : [libshared],
1664 dependencies : [threads,
1667 install_rpath : rootlibexecdir,
1669 install_dir : rootbindir)
1670 public_programs += [exe]
1673 if conf.get('ENABLE_IMPORTD', false)
1674 executable('systemd-importd',
1675 systemd_importd_sources,
1676 include_directories : includes,
1677 link_with : [libshared],
1678 dependencies : [threads],
1679 install_rpath : rootlibexecdir,
1681 install_dir : rootlibexecdir)
1683 systemd_pull = executable('systemd-pull',
1684 systemd_pull_sources,
1685 include_directories : includes,
1686 link_with : [libshared],
1687 dependencies : [libcurl,
1692 install_rpath : rootlibexecdir,
1694 install_dir : rootlibexecdir)
1696 systemd_import = executable('systemd-import',
1697 systemd_import_sources,
1698 include_directories : includes,
1699 link_with : [libshared],
1700 dependencies : [libcurl,
1704 install_rpath : rootlibexecdir,
1706 install_dir : rootlibexecdir)
1708 systemd_export = executable('systemd-export',
1709 systemd_export_sources,
1710 include_directories : includes,
1711 link_with : [libshared],
1712 dependencies : [libcurl,
1716 install_rpath : rootlibexecdir,
1718 install_dir : rootlibexecdir)
1719 public_programs += [systemd_pull, systemd_import, systemd_export]
1722 if conf.get('ENABLE_REMOTE', false) and conf.get('HAVE_LIBCURL', false)
1723 exe = executable('systemd-journal-upload',
1724 systemd_journal_upload_sources,
1725 include_directories : includes,
1726 link_with : [libshared],
1727 dependencies : [threads,
1732 install_rpath : rootlibexecdir,
1734 install_dir : rootlibexecdir)
1735 public_programs += [exe]
1738 if conf.get('ENABLE_REMOTE', false) and conf.get('HAVE_MICROHTTPD', false)
1739 s_j_remote = executable('systemd-journal-remote',
1740 systemd_journal_remote_sources,
1741 include_directories : includes,
1742 link_with : [libshared],
1743 dependencies : [threads,
1748 install_rpath : rootlibexecdir,
1750 install_dir : rootlibexecdir)
1752 s_j_gatewayd = executable('systemd-journal-gatewayd',
1753 systemd_journal_gatewayd_sources,
1754 include_directories : includes,
1755 link_with : [libshared],
1756 dependencies : [threads,
1761 install_rpath : rootlibexecdir,
1763 install_dir : rootlibexecdir)
1764 public_programs += [s_j_remote, s_j_gatewayd]
1767 if conf.get('ENABLE_COREDUMP', false)
1768 executable('systemd-coredump',
1769 systemd_coredump_sources,
1770 include_directories : includes,
1771 link_with : [libshared],
1772 dependencies : [threads,
1777 install_rpath : rootlibexecdir,
1779 install_dir : rootlibexecdir)
1781 exe = executable('coredumpctl',
1782 coredumpctl_sources,
1783 include_directories : includes,
1784 link_with : [libshared],
1785 dependencies : [threads,
1788 install_rpath : rootlibexecdir,
1790 public_programs += [exe]
1793 if conf.get('ENABLE_BINFMT', false)
1794 exe = executable('systemd-binfmt',
1795 'src/binfmt/binfmt.c',
1796 include_directories : includes,
1797 link_with : [libshared],
1798 install_rpath : rootlibexecdir,
1800 install_dir : rootlibexecdir)
1801 public_programs += [exe]
1803 meson.add_install_script('sh', '-c',
1804 mkdir_p.format(binfmtdir))
1805 meson.add_install_script('sh', '-c',
1806 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
1809 if conf.get('ENABLE_VCONSOLE', false)
1810 executable('systemd-vconsole-setup',
1811 'src/vconsole/vconsole-setup.c',
1812 include_directories : includes,
1813 link_with : [libshared],
1814 install_rpath : rootlibexecdir,
1816 install_dir : rootlibexecdir)
1819 if conf.get('ENABLE_RANDOMSEED', false)
1820 executable('systemd-random-seed',
1821 'src/random-seed/random-seed.c',
1822 include_directories : includes,
1823 link_with : [libshared],
1824 install_rpath : rootlibexecdir,
1826 install_dir : rootlibexecdir)
1829 if conf.get('ENABLE_FIRSTBOOT', false)
1830 executable('systemd-firstboot',
1831 'src/firstboot/firstboot.c',
1832 include_directories : includes,
1833 link_with : [libshared],
1834 dependencies : [libcrypt],
1835 install_rpath : rootlibexecdir,
1837 install_dir : rootbindir)
1840 executable('systemd-remount-fs',
1841 'src/remount-fs/remount-fs.c',
1842 'src/core/mount-setup.c',
1843 'src/core/mount-setup.h',
1844 include_directories : includes,
1845 link_with : [libshared],
1846 install_rpath : rootlibexecdir,
1848 install_dir : rootlibexecdir)
1850 executable('systemd-machine-id-setup',
1851 'src/machine-id-setup/machine-id-setup-main.c',
1852 'src/core/machine-id-setup.c',
1853 'src/core/machine-id-setup.h',
1854 include_directories : includes,
1855 link_with : [libshared],
1856 install_rpath : rootlibexecdir,
1858 install_dir : rootbindir)
1860 executable('systemd-fsck',
1862 include_directories : includes,
1863 link_with : [libshared],
1864 install_rpath : rootlibexecdir,
1866 install_dir : rootlibexecdir)
1868 executable('systemd-sleep',
1869 'src/sleep/sleep.c',
1870 include_directories : includes,
1871 link_with : [libshared],
1872 install_rpath : rootlibexecdir,
1874 install_dir : rootlibexecdir)
1876 exe = executable('systemd-sysctl',
1877 'src/sysctl/sysctl.c',
1878 include_directories : includes,
1879 link_with : [libshared],
1880 install_rpath : rootlibexecdir,
1882 install_dir : rootlibexecdir)
1883 public_programs += [exe]
1885 executable('systemd-ac-power',
1886 'src/ac-power/ac-power.c',
1887 include_directories : includes,
1888 link_with : [libshared],
1889 install_rpath : rootlibexecdir,
1891 install_dir : rootlibexecdir)
1893 exe = executable('systemd-detect-virt',
1894 'src/detect-virt/detect-virt.c',
1895 include_directories : includes,
1896 link_with : [libshared],
1897 install_rpath : rootlibexecdir,
1899 public_programs += [exe]
1901 exe = executable('systemd-delta',
1902 'src/delta/delta.c',
1903 include_directories : includes,
1904 link_with : [libshared],
1905 install_rpath : rootlibexecdir,
1907 public_programs += [exe]
1909 exe = executable('systemd-escape',
1910 'src/escape/escape.c',
1911 include_directories : includes,
1912 link_with : [libshared],
1913 install_rpath : rootlibexecdir,
1915 install_dir : rootbindir)
1916 public_programs += [exe]
1918 exe = executable('systemd-notify',
1919 'src/notify/notify.c',
1920 include_directories : includes,
1921 link_with : [libshared],
1922 install_rpath : rootlibexecdir,
1924 install_dir : rootbindir)
1925 public_programs += [exe]
1927 executable('systemd-volatile-root',
1928 'src/volatile-root/volatile-root.c',
1929 include_directories : includes,
1930 link_with : [libshared],
1931 install_rpath : rootlibexecdir,
1933 install_dir : rootlibexecdir)
1935 executable('systemd-cgroups-agent',
1936 'src/cgroups-agent/cgroups-agent.c',
1937 include_directories : includes,
1938 link_with : [libshared],
1939 install_rpath : rootlibexecdir,
1941 install_dir : rootlibexecdir)
1943 exe = executable('systemd-path',
1945 include_directories : includes,
1946 link_with : [libshared],
1947 install_rpath : rootlibexecdir,
1949 public_programs += [exe]
1951 exe = executable('systemd-ask-password',
1952 'src/ask-password/ask-password.c',
1953 include_directories : includes,
1954 link_with : [libshared],
1955 install_rpath : rootlibexecdir,
1957 install_dir : rootbindir)
1958 public_programs += [exe]
1960 executable('systemd-reply-password',
1961 'src/reply-password/reply-password.c',
1962 include_directories : includes,
1963 link_with : [libshared],
1964 install_rpath : rootlibexecdir,
1966 install_dir : rootlibexecdir)
1968 exe = executable('systemd-tty-ask-password-agent',
1969 'src/tty-ask-password-agent/tty-ask-password-agent.c',
1970 include_directories : includes,
1971 link_with : [libshared],
1972 install_rpath : rootlibexecdir,
1974 install_dir : rootbindir)
1975 public_programs += [exe]
1977 exe = executable('systemd-cgls',
1979 include_directories : includes,
1980 link_with : [libshared],
1981 install_rpath : rootlibexecdir,
1983 public_programs += [exe]
1985 exe = executable('systemd-cgtop',
1986 'src/cgtop/cgtop.c',
1987 include_directories : includes,
1988 link_with : [libshared],
1989 install_rpath : rootlibexecdir,
1991 public_programs += [exe]
1993 executable('systemd-initctl',
1994 'src/initctl/initctl.c',
1995 include_directories : includes,
1996 link_with : [libshared],
1997 install_rpath : rootlibexecdir,
1999 install_dir : rootlibexecdir)
2001 exe = executable('systemd-mount',
2002 'src/mount/mount-tool.c',
2003 include_directories : includes,
2004 link_with : [libshared],
2005 install_rpath : rootlibexecdir,
2007 public_programs += [exe]
2009 meson.add_install_script(meson_make_symlink,
2010 'systemd-mount', join_paths(bindir, 'systemd-umount'))
2012 exe = executable('systemd-run',
2014 include_directories : includes,
2015 link_with : [libshared],
2016 install_rpath : rootlibexecdir,
2018 public_programs += [exe]
2020 exe = executable('systemd-stdio-bridge',
2021 'src/stdio-bridge/stdio-bridge.c',
2022 include_directories : includes,
2023 link_with : [libshared],
2024 install_rpath : rootlibexecdir,
2026 public_programs += [exe]
2028 exe = executable('busctl',
2029 'src/busctl/busctl.c',
2030 'src/busctl/busctl-introspect.c',
2031 'src/busctl/busctl-introspect.h',
2032 include_directories : includes,
2033 link_with : [libshared],
2034 install_rpath : rootlibexecdir,
2036 public_programs += [exe]
2038 if conf.get('ENABLE_SYSUSERS', false)
2039 exe = executable('systemd-sysusers',
2040 'src/sysusers/sysusers.c',
2041 include_directories : includes,
2042 link_with : [libshared],
2043 install_rpath : rootlibexecdir,
2045 install_dir : rootbindir)
2046 public_programs += [exe]
2049 if conf.get('ENABLE_TMPFILES', false)
2050 exe = executable('systemd-tmpfiles',
2051 'src/tmpfiles/tmpfiles.c',
2052 include_directories : includes,
2053 link_with : [libshared],
2054 dependencies : [libacl],
2055 install_rpath : rootlibexecdir,
2057 install_dir : rootbindir)
2058 public_programs += [exe]
2061 if conf.get('ENABLE_HWDB', false)
2062 exe = executable('systemd-hwdb',
2064 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2065 include_directories : includes,
2066 link_with : [libudev_internal],
2067 install_rpath : udev_rpath,
2069 install_dir : rootbindir)
2070 public_programs += [exe]
2073 if conf.get('ENABLE_QUOTACHECK', false)
2074 executable('systemd-quotacheck',
2075 'src/quotacheck/quotacheck.c',
2076 include_directories : includes,
2077 link_with : [libshared],
2078 install_rpath : rootlibexecdir,
2080 install_dir : rootlibexecdir)
2083 exe = executable('systemd-socket-proxyd',
2084 'src/socket-proxy/socket-proxyd.c',
2085 include_directories : includes,
2086 link_with : [libshared],
2087 dependencies : [threads],
2088 install_rpath : rootlibexecdir,
2090 install_dir : rootlibexecdir)
2091 public_programs += [exe]
2093 exe = executable('systemd-udevd',
2094 systemd_udevd_sources,
2095 include_directories : includes,
2096 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
2097 link_with : [libudev_core,
2100 dependencies : [threads,
2105 install_rpath : udev_rpath,
2107 install_dir : rootlibexecdir)
2108 public_programs += [exe]
2110 exe = executable('udevadm',
2112 include_directories : includes,
2113 link_with : [libudev_core,
2116 dependencies : [threads,
2121 install_rpath : udev_rpath,
2123 install_dir : rootbindir)
2124 public_programs += [exe]
2126 executable('systemd-shutdown',
2127 systemd_shutdown_sources,
2128 include_directories : includes,
2129 link_with : [libshared],
2130 install_rpath : rootlibexecdir,
2132 install_dir : rootlibexecdir)
2134 executable('systemd-update-done',
2135 'src/update-done/update-done.c',
2136 include_directories : includes,
2137 link_with : [libshared],
2138 install_rpath : rootlibexecdir,
2140 install_dir : rootlibexecdir)
2142 executable('systemd-update-utmp',
2143 'src/update-utmp/update-utmp.c',
2144 include_directories : includes,
2145 link_with : [libshared],
2146 dependencies : [libaudit],
2147 install_rpath : rootlibexecdir,
2149 install_dir : rootlibexecdir)
2151 if conf.get('HAVE_KMOD', false)
2152 executable('systemd-modules-load',
2153 'src/modules-load/modules-load.c',
2154 include_directories : includes,
2155 link_with : [libshared],
2156 dependencies : [libkmod],
2157 install_rpath : rootlibexecdir,
2159 install_dir : rootlibexecdir)
2161 meson.add_install_script('sh', '-c',
2162 mkdir_p.format(modulesloaddir))
2163 meson.add_install_script('sh', '-c',
2164 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
2167 exe = executable('systemd-nspawn',
2168 systemd_nspawn_sources,
2169 'src/core/mount-setup.c', # FIXME: use a variable?
2170 'src/core/mount-setup.h',
2171 'src/core/loopback-setup.c',
2172 'src/core/loopback-setup.h',
2173 include_directories : [includes, include_directories('src/nspawn')],
2174 link_with : [libshared],
2175 dependencies : [libacl,
2179 install_rpath : rootlibexecdir,
2181 public_programs += [exe]
2183 if conf.get('ENABLE_NETWORKD', false)
2184 executable('systemd-networkd',
2185 systemd_networkd_sources,
2186 include_directories : includes,
2187 link_with : [libnetworkd_core,
2191 dependencies : [threads],
2192 install_rpath : rootlibexecdir,
2194 install_dir : rootlibexecdir)
2196 executable('systemd-networkd-wait-online',
2197 systemd_networkd_wait_online_sources,
2198 include_directories : includes,
2199 link_with : [libnetworkd_core,
2201 install_rpath : rootlibexecdir,
2203 install_dir : rootlibexecdir)
2206 exe = executable('networkctl',
2208 include_directories : includes,
2209 link_with : [libsystemd_network,
2211 install_rpath : rootlibexecdir,
2213 install_dir : rootbindir)
2214 public_programs += [exe]
2216 ############################################################
2218 foreach tuple : tests
2220 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2221 dependencies = tuple[2]
2222 condition = tuple.length() >= 4 ? tuple[3] : ''
2223 type = tuple.length() >= 5 ? tuple[4] : ''
2224 defs = tuple.length() >= 6 ? tuple[5] : []
2225 incs = tuple.length() >= 7 ? tuple[6] : includes
2228 name = sources[0].split('/')[-1].split('.')[0]
2229 if type.startswith('timeout=')
2230 timeout = type.split('=')[1].to_int()
2234 if condition == '' or conf.get(condition, false)
2238 include_directories : incs,
2239 link_with : link_with,
2240 dependencies : dependencies,
2242 install_rpath : rootlibexecdir,
2243 install : install_tests,
2244 install_dir : join_paths(testsdir, type))
2247 message('@0@ is a manual test'.format(name))
2248 elif type == 'unsafe' and want_tests != 'unsafe'
2249 message('@0@ is an unsafe test'.format(name))
2256 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2260 test_libsystemd_sym = executable(
2261 'test-libsystemd-sym',
2262 test_libsystemd_sym_c,
2263 include_directories : includes,
2264 link_with : [libsystemd],
2265 install : install_tests,
2266 install_dir : testsdir)
2267 test('test-libsystemd-sym',
2268 test_libsystemd_sym)
2270 test_libudev_sym = executable(
2273 include_directories : includes,
2274 c_args : ['-Wno-deprecated-declarations'],
2275 link_with : [libudev],
2276 install : install_tests,
2277 install_dir : testsdir)
2278 test('test-libudev-sym',
2281 ############################################################
2283 make_directive_index_py = find_program('tools/make-directive-index.py')
2284 make_man_index_py = find_program('tools/make-man-index.py')
2285 xml_helper_py = find_program('tools/xml_helper.py')
2286 hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
2290 subdir('sysusers.d')
2291 subdir('tmpfiles.d')
2296 subdir('shell-completion/bash')
2297 subdir('shell-completion/zsh')
2298 subdir('docs/sysvinit')
2299 subdir('docs/var-log')
2301 # FIXME: figure out if the warning is true:
2302 # https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2303 install_subdir('factory/etc',
2304 install_dir : factorydir)
2307 install_data('xorg/50-systemd-user.sh',
2308 install_dir : xinitrcdir)
2309 install_data('system-preset/90-systemd.preset',
2310 install_dir : systempresetdir)
2311 install_data('modprobe.d/systemd.conf',
2312 install_dir : modprobedir)
2313 install_data('README',
2320 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2321 install_dir : docdir)
2323 meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2324 meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2326 ############################################################
2328 meson_check_help = find_program('tools/meson-check-help.sh')
2330 foreach exec : public_programs
2331 name = exec.full_path().split('/')[-1]
2332 test('check-help-' + name,
2334 args : [exec.full_path()])
2337 ############################################################
2340 all_files = run_command(
2342 ['--git-dir=@0@/.git'.format(meson.source_root()),
2345 all_files = files(all_files.stdout().split())
2350 command : ['env', 'etags', '-o', '@0@/TAGS'.format(meson.source_root())] + all_files)
2354 command : ['env', 'ctags', '-o', '@0@/tags'.format(meson.source_root())] + all_files)
2358 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
2361 command : [meson_git_contrib_sh])
2365 git_head = run_command(
2367 ['--git-dir=@0@/.git'.format(meson.source_root()),
2368 'rev-parse', 'HEAD']).stdout().strip()
2369 git_head_short = run_command(
2371 ['--git-dir=@0@/.git'.format(meson.source_root()),
2372 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2376 command : ['git', 'archive',
2377 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.source_root(),
2379 '--prefix', 'systemd-@0@/'.format(git_head),
2383 ############################################################
2386 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2388 'prefix: @0@'.format(prefixdir),
2389 'rootprefix: @0@'.format(rootprefixdir),
2390 'sysconf dir: @0@'.format(sysconfdir),
2391 'includedir: @0@'.format(includedir),
2392 'lib dir: @0@'.format(libdir),
2393 'rootlib dir: @0@'.format(rootlibdir),
2394 'SysV init scripts: @0@'.format(sysvinit_path),
2395 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
2396 'PAM modules dir: @0@'.format(pamlibdir),
2397 'PAM configuration dir: @0@'.format(pamconfdir),
2398 'RPM macros dir: @0@'.format(rpmmacrosdir),
2399 'modprobe.d dir: @0@'.format(modprobedir),
2400 'D-Bus policy dir: @0@'.format(dbuspolicydir),
2401 'D-Bus session dir: @0@'.format(dbussessionservicedir),
2402 'D-Bus system dir: @0@'.format(dbussystemservicedir),
2403 'bash completions dir: @0@'.format(bashcompletiondir),
2404 'zsh completions dir: @0@'.format(zshcompletiondir),
2405 'extra start script: @0@'.format(get_option('rc-local')),
2406 'extra stop script: @0@'.format(get_option('halt-local')),
2407 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2408 get_option('debug-tty')),
2409 'TTY GID: @0@'.format(tty_gid),
2410 'maximum system UID: @0@'.format(system_uid_max),
2411 'maximum system GID: @0@'.format(system_gid_max),
2412 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
2413 'certificate root: @0@'.format(get_option('certificate-root')),
2414 'support URL: @0@'.format(support_url),
2415 'nobody user name: @0@'.format(get_option('nobody-user')),
2416 'nobody group name: @0@'.format(get_option('nobody-group')),
2417 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
2418 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
2420 'default DNSSEC mode: @0@'.format(default_dnssec),
2421 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2422 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2424 alt_dns_servers = '\n '.join(dns_servers.split(' '))
2425 alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2427 'default DNS servers: @0@'.format(alt_dns_servers),
2428 'default NTP servers: @0@'.format(alt_ntp_servers)]
2430 alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2431 '@@0@'.format(time_epoch)).stdout().strip()
2433 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2436 # CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2437 # CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2438 # LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2440 if conf.get('ENABLE_EFI', false)
2442 'efi arch: @0@'.format(efi_arch)]
2446 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2447 'EFI CC @0@'.format(efi_cc),
2448 'EFI libdir: @0@'.format(efi_libdir),
2449 'EFI ldsdir: @0@'.format(efi_ldsdir),
2450 'EFI includedir: @0@'.format(efi_incdir)]
2503 ['legacy pkla', install_polkit_pkla],
2505 ['gnu-efi', have_gnu_efi],
2511 ['nss-myhostname', conf.get('HAVE_MYHOSTNAME', false)],
2514 ['man pages', want_man],
2515 ['html pages', want_html],
2516 ['man page indices', want_man and have_lxml],
2517 ['split /usr', conf.get('HAVE_SPLIT_USR', false)],
2522 ['adm group', get_option('adm-group')],
2523 ['wheel group', get_option('wheel-group')],
2526 ['debug mmap cache'],
2529 cond = tuple.get(1, '')
2531 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2532 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
2533 cond = conf.get(ident1, false) or conf.get(ident2, false)
2538 missing += [tuple[0]]
2544 'enabled features: @0@'.format(', '.join(found)),
2546 'disabled features: @0@'.format(', '.join(missing)),
2548 message('\n '.join(status))