]> git.ipfire.org Git - thirdparty/systemd.git/blame - meson.build
meson: include the library symbol version list in link_depends
[thirdparty/systemd.git] / meson.build
CommitLineData
5c23128d
ZJS
1# -*- mode: meson -*-
2
3project('systemd', 'c',
4 version : '233',
5 license : 'LGPLv2+',
6 default_options: [
7 'c_std=gnu99',
8 'prefix=/usr',
9 'sysconfdir=/etc',
10 'localstatedir=/var',
11 ],
12 meson_version : '>= 0.39.1',
13 )
14
15# We need the same data in three different formats, ugh!
16# Also, for hysterical reasons, we use different variable
17# names, sometimes. Not all variables are included in every
18# set. Ugh, ugh, ugh!
19conf = configuration_data()
20conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
21conf.set_quoted('PACKAGE_VERSION', meson.project_version())
22
23substs = configuration_data()
24substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
25substs.set('PACKAGE_VERSION', meson.project_version())
26
27m4_defines = []
28
29#####################################################################
30
31if get_option('split-usr')
32 conf.set('HAVE_SPLIT_USR', 1)
33 rootprefixdir = '/'
34else
35 rootprefixdir = '/usr'
36endif
37
38sysvinit_path = get_option('sysvinit-path')
39sysvrcnd_path = get_option('sysvrcnd-path')
40if sysvinit_path != '' or sysvrcnd_path != ''
41 conf.set('HAVE_SYSV_COMPAT', 1,
42 description : 'SysV init scripts and rcN.d links are supported')
43endif
44
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.
48prefixdir = get_option('prefix')
49if not prefixdir.startswith('/')
50 error('Prefix is not absolute: "@0@"'.format(prefixdir))
51endif
52bindir = join_paths(prefixdir, get_option('bindir'))
53libdir = join_paths(prefixdir, get_option('libdir'))
54sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
55includedir = join_paths(prefixdir, get_option('includedir'))
56datadir = join_paths(prefixdir, get_option('datadir'))
57localstatedir = join_paths('/', get_option('localstatedir'))
58
59rootbindir = join_paths(rootprefixdir, 'bin')
60rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
61
62rootlibdir = get_option('rootlibdir')
63if rootlibdir == ''
64 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
65endif
66
67# Dirs of external packages
68pkgconfigdatadir = datadir + '/pkgconfig'
69pkgconfiglibdir = libdir + '/pkgconfig'
70polkitpolicydir = datadir + '/polkit-1/actions'
71polkitrulesdir = datadir + '/polkit-1/rules.d'
72polkitpkladir = localstatedir + '/lib/polkit-1/localauthority/10-vendor.d'
73varlogdir = localstatedir + '/log'
74xinitrcdir = sysconfdir + '/X11/xinit/xinitrc.d'
75rpmmacrosdir = get_option('rpmmacrosdir')
76
77# Our own paths
78pkgdatadir = datadir + '/systemd'
79environmentdir = prefixdir + '/lib/environment.d'
80pkgsysconfdir = sysconfdir + '/systemd'
81userunitdir = prefixdir + '/lib/systemd/user'
82userpresetdir = prefixdir + '/lib/systemd/user-preset'
83tmpfilesdir = prefixdir + '/lib/tmpfiles.d'
84sysusersdir = prefixdir + '/lib/sysusers.d'
85sysctldir = prefixdir + '/lib/sysctl.d'
86binfmtdir = prefixdir + '/lib/binfmt.d'
87modulesloaddir = prefixdir + '/lib/modules-load.d'
88networkdir = rootprefixdir + '/lib/systemd/network'
89pkgincludedir = includedir + '/systemd'
90systemgeneratordir = rootlibexecdir + '/system-generators'
91usergeneratordir = prefixdir + '/lib/systemd/user-generators'
92systemenvgeneratordir = prefixdir + '/lib/systemd/system-environment-generators'
93userenvgeneratordir = prefixdir + '/lib/systemd/user-environment-generators'
94systemshutdowndir = rootlibexecdir + '/system-shutdown'
95systemsleepdir = rootlibexecdir + '/system-sleep'
96systemunitdir = rootprefixdir + '/lib/systemd/system'
97systempresetdir = rootprefixdir + '/lib/systemd/system-preset'
98udevlibexecdir = rootprefixdir + '/lib/udev'
99udevhomedir = udevlibexecdir + ''
100udevrulesdir = udevlibexecdir + '/rules.d'
101udevhwdbdir = udevlibexecdir + '/hwdb.d'
102catalogdir = prefixdir + '/lib/systemd/catalog'
103kernelinstalldir = prefixdir + '/lib/kernel/install.d'
104factorydir = datadir + '/factory'
105docdir = datadir + '/doc/systemd'
106bootlibdir = prefixdir + '/lib/systemd/boot/efi'
107testsdir = prefixdir + '/lib/systemd/tests'
108systemdstatedir = localstatedir + '/lib/systemd'
109catalogstatedir = systemdstatedir + '/catalog'
110
111dbuspolicydir = get_option('dbuspolicydir')
112if dbuspolicydir == ''
113 dbuspolicydir = datadir + '/dbus-1/system.d'
114endif
115
116dbussessionservicedir = get_option('dbussessionservicedir')
117if dbussessionservicedir == ''
118 dbussessionservicedir = datadir + '/dbus-1/services'
119endif
120
121dbussystemservicedir = get_option('dbussystemservicedir')
122if dbussystemservicedir == ''
123 dbussystemservicedir = datadir + '/dbus-1/system-services'
124endif
125
126pamlibdir = get_option('pamlibdir')
127if pamlibdir == ''
128 pamlibdir = rootlibdir + '/security'
129endif
130
131pamconfdir = get_option('pamconfdir')
132if pamconfdir == ''
133 pamconfdir = sysconfdir + '/pam.d'
134endif
135
136conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
137conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', pkgsysconfdir + '/system')
138conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
139conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
140conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
141conf.set_quoted('USER_CONFIG_UNIT_PATH', pkgsysconfdir + '/user')
142conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
143conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
144conf.set_quoted('CATALOG_DATABASE', catalogstatedir + '/database')
145conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', rootlibexecdir + '/systemd-cgroups-agent')
146conf.set_quoted('SYSTEMD_BINARY_PATH', rootlibexecdir + '/systemd')
147conf.set_quoted('SYSTEMD_FSCK_PATH', rootlibexecdir + '/systemd-fsck')
148conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', rootlibexecdir + '/systemd-shutdown')
149conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', rootlibexecdir + '/systemd-sleep')
150conf.set_quoted('SYSTEMCTL_BINARY_PATH', rootbindir + '/systemctl')
151conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', rootbindir + '/systemd-tty-ask-password-agent')
152conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', bindir + '/systemd-stdio-bridge')
153conf.set_quoted('ROOTPREFIX', rootprefixdir)
154conf.set_quoted('RANDOM_SEED_DIR', localstatedir + '/lib/systemd/')
155conf.set_quoted('RANDOM_SEED', localstatedir + '/lib/systemd/random-seed')
156conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', rootlibexecdir + '/systemd-cryptsetup')
157conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
158conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
159conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
160conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
161conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
162conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
163conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', pkgdatadir + '/kbd-model-map')
164conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', pkgdatadir + '/language-fallback-map')
165conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
166conf.set_quoted('POLKIT_AGENT_BINARY_PATH', bindir + '/pkttyagent')
167conf.set_quoted('LIBDIR', libdir)
168conf.set_quoted('ROOTLIBDIR', rootlibdir)
169conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
170conf.set_quoted('BOOTLIBDIR', bootlibdir)
171conf.set_quoted('SYSTEMD_PULL_PATH', rootlibexecdir + '/systemd-pull')
172conf.set_quoted('SYSTEMD_IMPORT_PATH', rootlibexecdir + '/systemd-import')
173conf.set_quoted('SYSTEMD_EXPORT_PATH', rootlibexecdir + '/systemd-export')
174conf.set_quoted('VENDOR_KEYRING_PATH', rootlibexecdir + '/import-pubring.gpg')
175conf.set_quoted('USER_KEYRING_PATH', pkgsysconfdir + '/import-pubring.gpg')
176conf.set_quoted('DOCUMENT_ROOT', pkgdatadir + '/gatewayd')
177
178conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
179conf.set_quoted('ABS_SRC_DIR', meson.source_root())
180
181substs.set('prefix', prefixdir)
182substs.set('pkgsysconfdir', pkgsysconfdir)
183substs.set('rootlibexecdir', rootlibexecdir)
184substs.set('systemunitdir', systemunitdir)
185substs.set('userunitdir', userunitdir)
186substs.set('systempresetdir', systempresetdir)
187substs.set('userpresetdir', userpresetdir)
188substs.set('udevhwdbdir', udevhwdbdir)
189substs.set('udevrulesdir', udevrulesdir)
190substs.set('catalogdir', catalogdir)
191substs.set('tmpfilesdir', tmpfilesdir)
192substs.set('sysusersdir', sysusersdir)
193substs.set('sysctldir', sysctldir)
194substs.set('binfmtdir', binfmtdir)
195substs.set('modulesloaddir', modulesloaddir)
196substs.set('systemgeneratordir', systemgeneratordir)
197substs.set('usergeneratordir', usergeneratordir)
198substs.set('systemenvgeneratordir', systemenvgeneratordir)
199substs.set('userenvgeneratordir', userenvgeneratordir)
200substs.set('systemshutdowndir', systemshutdowndir)
201substs.set('systemsleepdir', systemsleepdir)
202
203#####################################################################
204
205cc = meson.get_compiler('c')
206pkgconfig = import('pkgconfig')
207
208foreach arg : ['-Wundef',
209 '-Wlogical-op',
210 '-Wmissing-include-dirs',
211 '-Wold-style-definition',
212 '-Wpointer-arith',
213 '-Winit-self',
214 '-Wdeclaration-after-statement',
215 '-Wfloat-equal',
216 '-Wsuggest-attribute=noreturn',
217 '-Werror=missing-prototypes',
218 '-Werror=implicit-function-declaration',
219 '-Werror=missing-declarations',
220 '-Werror=return-type',
221 '-Werror=incompatible-pointer-types',
222 '-Werror=format=2',
223 '-Wstrict-prototypes',
224 '-Wredundant-decls',
225 '-Wmissing-noreturn',
226 '-Wshadow',
227 '-Wendif-labels',
228 '-Wstrict-aliasing=2',
229 '-Wwrite-strings',
230 '-Wno-unused-parameter',
231 '-Wno-missing-field-initializers',
232 '-Wno-unused-result',
233 '-Wno-format-signedness',
234 '-Werror=overflow',
235 '-Wdate-time',
236 '-Wnested-externs',
237 '-ffast-math',
238 '-fno-common',
239 '-fdiagnostics-show-option',
240 '-fno-strict-aliasing',
241 '-fvisibility=hidden',
242 '-fstack-protector',
243 '-fstack-protector-strong',
244 '-fPIE',
245 '--param=ssp-buffer-size=4',
246 ]
247 if cc.has_argument(arg)
248 add_project_arguments(arg, language : 'c')
249 endif
250endforeach
251
252if cc.compiles('
253 #include <time.h>
254 #include <inttypes.h>
255 typedef uint64_t usec_t;
256 usec_t now(clockid_t clock);
257 int main(void) {
258 struct timespec now;
259 return 0;
260 }
261')
262 # TODO: message?
263 add_project_arguments('-Werror=shadow', language : 'c')
264endif
265
266if cc.get_id() == 'clang'
267 foreach arg : ['-Wno-typedef-redefinition',
268 '-Wno-gnu-variable-sized-type-not-at-end',
269 ]
270 if cc.has_argument(arg)
271 add_project_arguments(arg, language : 'c')
272 endif
273 endforeach
274endif
275
276# --as-needed and --no-undefined are provided by meson by default,
277# run mesonconf to see what is enabled
278foreach arg : ['-Wl,-z,relro',
279 '-Wl,-z,now',
280 '-pie',
281 '-Wl,-fuse-ld=gold',
282 ]
283 if cc.has_argument(arg)
284 add_project_link_arguments(arg, language : 'c')
285 endif
286endforeach
287
288#####################################################################
289# compilation result tests
290
291conf.set('_GNU_SOURCE', 1)
292conf.set('__SANE_USERSPACE_TYPES__', 1)
293
294conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
295conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
296conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
297conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
298conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
299conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
300conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
301
302decl_headers = '''
303#include <uchar.h>
304#include <linux/ethtool.h>
305'''
306# FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
307
308foreach decl : ['char16_t',
309 'char32_t',
310 'key_serial_t',
311 'struct ethtool_link_settings',
312 ]
313 if cc.sizeof(decl, prefix : decl_headers) > 0
314 # We get -1 if the size cannot be determined
315 conf.set('HAVE_' + decl.underscorify().to_upper(), 1)
316 endif
317endforeach
318
319foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
320 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
321 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
322 ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'],
323 ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
324 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
325 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
326 ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'],
327 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
328 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
329 # if_tunnel.h is buggy and cannot be included on its own
330 ['IFLA_VTI_REMOTE', 'linux/if_tunnel.h', '#include <net/if.h>'],
331 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
332 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
333 ['IFLA_BRIDGE_VLAN_INFO', 'linux/if_bridge.h'],
334 ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'],
335 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
336 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
337 ['NDA_IFINDEX', 'linux/neighbour.h'],
338 ['IFA_FLAGS', 'linux/if_addr.h'],
339 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
340 ]
341 prefix = decl.length() > 2 ? decl[2] : ''
342 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
343 conf.set10('HAVE_DECL_' + decl[0], have)
344endforeach
345
346skip = false
347foreach ident : ['secure_getenv', '__secure_getenv']
348 if not skip and cc.has_function(ident)
349 conf.set('HAVE_' + ident.to_upper(), 1)
350 skip = true
351 endif
352endforeach
353
354foreach ident : [
355 ['memfd_create', '''#include <sys/memfd.h>'''],
356 ['gettid', '''#include <sys/types.h>'''],
357 ['pivot_root', '''#include <stdlib.h>'''], # no known header declares pivot_root
358 ['name_to_handle_at', '''#define _GNU_SOURCE
359 #include <sys/types.h>
360 #include <sys/stat.h>
361 #include <fcntl.h>'''],
362 ['setns', '''#define _GNU_SOURCE
363 #include <sched.h>'''],
364 ['getrandom', '''#include <sys/random.h>'''],
365 ['renameat2', '''#include <stdio.h>'''],
366 ['kcmp', '''#include <linux/kcmp.h>'''],
367 ['keyctl', '''#include <sys/types.h>
368 #include <keyutils.h>'''],
369 ['copy_file_range', '''#include <sys/syscall.h>
370 #include <unistd.h>'''],
371 ['explicit_bzero' , '''#include <strings.h>'''],
372 ]
373
374 have = cc.has_function(ident[0], prefix : ident[1])
375 conf.set10('HAVE_DECL_' + ident[0].to_upper(), have)
376endforeach
377
378#####################################################################
379
380sed = find_program('sed')
381grep = find_program('grep')
382awk = find_program('awk')
78b68dcb 383m4 = find_program('/usr/bin/m4')
5c23128d 384stat = find_program('stat')
d68b342b
ZJS
385git = find_program('git', required : false)
386etags = find_program('etags', required : false)
5c23128d
ZJS
387
388# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
389# /usr/sbin, /sbin, and fall back to the default from middle column.
390progs = [['telinit', '/lib/sysvinit/telinit'],
391 ['quotaon', '/usr/sbin/quotaon' ],
392 ['quotacheck', '/usr/sbin/quotacheck' ],
393 ['kill', '/usr/bin/kill' ],
394 ['kmod', '/usr/bin/kmod' ],
395 ['kexec', '/usr/sbin/kexec' ],
396 ['sulogin', '/usr/sbin/sulogin' ],
397 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
398 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
399 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
400 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
401 ]
402foreach prog : progs
403 path = get_option(prog[0] + '-path')
404 if path != ''
405 message('Using @1@ for @0@'.format(prog[0], path))
406 else
407 exe = find_program(prog[0], '/usr/sbin/' + prog[0], '/sbin/' + prog[0], required: false)
408 path = exe.found() ? exe.path() : prog[1]
409 endif
410 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
411 conf.set_quoted(name, path)
412endforeach
413
414# TODO: add ln --relative check
415# AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't support --relative ***])])
416
417############################################################
418
419gperf = find_program('gperf')
420
421gperf_test_format = '''
422#include <string.h>
423const char * in_word_set(const char *, @0@);
424@1@
425'''
426gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
427gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
428gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
429if cc.compiles(gperf_test)
430 gperf_len_type = 'size_t'
431else
432 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
433 if cc.compiles(gperf_test)
434 gperf_len_type = 'unsigned'
435 else
436 error('unable to determine gperf len type')
437 endif
438endif
439message('gperf len type is @0@'.format(gperf_len_type))
440conf.set('GPERF_LEN_TYPE', gperf_len_type, description : 'The type of gperf "len" parameter')
441
442############################################################
443
444if not cc.has_header('sys/capability.h')
445 error('POSIX caps headers not found')
446endif
447foreach header : ['linux/btrfs.h',
448 'linux/memfd.h',
449 'linux/vm_sockets.h',
450 'valgrind/memcheck.h',
451 'valgrind/valgrind.h',
452 ]
453 if cc.has_header(header)
454 conf.set('HAVE_' + header.underscorify().to_upper(), 1)
455 endif
456endforeach
457
458############################################################
459
460conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
461
462default_hierarchy = get_option('default-hierarchy')
463conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
464 description : 'default cgroup hierarchy as string')
465if default_hierarchy == 'legacy'
466 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
467elif default_hierarchy == 'hybrid'
468 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
469else
470 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
471endif
472
473time_epoch = get_option('time-epoch')
474if time_epoch == ''
475 NEWS = files('NEWS')
476 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
477endif
478time_epoch = time_epoch.to_int()
479conf.set('TIME_EPOCH', time_epoch)
480
481system_uid_max = get_option('system-uid-max')
482if system_uid_max == ''
483 system_uid_max = run_command(
484 awk,
485 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
486 '/etc/login.defs').stdout()
487endif
488system_uid_max = system_uid_max.to_int()
489conf.set('SYSTEM_UID_MAX', system_uid_max)
490substs.set('systemuidmax', system_uid_max)
491message('Maximum system UID is @0@'.format(system_uid_max))
492
493conf.set_quoted('NOBODY_USER_NAME', get_option('nobody-user'))
494conf.set_quoted('NOBODY_GROUP_NAME', get_option('nobody-group'))
495
496system_gid_max = get_option('system-gid-max')
497if system_gid_max == ''
498 system_gid_max = run_command(
499 awk,
500 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
501 '/etc/login.defs').stdout()
502endif
503system_gid_max = system_gid_max.to_int()
504conf.set('SYSTEM_GID_MAX', system_gid_max)
505substs.set('systemgidmax', system_gid_max)
506message('Maximum system GID is @0@'.format(system_gid_max))
507
508tty_gid = get_option('tty-gid')
509conf.set('TTY_GID', tty_gid)
510m4_defines += ['-DTTY_GID=' + tty_gid]
511
512if get_option('adm-group')
513 m4_defines += ['-DENABLE_ADM_GROUP']
514endif
515
516if get_option('wheel-group')
517 m4_defines += ['-DENABLE_WHEEL_GROUP']
518endif
519
520substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
521
522conf.set10('KILL_USER_PROCESSES', get_option('default-kill-user-processes'))
523
524default_dnssec = get_option('default-dnssec')
525conf.set('DEFAULT_DNSSEC_MODE',
526 'DNSSEC_' + default_dnssec.underscorify().to_upper())
527
528conf.set_quoted('DNS_SERVERS', get_option('dns-servers'))
529
530conf.set_quoted('NTP_SERVERS', get_option('ntp-servers'))
531
532conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
533
534#####################################################################
535
536threads = dependency('threads')
537librt = cc.find_library('rt')
538libm = cc.find_library('m')
539libdl = cc.find_library('dl')
540libcrypt = cc.find_library('crypt')
541
542libcap = dependency('libcap')
543libmount = dependency('mount',
544 version : '>= 2.27')
545
546want_seccomp = get_option('seccomp')
547if want_seccomp != 'no'
548 libseccomp = dependency('libseccomp',
549 required : want_seccomp == 'yes')
550 if libseccomp.found()
551 conf.set('HAVE_SECCOMP', 1)
552 m4_defines += ['-DHAVE_SECCOMP']
553 endif
554else
555 libseccomp = []
556endif
557
558want_selinux = get_option('selinux')
559if want_selinux != 'no'
560 libselinux = dependency('libselinux',
561 version : '>= 2.1.9',
562 required : want_selinux == 'yes')
563 if libselinux.found()
564 conf.set('HAVE_SELINUX', 1)
565 m4_defines += ['-DHAVE_SELINUX']
566 endif
567else
568 libselinux = []
569endif
570
571want_apparmor = get_option('apparmor')
572if want_apparmor != 'no'
573 libapparmor = dependency('libapparmor',
574 required : want_apparmor == 'yes')
575 if libapparmor.found()
576 conf.set('HAVE_APPARMOR', 1)
577 m4_defines += ['-DHAVE_APPARMOR']
578 endif
579else
580 libapparmor = []
581endif
582
583want_smack = get_option('smack')
584if want_smack != 'no'
585 libsmack = dependency('libsmack',
586 required : want_smack == 'yes')
587 if libsmack.found()
588 conf.set('HAVE_SMACK', 1)
589 m4_defines += ['-DHAVE_SMACK']
590 endif
591else
592 libsmack = []
593endif
594
595smack_run_label = get_option('smack-run-label')
596if smack_run_label != ''
597 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
598 m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
599endif
600
601want_audit = get_option('audit')
602if want_audit != 'no'
603 libaudit = dependency('audit', required : want_audit == 'yes')
604 if libaudit.found()
605 conf.set('HAVE_AUDIT', 1)
606 endif
607else
608 libaudit = []
609endif
610
611want_blkid = get_option('blkid')
612if want_blkid != 'no'
613 libblkid = dependency('blkid', required : want_blkid == 'yes')
614 if libblkid.found()
615 conf.set('HAVE_BLKID', 1)
616 endif
617else
618 libblkid = []
619endif
620
621want_kmod = get_option('kmod')
622if want_kmod != 'no'
623 libkmod = dependency('libkmod',
624 version : '>= 15',
625 required : want_kmod == 'yes')
626 if libkmod.found()
627 conf.set('HAVE_KMOD', 1)
628 endif
629else
630 libkmod = []
631endif
632
633want_pam = get_option('pam')
634if want_pam != 'no'
635 libpam = cc.find_library('pam', required : want_pam == 'yes')
636 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'yes')
637 if libpam.found() and libpam_misc.found()
638 conf.set('HAVE_PAM', 1)
639 m4_defines += ['-DHAVE_PAM']
640 endif
641else
642 libpam = []
643 libpam_misc = []
644endif
645
646want_microhttpd = get_option('microhttpd')
647if want_microhttpd != 'no'
648 libmicrohttpd = dependency('libmicrohttpd',
649 version : '>= 0.9.33',
650 required : want_microhttpd == 'yes')
651 if libmicrohttpd.found()
652 conf.set('HAVE_MICROHTTPD', 1)
653 m4_defines += ['-DHAVE_MICROHTTPD']
654 endif
655else
656 libmicrohttpd = []
657endif
658
659want_libcryptsetup = get_option('libcryptsetup')
660if want_libcryptsetup != 'no'
661 libcryptsetup = dependency('libcryptsetup',
662 version : '>= 1.6.0',
663 required : want_libcryptsetup == 'yes')
664 if libcryptsetup.found()
665 conf.set('HAVE_LIBCRYPTSETUP', 1)
666 endif
667else
668 libcryptsetup = []
669endif
670
671want_libcurl = get_option('libcurl')
672if want_libcurl != 'no'
673 libcurl = dependency('libcurl',
674 version : '>= 7.32.0',
675 required : want_libcurl == 'yes')
676 if libcurl.found()
677 conf.set('HAVE_LIBCURL', 1)
678 m4_defines += ['-DHAVE_LIBCURL']
679 endif
680else
681 libcurl = []
682endif
683
684want_libidn = get_option('libidn')
685if want_libidn != 'no'
686 libidn = dependency('libidn',
687 required : want_libidn == 'yes')
688 if libidn.found()
689 conf.set('HAVE_LIBIDN', 1)
690 m4_defines += ['-DHAVE_LIBIDN']
691 endif
692else
693 libidn = []
694endif
695
696want_libiptc = get_option('libiptc')
697if want_libiptc != 'no'
698 libiptc = dependency('libiptc',
699 required : want_libiptc == 'yes')
700 if libiptc.found()
701 conf.set('HAVE_LIBIPTC', 1)
702 m4_defines += ['-DHAVE_LIBIPTC']
703 endif
704else
705 libiptc = []
706endif
707
708want_qrencode = get_option('qrencode')
709if want_qrencode != 'no'
710 libqrencode = dependency('libqrencode',
711 required : want_qrencode == 'yes')
712 if libqrencode.found()
713 conf.set('HAVE_QRENCODE', 1)
714 endif
715else
716 libqrencode = []
717endif
718
719want_gnutls = get_option('gnutls')
720if want_gnutls != 'no'
721 libgnutls = dependency('gnutls',
722 version : '>= 3.1.4',
723 required : want_gnutls == 'yes')
724 if libgnutls.found()
725 conf.set('HAVE_GNUTLS', 1)
726 endif
727else
728 libgnutls = []
729endif
730
731want_elfutils = get_option('elfutils')
732if want_elfutils != 'no'
733 libdw = dependency('libdw',
734 required : want_elfutils == 'yes')
735 if libdw.found()
736 conf.set('HAVE_ELFUTILS', 1)
737 endif
738else
739 libdw = []
740endif
741
742want_zlib = get_option('zlib')
743if want_zlib != 'no'
744 libz = dependency('zlib',
745 required : want_zlib == 'yes')
746 if libz.found()
747 conf.set('HAVE_ZLIB', 1)
748 endif
749else
750 libz = []
751endif
752
753want_bzip2 = get_option('bzip2')
754if want_bzip2 != 'no'
755 libbzip2 = cc.find_library('bz2',
756 required : want_bzip2 == 'yes')
757 if libbzip2.found()
758 conf.set('HAVE_BZIP2', 1)
759 endif
760else
761 libbzip2 = []
762endif
763
764want_xz = get_option('xz')
765if want_xz != 'no'
766 libxz = dependency('liblzma',
767 required : want_xz == 'yes')
768 if libxz.found()
769 conf.set('HAVE_XZ', 1)
770 endif
771else
772 libxz = []
773endif
774
775want_lz4 = get_option('lz4')
776if want_lz4 != 'no'
777 liblz4 = dependency('liblz4',
778 required : want_lz4 == 'yes')
779 if liblz4.found()
780 conf.set('HAVE_LZ4', 1)
781 endif
782else
783 liblz4 = []
784endif
785
786libacl = cc.find_library('acl', required : false)
787if libacl.found()
788 conf.set('HAVE_ACL', 1)
789 m4_defines += ['-DHAVE_ACL']
790endif
791
69e96427
ZJS
792want_glib = get_option('glib')
793if want_glib != 'no'
794 libglib = dependency('glib-2.0',
795 version : '>= 2.22.0',
796 required : want_glib == 'yes')
797 libgobject = dependency('gobject-2.0',
798 version : '>= 2.22.0',
799 required : want_glib == 'yes')
800 libgio = dependency('gio-2.0',
801 required : want_glib == 'yes')
802 if libglib.found() and libgobject.found() and libgio.found()
803 conf.set('HAVE_GLIB', 1)
804 endif
805else
806 libglib = []
807 libgobject = []
808 libgio = []
809endif
810
811want_dbus = get_option('dbus')
812if want_dbus != 'no'
813 libdbus = dependency('dbus-1',
814 version : '>= 1.3.2',
815 required : want_dbus == 'yes')
816 if libdbus.found()
817 conf.set('HAVE_DBUS', 1)
818 endif
819else
820 libdbus = []
821endif
822
5c23128d
ZJS
823want_libgcrypt = get_option('libgcrypt')
824if want_libgcrypt != 'no'
825 libgcrypt = cc.find_library('gcrypt', required : want_libgcrypt == 'yes')
826 if libgcrypt.found()
827 conf.set('HAVE_LIBGCRYPT', 1)
828 endif
829else
830 libgcrypt = []
831endif
832
833want_importd = get_option('importd')
834if want_importd != 'no'
835 have_deps = (conf.get('HAVE_LIBCURL', 0) == 1 and
836 conf.get('HAVE_ZLIB', 0) == 1 and
837 conf.get('HAVE_BZIP2', 0) == 1 and
838 conf.get('HAVE_XZ', 0) == 1 and
839 conf.get('HAVE_LZ4', 0) == 1)
840 if have_deps
841 conf.set('ENABLE_IMPORTD', 1)
842 elif want_importd == 'yes'
843 error('importd support was requested, but dependencies are not available')
844 endif
845endif
846
847want_remote = get_option('remote')
848if want_remote != 'no'
849 have_deps = [conf.get('HAVE_MICROHTTPD', 0) == 1,
850 conf.get('HAVE_LIBCURL', 0) == 1]
851 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
852 # it's possible to build one without the other. Complain only if
853 # support was explictly requested. The auxiliary files like sysusers
854 # config should be installed when any of the programs are built.
855 if want_remote == 'yes' and not (have_deps[0] and have_deps[1])
856 error('remote support was requested, but dependencies are not available')
857 endif
858 if have_deps[0] or have_deps[1]
859 conf.set('ENABLE_REMOTE', 1)
860 endif
861endif
862
863foreach pair : [['utmp', 'HAVE_UTMP'],
864 ['hibernate', 'ENABLE_HIBERNATE'],
865 ['environment-d', 'ENABLE_ENVIRONMENT_D'],
866 ['binfmt', 'ENABLE_BINFMT'],
867 ['coredump', 'ENABLE_COREDUMP'],
868 ['resolve', 'ENABLE_RESOLVED'],
869 ['logind', 'ENABLE_LOGIND'],
870 ['hostnamed', 'ENABLE_HOSTNAMED'],
871 ['localed', 'ENABLE_LOCALED'],
872 ['machined', 'ENABLE_MACHINED'],
873 ['networkd', 'ENABLE_NETWORKD'],
874 ['timedated', 'ENABLE_TIMEDATED'],
875 ['timesyncd', 'ENABLE_TIMESYNCD'],
876 ['myhostname', 'HAVE_MYHOSTNAME'],
877 ['firstboot', 'ENABLE_FIRSTBOOT'],
878 ['randomseed', 'ENABLE_RANDOMSEED'],
879 ['backlight', 'ENABLE_BACKLIGHT'],
880 ['vconsole', 'ENABLE_VCONSOLE'],
881 ['quotacheck', 'ENABLE_QUOTACHECK'],
882 ['sysusers', 'ENABLE_SYSUSERS'],
883 ['tmpfiles', 'ENABLE_TMPFILES'],
884 ['hwdb', 'ENABLE_HWDB'],
885 ['rfkill', 'ENABLE_RFKILL'],
886 ['ldconfig', 'ENABLE_LDCONFIG'],
887 ]
888
889 if get_option(pair[0])
890 conf.set(pair[1], 1)
891 endif
892endforeach
893
69e96427 894want_tests = get_option('tests')
572baca1 895install_tests = get_option('install-tests')
69e96427
ZJS
896tests = []
897
5c23128d
ZJS
898#####################################################################
899
900if get_option('efi')
901 efi_arch = host_machine.cpu_family() # TODO: check this works at all
902 if efi_arch == 'ia32'
903 EFI_MACHINE_TYPE_NAME = 'ia32'
904 elif efi_arch == 'x86_64'
905 EFI_MACHINE_TYPE_NAME = 'x64'
906 elif efi_arch == 'aarch64'
907 EFI_MACHINE_TYPE_NAME = 'x64'
908 else
909 EFI_MACHINE_TYPE_NAME = efi_arch
910 endif
911
912 conf.set('ENABLE_EFI', 1)
913 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
914endif
915
916#####################################################################
917
918config_h = configure_file(
919 output : 'config.h',
920 configuration : conf)
921
922includes = include_directories('src/basic',
923 'src/shared',
924 'src/systemd',
925 'src/journal',
926 'src/resolve',
927 'src/timesync',
928 'src/login',
929 'src/udev',
930 'src/libudev',
931 'src/core',
932 'src/libsystemd/sd-bus',
933 'src/libsystemd/sd-device',
934 'src/libsystemd/sd-hwdb',
935 'src/libsystemd/sd-id128',
936 'src/libsystemd/sd-netlink',
937 'src/libsystemd/sd-network',
938 'src/libsystemd-network',
939 )
940
941add_project_arguments('-include', 'config.h', language : 'c')
942
943gcrypt_util_sources = files('src/shared/gcrypt-util.h',
944 'src/shared/gcrypt-util.c')
945
946subdir('po')
947subdir('catalog')
948subdir('src/systemd')
949subdir('src/basic')
950subdir('src/libsystemd')
951subdir('src/libsystemd-network')
5c23128d 952subdir('src/journal')
5c23128d 953subdir('src/login')
5c23128d
ZJS
954
955libjournal_core = static_library(
956 'journal-core',
957 libjournal_core_sources,
958 journald_gperf_c,
959 include_directories : includes,
960 link_with : [libbasic,
961 libsystemd_internal,
962 libsystemd_journal_internal],
963 install : false)
964
6b30f280 965version_script_arg = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
5c23128d
ZJS
966libsystemd = shared_library(
967 'systemd',
968 libsystemd_internal_sources,
969 version : '0.18.0',
970 include_directories : includes,
971 link_args : ['-shared',
6b30f280 972 '-Wl,--version-script=' + version_script_arg],
5c23128d
ZJS
973 link_with : [libbasic,
974 libsystemd_internal,
975 libsystemd_journal_internal],
976 dependencies : [threads],
6b30f280 977 link_depends : libsystemd_sym,
5c23128d
ZJS
978 install : true,
979 install_dir : rootlibdir)
980
981############################################################
982
983foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []],
984 ['systemd', '', []],
985 ['mymachines', 'ENABLE_MACHINED', []],
986 ['resolve', 'ENABLE_RESOLVED', [libdl]]]
987
988 condition = tuple[1] == '' or conf.get(tuple[1], 0) == 1
989 if condition
990 module = tuple[0]
991 extra_deps = tuple[2]
992
6b30f280
ZJS
993 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
994 version_script_arg = join_paths(meson.current_source_dir(), sym)
5c23128d
ZJS
995
996 shared_library(
997 'nss_' + module,
998 'src/nss-@0@/nss-@0@.c'.format(module),
999 version : '2',
1000 include_directories : includes,
1001 link_args : ['-shared',
6b30f280 1002 '-Wl,--version-script=' + version_script_arg,
5c23128d
ZJS
1003 '-Wl,--undefined'],
1004 link_with : [libsystemd_internal,
1005 libbasic],
1006 dependencies : [threads,
1007 librt] + extra_deps,
6b30f280 1008 link_depends : sym,
5c23128d
ZJS
1009 install : true,
1010 install_dir : rootlibdir)
1011 endif
1012endforeach
1013
1014############################################################
1015
1016subdir('src/libudev')
1017subdir('src/shared')
1018subdir('src/core')
1019subdir('src/udev')
1020subdir('src/network')
1021
69e96427
ZJS
1022subdir('src/analyze')
1023subdir('src/journal-remote')
1024subdir('src/coredump')
1025subdir('src/hostname')
1026subdir('src/import')
1027subdir('src/kernel-install')
1028subdir('src/locale')
1029subdir('src/machine')
1030subdir('src/nspawn')
1031subdir('src/resolve')
1032subdir('src/timedate')
1033subdir('src/timesync')
1034subdir('src/vconsole')
1035
1036subdir('src/test')
1037
5c23128d
ZJS
1038executable('systemd',
1039 systemd_sources,
1040 include_directories : includes,
1041 link_with : [libcore,
1042 libshared],
1043 dependencies : [threads,
1044 librt,
1045 libseccomp,
1046 libselinux,
1047 libmount],
1048 install : true,
1049 install_dir : rootlibexecdir)
1050
1051executable('systemd-analyze',
1052 systemd_analyze_sources,
1053 include_directories : includes,
1054 link_with : [libcore,
1055 libshared],
1056 dependencies : [threads,
1057 librt,
1058 libseccomp,
1059 libselinux,
1060 libmount],
1061 install : true)
1062
1063executable('systemd-journald',
1064 systemd_journald_sources,
1065 include_directories : includes,
1066 link_with : [libsystemd_journal_internal,
1067 libjournal_core,
1068 libshared,
1069 libudev],
1070 dependencies : [threads,
1071 libxz,
1072 liblz4],
1073 install : true,
1074 install_dir : rootlibexecdir)
1075
1076executable('systemd-cat',
1077 systemd_cat_sources,
1078 include_directories : includes,
1079 link_with : [libjournal_core,
1080 libshared,
1081 libudev],
1082 dependencies : [threads],
1083 install : true)
1084
1085executable('journalctl',
1086 journalctl_sources,
1087 include_directories : includes,
1088 link_with : [libshared,
1089 libudev],
1090 dependencies : [threads,
1091 libqrencode,
1092 libxz,
1093 liblz4],
1094 install : true,
1095 install_dir : rootbindir)
1096
1097executable('systemd-getty-generator',
1098 'src/getty-generator/getty-generator.c',
1099 install : true,
1100 install_dir : systemgeneratordir,
1101 include_directories : includes,
1102 link_with : [libshared])
1103
1104executable('systemd-debug-generator',
1105 'src/debug-generator/debug-generator.c',
1106 install : true,
1107 install_dir : systemgeneratordir,
1108 include_directories : includes,
1109 link_with : [libshared])
1110
1111executable('systemd-fstab-generator',
1112 'src/fstab-generator/fstab-generator.c',
1113 'src/core/mount-setup.c',
1114 install : true,
1115 install_dir : systemgeneratordir,
1116 include_directories : includes,
1117 link_with : [libshared])
1118
1119if conf.get('ENABLE_ENVIRONMENT_D', 0) == 1
1120 executable('30-systemd-environment-d-generator',
1121 'src/environment-d-generator/environment-d-generator.c',
1122 install : true,
1123 install_dir : userenvgeneratordir,
1124 include_directories : includes,
1125 link_with : [libshared])
1126endif
1127
1128if conf.get('ENABLE_HIBERNATE', 0) == 1
1129 executable('systemd-hibernate-resume-generator',
1130 'src/hibernate-resume/hibernate-resume-generator.c',
1131 include_directories : includes,
1132 link_with : [libshared],
1133 install : true,
1134 install_dir : systemgeneratordir)
1135
1136 executable('systemd-hibernate-resume',
1137 'src/hibernate-resume/hibernate-resume.c',
1138 include_directories : includes,
1139 link_with : [libshared],
1140 install : true,
1141 install_dir : rootlibexecdir)
1142endif
1143
1144if conf.get('HAVE_BLKID', 0) == 1
1145 executable('systemd-gpt-auto-generator',
1146 'src/gpt-auto-generator/gpt-auto-generator.c',
1147 'src/basic/blkid-util.h',
1148 install : true,
1149 install_dir : systemgeneratordir,
1150 include_directories : includes,
1151 link_with : libshared,
1152 dependencies : libblkid)
1153
1154 executable('systemd-dissect',
1155 'src/dissect/dissect.c',
1156 include_directories : includes,
1157 link_with : [libshared],
1158 install : true,
1159 install_dir : rootlibexecdir)
1160endif
1161
1162if conf.get('ENABLE_RESOLVED', 0) == 1
1163 executable('systemd-resolved',
1164 systemd_resolved_sources,
1165 include_directories : includes,
1166 link_with : [libshared,
1167 ],
1168 dependencies : [threads,
1169 libm,
1170 libidn],
1171 install : true,
1172 install_dir : rootlibexecdir)
1173
1174 executable('systemd-resolve',
1175 systemd_resolve_sources,
1176 include_directories : includes,
1177 link_with : [libshared,
1178 ],
1179 dependencies : [threads,
1180 libm,
1181 libidn],
1182 install : true)
1183endif
1184
1185if conf.get('ENABLE_LOGIND', 0) == 1
1186 executable('systemd-logind',
1187 systemd_logind_sources,
1188 include_directories : includes,
1189 link_with : [liblogind_core,
1190 libshared],
1191 dependencies : [threads,
1192 libacl],
1193 install : true,
1194 install_dir : rootlibexecdir)
1195
1196 executable('loginctl',
1197 loginctl_sources,
1198 include_directories : includes,
1199 link_with : [libshared],
1200 dependencies : [threads,
1201 liblz4,
1202 libxz],
1203 install : true,
1204 install_dir : rootbindir)
1205
1206 executable('systemd-inhibit',
1207 'src/login/inhibit.c',
1208 include_directories : includes,
1209 link_with : [libshared],
1210 install : true,
1211 install_dir : rootbindir)
1212
1213 if conf.get('HAVE_PAM', 0) == 1
6b30f280 1214 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
5c23128d
ZJS
1215 shared_library(
1216 'pam_systemd',
1217 pam_systemd_c,
1218 name_prefix : '',
1219 include_directories : includes,
1220 link_args : ['-shared',
6b30f280 1221 '-Wl,--version-script=' + version_script_arg],
5c23128d
ZJS
1222 link_with : [libshared],
1223 dependencies : [libpam,
1224 libpam_misc],
6b30f280 1225 link_depends : pam_systemd_sym,
5c23128d
ZJS
1226 install : true,
1227 install_dir : pamlibdir)
1228 endif
1229endif
1230
1231if conf.get('HAVE_PAM', 0) == 1
1232 executable('systemd-user-sessions',
1233 'src/user-sessions/user-sessions.c',
1234 include_directories : includes,
1235 link_with : [libshared],
1236 install : true,
1237 install_dir : rootlibexecdir)
1238endif
1239
1240if conf.get('ENABLE_EFI', 0) == 1
1241 executable('bootctl',
1242 'src/boot/bootctl.c',
1243 include_directories : includes,
1244 link_with : [libshared],
1245 dependencies : [libblkid],
1246 install : true)
1247endif
1248
1249executable('systemd-socket-activate', 'src/activate/activate.c',
1250 include_directories : includes,
1251 link_with : [libshared],
1252 dependencies : [threads],
1253 install : true)
1254
1255executable('systemctl', 'src/systemctl/systemctl.c',
1256 include_directories : includes,
1257 link_with : [libshared],
1258 dependencies : [threads,
1259 libcap,
1260 libselinux,
1261 libxz,
1262 liblz4],
1263 install : true,
1264 install_dir : rootbindir)
1265
1266if conf.get('ENABLE_BACKLIGHT', 0) == 1
1267 executable('systemd-backlight',
1268 'src/backlight/backlight.c',
1269 include_directories : includes,
1270 link_with : [libshared],
1271 install : true,
1272 install_dir : rootlibexecdir)
1273endif
1274
1275if conf.get('ENABLE_RFKILL', 0) == 1
1276 executable('systemd-rfkill',
1277 'src/rfkill/rfkill.c',
1278 include_directories : includes,
1279 link_with : [libshared],
1280 install : true,
1281 install_dir : rootlibexecdir)
1282endif
1283
1284executable('systemd-system-update-generator',
1285 'src/system-update-generator/system-update-generator.c',
1286 include_directories : includes,
1287 link_with : [libshared],
1288 install : true,
1289 install_dir : systemgeneratordir)
1290
1291if conf.get('HAVE_LIBCRYPTSETUP', 0) == 1
1292 executable('systemd-cryptsetup',
1293 'src/cryptsetup/cryptsetup.c',
1294 include_directories : includes,
1295 link_with : [libshared],
1296 dependencies : [libcryptsetup],
1297 install : true,
1298 install_dir : rootlibexecdir)
1299
1300 executable('systemd-cryptsetup-generator',
1301 'src/cryptsetup/cryptsetup-generator.c',
1302 include_directories : includes,
1303 link_with : [libshared],
1304 dependencies : [libcryptsetup],
1305 install : true,
1306 install_dir : systemgeneratordir)
1307
1308 executable('systemd-veritysetup',
1309 'src/veritysetup/veritysetup.c',
1310 include_directories : includes,
1311 link_with : [libshared],
1312 dependencies : [libcryptsetup],
1313 install : true,
1314 install_dir : rootlibexecdir)
1315
1316 executable('systemd-veritysetup-generator',
1317 'src/veritysetup/veritysetup-generator.c',
1318 include_directories : includes,
1319 link_with : [libshared],
1320 dependencies : [libcryptsetup],
1321 install : true,
1322 install_dir : systemgeneratordir)
1323endif
1324
1325if conf.get('HAVE_SYSV_COMPAT', 0) == 1
1326 executable('systemd-sysv-generator',
1327 'src/sysv-generator/sysv-generator.c',
1328 include_directories : includes,
1329 link_with : [libshared],
1330 install : true,
1331 install_dir : systemgeneratordir)
1332
1333 executable('systemd-rc-local-generator',
1334 'src/rc-local-generator/rc-local-generator.c',
1335 include_directories : includes,
1336 link_with : [libshared],
1337 install : true,
1338 install_dir : systemgeneratordir)
1339endif
1340
1341if conf.get('ENABLE_HOSTNAMED', 0) == 1
1342 executable('systemd-hostnamed',
1343 'src/hostname/hostnamed.c',
1344 include_directories : includes,
1345 link_with : [libshared],
1346 install : true,
1347 install_dir : rootlibexecdir)
1348
1349 executable('hostnamectl',
1350 'src/hostname/hostnamectl.c',
1351 include_directories : includes,
1352 link_with : [libshared],
1353 install : true)
1354endif
1355
1356if conf.get('ENABLE_LOCALED', 0) == 1
1357 executable('systemd-localed',
1358 systemd_localed_sources,
1359 include_directories : includes,
1360 link_with : [libshared],
1361 dependencies : [libdl],
1362 install : true,
1363 install_dir : rootlibexecdir)
1364
1365 executable('localectl',
1366 localectl_sources,
1367 include_directories : includes,
1368 link_with : [libshared],
1369 install : true)
1370endif
1371
1372if conf.get('ENABLE_TIMEDATED', 0) == 1
1373 executable('systemd-timedated',
1374 'src/timedate/timedated.c',
1375 include_directories : includes,
1376 link_with : [libshared],
1377 install : true,
1378 install_dir : rootlibexecdir)
1379
1380 executable('timedatectl',
1381 'src/timedate/timedatectl.c',
1382 include_directories : includes,
1383 link_with : [libshared],
1384 install : true)
1385endif
1386
1387if conf.get('ENABLE_TIMESYNCD', 0) == 1
1388 executable('systemd-timesyncd',
1389 systemd_timesyncd_sources,
1390 include_directories : includes,
1391 link_with : [libshared],
1392 dependencies : [threads,
1393 libm],
1394 install : true,
1395 install_dir : rootlibexecdir)
1396endif
1397
1398if conf.get('ENABLE_MACHINED', 0) == 1
1399 executable('systemd-machined',
1400 systemd_machined_sources,
1401 include_directories : includes,
1402 link_with : [libmachine_core,
1403 libshared],
1404 install : true,
1405 install_dir : rootlibexecdir)
1406
1407 executable('machinectl',
1408 'src/machine/machinectl.c',
1409 include_directories : includes,
1410 link_with : [libshared],
1411 dependencies : [threads,
1412 libxz,
1413 liblz4],
1414 install : true,
1415 install_dir : rootbindir)
1416endif
1417
1418if conf.get('ENABLE_IMPORTD', 0) == 1
1419 executable('systemd-importd',
1420 systemd_importd_sources,
1421 include_directories : includes,
1422 link_with : [libshared],
1423 install : true,
1424 install_dir : rootlibexecdir)
1425
1426 executable('systemd-pull',
1427 systemd_pull_sources,
1428 include_directories : includes,
1429 link_with : [libshared],
1430 dependencies : [libcurl,
1431 libz,
1432 libbzip2,
1433 libxz,
1434 libgcrypt],
1435 install : true,
1436 install_dir : rootlibexecdir)
1437
1438 executable('systemd-import',
1439 systemd_import_sources,
1440 include_directories : includes,
1441 link_with : [libshared],
1442 dependencies : [libcurl,
1443 libz,
1444 libbzip2,
1445 libxz],
1446 install : true,
1447 install_dir : rootlibexecdir)
1448
1449 executable('systemd-export',
1450 systemd_export_sources,
1451 include_directories : includes,
1452 link_with : [libshared],
1453 dependencies : [libcurl,
1454 libz,
1455 libbzip2,
1456 libxz],
1457 install : true,
1458 install_dir : rootlibexecdir)
1459endif
1460
1461if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_LIBCURL', 0) == 1
1462 executable('systemd-journal-upload',
1463 systemd_journal_upload_sources,
1464 include_directories : includes,
1465 link_with : [libshared],
1466 dependencies : [threads,
1467 libcurl,
1468 libgnutls,
1469 libxz,
1470 liblz4],
1471 install : true,
1472 install_dir : rootlibexecdir)
1473endif
1474
1475if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
1476 executable('systemd-journal-remote',
1477 systemd_journal_remote_sources,
1478 include_directories : includes,
1479 link_with : [libshared],
1480 dependencies : [threads,
1481 libmicrohttpd,
1482 libgnutls,
1483 libxz,
1484 liblz4],
1485 install : true,
1486 install_dir : rootlibexecdir)
1487
1488 executable('systemd-journal-gatewayd',
1489 systemd_journal_gatewayd_sources,
1490 include_directories : includes,
1491 link_with : [libshared],
1492 dependencies : [threads,
1493 libmicrohttpd,
1494 libgnutls,
1495 libxz,
1496 liblz4],
1497 install : true,
1498 install_dir : rootlibexecdir)
1499endif
1500
1501if conf.get('ENABLE_COREDUMP', 0) == 1
1502 executable('systemd-coredump',
1503 systemd_coredump_sources,
1504 include_directories : includes,
1505 link_with : [libshared],
1506 dependencies : [threads,
1507 libacl,
1508 libdw,
1509 libxz,
1510 liblz4],
1511 install : true,
1512 install_dir : rootlibexecdir)
1513
1514 executable('coredumpctl',
1515 coredumpctl_sources,
1516 include_directories : includes,
1517 link_with : [libshared],
1518 dependencies : [threads,
1519 libxz,
1520 liblz4],
1521 install : true)
1522endif
1523
1524if conf.get('ENABLE_BINFMT', 0) == 1
1525 executable('systemd-binfmt',
1526 'src/binfmt/binfmt.c',
1527 include_directories : includes,
1528 link_with : [libshared],
1529 install : true,
1530 install_dir : rootlibexecdir)
1531endif
1532
1533if conf.get('ENABLE_VCONSOLE', 0) == 1
1534 executable('systemd-vconsole-setup',
1535 'src/vconsole/vconsole-setup.c',
1536 include_directories : includes,
1537 link_with : [libshared],
1538 install : true,
1539 install_dir : rootlibexecdir)
1540endif
1541
1542if conf.get('ENABLE_RANDOMSEED', 0) == 1
1543 executable('systemd-random-seed',
1544 'src/random-seed/random-seed.c',
1545 include_directories : includes,
1546 link_with : [libshared],
1547 install : true,
1548 install_dir : rootlibexecdir)
1549endif
1550
1551if conf.get('ENABLE_FIRSTBOOT', 0) == 1
1552 executable('systemd-firstboot',
1553 'src/firstboot/firstboot.c',
1554 include_directories : includes,
1555 link_with : [libshared],
1556 dependencies : [libcrypt],
1557 install : true,
1558 install_dir : rootbindir)
1559endif
1560
1561executable('systemd-remount-fs',
1562 'src/remount-fs/remount-fs.c',
1563 'src/core/mount-setup.c',
1564 'src/core/mount-setup.h',
1565 include_directories : includes,
1566 link_with : [libshared],
1567 install : true,
1568 install_dir : rootlibexecdir)
1569
1570executable('systemd-machine-id-setup',
1571 'src/machine-id-setup/machine-id-setup-main.c',
1572 'src/core/machine-id-setup.c',
1573 'src/core/machine-id-setup.h',
1574 include_directories : includes,
1575 link_with : [libshared],
1576 install : true,
1577 install_dir : rootbindir)
1578
1579executable('systemd-fsck',
1580 'src/fsck/fsck.c',
1581 include_directories : includes,
1582 link_with : [libshared],
1583 install : true,
1584 install_dir : rootlibexecdir)
1585
1586executable('systemd-sleep',
1587 'src/sleep/sleep.c',
1588 include_directories : includes,
1589 link_with : [libshared],
1590 install : true,
1591 install_dir : rootlibexecdir)
1592
1593executable('systemd-sysctl',
1594 'src/sysctl/sysctl.c',
1595 include_directories : includes,
1596 link_with : [libshared],
1597 install : true,
1598 install_dir : rootlibexecdir)
1599
1600executable('systemd-ac-power',
1601 'src/ac-power/ac-power.c',
1602 include_directories : includes,
1603 link_with : [libshared],
1604 install : true,
1605 install_dir : rootlibexecdir)
1606
1607executable('systemd-detect-virt',
1608 'src/detect-virt/detect-virt.c',
1609 include_directories : includes,
1610 link_with : [libshared],
1611 install : true)
1612
1613executable('systemd-delta',
1614 'src/delta/delta.c',
1615 include_directories : includes,
1616 link_with : [libshared],
1617 install : true)
1618
1619executable('systemd-escape',
1620 'src/escape/escape.c',
1621 include_directories : includes,
1622 link_with : [libshared],
1623 install : true,
1624 install_dir : rootbindir)
1625
1626executable('systemd-notify',
1627 'src/notify/notify.c',
1628 include_directories : includes,
1629 link_with : [libshared],
1630 install : true,
1631 install_dir : rootbindir)
1632
1633executable('systemd-volatile-root',
1634 'src/volatile-root/volatile-root.c',
1635 include_directories : includes,
1636 link_with : [libshared],
1637 install : true,
1638 install_dir : rootlibexecdir)
1639
1640executable('systemd-cgroups-agent',
1641 'src/cgroups-agent/cgroups-agent.c',
1642 include_directories : includes,
1643 link_with : [libshared],
1644 install : true,
1645 install_dir : rootlibexecdir)
1646
1647executable('systemd-path',
1648 'src/path/path.c',
1649 include_directories : includes,
1650 link_with : [libshared],
1651 install : true)
1652
1653executable('systemd-ask-password',
1654 'src/ask-password/ask-password.c',
1655 include_directories : includes,
1656 link_with : [libshared],
1657 install : true,
1658 install_dir : rootbindir)
1659
1660executable('systemd-reply-password',
1661 'src/reply-password/reply-password.c',
1662 include_directories : includes,
1663 link_with : [libshared],
1664 install : true,
1665 install_dir : rootlibexecdir)
1666
1667executable('systemd-tty-ask-password-agent',
1668 'src/tty-ask-password-agent/tty-ask-password-agent.c',
1669 include_directories : includes,
1670 link_with : [libshared],
1671 install : true,
1672 install_dir : rootbindir)
1673
1674executable('systemd-cgls',
1675 'src/cgls/cgls.c',
1676 include_directories : includes,
1677 link_with : [libshared],
1678 install : true)
1679
1680executable('systemd-cgtop',
1681 'src/cgtop/cgtop.c',
1682 include_directories : includes,
1683 link_with : [libshared],
1684 install : true)
1685
1686executable('systemd-initctl',
1687 'src/initctl/initctl.c',
1688 include_directories : includes,
1689 link_with : [libshared],
1690 install : true,
1691 install_dir : rootlibexecdir)
1692
1693executable('systemd-mount',
1694 'src/mount/mount-tool.c',
1695 include_directories : includes,
1696 link_with : [libshared],
1697 install : true)
1698
1699executable('systemd-run',
1700 'src/run/run.c',
1701 include_directories : includes,
1702 link_with : [libshared],
1703 install : true)
1704
1705executable('systemd-stdio-bridge',
1706 'src/stdio-bridge/stdio-bridge.c',
1707 include_directories : includes,
1708 link_with : [libshared],
1709 install : true)
1710
1711executable('busctl',
1712 'src/busctl/busctl.c',
1713 'src/busctl/busctl-introspect.c',
1714 'src/busctl/busctl-introspect.h',
1715 include_directories : includes,
1716 link_with : [libshared],
1717 install : true)
1718
1719if conf.get('ENABLE_SYSUSERS', 0) == 1
1720 executable('systemd-sysusers',
1721 'src/sysusers/sysusers.c',
1722 include_directories : includes,
1723 link_with : [libshared],
1724 install : true,
1725 install_dir : rootbindir)
1726endif
1727
1728if conf.get('ENABLE_TMPFILES', 0) == 1
1729 executable('systemd-tmpfiles',
1730 'src/tmpfiles/tmpfiles.c',
1731 include_directories : includes,
1732 link_with : [libshared],
1733 dependencies : [libacl],
1734 install : true,
1735 install_dir : rootbindir)
1736endif
1737
1738if conf.get('ENABLE_HWDB', 0) == 1
1739 executable('systemd-hwdb',
1740 'src/hwdb/hwdb.c',
1741 'src/libsystemd/sd-hwdb/hwdb-internal.h',
1742 include_directories : includes,
1743 link_with : [libshared],
1744 install : true,
1745 install_dir : rootbindir)
1746endif
1747
1748if conf.get('ENABLE_QUOTACHECK', 0) == 1
1749 executable('systemd-quotacheck',
1750 'src/quotacheck/quotacheck.c',
1751 include_directories : includes,
1752 link_with : [libshared],
1753 install : true,
1754 install_dir : rootlibexecdir)
1755endif
1756
1757executable('systemd-socket-proxyd',
1758 'src/socket-proxy/socket-proxyd.c',
1759 include_directories : includes,
1760 link_with : [libshared,
1761 libsystemd],
1762 dependencies : [threads],
1763 install : true,
1764 install_dir : rootlibexecdir)
1765
1766executable('systemd-udevd',
1767 systemd_udevd_sources,
1768 include_directories : includes,
1769 link_with : [libudev_core,
1770 libudev_internal,
1771 libsystemd_network,
1772 libshared],
1773 dependencies : [libkmod,
1774 libidn,
1775 libacl],
1776 install : true,
1777 install_dir : rootlibexecdir)
1778
1779executable('udevadm',
1780 udevadm_sources,
1781 include_directories : includes,
1782 link_with : [libudev_core,
1783 libudev_internal,
1784 libsystemd_network,
1785 libshared],
1786 dependencies : [libkmod,
1787 libidn,
1788 libacl],
1789 install : true,
1790 install_dir : rootbindir)
1791
1792executable('systemd-shutdown',
1793 systemd_shutdown_sources,
1794 include_directories : includes,
1795 link_with : [libshared],
1796 install : true,
1797 install_dir : rootlibexecdir)
1798
1799executable('systemd-update-done',
1800 'src/update-done/update-done.c',
1801 include_directories : includes,
1802 link_with : [libshared],
1803 install : true,
1804 install_dir : rootlibexecdir)
1805
1806executable('systemd-update-utmp',
1807 'src/update-utmp/update-utmp.c',
1808 include_directories : includes,
1809 link_with : [libshared],
1810 dependencies : [libaudit],
1811 install : true,
1812 install_dir : rootlibexecdir)
1813
1814if conf.get('HAVE_KMOD', 0) == 1
1815 executable('systemd-modules-load',
1816 'src/modules-load/modules-load.c',
1817 include_directories : includes,
1818 link_with : [libshared],
1819 dependencies : [libkmod],
1820 install : true,
1821 install_dir : rootlibexecdir)
1822endif
1823
1824executable('systemd-nspawn',
1825 systemd_nspawn_sources,
1826 'src/core/mount-setup.c', # FIXME: use a variable?
1827 'src/core/mount-setup.h',
1828 'src/core/loopback-setup.c',
1829 'src/core/loopback-setup.h',
1830 include_directories : [includes, include_directories('src/nspawn')],
1831 link_with : [libfirewall,
1832 libshared],
1833 dependencies : [libacl,
1834 libblkid,
1835 libseccomp,
1836 libselinux],
1837 install : true)
1838
1839executable('systemd-networkd',
1840 systemd_networkd_sources,
1841 include_directories : includes,
1842 link_with : [libnetworkd_core,
1843 libfirewall,
1844 libsystemd_network,
1845 libudev_internal,
1846 libshared],
1847 install : true,
1848 install_dir : rootlibexecdir)
1849
1850executable('systemd-networkd-wait-online',
1851 systemd_networkd_wait_online_sources,
1852 include_directories : includes,
1853 link_with : [libnetworkd_core,
1854 libshared],
1855 install : true,
1856 install_dir : rootlibexecdir)
1857
1858executable('networkctl',
1859 networkctl_sources,
1860 include_directories : includes,
1861 link_with : [libsystemd_network,
1862 libshared],
1863 install : true,
1864 install_dir : rootbindir)
1865
69e96427
ZJS
1866############################################################
1867
1868foreach tuple : tests
1869 sources = tuple[0]
1870 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
1871 dependencies = tuple[2]
1872 condition = tuple.length() >= 4 ? tuple[3] : ''
1873 type = tuple.length() >= 5 ? tuple[4] : ''
1874 defs = tuple.length() >= 6 ? tuple[5] : []
1875 incs = tuple.length() >= 7 ? tuple[6] : includes
1876
1877 name = sources[0].split('/')[-1].split('.')[0]
1878
1879 if condition == '' or conf.get(condition, 0) == 1
572baca1
ZJS
1880 install = install_tests and type == ''
1881
69e96427
ZJS
1882 exe = executable(
1883 name,
1884 sources,
1885 include_directories : incs,
1886 link_with : link_with,
1887 dependencies : dependencies,
572baca1
ZJS
1888 c_args : defs,
1889 install : install,
1890 install_dir : testsdir)
1891
69e96427
ZJS
1892 if type == 'manual'
1893 message('@0@ is a manual test'.format(name))
1894 elif type == 'unsafe' and want_tests != 'unsafe'
1895 message('@0@ is an unsafe test'.format(name))
1896 else
1897 test(name, exe, env : test_env)
1898 endif
1899 else
1900 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
1901 endif
1902endforeach
1903
1904############################################################
5c23128d
ZJS
1905
1906make_directive_index_py = find_program('tools/make-directive-index.py')
1907make_man_index_py = find_program('tools/make-man-index.py')
1908
1909subdir('units')
1910subdir('sysctl.d')
1911subdir('sysusers.d')
1912subdir('tmpfiles.d')
1913subdir('rules')
1914subdir('hwdb')
1915subdir('network')
1916subdir('man')
1917subdir('shell-completion/bash')
1918subdir('shell-completion/zsh')
1919subdir('docs/sysvinit')
1920subdir('docs/var-log')
1921
1922# FIXME: figure out if the warning is true:
1923# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
1924install_subdir('factory/etc',
1925 install_dir : factorydir)
1926
1927
1928install_data('xorg/50-systemd-user.sh',
1929 install_dir : xinitrcdir)
1930install_data('system-preset/90-systemd.preset',
1931 install_dir : systempresetdir)
1932install_data('README',
1933 'NEWS',
1934 'CODING_STYLE',
1935 'DISTRO_PORTING',
1936 'ENVIRONMENT.md',
1937 'LICENSE.GPL2',
1938 'LICENSE.LGPL2.1',
1939 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
1940 install_dir : docdir)
d68b342b
ZJS
1941
1942############################################################
1943
1944if git.found() and etags.found()
1945 all_files = run_command(
1946 git,
1947 ['--git-dir=@0@/.git'.format(meson.source_root()),
1948 'ls-files',
1949 ':/*.[ch]'])
1950 all_files = files(all_files.stdout().split())
1951
1952 custom_target(
1953 'TAGS',
1954 output : 'TAGS',
1955 input : all_files,
1956 command : [etags, '-o', '@OUTPUT@'] + all_files)
1957endif