blob: 26ef5b925d83881722802e1237aa6091238392b1 [file] [log] [blame]
Zbigniew Jędrzejewski-Szmek3a726fc2017-11-18 18:32:01 +01001# SPDX-License-Identifier: LGPL-2.1+
Zbigniew Jędrzejewski-Szmek3a726fc2017-11-18 18:32:01 +01002
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04003project('systemd', 'c',
Lennart Poetteringde7436b2018-06-22 13:03:47 +02004 version : '239',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04005 license : 'LGPLv2+',
6 default_options: [
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04007 'c_std=gnu99',
8 'prefix=/usr',
9 'sysconfdir=/etc',
10 'localstatedir=/var',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040011 ],
Yu Watanabeac093402018-05-10 16:04:16 +090012 meson_version : '>= 0.45',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040013 )
14
Lennart Poetteringde7436b2018-06-22 13:03:47 +020015libsystemd_version = '0.23.0'
16libudev_version = '1.6.11'
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +020017
Yu Watanabe348b4432018-05-07 18:17:35 +090018# We need the same data in two different formats, ugh!
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040019# Also, for hysterical reasons, we use different variable
20# names, sometimes. Not all variables are included in every
21# set. Ugh, ugh, ugh!
22conf = configuration_data()
23conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
24conf.set_quoted('PACKAGE_VERSION', meson.project_version())
25
26substs = configuration_data()
27substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
28substs.set('PACKAGE_VERSION', meson.project_version())
29
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040030#####################################################################
31
Zbigniew Jędrzejewski-Szmek003c8872017-07-24 04:41:45 -040032# Try to install the git pre-commit hook
33git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
34if git_hook.returncode() == 0
35 message(git_hook.stdout().strip())
36endif
37
38#####################################################################
39
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +010040if get_option('split-usr') == 'auto'
41 split_usr = run_command('test', '-L', '/bin').returncode() != 0
42else
43 split_usr = get_option('split-usr') == 'true'
44endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010045conf.set10('HAVE_SPLIT_USR', split_usr,
46 description : '/usr/bin and /bin directories are separate')
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010047
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010048if get_option('split-bin') == 'auto'
49 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
50else
51 split_bin = get_option('split-bin') == 'true'
52endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010053conf.set10('HAVE_SPLIT_BIN', split_bin,
54 description : 'bin and sbin directories are separate')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010055
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010056rootprefixdir = get_option('rootprefix')
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010057# Unusual rootprefixdir values are used by some distros
58# (see https://github.com/systemd/systemd/pull/7461).
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +010059rootprefix_default = split_usr ? '/' : '/usr'
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010060if rootprefixdir == ''
61 rootprefixdir = rootprefix_default
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010062endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040063
64sysvinit_path = get_option('sysvinit-path')
65sysvrcnd_path = get_option('sysvrcnd-path')
Yu Watanabe348b4432018-05-07 18:17:35 +090066conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +020067 description : 'SysV init scripts and rcN.d links are supported')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040068
69# join_paths ignore the preceding arguments if an absolute component is
70# encountered, so this should canonicalize various paths when they are
71# absolute or relative.
72prefixdir = get_option('prefix')
73if not prefixdir.startswith('/')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -040074 error('Prefix is not absolute: "@0@"'.format(prefixdir))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040075endif
76bindir = join_paths(prefixdir, get_option('bindir'))
77libdir = join_paths(prefixdir, get_option('libdir'))
78sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
79includedir = join_paths(prefixdir, get_option('includedir'))
80datadir = join_paths(prefixdir, get_option('datadir'))
81localstatedir = join_paths('/', get_option('localstatedir'))
82
83rootbindir = join_paths(rootprefixdir, 'bin')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010084rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040085rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
86
87rootlibdir = get_option('rootlibdir')
88if rootlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -040089 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040090endif
91
92# Dirs of external packages
Michael Bieble17e5ba2017-04-13 10:30:56 -040093pkgconfigdatadir = join_paths(datadir, 'pkgconfig')
94pkgconfiglibdir = join_paths(libdir, 'pkgconfig')
95polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
96polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
97polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
98varlogdir = join_paths(localstatedir, 'log')
99xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
Yu Watanabe8a38aac2017-11-23 22:20:22 +0900100rpmmacrosdir = get_option('rpmmacrosdir')
101if rpmmacrosdir != 'no'
102 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
103endif
Michael Biebl02fa0542017-10-21 08:32:50 +0200104modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400105
106# Our own paths
Michael Bieble17e5ba2017-04-13 10:30:56 -0400107pkgdatadir = join_paths(datadir, 'systemd')
108environmentdir = join_paths(prefixdir, 'lib/environment.d')
109pkgsysconfdir = join_paths(sysconfdir, 'systemd')
110userunitdir = join_paths(prefixdir, 'lib/systemd/user')
111userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
112tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
113sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
114sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
115binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
116modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
117networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
118pkgincludedir = join_paths(includedir, 'systemd')
119systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
120usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
121systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
122userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
123systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
124systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
125systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
126systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
127udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
128udevhomedir = udevlibexecdir
129udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
130udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
131catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
132kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
133factorydir = join_paths(datadir, 'factory')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400134bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
135testsdir = join_paths(prefixdir, 'lib/systemd/tests')
136systemdstatedir = join_paths(localstatedir, 'lib/systemd')
137catalogstatedir = join_paths(systemdstatedir, 'catalog')
138randomseeddir = join_paths(localstatedir, 'lib/systemd')
Lennart Poettering61d05782018-04-16 21:41:40 +0200139profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400140
tblume75aaade2018-02-01 22:46:15 +0100141docdir = get_option('docdir')
142if docdir == ''
143 docdir = join_paths(datadir, 'doc/systemd')
144endif
145
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400146dbuspolicydir = get_option('dbuspolicydir')
147if dbuspolicydir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400148 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400149endif
150
151dbussessionservicedir = get_option('dbussessionservicedir')
152if dbussessionservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400153 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400154endif
155
156dbussystemservicedir = get_option('dbussystemservicedir')
157if dbussystemservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400158 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400159endif
160
161pamlibdir = get_option('pamlibdir')
162if pamlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400163 pamlibdir = join_paths(rootlibdir, 'security')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400164endif
165
166pamconfdir = get_option('pamconfdir')
167if pamconfdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400168 pamconfdir = join_paths(sysconfdir, 'pam.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400169endif
170
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100171memory_accounting_default = get_option('memory-accounting-default')
172
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400173conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400174conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400175conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
176conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
177conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400178conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
179conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100180
Zbigniew Jędrzejewski-Szmekf7c54272018-03-02 09:09:29 +0100181conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100182
Michael Bieble17e5ba2017-04-13 10:30:56 -0400183conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400184conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
185conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400186conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
187conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
188conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
189conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
Zbigniew Jędrzejewski-Szmekda495a02017-11-21 23:18:05 +0100190conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
Zbigniew Jędrzejewski-Szmek7f2806d2017-11-29 20:02:11 +0100191conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400192conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
193conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
194conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
195conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
196conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +0100197conf.set_quoted('ROOTPREFIX', rootprefixdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400198conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400199conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
200conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400201conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
202conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
203conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
204conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
205conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
206conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400207conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
208conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400209conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400210conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400211conf.set_quoted('LIBDIR', libdir)
212conf.set_quoted('ROOTLIBDIR', rootlibdir)
213conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
214conf.set_quoted('BOOTLIBDIR', bootlibdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400215conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
216conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
217conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
218conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
219conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
220conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100221conf.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'true' : 'false')
Michal Koutný7f672e82018-03-09 18:27:13 +0100222conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400223
224conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
225conf.set_quoted('ABS_SRC_DIR', meson.source_root())
226
227substs.set('prefix', prefixdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400228substs.set('exec_prefix', prefixdir)
229substs.set('libdir', libdir)
230substs.set('rootlibdir', rootlibdir)
231substs.set('includedir', includedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400232substs.set('pkgsysconfdir', pkgsysconfdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400233substs.set('bindir', bindir)
234substs.set('rootbindir', rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400235substs.set('rootlibexecdir', rootlibexecdir)
236substs.set('systemunitdir', systemunitdir)
237substs.set('userunitdir', userunitdir)
238substs.set('systempresetdir', systempresetdir)
239substs.set('userpresetdir', userpresetdir)
240substs.set('udevhwdbdir', udevhwdbdir)
241substs.set('udevrulesdir', udevrulesdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400242substs.set('udevlibexecdir', udevlibexecdir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200243substs.set('environmentdir', environmentdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400244substs.set('catalogdir', catalogdir)
245substs.set('tmpfilesdir', tmpfilesdir)
246substs.set('sysusersdir', sysusersdir)
247substs.set('sysctldir', sysctldir)
248substs.set('binfmtdir', binfmtdir)
249substs.set('modulesloaddir', modulesloaddir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200250substs.set('modprobedir', modprobedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400251substs.set('systemgeneratordir', systemgeneratordir)
252substs.set('usergeneratordir', usergeneratordir)
253substs.set('systemenvgeneratordir', systemenvgeneratordir)
254substs.set('userenvgeneratordir', userenvgeneratordir)
255substs.set('systemshutdowndir', systemshutdowndir)
256substs.set('systemsleepdir', systemsleepdir)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400257substs.set('VARLOGDIR', varlogdir)
258substs.set('CERTIFICATEROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400259substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
260substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400261substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
262substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
263substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
264substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100265substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400266
267#####################################################################
268
269cc = meson.get_compiler('c')
270pkgconfig = import('pkgconfig')
Zbigniew Jędrzejewski-Szmek6e2afb12017-04-24 21:03:35 -0400271check_compilation_sh = find_program('tools/meson-check-compilation.sh')
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100272meson_build_sh = find_program('tools/meson-build.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400273
Adam Duskett08318a22018-01-15 06:25:46 -0500274if get_option('tests') != 'false'
275 cxx = find_program('c++', required : false)
276 if cxx.found()
277 # Used only for tests
278 add_languages('cpp')
279 endif
Zbigniew Jędrzejewski-Szmek94e25232017-05-13 13:23:28 -0400280endif
281
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500282want_ossfuzz = get_option('oss-fuzz')
283want_libfuzzer = get_option('llvm-fuzz')
284fuzzer_build = want_ossfuzz or want_libfuzzer
285if want_ossfuzz and want_libfuzzer
286 error('only one of oss-fuzz and llvm-fuzz can be specified')
287endif
288if want_libfuzzer
289 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer')
290endif
291if want_ossfuzz
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500292 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
293endif
294
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900295possible_cc_flags = [
296 '-Wextra',
297 '-Werror=undef',
298 '-Wlogical-op',
299 '-Wmissing-include-dirs',
300 '-Wold-style-definition',
301 '-Wpointer-arith',
302 '-Winit-self',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900303 '-Wfloat-equal',
304 '-Wsuggest-attribute=noreturn',
305 '-Werror=missing-prototypes',
306 '-Werror=implicit-function-declaration',
307 '-Werror=missing-declarations',
308 '-Werror=return-type',
309 '-Werror=incompatible-pointer-types',
310 '-Werror=format=2',
311 '-Wstrict-prototypes',
312 '-Wredundant-decls',
313 '-Wmissing-noreturn',
314 '-Wimplicit-fallthrough=5',
315 '-Wshadow',
316 '-Wendif-labels',
317 '-Wstrict-aliasing=2',
318 '-Wwrite-strings',
319 '-Werror=overflow',
Zbigniew Jędrzejewski-Szmekb05ecb82018-06-09 13:12:52 +0200320 '-Werror=shift-count-overflow',
Zbigniew Jędrzejewski-Szmekd28b67d2018-06-11 13:17:43 +0200321 '-Werror=shift-overflow=2',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900322 '-Wdate-time',
323 '-Wnested-externs',
324 '-ffast-math',
325 '-fno-common',
326 '-fdiagnostics-show-option',
327 '-fno-strict-aliasing',
328 '-fvisibility=hidden',
329 '-fstack-protector',
330 '-fstack-protector-strong',
331 '--param=ssp-buffer-size=4',
332]
333
334# --as-needed and --no-undefined are provided by meson by default,
335# run mesonconf to see what is enabled
336possible_link_flags = [
337 '-Wl,-z,relro',
338 '-Wl,-z,now',
339]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400340
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500341# the oss-fuzz fuzzers are not built with -fPIE, so don't
342# enable it when we are linking against them
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500343if not fuzzer_build
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900344 possible_cc_flags += '-fPIE'
345 possible_link_flags += '-pie'
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500346endif
347
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900348if cc.get_id() == 'clang'
349 possible_cc_flags += [
350 '-Wno-typedef-redefinition',
351 '-Wno-gnu-variable-sized-type-not-at-end',
352 ]
353endif
354
355if get_option('buildtype') != 'debug'
356 possible_cc_flags += [
357 '-ffunction-sections',
358 '-fdata-sections',
359 ]
360
361 possible_link_flags += '-Wl,--gc-sections'
362endif
363
364add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
365
Zbigniew Jędrzejewski-Szmek2c5434a2017-04-27 10:05:41 -0400366# "negative" arguments: gcc on purpose does not return an error for "-Wno-"
Zbigniew Jędrzejewski-Szmekd40f5cc2018-06-07 15:08:02 +0200367# arguments, just emits a warning. So test for the "positive" version instead.
Zbigniew Jędrzejewski-Szmek2c5434a2017-04-27 10:05:41 -0400368foreach arg : ['unused-parameter',
369 'missing-field-initializers',
370 'unused-result',
Zbigniew Jędrzejewski-Szmekfb1b5882017-09-04 19:49:12 +0300371 'format-signedness',
372 'error=nonnull', # work-around for gcc 7.1 turning this on on its own
373 ]
Zbigniew Jędrzejewski-Szmek2c5434a2017-04-27 10:05:41 -0400374 if cc.has_argument('-W' + arg)
375 add_project_arguments('-Wno-' + arg, language : 'c')
376 endif
377endforeach
378
Caio Marcelo de Oliveira Filho9e70f2f2018-02-19 01:37:19 -0800379if cc.compiles('''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400380 #include <time.h>
381 #include <inttypes.h>
382 typedef uint64_t usec_t;
383 usec_t now(clockid_t clock);
384 int main(void) {
385 struct timespec now;
386 return 0;
387 }
Caio Marcelo de Oliveira Filho9e70f2f2018-02-19 01:37:19 -0800388''', name : '-Werror=shadow with local shadowing')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400389 add_project_arguments('-Werror=shadow', language : 'c')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400390endif
391
Zbigniew Jędrzejewski-Szmek6e2afb12017-04-24 21:03:35 -0400392link_test_c = files('tools/meson-link-test.c')
393
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900394foreach arg : possible_link_flags
Zbigniew Jędrzejewski-Szmek6e2afb12017-04-24 21:03:35 -0400395 have = run_command(check_compilation_sh,
396 cc.cmd_array(), '-x', 'c', arg,
397 '-include', link_test_c).returncode() == 0
398 message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no'))
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900399 if have
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400400 add_project_link_arguments(arg, language : 'c')
401 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400402endforeach
403
Zbigniew Jędrzejewski-Szmek9cc0e6e2017-04-11 10:25:34 -0400404cpp = ' '.join(cc.cmd_array()) + ' -E'
405
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400406#####################################################################
407# compilation result tests
408
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400409conf.set('_GNU_SOURCE', true)
410conf.set('__SANE_USERSPACE_TYPES__', true)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400411
412conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
413conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
414conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
415conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
416conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
417conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
418conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
419
420decl_headers = '''
421#include <uchar.h>
422#include <linux/ethtool.h>
Susant Sahanibce67bb2017-09-14 19:51:39 +0000423#include <linux/fib_rules.h>
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100424#include <sys/stat.h>
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400425'''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400426
427foreach decl : ['char16_t',
428 'char32_t',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400429 'struct ethtool_link_settings',
Susant Sahanibce67bb2017-09-14 19:51:39 +0000430 'struct fib_rule_uid_range',
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100431 'struct statx',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400432 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400433
434 # We get -1 if the size cannot be determined
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200435 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
436
437 if decl == 'struct statx'
438 if have
439 want_linux_stat_h = false
440 else
441 have = cc.sizeof(decl,
442 prefix : decl_headers + '#include <linux/stat.h>',
443 args : '-D_GNU_SOURCE') > 0
444 want_linux_stat_h = have
445 endif
446 endif
447
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200448 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400449endforeach
450
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200451conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
Filipe Brandenburger75720bf2018-07-15 22:43:35 -0700452
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400453foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
454 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
455 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
456 ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'],
Susant Sahanid3848262017-12-23 23:25:03 +0530457 ['IFLA_IPVLAN_FLAGS', 'linux/if_link.h'],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400458 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
459 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
460 ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'],
461 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
462 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
Susant Sahani9dfed8d2017-04-25 20:30:34 +0530463 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400464 # if_tunnel.h is buggy and cannot be included on its own
465 ['IFLA_VTI_REMOTE', 'linux/if_tunnel.h', '#include <net/if.h>'],
466 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
467 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
468 ['IFLA_BRIDGE_VLAN_INFO', 'linux/if_bridge.h'],
469 ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'],
470 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
471 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
Susant Sahanid3848262017-12-23 23:25:03 +0530472 ['IPVLAN_F_PRIVATE', 'linux/if_link.h'],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400473 ['NDA_IFINDEX', 'linux/neighbour.h'],
474 ['IFA_FLAGS', 'linux/if_addr.h'],
Susant Sahanibce67bb2017-09-14 19:51:39 +0000475 ['FRA_UID_RANGE', 'linux/fib_rules.h'],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400476 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
Susant Sahanid6df5832017-11-22 12:53:22 +0530477 ['VXCAN_INFO_PEER', 'linux/can/vxcan.h'],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400478 ]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400479 prefix = decl.length() > 2 ? decl[2] : ''
480 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200481 conf.set10('HAVE_' + decl[0], have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400482endforeach
483
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400484foreach ident : ['secure_getenv', '__secure_getenv']
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200485 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400486endforeach
487
488foreach ident : [
Lennart Poettering85db59b2017-12-25 12:01:14 +0100489 ['memfd_create', '''#include <sys/mman.h>'''],
Lennart Poettering7b961e42017-12-25 12:35:28 +0100490 ['gettid', '''#include <sys/types.h>
491 #include <unistd.h>'''],
Lennart Poettering3c042ad2017-12-25 12:07:40 +0100492 ['pivot_root', '''#include <stdlib.h>
493 #include <unistd.h>'''], # no known header declares pivot_root
Lennart Poettering85db59b2017-12-25 12:01:14 +0100494 ['name_to_handle_at', '''#include <sys/types.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400495 #include <sys/stat.h>
496 #include <fcntl.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100497 ['setns', '''#include <sched.h>'''],
Lennart Poettering2acfd0f2017-12-25 12:35:43 +0100498 ['renameat2', '''#include <stdio.h>
499 #include <fcntl.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400500 ['kcmp', '''#include <linux/kcmp.h>'''],
501 ['keyctl', '''#include <sys/types.h>
502 #include <keyutils.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100503 ['copy_file_range', '''#include <sys/syscall.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400504 #include <unistd.h>'''],
Daniel Mack71e52002016-10-18 17:57:10 +0200505 ['bpf', '''#include <sys/syscall.h>
506 #include <unistd.h>'''],
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100507 ['statx', '''#include <sys/types.h>
508 #include <sys/stat.h>
509 #include <unistd.h>'''],
Zbigniew Jędrzejewski-Szmekaa484f32018-02-26 21:20:00 +0100510 ['explicit_bzero' , '''#include <string.h>'''],
511 ['reallocarray', '''#include <malloc.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400512]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400513
Lennart Poettering85db59b2017-12-25 12:01:14 +0100514 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200515 conf.set10('HAVE_' + ident[0].to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400516endforeach
517
Lennart Poettering85db59b2017-12-25 12:01:14 +0100518if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200519 conf.set10('USE_SYS_RANDOM_H', true)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200520 conf.set10('HAVE_GETRANDOM', true)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400521else
522 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200523 conf.set10('USE_SYS_RANDOM_H', false)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200524 conf.set10('HAVE_GETRANDOM', have)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400525endif
526
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400527#####################################################################
528
529sed = find_program('sed')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400530awk = find_program('awk')
Zbigniew Jędrzejewski-Szmekd730e2d2017-04-25 08:49:58 -0400531m4 = find_program('m4')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400532stat = find_program('stat')
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -0400533git = find_program('git', required : false)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100534env = find_program('env')
Zbigniew Jędrzejewski-Szmekb1ffacb2018-03-22 08:34:21 +0100535perl = find_program('perl', required : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400536
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -0400537meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400538mkdir_p = 'mkdir -p $DESTDIR/@0@'
Zbigniew Jędrzejewski-Szmekd83f4f52017-04-16 12:04:46 -0400539test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
540splash_bmp = files('test/splash.bmp')
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400541
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400542# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
543# /usr/sbin, /sbin, and fall back to the default from middle column.
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500544progs = [['quotaon', '/usr/sbin/quotaon' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400545 ['quotacheck', '/usr/sbin/quotacheck' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400546 ['kmod', '/usr/bin/kmod' ],
547 ['kexec', '/usr/sbin/kexec' ],
548 ['sulogin', '/usr/sbin/sulogin' ],
549 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
550 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
551 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
552 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
553 ]
554foreach prog : progs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400555 path = get_option(prog[0] + '-path')
556 if path != ''
557 message('Using @1@ for @0@'.format(prog[0], path))
558 else
559 exe = find_program(prog[0],
560 '/usr/sbin/' + prog[0],
561 '/sbin/' + prog[0],
562 required: false)
563 path = exe.found() ? exe.path() : prog[1]
564 endif
565 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
566 conf.set_quoted(name, path)
567 substs.set(name, path)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400568endforeach
569
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500570conf.set_quoted('TELINIT', get_option('telinit-path'))
571
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400572if run_command('ln', '--relative', '--help').returncode() != 0
Zbigniew Jędrzejewski-Szmekcd001012018-03-09 08:56:23 +0100573 error('ln does not support --relative (added in coreutils 8.16)')
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400574endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400575
576############################################################
577
578gperf = find_program('gperf')
579
580gperf_test_format = '''
581#include <string.h>
582const char * in_word_set(const char *, @0@);
583@1@
584'''
585gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
586gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
587gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
588if cc.compiles(gperf_test)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400589 gperf_len_type = 'size_t'
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400590else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400591 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
592 if cc.compiles(gperf_test)
593 gperf_len_type = 'unsigned'
594 else
595 error('unable to determine gperf len type')
596 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400597endif
598message('gperf len type is @0@'.format(gperf_len_type))
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400599conf.set('GPERF_LEN_TYPE', gperf_len_type,
600 description : 'The type of gperf "len" parameter')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400601
602############################################################
603
604if not cc.has_header('sys/capability.h')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400605 error('POSIX caps headers not found')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400606endif
Björn Esser9f555bb2018-01-25 15:30:15 +0100607foreach header : ['crypt.h',
608 'linux/btrfs.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400609 'linux/memfd.h',
610 'linux/vm_sockets.h',
Zbigniew Jędrzejewski-Szmekaf8786b2017-10-03 12:09:40 +0200611 'sys/auxv.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400612 'valgrind/memcheck.h',
613 'valgrind/valgrind.h',
614 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400615
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200616 conf.set10('HAVE_' + header.underscorify().to_upper(),
617 cc.has_header(header))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400618endforeach
619
620############################################################
621
622conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -0400623conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
624gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400625
626default_hierarchy = get_option('default-hierarchy')
627conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
628 description : 'default cgroup hierarchy as string')
629if default_hierarchy == 'legacy'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400630 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400631elif default_hierarchy == 'hybrid'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400632 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400633else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400634 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400635endif
636
637time_epoch = get_option('time-epoch')
Yu Watanabeac093402018-05-10 16:04:16 +0900638if time_epoch == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400639 NEWS = files('NEWS')
Yu Watanabeac093402018-05-10 16:04:16 +0900640 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400641endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400642conf.set('TIME_EPOCH', time_epoch)
643
644system_uid_max = get_option('system-uid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900645if system_uid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400646 system_uid_max = run_command(
647 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800648 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
649 '/etc/login.defs').stdout().strip()
650 if system_uid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900651 system_uid_max = 999
652 else
653 system_uid_max = system_uid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800654 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400655endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400656conf.set('SYSTEM_UID_MAX', system_uid_max)
657substs.set('systemuidmax', system_uid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400658
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400659system_gid_max = get_option('system-gid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900660if system_gid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400661 system_gid_max = run_command(
662 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800663 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
664 '/etc/login.defs').stdout().strip()
665 if system_gid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900666 system_gid_max = 999
667 else
668 system_gid_max = system_gid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800669 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400670endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400671conf.set('SYSTEM_GID_MAX', system_gid_max)
672substs.set('systemgidmax', system_gid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400673
Yu Watanabeac093402018-05-10 16:04:16 +0900674dynamic_uid_min = get_option('dynamic-uid-min')
675dynamic_uid_max = get_option('dynamic-uid-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100676conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
677conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
678substs.set('dynamicuidmin', dynamic_uid_min)
679substs.set('dynamicuidmax', dynamic_uid_max)
680
Yu Watanabeac093402018-05-10 16:04:16 +0900681container_uid_base_min = get_option('container-uid-base-min')
682container_uid_base_max = get_option('container-uid-base-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100683conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
684conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
685substs.set('containeruidbasemin', container_uid_base_min)
686substs.set('containeruidbasemax', container_uid_base_max)
687
Lennart Poetteringafde4572017-12-05 11:00:24 +0100688nobody_user = get_option('nobody-user')
689nobody_group = get_option('nobody-group')
690
Chen Qi2484bff2018-07-23 14:53:09 +0800691if not meson.is_cross_build()
692 getent_result = run_command('getent', 'passwd', '65534')
693 if getent_result.returncode() == 0
694 name = getent_result.stdout().split(':')[0]
695 if name != nobody_user
696 warning('\n' +
697 'The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) +
698 'Your build will result in an user table setup that is incompatible with the local system.')
699 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100700 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800701 id_result = run_command('id', '-u', nobody_user)
702 if id_result.returncode() == 0
703 id = id_result.stdout().to_int()
704 if id != 65534
705 warning('\n' +
706 'The local user with the configured user name "@0@" of the nobody user does not have UID 65534 (it has @1@).\n'.format(nobody_user, id) +
707 'Your build will result in an user table setup that is incompatible with the local system.')
708 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100709 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100710
Chen Qi2484bff2018-07-23 14:53:09 +0800711 getent_result = run_command('getent', 'group', '65534')
712 if getent_result.returncode() == 0
713 name = getent_result.stdout().split(':')[0]
714 if name != nobody_group
715 warning('\n' +
716 'The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) +
717 'Your build will result in an group table setup that is incompatible with the local system.')
718 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100719 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800720 id_result = run_command('id', '-g', nobody_group)
721 if id_result.returncode() == 0
722 id = id_result.stdout().to_int()
723 if id != 65534
724 warning('\n' +
725 'The local group with the configured group name "@0@" of the nobody group does not have UID 65534 (it has @1@).\n'.format(nobody_group, id) +
726 'Your build will result in an group table setup that is incompatible with the local system.')
727 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100728 endif
729endif
Yu Watanabe8374cc62017-12-07 17:19:11 +0900730if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
Yu Watanabe8ea9fad2018-05-10 14:50:52 +0900731 warning('\n' +
732 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
733 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
Yu Watanabe8374cc62017-12-07 17:19:11 +0900734endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100735
736conf.set_quoted('NOBODY_USER_NAME', nobody_user)
737conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
Yu Watanabe60712022017-12-07 15:49:16 +0900738substs.set('NOBODY_USER_NAME', nobody_user)
739substs.set('NOBODY_GROUP_NAME', nobody_group)
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100740
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400741tty_gid = get_option('tty-gid')
742conf.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400743substs.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400744
Ikey Doherty84786b82017-12-03 12:28:23 +0000745# Ensure provided GID argument is numeric, otherwise fallback to default assignment
Yu Watanabeac093402018-05-10 16:04:16 +0900746users_gid = get_option('users-gid')
747substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
Ikey Doherty84786b82017-12-03 12:28:23 +0000748
Yu Watanabe348b4432018-05-07 18:17:35 +0900749conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
750conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400751
752substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
Tom Stellard4e15a732017-10-31 08:46:24 -0700753substs.set('GROUP_RENDER_MODE', get_option('group-render-mode'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400754
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400755kill_user_processes = get_option('default-kill-user-processes')
756conf.set10('KILL_USER_PROCESSES', kill_user_processes)
Michal Koutnýc7f7e852018-03-09 16:40:41 +0100757conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400758substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400759
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400760dns_servers = get_option('dns-servers')
761conf.set_quoted('DNS_SERVERS', dns_servers)
762substs.set('DNS_SERVERS', dns_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400763
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400764ntp_servers = get_option('ntp-servers')
765conf.set_quoted('NTP_SERVERS', ntp_servers)
766substs.set('NTP_SERVERS', ntp_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400767
768conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
769
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400770substs.set('SUSHELL', get_option('debug-shell'))
771substs.set('DEBUGTTY', get_option('debug-tty'))
772
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200773enable_debug_hashmap = false
774enable_debug_mmap_cache = false
Yu Watanabead7aa762018-05-02 13:56:28 +0900775foreach name : get_option('debug')
776 if name == 'hashmap'
777 enable_debug_hashmap = true
778 elif name == 'mmap-cache'
779 enable_debug_mmap_cache = true
780 else
781 message('unknown debug option "@0@", ignoring'.format(name))
782 endif
783endforeach
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200784conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
785conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
Zbigniew Jędrzejewski-Szmek671677d2017-04-27 20:51:34 -0400786
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200787conf.set10('VALGRIND', get_option('valgrind'))
788
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400789#####################################################################
790
791threads = dependency('threads')
792librt = cc.find_library('rt')
793libm = cc.find_library('m')
794libdl = cc.find_library('dl')
795libcrypt = cc.find_library('crypt')
796
Zbigniew Jędrzejewski-Szmek1800cc82017-04-27 01:30:30 -0400797libcap = dependency('libcap', required : false)
798if not libcap.found()
799 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
800 libcap = cc.find_library('cap')
801endif
802
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400803libmount = dependency('mount',
Zbigniew Jędrzejewski-Szmekc0b4b0f2018-03-09 14:58:47 +0100804 version : fuzzer_build ? '>= 0' : '>= 2.30')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400805
806want_seccomp = get_option('seccomp')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500807if want_seccomp != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400808 libseccomp = dependency('libseccomp',
Zbigniew Jędrzejewski-Szmek9f0e9c02017-04-27 10:05:18 -0400809 version : '>= 2.3.1',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400810 required : want_seccomp == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200811 have = libseccomp.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400812else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200813 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400814 libseccomp = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400815endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200816conf.set10('HAVE_SECCOMP', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400817
818want_selinux = get_option('selinux')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500819if want_selinux != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400820 libselinux = dependency('libselinux',
821 version : '>= 2.1.9',
822 required : want_selinux == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200823 have = libselinux.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400824else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200825 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400826 libselinux = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400827endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200828conf.set10('HAVE_SELINUX', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400829
830want_apparmor = get_option('apparmor')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500831if want_apparmor != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400832 libapparmor = dependency('libapparmor',
833 required : want_apparmor == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200834 have = libapparmor.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400835else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200836 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400837 libapparmor = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400838endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200839conf.set10('HAVE_APPARMOR', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400840
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400841smack_run_label = get_option('smack-run-label')
842if smack_run_label != ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400843 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400844endif
845
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400846want_polkit = get_option('polkit')
847install_polkit = false
848install_polkit_pkla = false
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500849if want_polkit != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400850 install_polkit = true
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400851
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400852 libpolkit = dependency('polkit-gobject-1',
853 required : false)
854 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
855 message('Old polkit detected, will install pkla files')
856 install_polkit_pkla = true
857 endif
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400858endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200859conf.set10('ENABLE_POLKIT', install_polkit)
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400860
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400861want_acl = get_option('acl')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500862if want_acl != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400863 libacl = cc.find_library('acl', required : want_acl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200864 have = libacl.found()
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400865else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200866 have = false
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400867 libacl = []
868endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200869conf.set10('HAVE_ACL', have)
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400870
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400871want_audit = get_option('audit')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500872if want_audit != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400873 libaudit = dependency('audit', required : want_audit == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200874 have = libaudit.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400875else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200876 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400877 libaudit = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400878endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200879conf.set10('HAVE_AUDIT', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400880
881want_blkid = get_option('blkid')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500882if want_blkid != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400883 libblkid = dependency('blkid', required : want_blkid == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200884 have = libblkid.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400885else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200886 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400887 libblkid = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400888endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200889conf.set10('HAVE_BLKID', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400890
891want_kmod = get_option('kmod')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500892if want_kmod != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400893 libkmod = dependency('libkmod',
894 version : '>= 15',
895 required : want_kmod == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200896 have = libkmod.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400897else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200898 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400899 libkmod = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400900endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200901conf.set10('HAVE_KMOD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400902
903want_pam = get_option('pam')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500904if want_pam != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400905 libpam = cc.find_library('pam', required : want_pam == 'true')
906 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200907 have = libpam.found() and libpam_misc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400908else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200909 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400910 libpam = []
911 libpam_misc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400912endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200913conf.set10('HAVE_PAM', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400914
915want_microhttpd = get_option('microhttpd')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500916if want_microhttpd != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400917 libmicrohttpd = dependency('libmicrohttpd',
918 version : '>= 0.9.33',
919 required : want_microhttpd == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200920 have = libmicrohttpd.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400921else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200922 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400923 libmicrohttpd = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400924endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200925conf.set10('HAVE_MICROHTTPD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400926
927want_libcryptsetup = get_option('libcryptsetup')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500928if want_libcryptsetup != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400929 libcryptsetup = dependency('libcryptsetup',
930 version : '>= 1.6.0',
931 required : want_libcryptsetup == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200932 have = libcryptsetup.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400933else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200934 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400935 libcryptsetup = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400936endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200937conf.set10('HAVE_LIBCRYPTSETUP', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400938
939want_libcurl = get_option('libcurl')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500940if want_libcurl != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400941 libcurl = dependency('libcurl',
942 version : '>= 7.32.0',
943 required : want_libcurl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200944 have = libcurl.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400945else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200946 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400947 libcurl = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400948endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200949conf.set10('HAVE_LIBCURL', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400950
951want_libidn = get_option('libidn')
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -0400952want_libidn2 = get_option('libidn2')
953if want_libidn == 'true' and want_libidn2 == 'true'
954 error('libidn and libidn2 cannot be requested simultaneously')
955endif
956
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500957if want_libidn != 'false' and want_libidn2 != 'true' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400958 libidn = dependency('libidn',
959 required : want_libidn == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200960 have = libidn.found()
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -0400961else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200962 have = false
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -0400963 libidn = []
964endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200965conf.set10('HAVE_LIBIDN', have)
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500966if not have and want_libidn2 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -0400967 # libidn is used for both libidn and libidn2 objects
968 libidn = dependency('libidn2',
969 required : want_libidn2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200970 have = libidn.found()
971else
972 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400973endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200974conf.set10('HAVE_LIBIDN2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400975
976want_libiptc = get_option('libiptc')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500977if want_libiptc != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400978 libiptc = dependency('libiptc',
979 required : want_libiptc == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200980 have = libiptc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400981else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200982 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400983 libiptc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400984endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200985conf.set10('HAVE_LIBIPTC', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400986
987want_qrencode = get_option('qrencode')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500988if want_qrencode != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400989 libqrencode = dependency('libqrencode',
990 required : want_qrencode == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200991 have = libqrencode.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400992else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200993 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400994 libqrencode = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400995endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200996conf.set10('HAVE_QRENCODE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400997
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -0400998want_gcrypt = get_option('gcrypt')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500999if want_gcrypt != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001000 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1001 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001002 have = libgcrypt.found() and libgpg_error.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001003else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001004 have = false
1005endif
1006if not have
1007 # link to neither of the libs if one is not found
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001008 libgcrypt = []
1009 libgpg_error = []
1010endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001011conf.set10('HAVE_GCRYPT', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001012
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001013want_gnutls = get_option('gnutls')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001014if want_gnutls != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001015 libgnutls = dependency('gnutls',
1016 version : '>= 3.1.4',
1017 required : want_gnutls == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001018 have = libgnutls.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001019else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001020 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001021 libgnutls = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001022endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001023conf.set10('HAVE_GNUTLS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001024
1025want_elfutils = get_option('elfutils')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001026if want_elfutils != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001027 libdw = dependency('libdw',
1028 required : want_elfutils == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001029 have = libdw.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001030else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001031 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001032 libdw = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001033endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001034conf.set10('HAVE_ELFUTILS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001035
1036want_zlib = get_option('zlib')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001037if want_zlib != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001038 libz = dependency('zlib',
1039 required : want_zlib == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001040 have = libz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001041else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001042 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001043 libz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001044endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001045conf.set10('HAVE_ZLIB', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001046
1047want_bzip2 = get_option('bzip2')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001048if want_bzip2 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001049 libbzip2 = cc.find_library('bz2',
1050 required : want_bzip2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001051 have = libbzip2.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001052else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001053 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001054 libbzip2 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001055endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001056conf.set10('HAVE_BZIP2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001057
1058want_xz = get_option('xz')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001059if want_xz != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001060 libxz = dependency('liblzma',
1061 required : want_xz == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001062 have = libxz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001063else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001064 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001065 libxz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001066endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001067conf.set10('HAVE_XZ', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001068
1069want_lz4 = get_option('lz4')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001070if want_lz4 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001071 liblz4 = dependency('liblz4',
1072 required : want_lz4 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001073 have = liblz4.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001074else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001075 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001076 liblz4 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001077endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001078conf.set10('HAVE_LZ4', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001079
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001080want_xkbcommon = get_option('xkbcommon')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001081if want_xkbcommon != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001082 libxkbcommon = dependency('xkbcommon',
1083 version : '>= 0.3.0',
1084 required : want_xkbcommon == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001085 have = libxkbcommon.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001086else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001087 have = false
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001088 libxkbcommon = []
1089endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001090conf.set10('HAVE_XKBCOMMON', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001091
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01001092want_pcre2 = get_option('pcre2')
1093if want_pcre2 != 'false'
1094 libpcre2 = dependency('libpcre2-8',
1095 required : want_pcre2 == 'true')
1096 have = libpcre2.found()
1097else
1098 have = false
1099 libpcre2 = []
1100endif
1101conf.set10('HAVE_PCRE2', have)
1102
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001103want_glib = get_option('glib')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001104if want_glib != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001105 libglib = dependency('glib-2.0',
1106 version : '>= 2.22.0',
1107 required : want_glib == 'true')
1108 libgobject = dependency('gobject-2.0',
1109 version : '>= 2.22.0',
1110 required : want_glib == 'true')
1111 libgio = dependency('gio-2.0',
1112 required : want_glib == 'true')
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -04001113 have = libglib.found() and libgobject.found() and libgio.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001114else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001115 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001116 libglib = []
1117 libgobject = []
1118 libgio = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001119endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001120conf.set10('HAVE_GLIB', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001121
1122want_dbus = get_option('dbus')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001123if want_dbus != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001124 libdbus = dependency('dbus-1',
1125 version : '>= 1.3.2',
1126 required : want_dbus == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001127 have = libdbus.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001128else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001129 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001130 libdbus = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001131endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001132conf.set10('HAVE_DBUS', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001133
Yu Watanabe42303dc2017-06-18 05:22:32 +09001134default_dnssec = get_option('default-dnssec')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001135if fuzzer_build
Jonathan Rudenbergb4081f32018-01-15 18:27:37 -05001136 default_dnssec = 'no'
1137endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001138if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
Yu Watanabe42303dc2017-06-18 05:22:32 +09001139 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1140 default_dnssec = 'no'
1141endif
1142conf.set('DEFAULT_DNSSEC_MODE',
1143 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1144substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1145
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001146dns_over_tls = get_option('dns-over-tls')
1147if dns_over_tls != 'false'
Yu Watanabe48f5da12018-06-28 16:09:04 +09001148 have = (conf.get('HAVE_GNUTLS') == 1 and
1149 libgnutls.version().version_compare('>=3.5.3'))
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001150 if dns_over_tls == 'true' and not have
1151 error('DNS-over-TLS support was requested, but dependencies are not available')
1152 endif
1153else
1154 have = false
1155endif
1156conf.set10('ENABLE_DNS_OVER_TLS', have)
1157
Iwan Timmerc9299be2018-06-13 20:26:24 +02001158default_dns_over_tls = get_option('default-dns-over-tls')
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001159if fuzzer_build
Iwan Timmerc9299be2018-06-13 20:26:24 +02001160 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001161endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001162if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
1163 message('default-dns-over-tls cannot be set to opportunistic when DNS-over-TLS support is disabled. Setting default-dns-over-tls to no.')
Iwan Timmerc9299be2018-06-13 20:26:24 +02001164 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001165endif
Iwan Timmerc9299be2018-06-13 20:26:24 +02001166conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1167 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1168substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001169
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001170want_importd = get_option('importd')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001171if want_importd != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001172 have = (conf.get('HAVE_LIBCURL') == 1 and
1173 conf.get('HAVE_ZLIB') == 1 and
1174 conf.get('HAVE_BZIP2') == 1 and
1175 conf.get('HAVE_XZ') == 1 and
1176 conf.get('HAVE_GCRYPT') == 1)
1177 if want_importd == 'true' and not have
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001178 error('importd support was requested, but dependencies are not available')
1179 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001180else
1181 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001182endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001183conf.set10('ENABLE_IMPORTD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001184
1185want_remote = get_option('remote')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001186if want_remote != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001187 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1188 conf.get('HAVE_LIBCURL') == 1]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001189 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1190 # it's possible to build one without the other. Complain only if
1191 # support was explictly requested. The auxiliary files like sysusers
1192 # config should be installed when any of the programs are built.
1193 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1194 error('remote support was requested, but dependencies are not available')
1195 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001196 have = have_deps[0] or have_deps[1]
1197else
1198 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001199endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001200conf.set10('ENABLE_REMOTE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001201
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001202foreach term : ['utmp',
1203 'hibernate',
1204 'environment-d',
1205 'binfmt',
1206 'coredump',
1207 'resolve',
1208 'logind',
1209 'hostnamed',
1210 'localed',
1211 'machined',
Lennart Poettering61d05782018-04-16 21:41:40 +02001212 'portabled',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001213 'networkd',
1214 'timedated',
1215 'timesyncd',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001216 'firstboot',
1217 'randomseed',
1218 'backlight',
1219 'vconsole',
1220 'quotacheck',
1221 'sysusers',
1222 'tmpfiles',
1223 'hwdb',
1224 'rfkill',
1225 'ldconfig',
1226 'efi',
1227 'tpm',
1228 'ima',
1229 'smack',
1230 'gshadow',
1231 'idn',
Yu Watanabe08540a92018-07-18 09:25:57 +09001232 'nss-myhostname',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001233 'nss-systemd']
1234 have = get_option(term)
1235 name = 'ENABLE_' + term.underscorify().to_upper()
1236 conf.set10(name, have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001237endforeach
1238
Yu Watanabe08540a92018-07-18 09:25:57 +09001239foreach tuple : [['nss-mymachines', 'machined'],
1240 ['nss-resolve', 'resolve']]
1241 want = get_option(tuple[0])
1242 if want != 'false'
1243 have = get_option(tuple[1])
1244 if want == 'true' and not have
1245 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1246 endif
1247 else
1248 have = false
1249 endif
1250 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1251 conf.set10(name, have)
1252endforeach
1253
1254enable_nss = false
1255foreach term : ['ENABLE_NSS_MYHOSTNAME',
1256 'ENABLE_NSS_MYMACHINES',
1257 'ENABLE_NSS_RESOLVE',
1258 'ENABLE_NSS_SYSTEMD']
1259 if conf.get(term) == 1
1260 enable_nss = true
1261 endif
1262endforeach
1263conf.set10('ENABLE_NSS', enable_nss)
1264
Yu Watanabe348b4432018-05-07 18:17:35 +09001265conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
Yu Watanabe6129ec82018-05-03 18:07:43 +09001266
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001267want_tests = get_option('tests')
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04001268install_tests = get_option('install-tests')
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11001269slow_tests = get_option('slow-tests')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001270tests = []
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001271fuzzers = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001272
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11001273conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
Zbigniew Jędrzejewski-Szmek00d82c82017-07-12 21:25:17 +00001274
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001275#####################################################################
1276
1277if get_option('efi')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001278 efi_arch = host_machine.cpu_family()
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001279
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001280 if efi_arch == 'x86'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001281 EFI_MACHINE_TYPE_NAME = 'ia32'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001282 gnu_efi_arch = 'ia32'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001283 elif efi_arch == 'x86_64'
1284 EFI_MACHINE_TYPE_NAME = 'x64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001285 gnu_efi_arch = 'x86_64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001286 elif efi_arch == 'arm'
1287 EFI_MACHINE_TYPE_NAME = 'arm'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001288 gnu_efi_arch = 'arm'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001289 elif efi_arch == 'aarch64'
1290 EFI_MACHINE_TYPE_NAME = 'aa64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001291 gnu_efi_arch = 'aarch64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001292 else
1293 EFI_MACHINE_TYPE_NAME = ''
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001294 gnu_efi_arch = ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001295 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001296
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001297 have = true
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001298 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
Zbigniew Jędrzejewski-Szmek80c6fce2017-04-24 19:28:04 -04001299
Yu Watanabeac093402018-05-10 16:04:16 +09001300 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001301else
1302 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001303endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001304conf.set10('ENABLE_EFI', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001305
1306#####################################################################
1307
1308config_h = configure_file(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001309 output : 'config.h',
1310 configuration : conf)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001311
Yu Watanabe348b4432018-05-07 18:17:35 +09001312meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1313
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001314includes = include_directories('src/basic',
1315 'src/shared',
1316 'src/systemd',
1317 'src/journal',
Zbigniew Jędrzejewski-Szmeka38f7fe2018-05-16 12:05:07 +02001318 'src/journal-remote',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02001319 'src/nspawn',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001320 'src/resolve',
1321 'src/timesync',
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05001322 'src/time-wait-sync',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001323 'src/login',
1324 'src/udev',
1325 'src/libudev',
1326 'src/core',
1327 'src/libsystemd/sd-bus',
1328 'src/libsystemd/sd-device',
1329 'src/libsystemd/sd-hwdb',
1330 'src/libsystemd/sd-id128',
1331 'src/libsystemd/sd-netlink',
1332 'src/libsystemd/sd-network',
1333 'src/libsystemd-network',
Zbigniew Jędrzejewski-Szmek2d4ceca2017-12-19 14:19:46 +01001334 '.')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001335
1336add_project_arguments('-include', 'config.h', language : 'c')
1337
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001338subdir('po')
1339subdir('catalog')
1340subdir('src/systemd')
1341subdir('src/basic')
1342subdir('src/libsystemd')
1343subdir('src/libsystemd-network')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001344subdir('src/journal')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001345subdir('src/login')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001346
1347libjournal_core = static_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001348 'journal-core',
1349 libjournal_core_sources,
1350 journald_gperf_c,
1351 include_directories : includes,
1352 install : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001353
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04001354libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001355libsystemd = shared_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001356 'systemd',
Zbigniew Jędrzejewski-Szmek7f1ea2c2017-12-20 09:12:08 +01001357 'src/systemd/sd-id128.h', # pick a header file at random to work around old meson bug
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +02001358 version : libsystemd_version,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001359 include_directories : includes,
1360 link_args : ['-shared',
1361 '-Wl,--version-script=' + libsystemd_sym_path],
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001362 link_with : [libbasic,
1363 libbasic_gcrypt],
Zbigniew Jędrzejewski-Szmek5e3cec82017-12-19 19:38:43 +01001364 link_whole : [libsystemd_static,
1365 libjournal_client],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001366 dependencies : [threads,
1367 librt,
1368 libxz,
1369 liblz4],
1370 link_depends : libsystemd_sym,
1371 install : true,
1372 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001373
Davide Cavalca70848ec2018-04-09 02:43:35 -07001374static_libsystemd = get_option('static-libsystemd')
1375static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1376
1377install_libsystemd_static = static_library(
1378 'systemd',
1379 libsystemd_sources,
1380 journal_client_sources,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001381 basic_sources,
1382 basic_gcrypt_sources,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001383 include_directories : includes,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001384 build_by_default : static_libsystemd != 'false',
1385 install : static_libsystemd != 'false',
1386 install_dir : rootlibdir,
1387 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1388 dependencies : [threads,
1389 librt,
1390 libxz,
1391 liblz4,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001392 libcap,
1393 libblkid,
1394 libmount,
1395 libselinux,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001396 libgcrypt],
1397 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1398
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001399############################################################
1400
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001401# binaries that have --help and are intended for use by humans,
1402# usually, but not always, installed in /bin.
1403public_programs = []
1404
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001405subdir('src/libudev')
1406subdir('src/shared')
1407subdir('src/core')
1408subdir('src/udev')
1409subdir('src/network')
1410
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001411subdir('src/analyze')
1412subdir('src/journal-remote')
1413subdir('src/coredump')
1414subdir('src/hostname')
1415subdir('src/import')
1416subdir('src/kernel-install')
1417subdir('src/locale')
1418subdir('src/machine')
Lennart Poettering61d05782018-04-16 21:41:40 +02001419subdir('src/portable')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001420subdir('src/nspawn')
1421subdir('src/resolve')
1422subdir('src/timedate')
1423subdir('src/timesync')
1424subdir('src/vconsole')
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001425subdir('src/boot/efi')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001426
1427subdir('src/test')
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001428subdir('src/fuzz')
Zbigniew Jędrzejewski-Szmek6b97bf22017-11-22 12:42:28 +01001429subdir('rules')
Zbigniew Jędrzejewski-Szmek4ff3f252017-04-13 20:47:20 -04001430subdir('test')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001431
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001432############################################################
1433
1434# only static linking apart from libdl, to make sure that the
1435# module is linked to all libraries that it uses.
1436test_dlopen = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001437 'test-dlopen',
1438 test_dlopen_c,
1439 include_directories : includes,
1440 link_with : [libbasic],
1441 dependencies : [libdl])
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001442
Yu Watanabe08540a92018-07-18 09:25:57 +09001443foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
Waldemar Brodkorbe7e11bb2017-06-24 19:30:26 +02001444 ['systemd', 'ENABLE_NSS_SYSTEMD'],
Yu Watanabe08540a92018-07-18 09:25:57 +09001445 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1446 ['resolve', 'ENABLE_NSS_RESOLVE']]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001447
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001448 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001449 if condition
1450 module = tuple[0]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001451
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001452 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
1453 version_script_arg = join_paths(meson.current_source_dir(), sym)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001454
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001455 nss = shared_library(
1456 'nss_' + module,
1457 'src/nss-@0@/nss-@0@.c'.format(module),
1458 version : '2',
1459 include_directories : includes,
Lennart Poetteringb4b36f42017-12-12 20:13:16 +01001460 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1461 link_args : ['-Wl,-z,nodelete',
1462 '-shared',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001463 '-Wl,--version-script=' + version_script_arg,
1464 '-Wl,--undefined'],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001465 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001466 libbasic],
1467 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek5486a312017-05-12 08:31:46 -04001468 librt],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001469 link_depends : sym,
1470 install : true,
1471 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001472
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001473 # We cannot use shared_module because it does not support version suffix.
1474 # Unfortunately shared_library insists on creating the symlink…
1475 meson.add_install_script('sh', '-c',
1476 'rm $DESTDIR@0@/libnss_@1@.so'
1477 .format(rootlibdir, module))
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001478
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001479 test('dlopen-nss_' + module,
1480 test_dlopen,
1481 args : [nss.full_path()]) # path to dlopen must include a slash
1482 endif
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001483endforeach
1484
1485############################################################
1486
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001487executable('systemd',
1488 systemd_sources,
1489 include_directories : includes,
1490 link_with : [libcore,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001491 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001492 dependencies : [threads,
1493 librt,
1494 libseccomp,
1495 libselinux,
Zbigniew Jędrzejewski-Szmekf4ee10a2017-04-09 14:08:53 -04001496 libmount,
1497 libblkid],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001498 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001499 install : true,
1500 install_dir : rootlibexecdir)
1501
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001502meson.add_install_script(meson_make_symlink,
1503 join_paths(rootlibexecdir, 'systemd'),
1504 join_paths(rootsbindir, 'init'))
1505
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001506exe = executable('systemd-analyze',
1507 systemd_analyze_sources,
1508 include_directories : includes,
1509 link_with : [libcore,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001510 libshared],
1511 dependencies : [threads,
1512 librt,
1513 libseccomp,
1514 libselinux,
1515 libmount,
1516 libblkid],
1517 install_rpath : rootlibexecdir,
1518 install : true)
1519public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001520
1521executable('systemd-journald',
1522 systemd_journald_sources,
1523 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001524 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001525 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001526 dependencies : [threads,
1527 libxz,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001528 liblz4,
1529 libselinux],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001530 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001531 install : true,
1532 install_dir : rootlibexecdir)
1533
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001534exe = executable('systemd-cat',
1535 systemd_cat_sources,
1536 include_directories : includes,
1537 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001538 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001539 dependencies : [threads],
1540 install_rpath : rootlibexecdir,
1541 install : true)
1542public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001543
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001544exe = executable('journalctl',
1545 journalctl_sources,
1546 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001547 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001548 dependencies : [threads,
1549 libqrencode,
1550 libxz,
Zbigniew Jędrzejewski-Szmek6becf482018-01-12 07:55:45 +01001551 liblz4,
1552 libpcre2],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001553 install_rpath : rootlibexecdir,
1554 install : true,
1555 install_dir : rootbindir)
1556public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001557
1558executable('systemd-getty-generator',
1559 'src/getty-generator/getty-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001560 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001561 link_with : [libshared],
1562 install_rpath : rootlibexecdir,
1563 install : true,
1564 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001565
1566executable('systemd-debug-generator',
1567 'src/debug-generator/debug-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001568 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001569 link_with : [libshared],
1570 install_rpath : rootlibexecdir,
1571 install : true,
1572 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001573
1574executable('systemd-fstab-generator',
1575 'src/fstab-generator/fstab-generator.c',
1576 'src/core/mount-setup.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001577 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001578 link_with : [libshared],
1579 install_rpath : rootlibexecdir,
1580 install : true,
1581 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001582
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001583if conf.get('ENABLE_ENVIRONMENT_D') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001584 executable('30-systemd-environment-d-generator',
1585 'src/environment-d-generator/environment-d-generator.c',
1586 include_directories : includes,
1587 link_with : [libshared],
1588 install_rpath : rootlibexecdir,
1589 install : true,
1590 install_dir : userenvgeneratordir)
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04001591
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001592 meson.add_install_script(meson_make_symlink,
1593 join_paths(sysconfdir, 'environment'),
1594 join_paths(environmentdir, '99-environment.conf'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001595endif
1596
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001597if conf.get('ENABLE_HIBERNATE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001598 executable('systemd-hibernate-resume-generator',
1599 'src/hibernate-resume/hibernate-resume-generator.c',
1600 include_directories : includes,
1601 link_with : [libshared],
1602 install_rpath : rootlibexecdir,
1603 install : true,
1604 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001605
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001606 executable('systemd-hibernate-resume',
1607 'src/hibernate-resume/hibernate-resume.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001608 include_directories : includes,
1609 link_with : [libshared],
1610 install_rpath : rootlibexecdir,
1611 install : true,
1612 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001613endif
1614
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001615if conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001616 executable('systemd-gpt-auto-generator',
1617 'src/gpt-auto-generator/gpt-auto-generator.c',
1618 'src/basic/blkid-util.h',
1619 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001620 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001621 dependencies : libblkid,
1622 install_rpath : rootlibexecdir,
1623 install : true,
1624 install_dir : systemgeneratordir)
1625
1626 exe = executable('systemd-dissect',
1627 'src/dissect/dissect.c',
1628 include_directories : includes,
1629 link_with : [libshared],
1630 install_rpath : rootlibexecdir,
1631 install : true,
1632 install_dir : rootlibexecdir)
1633 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001634endif
1635
Zbigniew Jędrzejewski-Szmek1ec57f32017-10-03 13:12:29 +02001636if conf.get('ENABLE_RESOLVE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001637 executable('systemd-resolved',
1638 systemd_resolved_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001639 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001640 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001641 libbasic_gcrypt,
1642 libsystemd_resolve_core],
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001643 dependencies : systemd_resolved_dependencies,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001644 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001645 install : true,
1646 install_dir : rootlibexecdir)
1647
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001648 exe = executable('resolvectl',
1649 resolvectl_sources,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001650 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001651 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001652 libbasic_gcrypt,
1653 libsystemd_resolve_core],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001654 dependencies : [threads,
Michael Biebl76c87412017-04-21 23:45:54 +02001655 libgpg_error,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001656 libm,
1657 libidn],
1658 install_rpath : rootlibexecdir,
1659 install : true)
1660 public_programs += [exe]
Lennart Poettering088c1362018-02-27 17:48:54 +01001661
1662 meson.add_install_script(meson_make_symlink,
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001663 join_paths(bindir, 'resolvectl'),
Lennart Poettering088c1362018-02-27 17:48:54 +01001664 join_paths(rootsbindir, 'resolvconf'))
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001665
1666 meson.add_install_script(meson_make_symlink,
1667 join_paths(bindir, 'resolvectl'),
1668 join_paths(bindir, 'systemd-resolve'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001669endif
1670
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001671if conf.get('ENABLE_LOGIND') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001672 executable('systemd-logind',
1673 systemd_logind_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001674 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001675 link_with : [liblogind_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001676 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001677 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001678 libacl],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001679 install_rpath : rootlibexecdir,
1680 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001681 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001682
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001683 exe = executable('loginctl',
1684 loginctl_sources,
1685 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001686 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001687 dependencies : [threads,
1688 liblz4,
1689 libxz],
1690 install_rpath : rootlibexecdir,
1691 install : true,
1692 install_dir : rootbindir)
1693 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001694
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001695 exe = executable('systemd-inhibit',
1696 'src/login/inhibit.c',
1697 include_directories : includes,
1698 link_with : [libshared],
1699 install_rpath : rootlibexecdir,
1700 install : true,
1701 install_dir : rootbindir)
1702 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001703
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001704 if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001705 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym)
1706 pam_systemd = shared_library(
1707 'pam_systemd',
1708 pam_systemd_c,
1709 name_prefix : '',
1710 include_directories : includes,
1711 link_args : ['-shared',
1712 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001713 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001714 libshared_static],
1715 dependencies : [threads,
1716 libpam,
1717 libpam_misc],
1718 link_depends : pam_systemd_sym,
1719 install : true,
1720 install_dir : pamlibdir)
1721
1722 test('dlopen-pam_systemd',
1723 test_dlopen,
1724 args : [pam_systemd.full_path()]) # path to dlopen must include a slash
1725 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001726endif
1727
Zbigniew Jędrzejewski-Szmeka9f0f5e2017-12-09 19:30:17 +01001728executable('systemd-user-runtime-dir',
1729 user_runtime_dir_sources,
1730 include_directories : includes,
1731 link_with : [libshared, liblogind_core],
1732 install_rpath : rootlibexecdir,
1733 install : true,
1734 install_dir : rootlibexecdir)
1735
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001736if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001737 executable('systemd-user-sessions',
1738 'src/user-sessions/user-sessions.c',
1739 include_directories : includes,
1740 link_with : [libshared],
1741 install_rpath : rootlibexecdir,
1742 install : true,
1743 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001744endif
1745
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001746if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001747 exe = executable('bootctl',
1748 'src/boot/bootctl.c',
1749 include_directories : includes,
1750 link_with : [libshared],
1751 dependencies : [libblkid],
1752 install_rpath : rootlibexecdir,
1753 install : true)
1754 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001755endif
1756
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001757exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1758 include_directories : includes,
1759 link_with : [libshared],
1760 dependencies : [threads],
1761 install_rpath : rootlibexecdir,
1762 install : true)
1763public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001764
Felipe Satelerf3794362018-05-22 15:08:57 -04001765
1766if get_option('link-systemctl-shared')
1767 systemctl_link_with = [libshared]
1768else
1769 systemctl_link_with = [libsystemd_static,
1770 libshared_static,
1771 libjournal_client,
1772 libbasic_gcrypt]
1773endif
1774
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001775exe = executable('systemctl', 'src/systemctl/systemctl.c',
1776 include_directories : includes,
Felipe Satelerf3794362018-05-22 15:08:57 -04001777 link_with : systemctl_link_with,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001778 dependencies : [threads,
1779 libcap,
1780 libselinux,
1781 libxz,
1782 liblz4],
1783 install_rpath : rootlibexecdir,
1784 install : true,
1785 install_dir : rootbindir)
1786public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001787
Lennart Poettering61d05782018-04-16 21:41:40 +02001788if conf.get('ENABLE_PORTABLED') == 1
1789 executable('systemd-portabled',
1790 systemd_portabled_sources,
1791 include_directories : includes,
1792 link_with : [libshared],
1793 dependencies : [threads],
1794 install_rpath : rootlibexecdir,
1795 install : true,
1796 install_dir : rootlibexecdir)
1797
1798 exe = executable('portablectl', 'src/portable/portablectl.c',
1799 include_directories : includes,
1800 link_with : [libshared],
1801 dependencies : [threads],
1802 install_rpath : rootlibexecdir,
1803 install : true,
1804 install_dir : rootlibexecdir)
1805 public_programs += [exe]
1806endif
1807
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001808foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1809 meson.add_install_script(meson_make_symlink,
1810 join_paths(rootbindir, 'systemctl'),
1811 join_paths(rootsbindir, alias))
1812endforeach
1813
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001814if conf.get('ENABLE_BACKLIGHT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001815 executable('systemd-backlight',
1816 'src/backlight/backlight.c',
1817 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001818 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001819 install_rpath : rootlibexecdir,
1820 install : true,
1821 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001822endif
1823
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001824if conf.get('ENABLE_RFKILL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001825 executable('systemd-rfkill',
1826 'src/rfkill/rfkill.c',
1827 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001828 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001829 install_rpath : rootlibexecdir,
1830 install : true,
1831 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001832endif
1833
1834executable('systemd-system-update-generator',
1835 'src/system-update-generator/system-update-generator.c',
1836 include_directories : includes,
1837 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001838 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001839 install : true,
1840 install_dir : systemgeneratordir)
1841
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001842if conf.get('HAVE_LIBCRYPTSETUP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001843 executable('systemd-cryptsetup',
1844 'src/cryptsetup/cryptsetup.c',
1845 include_directories : includes,
1846 link_with : [libshared],
1847 dependencies : [libcryptsetup],
1848 install_rpath : rootlibexecdir,
1849 install : true,
1850 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001851
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001852 executable('systemd-cryptsetup-generator',
1853 'src/cryptsetup/cryptsetup-generator.c',
1854 include_directories : includes,
1855 link_with : [libshared],
1856 dependencies : [libcryptsetup],
1857 install_rpath : rootlibexecdir,
1858 install : true,
1859 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001860
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001861 executable('systemd-veritysetup',
1862 'src/veritysetup/veritysetup.c',
1863 include_directories : includes,
1864 link_with : [libshared],
1865 dependencies : [libcryptsetup],
1866 install_rpath : rootlibexecdir,
1867 install : true,
1868 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001869
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001870 executable('systemd-veritysetup-generator',
1871 'src/veritysetup/veritysetup-generator.c',
1872 include_directories : includes,
1873 link_with : [libshared],
1874 dependencies : [libcryptsetup],
1875 install_rpath : rootlibexecdir,
1876 install : true,
1877 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001878endif
1879
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001880if conf.get('HAVE_SYSV_COMPAT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001881 executable('systemd-sysv-generator',
1882 'src/sysv-generator/sysv-generator.c',
1883 include_directories : includes,
1884 link_with : [libshared],
1885 install_rpath : rootlibexecdir,
1886 install : true,
1887 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001888
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001889 executable('systemd-rc-local-generator',
1890 'src/rc-local-generator/rc-local-generator.c',
1891 include_directories : includes,
1892 link_with : [libshared],
1893 install_rpath : rootlibexecdir,
1894 install : true,
1895 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001896endif
1897
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001898if conf.get('ENABLE_HOSTNAMED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001899 executable('systemd-hostnamed',
1900 'src/hostname/hostnamed.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001901 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001902 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001903 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001904 install : true,
1905 install_dir : rootlibexecdir)
1906
1907 exe = executable('hostnamectl',
1908 'src/hostname/hostnamectl.c',
1909 include_directories : includes,
1910 link_with : [libshared],
1911 install_rpath : rootlibexecdir,
1912 install : true)
1913 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001914endif
1915
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001916if conf.get('ENABLE_LOCALED') == 1
1917 if conf.get('HAVE_XKBCOMMON') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001918 # logind will load libxkbcommon.so dynamically on its own
1919 deps = [libdl]
1920 else
1921 deps = []
1922 endif
Zbigniew Jędrzejewski-Szmek1eeb43f2017-04-13 19:37:14 -04001923
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001924 executable('systemd-localed',
1925 systemd_localed_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001926 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001927 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001928 dependencies : deps,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001929 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001930 install : true,
1931 install_dir : rootlibexecdir)
1932
1933 exe = executable('localectl',
1934 localectl_sources,
1935 include_directories : includes,
1936 link_with : [libshared],
1937 install_rpath : rootlibexecdir,
1938 install : true)
1939 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001940endif
1941
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001942if conf.get('ENABLE_TIMEDATED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001943 executable('systemd-timedated',
1944 'src/timedate/timedated.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001945 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001946 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001947 install_rpath : rootlibexecdir,
1948 install : true,
1949 install_dir : rootlibexecdir)
Yu Watanabe6129ec82018-05-03 18:07:43 +09001950endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001951
Yu Watanabe6129ec82018-05-03 18:07:43 +09001952if conf.get('ENABLE_TIMEDATECTL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001953 exe = executable('timedatectl',
1954 'src/timedate/timedatectl.c',
1955 include_directories : includes,
1956 install_rpath : rootlibexecdir,
1957 link_with : [libshared],
Yu Watanabe6129ec82018-05-03 18:07:43 +09001958 dependencies : [libm],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001959 install : true)
1960 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001961endif
1962
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001963if conf.get('ENABLE_TIMESYNCD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001964 executable('systemd-timesyncd',
1965 systemd_timesyncd_sources,
1966 include_directories : includes,
1967 link_with : [libshared],
1968 dependencies : [threads,
1969 libm],
1970 install_rpath : rootlibexecdir,
1971 install : true,
1972 install_dir : rootlibexecdir)
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05001973
1974 executable('systemd-time-wait-sync',
1975 'src/time-wait-sync/time-wait-sync.c',
1976 include_directories : includes,
1977 link_with : [libshared],
1978 install_rpath : rootlibexecdir,
1979 install : true,
1980 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001981endif
1982
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001983if conf.get('ENABLE_MACHINED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001984 executable('systemd-machined',
1985 systemd_machined_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001986 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001987 link_with : [libmachine_core,
1988 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001989 install_rpath : rootlibexecdir,
1990 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001991 install_dir : rootlibexecdir)
1992
1993 exe = executable('machinectl',
1994 'src/machine/machinectl.c',
1995 include_directories : includes,
1996 link_with : [libshared],
1997 dependencies : [threads,
1998 libxz,
1999 liblz4],
2000 install_rpath : rootlibexecdir,
2001 install : true,
2002 install_dir : rootbindir)
2003 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002004endif
2005
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002006if conf.get('ENABLE_IMPORTD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002007 executable('systemd-importd',
2008 systemd_importd_sources,
2009 include_directories : includes,
2010 link_with : [libshared],
2011 dependencies : [threads],
2012 install_rpath : rootlibexecdir,
2013 install : true,
2014 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002015
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002016 systemd_pull = executable('systemd-pull',
2017 systemd_pull_sources,
2018 include_directories : includes,
2019 link_with : [libshared],
2020 dependencies : [libcurl,
2021 libz,
2022 libbzip2,
2023 libxz,
2024 libgcrypt],
2025 install_rpath : rootlibexecdir,
2026 install : true,
2027 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002028
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002029 systemd_import = executable('systemd-import',
2030 systemd_import_sources,
2031 include_directories : includes,
2032 link_with : [libshared],
2033 dependencies : [libcurl,
2034 libz,
2035 libbzip2,
2036 libxz],
2037 install_rpath : rootlibexecdir,
2038 install : true,
2039 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002040
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002041 systemd_export = executable('systemd-export',
2042 systemd_export_sources,
2043 include_directories : includes,
2044 link_with : [libshared],
2045 dependencies : [libcurl,
2046 libz,
2047 libbzip2,
2048 libxz],
2049 install_rpath : rootlibexecdir,
2050 install : true,
2051 install_dir : rootlibexecdir)
2052 public_programs += [systemd_pull, systemd_import, systemd_export]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002053endif
2054
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002055if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002056 exe = executable('systemd-journal-upload',
2057 systemd_journal_upload_sources,
2058 include_directories : includes,
2059 link_with : [libshared],
2060 dependencies : [threads,
2061 libcurl,
2062 libgnutls,
2063 libxz,
2064 liblz4],
2065 install_rpath : rootlibexecdir,
2066 install : true,
2067 install_dir : rootlibexecdir)
2068 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002069endif
2070
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002071if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002072 s_j_remote = executable('systemd-journal-remote',
2073 systemd_journal_remote_sources,
2074 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc064d8d2018-05-16 10:21:58 +02002075 link_with : [libshared,
2076 libsystemd_journal_remote],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002077 dependencies : [threads,
2078 libmicrohttpd,
2079 libgnutls,
2080 libxz,
2081 liblz4],
2082 install_rpath : rootlibexecdir,
2083 install : true,
2084 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002085
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002086 s_j_gatewayd = executable('systemd-journal-gatewayd',
2087 systemd_journal_gatewayd_sources,
2088 include_directories : includes,
2089 link_with : [libshared],
2090 dependencies : [threads,
2091 libmicrohttpd,
2092 libgnutls,
2093 libxz,
2094 liblz4],
2095 install_rpath : rootlibexecdir,
2096 install : true,
2097 install_dir : rootlibexecdir)
2098 public_programs += [s_j_remote, s_j_gatewayd]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002099endif
2100
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002101if conf.get('ENABLE_COREDUMP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002102 executable('systemd-coredump',
2103 systemd_coredump_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002104 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002105 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002106 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002107 libacl,
2108 libdw,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002109 libxz,
2110 liblz4],
2111 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002112 install : true,
2113 install_dir : rootlibexecdir)
2114
2115 exe = executable('coredumpctl',
2116 coredumpctl_sources,
2117 include_directories : includes,
2118 link_with : [libshared],
2119 dependencies : [threads,
2120 libxz,
2121 liblz4],
2122 install_rpath : rootlibexecdir,
2123 install : true)
2124 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002125endif
2126
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002127if conf.get('ENABLE_BINFMT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002128 exe = executable('systemd-binfmt',
2129 'src/binfmt/binfmt.c',
2130 include_directories : includes,
2131 link_with : [libshared],
2132 install_rpath : rootlibexecdir,
2133 install : true,
2134 install_dir : rootlibexecdir)
2135 public_programs += [exe]
2136
2137 meson.add_install_script('sh', '-c',
2138 mkdir_p.format(binfmtdir))
2139 meson.add_install_script('sh', '-c',
2140 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2141endif
2142
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002143if conf.get('ENABLE_VCONSOLE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002144 executable('systemd-vconsole-setup',
2145 'src/vconsole/vconsole-setup.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002146 include_directories : includes,
2147 link_with : [libshared],
2148 install_rpath : rootlibexecdir,
2149 install : true,
2150 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002151endif
2152
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002153if conf.get('ENABLE_RANDOMSEED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002154 executable('systemd-random-seed',
2155 'src/random-seed/random-seed.c',
2156 include_directories : includes,
2157 link_with : [libshared],
2158 install_rpath : rootlibexecdir,
2159 install : true,
2160 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002161endif
2162
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002163if conf.get('ENABLE_FIRSTBOOT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002164 executable('systemd-firstboot',
2165 'src/firstboot/firstboot.c',
2166 include_directories : includes,
2167 link_with : [libshared],
2168 dependencies : [libcrypt],
2169 install_rpath : rootlibexecdir,
2170 install : true,
2171 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002172endif
2173
2174executable('systemd-remount-fs',
2175 'src/remount-fs/remount-fs.c',
2176 'src/core/mount-setup.c',
2177 'src/core/mount-setup.h',
2178 include_directories : includes,
2179 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002180 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002181 install : true,
2182 install_dir : rootlibexecdir)
2183
2184executable('systemd-machine-id-setup',
2185 'src/machine-id-setup/machine-id-setup-main.c',
2186 'src/core/machine-id-setup.c',
2187 'src/core/machine-id-setup.h',
2188 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002189 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002190 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002191 install : true,
2192 install_dir : rootbindir)
2193
2194executable('systemd-fsck',
2195 'src/fsck/fsck.c',
2196 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002197 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002198 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002199 install : true,
2200 install_dir : rootlibexecdir)
2201
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002202executable('systemd-growfs',
2203 'src/partition/growfs.c',
2204 include_directories : includes,
2205 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekc34b75a2017-11-21 18:56:52 +01002206 dependencies : [libcryptsetup],
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002207 install_rpath : rootlibexecdir,
2208 install : true,
2209 install_dir : rootlibexecdir)
2210
Zbigniew Jędrzejewski-Szmekb7f28ac2017-11-26 22:51:29 +01002211executable('systemd-makefs',
2212 'src/partition/makefs.c',
2213 include_directories : includes,
2214 link_with : [libshared],
2215 install_rpath : rootlibexecdir,
2216 install : true,
2217 install_dir : rootlibexecdir)
2218
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002219executable('systemd-sleep',
2220 'src/sleep/sleep.c',
2221 include_directories : includes,
2222 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002223 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002224 install : true,
2225 install_dir : rootlibexecdir)
2226
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002227exe = executable('systemd-sysctl',
2228 'src/sysctl/sysctl.c',
2229 include_directories : includes,
2230 link_with : [libshared],
2231 install_rpath : rootlibexecdir,
2232 install : true,
2233 install_dir : rootlibexecdir)
2234public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002235
2236executable('systemd-ac-power',
2237 'src/ac-power/ac-power.c',
2238 include_directories : includes,
2239 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002240 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002241 install : true,
2242 install_dir : rootlibexecdir)
2243
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002244exe = executable('systemd-detect-virt',
2245 'src/detect-virt/detect-virt.c',
2246 include_directories : includes,
2247 link_with : [libshared],
2248 install_rpath : rootlibexecdir,
2249 install : true)
2250public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002251
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002252exe = executable('systemd-delta',
2253 'src/delta/delta.c',
2254 include_directories : includes,
2255 link_with : [libshared],
2256 install_rpath : rootlibexecdir,
2257 install : true)
2258public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002259
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002260exe = executable('systemd-escape',
2261 'src/escape/escape.c',
2262 include_directories : includes,
2263 link_with : [libshared],
2264 install_rpath : rootlibexecdir,
2265 install : true,
2266 install_dir : rootbindir)
2267public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002268
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002269exe = executable('systemd-notify',
2270 'src/notify/notify.c',
2271 include_directories : includes,
2272 link_with : [libshared],
2273 install_rpath : rootlibexecdir,
2274 install : true,
2275 install_dir : rootbindir)
2276public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002277
2278executable('systemd-volatile-root',
2279 'src/volatile-root/volatile-root.c',
2280 include_directories : includes,
2281 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002282 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002283 install : true,
2284 install_dir : rootlibexecdir)
2285
2286executable('systemd-cgroups-agent',
2287 'src/cgroups-agent/cgroups-agent.c',
2288 include_directories : includes,
2289 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002290 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002291 install : true,
2292 install_dir : rootlibexecdir)
2293
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002294exe = executable('systemd-path',
2295 'src/path/path.c',
2296 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002297 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002298 install_rpath : rootlibexecdir,
2299 install : true)
2300public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002301
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002302exe = executable('systemd-ask-password',
2303 'src/ask-password/ask-password.c',
2304 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002305 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002306 install_rpath : rootlibexecdir,
2307 install : true,
2308 install_dir : rootbindir)
2309public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002310
2311executable('systemd-reply-password',
2312 'src/reply-password/reply-password.c',
2313 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002314 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002315 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002316 install : true,
2317 install_dir : rootlibexecdir)
2318
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002319exe = executable('systemd-tty-ask-password-agent',
2320 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2321 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002322 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002323 install_rpath : rootlibexecdir,
2324 install : true,
2325 install_dir : rootbindir)
2326public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002327
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002328exe = executable('systemd-cgls',
2329 'src/cgls/cgls.c',
2330 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002331 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002332 install_rpath : rootlibexecdir,
2333 install : true)
2334public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002335
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002336exe = executable('systemd-cgtop',
2337 'src/cgtop/cgtop.c',
2338 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002339 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002340 install_rpath : rootlibexecdir,
2341 install : true)
2342public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002343
2344executable('systemd-initctl',
2345 'src/initctl/initctl.c',
2346 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002347 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002348 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002349 install : true,
2350 install_dir : rootlibexecdir)
2351
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002352exe = executable('systemd-mount',
2353 'src/mount/mount-tool.c',
2354 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002355 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002356 install_rpath : rootlibexecdir,
2357 install : true)
2358public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002359
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002360meson.add_install_script(meson_make_symlink,
Michael Bieble17e5ba2017-04-13 10:30:56 -04002361 'systemd-mount', join_paths(bindir, 'systemd-umount'))
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002362
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002363exe = executable('systemd-run',
2364 'src/run/run.c',
2365 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002366 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002367 install_rpath : rootlibexecdir,
2368 install : true)
2369public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002370
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002371exe = executable('systemd-stdio-bridge',
2372 'src/stdio-bridge/stdio-bridge.c',
2373 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002374 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002375 install_rpath : rootlibexecdir,
2376 install : true)
2377public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002378
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002379exe = executable('busctl',
2380 'src/busctl/busctl.c',
2381 'src/busctl/busctl-introspect.c',
2382 'src/busctl/busctl-introspect.h',
2383 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002384 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002385 install_rpath : rootlibexecdir,
2386 install : true)
2387public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002388
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002389if conf.get('ENABLE_SYSUSERS') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002390 exe = executable('systemd-sysusers',
2391 'src/sysusers/sysusers.c',
2392 include_directories : includes,
2393 link_with : [libshared],
2394 install_rpath : rootlibexecdir,
2395 install : true,
2396 install_dir : rootbindir)
2397 public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002398endif
2399
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002400if conf.get('ENABLE_TMPFILES') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002401 exe = executable('systemd-tmpfiles',
2402 'src/tmpfiles/tmpfiles.c',
2403 include_directories : includes,
2404 link_with : [libshared],
2405 dependencies : [libacl],
2406 install_rpath : rootlibexecdir,
2407 install : true,
2408 install_dir : rootbindir)
2409 public_programs += [exe]
Zbigniew Jędrzejewski-Szmekd9daae52017-11-22 14:13:32 +01002410
2411 test('test-systemd-tmpfiles',
2412 test_systemd_tmpfiles_py,
2413 args : exe.full_path())
2414 # https://github.com/mesonbuild/meson/issues/2681
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002415endif
2416
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002417if conf.get('ENABLE_HWDB') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002418 exe = executable('systemd-hwdb',
2419 'src/hwdb/hwdb.c',
2420 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2421 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002422 link_with : [libudev_static],
Michael Biebl0da6f392017-04-21 18:32:14 +02002423 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002424 install : true,
2425 install_dir : rootbindir)
2426 public_programs += [exe]
2427endif
2428
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002429if conf.get('ENABLE_QUOTACHECK') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002430 executable('systemd-quotacheck',
2431 'src/quotacheck/quotacheck.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002432 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002433 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002434 install_rpath : rootlibexecdir,
2435 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002436 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002437endif
2438
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002439exe = executable('systemd-socket-proxyd',
2440 'src/socket-proxy/socket-proxyd.c',
2441 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002442 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002443 dependencies : [threads],
2444 install_rpath : rootlibexecdir,
2445 install : true,
2446 install_dir : rootlibexecdir)
2447public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002448
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002449exe = executable('systemd-udevd',
2450 systemd_udevd_sources,
2451 include_directories : includes,
Zbigniew Jędrzejewski-Szmek5c720492017-02-22 23:13:22 -05002452 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002453 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002454 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002455 libudev_static],
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002456 dependencies : [threads,
2457 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002458 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002459 libacl,
2460 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002461 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002462 install : true,
2463 install_dir : rootlibexecdir)
2464public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002465
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002466exe = executable('udevadm',
2467 udevadm_sources,
Franck Bui6671e812017-12-16 09:36:36 +01002468 c_args : ['-DLOG_REALM=LOG_REALM_UDEV'],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002469 include_directories : includes,
2470 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002471 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002472 libudev_static],
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002473 dependencies : [threads,
2474 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002475 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002476 libacl,
2477 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002478 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002479 install : true,
2480 install_dir : rootbindir)
2481public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002482
2483executable('systemd-shutdown',
2484 systemd_shutdown_sources,
2485 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002486 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek95b862b2018-03-14 11:32:30 +01002487 dependencies : [libmount],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002488 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002489 install : true,
2490 install_dir : rootlibexecdir)
2491
2492executable('systemd-update-done',
2493 'src/update-done/update-done.c',
2494 include_directories : includes,
2495 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002496 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002497 install : true,
2498 install_dir : rootlibexecdir)
2499
2500executable('systemd-update-utmp',
2501 'src/update-utmp/update-utmp.c',
2502 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002503 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002504 dependencies : [libaudit],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002505 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002506 install : true,
2507 install_dir : rootlibexecdir)
2508
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002509if conf.get('HAVE_KMOD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002510 executable('systemd-modules-load',
2511 'src/modules-load/modules-load.c',
2512 include_directories : includes,
2513 link_with : [libshared],
2514 dependencies : [libkmod],
2515 install_rpath : rootlibexecdir,
2516 install : true,
2517 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002518
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002519 meson.add_install_script('sh', '-c',
2520 mkdir_p.format(modulesloaddir))
2521 meson.add_install_script('sh', '-c',
2522 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002523endif
2524
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002525exe = executable('systemd-nspawn',
2526 systemd_nspawn_sources,
2527 'src/core/mount-setup.c', # FIXME: use a variable?
2528 'src/core/mount-setup.h',
2529 'src/core/loopback-setup.c',
2530 'src/core/loopback-setup.h',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02002531 include_directories : includes,
2532 link_with : [libnspawn_core,
2533 libshared],
2534 dependencies : [libblkid],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002535 install_rpath : rootlibexecdir,
2536 install : true)
2537public_programs += [exe]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002538
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002539if conf.get('ENABLE_NETWORKD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002540 executable('systemd-networkd',
2541 systemd_networkd_sources,
2542 include_directories : includes,
2543 link_with : [libnetworkd_core,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002544 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002545 libudev_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002546 libshared],
Zbigniew Jędrzejewski-Szmek4b57a272017-06-21 06:05:15 -04002547 dependencies : [threads],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002548 install_rpath : rootlibexecdir,
2549 install : true,
2550 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002551
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002552 executable('systemd-networkd-wait-online',
2553 systemd_networkd_wait_online_sources,
2554 include_directories : includes,
2555 link_with : [libnetworkd_core,
2556 libshared],
2557 install_rpath : rootlibexecdir,
2558 install : true,
2559 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002560
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002561 exe = executable('networkctl',
2562 networkctl_sources,
2563 include_directories : includes,
2564 link_with : [libsystemd_network,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002565 libshared],
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002566 install_rpath : rootlibexecdir,
2567 install : true,
2568 install_dir : rootbindir)
2569 public_programs += [exe]
2570endif
Zbigniew Jędrzejewski-Szmeke821f6a2017-12-07 10:44:43 +01002571
2572executable('systemd-sulogin-shell',
2573 ['src/sulogin-shell/sulogin-shell.c'],
2574 include_directories : includes,
2575 link_with : [libshared],
2576 install_rpath : rootlibexecdir,
2577 install : true,
2578 install_dir : rootlibexecdir)
2579
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002580############################################################
2581
2582foreach tuple : tests
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002583 sources = tuple[0]
2584 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2585 dependencies = tuple[2]
2586 condition = tuple.length() >= 4 ? tuple[3] : ''
2587 type = tuple.length() >= 5 ? tuple[4] : ''
2588 defs = tuple.length() >= 6 ? tuple[5] : []
2589 incs = tuple.length() >= 7 ? tuple[6] : includes
2590 timeout = 30
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002591
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002592 name = sources[0].split('/')[-1].split('.')[0]
2593 if type.startswith('timeout=')
2594 timeout = type.split('=')[1].to_int()
2595 type = ''
2596 endif
Adam Duskett08318a22018-01-15 06:25:46 -05002597 if want_tests == 'false'
2598 message('Not compiling @0@ because tests is set to false'.format(name))
2599 elif condition == '' or conf.get(condition) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002600 exe = executable(
2601 name,
2602 sources,
2603 include_directories : incs,
2604 link_with : link_with,
2605 dependencies : dependencies,
2606 c_args : defs,
2607 install_rpath : rootlibexecdir,
Michael Biebl7cdd9782017-06-23 03:23:30 +02002608 install : install_tests,
2609 install_dir : join_paths(testsdir, type))
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04002610
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002611 if type == 'manual'
2612 message('@0@ is a manual test'.format(name))
2613 elif type == 'unsafe' and want_tests != 'unsafe'
2614 message('@0@ is an unsafe test'.format(name))
2615 else
2616 test(name, exe,
2617 env : test_env,
2618 timeout : timeout)
2619 endif
2620 else
2621 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2622 endif
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002623endforeach
2624
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002625exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002626 'test-libsystemd-sym',
2627 test_libsystemd_sym_c,
2628 include_directories : includes,
2629 link_with : [libsystemd],
2630 install : install_tests,
2631 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002632test('test-libsystemd-sym', exe)
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04002633
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002634exe = executable(
2635 'test-libsystemd-static-sym',
2636 test_libsystemd_sym_c,
2637 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002638 link_with : [install_libsystemd_static],
2639 dependencies : [threads], # threads is already included in dependencies on the library,
2640 # but does not seem to get propagated. Add here as a work-around.
Davide Cavalca20f3d322018-04-24 13:34:48 -07002641 build_by_default : static_libsystemd_pic,
2642 install : install_tests and static_libsystemd_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002643 install_dir : testsdir)
Davide Cavalca20f3d322018-04-24 13:34:48 -07002644if static_libsystemd_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002645 test('test-libsystemd-static-sym', exe)
2646endif
2647
2648exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002649 'test-libudev-sym',
2650 test_libudev_sym_c,
2651 include_directories : includes,
2652 c_args : ['-Wno-deprecated-declarations'],
2653 link_with : [libudev],
2654 install : install_tests,
2655 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002656test('test-libudev-sym', exe)
2657
2658exe = executable(
2659 'test-libudev-static-sym',
2660 test_libudev_sym_c,
2661 include_directories : includes,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002662 c_args : ['-Wno-deprecated-declarations'],
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002663 link_with : [install_libudev_static],
Davide Cavalca20f3d322018-04-24 13:34:48 -07002664 build_by_default : static_libudev_pic,
2665 install : install_tests and static_libudev_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002666 install_dir : testsdir)
Davide Cavalca20f3d322018-04-24 13:34:48 -07002667if static_libudev_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002668 test('test-libudev-static-sym', exe)
2669endif
Zbigniew Jędrzejewski-Szmeke0bec522017-04-10 15:20:42 -04002670
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002671############################################################
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002672
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002673fuzzer_exes = []
2674
2675foreach tuple : fuzzers
2676 sources = tuple[0]
2677 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2678 dependencies = tuple[2]
2679 defs = tuple.length() >= 4 ? tuple[3] : []
2680 incs = tuple.length() >= 5 ? tuple[4] : includes
2681
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05002682 if fuzzer_build
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002683 dependencies += fuzzing_engine
2684 else
2685 sources += 'src/fuzz/fuzz-main.c'
2686 endif
2687
2688 name = sources[0].split('/')[-1].split('.')[0]
2689
2690 fuzzer_exes += executable(
2691 name,
2692 sources,
2693 include_directories : [incs, include_directories('src/fuzz')],
2694 link_with : link_with,
2695 dependencies : dependencies,
2696 c_args : defs,
2697 install : false)
2698endforeach
2699
2700run_target('fuzzers',
2701 depends : fuzzer_exes,
2702 command : ['true'])
2703
2704############################################################
2705
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002706make_directive_index_py = find_program('tools/make-directive-index.py')
2707make_man_index_py = find_program('tools/make-man-index.py')
Zbigniew Jędrzejewski-Szmekb184e8f2017-04-13 19:59:21 -04002708xml_helper_py = find_program('tools/xml_helper.py')
Zbigniew Jędrzejewski-Szmekabba22c2017-04-15 00:40:59 -04002709hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002710
2711subdir('units')
2712subdir('sysctl.d')
2713subdir('sysusers.d')
2714subdir('tmpfiles.d')
Zbigniew Jędrzejewski-Szmeke783f952017-11-23 13:23:42 +01002715subdir('presets')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002716subdir('hwdb')
2717subdir('network')
2718subdir('man')
2719subdir('shell-completion/bash')
2720subdir('shell-completion/zsh')
Lennart Poettering2d684e62018-03-28 16:58:37 +02002721subdir('doc/sysvinit')
2722subdir('doc/var-log')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002723
2724# FIXME: figure out if the warning is true:
2725# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
2726install_subdir('factory/etc',
2727 install_dir : factorydir)
2728
2729
2730install_data('xorg/50-systemd-user.sh',
2731 install_dir : xinitrcdir)
Dimitri John Ledkov582faeb2017-08-02 13:41:18 +01002732install_data('modprobe.d/systemd.conf',
2733 install_dir : modprobedir)
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002734install_data('LICENSE.GPL2',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002735 'LICENSE.LGPL2.1',
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002736 'NEWS',
2737 'README',
2738 'doc/CODING_STYLE',
2739 'doc/DISTRO_PORTING',
2740 'doc/ENVIRONMENT.md',
2741 'doc/HACKING',
2742 'doc/TRANSIENT-SETTINGS.md',
2743 'doc/TRANSLATORS',
2744 'doc/UIDS-GIDS.md',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002745 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2746 install_dir : docdir)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002747
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002748meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2749meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2750
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002751############################################################
2752
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002753meson_check_help = find_program('tools/meson-check-help.sh')
2754
2755foreach exec : public_programs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002756 name = exec.full_path().split('/')[-1]
2757 test('check-help-' + name,
2758 meson_check_help,
2759 args : [exec.full_path()])
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002760endforeach
2761
2762############################################################
2763
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002764# Enable tests for all supported sanitizers
2765foreach tuple : sanitizers
2766 sanitizer = tuple[0]
2767 build = tuple[1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002768
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002769 have = run_command(check_compilation_sh,
2770 cc.cmd_array(), '-x', 'c',
2771 '-fsanitize=@0@'.format(sanitizer),
2772 '-include', link_test_c).returncode() == 0
2773 message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no'))
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002774
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002775 if have
2776 prev = ''
2777 foreach p : fuzz_regression_tests
2778 b = p.split('/')[-2]
2779 c = p.split('/')[-1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002780
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002781 name = '@0@:@1@'.format(b, sanitizer)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002782
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002783 if name != prev
2784 if want_tests == 'false'
2785 message('Not compiling @0@ because tests is set to false'.format(name))
2786 elif slow_tests
2787 exe = custom_target(
2788 name,
2789 output : name,
2790 depends : build,
2791 command : [env, 'ln', '-fs',
2792 join_paths(build.full_path(), b),
2793 '@OUTPUT@'],
2794 build_by_default : true)
2795 else
2796 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2797 endif
2798 endif
2799 prev = name
2800
2801 if want_tests != 'false' and slow_tests
2802 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2803 env,
2804 args : [exe.full_path(),
2805 join_paths(meson.source_root(),
2806 'test/fuzz-regressions',
2807 p)])
2808 endif
2809 endforeach
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002810 endif
2811endforeach
2812
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002813
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002814############################################################
2815
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04002816if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002817 all_files = run_command(
2818 git,
Davide Cavalca450b60b2017-08-30 08:04:53 -07002819 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002820 'ls-files',
2821 ':/*.[ch]'])
2822 all_files = files(all_files.stdout().split())
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002823
userwithuide85a6902017-08-09 13:41:44 +00002824 custom_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04002825 'tags',
userwithuide85a6902017-08-09 13:41:44 +00002826 output : 'tags',
Zbigniew Jędrzejewski-Szmek25a82102018-01-26 16:15:17 +01002827 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.current_source_dir())] + all_files)
Evegeny Vereshchagin2f099742018-05-18 10:52:17 +00002828 run_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04002829 'ctags',
Zbigniew Jędrzejewski-Szmek25a82102018-01-26 16:15:17 +01002830 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.current_source_dir())] + all_files)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002831endif
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04002832
2833if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002834 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
Zbigniew Jędrzejewski-Szmeka923e082017-04-17 19:48:20 -04002835 run_target(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002836 'git-contrib',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002837 command : [meson_git_contrib_sh])
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04002838endif
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04002839
2840if git.found()
2841 git_head = run_command(
2842 git,
Davide Cavalca450b60b2017-08-30 08:04:53 -07002843 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04002844 'rev-parse', 'HEAD']).stdout().strip()
2845 git_head_short = run_command(
2846 git,
Davide Cavalca450b60b2017-08-30 08:04:53 -07002847 ['--git-dir=@0@/.git'.format(meson.current_source_dir()),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04002848 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
2849
2850 run_target(
2851 'git-snapshot',
2852 command : ['git', 'archive',
Davide Cavalca450b60b2017-08-30 08:04:53 -07002853 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.current_source_dir(),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04002854 git_head_short),
2855 '--prefix', 'systemd-@0@/'.format(git_head),
2856 'HEAD'])
2857endif
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002858
2859############################################################
2860
Lennart Poettering51b13862017-12-20 12:51:14 +01002861meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
2862run_target(
2863 'check-api-docs',
2864 depends : [man, libsystemd, libudev],
2865 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
2866
2867############################################################
2868
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002869status = [
2870 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
2871
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +01002872 'split /usr: @0@'.format(split_usr),
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +01002873 'split bin-sbin: @0@'.format(split_bin),
Yu Watanabe359b4962017-11-25 20:35:24 +09002874 'prefix directory: @0@'.format(prefixdir),
2875 'rootprefix directory: @0@'.format(rootprefixdir),
2876 'sysconf directory: @0@'.format(sysconfdir),
2877 'include directory: @0@'.format(includedir),
2878 'lib directory: @0@'.format(libdir),
2879 'rootlib directory: @0@'.format(rootlibdir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002880 'SysV init scripts: @0@'.format(sysvinit_path),
2881 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
Yu Watanabe359b4962017-11-25 20:35:24 +09002882 'PAM modules directory: @0@'.format(pamlibdir),
2883 'PAM configuration directory: @0@'.format(pamconfdir),
2884 'RPM macros directory: @0@'.format(rpmmacrosdir),
2885 'modprobe.d directory: @0@'.format(modprobedir),
2886 'D-Bus policy directory: @0@'.format(dbuspolicydir),
2887 'D-Bus session directory: @0@'.format(dbussessionservicedir),
2888 'D-Bus system directory: @0@'.format(dbussystemservicedir),
2889 'bash completions directory: @0@'.format(bashcompletiondir),
2890 'zsh completions directory: @0@'.format(zshcompletiondir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002891 'extra start script: @0@'.format(get_option('rc-local')),
2892 'extra stop script: @0@'.format(get_option('halt-local')),
2893 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
2894 get_option('debug-tty')),
2895 'TTY GID: @0@'.format(tty_gid),
Yu Watanabeac093402018-05-10 16:04:16 +09002896 'users GID: @0@'.format(substs.get('USERS_GID')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002897 'maximum system UID: @0@'.format(system_uid_max),
2898 'maximum system GID: @0@'.format(system_gid_max),
Lennart Poettering87d5e4f2017-12-02 12:48:31 +01002899 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
2900 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
2901 'minimum container UID base: @0@'.format(container_uid_base_min),
2902 'maximum container UID base: @0@'.format(container_uid_base_max),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002903 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
Tom Stellard4e15a732017-10-31 08:46:24 -07002904 'render group access mode: @0@'.format(get_option('group-render-mode')),
Yu Watanabe359b4962017-11-25 20:35:24 +09002905 'certificate root directory: @0@'.format(get_option('certificate-root')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002906 'support URL: @0@'.format(support_url),
Lennart Poetteringafde4572017-12-05 11:00:24 +01002907 'nobody user name: @0@'.format(nobody_user),
2908 'nobody group name: @0@'.format(nobody_group),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002909 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -04002910 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002911
2912 'default DNSSEC mode: @0@'.format(default_dnssec),
Iwan Timmerc9299be2018-06-13 20:26:24 +02002913 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002914 'default cgroup hierarchy: @0@'.format(default_hierarchy),
2915 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
2916
2917alt_dns_servers = '\n '.join(dns_servers.split(' '))
2918alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
2919status += [
2920 'default DNS servers: @0@'.format(alt_dns_servers),
2921 'default NTP servers: @0@'.format(alt_ntp_servers)]
2922
2923alt_time_epoch = run_command('date', '-Is', '-u', '-d',
2924 '@@0@'.format(time_epoch)).stdout().strip()
2925status += [
2926 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
2927
2928# TODO:
2929# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
2930# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
2931# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
2932
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002933if conf.get('ENABLE_EFI') == 1
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002934 status += [
2935 'efi arch: @0@'.format(efi_arch)]
2936
2937 if have_gnu_efi
2938 status += [
2939 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
2940 'EFI CC @0@'.format(efi_cc),
Yu Watanabe359b4962017-11-25 20:35:24 +09002941 'EFI lib directory: @0@'.format(efi_libdir),
2942 'EFI lds directory: @0@'.format(efi_ldsdir),
2943 'EFI include directory: @0@'.format(efi_incdir)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002944 endif
2945endif
2946
2947found = []
2948missing = []
2949
2950foreach tuple : [
2951 ['libcryptsetup'],
2952 ['PAM'],
2953 ['AUDIT'],
2954 ['IMA'],
2955 ['AppArmor'],
2956 ['SELinux'],
2957 ['SECCOMP'],
2958 ['SMACK'],
2959 ['zlib'],
2960 ['xz'],
2961 ['lz4'],
2962 ['bzip2'],
2963 ['ACL'],
2964 ['gcrypt'],
2965 ['qrencode'],
2966 ['microhttpd'],
2967 ['gnutls'],
2968 ['libcurl'],
Zbigniew Jędrzejewski-Szmekd1bf5672017-06-16 09:16:28 -04002969 ['idn'],
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -04002970 ['libidn2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002971 ['libidn'],
2972 ['libiptc'],
2973 ['elfutils'],
2974 ['binfmt'],
2975 ['vconsole'],
2976 ['quotacheck'],
2977 ['tmpfiles'],
2978 ['environment.d'],
2979 ['sysusers'],
2980 ['firstboot'],
2981 ['randomseed'],
2982 ['backlight'],
2983 ['rfkill'],
2984 ['logind'],
2985 ['machined'],
Lennart Poettering61d05782018-04-16 21:41:40 +02002986 ['portabled'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002987 ['importd'],
2988 ['hostnamed'],
2989 ['timedated'],
2990 ['timesyncd'],
2991 ['localed'],
2992 ['networkd'],
Yu Watanabea7456af2017-10-06 16:33:21 +09002993 ['resolve'],
Yu Watanabe56ddbf12018-06-21 01:29:49 +09002994 ['DNS-over-TLS'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04002995 ['coredump'],
2996 ['polkit'],
2997 ['legacy pkla', install_polkit_pkla],
2998 ['efi'],
2999 ['gnu-efi', have_gnu_efi],
3000 ['kmod'],
3001 ['xkbcommon'],
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01003002 ['pcre2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003003 ['blkid'],
3004 ['dbus'],
3005 ['glib'],
Yu Watanabe08540a92018-07-18 09:25:57 +09003006 ['nss-myhostname', conf.get('ENABLE_NSS_MYHOSTNAME') == 1],
3007 ['nss-mymachines', conf.get('ENABLE_NSS_MYMACHINES') == 1],
3008 ['nss-resolve', conf.get('ENABLE_NSS_RESOLVE') == 1],
3009 ['nss-systemd', conf.get('ENABLE_NSS_SYSTEMD') == 1],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003010 ['hwdb'],
3011 ['tpm'],
3012 ['man pages', want_man],
3013 ['html pages', want_html],
3014 ['man page indices', want_man and have_lxml],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003015 ['SysV compat'],
3016 ['utmp'],
3017 ['ldconfig'],
3018 ['hibernate'],
3019 ['adm group', get_option('adm-group')],
3020 ['wheel group', get_option('wheel-group')],
Franck Buib14e1b42017-05-09 14:02:37 +02003021 ['gshadow'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003022 ['debug hashmap'],
3023 ['debug mmap cache'],
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +02003024 ['valgrind', conf.get('VALGRIND') == 1],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003025]
3026
Zbigniew Jędrzejewski-Szmekaf4d7862018-03-09 14:21:08 +01003027 if tuple.length() >= 2
3028 cond = tuple[1]
3029 else
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003030 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3031 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003032 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003033 endif
3034 if cond
3035 found += [tuple[0]]
3036 else
3037 missing += [tuple[0]]
3038 endif
3039endforeach
3040
3041status += [
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003042 '',
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003043 'enabled features: @0@'.format(', '.join(found)),
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003044 '',
3045 'disabled features: @0@'.format(', '.join(missing)),
3046 '']
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003047message('\n '.join(status))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003048
3049if rootprefixdir != rootprefix_default
Yu Watanabe8ea9fad2018-05-10 14:50:52 +09003050 warning('\n' +
3051 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3052 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3053 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003054endif