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