blob: fc03f68d10805b22581603dc9e5c2cb9bb7fc24d [file] [log] [blame]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001# -*- 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')
Zbigniew Jędrzejewski-Szmek78b68dc2017-04-05 00:40:21 -0400383m4 = find_program('/usr/bin/m4')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400384stat = find_program('stat')
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -0400385git = find_program('git', required : false)
386etags = find_program('etags', required : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400387
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
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -0400792want_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
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400823want_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
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -0400894want_tests = get_option('tests')
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -0400895install_tests = get_option('install-tests')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -0400896tests = []
897
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400898#####################################################################
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')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400952subdir('src/journal')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400953subdir('src/login')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400954
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
965libsystemd = shared_library(
966 'systemd',
967 libsystemd_internal_sources,
968 version : '0.18.0',
969 include_directories : includes,
970 link_args : ['-shared',
971 '-Wl,--version-script=' + libsystemd_sym],
972 link_with : [libbasic,
973 libsystemd_internal,
974 libsystemd_journal_internal],
975 dependencies : [threads],
976 install : true,
977 install_dir : rootlibdir)
978
979############################################################
980
981foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []],
982 ['systemd', '', []],
983 ['mymachines', 'ENABLE_MACHINED', []],
984 ['resolve', 'ENABLE_RESOLVED', [libdl]]]
985
986 condition = tuple[1] == '' or conf.get(tuple[1], 0) == 1
987 if condition
988 module = tuple[0]
989 extra_deps = tuple[2]
990
991 sym = meson.current_source_dir() + '/src/nss-@0@/nss-@0@.sym'.format(module)
992
993 shared_library(
994 'nss_' + module,
995 'src/nss-@0@/nss-@0@.c'.format(module),
996 version : '2',
997 include_directories : includes,
998 link_args : ['-shared',
999 '-Wl,--version-script=' + sym,
1000 '-Wl,--undefined'],
1001 link_with : [libsystemd_internal,
1002 libbasic],
1003 dependencies : [threads,
1004 librt] + extra_deps,
1005 install : true,
1006 install_dir : rootlibdir)
1007 endif
1008endforeach
1009
1010############################################################
1011
1012subdir('src/libudev')
1013subdir('src/shared')
1014subdir('src/core')
1015subdir('src/udev')
1016subdir('src/network')
1017
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001018subdir('src/analyze')
1019subdir('src/journal-remote')
1020subdir('src/coredump')
1021subdir('src/hostname')
1022subdir('src/import')
1023subdir('src/kernel-install')
1024subdir('src/locale')
1025subdir('src/machine')
1026subdir('src/nspawn')
1027subdir('src/resolve')
1028subdir('src/timedate')
1029subdir('src/timesync')
1030subdir('src/vconsole')
1031
1032subdir('src/test')
1033
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001034executable('systemd',
1035 systemd_sources,
1036 include_directories : includes,
1037 link_with : [libcore,
1038 libshared],
1039 dependencies : [threads,
1040 librt,
1041 libseccomp,
1042 libselinux,
1043 libmount],
1044 install : true,
1045 install_dir : rootlibexecdir)
1046
1047executable('systemd-analyze',
1048 systemd_analyze_sources,
1049 include_directories : includes,
1050 link_with : [libcore,
1051 libshared],
1052 dependencies : [threads,
1053 librt,
1054 libseccomp,
1055 libselinux,
1056 libmount],
1057 install : true)
1058
1059executable('systemd-journald',
1060 systemd_journald_sources,
1061 include_directories : includes,
1062 link_with : [libsystemd_journal_internal,
1063 libjournal_core,
1064 libshared,
1065 libudev],
1066 dependencies : [threads,
1067 libxz,
1068 liblz4],
1069 install : true,
1070 install_dir : rootlibexecdir)
1071
1072executable('systemd-cat',
1073 systemd_cat_sources,
1074 include_directories : includes,
1075 link_with : [libjournal_core,
1076 libshared,
1077 libudev],
1078 dependencies : [threads],
1079 install : true)
1080
1081executable('journalctl',
1082 journalctl_sources,
1083 include_directories : includes,
1084 link_with : [libshared,
1085 libudev],
1086 dependencies : [threads,
1087 libqrencode,
1088 libxz,
1089 liblz4],
1090 install : true,
1091 install_dir : rootbindir)
1092
1093executable('systemd-getty-generator',
1094 'src/getty-generator/getty-generator.c',
1095 install : true,
1096 install_dir : systemgeneratordir,
1097 include_directories : includes,
1098 link_with : [libshared])
1099
1100executable('systemd-debug-generator',
1101 'src/debug-generator/debug-generator.c',
1102 install : true,
1103 install_dir : systemgeneratordir,
1104 include_directories : includes,
1105 link_with : [libshared])
1106
1107executable('systemd-fstab-generator',
1108 'src/fstab-generator/fstab-generator.c',
1109 'src/core/mount-setup.c',
1110 install : true,
1111 install_dir : systemgeneratordir,
1112 include_directories : includes,
1113 link_with : [libshared])
1114
1115if conf.get('ENABLE_ENVIRONMENT_D', 0) == 1
1116 executable('30-systemd-environment-d-generator',
1117 'src/environment-d-generator/environment-d-generator.c',
1118 install : true,
1119 install_dir : userenvgeneratordir,
1120 include_directories : includes,
1121 link_with : [libshared])
1122endif
1123
1124if conf.get('ENABLE_HIBERNATE', 0) == 1
1125 executable('systemd-hibernate-resume-generator',
1126 'src/hibernate-resume/hibernate-resume-generator.c',
1127 include_directories : includes,
1128 link_with : [libshared],
1129 install : true,
1130 install_dir : systemgeneratordir)
1131
1132 executable('systemd-hibernate-resume',
1133 'src/hibernate-resume/hibernate-resume.c',
1134 include_directories : includes,
1135 link_with : [libshared],
1136 install : true,
1137 install_dir : rootlibexecdir)
1138endif
1139
1140if conf.get('HAVE_BLKID', 0) == 1
1141 executable('systemd-gpt-auto-generator',
1142 'src/gpt-auto-generator/gpt-auto-generator.c',
1143 'src/basic/blkid-util.h',
1144 install : true,
1145 install_dir : systemgeneratordir,
1146 include_directories : includes,
1147 link_with : libshared,
1148 dependencies : libblkid)
1149
1150 executable('systemd-dissect',
1151 'src/dissect/dissect.c',
1152 include_directories : includes,
1153 link_with : [libshared],
1154 install : true,
1155 install_dir : rootlibexecdir)
1156endif
1157
1158if conf.get('ENABLE_RESOLVED', 0) == 1
1159 executable('systemd-resolved',
1160 systemd_resolved_sources,
1161 include_directories : includes,
1162 link_with : [libshared,
1163 ],
1164 dependencies : [threads,
1165 libm,
1166 libidn],
1167 install : true,
1168 install_dir : rootlibexecdir)
1169
1170 executable('systemd-resolve',
1171 systemd_resolve_sources,
1172 include_directories : includes,
1173 link_with : [libshared,
1174 ],
1175 dependencies : [threads,
1176 libm,
1177 libidn],
1178 install : true)
1179endif
1180
1181if conf.get('ENABLE_LOGIND', 0) == 1
1182 executable('systemd-logind',
1183 systemd_logind_sources,
1184 include_directories : includes,
1185 link_with : [liblogind_core,
1186 libshared],
1187 dependencies : [threads,
1188 libacl],
1189 install : true,
1190 install_dir : rootlibexecdir)
1191
1192 executable('loginctl',
1193 loginctl_sources,
1194 include_directories : includes,
1195 link_with : [libshared],
1196 dependencies : [threads,
1197 liblz4,
1198 libxz],
1199 install : true,
1200 install_dir : rootbindir)
1201
1202 executable('systemd-inhibit',
1203 'src/login/inhibit.c',
1204 include_directories : includes,
1205 link_with : [libshared],
1206 install : true,
1207 install_dir : rootbindir)
1208
1209 if conf.get('HAVE_PAM', 0) == 1
1210 shared_library(
1211 'pam_systemd',
1212 pam_systemd_c,
1213 name_prefix : '',
1214 include_directories : includes,
1215 link_args : ['-shared',
1216 '-Wl,--version-script=' + pam_systemd_sym],
1217 link_with : [libshared],
1218 dependencies : [libpam,
1219 libpam_misc],
1220 install : true,
1221 install_dir : pamlibdir)
1222 endif
1223endif
1224
1225if conf.get('HAVE_PAM', 0) == 1
1226 executable('systemd-user-sessions',
1227 'src/user-sessions/user-sessions.c',
1228 include_directories : includes,
1229 link_with : [libshared],
1230 install : true,
1231 install_dir : rootlibexecdir)
1232endif
1233
1234if conf.get('ENABLE_EFI', 0) == 1
1235 executable('bootctl',
1236 'src/boot/bootctl.c',
1237 include_directories : includes,
1238 link_with : [libshared],
1239 dependencies : [libblkid],
1240 install : true)
1241endif
1242
1243executable('systemd-socket-activate', 'src/activate/activate.c',
1244 include_directories : includes,
1245 link_with : [libshared],
1246 dependencies : [threads],
1247 install : true)
1248
1249executable('systemctl', 'src/systemctl/systemctl.c',
1250 include_directories : includes,
1251 link_with : [libshared],
1252 dependencies : [threads,
1253 libcap,
1254 libselinux,
1255 libxz,
1256 liblz4],
1257 install : true,
1258 install_dir : rootbindir)
1259
1260if conf.get('ENABLE_BACKLIGHT', 0) == 1
1261 executable('systemd-backlight',
1262 'src/backlight/backlight.c',
1263 include_directories : includes,
1264 link_with : [libshared],
1265 install : true,
1266 install_dir : rootlibexecdir)
1267endif
1268
1269if conf.get('ENABLE_RFKILL', 0) == 1
1270 executable('systemd-rfkill',
1271 'src/rfkill/rfkill.c',
1272 include_directories : includes,
1273 link_with : [libshared],
1274 install : true,
1275 install_dir : rootlibexecdir)
1276endif
1277
1278executable('systemd-system-update-generator',
1279 'src/system-update-generator/system-update-generator.c',
1280 include_directories : includes,
1281 link_with : [libshared],
1282 install : true,
1283 install_dir : systemgeneratordir)
1284
1285if conf.get('HAVE_LIBCRYPTSETUP', 0) == 1
1286 executable('systemd-cryptsetup',
1287 'src/cryptsetup/cryptsetup.c',
1288 include_directories : includes,
1289 link_with : [libshared],
1290 dependencies : [libcryptsetup],
1291 install : true,
1292 install_dir : rootlibexecdir)
1293
1294 executable('systemd-cryptsetup-generator',
1295 'src/cryptsetup/cryptsetup-generator.c',
1296 include_directories : includes,
1297 link_with : [libshared],
1298 dependencies : [libcryptsetup],
1299 install : true,
1300 install_dir : systemgeneratordir)
1301
1302 executable('systemd-veritysetup',
1303 'src/veritysetup/veritysetup.c',
1304 include_directories : includes,
1305 link_with : [libshared],
1306 dependencies : [libcryptsetup],
1307 install : true,
1308 install_dir : rootlibexecdir)
1309
1310 executable('systemd-veritysetup-generator',
1311 'src/veritysetup/veritysetup-generator.c',
1312 include_directories : includes,
1313 link_with : [libshared],
1314 dependencies : [libcryptsetup],
1315 install : true,
1316 install_dir : systemgeneratordir)
1317endif
1318
1319if conf.get('HAVE_SYSV_COMPAT', 0) == 1
1320 executable('systemd-sysv-generator',
1321 'src/sysv-generator/sysv-generator.c',
1322 include_directories : includes,
1323 link_with : [libshared],
1324 install : true,
1325 install_dir : systemgeneratordir)
1326
1327 executable('systemd-rc-local-generator',
1328 'src/rc-local-generator/rc-local-generator.c',
1329 include_directories : includes,
1330 link_with : [libshared],
1331 install : true,
1332 install_dir : systemgeneratordir)
1333endif
1334
1335if conf.get('ENABLE_HOSTNAMED', 0) == 1
1336 executable('systemd-hostnamed',
1337 'src/hostname/hostnamed.c',
1338 include_directories : includes,
1339 link_with : [libshared],
1340 install : true,
1341 install_dir : rootlibexecdir)
1342
1343 executable('hostnamectl',
1344 'src/hostname/hostnamectl.c',
1345 include_directories : includes,
1346 link_with : [libshared],
1347 install : true)
1348endif
1349
1350if conf.get('ENABLE_LOCALED', 0) == 1
1351 executable('systemd-localed',
1352 systemd_localed_sources,
1353 include_directories : includes,
1354 link_with : [libshared],
1355 dependencies : [libdl],
1356 install : true,
1357 install_dir : rootlibexecdir)
1358
1359 executable('localectl',
1360 localectl_sources,
1361 include_directories : includes,
1362 link_with : [libshared],
1363 install : true)
1364endif
1365
1366if conf.get('ENABLE_TIMEDATED', 0) == 1
1367 executable('systemd-timedated',
1368 'src/timedate/timedated.c',
1369 include_directories : includes,
1370 link_with : [libshared],
1371 install : true,
1372 install_dir : rootlibexecdir)
1373
1374 executable('timedatectl',
1375 'src/timedate/timedatectl.c',
1376 include_directories : includes,
1377 link_with : [libshared],
1378 install : true)
1379endif
1380
1381if conf.get('ENABLE_TIMESYNCD', 0) == 1
1382 executable('systemd-timesyncd',
1383 systemd_timesyncd_sources,
1384 include_directories : includes,
1385 link_with : [libshared],
1386 dependencies : [threads,
1387 libm],
1388 install : true,
1389 install_dir : rootlibexecdir)
1390endif
1391
1392if conf.get('ENABLE_MACHINED', 0) == 1
1393 executable('systemd-machined',
1394 systemd_machined_sources,
1395 include_directories : includes,
1396 link_with : [libmachine_core,
1397 libshared],
1398 install : true,
1399 install_dir : rootlibexecdir)
1400
1401 executable('machinectl',
1402 'src/machine/machinectl.c',
1403 include_directories : includes,
1404 link_with : [libshared],
1405 dependencies : [threads,
1406 libxz,
1407 liblz4],
1408 install : true,
1409 install_dir : rootbindir)
1410endif
1411
1412if conf.get('ENABLE_IMPORTD', 0) == 1
1413 executable('systemd-importd',
1414 systemd_importd_sources,
1415 include_directories : includes,
1416 link_with : [libshared],
1417 install : true,
1418 install_dir : rootlibexecdir)
1419
1420 executable('systemd-pull',
1421 systemd_pull_sources,
1422 include_directories : includes,
1423 link_with : [libshared],
1424 dependencies : [libcurl,
1425 libz,
1426 libbzip2,
1427 libxz,
1428 libgcrypt],
1429 install : true,
1430 install_dir : rootlibexecdir)
1431
1432 executable('systemd-import',
1433 systemd_import_sources,
1434 include_directories : includes,
1435 link_with : [libshared],
1436 dependencies : [libcurl,
1437 libz,
1438 libbzip2,
1439 libxz],
1440 install : true,
1441 install_dir : rootlibexecdir)
1442
1443 executable('systemd-export',
1444 systemd_export_sources,
1445 include_directories : includes,
1446 link_with : [libshared],
1447 dependencies : [libcurl,
1448 libz,
1449 libbzip2,
1450 libxz],
1451 install : true,
1452 install_dir : rootlibexecdir)
1453endif
1454
1455if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_LIBCURL', 0) == 1
1456 executable('systemd-journal-upload',
1457 systemd_journal_upload_sources,
1458 include_directories : includes,
1459 link_with : [libshared],
1460 dependencies : [threads,
1461 libcurl,
1462 libgnutls,
1463 libxz,
1464 liblz4],
1465 install : true,
1466 install_dir : rootlibexecdir)
1467endif
1468
1469if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
1470 executable('systemd-journal-remote',
1471 systemd_journal_remote_sources,
1472 include_directories : includes,
1473 link_with : [libshared],
1474 dependencies : [threads,
1475 libmicrohttpd,
1476 libgnutls,
1477 libxz,
1478 liblz4],
1479 install : true,
1480 install_dir : rootlibexecdir)
1481
1482 executable('systemd-journal-gatewayd',
1483 systemd_journal_gatewayd_sources,
1484 include_directories : includes,
1485 link_with : [libshared],
1486 dependencies : [threads,
1487 libmicrohttpd,
1488 libgnutls,
1489 libxz,
1490 liblz4],
1491 install : true,
1492 install_dir : rootlibexecdir)
1493endif
1494
1495if conf.get('ENABLE_COREDUMP', 0) == 1
1496 executable('systemd-coredump',
1497 systemd_coredump_sources,
1498 include_directories : includes,
1499 link_with : [libshared],
1500 dependencies : [threads,
1501 libacl,
1502 libdw,
1503 libxz,
1504 liblz4],
1505 install : true,
1506 install_dir : rootlibexecdir)
1507
1508 executable('coredumpctl',
1509 coredumpctl_sources,
1510 include_directories : includes,
1511 link_with : [libshared],
1512 dependencies : [threads,
1513 libxz,
1514 liblz4],
1515 install : true)
1516endif
1517
1518if conf.get('ENABLE_BINFMT', 0) == 1
1519 executable('systemd-binfmt',
1520 'src/binfmt/binfmt.c',
1521 include_directories : includes,
1522 link_with : [libshared],
1523 install : true,
1524 install_dir : rootlibexecdir)
1525endif
1526
1527if conf.get('ENABLE_VCONSOLE', 0) == 1
1528 executable('systemd-vconsole-setup',
1529 'src/vconsole/vconsole-setup.c',
1530 include_directories : includes,
1531 link_with : [libshared],
1532 install : true,
1533 install_dir : rootlibexecdir)
1534endif
1535
1536if conf.get('ENABLE_RANDOMSEED', 0) == 1
1537 executable('systemd-random-seed',
1538 'src/random-seed/random-seed.c',
1539 include_directories : includes,
1540 link_with : [libshared],
1541 install : true,
1542 install_dir : rootlibexecdir)
1543endif
1544
1545if conf.get('ENABLE_FIRSTBOOT', 0) == 1
1546 executable('systemd-firstboot',
1547 'src/firstboot/firstboot.c',
1548 include_directories : includes,
1549 link_with : [libshared],
1550 dependencies : [libcrypt],
1551 install : true,
1552 install_dir : rootbindir)
1553endif
1554
1555executable('systemd-remount-fs',
1556 'src/remount-fs/remount-fs.c',
1557 'src/core/mount-setup.c',
1558 'src/core/mount-setup.h',
1559 include_directories : includes,
1560 link_with : [libshared],
1561 install : true,
1562 install_dir : rootlibexecdir)
1563
1564executable('systemd-machine-id-setup',
1565 'src/machine-id-setup/machine-id-setup-main.c',
1566 'src/core/machine-id-setup.c',
1567 'src/core/machine-id-setup.h',
1568 include_directories : includes,
1569 link_with : [libshared],
1570 install : true,
1571 install_dir : rootbindir)
1572
1573executable('systemd-fsck',
1574 'src/fsck/fsck.c',
1575 include_directories : includes,
1576 link_with : [libshared],
1577 install : true,
1578 install_dir : rootlibexecdir)
1579
1580executable('systemd-sleep',
1581 'src/sleep/sleep.c',
1582 include_directories : includes,
1583 link_with : [libshared],
1584 install : true,
1585 install_dir : rootlibexecdir)
1586
1587executable('systemd-sysctl',
1588 'src/sysctl/sysctl.c',
1589 include_directories : includes,
1590 link_with : [libshared],
1591 install : true,
1592 install_dir : rootlibexecdir)
1593
1594executable('systemd-ac-power',
1595 'src/ac-power/ac-power.c',
1596 include_directories : includes,
1597 link_with : [libshared],
1598 install : true,
1599 install_dir : rootlibexecdir)
1600
1601executable('systemd-detect-virt',
1602 'src/detect-virt/detect-virt.c',
1603 include_directories : includes,
1604 link_with : [libshared],
1605 install : true)
1606
1607executable('systemd-delta',
1608 'src/delta/delta.c',
1609 include_directories : includes,
1610 link_with : [libshared],
1611 install : true)
1612
1613executable('systemd-escape',
1614 'src/escape/escape.c',
1615 include_directories : includes,
1616 link_with : [libshared],
1617 install : true,
1618 install_dir : rootbindir)
1619
1620executable('systemd-notify',
1621 'src/notify/notify.c',
1622 include_directories : includes,
1623 link_with : [libshared],
1624 install : true,
1625 install_dir : rootbindir)
1626
1627executable('systemd-volatile-root',
1628 'src/volatile-root/volatile-root.c',
1629 include_directories : includes,
1630 link_with : [libshared],
1631 install : true,
1632 install_dir : rootlibexecdir)
1633
1634executable('systemd-cgroups-agent',
1635 'src/cgroups-agent/cgroups-agent.c',
1636 include_directories : includes,
1637 link_with : [libshared],
1638 install : true,
1639 install_dir : rootlibexecdir)
1640
1641executable('systemd-path',
1642 'src/path/path.c',
1643 include_directories : includes,
1644 link_with : [libshared],
1645 install : true)
1646
1647executable('systemd-ask-password',
1648 'src/ask-password/ask-password.c',
1649 include_directories : includes,
1650 link_with : [libshared],
1651 install : true,
1652 install_dir : rootbindir)
1653
1654executable('systemd-reply-password',
1655 'src/reply-password/reply-password.c',
1656 include_directories : includes,
1657 link_with : [libshared],
1658 install : true,
1659 install_dir : rootlibexecdir)
1660
1661executable('systemd-tty-ask-password-agent',
1662 'src/tty-ask-password-agent/tty-ask-password-agent.c',
1663 include_directories : includes,
1664 link_with : [libshared],
1665 install : true,
1666 install_dir : rootbindir)
1667
1668executable('systemd-cgls',
1669 'src/cgls/cgls.c',
1670 include_directories : includes,
1671 link_with : [libshared],
1672 install : true)
1673
1674executable('systemd-cgtop',
1675 'src/cgtop/cgtop.c',
1676 include_directories : includes,
1677 link_with : [libshared],
1678 install : true)
1679
1680executable('systemd-initctl',
1681 'src/initctl/initctl.c',
1682 include_directories : includes,
1683 link_with : [libshared],
1684 install : true,
1685 install_dir : rootlibexecdir)
1686
1687executable('systemd-mount',
1688 'src/mount/mount-tool.c',
1689 include_directories : includes,
1690 link_with : [libshared],
1691 install : true)
1692
1693executable('systemd-run',
1694 'src/run/run.c',
1695 include_directories : includes,
1696 link_with : [libshared],
1697 install : true)
1698
1699executable('systemd-stdio-bridge',
1700 'src/stdio-bridge/stdio-bridge.c',
1701 include_directories : includes,
1702 link_with : [libshared],
1703 install : true)
1704
1705executable('busctl',
1706 'src/busctl/busctl.c',
1707 'src/busctl/busctl-introspect.c',
1708 'src/busctl/busctl-introspect.h',
1709 include_directories : includes,
1710 link_with : [libshared],
1711 install : true)
1712
1713if conf.get('ENABLE_SYSUSERS', 0) == 1
1714 executable('systemd-sysusers',
1715 'src/sysusers/sysusers.c',
1716 include_directories : includes,
1717 link_with : [libshared],
1718 install : true,
1719 install_dir : rootbindir)
1720endif
1721
1722if conf.get('ENABLE_TMPFILES', 0) == 1
1723 executable('systemd-tmpfiles',
1724 'src/tmpfiles/tmpfiles.c',
1725 include_directories : includes,
1726 link_with : [libshared],
1727 dependencies : [libacl],
1728 install : true,
1729 install_dir : rootbindir)
1730endif
1731
1732if conf.get('ENABLE_HWDB', 0) == 1
1733 executable('systemd-hwdb',
1734 'src/hwdb/hwdb.c',
1735 'src/libsystemd/sd-hwdb/hwdb-internal.h',
1736 include_directories : includes,
1737 link_with : [libshared],
1738 install : true,
1739 install_dir : rootbindir)
1740endif
1741
1742if conf.get('ENABLE_QUOTACHECK', 0) == 1
1743 executable('systemd-quotacheck',
1744 'src/quotacheck/quotacheck.c',
1745 include_directories : includes,
1746 link_with : [libshared],
1747 install : true,
1748 install_dir : rootlibexecdir)
1749endif
1750
1751executable('systemd-socket-proxyd',
1752 'src/socket-proxy/socket-proxyd.c',
1753 include_directories : includes,
1754 link_with : [libshared,
1755 libsystemd],
1756 dependencies : [threads],
1757 install : true,
1758 install_dir : rootlibexecdir)
1759
1760executable('systemd-udevd',
1761 systemd_udevd_sources,
1762 include_directories : includes,
1763 link_with : [libudev_core,
1764 libudev_internal,
1765 libsystemd_network,
1766 libshared],
1767 dependencies : [libkmod,
1768 libidn,
1769 libacl],
1770 install : true,
1771 install_dir : rootlibexecdir)
1772
1773executable('udevadm',
1774 udevadm_sources,
1775 include_directories : includes,
1776 link_with : [libudev_core,
1777 libudev_internal,
1778 libsystemd_network,
1779 libshared],
1780 dependencies : [libkmod,
1781 libidn,
1782 libacl],
1783 install : true,
1784 install_dir : rootbindir)
1785
1786executable('systemd-shutdown',
1787 systemd_shutdown_sources,
1788 include_directories : includes,
1789 link_with : [libshared],
1790 install : true,
1791 install_dir : rootlibexecdir)
1792
1793executable('systemd-update-done',
1794 'src/update-done/update-done.c',
1795 include_directories : includes,
1796 link_with : [libshared],
1797 install : true,
1798 install_dir : rootlibexecdir)
1799
1800executable('systemd-update-utmp',
1801 'src/update-utmp/update-utmp.c',
1802 include_directories : includes,
1803 link_with : [libshared],
1804 dependencies : [libaudit],
1805 install : true,
1806 install_dir : rootlibexecdir)
1807
1808if conf.get('HAVE_KMOD', 0) == 1
1809 executable('systemd-modules-load',
1810 'src/modules-load/modules-load.c',
1811 include_directories : includes,
1812 link_with : [libshared],
1813 dependencies : [libkmod],
1814 install : true,
1815 install_dir : rootlibexecdir)
1816endif
1817
1818executable('systemd-nspawn',
1819 systemd_nspawn_sources,
1820 'src/core/mount-setup.c', # FIXME: use a variable?
1821 'src/core/mount-setup.h',
1822 'src/core/loopback-setup.c',
1823 'src/core/loopback-setup.h',
1824 include_directories : [includes, include_directories('src/nspawn')],
1825 link_with : [libfirewall,
1826 libshared],
1827 dependencies : [libacl,
1828 libblkid,
1829 libseccomp,
1830 libselinux],
1831 install : true)
1832
1833executable('systemd-networkd',
1834 systemd_networkd_sources,
1835 include_directories : includes,
1836 link_with : [libnetworkd_core,
1837 libfirewall,
1838 libsystemd_network,
1839 libudev_internal,
1840 libshared],
1841 install : true,
1842 install_dir : rootlibexecdir)
1843
1844executable('systemd-networkd-wait-online',
1845 systemd_networkd_wait_online_sources,
1846 include_directories : includes,
1847 link_with : [libnetworkd_core,
1848 libshared],
1849 install : true,
1850 install_dir : rootlibexecdir)
1851
1852executable('networkctl',
1853 networkctl_sources,
1854 include_directories : includes,
1855 link_with : [libsystemd_network,
1856 libshared],
1857 install : true,
1858 install_dir : rootbindir)
1859
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001860############################################################
1861
1862foreach tuple : tests
1863 sources = tuple[0]
1864 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
1865 dependencies = tuple[2]
1866 condition = tuple.length() >= 4 ? tuple[3] : ''
1867 type = tuple.length() >= 5 ? tuple[4] : ''
1868 defs = tuple.length() >= 6 ? tuple[5] : []
1869 incs = tuple.length() >= 7 ? tuple[6] : includes
1870
1871 name = sources[0].split('/')[-1].split('.')[0]
1872
1873 if condition == '' or conf.get(condition, 0) == 1
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04001874 install = install_tests and type == ''
1875
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001876 exe = executable(
1877 name,
1878 sources,
1879 include_directories : incs,
1880 link_with : link_with,
1881 dependencies : dependencies,
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04001882 c_args : defs,
1883 install : install,
1884 install_dir : testsdir)
1885
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001886 if type == 'manual'
1887 message('@0@ is a manual test'.format(name))
1888 elif type == 'unsafe' and want_tests != 'unsafe'
1889 message('@0@ is an unsafe test'.format(name))
1890 else
1891 test(name, exe, env : test_env)
1892 endif
1893 else
1894 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
1895 endif
1896endforeach
1897
1898############################################################
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001899
1900make_directive_index_py = find_program('tools/make-directive-index.py')
1901make_man_index_py = find_program('tools/make-man-index.py')
1902
1903subdir('units')
1904subdir('sysctl.d')
1905subdir('sysusers.d')
1906subdir('tmpfiles.d')
1907subdir('rules')
1908subdir('hwdb')
1909subdir('network')
1910subdir('man')
1911subdir('shell-completion/bash')
1912subdir('shell-completion/zsh')
1913subdir('docs/sysvinit')
1914subdir('docs/var-log')
1915
1916# FIXME: figure out if the warning is true:
1917# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
1918install_subdir('factory/etc',
1919 install_dir : factorydir)
1920
1921
1922install_data('xorg/50-systemd-user.sh',
1923 install_dir : xinitrcdir)
1924install_data('system-preset/90-systemd.preset',
1925 install_dir : systempresetdir)
1926install_data('README',
1927 'NEWS',
1928 'CODING_STYLE',
1929 'DISTRO_PORTING',
1930 'ENVIRONMENT.md',
1931 'LICENSE.GPL2',
1932 'LICENSE.LGPL2.1',
1933 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
1934 install_dir : docdir)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04001935
1936############################################################
1937
1938if git.found() and etags.found()
1939 all_files = run_command(
1940 git,
1941 ['--git-dir=@0@/.git'.format(meson.source_root()),
1942 'ls-files',
1943 ':/*.[ch]'])
1944 all_files = files(all_files.stdout().split())
1945
1946 custom_target(
1947 'TAGS',
1948 output : 'TAGS',
1949 input : all_files,
1950 command : [etags, '-o', '@OUTPUT@'] + all_files)
1951endif