1 project('systemd', 'c',
10 meson_version : '>= 0.40',
13 libsystemd_version = '0.19.0'
14 libudev_version = '1.6.6'
16 # We need the same data in three different formats, ugh!
17 # Also, for hysterical reasons, we use different variable
18 # names, sometimes. Not all variables are included in every
20 conf = configuration_data()
21 conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
22 conf.set_quoted('PACKAGE_VERSION', meson.project_version())
24 substs = configuration_data()
25 substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
26 substs.set('PACKAGE_VERSION', meson.project_version())
30 #####################################################################
32 # Try to install the git pre-commit hook
33 git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
34 if git_hook.returncode() == 0
35 message(git_hook.stdout().strip())
38 #####################################################################
40 rootprefixdir = get_option('rootprefix')
41 conf.set10('HAVE_SPLIT_USR', get_option('split-usr'))
42 if get_option('split-usr')
43 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/'
45 rootprefixdir = rootprefixdir != '' ? rootprefixdir : '/usr'
48 sysvinit_path = get_option('sysvinit-path')
49 sysvrcnd_path = get_option('sysvrcnd-path')
50 have = sysvinit_path != '' or sysvrcnd_path != ''
51 conf.set10('HAVE_SYSV_COMPAT', have,
52 description : 'SysV init scripts and rcN.d links are supported')
53 m4_defines += have ? ['-DHAVE_SYSV_COMPAT'] : []
55 # join_paths ignore the preceding arguments if an absolute component is
56 # encountered, so this should canonicalize various paths when they are
57 # absolute or relative.
58 prefixdir = get_option('prefix')
59 if not prefixdir.startswith('/')
60 error('Prefix is not absolute: "@0@"'.format(prefixdir))
62 bindir = join_paths(prefixdir, get_option('bindir'))
63 libdir = join_paths(prefixdir, get_option('libdir'))
64 sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
65 includedir = join_paths(prefixdir, get_option('includedir'))
66 datadir = join_paths(prefixdir, get_option('datadir'))
67 localstatedir = join_paths('/', get_option('localstatedir'))
69 rootbindir = join_paths(rootprefixdir, 'bin')
70 rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
72 rootlibdir = get_option('rootlibdir')
74 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
77 # Dirs of external packages
78 pkgconfigdatadir = join_paths(datadir, 'pkgconfig')
79 pkgconfiglibdir = join_paths(libdir, 'pkgconfig')
80 polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
81 polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
82 polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
83 varlogdir = join_paths(localstatedir, 'log')
84 xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
85 rpmmacrosdir = get_option('rpmmacrosdir')
86 modprobedir = join_paths(prefixdir, 'lib/modprobe.d')
89 pkgdatadir = join_paths(datadir, 'systemd')
90 environmentdir = join_paths(prefixdir, 'lib/environment.d')
91 pkgsysconfdir = join_paths(sysconfdir, 'systemd')
92 userunitdir = join_paths(prefixdir, 'lib/systemd/user')
93 userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
94 tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
95 sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
96 sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
97 binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
98 modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
99 networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
100 pkgincludedir = join_paths(includedir, 'systemd')
101 systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
102 usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
103 systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
104 userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
105 systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
106 systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
107 systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
108 systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
109 udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
110 udevhomedir = udevlibexecdir
111 udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
112 udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
113 catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
114 kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
115 factorydir = join_paths(datadir, 'factory')
116 docdir = join_paths(datadir, 'doc/systemd')
117 bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
118 testsdir = join_paths(prefixdir, 'lib/systemd/tests')
119 systemdstatedir = join_paths(localstatedir, 'lib/systemd')
120 catalogstatedir = join_paths(systemdstatedir, 'catalog')
121 randomseeddir = join_paths(localstatedir, 'lib/systemd')
123 dbuspolicydir = get_option('dbuspolicydir')
124 if dbuspolicydir == ''
125 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
128 dbussessionservicedir = get_option('dbussessionservicedir')
129 if dbussessionservicedir == ''
130 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
133 dbussystemservicedir = get_option('dbussystemservicedir')
134 if dbussystemservicedir == ''
135 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
138 pamlibdir = get_option('pamlibdir')
140 pamlibdir = join_paths(rootlibdir, 'security')
143 pamconfdir = get_option('pamconfdir')
145 pamconfdir = join_paths(sysconfdir, 'pam.d')
148 conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
149 conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
150 conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
151 conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
152 conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
153 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
154 conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
155 conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
156 conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
157 conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
158 conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
159 conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
160 conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
161 conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
162 conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
163 conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
164 conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
165 conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
166 conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
167 conf.set_quoted('ROOTPREFIX', rootprefixdir)
168 conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
169 conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
170 conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
171 conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
172 conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
173 conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
174 conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
175 conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
176 conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
177 conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
178 conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
179 conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
180 conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
181 conf.set_quoted('LIBDIR', libdir)
182 conf.set_quoted('ROOTLIBDIR', rootlibdir)
183 conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
184 conf.set_quoted('BOOTLIBDIR', bootlibdir)
185 conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
186 conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
187 conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
188 conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
189 conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
190 conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
192 conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
193 conf.set_quoted('ABS_SRC_DIR', meson.source_root())
195 substs.set('prefix', prefixdir)
196 substs.set('exec_prefix', prefixdir)
197 substs.set('libdir', libdir)
198 substs.set('rootlibdir', rootlibdir)
199 substs.set('includedir', includedir)
200 substs.set('pkgsysconfdir', pkgsysconfdir)
201 substs.set('bindir', bindir)
202 substs.set('rootbindir', rootbindir)
203 substs.set('rootlibexecdir', rootlibexecdir)
204 substs.set('systemunitdir', systemunitdir)
205 substs.set('userunitdir', userunitdir)
206 substs.set('systempresetdir', systempresetdir)
207 substs.set('userpresetdir', userpresetdir)
208 substs.set('udevhwdbdir', udevhwdbdir)
209 substs.set('udevrulesdir', udevrulesdir)
210 substs.set('udevlibexecdir', udevlibexecdir)
211 substs.set('catalogdir', catalogdir)
212 substs.set('tmpfilesdir', tmpfilesdir)
213 substs.set('sysusersdir', sysusersdir)
214 substs.set('sysctldir', sysctldir)
215 substs.set('binfmtdir', binfmtdir)
216 substs.set('modulesloaddir', modulesloaddir)
217 substs.set('systemgeneratordir', systemgeneratordir)
218 substs.set('usergeneratordir', usergeneratordir)
219 substs.set('systemenvgeneratordir', systemenvgeneratordir)
220 substs.set('userenvgeneratordir', userenvgeneratordir)
221 substs.set('systemshutdowndir', systemshutdowndir)
222 substs.set('systemsleepdir', systemsleepdir)
223 substs.set('VARLOGDIR', varlogdir)
224 substs.set('CERTIFICATEROOT', get_option('certificate-root'))
225 substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
226 substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
227 substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
228 substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
229 substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
230 substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
232 #####################################################################
234 cc = meson.get_compiler('c')
235 pkgconfig = import('pkgconfig')
236 check_compilation_sh = find_program('tools/meson-check-compilation.sh')
238 cxx = find_program('c++', required : false)
240 # Used only for tests
244 foreach arg : ['-Wextra',
247 '-Wmissing-include-dirs',
248 '-Wold-style-definition',
251 '-Wdeclaration-after-statement',
253 '-Wsuggest-attribute=noreturn',
254 '-Werror=missing-prototypes',
255 '-Werror=implicit-function-declaration',
256 '-Werror=missing-declarations',
257 '-Werror=return-type',
258 '-Werror=incompatible-pointer-types',
260 '-Wstrict-prototypes',
262 '-Wmissing-noreturn',
265 '-Wstrict-aliasing=2',
272 '-fdiagnostics-show-option',
273 '-fno-strict-aliasing',
274 '-fvisibility=hidden',
276 '-fstack-protector-strong',
278 '--param=ssp-buffer-size=4',
280 if cc.has_argument(arg)
281 add_project_arguments(arg, language : 'c')
285 # "negative" arguments: gcc on purpose does not return an error for "-Wno-"
286 # arguments, just emits a warnings. So test for the "positive" version instead.
287 foreach arg : ['unused-parameter',
288 'missing-field-initializers',
291 'error=nonnull', # work-around for gcc 7.1 turning this on on its own
293 if cc.has_argument('-W' + arg)
294 add_project_arguments('-Wno-' + arg, language : 'c')
300 #include <inttypes.h>
301 typedef uint64_t usec_t;
302 usec_t now(clockid_t clock);
307 ', name : '-Werror=shadow with local shadowing')
308 add_project_arguments('-Werror=shadow', language : 'c')
311 if cc.get_id() == 'clang'
312 foreach arg : ['-Wno-typedef-redefinition',
313 '-Wno-gnu-variable-sized-type-not-at-end',
315 if cc.has_argument(arg,
316 name : '@0@ is supported'.format(arg))
317 add_project_arguments(arg, language : 'c')
322 link_test_c = files('tools/meson-link-test.c')
324 # --as-needed and --no-undefined are provided by meson by default,
325 # run mesonconf to see what is enabled
326 foreach arg : ['-Wl,-z,relro',
331 have = run_command(check_compilation_sh,
332 cc.cmd_array(), '-x', 'c', arg,
333 '-include', link_test_c).returncode() == 0
334 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
336 add_project_link_arguments(arg, language : 'c')
340 if get_option('buildtype') != 'debug'
341 foreach arg : ['-ffunction-sections',
343 if cc.has_argument(arg,
344 name : '@0@ is supported'.format(arg))
345 add_project_arguments(arg, language : 'c')
349 foreach arg : ['-Wl,--gc-sections']
350 have = run_command(check_compilation_sh,
351 cc.cmd_array(), '-x', 'c', arg,
352 '-include', link_test_c).returncode() == 0
353 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
355 add_project_link_arguments(arg, language : 'c')
360 cpp = ' '.join(cc.cmd_array()) + ' -E'
362 #####################################################################
363 # compilation result tests
365 conf.set('_GNU_SOURCE', true)
366 conf.set('__SANE_USERSPACE_TYPES__', true)
368 conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
369 conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
370 conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
371 conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
372 conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
373 conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
374 conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
378 #include <linux/ethtool.h>
379 #include <linux/fib_rules.h>
381 # FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
383 foreach decl : ['char16_t',
386 'struct ethtool_link_settings',
387 'struct fib_rule_uid_range',
390 # We get -1 if the size cannot be determined
391 have = cc.sizeof(decl, prefix : decl_headers) > 0
392 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
395 foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
396 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
397 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
398 ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'],
399 ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
400 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
401 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
402 ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'],
403 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
404 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
405 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
406 # if_tunnel.h is buggy and cannot be included on its own
407 ['IFLA_VTI_REMOTE', 'linux/if_tunnel.h', '#include <net/if.h>'],
408 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
409 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
410 ['IFLA_BRIDGE_VLAN_INFO', 'linux/if_bridge.h'],
411 ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'],
412 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
413 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
414 ['NDA_IFINDEX', 'linux/neighbour.h'],
415 ['IFA_FLAGS', 'linux/if_addr.h'],
416 ['FRA_UID_RANGE', 'linux/fib_rules.h'],
417 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
419 prefix = decl.length() > 2 ? decl[2] : ''
420 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
421 conf.set10('HAVE_' + decl[0], have)
424 foreach ident : ['secure_getenv', '__secure_getenv']
425 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
429 ['memfd_create', '''#include <sys/memfd.h>'''],
430 ['gettid', '''#include <sys/types.h>'''],
431 ['pivot_root', '''#include <stdlib.h>'''], # no known header declares pivot_root
432 ['name_to_handle_at', '''#define _GNU_SOURCE
433 #include <sys/types.h>
434 #include <sys/stat.h>
435 #include <fcntl.h>'''],
436 ['setns', '''#define _GNU_SOURCE
437 #include <sched.h>'''],
438 ['renameat2', '''#include <stdio.h>'''],
439 ['kcmp', '''#include <linux/kcmp.h>'''],
440 ['keyctl', '''#include <sys/types.h>
441 #include <keyutils.h>'''],
442 ['copy_file_range', '''#include <sys/syscall.h>
443 #include <unistd.h>'''],
444 ['bpf', '''#include <sys/syscall.h>
445 #include <unistd.h>'''],
446 ['explicit_bzero' , '''#include <string.h>'''],
449 have = cc.has_function(ident[0], prefix : ident[1])
450 conf.set10('HAVE_' + ident[0].to_upper(), have)
453 if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''')
454 conf.set10('USE_SYS_RANDOM_H', true)
455 conf.set10('HAVE_GETRANDOM', true)
457 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
458 conf.set10('USE_SYS_RANDOM_H', false)
459 conf.set10('HAVE_GETRANDOM', have)
462 #####################################################################
464 sed = find_program('sed')
465 grep = find_program('grep')
466 awk = find_program('awk')
467 m4 = find_program('m4')
468 stat = find_program('stat')
469 git = find_program('git', required : false)
471 meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
472 mkdir_p = 'mkdir -p $DESTDIR/@0@'
473 test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
474 splash_bmp = files('test/splash.bmp')
476 # if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
477 # /usr/sbin, /sbin, and fall back to the default from middle column.
478 progs = [['telinit', '/lib/sysvinit/telinit'],
479 ['quotaon', '/usr/sbin/quotaon' ],
480 ['quotacheck', '/usr/sbin/quotacheck' ],
481 ['kill', '/usr/bin/kill' ],
482 ['kmod', '/usr/bin/kmod' ],
483 ['kexec', '/usr/sbin/kexec' ],
484 ['sulogin', '/usr/sbin/sulogin' ],
485 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
486 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
487 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
488 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
491 path = get_option(prog[0] + '-path')
493 message('Using @1@ for @0@'.format(prog[0], path))
495 exe = find_program(prog[0],
496 '/usr/sbin/' + prog[0],
499 path = exe.found() ? exe.path() : prog[1]
501 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
502 conf.set_quoted(name, path)
503 substs.set(name, path)
506 if run_command('ln', '--relative', '--help').returncode() != 0
507 error('ln does not support --relative')
510 ############################################################
512 gperf = find_program('gperf')
514 gperf_test_format = '''
516 const char * in_word_set(const char *, @0@);
519 gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
520 gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
521 gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
522 if cc.compiles(gperf_test)
523 gperf_len_type = 'size_t'
525 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
526 if cc.compiles(gperf_test)
527 gperf_len_type = 'unsigned'
529 error('unable to determine gperf len type')
532 message('gperf len type is @0@'.format(gperf_len_type))
533 conf.set('GPERF_LEN_TYPE', gperf_len_type,
534 description : 'The type of gperf "len" parameter')
536 ############################################################
538 if not cc.has_header('sys/capability.h')
539 error('POSIX caps headers not found')
541 foreach header : ['linux/btrfs.h',
543 'linux/vm_sockets.h',
545 'valgrind/memcheck.h',
546 'valgrind/valgrind.h',
549 conf.set10('HAVE_' + header.underscorify().to_upper(),
550 cc.has_header(header))
553 ############################################################
555 conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
556 conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
557 gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
559 default_hierarchy = get_option('default-hierarchy')
560 conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
561 description : 'default cgroup hierarchy as string')
562 if default_hierarchy == 'legacy'
563 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
564 elif default_hierarchy == 'hybrid'
565 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
567 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
570 time_epoch = get_option('time-epoch')
573 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
575 time_epoch = time_epoch.to_int()
576 conf.set('TIME_EPOCH', time_epoch)
578 system_uid_max = get_option('system-uid-max')
579 if system_uid_max == ''
580 system_uid_max = run_command(
582 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
583 '/etc/login.defs').stdout()
585 system_uid_max = system_uid_max.to_int()
586 conf.set('SYSTEM_UID_MAX', system_uid_max)
587 substs.set('systemuidmax', system_uid_max)
588 message('maximum system UID is @0@'.format(system_uid_max))
590 conf.set_quoted('NOBODY_USER_NAME', get_option('nobody-user'))
591 conf.set_quoted('NOBODY_GROUP_NAME', get_option('nobody-group'))
593 system_gid_max = get_option('system-gid-max')
594 if system_gid_max == ''
595 system_gid_max = run_command(
597 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
598 '/etc/login.defs').stdout()
600 system_gid_max = system_gid_max.to_int()
601 conf.set('SYSTEM_GID_MAX', system_gid_max)
602 substs.set('systemgidmax', system_gid_max)
603 message('maximum system GID is @0@'.format(system_gid_max))
605 tty_gid = get_option('tty-gid')
606 conf.set('TTY_GID', tty_gid)
607 substs.set('TTY_GID', tty_gid)
609 if get_option('adm-group')
610 m4_defines += ['-DENABLE_ADM_GROUP']
613 if get_option('wheel-group')
614 m4_defines += ['-DENABLE_WHEEL_GROUP']
617 substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
619 kill_user_processes = get_option('default-kill-user-processes')
620 conf.set10('KILL_USER_PROCESSES', kill_user_processes)
621 substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
623 dns_servers = get_option('dns-servers')
624 conf.set_quoted('DNS_SERVERS', dns_servers)
625 substs.set('DNS_SERVERS', dns_servers)
627 ntp_servers = get_option('ntp-servers')
628 conf.set_quoted('NTP_SERVERS', ntp_servers)
629 substs.set('NTP_SERVERS', ntp_servers)
631 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
633 substs.set('SUSHELL', get_option('debug-shell'))
634 substs.set('DEBUGTTY', get_option('debug-tty'))
636 debug = get_option('debug')
637 enable_debug_hashmap = false
638 enable_debug_mmap_cache = false
640 foreach name : debug.split(',')
642 enable_debug_hashmap = true
643 elif name == 'mmap-cache'
644 enable_debug_mmap_cache = true
646 message('unknown debug option "@0@", ignoring'.format(name))
650 conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
651 conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
653 #####################################################################
655 threads = dependency('threads')
656 librt = cc.find_library('rt')
657 libm = cc.find_library('m')
658 libdl = cc.find_library('dl')
659 libcrypt = cc.find_library('crypt')
661 libcap = dependency('libcap', required : false)
662 if not libcap.found()
663 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
664 libcap = cc.find_library('cap')
667 libmount = dependency('mount',
670 want_seccomp = get_option('seccomp')
671 if want_seccomp != 'false'
672 libseccomp = dependency('libseccomp',
673 version : '>= 2.3.1',
674 required : want_seccomp == 'true')
675 have = libseccomp.found()
680 conf.set10('HAVE_SECCOMP', have)
681 m4_defines += have ? ['-DHAVE_SECCOMP'] : []
683 want_selinux = get_option('selinux')
684 if want_selinux != 'false'
685 libselinux = dependency('libselinux',
686 version : '>= 2.1.9',
687 required : want_selinux == 'true')
688 have = libselinux.found()
693 conf.set10('HAVE_SELINUX', have)
694 m4_defines += have ? ['-DHAVE_SELINUX'] : []
696 want_apparmor = get_option('apparmor')
697 if want_apparmor != 'false'
698 libapparmor = dependency('libapparmor',
699 required : want_apparmor == 'true')
700 have = libapparmor.found()
705 conf.set10('HAVE_APPARMOR', have)
706 m4_defines += have ? ['-DHAVE_APPARMOR'] : []
708 smack_run_label = get_option('smack-run-label')
709 if smack_run_label != ''
710 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
711 m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
714 want_polkit = get_option('polkit')
715 install_polkit = false
716 install_polkit_pkla = false
717 if want_polkit != 'false'
718 install_polkit = true
720 libpolkit = dependency('polkit-gobject-1',
722 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
723 message('Old polkit detected, will install pkla files')
724 install_polkit_pkla = true
727 conf.set10('ENABLE_POLKIT', install_polkit)
729 want_acl = get_option('acl')
730 if want_acl != 'false'
731 libacl = cc.find_library('acl', required : want_acl == 'true')
732 have = libacl.found()
737 conf.set10('HAVE_ACL', have)
738 m4_defines += have ? ['-DHAVE_ACL'] : []
740 want_audit = get_option('audit')
741 if want_audit != 'false'
742 libaudit = dependency('audit', required : want_audit == 'true')
743 have = libaudit.found()
748 conf.set10('HAVE_AUDIT', have)
750 want_blkid = get_option('blkid')
751 if want_blkid != 'false'
752 libblkid = dependency('blkid', required : want_blkid == 'true')
753 have = libblkid.found()
758 conf.set10('HAVE_BLKID', have)
760 want_kmod = get_option('kmod')
761 if want_kmod != 'false'
762 libkmod = dependency('libkmod',
764 required : want_kmod == 'true')
765 have = libkmod.found()
770 conf.set10('HAVE_KMOD', have)
772 want_pam = get_option('pam')
773 if want_pam != 'false'
774 libpam = cc.find_library('pam', required : want_pam == 'true')
775 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
776 have = libpam.found() and libpam_misc.found()
782 conf.set10('HAVE_PAM', have)
783 m4_defines += have ? ['-DHAVE_PAM'] : []
785 want_microhttpd = get_option('microhttpd')
786 if want_microhttpd != 'false'
787 libmicrohttpd = dependency('libmicrohttpd',
788 version : '>= 0.9.33',
789 required : want_microhttpd == 'true')
790 have = libmicrohttpd.found()
795 conf.set10('HAVE_MICROHTTPD', have)
796 m4_defines += have ? ['-DHAVE_MICROHTTPD'] : []
798 want_libcryptsetup = get_option('libcryptsetup')
799 if want_libcryptsetup != 'false'
800 libcryptsetup = dependency('libcryptsetup',
801 version : '>= 1.6.0',
802 required : want_libcryptsetup == 'true')
803 have = libcryptsetup.found()
808 conf.set10('HAVE_LIBCRYPTSETUP', have)
810 want_libcurl = get_option('libcurl')
811 if want_libcurl != 'false'
812 libcurl = dependency('libcurl',
813 version : '>= 7.32.0',
814 required : want_libcurl == 'true')
815 have = libcurl.found()
820 conf.set10('HAVE_LIBCURL', have)
821 m4_defines += have ? ['-DHAVE_LIBCURL'] : []
823 want_libidn = get_option('libidn')
824 want_libidn2 = get_option('libidn2')
825 if want_libidn == 'true' and want_libidn2 == 'true'
826 error('libidn and libidn2 cannot be requested simultaneously')
829 if want_libidn != 'false' and want_libidn2 != 'true'
830 libidn = dependency('libidn',
831 required : want_libidn == 'true')
832 have = libidn.found()
837 conf.set10('HAVE_LIBIDN', have)
838 m4_defines += have ? ['-DHAVE_LIBIDN'] : []
839 if not have and want_libidn2 != 'false'
840 # libidn is used for both libidn and libidn2 objects
841 libidn = dependency('libidn2',
842 required : want_libidn2 == 'true')
843 have = libidn.found()
847 conf.set10('HAVE_LIBIDN2', have)
848 m4_defines += have ? ['-DHAVE_LIBIDN2'] : []
850 want_libiptc = get_option('libiptc')
851 if want_libiptc != 'false'
852 libiptc = dependency('libiptc',
853 required : want_libiptc == 'true')
854 have = libiptc.found()
859 conf.set10('HAVE_LIBIPTC', have)
860 m4_defines += have ? ['-DHAVE_LIBIPTC'] : []
862 want_qrencode = get_option('qrencode')
863 if want_qrencode != 'false'
864 libqrencode = dependency('libqrencode',
865 required : want_qrencode == 'true')
866 have = libqrencode.found()
871 conf.set10('HAVE_QRENCODE', have)
873 want_gcrypt = get_option('gcrypt')
874 if want_gcrypt != 'false'
875 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
876 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
877 have = libgcrypt.found() and libgpg_error.found()
882 # link to neither of the libs if one is not found
886 conf.set10('HAVE_GCRYPT', have)
888 want_gnutls = get_option('gnutls')
889 if want_gnutls != 'false'
890 libgnutls = dependency('gnutls',
891 version : '>= 3.1.4',
892 required : want_gnutls == 'true')
893 have = libgnutls.found()
898 conf.set10('HAVE_GNUTLS', have)
900 want_elfutils = get_option('elfutils')
901 if want_elfutils != 'false'
902 libdw = dependency('libdw',
903 required : want_elfutils == 'true')
909 conf.set10('HAVE_ELFUTILS', have)
911 want_zlib = get_option('zlib')
912 if want_zlib != 'false'
913 libz = dependency('zlib',
914 required : want_zlib == 'true')
920 conf.set10('HAVE_ZLIB', have)
922 want_bzip2 = get_option('bzip2')
923 if want_bzip2 != 'false'
924 libbzip2 = cc.find_library('bz2',
925 required : want_bzip2 == 'true')
926 have = libbzip2.found()
931 conf.set10('HAVE_BZIP2', have)
933 want_xz = get_option('xz')
934 if want_xz != 'false'
935 libxz = dependency('liblzma',
936 required : want_xz == 'true')
942 conf.set10('HAVE_XZ', have)
944 want_lz4 = get_option('lz4')
945 if want_lz4 != 'false'
946 liblz4 = dependency('liblz4',
947 required : want_lz4 == 'true')
948 have = liblz4.found()
953 conf.set10('HAVE_LZ4', have)
955 want_xkbcommon = get_option('xkbcommon')
956 if want_xkbcommon != 'false'
957 libxkbcommon = dependency('xkbcommon',
958 version : '>= 0.3.0',
959 required : want_xkbcommon == 'true')
960 have = libxkbcommon.found()
965 conf.set10('HAVE_XKBCOMMON', have)
967 want_glib = get_option('glib')
968 if want_glib != 'false'
969 libglib = dependency('glib-2.0',
970 version : '>= 2.22.0',
971 required : want_glib == 'true')
972 libgobject = dependency('gobject-2.0',
973 version : '>= 2.22.0',
974 required : want_glib == 'true')
975 libgio = dependency('gio-2.0',
976 required : want_glib == 'true')
977 have = libglib.found() and libgobject.found() and libgio.found()
984 conf.set10('HAVE_GLIB', have)
986 want_dbus = get_option('dbus')
987 if want_dbus != 'false'
988 libdbus = dependency('dbus-1',
989 version : '>= 1.3.2',
990 required : want_dbus == 'true')
991 have = libdbus.found()
996 conf.set10('HAVE_DBUS', have)
998 default_dnssec = get_option('default-dnssec')
999 if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
1000 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1001 default_dnssec = 'no'
1003 conf.set('DEFAULT_DNSSEC_MODE',
1004 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1005 substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1007 want_importd = get_option('importd')
1008 if want_importd != 'false'
1009 have = (conf.get('HAVE_LIBCURL') == 1 and
1010 conf.get('HAVE_ZLIB') == 1 and
1011 conf.get('HAVE_BZIP2') == 1 and
1012 conf.get('HAVE_XZ') == 1 and
1013 conf.get('HAVE_GCRYPT') == 1)
1014 if want_importd == 'true' and not have
1015 error('importd support was requested, but dependencies are not available')
1020 conf.set10('ENABLE_IMPORTD', have)
1022 want_remote = get_option('remote')
1023 if want_remote != 'false'
1024 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1025 conf.get('HAVE_LIBCURL') == 1]
1026 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1027 # it's possible to build one without the other. Complain only if
1028 # support was explictly requested. The auxiliary files like sysusers
1029 # config should be installed when any of the programs are built.
1030 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1031 error('remote support was requested, but dependencies are not available')
1033 have = have_deps[0] or have_deps[1]
1037 conf.set10('ENABLE_REMOTE', have)
1039 foreach pair : [['utmp', 'HAVE_UTMP'],
1040 ['hibernate', 'ENABLE_HIBERNATE'],
1041 ['environment-d', 'ENABLE_ENVIRONMENT_D'],
1042 ['binfmt', 'ENABLE_BINFMT'],
1043 ['coredump', 'ENABLE_COREDUMP'],
1044 ['resolve', 'ENABLE_RESOLVED'],
1045 ['logind', 'ENABLE_LOGIND'],
1046 ['hostnamed', 'ENABLE_HOSTNAMED'],
1047 ['localed', 'ENABLE_LOCALED'],
1048 ['machined', 'ENABLE_MACHINED'],
1049 ['networkd', 'ENABLE_NETWORKD'],
1050 ['timedated', 'ENABLE_TIMEDATED'],
1051 ['timesyncd', 'ENABLE_TIMESYNCD'],
1052 ['myhostname', 'HAVE_MYHOSTNAME'],
1053 ['firstboot', 'ENABLE_FIRSTBOOT'],
1054 ['randomseed', 'ENABLE_RANDOMSEED'],
1055 ['backlight', 'ENABLE_BACKLIGHT'],
1056 ['vconsole', 'ENABLE_VCONSOLE'],
1057 ['quotacheck', 'ENABLE_QUOTACHECK'],
1058 ['sysusers', 'ENABLE_SYSUSERS'],
1059 ['tmpfiles', 'ENABLE_TMPFILES'],
1060 ['hwdb', 'ENABLE_HWDB'],
1061 ['rfkill', 'ENABLE_RFKILL'],
1062 ['ldconfig', 'ENABLE_LDCONFIG'],
1063 ['efi', 'ENABLE_EFI'],
1064 ['tpm', 'ENABLE_TPM'],
1065 ['ima', 'HAVE_IMA'],
1066 ['smack', 'HAVE_SMACK'],
1067 ['gshadow', 'ENABLE_GSHADOW'],
1068 ['idn', 'ENABLE_IDN'],
1069 ['nss-systemd', 'ENABLE_NSS_SYSTEMD'],
1072 have = get_option(pair[0])
1073 conf.set10(pair[1], have)
1074 m4_defines += have ? ['-D' + pair[1]] : []
1077 want_tests = get_option('tests')
1078 install_tests = get_option('install-tests')
1081 conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', get_option('slow-tests'))
1083 #####################################################################
1085 if get_option('efi')
1086 efi_arch = host_machine.cpu_family()
1088 if efi_arch == 'x86'
1089 EFI_MACHINE_TYPE_NAME = 'ia32'
1090 gnu_efi_arch = 'ia32'
1091 elif efi_arch == 'x86_64'
1092 EFI_MACHINE_TYPE_NAME = 'x64'
1093 gnu_efi_arch = 'x86_64'
1094 elif efi_arch == 'arm'
1095 EFI_MACHINE_TYPE_NAME = 'arm'
1096 gnu_efi_arch = 'arm'
1097 elif efi_arch == 'aarch64'
1098 EFI_MACHINE_TYPE_NAME = 'aa64'
1099 gnu_efi_arch = 'aarch64'
1101 EFI_MACHINE_TYPE_NAME = ''
1106 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
1108 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex').to_int())
1112 conf.set10('ENABLE_EFI', have)
1114 #####################################################################
1116 config_h = configure_file(
1117 output : 'config.h',
1118 configuration : conf)
1120 includes = include_directories('src/basic',
1130 'src/libsystemd/sd-bus',
1131 'src/libsystemd/sd-device',
1132 'src/libsystemd/sd-hwdb',
1133 'src/libsystemd/sd-id128',
1134 'src/libsystemd/sd-netlink',
1135 'src/libsystemd/sd-network',
1136 'src/libsystemd-network',
1140 add_project_arguments('-include', 'config.h', language : 'c')
1142 gcrypt_util_sources = files('src/shared/gcrypt-util.h',
1143 'src/shared/gcrypt-util.c')
1147 subdir('src/systemd')
1149 subdir('src/libsystemd')
1150 subdir('src/libsystemd-network')
1151 subdir('src/journal')
1154 libjournal_core = static_library(
1156 libjournal_core_sources,
1158 include_directories : includes,
1161 libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
1162 libsystemd = shared_library(
1164 libsystemd_internal_sources,
1165 journal_internal_sources,
1166 version : libsystemd_version,
1167 include_directories : includes,
1168 link_args : ['-shared',
1169 '-Wl,--version-script=' + libsystemd_sym_path],
1170 link_with : [libbasic],
1171 dependencies : [threads,
1176 link_depends : libsystemd_sym,
1178 install_dir : rootlibdir)
1180 ############################################################
1182 # binaries that have --help and are intended for use by humans,
1183 # usually, but not always, installed in /bin.
1184 public_programs = []
1186 subdir('src/libudev')
1187 subdir('src/shared')
1190 subdir('src/network')
1192 subdir('src/analyze')
1193 subdir('src/journal-remote')
1194 subdir('src/coredump')
1195 subdir('src/hostname')
1196 subdir('src/import')
1197 subdir('src/kernel-install')
1198 subdir('src/locale')
1199 subdir('src/machine')
1200 subdir('src/nspawn')
1201 subdir('src/resolve')
1202 subdir('src/timedate')
1203 subdir('src/timesync')
1204 subdir('src/vconsole')
1205 subdir('src/sulogin-shell')
1206 subdir('src/boot/efi')
1211 ############################################################
1213 # only static linking apart from libdl, to make sure that the
1214 # module is linked to all libraries that it uses.
1215 test_dlopen = executable(
1218 include_directories : includes,
1219 link_with : [libbasic],
1220 dependencies : [libdl])
1222 foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME'],
1223 ['systemd', 'ENABLE_NSS_SYSTEMD'],
1224 ['mymachines', 'ENABLE_MACHINED'],
1225 ['resolve', 'ENABLE_RESOLVED']]
1227 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
1231 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1232 version_script_arg = join_paths(meson.current_source_dir(), sym)
1234 nss = shared_library(
1236 'src/nss-@0@/nss-@0@.c'.format(module),
1238 include_directories : includes,
1239 link_args : ['-shared',
1240 '-Wl,--version-script=' + version_script_arg,
1242 link_with : [libsystemd_internal,
1244 dependencies : [threads,
1248 install_dir : rootlibdir)
1250 # We cannot use shared_module because it does not support version suffix.
1251 # Unfortunately shared_library insists on creating the symlink…
1252 meson.add_install_script('sh', '-c',
1253 'rm $DESTDIR@0@/libnss_@1@.so'
1254 .format(rootlibdir, module))
1256 test('dlopen-nss_' + module,
1258 args : [nss.full_path()]) # path to dlopen must include a slash
1262 ############################################################
1264 executable('systemd',
1266 include_directories : includes,
1267 link_with : [libcore,
1269 dependencies : [threads,
1275 install_rpath : rootlibexecdir,
1277 install_dir : rootlibexecdir)
1279 exe = executable('systemd-analyze',
1280 systemd_analyze_sources,
1281 include_directories : includes,
1282 link_with : [libcore,
1284 dependencies : [threads,
1290 install_rpath : rootlibexecdir,
1292 public_programs += [exe]
1294 executable('systemd-journald',
1295 systemd_journald_sources,
1296 include_directories : includes,
1297 link_with : [libjournal_core,
1299 dependencies : [threads,
1303 install_rpath : rootlibexecdir,
1305 install_dir : rootlibexecdir)
1307 exe = executable('systemd-cat',
1308 systemd_cat_sources,
1309 include_directories : includes,
1310 link_with : [libjournal_core,
1312 dependencies : [threads],
1313 install_rpath : rootlibexecdir,
1315 public_programs += [exe]
1317 exe = executable('journalctl',
1319 include_directories : includes,
1320 link_with : [libshared],
1321 dependencies : [threads,
1325 install_rpath : rootlibexecdir,
1327 install_dir : rootbindir)
1328 public_programs += [exe]
1330 executable('systemd-getty-generator',
1331 'src/getty-generator/getty-generator.c',
1332 include_directories : includes,
1333 link_with : [libshared],
1334 install_rpath : rootlibexecdir,
1336 install_dir : systemgeneratordir)
1338 executable('systemd-debug-generator',
1339 'src/debug-generator/debug-generator.c',
1340 include_directories : includes,
1341 link_with : [libshared],
1342 install_rpath : rootlibexecdir,
1344 install_dir : systemgeneratordir)
1346 executable('systemd-fstab-generator',
1347 'src/fstab-generator/fstab-generator.c',
1348 'src/core/mount-setup.c',
1349 include_directories : includes,
1350 link_with : [libshared],
1351 install_rpath : rootlibexecdir,
1353 install_dir : systemgeneratordir)
1355 if conf.get('ENABLE_ENVIRONMENT_D') == 1
1356 executable('30-systemd-environment-d-generator',
1357 'src/environment-d-generator/environment-d-generator.c',
1358 include_directories : includes,
1359 link_with : [libshared],
1360 install_rpath : rootlibexecdir,
1362 install_dir : userenvgeneratordir)
1364 meson.add_install_script(meson_make_symlink,
1365 join_paths(sysconfdir, 'environment'),
1366 join_paths(environmentdir, '99-environment.conf'))
1369 if conf.get('ENABLE_HIBERNATE') == 1
1370 executable('systemd-hibernate-resume-generator',
1371 'src/hibernate-resume/hibernate-resume-generator.c',
1372 include_directories : includes,
1373 link_with : [libshared],
1374 install_rpath : rootlibexecdir,
1376 install_dir : systemgeneratordir)
1378 executable('systemd-hibernate-resume',
1379 'src/hibernate-resume/hibernate-resume.c',
1380 include_directories : includes,
1381 link_with : [libshared],
1382 install_rpath : rootlibexecdir,
1384 install_dir : rootlibexecdir)
1387 if conf.get('HAVE_BLKID') == 1
1388 executable('systemd-gpt-auto-generator',
1389 'src/gpt-auto-generator/gpt-auto-generator.c',
1390 'src/basic/blkid-util.h',
1391 include_directories : includes,
1392 link_with : [libshared],
1393 dependencies : libblkid,
1394 install_rpath : rootlibexecdir,
1396 install_dir : systemgeneratordir)
1398 exe = executable('systemd-dissect',
1399 'src/dissect/dissect.c',
1400 include_directories : includes,
1401 link_with : [libshared],
1402 install_rpath : rootlibexecdir,
1404 install_dir : rootlibexecdir)
1405 public_programs += [exe]
1408 if conf.get('ENABLE_RESOLVED') == 1
1409 executable('systemd-resolved',
1410 systemd_resolved_sources,
1411 gcrypt_util_sources,
1412 include_directories : includes,
1413 link_with : [libshared],
1414 dependencies : [threads,
1419 install_rpath : rootlibexecdir,
1421 install_dir : rootlibexecdir)
1423 exe = executable('systemd-resolve',
1424 systemd_resolve_sources,
1425 gcrypt_util_sources,
1426 include_directories : includes,
1427 link_with : [libshared],
1428 dependencies : [threads,
1433 install_rpath : rootlibexecdir,
1435 public_programs += [exe]
1438 if conf.get('ENABLE_LOGIND') == 1
1439 executable('systemd-logind',
1440 systemd_logind_sources,
1441 include_directories : includes,
1442 link_with : [liblogind_core,
1444 dependencies : [threads,
1446 install_rpath : rootlibexecdir,
1448 install_dir : rootlibexecdir)
1450 exe = executable('loginctl',
1452 include_directories : includes,
1453 link_with : [libshared],
1454 dependencies : [threads,
1457 install_rpath : rootlibexecdir,
1459 install_dir : rootbindir)
1460 public_programs += [exe]
1462 exe = executable('systemd-inhibit',
1463 'src/login/inhibit.c',
1464 include_directories : includes,
1465 link_with : [libshared],
1466 install_rpath : rootlibexecdir,
1468 install_dir : rootbindir)
1469 public_programs += [exe]
1471 if conf.get('HAVE_PAM') == 1
1472 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1473 pam_systemd = shared_library(
1477 include_directories : includes,
1478 link_args : ['-shared',
1479 '-Wl,--version-script=' + version_script_arg],
1480 link_with : [libsystemd_internal,
1482 dependencies : [threads,
1485 link_depends : pam_systemd_sym,
1487 install_dir : pamlibdir)
1489 test('dlopen-pam_systemd',
1491 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1495 if conf.get('HAVE_PAM') == 1
1496 executable('systemd-user-sessions',
1497 'src/user-sessions/user-sessions.c',
1498 include_directories : includes,
1499 link_with : [libshared],
1500 install_rpath : rootlibexecdir,
1502 install_dir : rootlibexecdir)
1505 if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
1506 exe = executable('bootctl',
1507 'src/boot/bootctl.c',
1508 include_directories : includes,
1509 link_with : [libshared],
1510 dependencies : [libblkid],
1511 install_rpath : rootlibexecdir,
1513 public_programs += [exe]
1516 exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1517 include_directories : includes,
1518 link_with : [libshared],
1519 dependencies : [threads],
1520 install_rpath : rootlibexecdir,
1522 public_programs += [exe]
1524 exe = executable('systemctl', 'src/systemctl/systemctl.c',
1525 include_directories : includes,
1526 link_with : [libshared],
1527 dependencies : [threads,
1532 install_rpath : rootlibexecdir,
1534 install_dir : rootbindir)
1535 public_programs += [exe]
1537 if conf.get('ENABLE_BACKLIGHT') == 1
1538 executable('systemd-backlight',
1539 'src/backlight/backlight.c',
1540 include_directories : includes,
1541 link_with : [libshared],
1542 install_rpath : rootlibexecdir,
1544 install_dir : rootlibexecdir)
1547 if conf.get('ENABLE_RFKILL') == 1
1548 executable('systemd-rfkill',
1549 'src/rfkill/rfkill.c',
1550 include_directories : includes,
1551 link_with : [libshared],
1552 install_rpath : rootlibexecdir,
1554 install_dir : rootlibexecdir)
1557 executable('systemd-system-update-generator',
1558 'src/system-update-generator/system-update-generator.c',
1559 include_directories : includes,
1560 link_with : [libshared],
1561 install_rpath : rootlibexecdir,
1563 install_dir : systemgeneratordir)
1565 if conf.get('HAVE_LIBCRYPTSETUP') == 1
1566 executable('systemd-cryptsetup',
1567 'src/cryptsetup/cryptsetup.c',
1568 include_directories : includes,
1569 link_with : [libshared],
1570 dependencies : [libcryptsetup],
1571 install_rpath : rootlibexecdir,
1573 install_dir : rootlibexecdir)
1575 executable('systemd-cryptsetup-generator',
1576 'src/cryptsetup/cryptsetup-generator.c',
1577 include_directories : includes,
1578 link_with : [libshared],
1579 dependencies : [libcryptsetup],
1580 install_rpath : rootlibexecdir,
1582 install_dir : systemgeneratordir)
1584 executable('systemd-veritysetup',
1585 'src/veritysetup/veritysetup.c',
1586 include_directories : includes,
1587 link_with : [libshared],
1588 dependencies : [libcryptsetup],
1589 install_rpath : rootlibexecdir,
1591 install_dir : rootlibexecdir)
1593 executable('systemd-veritysetup-generator',
1594 'src/veritysetup/veritysetup-generator.c',
1595 include_directories : includes,
1596 link_with : [libshared],
1597 dependencies : [libcryptsetup],
1598 install_rpath : rootlibexecdir,
1600 install_dir : systemgeneratordir)
1603 if conf.get('HAVE_SYSV_COMPAT') == 1
1604 executable('systemd-sysv-generator',
1605 'src/sysv-generator/sysv-generator.c',
1606 include_directories : includes,
1607 link_with : [libshared],
1608 install_rpath : rootlibexecdir,
1610 install_dir : systemgeneratordir)
1612 executable('systemd-rc-local-generator',
1613 'src/rc-local-generator/rc-local-generator.c',
1614 include_directories : includes,
1615 link_with : [libshared],
1616 install_rpath : rootlibexecdir,
1618 install_dir : systemgeneratordir)
1621 if conf.get('ENABLE_HOSTNAMED') == 1
1622 executable('systemd-hostnamed',
1623 'src/hostname/hostnamed.c',
1624 include_directories : includes,
1625 link_with : [libshared],
1626 install_rpath : rootlibexecdir,
1628 install_dir : rootlibexecdir)
1630 exe = executable('hostnamectl',
1631 'src/hostname/hostnamectl.c',
1632 include_directories : includes,
1633 link_with : [libshared],
1634 install_rpath : rootlibexecdir,
1636 public_programs += [exe]
1639 if conf.get('ENABLE_LOCALED') == 1
1640 if conf.get('HAVE_XKBCOMMON') == 1
1641 # logind will load libxkbcommon.so dynamically on its own
1647 executable('systemd-localed',
1648 systemd_localed_sources,
1649 include_directories : includes,
1650 link_with : [libshared],
1651 dependencies : deps,
1652 install_rpath : rootlibexecdir,
1654 install_dir : rootlibexecdir)
1656 exe = executable('localectl',
1658 include_directories : includes,
1659 link_with : [libshared],
1660 install_rpath : rootlibexecdir,
1662 public_programs += [exe]
1665 if conf.get('ENABLE_TIMEDATED') == 1
1666 executable('systemd-timedated',
1667 'src/timedate/timedated.c',
1668 include_directories : includes,
1669 link_with : [libshared],
1670 install_rpath : rootlibexecdir,
1672 install_dir : rootlibexecdir)
1674 exe = executable('timedatectl',
1675 'src/timedate/timedatectl.c',
1676 include_directories : includes,
1677 install_rpath : rootlibexecdir,
1678 link_with : [libshared],
1680 public_programs += [exe]
1683 if conf.get('ENABLE_TIMESYNCD') == 1
1684 executable('systemd-timesyncd',
1685 systemd_timesyncd_sources,
1686 include_directories : includes,
1687 link_with : [libshared],
1688 dependencies : [threads,
1690 install_rpath : rootlibexecdir,
1692 install_dir : rootlibexecdir)
1695 if conf.get('ENABLE_MACHINED') == 1
1696 executable('systemd-machined',
1697 systemd_machined_sources,
1698 include_directories : includes,
1699 link_with : [libmachine_core,
1701 install_rpath : rootlibexecdir,
1703 install_dir : rootlibexecdir)
1705 exe = executable('machinectl',
1706 'src/machine/machinectl.c',
1707 include_directories : includes,
1708 link_with : [libshared],
1709 dependencies : [threads,
1712 install_rpath : rootlibexecdir,
1714 install_dir : rootbindir)
1715 public_programs += [exe]
1718 if conf.get('ENABLE_IMPORTD') == 1
1719 executable('systemd-importd',
1720 systemd_importd_sources,
1721 include_directories : includes,
1722 link_with : [libshared],
1723 dependencies : [threads],
1724 install_rpath : rootlibexecdir,
1726 install_dir : rootlibexecdir)
1728 systemd_pull = executable('systemd-pull',
1729 systemd_pull_sources,
1730 include_directories : includes,
1731 link_with : [libshared],
1732 dependencies : [libcurl,
1737 install_rpath : rootlibexecdir,
1739 install_dir : rootlibexecdir)
1741 systemd_import = executable('systemd-import',
1742 systemd_import_sources,
1743 include_directories : includes,
1744 link_with : [libshared],
1745 dependencies : [libcurl,
1749 install_rpath : rootlibexecdir,
1751 install_dir : rootlibexecdir)
1753 systemd_export = executable('systemd-export',
1754 systemd_export_sources,
1755 include_directories : includes,
1756 link_with : [libshared],
1757 dependencies : [libcurl,
1761 install_rpath : rootlibexecdir,
1763 install_dir : rootlibexecdir)
1764 public_programs += [systemd_pull, systemd_import, systemd_export]
1767 if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
1768 exe = executable('systemd-journal-upload',
1769 systemd_journal_upload_sources,
1770 include_directories : includes,
1771 link_with : [libshared],
1772 dependencies : [threads,
1777 install_rpath : rootlibexecdir,
1779 install_dir : rootlibexecdir)
1780 public_programs += [exe]
1783 if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
1784 s_j_remote = executable('systemd-journal-remote',
1785 systemd_journal_remote_sources,
1786 include_directories : includes,
1787 link_with : [libshared],
1788 dependencies : [threads,
1793 install_rpath : rootlibexecdir,
1795 install_dir : rootlibexecdir)
1797 s_j_gatewayd = executable('systemd-journal-gatewayd',
1798 systemd_journal_gatewayd_sources,
1799 include_directories : includes,
1800 link_with : [libshared],
1801 dependencies : [threads,
1806 install_rpath : rootlibexecdir,
1808 install_dir : rootlibexecdir)
1809 public_programs += [s_j_remote, s_j_gatewayd]
1812 if conf.get('ENABLE_COREDUMP') == 1
1813 executable('systemd-coredump',
1814 systemd_coredump_sources,
1815 include_directories : includes,
1816 link_with : [libshared],
1817 dependencies : [threads,
1822 install_rpath : rootlibexecdir,
1824 install_dir : rootlibexecdir)
1826 exe = executable('coredumpctl',
1827 coredumpctl_sources,
1828 include_directories : includes,
1829 link_with : [libshared],
1830 dependencies : [threads,
1833 install_rpath : rootlibexecdir,
1835 public_programs += [exe]
1838 if conf.get('ENABLE_BINFMT') == 1
1839 exe = executable('systemd-binfmt',
1840 'src/binfmt/binfmt.c',
1841 include_directories : includes,
1842 link_with : [libshared],
1843 install_rpath : rootlibexecdir,
1845 install_dir : rootlibexecdir)
1846 public_programs += [exe]
1848 meson.add_install_script('sh', '-c',
1849 mkdir_p.format(binfmtdir))
1850 meson.add_install_script('sh', '-c',
1851 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
1854 if conf.get('ENABLE_VCONSOLE') == 1
1855 executable('systemd-vconsole-setup',
1856 'src/vconsole/vconsole-setup.c',
1857 include_directories : includes,
1858 link_with : [libshared],
1859 install_rpath : rootlibexecdir,
1861 install_dir : rootlibexecdir)
1864 if conf.get('ENABLE_RANDOMSEED') == 1
1865 executable('systemd-random-seed',
1866 'src/random-seed/random-seed.c',
1867 include_directories : includes,
1868 link_with : [libshared],
1869 install_rpath : rootlibexecdir,
1871 install_dir : rootlibexecdir)
1874 if conf.get('ENABLE_FIRSTBOOT') == 1
1875 executable('systemd-firstboot',
1876 'src/firstboot/firstboot.c',
1877 include_directories : includes,
1878 link_with : [libshared],
1879 dependencies : [libcrypt],
1880 install_rpath : rootlibexecdir,
1882 install_dir : rootbindir)
1885 executable('systemd-remount-fs',
1886 'src/remount-fs/remount-fs.c',
1887 'src/core/mount-setup.c',
1888 'src/core/mount-setup.h',
1889 include_directories : includes,
1890 link_with : [libshared],
1891 install_rpath : rootlibexecdir,
1893 install_dir : rootlibexecdir)
1895 executable('systemd-machine-id-setup',
1896 'src/machine-id-setup/machine-id-setup-main.c',
1897 'src/core/machine-id-setup.c',
1898 'src/core/machine-id-setup.h',
1899 include_directories : includes,
1900 link_with : [libshared],
1901 install_rpath : rootlibexecdir,
1903 install_dir : rootbindir)
1905 executable('systemd-fsck',
1907 include_directories : includes,
1908 link_with : [libshared],
1909 install_rpath : rootlibexecdir,
1911 install_dir : rootlibexecdir)
1913 executable('systemd-sleep',
1914 'src/sleep/sleep.c',
1915 include_directories : includes,
1916 link_with : [libshared],
1917 install_rpath : rootlibexecdir,
1919 install_dir : rootlibexecdir)
1921 exe = executable('systemd-sysctl',
1922 'src/sysctl/sysctl.c',
1923 include_directories : includes,
1924 link_with : [libshared],
1925 install_rpath : rootlibexecdir,
1927 install_dir : rootlibexecdir)
1928 public_programs += [exe]
1930 executable('systemd-ac-power',
1931 'src/ac-power/ac-power.c',
1932 include_directories : includes,
1933 link_with : [libshared],
1934 install_rpath : rootlibexecdir,
1936 install_dir : rootlibexecdir)
1938 exe = executable('systemd-detect-virt',
1939 'src/detect-virt/detect-virt.c',
1940 include_directories : includes,
1941 link_with : [libshared],
1942 install_rpath : rootlibexecdir,
1944 public_programs += [exe]
1946 exe = executable('systemd-delta',
1947 'src/delta/delta.c',
1948 include_directories : includes,
1949 link_with : [libshared],
1950 install_rpath : rootlibexecdir,
1952 public_programs += [exe]
1954 exe = executable('systemd-escape',
1955 'src/escape/escape.c',
1956 include_directories : includes,
1957 link_with : [libshared],
1958 install_rpath : rootlibexecdir,
1960 install_dir : rootbindir)
1961 public_programs += [exe]
1963 exe = executable('systemd-notify',
1964 'src/notify/notify.c',
1965 include_directories : includes,
1966 link_with : [libshared],
1967 install_rpath : rootlibexecdir,
1969 install_dir : rootbindir)
1970 public_programs += [exe]
1972 executable('systemd-volatile-root',
1973 'src/volatile-root/volatile-root.c',
1974 include_directories : includes,
1975 link_with : [libshared],
1976 install_rpath : rootlibexecdir,
1978 install_dir : rootlibexecdir)
1980 executable('systemd-cgroups-agent',
1981 'src/cgroups-agent/cgroups-agent.c',
1982 include_directories : includes,
1983 link_with : [libshared],
1984 install_rpath : rootlibexecdir,
1986 install_dir : rootlibexecdir)
1988 exe = executable('systemd-path',
1990 include_directories : includes,
1991 link_with : [libshared],
1992 install_rpath : rootlibexecdir,
1994 public_programs += [exe]
1996 exe = executable('systemd-ask-password',
1997 'src/ask-password/ask-password.c',
1998 include_directories : includes,
1999 link_with : [libshared],
2000 install_rpath : rootlibexecdir,
2002 install_dir : rootbindir)
2003 public_programs += [exe]
2005 executable('systemd-reply-password',
2006 'src/reply-password/reply-password.c',
2007 include_directories : includes,
2008 link_with : [libshared],
2009 install_rpath : rootlibexecdir,
2011 install_dir : rootlibexecdir)
2013 exe = executable('systemd-tty-ask-password-agent',
2014 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2015 include_directories : includes,
2016 link_with : [libshared],
2017 install_rpath : rootlibexecdir,
2019 install_dir : rootbindir)
2020 public_programs += [exe]
2022 exe = executable('systemd-cgls',
2024 include_directories : includes,
2025 link_with : [libshared],
2026 install_rpath : rootlibexecdir,
2028 public_programs += [exe]
2030 exe = executable('systemd-cgtop',
2031 'src/cgtop/cgtop.c',
2032 include_directories : includes,
2033 link_with : [libshared],
2034 install_rpath : rootlibexecdir,
2036 public_programs += [exe]
2038 executable('systemd-initctl',
2039 'src/initctl/initctl.c',
2040 include_directories : includes,
2041 link_with : [libshared],
2042 install_rpath : rootlibexecdir,
2044 install_dir : rootlibexecdir)
2046 exe = executable('systemd-mount',
2047 'src/mount/mount-tool.c',
2048 include_directories : includes,
2049 link_with : [libshared],
2050 install_rpath : rootlibexecdir,
2052 public_programs += [exe]
2054 meson.add_install_script(meson_make_symlink,
2055 'systemd-mount', join_paths(bindir, 'systemd-umount'))
2057 exe = executable('systemd-run',
2059 include_directories : includes,
2060 link_with : [libshared],
2061 install_rpath : rootlibexecdir,
2063 public_programs += [exe]
2065 exe = executable('systemd-stdio-bridge',
2066 'src/stdio-bridge/stdio-bridge.c',
2067 include_directories : includes,
2068 link_with : [libshared],
2069 install_rpath : rootlibexecdir,
2071 public_programs += [exe]
2073 exe = executable('busctl',
2074 'src/busctl/busctl.c',
2075 'src/busctl/busctl-introspect.c',
2076 'src/busctl/busctl-introspect.h',
2077 include_directories : includes,
2078 link_with : [libshared],
2079 install_rpath : rootlibexecdir,
2081 public_programs += [exe]
2083 if conf.get('ENABLE_SYSUSERS') == 1
2084 exe = executable('systemd-sysusers',
2085 'src/sysusers/sysusers.c',
2086 include_directories : includes,
2087 link_with : [libshared],
2088 install_rpath : rootlibexecdir,
2090 install_dir : rootbindir)
2091 public_programs += [exe]
2094 if conf.get('ENABLE_TMPFILES') == 1
2095 exe = executable('systemd-tmpfiles',
2096 'src/tmpfiles/tmpfiles.c',
2097 include_directories : includes,
2098 link_with : [libshared],
2099 dependencies : [libacl],
2100 install_rpath : rootlibexecdir,
2102 install_dir : rootbindir)
2103 public_programs += [exe]
2106 if conf.get('ENABLE_HWDB') == 1
2107 exe = executable('systemd-hwdb',
2109 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2110 include_directories : includes,
2111 link_with : [libudev_internal],
2112 install_rpath : udev_rpath,
2114 install_dir : rootbindir)
2115 public_programs += [exe]
2118 if conf.get('ENABLE_QUOTACHECK') == 1
2119 executable('systemd-quotacheck',
2120 'src/quotacheck/quotacheck.c',
2121 include_directories : includes,
2122 link_with : [libshared],
2123 install_rpath : rootlibexecdir,
2125 install_dir : rootlibexecdir)
2128 exe = executable('systemd-socket-proxyd',
2129 'src/socket-proxy/socket-proxyd.c',
2130 include_directories : includes,
2131 link_with : [libshared],
2132 dependencies : [threads],
2133 install_rpath : rootlibexecdir,
2135 install_dir : rootlibexecdir)
2136 public_programs += [exe]
2138 exe = executable('systemd-udevd',
2139 systemd_udevd_sources,
2140 include_directories : includes,
2141 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
2142 link_with : [libudev_core,
2145 dependencies : [threads,
2150 install_rpath : udev_rpath,
2152 install_dir : rootlibexecdir)
2153 public_programs += [exe]
2155 exe = executable('udevadm',
2157 include_directories : includes,
2158 link_with : [libudev_core,
2161 dependencies : [threads,
2166 install_rpath : udev_rpath,
2168 install_dir : rootbindir)
2169 public_programs += [exe]
2171 executable('systemd-shutdown',
2172 systemd_shutdown_sources,
2173 include_directories : includes,
2174 link_with : [libshared],
2175 install_rpath : rootlibexecdir,
2177 install_dir : rootlibexecdir)
2179 executable('systemd-update-done',
2180 'src/update-done/update-done.c',
2181 include_directories : includes,
2182 link_with : [libshared],
2183 install_rpath : rootlibexecdir,
2185 install_dir : rootlibexecdir)
2187 executable('systemd-update-utmp',
2188 'src/update-utmp/update-utmp.c',
2189 include_directories : includes,
2190 link_with : [libshared],
2191 dependencies : [libaudit],
2192 install_rpath : rootlibexecdir,
2194 install_dir : rootlibexecdir)
2196 if conf.get('HAVE_KMOD') == 1
2197 executable('systemd-modules-load',
2198 'src/modules-load/modules-load.c',
2199 include_directories : includes,
2200 link_with : [libshared],
2201 dependencies : [libkmod],
2202 install_rpath : rootlibexecdir,
2204 install_dir : rootlibexecdir)
2206 meson.add_install_script('sh', '-c',
2207 mkdir_p.format(modulesloaddir))
2208 meson.add_install_script('sh', '-c',
2209 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
2212 exe = executable('systemd-nspawn',
2213 systemd_nspawn_sources,
2214 'src/core/mount-setup.c', # FIXME: use a variable?
2215 'src/core/mount-setup.h',
2216 'src/core/loopback-setup.c',
2217 'src/core/loopback-setup.h',
2218 include_directories : [includes, include_directories('src/nspawn')],
2219 link_with : [libshared],
2220 dependencies : [libacl,
2224 install_rpath : rootlibexecdir,
2226 public_programs += [exe]
2228 if conf.get('ENABLE_NETWORKD') == 1
2229 executable('systemd-networkd',
2230 systemd_networkd_sources,
2231 include_directories : includes,
2232 link_with : [libnetworkd_core,
2236 dependencies : [threads],
2237 install_rpath : rootlibexecdir,
2239 install_dir : rootlibexecdir)
2241 executable('systemd-networkd-wait-online',
2242 systemd_networkd_wait_online_sources,
2243 include_directories : includes,
2244 link_with : [libnetworkd_core,
2246 install_rpath : rootlibexecdir,
2248 install_dir : rootlibexecdir)
2250 exe = executable('networkctl',
2252 include_directories : includes,
2253 link_with : [libsystemd_network,
2255 install_rpath : rootlibexecdir,
2257 install_dir : rootbindir)
2258 public_programs += [exe]
2260 ############################################################
2262 foreach tuple : tests
2264 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2265 dependencies = tuple[2]
2266 condition = tuple.length() >= 4 ? tuple[3] : ''
2267 type = tuple.length() >= 5 ? tuple[4] : ''
2268 defs = tuple.length() >= 6 ? tuple[5] : []
2269 incs = tuple.length() >= 7 ? tuple[6] : includes
2272 name = sources[0].split('/')[-1].split('.')[0]
2273 if type.startswith('timeout=')
2274 timeout = type.split('=')[1].to_int()
2278 if condition == '' or conf.get(condition) == 1
2282 include_directories : incs,
2283 link_with : link_with,
2284 dependencies : dependencies,
2286 install_rpath : rootlibexecdir,
2287 install : install_tests,
2288 install_dir : join_paths(testsdir, type))
2291 message('@0@ is a manual test'.format(name))
2292 elif type == 'unsafe' and want_tests != 'unsafe'
2293 message('@0@ is an unsafe test'.format(name))
2300 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2304 test_libsystemd_sym = executable(
2305 'test-libsystemd-sym',
2306 test_libsystemd_sym_c,
2307 include_directories : includes,
2308 link_with : [libsystemd],
2309 install : install_tests,
2310 install_dir : testsdir)
2311 test('test-libsystemd-sym',
2312 test_libsystemd_sym)
2314 test_libudev_sym = executable(
2317 include_directories : includes,
2318 c_args : ['-Wno-deprecated-declarations'],
2319 link_with : [libudev],
2320 install : install_tests,
2321 install_dir : testsdir)
2322 test('test-libudev-sym',
2325 ############################################################
2327 make_directive_index_py = find_program('tools/make-directive-index.py')
2328 make_man_index_py = find_program('tools/make-man-index.py')
2329 xml_helper_py = find_program('tools/xml_helper.py')
2330 hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
2334 subdir('sysusers.d')
2335 subdir('tmpfiles.d')
2340 subdir('shell-completion/bash')
2341 subdir('shell-completion/zsh')
2342 subdir('docs/sysvinit')
2343 subdir('docs/var-log')
2345 # FIXME: figure out if the warning is true:
2346 # https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2347 install_subdir('factory/etc',
2348 install_dir : factorydir)
2351 install_data('xorg/50-systemd-user.sh',
2352 install_dir : xinitrcdir)
2353 install_data('system-preset/90-systemd.preset',
2354 install_dir : systempresetdir)
2355 install_data('modprobe.d/systemd.conf',
2356 install_dir : modprobedir)
2357 install_data('README',
2364 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2365 install_dir : docdir)
2367 meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2368 meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2370 ############################################################
2372 meson_check_help = find_program('tools/meson-check-help.sh')
2374 foreach exec : public_programs
2375 name = exec.full_path().split('/')[-1]
2376 test('check-help-' + name,
2378 args : [exec.full_path()])
2381 ############################################################
2384 all_files = run_command(
2386 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
2389 all_files = files(all_files.stdout().split())
2394 command : ['env', 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
2398 command : ['env', 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
2402 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
2405 command : [meson_git_contrib_sh])
2409 git_head = run_command(
2411 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
2412 'rev-parse', 'HEAD']).stdout().strip()
2413 git_head_short = run_command(
2415 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
2416 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2420 command : ['git', 'archive',
2421 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
2423 '--prefix', 'systemd-@0@/'.format(git_head),
2427 ############################################################
2430 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2432 'prefix: @0@'.format(prefixdir),
2433 'rootprefix: @0@'.format(rootprefixdir),
2434 'sysconf dir: @0@'.format(sysconfdir),
2435 'includedir: @0@'.format(includedir),
2436 'lib dir: @0@'.format(libdir),
2437 'rootlib dir: @0@'.format(rootlibdir),
2438 'SysV init scripts: @0@'.format(sysvinit_path),
2439 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
2440 'PAM modules dir: @0@'.format(pamlibdir),
2441 'PAM configuration dir: @0@'.format(pamconfdir),
2442 'RPM macros dir: @0@'.format(rpmmacrosdir),
2443 'modprobe.d dir: @0@'.format(modprobedir),
2444 'D-Bus policy dir: @0@'.format(dbuspolicydir),
2445 'D-Bus session dir: @0@'.format(dbussessionservicedir),
2446 'D-Bus system dir: @0@'.format(dbussystemservicedir),
2447 'bash completions dir: @0@'.format(bashcompletiondir),
2448 'zsh completions dir: @0@'.format(zshcompletiondir),
2449 'extra start script: @0@'.format(get_option('rc-local')),
2450 'extra stop script: @0@'.format(get_option('halt-local')),
2451 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2452 get_option('debug-tty')),
2453 'TTY GID: @0@'.format(tty_gid),
2454 'maximum system UID: @0@'.format(system_uid_max),
2455 'maximum system GID: @0@'.format(system_gid_max),
2456 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
2457 'certificate root: @0@'.format(get_option('certificate-root')),
2458 'support URL: @0@'.format(support_url),
2459 'nobody user name: @0@'.format(get_option('nobody-user')),
2460 'nobody group name: @0@'.format(get_option('nobody-group')),
2461 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
2462 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
2464 'default DNSSEC mode: @0@'.format(default_dnssec),
2465 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2466 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2468 alt_dns_servers = '\n '.join(dns_servers.split(' '))
2469 alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2471 'default DNS servers: @0@'.format(alt_dns_servers),
2472 'default NTP servers: @0@'.format(alt_ntp_servers)]
2474 alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2475 '@@0@'.format(time_epoch)).stdout().strip()
2477 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2480 # CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2481 # CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2482 # LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2484 if conf.get('ENABLE_EFI') == 1
2486 'efi arch: @0@'.format(efi_arch)]
2490 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2491 'EFI CC @0@'.format(efi_cc),
2492 'EFI libdir: @0@'.format(efi_libdir),
2493 'EFI ldsdir: @0@'.format(efi_ldsdir),
2494 'EFI includedir: @0@'.format(efi_incdir)]
2547 ['legacy pkla', install_polkit_pkla],
2549 ['gnu-efi', have_gnu_efi],
2555 ['nss-myhostname', conf.get('HAVE_MYHOSTNAME') == 1],
2558 ['man pages', want_man],
2559 ['html pages', want_html],
2560 ['man page indices', want_man and have_lxml],
2561 ['split /usr', conf.get('HAVE_SPLIT_USR') == 1],
2566 ['adm group', get_option('adm-group')],
2567 ['wheel group', get_option('wheel-group')],
2570 ['debug mmap cache'],
2573 cond = tuple.get(1, '')
2575 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
2576 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
2577 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
2582 missing += [tuple[0]]
2588 'enabled features: @0@'.format(', '.join(found)),
2590 'disabled features: @0@'.format(', '.join(missing)),
2592 message('\n '.join(status))