blob: 100265570d53dbcf576befeb5f6cb4b0d8fa231f [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 Watanabe7a6397d2018-05-15 20:18:24 +090012 meson_version : '>= 0.46',
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()
Zbigniew Jędrzejewski-Szmeka67c3182018-12-19 11:23:42 +010023conf.set('PROJECT_VERSION', meson.project_version())
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040024
25substs = configuration_data()
Zbigniew Jędrzejewski-Szmeka67c3182018-12-19 11:23:42 +010026substs.set('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
27substs.set('PROJECT_VERSION', meson.project_version())
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040028
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +020029want_ossfuzz = get_option('oss-fuzz')
30want_libfuzzer = get_option('llvm-fuzz')
31if want_ossfuzz and want_libfuzzer
32 error('only one of oss-fuzz and llvm-fuzz can be specified')
33endif
34fuzzer_build = want_ossfuzz or want_libfuzzer
35
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040036#####################################################################
37
Zbigniew Jędrzejewski-Szmek003c8872017-07-24 04:41:45 -040038# Try to install the git pre-commit hook
39git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
40if git_hook.returncode() == 0
41 message(git_hook.stdout().strip())
42endif
43
44#####################################################################
45
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +010046if get_option('split-usr') == 'auto'
47 split_usr = run_command('test', '-L', '/bin').returncode() != 0
48else
49 split_usr = get_option('split-usr') == 'true'
50endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010051conf.set10('HAVE_SPLIT_USR', split_usr,
52 description : '/usr/bin and /bin directories are separate')
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010053
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010054if get_option('split-bin') == 'auto'
55 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
56else
57 split_bin = get_option('split-bin') == 'true'
58endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010059conf.set10('HAVE_SPLIT_BIN', split_bin,
60 description : 'bin and sbin directories are separate')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010061
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010062rootprefixdir = get_option('rootprefix')
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010063# Unusual rootprefixdir values are used by some distros
64# (see https://github.com/systemd/systemd/pull/7461).
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +010065rootprefix_default = split_usr ? '/' : '/usr'
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010066if rootprefixdir == ''
67 rootprefixdir = rootprefix_default
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010068endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040069
70sysvinit_path = get_option('sysvinit-path')
71sysvrcnd_path = get_option('sysvrcnd-path')
Yu Watanabe348b4432018-05-07 18:17:35 +090072conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +020073 description : 'SysV init scripts and rcN.d links are supported')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040074
Lennart Poetteringa8b627a2018-10-11 18:23:26 +020075conf.set10('BUMP_PROC_SYS_FS_FILE_MAX', get_option('bump-proc-sys-fs-file-max'))
76conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
Lennart Poettering09dad042018-11-15 09:50:42 +010077conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
Lennart Poetteringa8b627a2018-10-11 18:23:26 +020078
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040079# join_paths ignore the preceding arguments if an absolute component is
80# encountered, so this should canonicalize various paths when they are
81# absolute or relative.
82prefixdir = get_option('prefix')
83if not prefixdir.startswith('/')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -040084 error('Prefix is not absolute: "@0@"'.format(prefixdir))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040085endif
86bindir = join_paths(prefixdir, get_option('bindir'))
87libdir = join_paths(prefixdir, get_option('libdir'))
88sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
89includedir = join_paths(prefixdir, get_option('includedir'))
90datadir = join_paths(prefixdir, get_option('datadir'))
91localstatedir = join_paths('/', get_option('localstatedir'))
92
93rootbindir = join_paths(rootprefixdir, 'bin')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010094rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040095rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
96
97rootlibdir = get_option('rootlibdir')
98if rootlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -040099 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400100endif
101
102# Dirs of external packages
Benedikt Morbacha95696e2018-08-10 04:59:54 +0200103pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
104pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400105polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
106polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
107polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
108varlogdir = join_paths(localstatedir, 'log')
109xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
Yu Watanabe8a38aac2017-11-23 22:20:22 +0900110rpmmacrosdir = get_option('rpmmacrosdir')
111if rpmmacrosdir != 'no'
112 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
113endif
Michael Biebl02fa0542017-10-21 08:32:50 +0200114modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400115
116# Our own paths
Michael Bieble17e5ba2017-04-13 10:30:56 -0400117pkgdatadir = join_paths(datadir, 'systemd')
118environmentdir = join_paths(prefixdir, 'lib/environment.d')
119pkgsysconfdir = join_paths(sysconfdir, 'systemd')
120userunitdir = join_paths(prefixdir, 'lib/systemd/user')
121userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
122tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
123sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
124sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
125binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
126modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
127networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
128pkgincludedir = join_paths(includedir, 'systemd')
129systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
130usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
131systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
132userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
133systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
134systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
135systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
136systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
137udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
138udevhomedir = udevlibexecdir
139udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
140udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
141catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
142kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
143factorydir = join_paths(datadir, 'factory')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400144bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
145testsdir = join_paths(prefixdir, 'lib/systemd/tests')
146systemdstatedir = join_paths(localstatedir, 'lib/systemd')
147catalogstatedir = join_paths(systemdstatedir, 'catalog')
148randomseeddir = join_paths(localstatedir, 'lib/systemd')
Lennart Poettering61d05782018-04-16 21:41:40 +0200149profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400150
tblume75aaade2018-02-01 22:46:15 +0100151docdir = get_option('docdir')
152if docdir == ''
153 docdir = join_paths(datadir, 'doc/systemd')
154endif
155
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400156dbuspolicydir = get_option('dbuspolicydir')
157if dbuspolicydir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400158 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400159endif
160
161dbussessionservicedir = get_option('dbussessionservicedir')
162if dbussessionservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400163 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400164endif
165
166dbussystemservicedir = get_option('dbussystemservicedir')
167if dbussystemservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400168 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400169endif
170
171pamlibdir = get_option('pamlibdir')
172if pamlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400173 pamlibdir = join_paths(rootlibdir, 'security')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400174endif
175
176pamconfdir = get_option('pamconfdir')
177if pamconfdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400178 pamconfdir = join_paths(sysconfdir, 'pam.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400179endif
180
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100181memory_accounting_default = get_option('memory-accounting-default')
182
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400183conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400184conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400185conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
186conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
187conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400188conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
189conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100190
Zbigniew Jędrzejewski-Szmekf7c54272018-03-02 09:09:29 +0100191conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100192
Michael Bieble17e5ba2017-04-13 10:30:56 -0400193conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400194conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
195conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400196conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
197conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
198conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
199conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
Zbigniew Jędrzejewski-Szmekda495a02017-11-21 23:18:05 +0100200conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
Zbigniew Jędrzejewski-Szmek7f2806d2017-11-29 20:02:11 +0100201conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400202conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
203conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
204conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
205conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
206conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +0100207conf.set_quoted('ROOTPREFIX', rootprefixdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400208conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400209conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
210conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400211conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
212conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
213conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
214conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
215conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
216conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400217conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
218conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
Filipe Brandenburgere2d41372018-09-11 23:55:02 -0700219conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
Filipe Brandenburger49cdae62018-09-12 00:23:40 -0700220conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400221conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400222conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400223conf.set_quoted('LIBDIR', libdir)
224conf.set_quoted('ROOTLIBDIR', rootlibdir)
225conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
226conf.set_quoted('BOOTLIBDIR', bootlibdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400227conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
228conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
Lennart Poettering1d7579c2018-10-10 21:20:08 +0200229conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400230conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
231conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
232conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
233conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
Zbigniew Jędrzejewski-Szmek30538ff2018-10-17 14:36:09 +0200234conf.set10('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default)
Michal Koutný7f672e82018-03-09 18:27:13 +0100235conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400236
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400237substs.set('prefix', prefixdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400238substs.set('exec_prefix', prefixdir)
239substs.set('libdir', libdir)
240substs.set('rootlibdir', rootlibdir)
241substs.set('includedir', includedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400242substs.set('pkgsysconfdir', pkgsysconfdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400243substs.set('bindir', bindir)
244substs.set('rootbindir', rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400245substs.set('rootlibexecdir', rootlibexecdir)
246substs.set('systemunitdir', systemunitdir)
247substs.set('userunitdir', userunitdir)
248substs.set('systempresetdir', systempresetdir)
249substs.set('userpresetdir', userpresetdir)
250substs.set('udevhwdbdir', udevhwdbdir)
251substs.set('udevrulesdir', udevrulesdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400252substs.set('udevlibexecdir', udevlibexecdir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200253substs.set('environmentdir', environmentdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400254substs.set('catalogdir', catalogdir)
255substs.set('tmpfilesdir', tmpfilesdir)
256substs.set('sysusersdir', sysusersdir)
257substs.set('sysctldir', sysctldir)
258substs.set('binfmtdir', binfmtdir)
259substs.set('modulesloaddir', modulesloaddir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200260substs.set('modprobedir', modprobedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400261substs.set('systemgeneratordir', systemgeneratordir)
262substs.set('usergeneratordir', usergeneratordir)
263substs.set('systemenvgeneratordir', systemenvgeneratordir)
264substs.set('userenvgeneratordir', userenvgeneratordir)
265substs.set('systemshutdowndir', systemshutdowndir)
266substs.set('systemsleepdir', systemsleepdir)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400267substs.set('VARLOGDIR', varlogdir)
268substs.set('CERTIFICATEROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400269substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
270substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400271substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
272substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
273substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
274substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100275substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmekc02b6ee2018-10-17 10:21:48 +0200276substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400277
278#####################################################################
279
280cc = meson.get_compiler('c')
281pkgconfig = import('pkgconfig')
Zbigniew Jędrzejewski-Szmek6e2afb12017-04-24 21:03:35 -0400282check_compilation_sh = find_program('tools/meson-check-compilation.sh')
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100283meson_build_sh = find_program('tools/meson-build.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400284
Zbigniew Jędrzejewski-Szmekd3da2912018-09-12 11:02:58 +0200285want_tests = get_option('tests')
286slow_tests = want_tests != 'false' and get_option('slow-tests')
287install_tests = get_option('install-tests')
288
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +0200289cxx = find_program('c++', required : fuzzer_build)
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +0200290if cxx.found()
291 # Used only for tests
292 add_languages('cpp')
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200293 cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
Zbigniew Jędrzejewski-Szmek1b2acaa2018-10-09 18:48:09 +0200294else
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200295 cxx_cmd = ''
Zbigniew Jędrzejewski-Szmek94e25232017-05-13 13:23:28 -0400296endif
297
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500298if want_libfuzzer
299 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer')
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +0200300elif want_ossfuzz
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500301 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
302endif
303
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900304possible_cc_flags = [
305 '-Wextra',
306 '-Werror=undef',
307 '-Wlogical-op',
308 '-Wmissing-include-dirs',
309 '-Wold-style-definition',
310 '-Wpointer-arith',
311 '-Winit-self',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900312 '-Wfloat-equal',
313 '-Wsuggest-attribute=noreturn',
314 '-Werror=missing-prototypes',
315 '-Werror=implicit-function-declaration',
316 '-Werror=missing-declarations',
317 '-Werror=return-type',
318 '-Werror=incompatible-pointer-types',
319 '-Werror=format=2',
320 '-Wstrict-prototypes',
321 '-Wredundant-decls',
322 '-Wmissing-noreturn',
323 '-Wimplicit-fallthrough=5',
324 '-Wshadow',
325 '-Wendif-labels',
326 '-Wstrict-aliasing=2',
327 '-Wwrite-strings',
328 '-Werror=overflow',
Zbigniew Jędrzejewski-Szmekb05ecb82018-06-09 13:12:52 +0200329 '-Werror=shift-count-overflow',
Zbigniew Jędrzejewski-Szmekd28b67d2018-06-11 13:17:43 +0200330 '-Werror=shift-overflow=2',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900331 '-Wdate-time',
332 '-Wnested-externs',
Filipe Brandenburgerbf7efeb2018-09-08 13:55:09 -0700333
334 # negative arguments are correctly detected starting with meson 0.46.
335 '-Wno-unused-parameter',
336 '-Wno-missing-field-initializers',
337 '-Wno-unused-result',
338 '-Wno-format-signedness',
339
340 # work-around for gcc 7.1 turning this on on its own.
341 '-Wno-error=nonnull',
342
343 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
344 # optimizations enabled, producing essentially false positives.
345 '-Wno-maybe-uninitialized',
346
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900347 '-ffast-math',
348 '-fno-common',
349 '-fdiagnostics-show-option',
350 '-fno-strict-aliasing',
351 '-fvisibility=hidden',
352 '-fstack-protector',
353 '-fstack-protector-strong',
354 '--param=ssp-buffer-size=4',
355]
356
357# --as-needed and --no-undefined are provided by meson by default,
358# run mesonconf to see what is enabled
359possible_link_flags = [
360 '-Wl,-z,relro',
361 '-Wl,-z,now',
362]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400363
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500364# the oss-fuzz fuzzers are not built with -fPIE, so don't
365# enable it when we are linking against them
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500366if not fuzzer_build
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900367 possible_cc_flags += '-fPIE'
368 possible_link_flags += '-pie'
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500369endif
370
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900371if cc.get_id() == 'clang'
372 possible_cc_flags += [
373 '-Wno-typedef-redefinition',
374 '-Wno-gnu-variable-sized-type-not-at-end',
375 ]
376endif
377
378if get_option('buildtype') != 'debug'
379 possible_cc_flags += [
380 '-ffunction-sections',
381 '-fdata-sections',
382 ]
383
384 possible_link_flags += '-Wl,--gc-sections'
385endif
386
387add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
Yu Watanabe7a6397d2018-05-15 20:18:24 +0900388add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900389
Caio Marcelo de Oliveira Filho9e70f2f2018-02-19 01:37:19 -0800390if cc.compiles('''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400391 #include <time.h>
392 #include <inttypes.h>
393 typedef uint64_t usec_t;
394 usec_t now(clockid_t clock);
395 int main(void) {
396 struct timespec now;
397 return 0;
398 }
Fabrice Fontaine38c1c962018-11-29 13:22:08 +0100399''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400400 add_project_arguments('-Werror=shadow', language : 'c')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400401endif
402
Zbigniew Jędrzejewski-Szmek0e3cc902018-10-11 15:12:41 +0200403cpp = ' '.join(cc.cmd_array()) + ' -E'
Zbigniew Jędrzejewski-Szmek9cc0e6e2017-04-11 10:25:34 -0400404
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400405#####################################################################
406# compilation result tests
407
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400408conf.set('_GNU_SOURCE', true)
409conf.set('__SANE_USERSPACE_TYPES__', true)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400410
411conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
412conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
413conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
414conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
415conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
416conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
417conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
418
419decl_headers = '''
420#include <uchar.h>
421#include <linux/ethtool.h>
Susant Sahanibce67bb2017-09-14 19:51:39 +0000422#include <linux/fib_rules.h>
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100423#include <sys/stat.h>
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400424'''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400425
426foreach decl : ['char16_t',
427 'char32_t',
Susant Sahanibce67bb2017-09-14 19:51:39 +0000428 'struct fib_rule_uid_range',
Susant Sahani926062f2018-11-27 10:58:54 +0530429 'struct fib_rule_port_range',
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100430 'struct statx',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400431 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400432
433 # We get -1 if the size cannot be determined
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200434 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
435
436 if decl == 'struct statx'
437 if have
438 want_linux_stat_h = false
439 else
440 have = cc.sizeof(decl,
441 prefix : decl_headers + '#include <linux/stat.h>',
442 args : '-D_GNU_SOURCE') > 0
443 want_linux_stat_h = have
444 endif
445 endif
446
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200447 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400448endforeach
449
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200450conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
Filipe Brandenburger75720bf2018-07-15 22:43:35 -0700451
Yu Watanabe9714c022018-12-02 16:27:02 +0100452foreach decl : [['ETHTOOL_LINK_MODE_10baseT_Half_BIT', 'linux/ethtool.h'],
Yu Watanabe8a716f22018-11-17 23:42:27 +0900453 ['ETHTOOL_LINK_MODE_25000baseCR_Full_BIT', 'linux/ethtool.h'],
454 ['ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT', 'linux/ethtool.h'],
455 ['ETHTOOL_LINK_MODE_1000baseX_Full_BIT', 'linux/ethtool.h'],
456 ['ETHTOOL_LINK_MODE_2500baseT_Full_BIT', 'linux/ethtool.h'],
457 ['ETHTOOL_LINK_MODE_FEC_NONE_BIT', 'linux/ethtool.h'],
Yu Watanabeb6459df2018-12-04 01:28:23 +0100458 ['FRA_TUN_ID', 'linux/fib_rules.h'],
459 ['FRA_SUPPRESS_PREFIXLEN', 'linux/fib_rules.h'],
Yu Watanabe9714c022018-12-02 16:27:02 +0100460 ['FRA_PAD', 'linux/fib_rules.h'],
461 ['FRA_L3MDEV', 'linux/fib_rules.h'],
462 ['FRA_UID_RANGE', 'linux/fib_rules.h'],
463 ['FRA_DPORT_RANGE', 'linux/fib_rules.h'],
464 ['FOU_ATTR_REMCSUM_NOPARTIAL', 'linux/fou.h'],
465 ['FOU_CMD_GET', 'linux/fou.h'],
466 ['IFA_FLAGS', 'linux/if_addr.h'],
467 ['IFLA_BRIDGE_VLAN_TUNNEL_INFO', 'linux/if_bridge.h'],
468 ['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
469 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
470 ['IN6_ADDR_GEN_MODE_RANDOM', 'linux/if_link.h'],
471 ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
472 ['IPVLAN_MODE_L3S', 'linux/if_link.h'],
473 ['IFLA_IPVLAN_FLAGS', 'linux/if_link.h'],
474 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
475 ['IFLA_CARRIER_CHANGES', 'linux/if_link.h'],
476 ['IFLA_PHYS_SWITCH_ID', 'linux/if_link.h'],
477 ['IFLA_LINK_NETNSID', 'linux/if_link.h'],
478 ['IFLA_PHYS_PORT_NAME', 'linux/if_link.h'],
479 ['IFLA_PROTO_DOWN', 'linux/if_link.h'],
480 ['IFLA_GSO_MAX_SIZE', 'linux/if_link.h'],
481 ['IFLA_PAD', 'linux/if_link.h'],
482 ['IFLA_XDP', 'linux/if_link.h'],
483 ['IFLA_EVENT', 'linux/if_link.h'],
484 ['IFLA_IF_NETNSID', 'linux/if_link.h'],
485 ['IFLA_TARGET_NETNSID', 'linux/if_link.h'],
486 ['IFLA_NEW_IFINDEX', 'linux/if_link.h'],
487 ['IFLA_MAX_MTU', 'linux/if_link.h'],
488 ['IFLA_BOND_ACTIVE_SLAVE', 'linux/if_link.h'],
489 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
490 ['IFLA_BOND_AD_ACTOR_SYSTEM', 'linux/if_link.h'],
491 ['IFLA_BOND_TLB_DYNAMIC_LB', 'linux/if_link.h'],
492 ['IFLA_VXLAN_UDP_ZERO_CSUM6_RX', 'linux/if_link.h'],
493 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
494 ['IFLA_VXLAN_COLLECT_METADATA', 'linux/if_link.h'],
495 ['IFLA_VXLAN_LABEL', 'linux/if_link.h'],
496 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
497 ['IFLA_VXLAN_TTL_INHERIT', 'linux/if_link.h'],
498 ['IFLA_GENEVE_TOS', 'linux/if_link.h'],
499 ['IFLA_GENEVE_COLLECT_METADATA', 'linux/if_link.h'],
500 ['IFLA_GENEVE_REMOTE6', 'linux/if_link.h'],
501 ['IFLA_GENEVE_UDP_ZERO_CSUM6_RX', 'linux/if_link.h'],
502 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
503 ['IFLA_GENEVE_TTL_INHERIT', 'linux/if_link.h'],
504 ['IFLA_BR_MAX_AGE', 'linux/if_link.h'],
505 ['IFLA_BR_PRIORITY', 'linux/if_link.h'],
506 ['IFLA_BR_VLAN_PROTOCOL', 'linux/if_link.h'],
507 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
508 ['IFLA_BR_VLAN_STATS_ENABLED', 'linux/if_link.h'],
509 ['IFLA_BR_MCAST_STATS_ENABLED', 'linux/if_link.h'],
510 ['IFLA_BR_MCAST_MLD_VERSION', 'linux/if_link.h'],
511 ['IFLA_BR_VLAN_STATS_PER_PORT', 'linux/if_link.h'],
512 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
513 ['IFLA_BRPORT_PROXYARP_WIFI', 'linux/if_link.h'],
514 ['IFLA_BRPORT_MULTICAST_ROUTER', 'linux/if_link.h'],
515 ['IFLA_BRPORT_PAD', 'linux/if_link.h'],
516 ['IFLA_BRPORT_MCAST_FLOOD', 'linux/if_link.h'],
517 ['IFLA_BRPORT_VLAN_TUNNEL', 'linux/if_link.h'],
518 ['IFLA_BRPORT_BCAST_FLOOD', 'linux/if_link.h'],
519 ['IFLA_BRPORT_NEIGH_SUPPRESS', 'linux/if_link.h'],
520 ['IFLA_BRPORT_ISOLATED', 'linux/if_link.h'],
521 ['IFLA_BRPORT_BACKUP_PORT', 'linux/if_link.h'],
522 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
523 # if_tunnel.h is buggy and cannot be included on its own
524 ['IFLA_VTI_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
525 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
526 ['IFLA_IPTUN_COLLECT_METADATA', 'linux/if_tunnel.h', '#include <net/if.h>'],
527 ['IFLA_IPTUN_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
528 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
529 ['IFLA_GRE_COLLECT_METADATA', 'linux/if_tunnel.h', '#include <net/if.h>'],
530 ['IFLA_GRE_IGNORE_DF', 'linux/if_tunnel.h', '#include <net/if.h>'],
531 ['IFLA_GRE_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
532 ['IFLA_GRE_ERSPAN_INDEX', 'linux/if_tunnel.h', '#include <net/if.h>'],
533 ['IFLA_GRE_ERSPAN_HWID', 'linux/if_tunnel.h', '#include <net/if.h>'],
534 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400535 ]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400536 prefix = decl.length() > 2 ? decl[2] : ''
537 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200538 conf.set10('HAVE_' + decl[0], have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400539endforeach
540
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400541foreach ident : ['secure_getenv', '__secure_getenv']
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200542 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400543endforeach
544
545foreach ident : [
Lennart Poettering85db59b2017-12-25 12:01:14 +0100546 ['memfd_create', '''#include <sys/mman.h>'''],
Lennart Poettering7b961e42017-12-25 12:35:28 +0100547 ['gettid', '''#include <sys/types.h>
548 #include <unistd.h>'''],
Lennart Poettering3c042ad2017-12-25 12:07:40 +0100549 ['pivot_root', '''#include <stdlib.h>
550 #include <unistd.h>'''], # no known header declares pivot_root
Lennart Poettering85db59b2017-12-25 12:01:14 +0100551 ['name_to_handle_at', '''#include <sys/types.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400552 #include <sys/stat.h>
553 #include <fcntl.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100554 ['setns', '''#include <sched.h>'''],
Lennart Poettering2acfd0f2017-12-25 12:35:43 +0100555 ['renameat2', '''#include <stdio.h>
556 #include <fcntl.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400557 ['kcmp', '''#include <linux/kcmp.h>'''],
558 ['keyctl', '''#include <sys/types.h>
559 #include <keyutils.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100560 ['copy_file_range', '''#include <sys/syscall.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400561 #include <unistd.h>'''],
Daniel Mack71e52002016-10-18 17:57:10 +0200562 ['bpf', '''#include <sys/syscall.h>
563 #include <unistd.h>'''],
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100564 ['statx', '''#include <sys/types.h>
565 #include <sys/stat.h>
566 #include <unistd.h>'''],
Zbigniew Jędrzejewski-Szmekaa484f32018-02-26 21:20:00 +0100567 ['explicit_bzero' , '''#include <string.h>'''],
568 ['reallocarray', '''#include <malloc.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400569]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400570
Lennart Poettering85db59b2017-12-25 12:01:14 +0100571 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200572 conf.set10('HAVE_' + ident[0].to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400573endforeach
574
Lennart Poettering85db59b2017-12-25 12:01:14 +0100575if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200576 conf.set10('USE_SYS_RANDOM_H', true)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200577 conf.set10('HAVE_GETRANDOM', true)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400578else
579 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200580 conf.set10('USE_SYS_RANDOM_H', false)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200581 conf.set10('HAVE_GETRANDOM', have)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400582endif
583
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400584#####################################################################
585
Zbigniew Jędrzejewski-Szmek681bd2c2018-12-20 20:35:25 +0100586vcs_tagger = [meson.source_root() + '/tools/meson-vcs-tag.sh',
587 '@0@/.git'.format(meson.source_root()),
588 meson.project_version()]
589
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400590sed = find_program('sed')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400591awk = find_program('awk')
Zbigniew Jędrzejewski-Szmekd730e2d2017-04-25 08:49:58 -0400592m4 = find_program('m4')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400593stat = find_program('stat')
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -0400594git = find_program('git', required : false)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100595env = find_program('env')
Zbigniew Jędrzejewski-Szmekb1ffacb2018-03-22 08:34:21 +0100596perl = find_program('perl', required : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400597
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -0400598meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400599mkdir_p = 'mkdir -p $DESTDIR/@0@'
Zbigniew Jędrzejewski-Szmekd83f4f52017-04-16 12:04:46 -0400600test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
601splash_bmp = files('test/splash.bmp')
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400602
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400603# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
604# /usr/sbin, /sbin, and fall back to the default from middle column.
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500605progs = [['quotaon', '/usr/sbin/quotaon' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400606 ['quotacheck', '/usr/sbin/quotacheck' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400607 ['kmod', '/usr/bin/kmod' ],
608 ['kexec', '/usr/sbin/kexec' ],
609 ['sulogin', '/usr/sbin/sulogin' ],
610 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
611 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
612 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
613 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
614 ]
615foreach prog : progs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400616 path = get_option(prog[0] + '-path')
617 if path != ''
618 message('Using @1@ for @0@'.format(prog[0], path))
619 else
620 exe = find_program(prog[0],
621 '/usr/sbin/' + prog[0],
622 '/sbin/' + prog[0],
623 required: false)
624 path = exe.found() ? exe.path() : prog[1]
625 endif
626 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
627 conf.set_quoted(name, path)
628 substs.set(name, path)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400629endforeach
630
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500631conf.set_quoted('TELINIT', get_option('telinit-path'))
632
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400633if run_command('ln', '--relative', '--help').returncode() != 0
Zbigniew Jędrzejewski-Szmekcd001012018-03-09 08:56:23 +0100634 error('ln does not support --relative (added in coreutils 8.16)')
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400635endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400636
637############################################################
638
639gperf = find_program('gperf')
640
641gperf_test_format = '''
642#include <string.h>
643const char * in_word_set(const char *, @0@);
644@1@
645'''
646gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
647gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
648gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
649if cc.compiles(gperf_test)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400650 gperf_len_type = 'size_t'
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400651else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400652 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
653 if cc.compiles(gperf_test)
654 gperf_len_type = 'unsigned'
655 else
656 error('unable to determine gperf len type')
657 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400658endif
659message('gperf len type is @0@'.format(gperf_len_type))
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400660conf.set('GPERF_LEN_TYPE', gperf_len_type,
661 description : 'The type of gperf "len" parameter')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400662
663############################################################
664
665if not cc.has_header('sys/capability.h')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400666 error('POSIX caps headers not found')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400667endif
Björn Esser9f555bb2018-01-25 15:30:15 +0100668foreach header : ['crypt.h',
Yu Watanabeb9683ba2018-12-04 07:46:59 +0100669 'linux/btrfs_tree.h',
Yu Watanabe80df8f22018-10-21 18:35:46 +0900670 'linux/fou.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400671 'linux/memfd.h',
672 'linux/vm_sockets.h',
Yu Watanabe9714c022018-12-02 16:27:02 +0100673 'linux/can/vxcan.h',
Zbigniew Jędrzejewski-Szmekaf8786b2017-10-03 12:09:40 +0200674 'sys/auxv.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400675 'valgrind/memcheck.h',
676 'valgrind/valgrind.h',
677 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400678
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200679 conf.set10('HAVE_' + header.underscorify().to_upper(),
680 cc.has_header(header))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400681endforeach
682
683############################################################
684
685conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -0400686conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
687gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400688
689default_hierarchy = get_option('default-hierarchy')
690conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
691 description : 'default cgroup hierarchy as string')
692if default_hierarchy == 'legacy'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400693 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400694elif default_hierarchy == 'hybrid'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400695 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400696else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400697 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400698endif
699
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +0100700default_net_naming_scheme = get_option('default-net-naming-scheme')
701conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
702
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400703time_epoch = get_option('time-epoch')
Yu Watanabeac093402018-05-10 16:04:16 +0900704if time_epoch == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400705 NEWS = files('NEWS')
Yu Watanabeac093402018-05-10 16:04:16 +0900706 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400707endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400708conf.set('TIME_EPOCH', time_epoch)
709
710system_uid_max = get_option('system-uid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900711if system_uid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400712 system_uid_max = run_command(
713 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800714 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
715 '/etc/login.defs').stdout().strip()
716 if system_uid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900717 system_uid_max = 999
718 else
719 system_uid_max = system_uid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800720 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400721endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400722conf.set('SYSTEM_UID_MAX', system_uid_max)
723substs.set('systemuidmax', system_uid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400724
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400725system_gid_max = get_option('system-gid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900726if system_gid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400727 system_gid_max = run_command(
728 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800729 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
730 '/etc/login.defs').stdout().strip()
731 if system_gid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900732 system_gid_max = 999
733 else
734 system_gid_max = system_gid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800735 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400736endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400737conf.set('SYSTEM_GID_MAX', system_gid_max)
738substs.set('systemgidmax', system_gid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400739
Yu Watanabeac093402018-05-10 16:04:16 +0900740dynamic_uid_min = get_option('dynamic-uid-min')
741dynamic_uid_max = get_option('dynamic-uid-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100742conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
743conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
744substs.set('dynamicuidmin', dynamic_uid_min)
745substs.set('dynamicuidmax', dynamic_uid_max)
746
Yu Watanabeac093402018-05-10 16:04:16 +0900747container_uid_base_min = get_option('container-uid-base-min')
748container_uid_base_max = get_option('container-uid-base-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100749conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
750conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
751substs.set('containeruidbasemin', container_uid_base_min)
752substs.set('containeruidbasemax', container_uid_base_max)
753
Lennart Poetteringafde4572017-12-05 11:00:24 +0100754nobody_user = get_option('nobody-user')
755nobody_group = get_option('nobody-group')
756
Chen Qi2484bff2018-07-23 14:53:09 +0800757if not meson.is_cross_build()
758 getent_result = run_command('getent', 'passwd', '65534')
759 if getent_result.returncode() == 0
760 name = getent_result.stdout().split(':')[0]
761 if name != nobody_user
762 warning('\n' +
763 '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) +
764 'Your build will result in an user table setup that is incompatible with the local system.')
765 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100766 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800767 id_result = run_command('id', '-u', nobody_user)
768 if id_result.returncode() == 0
769 id = id_result.stdout().to_int()
770 if id != 65534
771 warning('\n' +
772 '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) +
773 'Your build will result in an user table setup that is incompatible with the local system.')
774 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100775 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100776
Chen Qi2484bff2018-07-23 14:53:09 +0800777 getent_result = run_command('getent', 'group', '65534')
778 if getent_result.returncode() == 0
779 name = getent_result.stdout().split(':')[0]
780 if name != nobody_group
781 warning('\n' +
782 '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) +
783 'Your build will result in an group table setup that is incompatible with the local system.')
784 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100785 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800786 id_result = run_command('id', '-g', nobody_group)
787 if id_result.returncode() == 0
788 id = id_result.stdout().to_int()
789 if id != 65534
790 warning('\n' +
791 '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) +
792 'Your build will result in an group table setup that is incompatible with the local system.')
793 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100794 endif
795endif
Yu Watanabe8374cc62017-12-07 17:19:11 +0900796if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
Yu Watanabe8ea9fad2018-05-10 14:50:52 +0900797 warning('\n' +
798 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
799 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
Yu Watanabe8374cc62017-12-07 17:19:11 +0900800endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100801
802conf.set_quoted('NOBODY_USER_NAME', nobody_user)
803conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
Yu Watanabe60712022017-12-07 15:49:16 +0900804substs.set('NOBODY_USER_NAME', nobody_user)
805substs.set('NOBODY_GROUP_NAME', nobody_group)
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100806
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400807tty_gid = get_option('tty-gid')
808conf.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400809substs.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400810
Ikey Doherty84786b82017-12-03 12:28:23 +0000811# Ensure provided GID argument is numeric, otherwise fallback to default assignment
Yu Watanabeac093402018-05-10 16:04:16 +0900812users_gid = get_option('users-gid')
813substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
Ikey Doherty84786b82017-12-03 12:28:23 +0000814
Yu Watanabe348b4432018-05-07 18:17:35 +0900815conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
816conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400817
Michael Bieblace5e312018-07-13 23:36:13 +0200818dev_kvm_mode = get_option('dev-kvm-mode')
819substs.set('DEV_KVM_MODE', dev_kvm_mode)
820conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
Tom Stellard4e15a732017-10-31 08:46:24 -0700821substs.set('GROUP_RENDER_MODE', get_option('group-render-mode'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400822
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400823kill_user_processes = get_option('default-kill-user-processes')
824conf.set10('KILL_USER_PROCESSES', kill_user_processes)
Michal Koutnýc7f7e852018-03-09 16:40:41 +0100825conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400826substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400827
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400828dns_servers = get_option('dns-servers')
829conf.set_quoted('DNS_SERVERS', dns_servers)
830substs.set('DNS_SERVERS', dns_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400831
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400832ntp_servers = get_option('ntp-servers')
833conf.set_quoted('NTP_SERVERS', ntp_servers)
834substs.set('NTP_SERVERS', ntp_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400835
836conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
837
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400838substs.set('SUSHELL', get_option('debug-shell'))
839substs.set('DEBUGTTY', get_option('debug-tty'))
840
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200841enable_debug_hashmap = false
842enable_debug_mmap_cache = false
Yu Watanabed6601492018-11-23 00:36:35 +0900843enable_debug_siphash = false
Yu Watanabe20e97dd2018-11-23 00:28:27 +0900844enable_debug_udev = false
Zbigniew Jędrzejewski-Szmek8f6b4422018-08-19 19:11:30 +0200845foreach name : get_option('debug-extra')
Yu Watanabead7aa762018-05-02 13:56:28 +0900846 if name == 'hashmap'
847 enable_debug_hashmap = true
848 elif name == 'mmap-cache'
849 enable_debug_mmap_cache = true
Yu Watanabed6601492018-11-23 00:36:35 +0900850 elif name == 'siphash'
851 enable_debug_siphash = true
Yu Watanabe20e97dd2018-11-23 00:28:27 +0900852 elif name == 'udev'
853 enable_debug_udev = true
Yu Watanabead7aa762018-05-02 13:56:28 +0900854 else
855 message('unknown debug option "@0@", ignoring'.format(name))
856 endif
857endforeach
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200858conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
859conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
Yu Watanabed6601492018-11-23 00:36:35 +0900860conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
Yu Watanabe20e97dd2018-11-23 00:28:27 +0900861conf.set10('ENABLE_DEBUG_UDEV', enable_debug_udev)
Zbigniew Jędrzejewski-Szmek671677d2017-04-27 20:51:34 -0400862
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200863conf.set10('VALGRIND', get_option('valgrind'))
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +0200864conf.set10('LOG_TRACE', get_option('log-trace'))
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200865
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400866#####################################################################
867
868threads = dependency('threads')
869librt = cc.find_library('rt')
870libm = cc.find_library('m')
871libdl = cc.find_library('dl')
872libcrypt = cc.find_library('crypt')
873
Zbigniew Jędrzejewski-Szmek1800cc82017-04-27 01:30:30 -0400874libcap = dependency('libcap', required : false)
875if not libcap.found()
876 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
877 libcap = cc.find_library('cap')
878endif
879
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400880libmount = dependency('mount',
Zbigniew Jędrzejewski-Szmekc0b4b0f2018-03-09 14:58:47 +0100881 version : fuzzer_build ? '>= 0' : '>= 2.30')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400882
883want_seccomp = get_option('seccomp')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500884if want_seccomp != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400885 libseccomp = dependency('libseccomp',
Zbigniew Jędrzejewski-Szmek9f0e9c02017-04-27 10:05:18 -0400886 version : '>= 2.3.1',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400887 required : want_seccomp == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200888 have = libseccomp.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400889else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200890 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400891 libseccomp = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400892endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200893conf.set10('HAVE_SECCOMP', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400894
895want_selinux = get_option('selinux')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500896if want_selinux != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400897 libselinux = dependency('libselinux',
898 version : '>= 2.1.9',
899 required : want_selinux == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200900 have = libselinux.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400901else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200902 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400903 libselinux = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400904endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200905conf.set10('HAVE_SELINUX', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400906
907want_apparmor = get_option('apparmor')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500908if want_apparmor != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400909 libapparmor = dependency('libapparmor',
910 required : want_apparmor == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200911 have = libapparmor.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400912else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200913 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400914 libapparmor = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400915endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200916conf.set10('HAVE_APPARMOR', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400917
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400918smack_run_label = get_option('smack-run-label')
919if smack_run_label != ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400920 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400921endif
922
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400923want_polkit = get_option('polkit')
924install_polkit = false
925install_polkit_pkla = false
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500926if want_polkit != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400927 install_polkit = true
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400928
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400929 libpolkit = dependency('polkit-gobject-1',
930 required : false)
931 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
932 message('Old polkit detected, will install pkla files')
933 install_polkit_pkla = true
934 endif
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400935endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200936conf.set10('ENABLE_POLKIT', install_polkit)
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400937
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400938want_acl = get_option('acl')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500939if want_acl != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400940 libacl = cc.find_library('acl', required : want_acl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200941 have = libacl.found()
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400942else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200943 have = false
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400944 libacl = []
945endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200946conf.set10('HAVE_ACL', have)
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400947
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400948want_audit = get_option('audit')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500949if want_audit != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400950 libaudit = dependency('audit', required : want_audit == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200951 have = libaudit.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400952else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200953 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400954 libaudit = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400955endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200956conf.set10('HAVE_AUDIT', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400957
958want_blkid = get_option('blkid')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500959if want_blkid != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400960 libblkid = dependency('blkid', required : want_blkid == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200961 have = libblkid.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400962else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200963 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400964 libblkid = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400965endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200966conf.set10('HAVE_BLKID', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400967
968want_kmod = get_option('kmod')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500969if want_kmod != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400970 libkmod = dependency('libkmod',
971 version : '>= 15',
972 required : want_kmod == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200973 have = libkmod.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400974else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200975 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400976 libkmod = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400977endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200978conf.set10('HAVE_KMOD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400979
980want_pam = get_option('pam')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500981if want_pam != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400982 libpam = cc.find_library('pam', required : want_pam == 'true')
983 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200984 have = libpam.found() and libpam_misc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400985else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200986 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400987 libpam = []
988 libpam_misc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400989endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200990conf.set10('HAVE_PAM', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400991
992want_microhttpd = get_option('microhttpd')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500993if want_microhttpd != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400994 libmicrohttpd = dependency('libmicrohttpd',
995 version : '>= 0.9.33',
996 required : want_microhttpd == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200997 have = libmicrohttpd.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400998else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200999 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001000 libmicrohttpd = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001001endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001002conf.set10('HAVE_MICROHTTPD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001003
1004want_libcryptsetup = get_option('libcryptsetup')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001005if want_libcryptsetup != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001006 libcryptsetup = dependency('libcryptsetup',
1007 version : '>= 1.6.0',
1008 required : want_libcryptsetup == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001009 have = libcryptsetup.found()
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +01001010 have_sector = cc.has_member(
1011 'struct crypt_params_plain',
1012 'sector_size',
1013 prefix : '#include <libcryptsetup.h>')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001014else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001015 have = false
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +01001016 have_sector = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001017 libcryptsetup = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001018endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001019conf.set10('HAVE_LIBCRYPTSETUP', have)
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +01001020conf.set10('HAVE_LIBCRYPTSETUP_SECTOR_SIZE', have_sector)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001021
1022want_libcurl = get_option('libcurl')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001023if want_libcurl != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001024 libcurl = dependency('libcurl',
1025 version : '>= 7.32.0',
1026 required : want_libcurl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001027 have = libcurl.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001028else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001029 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001030 libcurl = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001031endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001032conf.set10('HAVE_LIBCURL', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001033
1034want_libidn = get_option('libidn')
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -04001035want_libidn2 = get_option('libidn2')
1036if want_libidn == 'true' and want_libidn2 == 'true'
1037 error('libidn and libidn2 cannot be requested simultaneously')
1038endif
1039
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001040if want_libidn != 'false' and want_libidn2 != 'true' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001041 libidn = dependency('libidn',
1042 required : want_libidn == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001043 have = libidn.found()
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -04001044else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001045 have = false
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -04001046 libidn = []
1047endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001048conf.set10('HAVE_LIBIDN', have)
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001049if not have and want_libidn2 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -04001050 # libidn is used for both libidn and libidn2 objects
1051 libidn = dependency('libidn2',
1052 required : want_libidn2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001053 have = libidn.found()
1054else
1055 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001056endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001057conf.set10('HAVE_LIBIDN2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001058
1059want_libiptc = get_option('libiptc')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001060if want_libiptc != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001061 libiptc = dependency('libiptc',
1062 required : want_libiptc == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001063 have = libiptc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001064else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001065 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001066 libiptc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001067endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001068conf.set10('HAVE_LIBIPTC', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001069
1070want_qrencode = get_option('qrencode')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001071if want_qrencode != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001072 libqrencode = dependency('libqrencode',
1073 required : want_qrencode == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001074 have = libqrencode.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001075else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001076 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001077 libqrencode = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001078endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001079conf.set10('HAVE_QRENCODE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001080
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001081want_gcrypt = get_option('gcrypt')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001082if want_gcrypt != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001083 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1084 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001085 have = libgcrypt.found() and libgpg_error.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001086else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001087 have = false
1088endif
1089if not have
1090 # link to neither of the libs if one is not found
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001091 libgcrypt = []
1092 libgpg_error = []
1093endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001094conf.set10('HAVE_GCRYPT', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001095
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001096want_gnutls = get_option('gnutls')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001097if want_gnutls != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001098 libgnutls = dependency('gnutls',
1099 version : '>= 3.1.4',
1100 required : want_gnutls == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001101 have = libgnutls.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001102else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001103 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001104 libgnutls = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001105endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001106conf.set10('HAVE_GNUTLS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001107
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001108want_openssl = get_option('openssl')
1109if want_openssl != 'false' and not fuzzer_build
1110 libopenssl = dependency('openssl',
1111 version : '>= 1.1.0',
1112 required : want_openssl == 'true')
1113 have = libopenssl.found()
1114else
1115 have = false
1116 libopenssl = []
1117endif
1118conf.set10('HAVE_OPENSSL', have)
1119
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001120want_elfutils = get_option('elfutils')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001121if want_elfutils != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001122 libdw = dependency('libdw',
1123 required : want_elfutils == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001124 have = libdw.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001125else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001126 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001127 libdw = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001128endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001129conf.set10('HAVE_ELFUTILS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001130
1131want_zlib = get_option('zlib')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001132if want_zlib != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001133 libz = dependency('zlib',
1134 required : want_zlib == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001135 have = libz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001136else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001137 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001138 libz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001139endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001140conf.set10('HAVE_ZLIB', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001141
1142want_bzip2 = get_option('bzip2')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001143if want_bzip2 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001144 libbzip2 = cc.find_library('bz2',
1145 required : want_bzip2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001146 have = libbzip2.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001147else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001148 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001149 libbzip2 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001150endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001151conf.set10('HAVE_BZIP2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001152
1153want_xz = get_option('xz')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001154if want_xz != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001155 libxz = dependency('liblzma',
1156 required : want_xz == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001157 have = libxz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001158else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001159 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001160 libxz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001161endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001162conf.set10('HAVE_XZ', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001163
1164want_lz4 = get_option('lz4')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001165if want_lz4 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001166 liblz4 = dependency('liblz4',
Zbigniew Jędrzejewski-Szmeke0a1d4b2018-10-29 18:32:51 +01001167 version : '>= 1.3.0',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001168 required : want_lz4 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001169 have = liblz4.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001170else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001171 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001172 liblz4 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001173endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001174conf.set10('HAVE_LZ4', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001175
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001176want_xkbcommon = get_option('xkbcommon')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001177if want_xkbcommon != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001178 libxkbcommon = dependency('xkbcommon',
1179 version : '>= 0.3.0',
1180 required : want_xkbcommon == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001181 have = libxkbcommon.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001182else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001183 have = false
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001184 libxkbcommon = []
1185endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001186conf.set10('HAVE_XKBCOMMON', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001187
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01001188want_pcre2 = get_option('pcre2')
1189if want_pcre2 != 'false'
1190 libpcre2 = dependency('libpcre2-8',
1191 required : want_pcre2 == 'true')
1192 have = libpcre2.found()
1193else
1194 have = false
1195 libpcre2 = []
1196endif
1197conf.set10('HAVE_PCRE2', have)
1198
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001199want_glib = get_option('glib')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001200if want_glib != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001201 libglib = dependency('glib-2.0',
1202 version : '>= 2.22.0',
1203 required : want_glib == 'true')
1204 libgobject = dependency('gobject-2.0',
1205 version : '>= 2.22.0',
1206 required : want_glib == 'true')
1207 libgio = dependency('gio-2.0',
1208 required : want_glib == 'true')
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -04001209 have = libglib.found() and libgobject.found() and libgio.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001210else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001211 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001212 libglib = []
1213 libgobject = []
1214 libgio = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001215endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001216conf.set10('HAVE_GLIB', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001217
1218want_dbus = get_option('dbus')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001219if want_dbus != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001220 libdbus = dependency('dbus-1',
1221 version : '>= 1.3.2',
1222 required : want_dbus == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001223 have = libdbus.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001224else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001225 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001226 libdbus = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001227endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001228conf.set10('HAVE_DBUS', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001229
Yu Watanabe42303dc2017-06-18 05:22:32 +09001230default_dnssec = get_option('default-dnssec')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001231if fuzzer_build
Jonathan Rudenbergb4081f32018-01-15 18:27:37 -05001232 default_dnssec = 'no'
1233endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001234if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
Yu Watanabe42303dc2017-06-18 05:22:32 +09001235 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1236 default_dnssec = 'no'
1237endif
1238conf.set('DEFAULT_DNSSEC_MODE',
1239 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1240substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1241
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001242dns_over_tls = get_option('dns-over-tls')
1243if dns_over_tls != 'false'
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001244 if dns_over_tls == 'openssl'
1245 have_gnutls = false
1246 else
1247 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.5.3'))
1248 if dns_over_tls == 'gnutls' and not have_gnutls
1249 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1250 endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001251 endif
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001252 if dns_over_tls == 'gnutls' or have_gnutls
1253 have_openssl = false
1254 else
1255 have_openssl = conf.get('HAVE_OPENSSL') == 1
1256 if dns_over_tls != 'auto' and not have_openssl
1257 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
1258 error('DNS-over-TLS support was requested$0$, but dependencies are not available'.format(str))
1259 endif
1260 endif
1261 have = have_gnutls or have_openssl
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001262else
Michael Olbrichbe5536a2018-11-11 11:30:53 +01001263 have = false
1264 have_gnutls = false
1265 have_openssl = false
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001266endif
1267conf.set10('ENABLE_DNS_OVER_TLS', have)
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001268conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1269conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001270
Iwan Timmerc9299be2018-06-13 20:26:24 +02001271default_dns_over_tls = get_option('default-dns-over-tls')
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001272if fuzzer_build
Iwan Timmerc9299be2018-06-13 20:26:24 +02001273 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001274endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001275if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
1276 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 +02001277 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001278endif
Iwan Timmerc9299be2018-06-13 20:26:24 +02001279conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1280 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1281substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001282
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001283want_importd = get_option('importd')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001284if want_importd != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001285 have = (conf.get('HAVE_LIBCURL') == 1 and
1286 conf.get('HAVE_ZLIB') == 1 and
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001287 conf.get('HAVE_XZ') == 1 and
1288 conf.get('HAVE_GCRYPT') == 1)
1289 if want_importd == 'true' and not have
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001290 error('importd support was requested, but dependencies are not available')
1291 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001292else
1293 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001294endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001295conf.set10('ENABLE_IMPORTD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001296
1297want_remote = get_option('remote')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001298if want_remote != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001299 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1300 conf.get('HAVE_LIBCURL') == 1]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001301 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1302 # it's possible to build one without the other. Complain only if
1303 # support was explictly requested. The auxiliary files like sysusers
1304 # config should be installed when any of the programs are built.
1305 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1306 error('remote support was requested, but dependencies are not available')
1307 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001308 have = have_deps[0] or have_deps[1]
1309else
1310 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001311endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001312conf.set10('ENABLE_REMOTE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001313
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001314foreach term : ['utmp',
1315 'hibernate',
1316 'environment-d',
1317 'binfmt',
1318 'coredump',
1319 'resolve',
1320 'logind',
1321 'hostnamed',
1322 'localed',
1323 'machined',
Lennart Poettering61d05782018-04-16 21:41:40 +02001324 'portabled',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001325 'networkd',
1326 'timedated',
1327 'timesyncd',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001328 'firstboot',
1329 'randomseed',
1330 'backlight',
1331 'vconsole',
1332 'quotacheck',
1333 'sysusers',
1334 'tmpfiles',
1335 'hwdb',
1336 'rfkill',
1337 'ldconfig',
1338 'efi',
1339 'tpm',
1340 'ima',
1341 'smack',
1342 'gshadow',
1343 'idn',
Yu Watanabe08540a92018-07-18 09:25:57 +09001344 'nss-myhostname',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001345 'nss-systemd']
1346 have = get_option(term)
1347 name = 'ENABLE_' + term.underscorify().to_upper()
1348 conf.set10(name, have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001349endforeach
1350
Yu Watanabe08540a92018-07-18 09:25:57 +09001351foreach tuple : [['nss-mymachines', 'machined'],
1352 ['nss-resolve', 'resolve']]
1353 want = get_option(tuple[0])
1354 if want != 'false'
1355 have = get_option(tuple[1])
1356 if want == 'true' and not have
1357 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1358 endif
1359 else
1360 have = false
1361 endif
1362 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1363 conf.set10(name, have)
1364endforeach
1365
1366enable_nss = false
1367foreach term : ['ENABLE_NSS_MYHOSTNAME',
1368 'ENABLE_NSS_MYMACHINES',
1369 'ENABLE_NSS_RESOLVE',
1370 'ENABLE_NSS_SYSTEMD']
1371 if conf.get(term) == 1
1372 enable_nss = true
1373 endif
1374endforeach
1375conf.set10('ENABLE_NSS', enable_nss)
1376
Yu Watanabe348b4432018-05-07 18:17:35 +09001377conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
Yu Watanabe6129ec82018-05-03 18:07:43 +09001378
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001379tests = []
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001380fuzzers = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001381
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11001382conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
Zbigniew Jędrzejewski-Szmek00d82c82017-07-12 21:25:17 +00001383
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001384#####################################################################
1385
1386if get_option('efi')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001387 efi_arch = host_machine.cpu_family()
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001388
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001389 if efi_arch == 'x86'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001390 EFI_MACHINE_TYPE_NAME = 'ia32'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001391 gnu_efi_arch = 'ia32'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001392 elif efi_arch == 'x86_64'
1393 EFI_MACHINE_TYPE_NAME = 'x64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001394 gnu_efi_arch = 'x86_64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001395 elif efi_arch == 'arm'
1396 EFI_MACHINE_TYPE_NAME = 'arm'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001397 gnu_efi_arch = 'arm'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001398 elif efi_arch == 'aarch64'
1399 EFI_MACHINE_TYPE_NAME = 'aa64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001400 gnu_efi_arch = 'aarch64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001401 else
1402 EFI_MACHINE_TYPE_NAME = ''
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001403 gnu_efi_arch = ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001404 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001405
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001406 have = true
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001407 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
Zbigniew Jędrzejewski-Szmek80c6fce2017-04-24 19:28:04 -04001408
Yu Watanabeac093402018-05-10 16:04:16 +09001409 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001410else
1411 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001412endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001413conf.set10('ENABLE_EFI', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001414
1415#####################################################################
1416
1417config_h = configure_file(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001418 output : 'config.h',
1419 configuration : conf)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001420
Yu Watanabe348b4432018-05-07 18:17:35 +09001421meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1422
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001423includes = include_directories('src/basic',
1424 'src/shared',
1425 'src/systemd',
1426 'src/journal',
Zbigniew Jędrzejewski-Szmeka38f7fe2018-05-16 12:05:07 +02001427 'src/journal-remote',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02001428 'src/nspawn',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001429 'src/resolve',
1430 'src/timesync',
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05001431 'src/time-wait-sync',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001432 'src/login',
1433 'src/udev',
1434 'src/libudev',
1435 'src/core',
1436 'src/libsystemd/sd-bus',
1437 'src/libsystemd/sd-device',
Yu Watanabea137a1c2018-11-16 17:30:42 +09001438 'src/libsystemd/sd-event',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001439 'src/libsystemd/sd-hwdb',
1440 'src/libsystemd/sd-id128',
1441 'src/libsystemd/sd-netlink',
1442 'src/libsystemd/sd-network',
Yu Watanabeceb26cd2018-12-10 15:45:48 +09001443 'src/libsystemd/sd-resolve',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001444 'src/libsystemd-network',
Zbigniew Jędrzejewski-Szmek2d4ceca2017-12-19 14:19:46 +01001445 '.')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001446
1447add_project_arguments('-include', 'config.h', language : 'c')
1448
Yu Watanabe6ec439f2018-11-28 20:19:41 +09001449generate_gperfs = find_program('tools/generate-gperfs.py')
1450
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001451subdir('po')
1452subdir('catalog')
1453subdir('src/systemd')
1454subdir('src/basic')
1455subdir('src/libsystemd')
1456subdir('src/libsystemd-network')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001457subdir('src/journal')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001458subdir('src/login')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001459
1460libjournal_core = static_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001461 'journal-core',
1462 libjournal_core_sources,
1463 journald_gperf_c,
1464 include_directories : includes,
1465 install : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001466
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04001467libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001468libsystemd = shared_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001469 'systemd',
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001470 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +02001471 version : libsystemd_version,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001472 include_directories : includes,
1473 link_args : ['-shared',
1474 '-Wl,--version-script=' + libsystemd_sym_path],
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001475 link_with : [libbasic,
1476 libbasic_gcrypt],
Zbigniew Jędrzejewski-Szmek5e3cec82017-12-19 19:38:43 +01001477 link_whole : [libsystemd_static,
1478 libjournal_client],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001479 dependencies : [threads,
1480 librt,
1481 libxz,
1482 liblz4],
1483 link_depends : libsystemd_sym,
1484 install : true,
1485 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001486
Davide Cavalca70848ec2018-04-09 02:43:35 -07001487static_libsystemd = get_option('static-libsystemd')
1488static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1489
1490install_libsystemd_static = static_library(
1491 'systemd',
1492 libsystemd_sources,
1493 journal_client_sources,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001494 basic_sources,
1495 basic_gcrypt_sources,
Yu Watanabebe44b572018-10-12 11:59:55 +09001496 disable_mempool_c,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001497 include_directories : includes,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001498 build_by_default : static_libsystemd != 'false',
1499 install : static_libsystemd != 'false',
1500 install_dir : rootlibdir,
1501 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1502 dependencies : [threads,
1503 librt,
1504 libxz,
1505 liblz4,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001506 libcap,
1507 libblkid,
1508 libmount,
1509 libselinux,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001510 libgcrypt],
1511 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1512
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001513############################################################
1514
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001515# binaries that have --help and are intended for use by humans,
1516# usually, but not always, installed in /bin.
1517public_programs = []
1518
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001519subdir('src/libudev')
1520subdir('src/shared')
1521subdir('src/core')
1522subdir('src/udev')
1523subdir('src/network')
1524
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001525subdir('src/analyze')
1526subdir('src/journal-remote')
1527subdir('src/coredump')
1528subdir('src/hostname')
1529subdir('src/import')
1530subdir('src/kernel-install')
1531subdir('src/locale')
1532subdir('src/machine')
Lennart Poettering61d05782018-04-16 21:41:40 +02001533subdir('src/portable')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001534subdir('src/nspawn')
1535subdir('src/resolve')
1536subdir('src/timedate')
1537subdir('src/timesync')
1538subdir('src/vconsole')
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001539subdir('src/boot/efi')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001540
1541subdir('src/test')
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001542subdir('src/fuzz')
Zbigniew Jędrzejewski-Szmek6b97bf22017-11-22 12:42:28 +01001543subdir('rules')
Zbigniew Jędrzejewski-Szmek4ff3f252017-04-13 20:47:20 -04001544subdir('test')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001545
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001546############################################################
1547
1548# only static linking apart from libdl, to make sure that the
1549# module is linked to all libraries that it uses.
1550test_dlopen = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001551 'test-dlopen',
1552 test_dlopen_c,
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001553 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001554 include_directories : includes,
1555 link_with : [libbasic],
Yu Watanabefd1939f2018-09-12 21:47:56 +09001556 dependencies : [libdl],
1557 build_by_default : want_tests != 'false')
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001558
Yu Watanabe08540a92018-07-18 09:25:57 +09001559foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
Waldemar Brodkorbe7e11bb2017-06-24 19:30:26 +02001560 ['systemd', 'ENABLE_NSS_SYSTEMD'],
Yu Watanabe08540a92018-07-18 09:25:57 +09001561 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1562 ['resolve', 'ENABLE_NSS_RESOLVE']]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001563
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001564 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001565 if condition
1566 module = tuple[0]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001567
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001568 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02001569 version_script_arg = join_paths(meson.source_root(), sym)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001570
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001571 nss = shared_library(
1572 'nss_' + module,
1573 'src/nss-@0@/nss-@0@.c'.format(module),
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001574 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001575 version : '2',
1576 include_directories : includes,
Lennart Poetteringb4b36f42017-12-12 20:13:16 +01001577 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1578 link_args : ['-Wl,-z,nodelete',
1579 '-shared',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001580 '-Wl,--version-script=' + version_script_arg,
1581 '-Wl,--undefined'],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001582 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001583 libbasic],
1584 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek5486a312017-05-12 08:31:46 -04001585 librt],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001586 link_depends : sym,
1587 install : true,
1588 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001589
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001590 # We cannot use shared_module because it does not support version suffix.
1591 # Unfortunately shared_library insists on creating the symlink…
1592 meson.add_install_script('sh', '-c',
1593 'rm $DESTDIR@0@/libnss_@1@.so'
1594 .format(rootlibdir, module))
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001595
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001596 if want_tests != 'false'
1597 test('dlopen-nss_' + module,
1598 test_dlopen,
1599 # path to dlopen must include a slash
1600 args : nss.full_path())
1601 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001602 endif
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001603endforeach
1604
1605############################################################
1606
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001607executable('systemd',
1608 systemd_sources,
1609 include_directories : includes,
1610 link_with : [libcore,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001611 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001612 dependencies : [threads,
1613 librt,
1614 libseccomp,
1615 libselinux,
Zbigniew Jędrzejewski-Szmekf4ee10a2017-04-09 14:08:53 -04001616 libmount,
1617 libblkid],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001618 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001619 install : true,
1620 install_dir : rootlibexecdir)
1621
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001622meson.add_install_script(meson_make_symlink,
1623 join_paths(rootlibexecdir, 'systemd'),
1624 join_paths(rootsbindir, 'init'))
1625
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001626exe = executable('systemd-analyze',
1627 systemd_analyze_sources,
1628 include_directories : includes,
1629 link_with : [libcore,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001630 libshared],
1631 dependencies : [threads,
1632 librt,
1633 libseccomp,
1634 libselinux,
1635 libmount,
1636 libblkid],
1637 install_rpath : rootlibexecdir,
1638 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001639public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001640
1641executable('systemd-journald',
1642 systemd_journald_sources,
1643 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001644 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001645 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001646 dependencies : [threads,
1647 libxz,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001648 liblz4,
1649 libselinux],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001650 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001651 install : true,
1652 install_dir : rootlibexecdir)
1653
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001654exe = executable('systemd-cat',
1655 systemd_cat_sources,
1656 include_directories : includes,
1657 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001658 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001659 dependencies : [threads],
1660 install_rpath : rootlibexecdir,
1661 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001662public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001663
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001664exe = executable('journalctl',
1665 journalctl_sources,
1666 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001667 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001668 dependencies : [threads,
1669 libqrencode,
1670 libxz,
Zbigniew Jędrzejewski-Szmek6becf482018-01-12 07:55:45 +01001671 liblz4,
1672 libpcre2],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001673 install_rpath : rootlibexecdir,
1674 install : true,
1675 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001676public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001677
1678executable('systemd-getty-generator',
1679 'src/getty-generator/getty-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001680 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001681 link_with : [libshared],
1682 install_rpath : rootlibexecdir,
1683 install : true,
1684 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001685
1686executable('systemd-debug-generator',
1687 'src/debug-generator/debug-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001688 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001689 link_with : [libshared],
1690 install_rpath : rootlibexecdir,
1691 install : true,
1692 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001693
Lennart Poettering35a1ff42018-11-15 22:09:29 +01001694executable('systemd-run-generator',
1695 'src/run-generator/run-generator.c',
1696 include_directories : includes,
1697 link_with : [libshared],
1698 install_rpath : rootlibexecdir,
1699 install : true,
1700 install_dir : systemgeneratordir)
1701
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001702executable('systemd-fstab-generator',
1703 'src/fstab-generator/fstab-generator.c',
1704 'src/core/mount-setup.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001705 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001706 link_with : [libshared],
1707 install_rpath : rootlibexecdir,
1708 install : true,
1709 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001710
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001711if conf.get('ENABLE_ENVIRONMENT_D') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001712 executable('30-systemd-environment-d-generator',
1713 'src/environment-d-generator/environment-d-generator.c',
1714 include_directories : includes,
1715 link_with : [libshared],
1716 install_rpath : rootlibexecdir,
1717 install : true,
1718 install_dir : userenvgeneratordir)
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04001719
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001720 meson.add_install_script(meson_make_symlink,
1721 join_paths(sysconfdir, 'environment'),
1722 join_paths(environmentdir, '99-environment.conf'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001723endif
1724
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001725if conf.get('ENABLE_HIBERNATE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001726 executable('systemd-hibernate-resume-generator',
1727 'src/hibernate-resume/hibernate-resume-generator.c',
1728 include_directories : includes,
1729 link_with : [libshared],
1730 install_rpath : rootlibexecdir,
1731 install : true,
1732 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001733
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001734 executable('systemd-hibernate-resume',
1735 'src/hibernate-resume/hibernate-resume.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001736 include_directories : includes,
1737 link_with : [libshared],
1738 install_rpath : rootlibexecdir,
1739 install : true,
1740 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001741endif
1742
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001743if conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001744 executable('systemd-gpt-auto-generator',
1745 'src/gpt-auto-generator/gpt-auto-generator.c',
Zbigniew Jędrzejewski-Szmekd284b822018-11-19 11:12:28 +01001746 'src/shared/blkid-util.h',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001747 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001748 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001749 dependencies : libblkid,
1750 install_rpath : rootlibexecdir,
1751 install : true,
1752 install_dir : systemgeneratordir)
1753
1754 exe = executable('systemd-dissect',
1755 'src/dissect/dissect.c',
1756 include_directories : includes,
1757 link_with : [libshared],
1758 install_rpath : rootlibexecdir,
1759 install : true,
1760 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001761 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001762endif
1763
Zbigniew Jędrzejewski-Szmek1ec57f32017-10-03 13:12:29 +02001764if conf.get('ENABLE_RESOLVE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001765 executable('systemd-resolved',
1766 systemd_resolved_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001767 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001768 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001769 libbasic_gcrypt,
1770 libsystemd_resolve_core],
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001771 dependencies : systemd_resolved_dependencies,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001772 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001773 install : true,
1774 install_dir : rootlibexecdir)
1775
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001776 exe = executable('resolvectl',
1777 resolvectl_sources,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001778 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001779 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001780 libbasic_gcrypt,
1781 libsystemd_resolve_core],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001782 dependencies : [threads,
Michael Biebl76c87412017-04-21 23:45:54 +02001783 libgpg_error,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001784 libm,
1785 libidn],
1786 install_rpath : rootlibexecdir,
1787 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001788 public_programs += exe
Lennart Poettering088c1362018-02-27 17:48:54 +01001789
1790 meson.add_install_script(meson_make_symlink,
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001791 join_paths(bindir, 'resolvectl'),
Lennart Poettering088c1362018-02-27 17:48:54 +01001792 join_paths(rootsbindir, 'resolvconf'))
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001793
1794 meson.add_install_script(meson_make_symlink,
1795 join_paths(bindir, 'resolvectl'),
1796 join_paths(bindir, 'systemd-resolve'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001797endif
1798
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001799if conf.get('ENABLE_LOGIND') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001800 executable('systemd-logind',
1801 systemd_logind_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001802 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001803 link_with : [liblogind_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001804 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001805 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001806 libacl],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001807 install_rpath : rootlibexecdir,
1808 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001809 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001810
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001811 exe = executable('loginctl',
1812 loginctl_sources,
1813 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001814 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001815 dependencies : [threads,
1816 liblz4,
1817 libxz],
1818 install_rpath : rootlibexecdir,
1819 install : true,
1820 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001821 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001822
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001823 exe = executable('systemd-inhibit',
1824 'src/login/inhibit.c',
1825 include_directories : includes,
1826 link_with : [libshared],
1827 install_rpath : rootlibexecdir,
1828 install : true,
1829 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001830 public_programs += exe
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001831
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001832 if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02001833 version_script_arg = join_paths(meson.source_root(), pam_systemd_sym)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001834 pam_systemd = shared_library(
1835 'pam_systemd',
1836 pam_systemd_c,
1837 name_prefix : '',
1838 include_directories : includes,
1839 link_args : ['-shared',
1840 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001841 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001842 libshared_static],
1843 dependencies : [threads,
1844 libpam,
1845 libpam_misc],
1846 link_depends : pam_systemd_sym,
1847 install : true,
1848 install_dir : pamlibdir)
1849
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001850 if want_tests != 'false'
1851 test('dlopen-pam_systemd',
1852 test_dlopen,
1853 # path to dlopen must include a slash
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02001854 args : pam_systemd.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001855 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001856 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001857
Lennart Poettering07ee5ad2018-08-08 14:50:57 +02001858 executable('systemd-user-runtime-dir',
1859 user_runtime_dir_sources,
1860 include_directories : includes,
1861 link_with : [libshared],
1862 install_rpath : rootlibexecdir,
1863 install : true,
1864 install_dir : rootlibexecdir)
1865endif
Zbigniew Jędrzejewski-Szmeka9f0f5e2017-12-09 19:30:17 +01001866
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001867if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001868 executable('systemd-user-sessions',
1869 'src/user-sessions/user-sessions.c',
1870 include_directories : includes,
1871 link_with : [libshared],
1872 install_rpath : rootlibexecdir,
1873 install : true,
1874 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001875endif
1876
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001877if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001878 exe = executable('bootctl',
1879 'src/boot/bootctl.c',
1880 include_directories : includes,
1881 link_with : [libshared],
1882 dependencies : [libblkid],
1883 install_rpath : rootlibexecdir,
1884 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001885 public_programs += exe
Lennart Poettering36695e82018-06-25 17:24:09 +02001886
1887 executable('systemd-bless-boot',
1888 'src/boot/bless-boot.c',
1889 include_directories : includes,
1890 link_with : [libshared],
1891 dependencies : [libblkid],
1892 install_rpath : rootlibexecdir,
1893 install : true,
1894 install_dir : rootlibexecdir)
Lennart Poettering8d16ed02018-06-22 17:00:47 +02001895
1896 executable('systemd-bless-boot-generator',
1897 'src/boot/bless-boot-generator.c',
1898 include_directories : includes,
1899 link_with : [libshared],
1900 install_rpath : rootlibexecdir,
1901 install : true,
1902 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001903endif
1904
Lennart Poetteringf876f532018-06-25 16:07:33 +02001905executable('systemd-boot-check-no-failures',
1906 'src/boot/boot-check-no-failures.c',
1907 include_directories : includes,
1908 link_with : [libshared],
1909 dependencies : [libblkid],
1910 install_rpath : rootlibexecdir,
1911 install : true,
1912 install_dir : rootlibexecdir)
1913
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001914exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1915 include_directories : includes,
1916 link_with : [libshared],
1917 dependencies : [threads],
1918 install_rpath : rootlibexecdir,
1919 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001920public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001921
Felipe Satelerf3794362018-05-22 15:08:57 -04001922
1923if get_option('link-systemctl-shared')
1924 systemctl_link_with = [libshared]
1925else
1926 systemctl_link_with = [libsystemd_static,
1927 libshared_static,
1928 libjournal_client,
1929 libbasic_gcrypt]
1930endif
1931
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001932exe = executable('systemctl', 'src/systemctl/systemctl.c',
1933 include_directories : includes,
Felipe Satelerf3794362018-05-22 15:08:57 -04001934 link_with : systemctl_link_with,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001935 dependencies : [threads,
1936 libcap,
1937 libselinux,
1938 libxz,
1939 liblz4],
1940 install_rpath : rootlibexecdir,
1941 install : true,
1942 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001943public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001944
Lennart Poettering61d05782018-04-16 21:41:40 +02001945if conf.get('ENABLE_PORTABLED') == 1
1946 executable('systemd-portabled',
1947 systemd_portabled_sources,
1948 include_directories : includes,
1949 link_with : [libshared],
1950 dependencies : [threads],
1951 install_rpath : rootlibexecdir,
1952 install : true,
1953 install_dir : rootlibexecdir)
1954
1955 exe = executable('portablectl', 'src/portable/portablectl.c',
1956 include_directories : includes,
1957 link_with : [libshared],
1958 dependencies : [threads],
1959 install_rpath : rootlibexecdir,
1960 install : true,
Lennart Poettering80f39b82018-10-08 17:28:44 +02001961 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001962 public_programs += exe
Lennart Poettering61d05782018-04-16 21:41:40 +02001963endif
1964
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001965foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1966 meson.add_install_script(meson_make_symlink,
1967 join_paths(rootbindir, 'systemctl'),
1968 join_paths(rootsbindir, alias))
1969endforeach
1970
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001971if conf.get('ENABLE_BACKLIGHT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001972 executable('systemd-backlight',
1973 'src/backlight/backlight.c',
1974 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001975 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001976 install_rpath : rootlibexecdir,
1977 install : true,
1978 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001979endif
1980
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001981if conf.get('ENABLE_RFKILL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001982 executable('systemd-rfkill',
1983 'src/rfkill/rfkill.c',
1984 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001985 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001986 install_rpath : rootlibexecdir,
1987 install : true,
1988 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001989endif
1990
1991executable('systemd-system-update-generator',
1992 'src/system-update-generator/system-update-generator.c',
1993 include_directories : includes,
1994 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001995 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001996 install : true,
1997 install_dir : systemgeneratordir)
1998
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001999if conf.get('HAVE_LIBCRYPTSETUP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002000 executable('systemd-cryptsetup',
2001 'src/cryptsetup/cryptsetup.c',
2002 include_directories : includes,
2003 link_with : [libshared],
2004 dependencies : [libcryptsetup],
2005 install_rpath : rootlibexecdir,
2006 install : true,
2007 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002008
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002009 executable('systemd-cryptsetup-generator',
2010 'src/cryptsetup/cryptsetup-generator.c',
2011 include_directories : includes,
2012 link_with : [libshared],
2013 dependencies : [libcryptsetup],
2014 install_rpath : rootlibexecdir,
2015 install : true,
2016 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002017
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002018 executable('systemd-veritysetup',
2019 'src/veritysetup/veritysetup.c',
2020 include_directories : includes,
2021 link_with : [libshared],
2022 dependencies : [libcryptsetup],
2023 install_rpath : rootlibexecdir,
2024 install : true,
2025 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002026
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002027 executable('systemd-veritysetup-generator',
2028 'src/veritysetup/veritysetup-generator.c',
2029 include_directories : includes,
2030 link_with : [libshared],
2031 dependencies : [libcryptsetup],
2032 install_rpath : rootlibexecdir,
2033 install : true,
2034 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002035endif
2036
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002037if conf.get('HAVE_SYSV_COMPAT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002038 executable('systemd-sysv-generator',
2039 'src/sysv-generator/sysv-generator.c',
2040 include_directories : includes,
2041 link_with : [libshared],
2042 install_rpath : rootlibexecdir,
2043 install : true,
2044 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002045
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002046 executable('systemd-rc-local-generator',
2047 'src/rc-local-generator/rc-local-generator.c',
2048 include_directories : includes,
2049 link_with : [libshared],
2050 install_rpath : rootlibexecdir,
2051 install : true,
2052 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002053endif
2054
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002055if conf.get('ENABLE_HOSTNAMED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002056 executable('systemd-hostnamed',
2057 'src/hostname/hostnamed.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002058 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002059 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002060 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002061 install : true,
2062 install_dir : rootlibexecdir)
2063
2064 exe = executable('hostnamectl',
2065 'src/hostname/hostnamectl.c',
2066 include_directories : includes,
2067 link_with : [libshared],
2068 install_rpath : rootlibexecdir,
2069 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002070 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002071endif
2072
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002073if conf.get('ENABLE_LOCALED') == 1
2074 if conf.get('HAVE_XKBCOMMON') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002075 # logind will load libxkbcommon.so dynamically on its own
2076 deps = [libdl]
2077 else
2078 deps = []
2079 endif
Zbigniew Jędrzejewski-Szmek1eeb43f2017-04-13 19:37:14 -04002080
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002081 executable('systemd-localed',
2082 systemd_localed_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002083 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002084 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002085 dependencies : deps,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002086 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002087 install : true,
2088 install_dir : rootlibexecdir)
2089
2090 exe = executable('localectl',
2091 localectl_sources,
2092 include_directories : includes,
2093 link_with : [libshared],
2094 install_rpath : rootlibexecdir,
2095 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002096 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002097endif
2098
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002099if conf.get('ENABLE_TIMEDATED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002100 executable('systemd-timedated',
2101 'src/timedate/timedated.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002102 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002103 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002104 install_rpath : rootlibexecdir,
2105 install : true,
2106 install_dir : rootlibexecdir)
Yu Watanabe6129ec82018-05-03 18:07:43 +09002107endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002108
Yu Watanabe6129ec82018-05-03 18:07:43 +09002109if conf.get('ENABLE_TIMEDATECTL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002110 exe = executable('timedatectl',
2111 'src/timedate/timedatectl.c',
2112 include_directories : includes,
2113 install_rpath : rootlibexecdir,
2114 link_with : [libshared],
Yu Watanabe6129ec82018-05-03 18:07:43 +09002115 dependencies : [libm],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002116 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002117 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002118endif
2119
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002120if conf.get('ENABLE_TIMESYNCD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002121 executable('systemd-timesyncd',
2122 systemd_timesyncd_sources,
2123 include_directories : includes,
2124 link_with : [libshared],
2125 dependencies : [threads,
2126 libm],
2127 install_rpath : rootlibexecdir,
2128 install : true,
2129 install_dir : rootlibexecdir)
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05002130
2131 executable('systemd-time-wait-sync',
2132 'src/time-wait-sync/time-wait-sync.c',
2133 include_directories : includes,
2134 link_with : [libshared],
2135 install_rpath : rootlibexecdir,
2136 install : true,
2137 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002138endif
2139
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002140if conf.get('ENABLE_MACHINED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002141 executable('systemd-machined',
2142 systemd_machined_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002143 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002144 link_with : [libmachine_core,
2145 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002146 install_rpath : rootlibexecdir,
2147 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002148 install_dir : rootlibexecdir)
2149
2150 exe = executable('machinectl',
2151 'src/machine/machinectl.c',
2152 include_directories : includes,
2153 link_with : [libshared],
2154 dependencies : [threads,
2155 libxz,
2156 liblz4],
2157 install_rpath : rootlibexecdir,
2158 install : true,
2159 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002160 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002161endif
2162
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002163if conf.get('ENABLE_IMPORTD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002164 executable('systemd-importd',
2165 systemd_importd_sources,
2166 include_directories : includes,
2167 link_with : [libshared],
2168 dependencies : [threads],
2169 install_rpath : rootlibexecdir,
2170 install : true,
2171 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002172
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002173 systemd_pull = executable('systemd-pull',
2174 systemd_pull_sources,
2175 include_directories : includes,
2176 link_with : [libshared],
2177 dependencies : [libcurl,
2178 libz,
2179 libbzip2,
2180 libxz,
2181 libgcrypt],
2182 install_rpath : rootlibexecdir,
2183 install : true,
2184 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002185
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002186 systemd_import = executable('systemd-import',
2187 systemd_import_sources,
2188 include_directories : includes,
2189 link_with : [libshared],
2190 dependencies : [libcurl,
2191 libz,
2192 libbzip2,
2193 libxz],
2194 install_rpath : rootlibexecdir,
2195 install : true,
2196 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002197
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002198 systemd_import_fs = executable('systemd-import-fs',
2199 systemd_import_fs_sources,
2200 include_directories : includes,
2201 link_with : [libshared],
2202 install_rpath : rootlibexecdir,
2203 install : true,
2204 install_dir : rootlibexecdir)
2205
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002206 systemd_export = executable('systemd-export',
2207 systemd_export_sources,
2208 include_directories : includes,
2209 link_with : [libshared],
2210 dependencies : [libcurl,
2211 libz,
2212 libbzip2,
2213 libxz],
2214 install_rpath : rootlibexecdir,
2215 install : true,
2216 install_dir : rootlibexecdir)
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002217
2218 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002219endif
2220
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002221if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002222 exe = executable('systemd-journal-upload',
2223 systemd_journal_upload_sources,
2224 include_directories : includes,
2225 link_with : [libshared],
2226 dependencies : [threads,
2227 libcurl,
2228 libgnutls,
2229 libxz,
2230 liblz4],
2231 install_rpath : rootlibexecdir,
2232 install : true,
2233 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002234 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002235endif
2236
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002237if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002238 s_j_remote = executable('systemd-journal-remote',
2239 systemd_journal_remote_sources,
2240 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc064d8d2018-05-16 10:21:58 +02002241 link_with : [libshared,
2242 libsystemd_journal_remote],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002243 dependencies : [threads,
2244 libmicrohttpd,
2245 libgnutls,
2246 libxz,
2247 liblz4],
2248 install_rpath : rootlibexecdir,
2249 install : true,
2250 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002251
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002252 s_j_gatewayd = executable('systemd-journal-gatewayd',
2253 systemd_journal_gatewayd_sources,
2254 include_directories : includes,
2255 link_with : [libshared],
2256 dependencies : [threads,
2257 libmicrohttpd,
2258 libgnutls,
2259 libxz,
2260 liblz4],
2261 install_rpath : rootlibexecdir,
2262 install : true,
2263 install_dir : rootlibexecdir)
2264 public_programs += [s_j_remote, s_j_gatewayd]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002265endif
2266
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002267if conf.get('ENABLE_COREDUMP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002268 executable('systemd-coredump',
2269 systemd_coredump_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002270 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002271 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002272 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002273 libacl,
2274 libdw,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002275 libxz,
2276 liblz4],
2277 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002278 install : true,
2279 install_dir : rootlibexecdir)
2280
2281 exe = executable('coredumpctl',
2282 coredumpctl_sources,
2283 include_directories : includes,
2284 link_with : [libshared],
2285 dependencies : [threads,
2286 libxz,
2287 liblz4],
2288 install_rpath : rootlibexecdir,
2289 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002290 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002291endif
2292
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002293if conf.get('ENABLE_BINFMT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002294 exe = executable('systemd-binfmt',
2295 'src/binfmt/binfmt.c',
2296 include_directories : includes,
2297 link_with : [libshared],
2298 install_rpath : rootlibexecdir,
2299 install : true,
2300 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002301 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002302
2303 meson.add_install_script('sh', '-c',
2304 mkdir_p.format(binfmtdir))
2305 meson.add_install_script('sh', '-c',
2306 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2307endif
2308
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002309if conf.get('ENABLE_VCONSOLE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002310 executable('systemd-vconsole-setup',
2311 'src/vconsole/vconsole-setup.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002312 include_directories : includes,
2313 link_with : [libshared],
2314 install_rpath : rootlibexecdir,
2315 install : true,
2316 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002317endif
2318
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002319if conf.get('ENABLE_RANDOMSEED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002320 executable('systemd-random-seed',
2321 'src/random-seed/random-seed.c',
2322 include_directories : includes,
2323 link_with : [libshared],
2324 install_rpath : rootlibexecdir,
2325 install : true,
2326 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002327endif
2328
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002329if conf.get('ENABLE_FIRSTBOOT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002330 executable('systemd-firstboot',
2331 'src/firstboot/firstboot.c',
2332 include_directories : includes,
2333 link_with : [libshared],
2334 dependencies : [libcrypt],
2335 install_rpath : rootlibexecdir,
2336 install : true,
2337 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002338endif
2339
2340executable('systemd-remount-fs',
2341 'src/remount-fs/remount-fs.c',
2342 'src/core/mount-setup.c',
2343 'src/core/mount-setup.h',
2344 include_directories : includes,
2345 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002346 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002347 install : true,
2348 install_dir : rootlibexecdir)
2349
2350executable('systemd-machine-id-setup',
2351 'src/machine-id-setup/machine-id-setup-main.c',
2352 'src/core/machine-id-setup.c',
2353 'src/core/machine-id-setup.h',
2354 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002355 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002356 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002357 install : true,
2358 install_dir : rootbindir)
2359
2360executable('systemd-fsck',
2361 'src/fsck/fsck.c',
2362 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002363 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002364 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002365 install : true,
2366 install_dir : rootlibexecdir)
2367
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002368executable('systemd-growfs',
2369 'src/partition/growfs.c',
2370 include_directories : includes,
2371 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekc34b75a2017-11-21 18:56:52 +01002372 dependencies : [libcryptsetup],
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002373 install_rpath : rootlibexecdir,
2374 install : true,
2375 install_dir : rootlibexecdir)
2376
Zbigniew Jędrzejewski-Szmekb7f28ac2017-11-26 22:51:29 +01002377executable('systemd-makefs',
2378 'src/partition/makefs.c',
2379 include_directories : includes,
2380 link_with : [libshared],
2381 install_rpath : rootlibexecdir,
2382 install : true,
2383 install_dir : rootlibexecdir)
2384
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002385executable('systemd-sleep',
2386 'src/sleep/sleep.c',
2387 include_directories : includes,
2388 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002389 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002390 install : true,
2391 install_dir : rootlibexecdir)
2392
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002393exe = executable('systemd-sysctl',
2394 'src/sysctl/sysctl.c',
2395 include_directories : includes,
2396 link_with : [libshared],
2397 install_rpath : rootlibexecdir,
2398 install : true,
2399 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002400public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002401
2402executable('systemd-ac-power',
2403 'src/ac-power/ac-power.c',
2404 include_directories : includes,
2405 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002406 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002407 install : true,
2408 install_dir : rootlibexecdir)
2409
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002410exe = executable('systemd-detect-virt',
2411 'src/detect-virt/detect-virt.c',
2412 include_directories : includes,
2413 link_with : [libshared],
2414 install_rpath : rootlibexecdir,
2415 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002416public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002417
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002418exe = executable('systemd-delta',
2419 'src/delta/delta.c',
2420 include_directories : includes,
2421 link_with : [libshared],
2422 install_rpath : rootlibexecdir,
2423 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002424public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002425
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002426exe = executable('systemd-escape',
2427 'src/escape/escape.c',
2428 include_directories : includes,
2429 link_with : [libshared],
2430 install_rpath : rootlibexecdir,
2431 install : true,
2432 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002433public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002434
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002435exe = executable('systemd-notify',
2436 'src/notify/notify.c',
2437 include_directories : includes,
2438 link_with : [libshared],
2439 install_rpath : rootlibexecdir,
2440 install : true,
2441 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002442public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002443
2444executable('systemd-volatile-root',
2445 'src/volatile-root/volatile-root.c',
2446 include_directories : includes,
2447 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002448 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002449 install : true,
2450 install_dir : rootlibexecdir)
2451
2452executable('systemd-cgroups-agent',
2453 'src/cgroups-agent/cgroups-agent.c',
2454 include_directories : includes,
2455 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002456 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002457 install : true,
2458 install_dir : rootlibexecdir)
2459
Zbigniew Jędrzejewski-Szmek0d1d5122018-08-21 16:08:48 +02002460exe = executable('systemd-id128',
2461 'src/id128/id128.c',
2462 include_directories : includes,
2463 link_with : [libshared],
2464 install_rpath : rootlibexecdir,
2465 install : true)
2466public_programs += exe
2467
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002468exe = executable('systemd-path',
2469 'src/path/path.c',
2470 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002471 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002472 install_rpath : rootlibexecdir,
2473 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002474public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002475
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002476exe = executable('systemd-ask-password',
2477 'src/ask-password/ask-password.c',
2478 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002479 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002480 install_rpath : rootlibexecdir,
2481 install : true,
2482 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002483public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002484
2485executable('systemd-reply-password',
2486 'src/reply-password/reply-password.c',
2487 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002488 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002489 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002490 install : true,
2491 install_dir : rootlibexecdir)
2492
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002493exe = executable('systemd-tty-ask-password-agent',
2494 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2495 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002496 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002497 install_rpath : rootlibexecdir,
2498 install : true,
2499 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002500public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002501
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002502exe = executable('systemd-cgls',
2503 'src/cgls/cgls.c',
2504 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002505 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002506 install_rpath : rootlibexecdir,
2507 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002508public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002509
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002510exe = executable('systemd-cgtop',
2511 'src/cgtop/cgtop.c',
2512 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002513 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002514 install_rpath : rootlibexecdir,
2515 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002516public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002517
2518executable('systemd-initctl',
2519 'src/initctl/initctl.c',
2520 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002521 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002522 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002523 install : true,
2524 install_dir : rootlibexecdir)
2525
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002526exe = executable('systemd-mount',
2527 'src/mount/mount-tool.c',
2528 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002529 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002530 install_rpath : rootlibexecdir,
2531 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002532public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002533
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002534meson.add_install_script(meson_make_symlink,
Michael Bieble17e5ba2017-04-13 10:30:56 -04002535 'systemd-mount', join_paths(bindir, 'systemd-umount'))
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002536
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002537exe = executable('systemd-run',
2538 'src/run/run.c',
2539 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002540 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002541 install_rpath : rootlibexecdir,
2542 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002543public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002544
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002545exe = executable('systemd-stdio-bridge',
2546 'src/stdio-bridge/stdio-bridge.c',
2547 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002548 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002549 install_rpath : rootlibexecdir,
2550 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002551public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002552
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002553exe = executable('busctl',
2554 'src/busctl/busctl.c',
2555 'src/busctl/busctl-introspect.c',
2556 'src/busctl/busctl-introspect.h',
2557 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002558 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002559 install_rpath : rootlibexecdir,
2560 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002561public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002562
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002563if conf.get('ENABLE_SYSUSERS') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002564 exe = executable('systemd-sysusers',
2565 'src/sysusers/sysusers.c',
2566 include_directories : includes,
2567 link_with : [libshared],
2568 install_rpath : rootlibexecdir,
2569 install : true,
2570 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002571 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002572endif
2573
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002574if conf.get('ENABLE_TMPFILES') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002575 exe = executable('systemd-tmpfiles',
2576 'src/tmpfiles/tmpfiles.c',
2577 include_directories : includes,
2578 link_with : [libshared],
2579 dependencies : [libacl],
2580 install_rpath : rootlibexecdir,
2581 install : true,
2582 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002583 public_programs += exe
Zbigniew Jędrzejewski-Szmekd9daae52017-11-22 14:13:32 +01002584
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002585 if want_tests != 'false'
2586 test('test-systemd-tmpfiles',
2587 test_systemd_tmpfiles_py,
2588 # https://github.com/mesonbuild/meson/issues/2681
2589 args : exe.full_path())
2590 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002591endif
2592
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002593if conf.get('ENABLE_HWDB') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002594 exe = executable('systemd-hwdb',
2595 'src/hwdb/hwdb.c',
2596 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2597 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002598 link_with : [libudev_static],
Michael Biebl0da6f392017-04-21 18:32:14 +02002599 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002600 install : true,
2601 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002602 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002603endif
2604
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002605if conf.get('ENABLE_QUOTACHECK') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002606 executable('systemd-quotacheck',
2607 'src/quotacheck/quotacheck.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002608 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002609 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002610 install_rpath : rootlibexecdir,
2611 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002612 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002613endif
2614
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002615exe = executable('systemd-socket-proxyd',
2616 'src/socket-proxy/socket-proxyd.c',
2617 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002618 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002619 dependencies : [threads],
2620 install_rpath : rootlibexecdir,
2621 install : true,
2622 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002623public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002624
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002625exe = executable('systemd-udevd',
2626 systemd_udevd_sources,
2627 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002628 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002629 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002630 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002631 libudev_static],
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002632 dependencies : [threads,
2633 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002634 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002635 libacl,
2636 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002637 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002638 install : true,
2639 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002640public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002641
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002642exe = executable('udevadm',
2643 udevadm_sources,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002644 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002645 include_directories : includes,
2646 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002647 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002648 libudev_static],
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002649 dependencies : [threads,
2650 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002651 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002652 libacl,
2653 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002654 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002655 install : true,
2656 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002657public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002658
2659executable('systemd-shutdown',
2660 systemd_shutdown_sources,
2661 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002662 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek95b862b2018-03-14 11:32:30 +01002663 dependencies : [libmount],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002664 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002665 install : true,
2666 install_dir : rootlibexecdir)
2667
2668executable('systemd-update-done',
2669 'src/update-done/update-done.c',
2670 include_directories : includes,
2671 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002672 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002673 install : true,
2674 install_dir : rootlibexecdir)
2675
2676executable('systemd-update-utmp',
2677 'src/update-utmp/update-utmp.c',
2678 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002679 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002680 dependencies : [libaudit],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002681 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002682 install : true,
2683 install_dir : rootlibexecdir)
2684
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002685if conf.get('HAVE_KMOD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002686 executable('systemd-modules-load',
2687 'src/modules-load/modules-load.c',
2688 include_directories : includes,
2689 link_with : [libshared],
2690 dependencies : [libkmod],
2691 install_rpath : rootlibexecdir,
2692 install : true,
2693 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002694
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002695 meson.add_install_script('sh', '-c',
2696 mkdir_p.format(modulesloaddir))
2697 meson.add_install_script('sh', '-c',
2698 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002699endif
2700
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002701exe = executable('systemd-nspawn',
2702 systemd_nspawn_sources,
2703 'src/core/mount-setup.c', # FIXME: use a variable?
2704 'src/core/mount-setup.h',
2705 'src/core/loopback-setup.c',
2706 'src/core/loopback-setup.h',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02002707 include_directories : includes,
2708 link_with : [libnspawn_core,
2709 libshared],
2710 dependencies : [libblkid],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002711 install_rpath : rootlibexecdir,
2712 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002713public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002714
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002715if conf.get('ENABLE_NETWORKD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002716 executable('systemd-networkd',
2717 systemd_networkd_sources,
2718 include_directories : includes,
2719 link_with : [libnetworkd_core,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002720 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002721 libudev_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002722 libshared],
Zbigniew Jędrzejewski-Szmek4b57a272017-06-21 06:05:15 -04002723 dependencies : [threads],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002724 install_rpath : rootlibexecdir,
2725 install : true,
2726 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002727
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002728 executable('systemd-networkd-wait-online',
2729 systemd_networkd_wait_online_sources,
2730 include_directories : includes,
2731 link_with : [libnetworkd_core,
2732 libshared],
2733 install_rpath : rootlibexecdir,
2734 install : true,
2735 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002736
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002737 exe = executable('networkctl',
2738 networkctl_sources,
2739 include_directories : includes,
2740 link_with : [libsystemd_network,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002741 libshared],
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002742 install_rpath : rootlibexecdir,
2743 install : true,
2744 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002745 public_programs += exe
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002746endif
Zbigniew Jędrzejewski-Szmeke821f6a2017-12-07 10:44:43 +01002747
2748executable('systemd-sulogin-shell',
2749 ['src/sulogin-shell/sulogin-shell.c'],
2750 include_directories : includes,
2751 link_with : [libshared],
2752 install_rpath : rootlibexecdir,
2753 install : true,
2754 install_dir : rootlibexecdir)
2755
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002756############################################################
2757
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002758custom_target(
2759 'systemd-runtest.env',
2760 output : 'systemd-runtest.env',
2761 command : ['sh', '-c', '{ ' +
2762 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(meson.current_source_dir(), 'test')) +
Filipe Brandenburger49cdae62018-09-12 00:23:40 -07002763 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002764 '} >@OUTPUT@'],
2765 build_by_default : true)
2766
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002767foreach tuple : tests
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002768 sources = tuple[0]
2769 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2770 dependencies = tuple[2]
2771 condition = tuple.length() >= 4 ? tuple[3] : ''
2772 type = tuple.length() >= 5 ? tuple[4] : ''
2773 defs = tuple.length() >= 6 ? tuple[5] : []
2774 incs = tuple.length() >= 7 ? tuple[6] : includes
2775 timeout = 30
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002776
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002777 name = sources[0].split('/')[-1].split('.')[0]
2778 if type.startswith('timeout=')
2779 timeout = type.split('=')[1].to_int()
2780 type = ''
2781 endif
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002782
2783 if condition == '' or conf.get(condition) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002784 exe = executable(
2785 name,
2786 sources,
2787 include_directories : incs,
2788 link_with : link_with,
2789 dependencies : dependencies,
2790 c_args : defs,
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002791 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002792 install_rpath : rootlibexecdir,
Michael Biebl7cdd9782017-06-23 03:23:30 +02002793 install : install_tests,
2794 install_dir : join_paths(testsdir, type))
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04002795
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002796 if type == 'manual'
2797 message('@0@ is a manual test'.format(name))
2798 elif type == 'unsafe' and want_tests != 'unsafe'
2799 message('@0@ is an unsafe test'.format(name))
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002800 elif want_tests != 'false'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002801 test(name, exe,
2802 env : test_env,
2803 timeout : timeout)
2804 endif
2805 else
2806 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2807 endif
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002808endforeach
2809
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002810exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002811 'test-libsystemd-sym',
2812 test_libsystemd_sym_c,
2813 include_directories : includes,
2814 link_with : [libsystemd],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002815 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002816 install : install_tests,
2817 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002818if want_tests != 'false'
2819 test('test-libsystemd-sym', exe)
2820endif
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04002821
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002822exe = executable(
2823 'test-libsystemd-static-sym',
2824 test_libsystemd_sym_c,
2825 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002826 link_with : [install_libsystemd_static],
2827 dependencies : [threads], # threads is already included in dependencies on the library,
2828 # but does not seem to get propagated. Add here as a work-around.
Yu Watanabefd1939f2018-09-12 21:47:56 +09002829 build_by_default : want_tests != 'false' and static_libsystemd_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002830 install : install_tests and static_libsystemd_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002831 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002832if want_tests != 'false' and static_libsystemd_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002833 test('test-libsystemd-static-sym', exe)
2834endif
2835
2836exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002837 'test-libudev-sym',
2838 test_libudev_sym_c,
2839 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002840 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002841 link_with : [libudev],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002842 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002843 install : install_tests,
2844 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002845if want_tests != 'false'
2846 test('test-libudev-sym', exe)
2847endif
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002848
2849exe = executable(
2850 'test-libudev-static-sym',
2851 test_libudev_sym_c,
2852 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002853 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002854 link_with : [install_libudev_static],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002855 build_by_default : want_tests != 'false' and static_libudev_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002856 install : install_tests and static_libudev_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002857 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002858if want_tests != 'false' and static_libudev_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002859 test('test-libudev-static-sym', exe)
2860endif
Zbigniew Jędrzejewski-Szmeke0bec522017-04-10 15:20:42 -04002861
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002862############################################################
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002863
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002864fuzzer_exes = []
2865
Michael Olbrich59967402018-11-11 11:27:35 +01002866if get_option('tests') != 'false'
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002867foreach tuple : fuzzers
2868 sources = tuple[0]
2869 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2870 dependencies = tuple[2]
2871 defs = tuple.length() >= 4 ? tuple[3] : []
2872 incs = tuple.length() >= 5 ? tuple[4] : includes
2873
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05002874 if fuzzer_build
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002875 dependencies += fuzzing_engine
2876 else
2877 sources += 'src/fuzz/fuzz-main.c'
2878 endif
2879
2880 name = sources[0].split('/')[-1].split('.')[0]
2881
2882 fuzzer_exes += executable(
2883 name,
2884 sources,
2885 include_directories : [incs, include_directories('src/fuzz')],
2886 link_with : link_with,
2887 dependencies : dependencies,
2888 c_args : defs,
2889 install : false)
2890endforeach
Michael Olbrich59967402018-11-11 11:27:35 +01002891endif
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002892
2893run_target('fuzzers',
2894 depends : fuzzer_exes,
2895 command : ['true'])
2896
2897############################################################
2898
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002899make_directive_index_py = find_program('tools/make-directive-index.py')
2900make_man_index_py = find_program('tools/make-man-index.py')
Zbigniew Jędrzejewski-Szmekb184e8f2017-04-13 19:59:21 -04002901xml_helper_py = find_program('tools/xml_helper.py')
Zbigniew Jędrzejewski-Szmekabba22c2017-04-15 00:40:59 -04002902hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002903
2904subdir('units')
2905subdir('sysctl.d')
2906subdir('sysusers.d')
2907subdir('tmpfiles.d')
Zbigniew Jędrzejewski-Szmeke783f952017-11-23 13:23:42 +01002908subdir('presets')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002909subdir('hwdb')
2910subdir('network')
2911subdir('man')
2912subdir('shell-completion/bash')
2913subdir('shell-completion/zsh')
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002914subdir('docs/sysvinit')
2915subdir('docs/var-log')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002916
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002917install_subdir('factory/etc',
2918 install_dir : factorydir)
2919
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002920install_data('xorg/50-systemd-user.sh',
2921 install_dir : xinitrcdir)
Dimitri John Ledkov582faeb2017-08-02 13:41:18 +01002922install_data('modprobe.d/systemd.conf',
2923 install_dir : modprobedir)
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002924install_data('LICENSE.GPL2',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002925 'LICENSE.LGPL2.1',
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002926 'NEWS',
2927 'README',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302928 'docs/CODING_STYLE.md',
Filipe Brandenburger1d1cb162018-09-07 01:22:34 -07002929 'docs/DISTRO_PORTING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002930 'docs/ENVIRONMENT.md',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302931 'docs/HACKING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002932 'docs/TRANSIENT-SETTINGS.md',
Filipe Brandenburgerb6dc0d72018-09-07 01:44:49 -07002933 'docs/TRANSLATORS.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002934 'docs/UIDS-GIDS.md',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002935 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2936 install_dir : docdir)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002937
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002938meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2939meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2940
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002941############################################################
2942
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002943meson_check_help = find_program('tools/meson-check-help.sh')
2944
2945foreach exec : public_programs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002946 name = exec.full_path().split('/')[-1]
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002947 if want_tests != 'false'
2948 test('check-help-' + name,
2949 meson_check_help,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002950 args : exec.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002951 endif
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002952endforeach
2953
2954############################################################
2955
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002956# Enable tests for all supported sanitizers
2957foreach tuple : sanitizers
2958 sanitizer = tuple[0]
2959 build = tuple[1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002960
Yu Watanabe7a6397d2018-05-15 20:18:24 +09002961 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002962 prev = ''
2963 foreach p : fuzz_regression_tests
2964 b = p.split('/')[-2]
2965 c = p.split('/')[-1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002966
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002967 name = '@0@:@1@'.format(b, sanitizer)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002968
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002969 if name != prev
2970 if want_tests == 'false'
2971 message('Not compiling @0@ because tests is set to false'.format(name))
2972 elif slow_tests
2973 exe = custom_target(
2974 name,
2975 output : name,
2976 depends : build,
2977 command : [env, 'ln', '-fs',
2978 join_paths(build.full_path(), b),
2979 '@OUTPUT@'],
2980 build_by_default : true)
2981 else
2982 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2983 endif
2984 endif
2985 prev = name
2986
2987 if want_tests != 'false' and slow_tests
2988 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2989 env,
2990 args : [exe.full_path(),
Zbigniew Jędrzejewski-Szmeke6bad672018-08-10 17:15:05 +02002991 join_paths(meson.source_root(), p)])
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002992 endif
2993 endforeach
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002994 endif
2995endforeach
2996
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002997
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002998############################################################
2999
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003000if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003001 all_files = run_command(
3002 git,
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003003 ['--git-dir=@0@/.git'.format(meson.source_root()),
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003004 'ls-files',
3005 ':/*.[ch]'])
3006 all_files = files(all_files.stdout().split())
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04003007
userwithuide85a6902017-08-09 13:41:44 +00003008 custom_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003009 'tags',
userwithuide85a6902017-08-09 13:41:44 +00003010 output : 'tags',
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003011 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.source_root())] + all_files)
Evegeny Vereshchagin2f099742018-05-18 10:52:17 +00003012 run_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003013 'ctags',
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003014 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.source_root())] + all_files)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04003015endif
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003016
3017if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003018 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
Zbigniew Jędrzejewski-Szmeka923e082017-04-17 19:48:20 -04003019 run_target(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003020 'git-contrib',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003021 command : [meson_git_contrib_sh])
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003022endif
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003023
3024if git.found()
3025 git_head = run_command(
3026 git,
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003027 ['--git-dir=@0@/.git'.format(meson.source_root()),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003028 'rev-parse', 'HEAD']).stdout().strip()
3029 git_head_short = run_command(
3030 git,
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003031 ['--git-dir=@0@/.git'.format(meson.source_root()),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003032 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3033
3034 run_target(
3035 'git-snapshot',
3036 command : ['git', 'archive',
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003037 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.source_root(),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003038 git_head_short),
3039 '--prefix', 'systemd-@0@/'.format(git_head),
3040 'HEAD'])
3041endif
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003042
3043############################################################
3044
Lennart Poettering51b13862017-12-20 12:51:14 +01003045meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
3046run_target(
3047 'check-api-docs',
3048 depends : [man, libsystemd, libudev],
3049 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
3050
Lennart Poettering0bc7a222018-10-02 09:53:05 +02003051run_target(
3052 'make-index-md',
3053 command : ['sh', '@0@/tools/make-index-md.sh'.format(meson.source_root()), meson.source_root()])
3054
Lennart Poettering51b13862017-12-20 12:51:14 +01003055############################################################
3056
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003057status = [
3058 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3059
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +01003060 'split /usr: @0@'.format(split_usr),
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +01003061 'split bin-sbin: @0@'.format(split_bin),
Yu Watanabe359b4962017-11-25 20:35:24 +09003062 'prefix directory: @0@'.format(prefixdir),
3063 'rootprefix directory: @0@'.format(rootprefixdir),
3064 'sysconf directory: @0@'.format(sysconfdir),
3065 'include directory: @0@'.format(includedir),
3066 'lib directory: @0@'.format(libdir),
3067 'rootlib directory: @0@'.format(rootlibdir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003068 'SysV init scripts: @0@'.format(sysvinit_path),
3069 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
Yu Watanabe359b4962017-11-25 20:35:24 +09003070 'PAM modules directory: @0@'.format(pamlibdir),
3071 'PAM configuration directory: @0@'.format(pamconfdir),
3072 'RPM macros directory: @0@'.format(rpmmacrosdir),
3073 'modprobe.d directory: @0@'.format(modprobedir),
3074 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3075 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3076 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3077 'bash completions directory: @0@'.format(bashcompletiondir),
3078 'zsh completions directory: @0@'.format(zshcompletiondir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003079 'extra start script: @0@'.format(get_option('rc-local')),
3080 'extra stop script: @0@'.format(get_option('halt-local')),
3081 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3082 get_option('debug-tty')),
3083 'TTY GID: @0@'.format(tty_gid),
Yu Watanabeac093402018-05-10 16:04:16 +09003084 'users GID: @0@'.format(substs.get('USERS_GID')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003085 'maximum system UID: @0@'.format(system_uid_max),
3086 'maximum system GID: @0@'.format(system_gid_max),
Lennart Poettering87d5e4f2017-12-02 12:48:31 +01003087 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3088 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3089 'minimum container UID base: @0@'.format(container_uid_base_min),
3090 'maximum container UID base: @0@'.format(container_uid_base_max),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003091 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
Tom Stellard4e15a732017-10-31 08:46:24 -07003092 'render group access mode: @0@'.format(get_option('group-render-mode')),
Yu Watanabe359b4962017-11-25 20:35:24 +09003093 'certificate root directory: @0@'.format(get_option('certificate-root')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003094 'support URL: @0@'.format(support_url),
Lennart Poetteringafde4572017-12-05 11:00:24 +01003095 'nobody user name: @0@'.format(nobody_user),
3096 'nobody group name: @0@'.format(nobody_group),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003097 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -04003098 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003099
3100 'default DNSSEC mode: @0@'.format(default_dnssec),
Iwan Timmerc9299be2018-06-13 20:26:24 +02003101 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003102 'default cgroup hierarchy: @0@'.format(default_hierarchy),
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +01003103 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003104 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
3105
3106alt_dns_servers = '\n '.join(dns_servers.split(' '))
3107alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3108status += [
3109 'default DNS servers: @0@'.format(alt_dns_servers),
3110 'default NTP servers: @0@'.format(alt_ntp_servers)]
3111
3112alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3113 '@@0@'.format(time_epoch)).stdout().strip()
3114status += [
3115 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3116
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003117status += [
Zbigniew Jędrzejewski-Szmekabc8caf2018-10-11 11:10:53 +02003118 'static libsystemd: @0@'.format(static_libsystemd),
3119 'static libudev: @0@'.format(static_libudev)]
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003120
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003121# TODO:
3122# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3123# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3124# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3125
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003126if conf.get('ENABLE_EFI') == 1
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003127 status += 'efi arch: @0@'.format(efi_arch)
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003128
3129 if have_gnu_efi
3130 status += [
3131 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
Zbigniew Jędrzejewski-Szmekc512dfb2018-12-18 00:02:11 +01003132 'EFI CC @0@'.format(' '.join(efi_cc)),
Yu Watanabe359b4962017-11-25 20:35:24 +09003133 'EFI lib directory: @0@'.format(efi_libdir),
3134 'EFI lds directory: @0@'.format(efi_ldsdir),
3135 'EFI include directory: @0@'.format(efi_incdir)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003136 endif
3137endif
3138
3139found = []
3140missing = []
3141
3142foreach tuple : [
3143 ['libcryptsetup'],
3144 ['PAM'],
3145 ['AUDIT'],
3146 ['IMA'],
3147 ['AppArmor'],
3148 ['SELinux'],
3149 ['SECCOMP'],
3150 ['SMACK'],
3151 ['zlib'],
3152 ['xz'],
3153 ['lz4'],
3154 ['bzip2'],
3155 ['ACL'],
3156 ['gcrypt'],
3157 ['qrencode'],
3158 ['microhttpd'],
3159 ['gnutls'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003160 ['openssl'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003161 ['libcurl'],
Zbigniew Jędrzejewski-Szmekd1bf5672017-06-16 09:16:28 -04003162 ['idn'],
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -04003163 ['libidn2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003164 ['libidn'],
3165 ['libiptc'],
3166 ['elfutils'],
3167 ['binfmt'],
3168 ['vconsole'],
3169 ['quotacheck'],
3170 ['tmpfiles'],
3171 ['environment.d'],
3172 ['sysusers'],
3173 ['firstboot'],
3174 ['randomseed'],
3175 ['backlight'],
3176 ['rfkill'],
3177 ['logind'],
3178 ['machined'],
Lennart Poettering61d05782018-04-16 21:41:40 +02003179 ['portabled'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003180 ['importd'],
3181 ['hostnamed'],
3182 ['timedated'],
3183 ['timesyncd'],
3184 ['localed'],
3185 ['networkd'],
Yu Watanabea7456af2017-10-06 16:33:21 +09003186 ['resolve'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003187 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3188 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003189 ['coredump'],
3190 ['polkit'],
3191 ['legacy pkla', install_polkit_pkla],
3192 ['efi'],
3193 ['gnu-efi', have_gnu_efi],
3194 ['kmod'],
3195 ['xkbcommon'],
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01003196 ['pcre2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003197 ['blkid'],
3198 ['dbus'],
3199 ['glib'],
Zbigniew Jędrzejewski-Szmek6bd2bc82018-08-07 18:10:53 +02003200 ['nss-myhostname'],
3201 ['nss-mymachines'],
3202 ['nss-resolve'],
3203 ['nss-systemd'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003204 ['hwdb'],
3205 ['tpm'],
3206 ['man pages', want_man],
3207 ['html pages', want_html],
3208 ['man page indices', want_man and have_lxml],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003209 ['SysV compat'],
3210 ['utmp'],
3211 ['ldconfig'],
3212 ['hibernate'],
3213 ['adm group', get_option('adm-group')],
3214 ['wheel group', get_option('wheel-group')],
Franck Buib14e1b42017-05-09 14:02:37 +02003215 ['gshadow'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003216 ['debug hashmap'],
3217 ['debug mmap cache'],
Yu Watanabed6601492018-11-23 00:36:35 +09003218 ['debug siphash'],
Yu Watanabe20e97dd2018-11-23 00:28:27 +09003219 ['debug udev'],
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +02003220 ['valgrind', conf.get('VALGRIND') == 1],
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +02003221 ['trace logging', conf.get('LOG_TRACE') == 1],
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003222 ['link-udev-shared', get_option('link-udev-shared')],
3223 ['link-systemctl-shared', get_option('link-systemctl-shared')],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003224]
3225
Zbigniew Jędrzejewski-Szmekaf4d7862018-03-09 14:21:08 +01003226 if tuple.length() >= 2
3227 cond = tuple[1]
3228 else
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003229 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3230 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003231 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003232 endif
3233 if cond
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003234 found += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003235 else
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003236 missing += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003237 endif
3238endforeach
3239
3240status += [
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003241 '',
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003242 'enabled features: @0@'.format(', '.join(found)),
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003243 '',
3244 'disabled features: @0@'.format(', '.join(missing)),
3245 '']
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003246message('\n '.join(status))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003247
3248if rootprefixdir != rootprefix_default
Yu Watanabe8ea9fad2018-05-10 14:50:52 +09003249 warning('\n' +
3250 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3251 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3252 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003253endif