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 rootprefixdir = get_option('rootprefix')
30 if get_option('split-usr')
31 conf.set('HAVE_SPLIT_USR', 1)
32 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/'
34 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/usr'
37 sysvinit_path = get_option('sysvinit-path')
38 sysvrcnd_path = get_option('sysvrcnd-path')
39 if sysvinit_path != '' or sysvrcnd_path != ''
40 conf.set('HAVE_SYSV_COMPAT', 1,
41 description : 'SysV init scripts and rcN.d links are supported')
42 m4_defines += ['-DHAVE_SYSV_COMPAT']
45 # join_paths ignore the preceding arguments if an absolute component is
46 # encountered, so this should canonicalize various paths when they are
47 # absolute or relative.
48 prefixdir = get_option('prefix')
49 if not prefixdir.startswith('/')
50 error('Prefix is not absolute: "@0@"'.format(prefixdir))
52 bindir = join_paths(prefixdir, get_option('bindir'))
53 libdir = join_paths(prefixdir, get_option('libdir'))
54 sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
55 includedir = join_paths(prefixdir, get_option('includedir'))
56 datadir = join_paths(prefixdir, get_option('datadir'))
57 localstatedir = join_paths('/', get_option('localstatedir'))
59 rootbindir = join_paths(rootprefixdir, 'bin')
60 rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
62 rootlibdir = get_option('rootlibdir')
64 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
67 # Dirs of external packages
68 pkgconfigdatadir = join_paths(datadir, 'pkgconfig')
69 pkgconfiglibdir = join_paths(libdir, 'pkgconfig')
70 polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
71 polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
72 polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
73 varlogdir = join_paths(localstatedir, 'log')
74 xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
75 rpmmacrosdir = get_option('rpmmacrosdir')
78 pkgdatadir = join_paths(datadir, 'systemd')
79 environmentdir = join_paths(prefixdir, 'lib/environment.d')
80 pkgsysconfdir = join_paths(sysconfdir, 'systemd')
81 userunitdir = join_paths(prefixdir, 'lib/systemd/user')
82 userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
83 tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
84 sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
85 sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
86 binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
87 modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
88 networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
89 pkgincludedir = join_paths(includedir, 'systemd')
90 systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
91 usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
92 systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
93 userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
94 systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
95 systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
96 systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
97 systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
98 udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
99 udevhomedir = udevlibexecdir
100 udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
101 udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
102 catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
103 kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
104 factorydir = join_paths(datadir, 'factory')
105 docdir = join_paths(datadir, 'doc/systemd')
106 bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
107 testsdir = join_paths(prefixdir, 'lib/systemd/tests')
108 systemdstatedir = join_paths(localstatedir, 'lib/systemd')
109 catalogstatedir = join_paths(systemdstatedir, 'catalog')
110 randomseeddir = join_paths(localstatedir, 'lib/systemd')
112 dbuspolicydir = get_option('dbuspolicydir')
113 if dbuspolicydir == ''
114 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
117 dbussessionservicedir = get_option('dbussessionservicedir')
118 if dbussessionservicedir == ''
119 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
122 dbussystemservicedir = get_option('dbussystemservicedir')
123 if dbussystemservicedir == ''
124 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
127 pamlibdir = get_option('pamlibdir')
129 pamlibdir = join_paths(rootlibdir, 'security')
132 pamconfdir = get_option('pamconfdir')
134 pamconfdir = join_paths(sysconfdir, 'pam.d')
137 conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
138 conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
139 conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
140 conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
141 conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
142 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
143 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
144 conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
145 conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
146 conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
147 conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
148 conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
149 conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
150 conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
151 conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
152 conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
153 conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
154 conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
155 conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
156 conf.set_quoted('ROOTPREFIX', rootprefixdir)
157 conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
158 conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
159 conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
160 conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
161 conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
162 conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
163 conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
164 conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
165 conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
166 conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
167 conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
168 conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
169 conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
170 conf.set_quoted('LIBDIR', libdir)
171 conf.set_quoted('ROOTLIBDIR', rootlibdir)
172 conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
173 conf.set_quoted('BOOTLIBDIR', bootlibdir)
174 conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
175 conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
176 conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
177 conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
178 conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
179 conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
181 conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
182 conf.set_quoted('ABS_SRC_DIR', meson.source_root())
184 substs.set('prefix', prefixdir)
185 substs.set('exec_prefix', prefixdir)
186 substs.set('libdir', libdir)
187 substs.set('rootlibdir', rootlibdir)
188 substs.set('includedir', includedir)
189 substs.set('pkgsysconfdir', pkgsysconfdir)
190 substs.set('bindir', bindir)
191 substs.set('rootbindir', rootbindir)
192 substs.set('rootlibexecdir', rootlibexecdir)
193 substs.set('systemunitdir', systemunitdir)
194 substs.set('userunitdir', userunitdir)
195 substs.set('systempresetdir', systempresetdir)
196 substs.set('userpresetdir', userpresetdir)
197 substs.set('udevhwdbdir', udevhwdbdir)
198 substs.set('udevrulesdir', udevrulesdir)
199 substs.set('udevlibexecdir', udevlibexecdir)
200 substs.set('catalogdir', catalogdir)
201 substs.set('tmpfilesdir', tmpfilesdir)
202 substs.set('sysusersdir', sysusersdir)
203 substs.set('sysctldir', sysctldir)
204 substs.set('binfmtdir', binfmtdir)
205 substs.set('modulesloaddir', modulesloaddir)
206 substs.set('systemgeneratordir', systemgeneratordir)
207 substs.set('usergeneratordir', usergeneratordir)
208 substs.set('systemenvgeneratordir', systemenvgeneratordir)
209 substs.set('userenvgeneratordir', userenvgeneratordir)
210 substs.set('systemshutdowndir', systemshutdowndir)
211 substs.set('systemsleepdir', systemsleepdir)
212 substs.set('VARLOGDIR', varlogdir)
213 substs.set('CERTIFICATEROOT', get_option('certificate-root'))
214 substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
215 substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
216 substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
217 substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
218 substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
219 substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
221 #####################################################################
223 cc = meson.get_compiler('c')
224 pkgconfig = import('pkgconfig')
225 check_compilation_sh = find_program('tools/meson-check-compilation.sh')
227 foreach arg : ['-Wundef',
229 '-Wmissing-include-dirs',
230 '-Wold-style-definition',
233 '-Wdeclaration-after-statement',
235 '-Wsuggest-attribute=noreturn',
236 '-Werror=missing-prototypes',
237 '-Werror=implicit-function-declaration',
238 '-Werror=missing-declarations',
239 '-Werror=return-type',
240 '-Werror=incompatible-pointer-types',
242 '-Wstrict-prototypes',
244 '-Wmissing-noreturn',
247 '-Wstrict-aliasing=2',
249 '-Wno-unused-parameter',
250 '-Wno-missing-field-initializers',
251 '-Wno-unused-result',
252 '-Wno-format-signedness',
258 '-fdiagnostics-show-option',
259 '-fno-strict-aliasing',
260 '-fvisibility=hidden',
262 '-fstack-protector-strong',
264 '--param=ssp-buffer-size=4',
266 if cc.has_argument(arg)
267 add_project_arguments(arg, language : 'c')
273 #include <inttypes.h>
274 typedef uint64_t usec_t;
275 usec_t now(clockid_t clock);
280 ', name : '-Werror=shadow with local shadowing')
281 add_project_arguments('-Werror=shadow', language : 'c')
284 if cc.get_id() == 'clang'
285 foreach arg : ['-Wno-typedef-redefinition',
286 '-Wno-gnu-variable-sized-type-not-at-end',
288 if cc.has_argument(arg,
289 name : '@0@ is supported'.format(arg))
290 add_project_arguments(arg, language : 'c')
295 link_test_c = files('tools/meson-link-test.c')
297 # --as-needed and --no-undefined are provided by meson by default,
298 # run mesonconf to see what is enabled
299 foreach arg : ['-Wl,-z,relro',
305 have = run_command(check_compilation_sh,
306 cc.cmd_array(), '-x', 'c', arg,
307 '-include', link_test_c).returncode() == 0
308 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
310 add_project_link_arguments(arg, language : 'c')
314 if get_option('buildtype') != 'debug'
315 foreach arg : ['-ffunction-sections',
317 if cc.has_argument(arg,
318 name : '@0@ is supported'.format(arg))
319 add_project_arguments(arg, language : 'c')
323 foreach arg : ['-Wl,--gc-sections']
324 have = run_command(check_compilation_sh,
325 cc.cmd_array(), '-x', 'c', arg,
326 '-include', link_test_c).returncode() == 0
327 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
329 add_project_link_arguments(arg, language : 'c')
334 cpp = ' '.join(cc.cmd_array()) + ' -E'
336 #####################################################################
337 # compilation result tests
339 conf.set('_GNU_SOURCE', 1)
340 conf.set('__SANE_USERSPACE_TYPES__', 1)
342 conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
343 conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
344 conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
345 conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
346 conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
347 conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
348 conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
352 #include <linux/ethtool.h>
354 # FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
356 foreach decl : ['char16_t',
359 'struct ethtool_link_settings',
361 if cc.sizeof(decl, prefix : decl_headers) > 0
362 # We get -1 if the size cannot be determined
363 conf.set('HAVE_' + decl.underscorify().to_upper(), 1)
367 foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
368 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
369 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
370 ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'],
371 ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
372 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
373 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
374 ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'],
375 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
376 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
377 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
378 # if_tunnel.h is buggy and cannot be included on its own
379 ['IFLA_VTI_REMOTE', 'linux/if_tunnel.h', '#include <net/if.h>'],
380 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
381 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
382 ['IFLA_BRIDGE_VLAN_INFO', 'linux/if_bridge.h'],
383 ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'],
384 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
385 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
386 ['NDA_IFINDEX', 'linux/neighbour.h'],
387 ['IFA_FLAGS', 'linux/if_addr.h'],
388 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
390 prefix = decl.length() > 2 ? decl[2] : ''
391 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
392 conf.set10('HAVE_DECL_' + decl[0], have)
396 foreach ident : ['secure_getenv', '__secure_getenv']
397 if not skip and cc.has_function(ident)
398 conf.set('HAVE_' + ident.to_upper(), 1)
404 ['memfd_create', '''#include <sys/memfd.h>'''],
405 ['gettid', '''#include <sys/types.h>'''],
406 ['pivot_root', '''#include <stdlib.h>'''], # no known header declares pivot_root
407 ['name_to_handle_at', '''#define _GNU_SOURCE
408 #include <sys/types.h>
409 #include <sys/stat.h>
410 #include <fcntl.h>'''],
411 ['setns', '''#define _GNU_SOURCE
412 #include <sched.h>'''],
413 ['renameat2', '''#include <stdio.h>'''],
414 ['kcmp', '''#include <linux/kcmp.h>'''],
415 ['keyctl', '''#include <sys/types.h>
416 #include <keyutils.h>'''],
417 ['copy_file_range', '''#include <sys/syscall.h>
418 #include <unistd.h>'''],
419 ['explicit_bzero' , '''#include <string.h>'''],
422 have = cc.has_function(ident[0], prefix : ident[1])
423 conf.set10('HAVE_DECL_' + ident[0].to_upper(), have)
426 if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''')
427 conf.set('USE_SYS_RANDOM_H', 1)
428 conf.set10('HAVE_DECL_GETRANDOM', 1)
430 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
431 conf.set10('HAVE_DECL_GETRANDOM', have)
434 #####################################################################
436 sed = find_program('sed')
437 grep = find_program('grep')
438 awk = find_program('awk')
439 m4 = find_program('m4')
440 stat = find_program('stat')
441 git = find_program('git', required : false)
442 etags = find_program('etags', required : false)
444 meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
445 mkdir_p = 'mkdir -p $DESTDIR/@0@'
446 test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
447 splash_bmp = files('test/splash.bmp')
449 # if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
450 # /usr/sbin, /sbin, and fall back to the default from middle column.
451 progs = [['telinit', '/lib/sysvinit/telinit'],
452 ['quotaon', '/usr/sbin/quotaon' ],
453 ['quotacheck', '/usr/sbin/quotacheck' ],
454 ['kill', '/usr/bin/kill' ],
455 ['kmod', '/usr/bin/kmod' ],
456 ['kexec', '/usr/sbin/kexec' ],
457 ['sulogin', '/usr/sbin/sulogin' ],
458 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
459 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
460 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
461 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
464 path = get_option(prog[0] + '-path')
466 message('Using @1@ for @0@'.format(prog[0], path))
468 exe = find_program(prog[0],
469 '/usr/sbin/' + prog[0],
472 path = exe.found() ? exe.path() : prog[1]
474 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
475 conf.set_quoted(name, path)
476 substs.set(name, path)
479 if run_command('ln', '--relative', '--help').returncode() != 0
480 error('ln does not support --relative')
483 ############################################################
485 gperf = find_program('gperf')
487 gperf_test_format = '''
489 const char * in_word_set(const char *, @0@);
492 gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
493 gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
494 gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
495 if cc.compiles(gperf_test)
496 gperf_len_type = 'size_t'
498 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
499 if cc.compiles(gperf_test)
500 gperf_len_type = 'unsigned'
502 error('unable to determine gperf len type')
505 message('gperf len type is @0@'.format(gperf_len_type))
506 conf.set('GPERF_LEN_TYPE', gperf_len_type,
507 description : 'The type of gperf "len" parameter')
509 ############################################################
511 if not cc.has_header('sys/capability.h')
512 error('POSIX caps headers not found')
514 foreach header : ['linux/btrfs.h',
516 'linux/vm_sockets.h',
517 'valgrind/memcheck.h',
518 'valgrind/valgrind.h',
520 if cc.has_header(header)
521 conf.set('HAVE_' + header.underscorify().to_upper(), 1)
525 ############################################################
527 conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
529 default_hierarchy = get_option('default-hierarchy')
530 conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
531 description : 'default cgroup hierarchy as string')
532 if default_hierarchy == 'legacy'
533 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
534 elif default_hierarchy == 'hybrid'
535 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
537 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
540 time_epoch = get_option('time-epoch')
543 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
545 time_epoch = time_epoch.to_int()
546 conf.set('TIME_EPOCH', time_epoch)
548 system_uid_max = get_option('system-uid-max')
549 if system_uid_max == ''
550 system_uid_max = run_command(
552 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
553 '/etc/login.defs').stdout()
555 system_uid_max = system_uid_max.to_int()
556 conf.set('SYSTEM_UID_MAX', system_uid_max)
557 substs.set('systemuidmax', system_uid_max)
558 message('maximum system UID is @0@'.format(system_uid_max))
560 conf.set_quoted('NOBODY_USER_NAME', get_option('nobody-user'))
561 conf.set_quoted('NOBODY_GROUP_NAME', get_option('nobody-group'))
563 system_gid_max = get_option('system-gid-max')
564 if system_gid_max == ''
565 system_gid_max = run_command(
567 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
568 '/etc/login.defs').stdout()
570 system_gid_max = system_gid_max.to_int()
571 conf.set('SYSTEM_GID_MAX', system_gid_max)
572 substs.set('systemgidmax', system_gid_max)
573 message('maximum system GID is @0@'.format(system_gid_max))
575 tty_gid = get_option('tty-gid')
576 conf.set('TTY_GID', tty_gid)
577 substs.set('TTY_GID', tty_gid)
579 if get_option('adm-group')
580 m4_defines += ['-DENABLE_ADM_GROUP']
583 if get_option('wheel-group')
584 m4_defines += ['-DENABLE_WHEEL_GROUP']
587 substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
589 kill_user_processes = get_option('default-kill-user-processes')
590 conf.set10('KILL_USER_PROCESSES', kill_user_processes)
591 substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
593 default_dnssec = get_option('default-dnssec')
594 conf.set('DEFAULT_DNSSEC_MODE',
595 'DNSSEC_' + default_dnssec.underscorify().to_upper())
596 substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
598 conf.set_quoted('DNS_SERVERS', get_option('dns-servers'))
599 substs.set('DNS_SERVERS', get_option('dns-servers'))
601 conf.set_quoted('NTP_SERVERS', get_option('ntp-servers'))
602 substs.set('NTP_SERVERS', get_option('ntp-servers'))
604 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
606 substs.set('SUSHELL', get_option('debug-shell'))
607 substs.set('DEBUGTTY', get_option('debug-tty'))
609 #####################################################################
611 threads = dependency('threads')
612 librt = cc.find_library('rt')
613 libm = cc.find_library('m')
614 libdl = cc.find_library('dl')
615 libcrypt = cc.find_library('crypt')
617 libcap = dependency('libcap')
618 libmount = dependency('mount',
621 want_seccomp = get_option('seccomp')
622 if want_seccomp != 'false'
623 libseccomp = dependency('libseccomp',
624 required : want_seccomp == 'true')
625 if libseccomp.found()
626 conf.set('HAVE_SECCOMP', 1)
627 m4_defines += ['-DHAVE_SECCOMP']
633 want_selinux = get_option('selinux')
634 if want_selinux != 'false'
635 libselinux = dependency('libselinux',
636 version : '>= 2.1.9',
637 required : want_selinux == 'true')
638 if libselinux.found()
639 conf.set('HAVE_SELINUX', 1)
640 m4_defines += ['-DHAVE_SELINUX']
646 want_apparmor = get_option('apparmor')
647 if want_apparmor != 'false'
648 libapparmor = dependency('libapparmor',
649 required : want_apparmor == 'true')
650 if libapparmor.found()
651 conf.set('HAVE_APPARMOR', 1)
652 m4_defines += ['-DHAVE_APPARMOR']
658 smack_run_label = get_option('smack-run-label')
659 if smack_run_label != ''
660 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
661 m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
664 want_polkit = get_option('polkit')
665 install_polkit = false
666 install_polkit_pkla = false
667 if want_polkit != 'false'
668 conf.set('ENABLE_POLKIT', 1)
669 install_polkit = true
671 libpolkit = dependency('polkit-gobject-1',
673 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
674 message('Old polkit detected, will install pkla files')
675 install_polkit_pkla = true
679 want_acl = get_option('acl')
680 if want_acl != 'false'
681 libacl = cc.find_library('acl', required : want_acl == 'true')
683 conf.set('HAVE_ACL', 1)
684 m4_defines += ['-DHAVE_ACL']
690 want_audit = get_option('audit')
691 if want_audit != 'false'
692 libaudit = dependency('audit', required : want_audit == 'true')
694 conf.set('HAVE_AUDIT', 1)
700 want_blkid = get_option('blkid')
701 if want_blkid != 'false'
702 libblkid = dependency('blkid', required : want_blkid == 'true')
704 conf.set('HAVE_BLKID', 1)
710 want_kmod = get_option('kmod')
711 if want_kmod != 'false'
712 libkmod = dependency('libkmod',
714 required : want_kmod == 'true')
716 conf.set('HAVE_KMOD', 1)
722 want_pam = get_option('pam')
723 if want_pam != 'false'
724 libpam = cc.find_library('pam', required : want_pam == 'true')
725 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
726 if libpam.found() and libpam_misc.found()
727 conf.set('HAVE_PAM', 1)
728 m4_defines += ['-DHAVE_PAM']
735 want_microhttpd = get_option('microhttpd')
736 if want_microhttpd != 'false'
737 libmicrohttpd = dependency('libmicrohttpd',
738 version : '>= 0.9.33',
739 required : want_microhttpd == 'true')
740 if libmicrohttpd.found()
741 conf.set('HAVE_MICROHTTPD', 1)
742 m4_defines += ['-DHAVE_MICROHTTPD']
748 want_libcryptsetup = get_option('libcryptsetup')
749 if want_libcryptsetup != 'false'
750 libcryptsetup = dependency('libcryptsetup',
751 version : '>= 1.6.0',
752 required : want_libcryptsetup == 'true')
753 if libcryptsetup.found()
754 conf.set('HAVE_LIBCRYPTSETUP', 1)
760 want_libcurl = get_option('libcurl')
761 if want_libcurl != 'false'
762 libcurl = dependency('libcurl',
763 version : '>= 7.32.0',
764 required : want_libcurl == 'true')
766 conf.set('HAVE_LIBCURL', 1)
767 m4_defines += ['-DHAVE_LIBCURL']
773 want_libidn = get_option('libidn')
774 if want_libidn != 'false'
775 libidn = dependency('libidn',
776 required : want_libidn == 'true')
778 conf.set('HAVE_LIBIDN', 1)
779 m4_defines += ['-DHAVE_LIBIDN']
785 want_libiptc = get_option('libiptc')
786 if want_libiptc != 'false'
787 libiptc = dependency('libiptc',
788 required : want_libiptc == 'true')
790 conf.set('HAVE_LIBIPTC', 1)
791 m4_defines += ['-DHAVE_LIBIPTC']
797 want_qrencode = get_option('qrencode')
798 if want_qrencode != 'false'
799 libqrencode = dependency('libqrencode',
800 required : want_qrencode == 'true')
801 if libqrencode.found()
802 conf.set('HAVE_QRENCODE', 1)
808 want_gnutls = get_option('gnutls')
809 if want_gnutls != 'false'
810 libgnutls = dependency('gnutls',
811 version : '>= 3.1.4',
812 required : want_gnutls == 'true')
814 conf.set('HAVE_GNUTLS', 1)
820 want_elfutils = get_option('elfutils')
821 if want_elfutils != 'false'
822 libdw = dependency('libdw',
823 required : want_elfutils == 'true')
825 conf.set('HAVE_ELFUTILS', 1)
831 want_zlib = get_option('zlib')
832 if want_zlib != 'false'
833 libz = dependency('zlib',
834 required : want_zlib == 'true')
836 conf.set('HAVE_ZLIB', 1)
842 want_bzip2 = get_option('bzip2')
843 if want_bzip2 != 'false'
844 libbzip2 = cc.find_library('bz2',
845 required : want_bzip2 == 'true')
847 conf.set('HAVE_BZIP2', 1)
853 want_xz = get_option('xz')
854 if want_xz != 'false'
855 libxz = dependency('liblzma',
856 required : want_xz == 'true')
858 conf.set('HAVE_XZ', 1)
864 want_lz4 = get_option('lz4')
865 if want_lz4 != 'false'
866 liblz4 = dependency('liblz4',
867 required : want_lz4 == 'true')
869 conf.set('HAVE_LZ4', 1)
875 want_glib = get_option('glib')
876 if want_glib != 'false'
877 libglib = dependency('glib-2.0',
878 version : '>= 2.22.0',
879 required : want_glib == 'true')
880 libgobject = dependency('gobject-2.0',
881 version : '>= 2.22.0',
882 required : want_glib == 'true')
883 libgio = dependency('gio-2.0',
884 required : want_glib == 'true')
885 if libglib.found() and libgobject.found() and libgio.found()
886 conf.set('HAVE_GLIB', 1)
894 want_xkbcommon = get_option('xkbcommon')
895 if want_xkbcommon != 'false'
896 libxkbcommon = dependency('xkbcommon',
897 version : '>= 0.3.0',
898 required : want_xkbcommon == 'true')
899 if libxkbcommon.found()
900 conf.set('HAVE_XKBCOMMON', 1)
906 want_dbus = get_option('dbus')
907 if want_dbus != 'false'
908 libdbus = dependency('dbus-1',
909 version : '>= 1.3.2',
910 required : want_dbus == 'true')
912 conf.set('HAVE_DBUS', 1)
918 want_gcrypt = get_option('gcrypt')
919 if want_gcrypt != 'false'
920 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
921 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
923 if libgcrypt.found() and libgpg_error.found()
924 conf.set('HAVE_GCRYPT', 1)
926 # link to neither of the libs if one is not found
935 want_importd = get_option('importd')
936 if want_importd != 'false'
937 have_deps = (conf.get('HAVE_LIBCURL', 0) == 1 and
938 conf.get('HAVE_ZLIB', 0) == 1 and
939 conf.get('HAVE_BZIP2', 0) == 1 and
940 conf.get('HAVE_XZ', 0) == 1 and
941 conf.get('HAVE_GCRYPT', 0) == 1)
943 conf.set('ENABLE_IMPORTD', 1)
944 elif want_importd == 'true'
945 error('importd support was requested, but dependencies are not available')
949 want_remote = get_option('remote')
950 if want_remote != 'false'
951 have_deps = [conf.get('HAVE_MICROHTTPD', 0) == 1,
952 conf.get('HAVE_LIBCURL', 0) == 1]
953 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
954 # it's possible to build one without the other. Complain only if
955 # support was explictly requested. The auxiliary files like sysusers
956 # config should be installed when any of the programs are built.
957 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
958 error('remote support was requested, but dependencies are not available')
960 if have_deps[0] or have_deps[1]
961 conf.set('ENABLE_REMOTE', 1)
965 foreach pair : [['utmp', 'HAVE_UTMP'],
966 ['hibernate', 'ENABLE_HIBERNATE'],
967 ['environment-d', 'ENABLE_ENVIRONMENT_D'],
968 ['binfmt', 'ENABLE_BINFMT'],
969 ['coredump', 'ENABLE_COREDUMP'],
970 ['resolve', 'ENABLE_RESOLVED'],
971 ['logind', 'ENABLE_LOGIND'],
972 ['hostnamed', 'ENABLE_HOSTNAMED'],
973 ['localed', 'ENABLE_LOCALED'],
974 ['machined', 'ENABLE_MACHINED'],
975 ['networkd', 'ENABLE_NETWORKD'],
976 ['timedated', 'ENABLE_TIMEDATED'],
977 ['timesyncd', 'ENABLE_TIMESYNCD'],
978 ['myhostname', 'HAVE_MYHOSTNAME'],
979 ['firstboot', 'ENABLE_FIRSTBOOT'],
980 ['randomseed', 'ENABLE_RANDOMSEED'],
981 ['backlight', 'ENABLE_BACKLIGHT'],
982 ['vconsole', 'ENABLE_VCONSOLE'],
983 ['quotacheck', 'ENABLE_QUOTACHECK'],
984 ['sysusers', 'ENABLE_SYSUSERS'],
985 ['tmpfiles', 'ENABLE_TMPFILES'],
986 ['hwdb', 'ENABLE_HWDB'],
987 ['rfkill', 'ENABLE_RFKILL'],
988 ['ldconfig', 'ENABLE_LDCONFIG'],
989 ['efi', 'ENABLE_EFI'],
990 ['tpm', 'SD_BOOT_LOG_TPM'],
992 ['smack', 'HAVE_SMACK'],
995 if get_option(pair[0])
997 m4_defines += ['-D' + pair[1]]
1001 want_tests = get_option('tests')
1002 install_tests = get_option('install-tests')
1005 #####################################################################
1007 if get_option('efi')
1008 efi_arch = host_machine.cpu_family()
1010 if efi_arch == 'x86'
1011 EFI_MACHINE_TYPE_NAME = 'ia32'
1012 gnu_efi_arch = 'ia32'
1013 elif efi_arch == 'x86_64'
1014 EFI_MACHINE_TYPE_NAME = 'x64'
1015 gnu_efi_arch = 'x86_64'
1016 elif efi_arch == 'arm'
1017 EFI_MACHINE_TYPE_NAME = 'arm'
1018 gnu_efi_arch = 'arm'
1019 elif efi_arch == 'aarch64'
1020 EFI_MACHINE_TYPE_NAME = 'aa64'
1021 gnu_efi_arch = 'aarch64'
1023 EFI_MACHINE_TYPE_NAME = ''
1027 conf.set('ENABLE_EFI', 1)
1028 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
1030 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex').to_int())
1033 #####################################################################
1035 config_h = configure_file(
1036 output : 'config.h',
1037 configuration : conf)
1039 includes = include_directories('src/basic',
1049 'src/libsystemd/sd-bus',
1050 'src/libsystemd/sd-device',
1051 'src/libsystemd/sd-hwdb',
1052 'src/libsystemd/sd-id128',
1053 'src/libsystemd/sd-netlink',
1054 'src/libsystemd/sd-network',
1055 'src/libsystemd-network',
1058 add_project_arguments('-include', 'config.h', language : 'c')
1060 gcrypt_util_sources = files('src/shared/gcrypt-util.h',
1061 'src/shared/gcrypt-util.c')
1065 subdir('src/systemd')
1067 subdir('src/libsystemd')
1068 subdir('src/libsystemd-network')
1069 subdir('src/journal')
1072 libjournal_core = static_library(
1074 libjournal_core_sources,
1076 include_directories : includes,
1079 libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
1080 libsystemd = shared_library(
1082 libsystemd_internal_sources,
1083 journal_internal_sources,
1085 include_directories : includes,
1086 link_args : ['-shared',
1087 '-Wl,--version-script=' + libsystemd_sym_path],
1088 link_with : [libbasic],
1089 dependencies : [threads,
1094 link_depends : libsystemd_sym,
1096 install_dir : rootlibdir)
1098 ############################################################
1100 # binaries that have --help and are intended for use by humans,
1101 # usually, but not always, installed in /bin.
1102 public_programs = []
1104 subdir('src/libudev')
1105 subdir('src/shared')
1108 subdir('src/network')
1110 subdir('src/analyze')
1111 subdir('src/journal-remote')
1112 subdir('src/coredump')
1113 subdir('src/hostname')
1114 subdir('src/import')
1115 subdir('src/kernel-install')
1116 subdir('src/locale')
1117 subdir('src/machine')
1118 subdir('src/nspawn')
1119 subdir('src/resolve')
1120 subdir('src/timedate')
1121 subdir('src/timesync')
1122 subdir('src/vconsole')
1123 subdir('src/sulogin-shell')
1124 subdir('src/boot/efi')
1129 ############################################################
1131 # only static linking apart from libdl, to make sure that the
1132 # module is linked to all libraries that it uses.
1133 test_dlopen = executable(
1136 include_directories : includes,
1137 link_with : [libbasic],
1138 dependencies : [libdl])
1140 foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []],
1141 ['systemd', '', []],
1142 ['mymachines', 'ENABLE_MACHINED', []],
1143 ['resolve', 'ENABLE_RESOLVED', [libdl]]]
1145 condition = tuple[1] == '' or conf.get(tuple[1], 0) == 1
1148 extra_deps = tuple[2]
1150 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1151 version_script_arg = join_paths(meson.current_source_dir(), sym)
1153 nss = shared_library(
1155 'src/nss-@0@/nss-@0@.c'.format(module),
1157 include_directories : includes,
1158 link_args : ['-shared',
1159 '-Wl,--version-script=' + version_script_arg,
1161 link_with : [libsystemd_internal,
1163 dependencies : [threads,
1164 librt] + extra_deps,
1167 install_dir : rootlibdir)
1169 # We cannot use shared_module because it does not support version suffix.
1170 # Unfortunately shared_library insists on creating the symlink…
1171 meson.add_install_script('sh', '-c',
1172 'rm $DESTDIR@0@/libnss_@1@.so'
1173 .format(rootlibdir, module))
1175 test('dlopen-nss_' + module,
1177 args : [nss.full_path()]) # path to dlopen must include a slash
1181 ############################################################
1183 executable('systemd',
1185 include_directories : includes,
1186 link_with : [libcore,
1189 dependencies : [threads,
1195 install_rpath : rootlibexecdir,
1197 install_dir : rootlibexecdir)
1199 exe = executable('systemd-analyze',
1200 systemd_analyze_sources,
1201 include_directories : includes,
1202 link_with : [libcore,
1205 dependencies : [threads,
1211 install_rpath : rootlibexecdir,
1213 public_programs += [exe]
1215 executable('systemd-journald',
1216 systemd_journald_sources,
1217 include_directories : includes,
1218 link_with : [libjournal_core,
1221 dependencies : [threads,
1225 install_rpath : rootlibexecdir,
1227 install_dir : rootlibexecdir)
1229 exe = executable('systemd-cat',
1230 systemd_cat_sources,
1231 include_directories : includes,
1232 link_with : [libjournal_core,
1235 dependencies : [threads],
1236 install_rpath : rootlibexecdir,
1238 public_programs += [exe]
1240 exe = executable('journalctl',
1242 include_directories : includes,
1243 link_with : [libshared,
1245 dependencies : [threads,
1249 install_rpath : rootlibexecdir,
1251 install_dir : rootbindir)
1252 public_programs += [exe]
1254 executable('systemd-getty-generator',
1255 'src/getty-generator/getty-generator.c',
1256 include_directories : includes,
1257 link_with : [libshared],
1258 install_rpath : rootlibexecdir,
1260 install_dir : systemgeneratordir)
1262 executable('systemd-debug-generator',
1263 'src/debug-generator/debug-generator.c',
1264 include_directories : includes,
1265 link_with : [libshared],
1266 install_rpath : rootlibexecdir,
1268 install_dir : systemgeneratordir)
1270 executable('systemd-fstab-generator',
1271 'src/fstab-generator/fstab-generator.c',
1272 'src/core/mount-setup.c',
1273 include_directories : includes,
1274 link_with : [libshared],
1275 install_rpath : rootlibexecdir,
1277 install_dir : systemgeneratordir)
1279 if conf.get('ENABLE_ENVIRONMENT_D', 0) == 1
1280 executable('30-systemd-environment-d-generator',
1281 'src/environment-d-generator/environment-d-generator.c',
1282 include_directories : includes,
1283 link_with : [libshared],
1284 install_rpath : rootlibexecdir,
1286 install_dir : userenvgeneratordir)
1288 meson.add_install_script(meson_make_symlink,
1289 join_paths(sysconfdir, 'environment'),
1290 join_paths(environmentdir, '99-environment.conf'))
1293 if conf.get('ENABLE_HIBERNATE', 0) == 1
1294 executable('systemd-hibernate-resume-generator',
1295 'src/hibernate-resume/hibernate-resume-generator.c',
1296 include_directories : includes,
1297 link_with : [libshared],
1298 install_rpath : rootlibexecdir,
1300 install_dir : systemgeneratordir)
1302 executable('systemd-hibernate-resume',
1303 'src/hibernate-resume/hibernate-resume.c',
1304 include_directories : includes,
1305 link_with : [libshared],
1306 install_rpath : rootlibexecdir,
1308 install_dir : rootlibexecdir)
1311 if conf.get('HAVE_BLKID', 0) == 1
1312 executable('systemd-gpt-auto-generator',
1313 'src/gpt-auto-generator/gpt-auto-generator.c',
1314 'src/basic/blkid-util.h',
1315 include_directories : includes,
1316 link_with : [libshared,
1318 dependencies : libblkid,
1319 install_rpath : rootlibexecdir,
1321 install_dir : systemgeneratordir)
1323 exe = executable('systemd-dissect',
1324 'src/dissect/dissect.c',
1325 include_directories : includes,
1326 link_with : [libshared],
1327 install_rpath : rootlibexecdir,
1329 install_dir : rootlibexecdir)
1330 public_programs += [exe]
1333 if conf.get('ENABLE_RESOLVED', 0) == 1
1334 executable('systemd-resolved',
1335 systemd_resolved_sources,
1336 gcrypt_util_sources,
1337 include_directories : includes,
1338 link_with : [libshared],
1339 dependencies : [threads,
1344 install_rpath : rootlibexecdir,
1346 install_dir : rootlibexecdir)
1348 exe = executable('systemd-resolve',
1349 systemd_resolve_sources,
1350 gcrypt_util_sources,
1351 include_directories : includes,
1352 link_with : [libshared],
1353 dependencies : [threads,
1358 install_rpath : rootlibexecdir,
1360 public_programs += [exe]
1363 if conf.get('ENABLE_LOGIND', 0) == 1
1364 executable('systemd-logind',
1365 systemd_logind_sources,
1366 include_directories : includes,
1367 link_with : [liblogind_core,
1370 dependencies : [threads,
1372 install_rpath : rootlibexecdir,
1374 install_dir : rootlibexecdir)
1376 exe = executable('loginctl',
1378 include_directories : includes,
1379 link_with : [libshared,
1381 dependencies : [threads,
1384 install_rpath : rootlibexecdir,
1386 install_dir : rootbindir)
1387 public_programs += [exe]
1389 exe = executable('systemd-inhibit',
1390 'src/login/inhibit.c',
1391 include_directories : includes,
1392 link_with : [libshared],
1393 install_rpath : rootlibexecdir,
1395 install_dir : rootbindir)
1396 public_programs += [exe]
1398 if conf.get('HAVE_PAM', 0) == 1
1399 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1400 pam_systemd = shared_library(
1404 include_directories : includes,
1405 link_args : ['-shared',
1406 '-Wl,--version-script=' + version_script_arg],
1407 link_with : [libsystemd_internal,
1409 dependencies : [threads,
1412 link_depends : pam_systemd_sym,
1414 install_dir : pamlibdir)
1416 test('dlopen-pam_systemd',
1418 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1422 if conf.get('HAVE_PAM', 0) == 1
1423 executable('systemd-user-sessions',
1424 'src/user-sessions/user-sessions.c',
1425 include_directories : includes,
1426 link_with : [libshared],
1427 install_rpath : rootlibexecdir,
1429 install_dir : rootlibexecdir)
1432 if conf.get('ENABLE_EFI', 0) == 1 and conf.get('HAVE_BLKID', 0) == 1
1433 exe = executable('bootctl',
1434 'src/boot/bootctl.c',
1435 include_directories : includes,
1436 link_with : [libshared],
1437 dependencies : [libblkid],
1438 install_rpath : rootlibexecdir,
1440 public_programs += [exe]
1443 exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1444 include_directories : includes,
1445 link_with : [libshared],
1446 dependencies : [threads],
1447 install_rpath : rootlibexecdir,
1449 public_programs += [exe]
1451 exe = executable('systemctl', 'src/systemctl/systemctl.c',
1452 include_directories : includes,
1453 link_with : [libshared],
1454 dependencies : [threads,
1459 install_rpath : rootlibexecdir,
1461 install_dir : rootbindir)
1462 public_programs += [exe]
1464 if conf.get('ENABLE_BACKLIGHT', 0) == 1
1465 executable('systemd-backlight',
1466 'src/backlight/backlight.c',
1467 include_directories : includes,
1468 link_with : [libshared,
1470 install_rpath : rootlibexecdir,
1472 install_dir : rootlibexecdir)
1475 if conf.get('ENABLE_RFKILL', 0) == 1
1476 executable('systemd-rfkill',
1477 'src/rfkill/rfkill.c',
1478 include_directories : includes,
1479 link_with : [libshared,
1481 install_rpath : rootlibexecdir,
1483 install_dir : rootlibexecdir)
1486 executable('systemd-system-update-generator',
1487 'src/system-update-generator/system-update-generator.c',
1488 include_directories : includes,
1489 link_with : [libshared],
1490 install_rpath : rootlibexecdir,
1492 install_dir : systemgeneratordir)
1494 if conf.get('HAVE_LIBCRYPTSETUP', 0) == 1
1495 executable('systemd-cryptsetup',
1496 'src/cryptsetup/cryptsetup.c',
1497 include_directories : includes,
1498 link_with : [libshared],
1499 dependencies : [libcryptsetup],
1500 install_rpath : rootlibexecdir,
1502 install_dir : rootlibexecdir)
1504 executable('systemd-cryptsetup-generator',
1505 'src/cryptsetup/cryptsetup-generator.c',
1506 include_directories : includes,
1507 link_with : [libshared],
1508 dependencies : [libcryptsetup],
1509 install_rpath : rootlibexecdir,
1511 install_dir : systemgeneratordir)
1513 executable('systemd-veritysetup',
1514 'src/veritysetup/veritysetup.c',
1515 include_directories : includes,
1516 link_with : [libshared],
1517 dependencies : [libcryptsetup],
1518 install_rpath : rootlibexecdir,
1520 install_dir : rootlibexecdir)
1522 executable('systemd-veritysetup-generator',
1523 'src/veritysetup/veritysetup-generator.c',
1524 include_directories : includes,
1525 link_with : [libshared],
1526 dependencies : [libcryptsetup],
1527 install_rpath : rootlibexecdir,
1529 install_dir : systemgeneratordir)
1532 if conf.get('HAVE_SYSV_COMPAT', 0) == 1
1533 executable('systemd-sysv-generator',
1534 'src/sysv-generator/sysv-generator.c',
1535 include_directories : includes,
1536 link_with : [libshared],
1537 install_rpath : rootlibexecdir,
1539 install_dir : systemgeneratordir)
1541 executable('systemd-rc-local-generator',
1542 'src/rc-local-generator/rc-local-generator.c',
1543 include_directories : includes,
1544 link_with : [libshared],
1545 install_rpath : rootlibexecdir,
1547 install_dir : systemgeneratordir)
1550 if conf.get('ENABLE_HOSTNAMED', 0) == 1
1551 executable('systemd-hostnamed',
1552 'src/hostname/hostnamed.c',
1553 include_directories : includes,
1554 link_with : [libshared],
1555 install_rpath : rootlibexecdir,
1557 install_dir : rootlibexecdir)
1559 exe = executable('hostnamectl',
1560 'src/hostname/hostnamectl.c',
1561 include_directories : includes,
1562 link_with : [libshared],
1563 install_rpath : rootlibexecdir,
1565 public_programs += [exe]
1568 if conf.get('ENABLE_LOCALED', 0) == 1
1569 if conf.get('HAVE_XKBCOMMON', 0) == 1
1570 # logind will load libxkbcommon.so dynamically on its own
1576 executable('systemd-localed',
1577 systemd_localed_sources,
1578 include_directories : includes,
1579 link_with : [libshared],
1580 dependencies : deps,
1581 install_rpath : rootlibexecdir,
1583 install_dir : rootlibexecdir)
1585 exe = executable('localectl',
1587 include_directories : includes,
1588 link_with : [libshared],
1589 install_rpath : rootlibexecdir,
1591 public_programs += [exe]
1594 if conf.get('ENABLE_TIMEDATED', 0) == 1
1595 executable('systemd-timedated',
1596 'src/timedate/timedated.c',
1597 include_directories : includes,
1598 link_with : [libshared],
1599 install_rpath : rootlibexecdir,
1601 install_dir : rootlibexecdir)
1603 exe = executable('timedatectl',
1604 'src/timedate/timedatectl.c',
1605 include_directories : includes,
1606 install_rpath : rootlibexecdir,
1607 link_with : [libshared],
1609 public_programs += [exe]
1612 if conf.get('ENABLE_TIMESYNCD', 0) == 1
1613 executable('systemd-timesyncd',
1614 systemd_timesyncd_sources,
1615 include_directories : includes,
1616 link_with : [libshared],
1617 dependencies : [threads,
1619 install_rpath : rootlibexecdir,
1621 install_dir : rootlibexecdir)
1624 if conf.get('ENABLE_MACHINED', 0) == 1
1625 executable('systemd-machined',
1626 systemd_machined_sources,
1627 include_directories : includes,
1628 link_with : [libmachine_core,
1630 install_rpath : rootlibexecdir,
1632 install_dir : rootlibexecdir)
1634 exe = executable('machinectl',
1635 'src/machine/machinectl.c',
1636 include_directories : includes,
1637 link_with : [libshared],
1638 dependencies : [threads,
1641 install_rpath : rootlibexecdir,
1643 install_dir : rootbindir)
1644 public_programs += [exe]
1647 if conf.get('ENABLE_IMPORTD', 0) == 1
1648 executable('systemd-importd',
1649 systemd_importd_sources,
1650 include_directories : includes,
1651 link_with : [libshared],
1652 dependencies : [threads],
1653 install_rpath : rootlibexecdir,
1655 install_dir : rootlibexecdir)
1657 systemd_pull = executable('systemd-pull',
1658 systemd_pull_sources,
1659 include_directories : includes,
1660 link_with : [libshared],
1661 dependencies : [libcurl,
1666 install_rpath : rootlibexecdir,
1668 install_dir : rootlibexecdir)
1670 systemd_import = executable('systemd-import',
1671 systemd_import_sources,
1672 include_directories : includes,
1673 link_with : [libshared],
1674 dependencies : [libcurl,
1678 install_rpath : rootlibexecdir,
1680 install_dir : rootlibexecdir)
1682 systemd_export = executable('systemd-export',
1683 systemd_export_sources,
1684 include_directories : includes,
1685 link_with : [libshared],
1686 dependencies : [libcurl,
1690 install_rpath : rootlibexecdir,
1692 install_dir : rootlibexecdir)
1693 public_programs += [systemd_pull, systemd_import, systemd_export]
1696 if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_LIBCURL', 0) == 1
1697 exe = executable('systemd-journal-upload',
1698 systemd_journal_upload_sources,
1699 include_directories : includes,
1700 link_with : [libshared],
1701 dependencies : [threads,
1706 install_rpath : rootlibexecdir,
1708 install_dir : rootlibexecdir)
1709 public_programs += [exe]
1712 if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
1713 s_j_remote = executable('systemd-journal-remote',
1714 systemd_journal_remote_sources,
1715 include_directories : includes,
1716 link_with : [libshared],
1717 dependencies : [threads,
1722 install_rpath : rootlibexecdir,
1724 install_dir : rootlibexecdir)
1726 s_j_gatewayd = executable('systemd-journal-gatewayd',
1727 systemd_journal_gatewayd_sources,
1728 include_directories : includes,
1729 link_with : [libshared],
1730 dependencies : [threads,
1735 install_rpath : rootlibexecdir,
1737 install_dir : rootlibexecdir)
1738 public_programs += [s_j_remote, s_j_gatewayd]
1741 if conf.get('ENABLE_COREDUMP', 0) == 1
1742 executable('systemd-coredump',
1743 systemd_coredump_sources,
1744 include_directories : includes,
1745 link_with : [libshared],
1746 dependencies : [threads,
1751 install_rpath : rootlibexecdir,
1753 install_dir : rootlibexecdir)
1755 exe = executable('coredumpctl',
1756 coredumpctl_sources,
1757 include_directories : includes,
1758 link_with : [libshared],
1759 dependencies : [threads,
1762 install_rpath : rootlibexecdir,
1764 public_programs += [exe]
1767 if conf.get('ENABLE_BINFMT', 0) == 1
1768 exe = executable('systemd-binfmt',
1769 'src/binfmt/binfmt.c',
1770 include_directories : includes,
1771 link_with : [libshared],
1772 install_rpath : rootlibexecdir,
1774 install_dir : rootlibexecdir)
1775 public_programs += [exe]
1777 meson.add_install_script('sh', '-c',
1778 mkdir_p.format(binfmtdir))
1779 meson.add_install_script('sh', '-c',
1780 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
1783 if conf.get('ENABLE_VCONSOLE', 0) == 1
1784 executable('systemd-vconsole-setup',
1785 'src/vconsole/vconsole-setup.c',
1786 include_directories : includes,
1787 link_with : [libshared],
1788 install_rpath : rootlibexecdir,
1790 install_dir : rootlibexecdir)
1793 if conf.get('ENABLE_RANDOMSEED', 0) == 1
1794 executable('systemd-random-seed',
1795 'src/random-seed/random-seed.c',
1796 include_directories : includes,
1797 link_with : [libshared],
1798 install_rpath : rootlibexecdir,
1800 install_dir : rootlibexecdir)
1803 if conf.get('ENABLE_FIRSTBOOT', 0) == 1
1804 executable('systemd-firstboot',
1805 'src/firstboot/firstboot.c',
1806 include_directories : includes,
1807 link_with : [libshared],
1808 dependencies : [libcrypt],
1809 install_rpath : rootlibexecdir,
1811 install_dir : rootbindir)
1814 executable('systemd-remount-fs',
1815 'src/remount-fs/remount-fs.c',
1816 'src/core/mount-setup.c',
1817 'src/core/mount-setup.h',
1818 include_directories : includes,
1819 link_with : [libshared],
1820 install_rpath : rootlibexecdir,
1822 install_dir : rootlibexecdir)
1824 executable('systemd-machine-id-setup',
1825 'src/machine-id-setup/machine-id-setup-main.c',
1826 'src/core/machine-id-setup.c',
1827 'src/core/machine-id-setup.h',
1828 include_directories : includes,
1829 link_with : [libshared],
1830 install_rpath : rootlibexecdir,
1832 install_dir : rootbindir)
1834 executable('systemd-fsck',
1836 include_directories : includes,
1837 link_with : [libshared],
1838 install_rpath : rootlibexecdir,
1840 install_dir : rootlibexecdir)
1842 executable('systemd-sleep',
1843 'src/sleep/sleep.c',
1844 include_directories : includes,
1845 link_with : [libshared],
1846 install_rpath : rootlibexecdir,
1848 install_dir : rootlibexecdir)
1850 exe = executable('systemd-sysctl',
1851 'src/sysctl/sysctl.c',
1852 include_directories : includes,
1853 link_with : [libshared],
1854 install_rpath : rootlibexecdir,
1856 install_dir : rootlibexecdir)
1857 public_programs += [exe]
1859 executable('systemd-ac-power',
1860 'src/ac-power/ac-power.c',
1861 include_directories : includes,
1862 link_with : [libshared],
1863 install_rpath : rootlibexecdir,
1865 install_dir : rootlibexecdir)
1867 exe = executable('systemd-detect-virt',
1868 'src/detect-virt/detect-virt.c',
1869 include_directories : includes,
1870 link_with : [libshared],
1871 install_rpath : rootlibexecdir,
1873 public_programs += [exe]
1875 exe = executable('systemd-delta',
1876 'src/delta/delta.c',
1877 include_directories : includes,
1878 link_with : [libshared],
1879 install_rpath : rootlibexecdir,
1881 public_programs += [exe]
1883 exe = executable('systemd-escape',
1884 'src/escape/escape.c',
1885 include_directories : includes,
1886 link_with : [libshared],
1887 install_rpath : rootlibexecdir,
1889 install_dir : rootbindir)
1890 public_programs += [exe]
1892 exe = executable('systemd-notify',
1893 'src/notify/notify.c',
1894 include_directories : includes,
1895 link_with : [libshared],
1896 install_rpath : rootlibexecdir,
1898 install_dir : rootbindir)
1899 public_programs += [exe]
1901 executable('systemd-volatile-root',
1902 'src/volatile-root/volatile-root.c',
1903 include_directories : includes,
1904 link_with : [libshared],
1905 install_rpath : rootlibexecdir,
1907 install_dir : rootlibexecdir)
1909 executable('systemd-cgroups-agent',
1910 'src/cgroups-agent/cgroups-agent.c',
1911 include_directories : includes,
1912 link_with : [libshared],
1913 install_rpath : rootlibexecdir,
1915 install_dir : rootlibexecdir)
1917 exe = executable('systemd-path',
1919 include_directories : includes,
1920 link_with : [libshared],
1921 install_rpath : rootlibexecdir,
1923 public_programs += [exe]
1925 exe = executable('systemd-ask-password',
1926 'src/ask-password/ask-password.c',
1927 include_directories : includes,
1928 link_with : [libshared],
1929 install_rpath : rootlibexecdir,
1931 install_dir : rootbindir)
1932 public_programs += [exe]
1934 executable('systemd-reply-password',
1935 'src/reply-password/reply-password.c',
1936 include_directories : includes,
1937 link_with : [libshared],
1938 install_rpath : rootlibexecdir,
1940 install_dir : rootlibexecdir)
1942 exe = executable('systemd-tty-ask-password-agent',
1943 'src/tty-ask-password-agent/tty-ask-password-agent.c',
1944 include_directories : includes,
1945 link_with : [libshared],
1946 install_rpath : rootlibexecdir,
1948 install_dir : rootbindir)
1949 public_programs += [exe]
1951 exe = executable('systemd-cgls',
1953 include_directories : includes,
1954 link_with : [libshared],
1955 install_rpath : rootlibexecdir,
1957 public_programs += [exe]
1959 exe = executable('systemd-cgtop',
1960 'src/cgtop/cgtop.c',
1961 include_directories : includes,
1962 link_with : [libshared],
1963 install_rpath : rootlibexecdir,
1965 public_programs += [exe]
1967 executable('systemd-initctl',
1968 'src/initctl/initctl.c',
1969 include_directories : includes,
1970 link_with : [libshared],
1971 install_rpath : rootlibexecdir,
1973 install_dir : rootlibexecdir)
1975 exe = executable('systemd-mount',
1976 'src/mount/mount-tool.c',
1977 include_directories : includes,
1978 link_with : [libshared,
1980 install_rpath : rootlibexecdir,
1982 public_programs += [exe]
1984 meson.add_install_script(meson_make_symlink,
1985 'systemd-mount', join_paths(bindir, 'systemd-umount'))
1987 exe = executable('systemd-run',
1989 include_directories : includes,
1990 link_with : [libshared],
1991 install_rpath : rootlibexecdir,
1993 public_programs += [exe]
1995 exe = executable('systemd-stdio-bridge',
1996 'src/stdio-bridge/stdio-bridge.c',
1997 include_directories : includes,
1998 link_with : [libshared],
1999 install_rpath : rootlibexecdir,
2001 public_programs += [exe]
2003 exe = executable('busctl',
2004 'src/busctl/busctl.c',
2005 'src/busctl/busctl-introspect.c',
2006 'src/busctl/busctl-introspect.h',
2007 include_directories : includes,
2008 link_with : [libshared],
2009 install_rpath : rootlibexecdir,
2011 public_programs += [exe]
2013 if conf.get('ENABLE_SYSUSERS', 0) == 1
2014 exe = executable('systemd-sysusers',
2015 'src/sysusers/sysusers.c',
2016 include_directories : includes,
2017 link_with : [libshared],
2018 install_rpath : rootlibexecdir,
2020 install_dir : rootbindir)
2021 public_programs += [exe]
2024 if conf.get('ENABLE_TMPFILES', 0) == 1
2025 exe = executable('systemd-tmpfiles',
2026 'src/tmpfiles/tmpfiles.c',
2027 include_directories : includes,
2028 link_with : [libshared],
2029 dependencies : [libacl],
2030 install_rpath : rootlibexecdir,
2032 install_dir : rootbindir)
2033 public_programs += [exe]
2036 if conf.get('ENABLE_HWDB', 0) == 1
2037 exe = executable('systemd-hwdb',
2039 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2040 include_directories : includes,
2041 link_with : [libudev_internal],
2042 install_rpath : udev_rpath,
2044 install_dir : rootbindir)
2045 public_programs += [exe]
2048 if conf.get('ENABLE_QUOTACHECK', 0) == 1
2049 executable('systemd-quotacheck',
2050 'src/quotacheck/quotacheck.c',
2051 include_directories : includes,
2052 link_with : [libshared],
2053 install_rpath : rootlibexecdir,
2055 install_dir : rootlibexecdir)
2058 exe = executable('systemd-socket-proxyd',
2059 'src/socket-proxy/socket-proxyd.c',
2060 include_directories : includes,
2061 link_with : [libshared],
2062 dependencies : [threads],
2063 install_rpath : rootlibexecdir,
2065 install_dir : rootlibexecdir)
2066 public_programs += [exe]
2068 exe = executable('systemd-udevd',
2069 systemd_udevd_sources,
2070 include_directories : includes,
2071 link_with : [libudev_core,
2074 dependencies : [threads,
2079 install_rpath : udev_rpath,
2081 install_dir : rootlibexecdir)
2082 public_programs += [exe]
2084 exe = executable('udevadm',
2086 include_directories : includes,
2087 link_with : [libudev_core,
2090 dependencies : [threads,
2095 install_rpath : udev_rpath,
2097 install_dir : rootbindir)
2098 public_programs += [exe]
2100 executable('systemd-shutdown',
2101 systemd_shutdown_sources,
2102 include_directories : includes,
2103 link_with : [libshared,
2105 install_rpath : rootlibexecdir,
2107 install_dir : rootlibexecdir)
2109 executable('systemd-update-done',
2110 'src/update-done/update-done.c',
2111 include_directories : includes,
2112 link_with : [libshared],
2113 install_rpath : rootlibexecdir,
2115 install_dir : rootlibexecdir)
2117 executable('systemd-update-utmp',
2118 'src/update-utmp/update-utmp.c',
2119 include_directories : includes,
2120 link_with : [libshared],
2121 dependencies : [libaudit],
2122 install_rpath : rootlibexecdir,
2124 install_dir : rootlibexecdir)
2126 if conf.get('HAVE_KMOD', 0) == 1
2127 executable('systemd-modules-load',
2128 'src/modules-load/modules-load.c',
2129 include_directories : includes,
2130 link_with : [libshared],
2131 dependencies : [libkmod],
2132 install_rpath : rootlibexecdir,
2134 install_dir : rootlibexecdir)
2136 meson.add_install_script('sh', '-c',
2137 mkdir_p.format(modulesloaddir))
2138 meson.add_install_script('sh', '-c',
2139 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
2142 exe = executable('systemd-nspawn',
2143 systemd_nspawn_sources,
2144 'src/core/mount-setup.c', # FIXME: use a variable?
2145 'src/core/mount-setup.h',
2146 'src/core/loopback-setup.c',
2147 'src/core/loopback-setup.h',
2148 include_directories : [includes, include_directories('src/nspawn')],
2149 link_with : [libshared,
2151 dependencies : [libacl,
2155 install_rpath : rootlibexecdir,
2157 public_programs += [exe]
2159 if conf.get('ENABLE_NETWORKD', 0) == 1
2160 executable('systemd-networkd',
2161 systemd_networkd_sources,
2162 include_directories : includes,
2163 link_with : [libnetworkd_core,
2167 install_rpath : rootlibexecdir,
2169 install_dir : rootlibexecdir)
2171 executable('systemd-networkd-wait-online',
2172 systemd_networkd_wait_online_sources,
2173 include_directories : includes,
2174 link_with : [libnetworkd_core,
2176 install_rpath : rootlibexecdir,
2178 install_dir : rootlibexecdir)
2181 exe = executable('networkctl',
2183 include_directories : includes,
2184 link_with : [libsystemd_network,
2186 install_rpath : rootlibexecdir,
2188 install_dir : rootbindir)
2189 public_programs += [exe]
2191 ############################################################
2193 foreach tuple : tests
2195 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2196 dependencies = tuple[2]
2197 condition = tuple.length() >= 4 ? tuple[3] : ''
2198 type = tuple.length() >= 5 ? tuple[4] : ''
2199 defs = tuple.length() >= 6 ? tuple[5] : []
2200 incs = tuple.length() >= 7 ? tuple[6] : includes
2203 name = sources[0].split('/')[-1].split('.')[0]
2204 if type.startswith('timeout=')
2205 timeout = type.split('=')[1].to_int()
2209 if condition == '' or conf.get(condition, 0) == 1
2210 install = install_tests and type == ''
2215 include_directories : incs,
2216 link_with : link_with,
2217 dependencies : dependencies,
2219 install_rpath : rootlibexecdir,
2221 install_dir : testsdir)
2224 message('@0@ is a manual test'.format(name))
2225 elif type == 'unsafe' and want_tests != 'unsafe'
2226 message('@0@ is an unsafe test'.format(name))
2233 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2237 test_libsystemd_sym = executable(
2238 'test-libsystemd-sym',
2239 test_libsystemd_sym_c,
2240 include_directories : includes,
2241 link_with : [libsystemd],
2242 install : install_tests,
2243 install_dir : testsdir)
2244 test('test-libsystemd-sym',
2245 test_libsystemd_sym)
2247 test_libudev_sym = executable(
2250 include_directories : includes,
2251 c_args : ['-Wno-deprecated-declarations'],
2252 link_with : [libudev],
2253 install : install_tests,
2254 install_dir : testsdir)
2255 test('test-libudev-sym',
2258 ############################################################
2260 make_directive_index_py = find_program('tools/make-directive-index.py')
2261 make_man_index_py = find_program('tools/make-man-index.py')
2262 xml_helper_py = find_program('tools/xml_helper.py')
2263 hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
2267 subdir('sysusers.d')
2268 subdir('tmpfiles.d')
2273 subdir('shell-completion/bash')
2274 subdir('shell-completion/zsh')
2275 subdir('docs/sysvinit')
2276 subdir('docs/var-log')
2278 # FIXME: figure out if the warning is true:
2279 # https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2280 install_subdir('factory/etc',
2281 install_dir : factorydir)
2284 install_data('xorg/50-systemd-user.sh',
2285 install_dir : xinitrcdir)
2286 install_data('system-preset/90-systemd.preset',
2287 install_dir : systempresetdir)
2288 install_data('README',
2295 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2296 install_dir : docdir)
2298 meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2299 meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2301 ############################################################
2303 meson_check_help = find_program('tools/meson-check-help.sh')
2305 foreach exec : public_programs
2306 name = exec.full_path().split('/')[-1]
2307 test('check-help-' + name,
2309 args : [exec.full_path()])
2312 ############################################################
2314 if git.found() and etags.found()
2315 all_files = run_command(
2317 ['--git-dir=@0@/.git'.format(meson.source_root()),
2320 all_files = files(all_files.stdout().split())
2326 command : [etags, '-o', '@OUTPUT@'] + all_files)
2330 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
2333 command : [meson_git_contrib_sh])
2337 git_head = run_command(
2339 ['--git-dir=@0@/.git'.format(meson.source_root()),
2340 'rev-parse', 'HEAD']).stdout().strip()
2341 git_head_short = run_command(
2343 ['--git-dir=@0@/.git'.format(meson.source_root()),
2344 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2348 command : ['git', 'archive',
2349 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.source_root(),
2351 '--prefix', 'systemd-@0@/'.format(git_head),