blob: a56476a71dee52a526119c056f6a9c1c08de09a7 [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
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -0400388meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400389mkdir_p = 'mkdir -p $DESTDIR/@0@'
390
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400391# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
392# /usr/sbin, /sbin, and fall back to the default from middle column.
393progs = [['telinit', '/lib/sysvinit/telinit'],
394 ['quotaon', '/usr/sbin/quotaon' ],
395 ['quotacheck', '/usr/sbin/quotacheck' ],
396 ['kill', '/usr/bin/kill' ],
397 ['kmod', '/usr/bin/kmod' ],
398 ['kexec', '/usr/sbin/kexec' ],
399 ['sulogin', '/usr/sbin/sulogin' ],
400 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
401 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
402 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
403 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
404 ]
405foreach prog : progs
406 path = get_option(prog[0] + '-path')
407 if path != ''
408 message('Using @1@ for @0@'.format(prog[0], path))
409 else
410 exe = find_program(prog[0], '/usr/sbin/' + prog[0], '/sbin/' + prog[0], required: false)
411 path = exe.found() ? exe.path() : prog[1]
412 endif
413 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
414 conf.set_quoted(name, path)
415endforeach
416
417# TODO: add ln --relative check
418# AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't support --relative ***])])
419
420############################################################
421
422gperf = find_program('gperf')
423
424gperf_test_format = '''
425#include <string.h>
426const char * in_word_set(const char *, @0@);
427@1@
428'''
429gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
430gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
431gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
432if cc.compiles(gperf_test)
433 gperf_len_type = 'size_t'
434else
435 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
436 if cc.compiles(gperf_test)
437 gperf_len_type = 'unsigned'
438 else
439 error('unable to determine gperf len type')
440 endif
441endif
442message('gperf len type is @0@'.format(gperf_len_type))
443conf.set('GPERF_LEN_TYPE', gperf_len_type, description : 'The type of gperf "len" parameter')
444
445############################################################
446
447if not cc.has_header('sys/capability.h')
448 error('POSIX caps headers not found')
449endif
450foreach header : ['linux/btrfs.h',
451 'linux/memfd.h',
452 'linux/vm_sockets.h',
453 'valgrind/memcheck.h',
454 'valgrind/valgrind.h',
455 ]
456 if cc.has_header(header)
457 conf.set('HAVE_' + header.underscorify().to_upper(), 1)
458 endif
459endforeach
460
461############################################################
462
463conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
464
465default_hierarchy = get_option('default-hierarchy')
466conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
467 description : 'default cgroup hierarchy as string')
468if default_hierarchy == 'legacy'
469 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
470elif default_hierarchy == 'hybrid'
471 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
472else
473 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
474endif
475
476time_epoch = get_option('time-epoch')
477if time_epoch == ''
478 NEWS = files('NEWS')
479 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
480endif
481time_epoch = time_epoch.to_int()
482conf.set('TIME_EPOCH', time_epoch)
483
484system_uid_max = get_option('system-uid-max')
485if system_uid_max == ''
486 system_uid_max = run_command(
487 awk,
488 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
489 '/etc/login.defs').stdout()
490endif
491system_uid_max = system_uid_max.to_int()
492conf.set('SYSTEM_UID_MAX', system_uid_max)
493substs.set('systemuidmax', system_uid_max)
494message('Maximum system UID is @0@'.format(system_uid_max))
495
496conf.set_quoted('NOBODY_USER_NAME', get_option('nobody-user'))
497conf.set_quoted('NOBODY_GROUP_NAME', get_option('nobody-group'))
498
499system_gid_max = get_option('system-gid-max')
500if system_gid_max == ''
501 system_gid_max = run_command(
502 awk,
503 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
504 '/etc/login.defs').stdout()
505endif
506system_gid_max = system_gid_max.to_int()
507conf.set('SYSTEM_GID_MAX', system_gid_max)
508substs.set('systemgidmax', system_gid_max)
509message('Maximum system GID is @0@'.format(system_gid_max))
510
511tty_gid = get_option('tty-gid')
512conf.set('TTY_GID', tty_gid)
513m4_defines += ['-DTTY_GID=' + tty_gid]
514
515if get_option('adm-group')
516 m4_defines += ['-DENABLE_ADM_GROUP']
517endif
518
519if get_option('wheel-group')
520 m4_defines += ['-DENABLE_WHEEL_GROUP']
521endif
522
523substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
524
525conf.set10('KILL_USER_PROCESSES', get_option('default-kill-user-processes'))
526
527default_dnssec = get_option('default-dnssec')
528conf.set('DEFAULT_DNSSEC_MODE',
529 'DNSSEC_' + default_dnssec.underscorify().to_upper())
530
531conf.set_quoted('DNS_SERVERS', get_option('dns-servers'))
532
533conf.set_quoted('NTP_SERVERS', get_option('ntp-servers'))
534
535conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
536
537#####################################################################
538
539threads = dependency('threads')
540librt = cc.find_library('rt')
541libm = cc.find_library('m')
542libdl = cc.find_library('dl')
543libcrypt = cc.find_library('crypt')
544
545libcap = dependency('libcap')
546libmount = dependency('mount',
547 version : '>= 2.27')
548
549want_seccomp = get_option('seccomp')
550if want_seccomp != 'no'
551 libseccomp = dependency('libseccomp',
552 required : want_seccomp == 'yes')
553 if libseccomp.found()
554 conf.set('HAVE_SECCOMP', 1)
555 m4_defines += ['-DHAVE_SECCOMP']
556 endif
557else
558 libseccomp = []
559endif
560
561want_selinux = get_option('selinux')
562if want_selinux != 'no'
563 libselinux = dependency('libselinux',
564 version : '>= 2.1.9',
565 required : want_selinux == 'yes')
566 if libselinux.found()
567 conf.set('HAVE_SELINUX', 1)
568 m4_defines += ['-DHAVE_SELINUX']
569 endif
570else
571 libselinux = []
572endif
573
574want_apparmor = get_option('apparmor')
575if want_apparmor != 'no'
576 libapparmor = dependency('libapparmor',
577 required : want_apparmor == 'yes')
578 if libapparmor.found()
579 conf.set('HAVE_APPARMOR', 1)
580 m4_defines += ['-DHAVE_APPARMOR']
581 endif
582else
583 libapparmor = []
584endif
585
586want_smack = get_option('smack')
587if want_smack != 'no'
588 libsmack = dependency('libsmack',
589 required : want_smack == 'yes')
590 if libsmack.found()
591 conf.set('HAVE_SMACK', 1)
592 m4_defines += ['-DHAVE_SMACK']
593 endif
594else
595 libsmack = []
596endif
597
598smack_run_label = get_option('smack-run-label')
599if smack_run_label != ''
600 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
601 m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
602endif
603
604want_audit = get_option('audit')
605if want_audit != 'no'
606 libaudit = dependency('audit', required : want_audit == 'yes')
607 if libaudit.found()
608 conf.set('HAVE_AUDIT', 1)
609 endif
610else
611 libaudit = []
612endif
613
614want_blkid = get_option('blkid')
615if want_blkid != 'no'
616 libblkid = dependency('blkid', required : want_blkid == 'yes')
617 if libblkid.found()
618 conf.set('HAVE_BLKID', 1)
619 endif
620else
621 libblkid = []
622endif
623
624want_kmod = get_option('kmod')
625if want_kmod != 'no'
626 libkmod = dependency('libkmod',
627 version : '>= 15',
628 required : want_kmod == 'yes')
629 if libkmod.found()
630 conf.set('HAVE_KMOD', 1)
631 endif
632else
633 libkmod = []
634endif
635
636want_pam = get_option('pam')
637if want_pam != 'no'
638 libpam = cc.find_library('pam', required : want_pam == 'yes')
639 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'yes')
640 if libpam.found() and libpam_misc.found()
641 conf.set('HAVE_PAM', 1)
642 m4_defines += ['-DHAVE_PAM']
643 endif
644else
645 libpam = []
646 libpam_misc = []
647endif
648
649want_microhttpd = get_option('microhttpd')
650if want_microhttpd != 'no'
651 libmicrohttpd = dependency('libmicrohttpd',
652 version : '>= 0.9.33',
653 required : want_microhttpd == 'yes')
654 if libmicrohttpd.found()
655 conf.set('HAVE_MICROHTTPD', 1)
656 m4_defines += ['-DHAVE_MICROHTTPD']
657 endif
658else
659 libmicrohttpd = []
660endif
661
662want_libcryptsetup = get_option('libcryptsetup')
663if want_libcryptsetup != 'no'
664 libcryptsetup = dependency('libcryptsetup',
665 version : '>= 1.6.0',
666 required : want_libcryptsetup == 'yes')
667 if libcryptsetup.found()
668 conf.set('HAVE_LIBCRYPTSETUP', 1)
669 endif
670else
671 libcryptsetup = []
672endif
673
674want_libcurl = get_option('libcurl')
675if want_libcurl != 'no'
676 libcurl = dependency('libcurl',
677 version : '>= 7.32.0',
678 required : want_libcurl == 'yes')
679 if libcurl.found()
680 conf.set('HAVE_LIBCURL', 1)
681 m4_defines += ['-DHAVE_LIBCURL']
682 endif
683else
684 libcurl = []
685endif
686
687want_libidn = get_option('libidn')
688if want_libidn != 'no'
689 libidn = dependency('libidn',
690 required : want_libidn == 'yes')
691 if libidn.found()
692 conf.set('HAVE_LIBIDN', 1)
693 m4_defines += ['-DHAVE_LIBIDN']
694 endif
695else
696 libidn = []
697endif
698
699want_libiptc = get_option('libiptc')
700if want_libiptc != 'no'
701 libiptc = dependency('libiptc',
702 required : want_libiptc == 'yes')
703 if libiptc.found()
704 conf.set('HAVE_LIBIPTC', 1)
705 m4_defines += ['-DHAVE_LIBIPTC']
706 endif
707else
708 libiptc = []
709endif
710
711want_qrencode = get_option('qrencode')
712if want_qrencode != 'no'
713 libqrencode = dependency('libqrencode',
714 required : want_qrencode == 'yes')
715 if libqrencode.found()
716 conf.set('HAVE_QRENCODE', 1)
717 endif
718else
719 libqrencode = []
720endif
721
722want_gnutls = get_option('gnutls')
723if want_gnutls != 'no'
724 libgnutls = dependency('gnutls',
725 version : '>= 3.1.4',
726 required : want_gnutls == 'yes')
727 if libgnutls.found()
728 conf.set('HAVE_GNUTLS', 1)
729 endif
730else
731 libgnutls = []
732endif
733
734want_elfutils = get_option('elfutils')
735if want_elfutils != 'no'
736 libdw = dependency('libdw',
737 required : want_elfutils == 'yes')
738 if libdw.found()
739 conf.set('HAVE_ELFUTILS', 1)
740 endif
741else
742 libdw = []
743endif
744
745want_zlib = get_option('zlib')
746if want_zlib != 'no'
747 libz = dependency('zlib',
748 required : want_zlib == 'yes')
749 if libz.found()
750 conf.set('HAVE_ZLIB', 1)
751 endif
752else
753 libz = []
754endif
755
756want_bzip2 = get_option('bzip2')
757if want_bzip2 != 'no'
758 libbzip2 = cc.find_library('bz2',
759 required : want_bzip2 == 'yes')
760 if libbzip2.found()
761 conf.set('HAVE_BZIP2', 1)
762 endif
763else
764 libbzip2 = []
765endif
766
767want_xz = get_option('xz')
768if want_xz != 'no'
769 libxz = dependency('liblzma',
770 required : want_xz == 'yes')
771 if libxz.found()
772 conf.set('HAVE_XZ', 1)
773 endif
774else
775 libxz = []
776endif
777
778want_lz4 = get_option('lz4')
779if want_lz4 != 'no'
780 liblz4 = dependency('liblz4',
781 required : want_lz4 == 'yes')
782 if liblz4.found()
783 conf.set('HAVE_LZ4', 1)
784 endif
785else
786 liblz4 = []
787endif
788
789libacl = cc.find_library('acl', required : false)
790if libacl.found()
791 conf.set('HAVE_ACL', 1)
792 m4_defines += ['-DHAVE_ACL']
793endif
794
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -0400795want_glib = get_option('glib')
796if want_glib != 'no'
797 libglib = dependency('glib-2.0',
798 version : '>= 2.22.0',
799 required : want_glib == 'yes')
800 libgobject = dependency('gobject-2.0',
801 version : '>= 2.22.0',
802 required : want_glib == 'yes')
803 libgio = dependency('gio-2.0',
804 required : want_glib == 'yes')
805 if libglib.found() and libgobject.found() and libgio.found()
806 conf.set('HAVE_GLIB', 1)
807 endif
808else
809 libglib = []
810 libgobject = []
811 libgio = []
812endif
813
814want_dbus = get_option('dbus')
815if want_dbus != 'no'
816 libdbus = dependency('dbus-1',
817 version : '>= 1.3.2',
818 required : want_dbus == 'yes')
819 if libdbus.found()
820 conf.set('HAVE_DBUS', 1)
821 endif
822else
823 libdbus = []
824endif
825
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400826want_libgcrypt = get_option('libgcrypt')
827if want_libgcrypt != 'no'
828 libgcrypt = cc.find_library('gcrypt', required : want_libgcrypt == 'yes')
829 if libgcrypt.found()
830 conf.set('HAVE_LIBGCRYPT', 1)
831 endif
832else
833 libgcrypt = []
834endif
835
836want_importd = get_option('importd')
837if want_importd != 'no'
838 have_deps = (conf.get('HAVE_LIBCURL', 0) == 1 and
839 conf.get('HAVE_ZLIB', 0) == 1 and
840 conf.get('HAVE_BZIP2', 0) == 1 and
841 conf.get('HAVE_XZ', 0) == 1 and
842 conf.get('HAVE_LZ4', 0) == 1)
843 if have_deps
844 conf.set('ENABLE_IMPORTD', 1)
845 elif want_importd == 'yes'
846 error('importd support was requested, but dependencies are not available')
847 endif
848endif
849
850want_remote = get_option('remote')
851if want_remote != 'no'
852 have_deps = [conf.get('HAVE_MICROHTTPD', 0) == 1,
853 conf.get('HAVE_LIBCURL', 0) == 1]
854 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
855 # it's possible to build one without the other. Complain only if
856 # support was explictly requested. The auxiliary files like sysusers
857 # config should be installed when any of the programs are built.
858 if want_remote == 'yes' and not (have_deps[0] and have_deps[1])
859 error('remote support was requested, but dependencies are not available')
860 endif
861 if have_deps[0] or have_deps[1]
862 conf.set('ENABLE_REMOTE', 1)
863 endif
864endif
865
866foreach pair : [['utmp', 'HAVE_UTMP'],
867 ['hibernate', 'ENABLE_HIBERNATE'],
868 ['environment-d', 'ENABLE_ENVIRONMENT_D'],
869 ['binfmt', 'ENABLE_BINFMT'],
870 ['coredump', 'ENABLE_COREDUMP'],
871 ['resolve', 'ENABLE_RESOLVED'],
872 ['logind', 'ENABLE_LOGIND'],
873 ['hostnamed', 'ENABLE_HOSTNAMED'],
874 ['localed', 'ENABLE_LOCALED'],
875 ['machined', 'ENABLE_MACHINED'],
876 ['networkd', 'ENABLE_NETWORKD'],
877 ['timedated', 'ENABLE_TIMEDATED'],
878 ['timesyncd', 'ENABLE_TIMESYNCD'],
879 ['myhostname', 'HAVE_MYHOSTNAME'],
880 ['firstboot', 'ENABLE_FIRSTBOOT'],
881 ['randomseed', 'ENABLE_RANDOMSEED'],
882 ['backlight', 'ENABLE_BACKLIGHT'],
883 ['vconsole', 'ENABLE_VCONSOLE'],
884 ['quotacheck', 'ENABLE_QUOTACHECK'],
885 ['sysusers', 'ENABLE_SYSUSERS'],
886 ['tmpfiles', 'ENABLE_TMPFILES'],
887 ['hwdb', 'ENABLE_HWDB'],
888 ['rfkill', 'ENABLE_RFKILL'],
889 ['ldconfig', 'ENABLE_LDCONFIG'],
890 ]
891
892 if get_option(pair[0])
893 conf.set(pair[1], 1)
894 endif
895endforeach
896
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -0400897want_tests = get_option('tests')
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -0400898install_tests = get_option('install-tests')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -0400899tests = []
900
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400901#####################################################################
902
903if get_option('efi')
904 efi_arch = host_machine.cpu_family() # TODO: check this works at all
905 if efi_arch == 'ia32'
906 EFI_MACHINE_TYPE_NAME = 'ia32'
907 elif efi_arch == 'x86_64'
908 EFI_MACHINE_TYPE_NAME = 'x64'
909 elif efi_arch == 'aarch64'
910 EFI_MACHINE_TYPE_NAME = 'x64'
911 else
912 EFI_MACHINE_TYPE_NAME = efi_arch
913 endif
914
915 conf.set('ENABLE_EFI', 1)
916 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
917endif
918
919#####################################################################
920
921config_h = configure_file(
922 output : 'config.h',
923 configuration : conf)
924
925includes = include_directories('src/basic',
926 'src/shared',
927 'src/systemd',
928 'src/journal',
929 'src/resolve',
930 'src/timesync',
931 'src/login',
932 'src/udev',
933 'src/libudev',
934 'src/core',
935 'src/libsystemd/sd-bus',
936 'src/libsystemd/sd-device',
937 'src/libsystemd/sd-hwdb',
938 'src/libsystemd/sd-id128',
939 'src/libsystemd/sd-netlink',
940 'src/libsystemd/sd-network',
941 'src/libsystemd-network',
942 )
943
944add_project_arguments('-include', 'config.h', language : 'c')
945
946gcrypt_util_sources = files('src/shared/gcrypt-util.h',
947 'src/shared/gcrypt-util.c')
948
949subdir('po')
950subdir('catalog')
951subdir('src/systemd')
952subdir('src/basic')
953subdir('src/libsystemd')
954subdir('src/libsystemd-network')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400955subdir('src/journal')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400956subdir('src/login')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400957
958libjournal_core = static_library(
959 'journal-core',
960 libjournal_core_sources,
961 journald_gperf_c,
962 include_directories : includes,
963 link_with : [libbasic,
964 libsystemd_internal,
965 libsystemd_journal_internal],
966 install : false)
967
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -0400968version_script_arg = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400969libsystemd = shared_library(
970 'systemd',
971 libsystemd_internal_sources,
972 version : '0.18.0',
973 include_directories : includes,
974 link_args : ['-shared',
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -0400975 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400976 link_with : [libbasic,
977 libsystemd_internal,
978 libsystemd_journal_internal],
979 dependencies : [threads],
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -0400980 link_depends : libsystemd_sym,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400981 install : true,
982 install_dir : rootlibdir)
983
984############################################################
985
986foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []],
987 ['systemd', '', []],
988 ['mymachines', 'ENABLE_MACHINED', []],
989 ['resolve', 'ENABLE_RESOLVED', [libdl]]]
990
991 condition = tuple[1] == '' or conf.get(tuple[1], 0) == 1
992 if condition
993 module = tuple[0]
994 extra_deps = tuple[2]
995
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -0400996 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
997 version_script_arg = join_paths(meson.current_source_dir(), sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400998
999 shared_library(
1000 'nss_' + module,
1001 'src/nss-@0@/nss-@0@.c'.format(module),
1002 version : '2',
1003 include_directories : includes,
1004 link_args : ['-shared',
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -04001005 '-Wl,--version-script=' + version_script_arg,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001006 '-Wl,--undefined'],
1007 link_with : [libsystemd_internal,
1008 libbasic],
1009 dependencies : [threads,
1010 librt] + extra_deps,
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -04001011 link_depends : sym,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001012 install : true,
1013 install_dir : rootlibdir)
1014 endif
1015endforeach
1016
1017############################################################
1018
1019subdir('src/libudev')
1020subdir('src/shared')
1021subdir('src/core')
1022subdir('src/udev')
1023subdir('src/network')
1024
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001025subdir('src/analyze')
1026subdir('src/journal-remote')
1027subdir('src/coredump')
1028subdir('src/hostname')
1029subdir('src/import')
1030subdir('src/kernel-install')
1031subdir('src/locale')
1032subdir('src/machine')
1033subdir('src/nspawn')
1034subdir('src/resolve')
1035subdir('src/timedate')
1036subdir('src/timesync')
1037subdir('src/vconsole')
1038
1039subdir('src/test')
1040
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001041executable('systemd',
1042 systemd_sources,
1043 include_directories : includes,
1044 link_with : [libcore,
1045 libshared],
1046 dependencies : [threads,
1047 librt,
1048 libseccomp,
1049 libselinux,
Zbigniew Jędrzejewski-Szmekf4ee10a2017-04-09 14:08:53 -04001050 libmount,
1051 libblkid],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001052 install : true,
1053 install_dir : rootlibexecdir)
1054
1055executable('systemd-analyze',
1056 systemd_analyze_sources,
1057 include_directories : includes,
1058 link_with : [libcore,
1059 libshared],
1060 dependencies : [threads,
1061 librt,
1062 libseccomp,
1063 libselinux,
Zbigniew Jędrzejewski-Szmekf4ee10a2017-04-09 14:08:53 -04001064 libmount,
1065 libblkid],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001066 install : true)
1067
1068executable('systemd-journald',
1069 systemd_journald_sources,
1070 include_directories : includes,
1071 link_with : [libsystemd_journal_internal,
1072 libjournal_core,
1073 libshared,
1074 libudev],
1075 dependencies : [threads,
1076 libxz,
1077 liblz4],
1078 install : true,
1079 install_dir : rootlibexecdir)
1080
1081executable('systemd-cat',
1082 systemd_cat_sources,
1083 include_directories : includes,
1084 link_with : [libjournal_core,
1085 libshared,
1086 libudev],
1087 dependencies : [threads],
1088 install : true)
1089
1090executable('journalctl',
1091 journalctl_sources,
1092 include_directories : includes,
1093 link_with : [libshared,
1094 libudev],
1095 dependencies : [threads,
1096 libqrencode,
1097 libxz,
1098 liblz4],
1099 install : true,
1100 install_dir : rootbindir)
1101
1102executable('systemd-getty-generator',
1103 'src/getty-generator/getty-generator.c',
1104 install : true,
1105 install_dir : systemgeneratordir,
1106 include_directories : includes,
1107 link_with : [libshared])
1108
1109executable('systemd-debug-generator',
1110 'src/debug-generator/debug-generator.c',
1111 install : true,
1112 install_dir : systemgeneratordir,
1113 include_directories : includes,
1114 link_with : [libshared])
1115
1116executable('systemd-fstab-generator',
1117 'src/fstab-generator/fstab-generator.c',
1118 'src/core/mount-setup.c',
1119 install : true,
1120 install_dir : systemgeneratordir,
1121 include_directories : includes,
1122 link_with : [libshared])
1123
1124if conf.get('ENABLE_ENVIRONMENT_D', 0) == 1
1125 executable('30-systemd-environment-d-generator',
1126 'src/environment-d-generator/environment-d-generator.c',
1127 install : true,
1128 install_dir : userenvgeneratordir,
1129 include_directories : includes,
1130 link_with : [libshared])
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04001131
1132 meson.add_install_script(meson_make_symlink,
1133 sysconfdir + '/environment',
1134 environmentdir + '/99-environment.conf')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001135endif
1136
1137if conf.get('ENABLE_HIBERNATE', 0) == 1
1138 executable('systemd-hibernate-resume-generator',
1139 'src/hibernate-resume/hibernate-resume-generator.c',
1140 include_directories : includes,
1141 link_with : [libshared],
1142 install : true,
1143 install_dir : systemgeneratordir)
1144
1145 executable('systemd-hibernate-resume',
1146 'src/hibernate-resume/hibernate-resume.c',
1147 include_directories : includes,
1148 link_with : [libshared],
1149 install : true,
1150 install_dir : rootlibexecdir)
1151endif
1152
1153if conf.get('HAVE_BLKID', 0) == 1
1154 executable('systemd-gpt-auto-generator',
1155 'src/gpt-auto-generator/gpt-auto-generator.c',
1156 'src/basic/blkid-util.h',
1157 install : true,
1158 install_dir : systemgeneratordir,
1159 include_directories : includes,
1160 link_with : libshared,
1161 dependencies : libblkid)
1162
1163 executable('systemd-dissect',
1164 'src/dissect/dissect.c',
1165 include_directories : includes,
1166 link_with : [libshared],
1167 install : true,
1168 install_dir : rootlibexecdir)
1169endif
1170
1171if conf.get('ENABLE_RESOLVED', 0) == 1
1172 executable('systemd-resolved',
1173 systemd_resolved_sources,
1174 include_directories : includes,
1175 link_with : [libshared,
1176 ],
1177 dependencies : [threads,
1178 libm,
1179 libidn],
1180 install : true,
1181 install_dir : rootlibexecdir)
1182
1183 executable('systemd-resolve',
1184 systemd_resolve_sources,
1185 include_directories : includes,
1186 link_with : [libshared,
1187 ],
1188 dependencies : [threads,
1189 libm,
1190 libidn],
1191 install : true)
1192endif
1193
1194if conf.get('ENABLE_LOGIND', 0) == 1
1195 executable('systemd-logind',
1196 systemd_logind_sources,
1197 include_directories : includes,
1198 link_with : [liblogind_core,
1199 libshared],
1200 dependencies : [threads,
1201 libacl],
1202 install : true,
1203 install_dir : rootlibexecdir)
1204
1205 executable('loginctl',
1206 loginctl_sources,
1207 include_directories : includes,
1208 link_with : [libshared],
1209 dependencies : [threads,
1210 liblz4,
1211 libxz],
1212 install : true,
1213 install_dir : rootbindir)
1214
1215 executable('systemd-inhibit',
1216 'src/login/inhibit.c',
1217 include_directories : includes,
1218 link_with : [libshared],
1219 install : true,
1220 install_dir : rootbindir)
1221
1222 if conf.get('HAVE_PAM', 0) == 1
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -04001223 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001224 shared_library(
1225 'pam_systemd',
1226 pam_systemd_c,
1227 name_prefix : '',
1228 include_directories : includes,
1229 link_args : ['-shared',
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -04001230 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001231 link_with : [libshared],
1232 dependencies : [libpam,
1233 libpam_misc],
Zbigniew Jędrzejewski-Szmek6b30f282017-04-09 13:11:49 -04001234 link_depends : pam_systemd_sym,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001235 install : true,
1236 install_dir : pamlibdir)
1237 endif
1238endif
1239
1240if conf.get('HAVE_PAM', 0) == 1
1241 executable('systemd-user-sessions',
1242 'src/user-sessions/user-sessions.c',
1243 include_directories : includes,
1244 link_with : [libshared],
1245 install : true,
1246 install_dir : rootlibexecdir)
1247endif
1248
1249if conf.get('ENABLE_EFI', 0) == 1
1250 executable('bootctl',
1251 'src/boot/bootctl.c',
1252 include_directories : includes,
1253 link_with : [libshared],
1254 dependencies : [libblkid],
1255 install : true)
1256endif
1257
1258executable('systemd-socket-activate', 'src/activate/activate.c',
1259 include_directories : includes,
1260 link_with : [libshared],
1261 dependencies : [threads],
1262 install : true)
1263
1264executable('systemctl', 'src/systemctl/systemctl.c',
1265 include_directories : includes,
1266 link_with : [libshared],
1267 dependencies : [threads,
1268 libcap,
1269 libselinux,
1270 libxz,
1271 liblz4],
1272 install : true,
1273 install_dir : rootbindir)
1274
1275if conf.get('ENABLE_BACKLIGHT', 0) == 1
1276 executable('systemd-backlight',
1277 'src/backlight/backlight.c',
1278 include_directories : includes,
1279 link_with : [libshared],
1280 install : true,
1281 install_dir : rootlibexecdir)
1282endif
1283
1284if conf.get('ENABLE_RFKILL', 0) == 1
1285 executable('systemd-rfkill',
1286 'src/rfkill/rfkill.c',
1287 include_directories : includes,
1288 link_with : [libshared],
1289 install : true,
1290 install_dir : rootlibexecdir)
1291endif
1292
1293executable('systemd-system-update-generator',
1294 'src/system-update-generator/system-update-generator.c',
1295 include_directories : includes,
1296 link_with : [libshared],
1297 install : true,
1298 install_dir : systemgeneratordir)
1299
1300if conf.get('HAVE_LIBCRYPTSETUP', 0) == 1
1301 executable('systemd-cryptsetup',
1302 'src/cryptsetup/cryptsetup.c',
1303 include_directories : includes,
1304 link_with : [libshared],
1305 dependencies : [libcryptsetup],
1306 install : true,
1307 install_dir : rootlibexecdir)
1308
1309 executable('systemd-cryptsetup-generator',
1310 'src/cryptsetup/cryptsetup-generator.c',
1311 include_directories : includes,
1312 link_with : [libshared],
1313 dependencies : [libcryptsetup],
1314 install : true,
1315 install_dir : systemgeneratordir)
1316
1317 executable('systemd-veritysetup',
1318 'src/veritysetup/veritysetup.c',
1319 include_directories : includes,
1320 link_with : [libshared],
1321 dependencies : [libcryptsetup],
1322 install : true,
1323 install_dir : rootlibexecdir)
1324
1325 executable('systemd-veritysetup-generator',
1326 'src/veritysetup/veritysetup-generator.c',
1327 include_directories : includes,
1328 link_with : [libshared],
1329 dependencies : [libcryptsetup],
1330 install : true,
1331 install_dir : systemgeneratordir)
1332endif
1333
1334if conf.get('HAVE_SYSV_COMPAT', 0) == 1
1335 executable('systemd-sysv-generator',
1336 'src/sysv-generator/sysv-generator.c',
1337 include_directories : includes,
1338 link_with : [libshared],
1339 install : true,
1340 install_dir : systemgeneratordir)
1341
1342 executable('systemd-rc-local-generator',
1343 'src/rc-local-generator/rc-local-generator.c',
1344 include_directories : includes,
1345 link_with : [libshared],
1346 install : true,
1347 install_dir : systemgeneratordir)
1348endif
1349
1350if conf.get('ENABLE_HOSTNAMED', 0) == 1
1351 executable('systemd-hostnamed',
1352 'src/hostname/hostnamed.c',
1353 include_directories : includes,
1354 link_with : [libshared],
1355 install : true,
1356 install_dir : rootlibexecdir)
1357
1358 executable('hostnamectl',
1359 'src/hostname/hostnamectl.c',
1360 include_directories : includes,
1361 link_with : [libshared],
1362 install : true)
1363endif
1364
1365if conf.get('ENABLE_LOCALED', 0) == 1
1366 executable('systemd-localed',
1367 systemd_localed_sources,
1368 include_directories : includes,
1369 link_with : [libshared],
1370 dependencies : [libdl],
1371 install : true,
1372 install_dir : rootlibexecdir)
1373
1374 executable('localectl',
1375 localectl_sources,
1376 include_directories : includes,
1377 link_with : [libshared],
1378 install : true)
1379endif
1380
1381if conf.get('ENABLE_TIMEDATED', 0) == 1
1382 executable('systemd-timedated',
1383 'src/timedate/timedated.c',
1384 include_directories : includes,
1385 link_with : [libshared],
1386 install : true,
1387 install_dir : rootlibexecdir)
1388
1389 executable('timedatectl',
1390 'src/timedate/timedatectl.c',
1391 include_directories : includes,
1392 link_with : [libshared],
1393 install : true)
1394endif
1395
1396if conf.get('ENABLE_TIMESYNCD', 0) == 1
1397 executable('systemd-timesyncd',
1398 systemd_timesyncd_sources,
1399 include_directories : includes,
1400 link_with : [libshared],
1401 dependencies : [threads,
1402 libm],
1403 install : true,
1404 install_dir : rootlibexecdir)
1405endif
1406
1407if conf.get('ENABLE_MACHINED', 0) == 1
1408 executable('systemd-machined',
1409 systemd_machined_sources,
1410 include_directories : includes,
1411 link_with : [libmachine_core,
1412 libshared],
1413 install : true,
1414 install_dir : rootlibexecdir)
1415
1416 executable('machinectl',
1417 'src/machine/machinectl.c',
1418 include_directories : includes,
1419 link_with : [libshared],
1420 dependencies : [threads,
1421 libxz,
1422 liblz4],
1423 install : true,
1424 install_dir : rootbindir)
1425endif
1426
1427if conf.get('ENABLE_IMPORTD', 0) == 1
1428 executable('systemd-importd',
1429 systemd_importd_sources,
1430 include_directories : includes,
1431 link_with : [libshared],
1432 install : true,
1433 install_dir : rootlibexecdir)
1434
1435 executable('systemd-pull',
1436 systemd_pull_sources,
1437 include_directories : includes,
1438 link_with : [libshared],
1439 dependencies : [libcurl,
1440 libz,
1441 libbzip2,
1442 libxz,
1443 libgcrypt],
1444 install : true,
1445 install_dir : rootlibexecdir)
1446
1447 executable('systemd-import',
1448 systemd_import_sources,
1449 include_directories : includes,
1450 link_with : [libshared],
1451 dependencies : [libcurl,
1452 libz,
1453 libbzip2,
1454 libxz],
1455 install : true,
1456 install_dir : rootlibexecdir)
1457
1458 executable('systemd-export',
1459 systemd_export_sources,
1460 include_directories : includes,
1461 link_with : [libshared],
1462 dependencies : [libcurl,
1463 libz,
1464 libbzip2,
1465 libxz],
1466 install : true,
1467 install_dir : rootlibexecdir)
1468endif
1469
1470if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_LIBCURL', 0) == 1
1471 executable('systemd-journal-upload',
1472 systemd_journal_upload_sources,
1473 include_directories : includes,
1474 link_with : [libshared],
1475 dependencies : [threads,
1476 libcurl,
1477 libgnutls,
1478 libxz,
1479 liblz4],
1480 install : true,
1481 install_dir : rootlibexecdir)
1482endif
1483
1484if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
1485 executable('systemd-journal-remote',
1486 systemd_journal_remote_sources,
1487 include_directories : includes,
1488 link_with : [libshared],
1489 dependencies : [threads,
1490 libmicrohttpd,
1491 libgnutls,
1492 libxz,
1493 liblz4],
1494 install : true,
1495 install_dir : rootlibexecdir)
1496
1497 executable('systemd-journal-gatewayd',
1498 systemd_journal_gatewayd_sources,
1499 include_directories : includes,
1500 link_with : [libshared],
1501 dependencies : [threads,
1502 libmicrohttpd,
1503 libgnutls,
1504 libxz,
1505 liblz4],
1506 install : true,
1507 install_dir : rootlibexecdir)
1508endif
1509
1510if conf.get('ENABLE_COREDUMP', 0) == 1
1511 executable('systemd-coredump',
1512 systemd_coredump_sources,
1513 include_directories : includes,
1514 link_with : [libshared],
1515 dependencies : [threads,
1516 libacl,
1517 libdw,
1518 libxz,
1519 liblz4],
1520 install : true,
1521 install_dir : rootlibexecdir)
1522
1523 executable('coredumpctl',
1524 coredumpctl_sources,
1525 include_directories : includes,
1526 link_with : [libshared],
1527 dependencies : [threads,
1528 libxz,
1529 liblz4],
1530 install : true)
1531endif
1532
1533if conf.get('ENABLE_BINFMT', 0) == 1
1534 executable('systemd-binfmt',
1535 'src/binfmt/binfmt.c',
1536 include_directories : includes,
1537 link_with : [libshared],
1538 install : true,
1539 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04001540
1541 meson.add_install_script('sh', '-c',
1542 mkdir_p.format(binfmtdir))
1543 meson.add_install_script('sh', '-c',
1544 mkdir_p.format(sysconfdir + '/binfmt.d'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001545endif
1546
1547if conf.get('ENABLE_VCONSOLE', 0) == 1
1548 executable('systemd-vconsole-setup',
1549 'src/vconsole/vconsole-setup.c',
1550 include_directories : includes,
1551 link_with : [libshared],
1552 install : true,
1553 install_dir : rootlibexecdir)
1554endif
1555
1556if conf.get('ENABLE_RANDOMSEED', 0) == 1
1557 executable('systemd-random-seed',
1558 'src/random-seed/random-seed.c',
1559 include_directories : includes,
1560 link_with : [libshared],
1561 install : true,
1562 install_dir : rootlibexecdir)
1563endif
1564
1565if conf.get('ENABLE_FIRSTBOOT', 0) == 1
1566 executable('systemd-firstboot',
1567 'src/firstboot/firstboot.c',
1568 include_directories : includes,
1569 link_with : [libshared],
1570 dependencies : [libcrypt],
1571 install : true,
1572 install_dir : rootbindir)
1573endif
1574
1575executable('systemd-remount-fs',
1576 'src/remount-fs/remount-fs.c',
1577 'src/core/mount-setup.c',
1578 'src/core/mount-setup.h',
1579 include_directories : includes,
1580 link_with : [libshared],
1581 install : true,
1582 install_dir : rootlibexecdir)
1583
1584executable('systemd-machine-id-setup',
1585 'src/machine-id-setup/machine-id-setup-main.c',
1586 'src/core/machine-id-setup.c',
1587 'src/core/machine-id-setup.h',
1588 include_directories : includes,
1589 link_with : [libshared],
1590 install : true,
1591 install_dir : rootbindir)
1592
1593executable('systemd-fsck',
1594 'src/fsck/fsck.c',
1595 include_directories : includes,
1596 link_with : [libshared],
1597 install : true,
1598 install_dir : rootlibexecdir)
1599
1600executable('systemd-sleep',
1601 'src/sleep/sleep.c',
1602 include_directories : includes,
1603 link_with : [libshared],
1604 install : true,
1605 install_dir : rootlibexecdir)
1606
1607executable('systemd-sysctl',
1608 'src/sysctl/sysctl.c',
1609 include_directories : includes,
1610 link_with : [libshared],
1611 install : true,
1612 install_dir : rootlibexecdir)
1613
1614executable('systemd-ac-power',
1615 'src/ac-power/ac-power.c',
1616 include_directories : includes,
1617 link_with : [libshared],
1618 install : true,
1619 install_dir : rootlibexecdir)
1620
1621executable('systemd-detect-virt',
1622 'src/detect-virt/detect-virt.c',
1623 include_directories : includes,
1624 link_with : [libshared],
1625 install : true)
1626
1627executable('systemd-delta',
1628 'src/delta/delta.c',
1629 include_directories : includes,
1630 link_with : [libshared],
1631 install : true)
1632
1633executable('systemd-escape',
1634 'src/escape/escape.c',
1635 include_directories : includes,
1636 link_with : [libshared],
1637 install : true,
1638 install_dir : rootbindir)
1639
1640executable('systemd-notify',
1641 'src/notify/notify.c',
1642 include_directories : includes,
1643 link_with : [libshared],
1644 install : true,
1645 install_dir : rootbindir)
1646
1647executable('systemd-volatile-root',
1648 'src/volatile-root/volatile-root.c',
1649 include_directories : includes,
1650 link_with : [libshared],
1651 install : true,
1652 install_dir : rootlibexecdir)
1653
1654executable('systemd-cgroups-agent',
1655 'src/cgroups-agent/cgroups-agent.c',
1656 include_directories : includes,
1657 link_with : [libshared],
1658 install : true,
1659 install_dir : rootlibexecdir)
1660
1661executable('systemd-path',
1662 'src/path/path.c',
1663 include_directories : includes,
1664 link_with : [libshared],
1665 install : true)
1666
1667executable('systemd-ask-password',
1668 'src/ask-password/ask-password.c',
1669 include_directories : includes,
1670 link_with : [libshared],
1671 install : true,
1672 install_dir : rootbindir)
1673
1674executable('systemd-reply-password',
1675 'src/reply-password/reply-password.c',
1676 include_directories : includes,
1677 link_with : [libshared],
1678 install : true,
1679 install_dir : rootlibexecdir)
1680
1681executable('systemd-tty-ask-password-agent',
1682 'src/tty-ask-password-agent/tty-ask-password-agent.c',
1683 include_directories : includes,
1684 link_with : [libshared],
1685 install : true,
1686 install_dir : rootbindir)
1687
1688executable('systemd-cgls',
1689 'src/cgls/cgls.c',
1690 include_directories : includes,
1691 link_with : [libshared],
1692 install : true)
1693
1694executable('systemd-cgtop',
1695 'src/cgtop/cgtop.c',
1696 include_directories : includes,
1697 link_with : [libshared],
1698 install : true)
1699
1700executable('systemd-initctl',
1701 'src/initctl/initctl.c',
1702 include_directories : includes,
1703 link_with : [libshared],
1704 install : true,
1705 install_dir : rootlibexecdir)
1706
1707executable('systemd-mount',
1708 'src/mount/mount-tool.c',
1709 include_directories : includes,
1710 link_with : [libshared],
1711 install : true)
1712
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04001713meson.add_install_script(meson_make_symlink,
1714 'systemd-mount', bindir + '/systemd-umount')
1715
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001716executable('systemd-run',
1717 'src/run/run.c',
1718 include_directories : includes,
1719 link_with : [libshared],
1720 install : true)
1721
1722executable('systemd-stdio-bridge',
1723 'src/stdio-bridge/stdio-bridge.c',
1724 include_directories : includes,
1725 link_with : [libshared],
1726 install : true)
1727
1728executable('busctl',
1729 'src/busctl/busctl.c',
1730 'src/busctl/busctl-introspect.c',
1731 'src/busctl/busctl-introspect.h',
1732 include_directories : includes,
1733 link_with : [libshared],
1734 install : true)
1735
1736if conf.get('ENABLE_SYSUSERS', 0) == 1
1737 executable('systemd-sysusers',
1738 'src/sysusers/sysusers.c',
1739 include_directories : includes,
1740 link_with : [libshared],
1741 install : true,
1742 install_dir : rootbindir)
1743endif
1744
1745if conf.get('ENABLE_TMPFILES', 0) == 1
1746 executable('systemd-tmpfiles',
1747 'src/tmpfiles/tmpfiles.c',
1748 include_directories : includes,
1749 link_with : [libshared],
1750 dependencies : [libacl],
1751 install : true,
1752 install_dir : rootbindir)
1753endif
1754
1755if conf.get('ENABLE_HWDB', 0) == 1
1756 executable('systemd-hwdb',
1757 'src/hwdb/hwdb.c',
1758 'src/libsystemd/sd-hwdb/hwdb-internal.h',
1759 include_directories : includes,
1760 link_with : [libshared],
1761 install : true,
1762 install_dir : rootbindir)
1763endif
1764
1765if conf.get('ENABLE_QUOTACHECK', 0) == 1
1766 executable('systemd-quotacheck',
1767 'src/quotacheck/quotacheck.c',
1768 include_directories : includes,
1769 link_with : [libshared],
1770 install : true,
1771 install_dir : rootlibexecdir)
1772endif
1773
1774executable('systemd-socket-proxyd',
1775 'src/socket-proxy/socket-proxyd.c',
1776 include_directories : includes,
1777 link_with : [libshared,
1778 libsystemd],
1779 dependencies : [threads],
1780 install : true,
1781 install_dir : rootlibexecdir)
1782
1783executable('systemd-udevd',
1784 systemd_udevd_sources,
1785 include_directories : includes,
1786 link_with : [libudev_core,
1787 libudev_internal,
1788 libsystemd_network,
1789 libshared],
1790 dependencies : [libkmod,
1791 libidn,
1792 libacl],
1793 install : true,
1794 install_dir : rootlibexecdir)
1795
1796executable('udevadm',
1797 udevadm_sources,
1798 include_directories : includes,
1799 link_with : [libudev_core,
1800 libudev_internal,
1801 libsystemd_network,
1802 libshared],
1803 dependencies : [libkmod,
1804 libidn,
1805 libacl],
1806 install : true,
1807 install_dir : rootbindir)
1808
1809executable('systemd-shutdown',
1810 systemd_shutdown_sources,
1811 include_directories : includes,
1812 link_with : [libshared],
1813 install : true,
1814 install_dir : rootlibexecdir)
1815
1816executable('systemd-update-done',
1817 'src/update-done/update-done.c',
1818 include_directories : includes,
1819 link_with : [libshared],
1820 install : true,
1821 install_dir : rootlibexecdir)
1822
1823executable('systemd-update-utmp',
1824 'src/update-utmp/update-utmp.c',
1825 include_directories : includes,
1826 link_with : [libshared],
1827 dependencies : [libaudit],
1828 install : true,
1829 install_dir : rootlibexecdir)
1830
1831if conf.get('HAVE_KMOD', 0) == 1
1832 executable('systemd-modules-load',
1833 'src/modules-load/modules-load.c',
1834 include_directories : includes,
1835 link_with : [libshared],
1836 dependencies : [libkmod],
1837 install : true,
1838 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04001839
1840 meson.add_install_script('sh', '-c',
1841 mkdir_p.format(modulesloaddir))
1842 meson.add_install_script('sh', '-c',
1843 mkdir_p.format(sysconfdir + '/modules-load.d'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001844endif
1845
1846executable('systemd-nspawn',
1847 systemd_nspawn_sources,
1848 'src/core/mount-setup.c', # FIXME: use a variable?
1849 'src/core/mount-setup.h',
1850 'src/core/loopback-setup.c',
1851 'src/core/loopback-setup.h',
1852 include_directories : [includes, include_directories('src/nspawn')],
1853 link_with : [libfirewall,
1854 libshared],
1855 dependencies : [libacl,
1856 libblkid,
1857 libseccomp,
1858 libselinux],
1859 install : true)
1860
1861executable('systemd-networkd',
1862 systemd_networkd_sources,
1863 include_directories : includes,
1864 link_with : [libnetworkd_core,
1865 libfirewall,
1866 libsystemd_network,
1867 libudev_internal,
1868 libshared],
1869 install : true,
1870 install_dir : rootlibexecdir)
1871
1872executable('systemd-networkd-wait-online',
1873 systemd_networkd_wait_online_sources,
1874 include_directories : includes,
1875 link_with : [libnetworkd_core,
1876 libshared],
1877 install : true,
1878 install_dir : rootlibexecdir)
1879
1880executable('networkctl',
1881 networkctl_sources,
1882 include_directories : includes,
1883 link_with : [libsystemd_network,
1884 libshared],
1885 install : true,
1886 install_dir : rootbindir)
1887
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001888############################################################
1889
1890foreach tuple : tests
1891 sources = tuple[0]
1892 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
1893 dependencies = tuple[2]
1894 condition = tuple.length() >= 4 ? tuple[3] : ''
1895 type = tuple.length() >= 5 ? tuple[4] : ''
1896 defs = tuple.length() >= 6 ? tuple[5] : []
1897 incs = tuple.length() >= 7 ? tuple[6] : includes
1898
1899 name = sources[0].split('/')[-1].split('.')[0]
1900
1901 if condition == '' or conf.get(condition, 0) == 1
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04001902 install = install_tests and type == ''
1903
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001904 exe = executable(
1905 name,
1906 sources,
1907 include_directories : incs,
1908 link_with : link_with,
1909 dependencies : dependencies,
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04001910 c_args : defs,
1911 install : install,
1912 install_dir : testsdir)
1913
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001914 if type == 'manual'
1915 message('@0@ is a manual test'.format(name))
1916 elif type == 'unsafe' and want_tests != 'unsafe'
1917 message('@0@ is an unsafe test'.format(name))
1918 else
1919 test(name, exe, env : test_env)
1920 endif
1921 else
1922 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
1923 endif
1924endforeach
1925
1926############################################################
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001927
1928make_directive_index_py = find_program('tools/make-directive-index.py')
1929make_man_index_py = find_program('tools/make-man-index.py')
1930
1931subdir('units')
1932subdir('sysctl.d')
1933subdir('sysusers.d')
1934subdir('tmpfiles.d')
1935subdir('rules')
1936subdir('hwdb')
1937subdir('network')
1938subdir('man')
1939subdir('shell-completion/bash')
1940subdir('shell-completion/zsh')
1941subdir('docs/sysvinit')
1942subdir('docs/var-log')
1943
1944# FIXME: figure out if the warning is true:
1945# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
1946install_subdir('factory/etc',
1947 install_dir : factorydir)
1948
1949
1950install_data('xorg/50-systemd-user.sh',
1951 install_dir : xinitrcdir)
1952install_data('system-preset/90-systemd.preset',
1953 install_dir : systempresetdir)
1954install_data('README',
1955 'NEWS',
1956 'CODING_STYLE',
1957 'DISTRO_PORTING',
1958 'ENVIRONMENT.md',
1959 'LICENSE.GPL2',
1960 'LICENSE.LGPL2.1',
1961 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
1962 install_dir : docdir)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04001963
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04001964meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
1965meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
1966
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04001967############################################################
1968
1969if git.found() and etags.found()
1970 all_files = run_command(
1971 git,
1972 ['--git-dir=@0@/.git'.format(meson.source_root()),
1973 'ls-files',
1974 ':/*.[ch]'])
1975 all_files = files(all_files.stdout().split())
1976
1977 custom_target(
1978 'TAGS',
1979 output : 'TAGS',
1980 input : all_files,
1981 command : [etags, '-o', '@OUTPUT@'] + all_files)
1982endif