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