blob: f74a0bf3b2d82b4bafa3da8ccf3804537f52d539 [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 Poettering67bee562018-12-21 14:58:49 +01004 version : '240',
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 Poettering67bee562018-12-21 14:58:49 +010015libsystemd_version = '0.24.0'
16libudev_version = '1.6.12'
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +020017
Yu Watanabe348b4432018-05-07 18:17:35 +090018# We need the same data in two different formats, ugh!
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040019# Also, for hysterical reasons, we use different variable
20# names, sometimes. Not all variables are included in every
21# set. Ugh, ugh, ugh!
22conf = configuration_data()
23conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
24conf.set_quoted('PACKAGE_VERSION', meson.project_version())
25
26substs = configuration_data()
27substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
28substs.set('PACKAGE_VERSION', meson.project_version())
29
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +020030want_ossfuzz = get_option('oss-fuzz')
31want_libfuzzer = get_option('llvm-fuzz')
32if want_ossfuzz and want_libfuzzer
33 error('only one of oss-fuzz and llvm-fuzz can be specified')
34endif
35fuzzer_build = want_ossfuzz or want_libfuzzer
36
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040037#####################################################################
38
Zbigniew Jędrzejewski-Szmek003c8872017-07-24 04:41:45 -040039# Try to install the git pre-commit hook
40git_hook = run_command(join_paths(meson.source_root(), 'tools/add-git-hook.sh'))
41if git_hook.returncode() == 0
42 message(git_hook.stdout().strip())
43endif
44
45#####################################################################
46
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +010047if get_option('split-usr') == 'auto'
48 split_usr = run_command('test', '-L', '/bin').returncode() != 0
49else
50 split_usr = get_option('split-usr') == 'true'
51endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010052conf.set10('HAVE_SPLIT_USR', split_usr,
53 description : '/usr/bin and /bin directories are separate')
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010054
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010055if get_option('split-bin') == 'auto'
56 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
57else
58 split_bin = get_option('split-bin') == 'true'
59endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010060conf.set10('HAVE_SPLIT_BIN', split_bin,
61 description : 'bin and sbin directories are separate')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010062
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010063rootprefixdir = get_option('rootprefix')
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010064# Unusual rootprefixdir values are used by some distros
65# (see https://github.com/systemd/systemd/pull/7461).
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +010066rootprefix_default = split_usr ? '/' : '/usr'
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010067if rootprefixdir == ''
68 rootprefixdir = rootprefix_default
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010069endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040070
71sysvinit_path = get_option('sysvinit-path')
72sysvrcnd_path = get_option('sysvrcnd-path')
Yu Watanabe348b4432018-05-07 18:17:35 +090073conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +020074 description : 'SysV init scripts and rcN.d links are supported')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040075
Lennart Poetteringa8b627a2018-10-11 18:23:26 +020076conf.set10('BUMP_PROC_SYS_FS_FILE_MAX', get_option('bump-proc-sys-fs-file-max'))
77conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
Lennart Poettering09dad042018-11-15 09:50:42 +010078conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
Lennart Poetteringa8b627a2018-10-11 18:23:26 +020079
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040080# join_paths ignore the preceding arguments if an absolute component is
81# encountered, so this should canonicalize various paths when they are
82# absolute or relative.
83prefixdir = get_option('prefix')
84if not prefixdir.startswith('/')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -040085 error('Prefix is not absolute: "@0@"'.format(prefixdir))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040086endif
87bindir = join_paths(prefixdir, get_option('bindir'))
88libdir = join_paths(prefixdir, get_option('libdir'))
89sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
90includedir = join_paths(prefixdir, get_option('includedir'))
91datadir = join_paths(prefixdir, get_option('datadir'))
92localstatedir = join_paths('/', get_option('localstatedir'))
93
94rootbindir = join_paths(rootprefixdir, 'bin')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010095rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040096rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
97
98rootlibdir = get_option('rootlibdir')
99if rootlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400100 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400101endif
102
103# Dirs of external packages
Benedikt Morbacha95696e2018-08-10 04:59:54 +0200104pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
105pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400106polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
107polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
108polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
109varlogdir = join_paths(localstatedir, 'log')
110xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
Yu Watanabe8a38aac2017-11-23 22:20:22 +0900111rpmmacrosdir = get_option('rpmmacrosdir')
112if rpmmacrosdir != 'no'
113 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
114endif
Michael Biebl02fa0542017-10-21 08:32:50 +0200115modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400116
117# Our own paths
Michael Bieble17e5ba2017-04-13 10:30:56 -0400118pkgdatadir = join_paths(datadir, 'systemd')
119environmentdir = join_paths(prefixdir, 'lib/environment.d')
120pkgsysconfdir = join_paths(sysconfdir, 'systemd')
121userunitdir = join_paths(prefixdir, 'lib/systemd/user')
122userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
123tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
124sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
125sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
126binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
127modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
128networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
129pkgincludedir = join_paths(includedir, 'systemd')
130systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
131usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
132systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
133userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
134systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
135systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
136systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
137systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
138udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
139udevhomedir = udevlibexecdir
140udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
141udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
142catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
143kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
144factorydir = join_paths(datadir, 'factory')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400145bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
146testsdir = join_paths(prefixdir, 'lib/systemd/tests')
147systemdstatedir = join_paths(localstatedir, 'lib/systemd')
148catalogstatedir = join_paths(systemdstatedir, 'catalog')
149randomseeddir = join_paths(localstatedir, 'lib/systemd')
Lennart Poettering61d05782018-04-16 21:41:40 +0200150profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400151
tblume75aaade2018-02-01 22:46:15 +0100152docdir = get_option('docdir')
153if docdir == ''
154 docdir = join_paths(datadir, 'doc/systemd')
155endif
156
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400157dbuspolicydir = get_option('dbuspolicydir')
158if dbuspolicydir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400159 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400160endif
161
162dbussessionservicedir = get_option('dbussessionservicedir')
163if dbussessionservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400164 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400165endif
166
167dbussystemservicedir = get_option('dbussystemservicedir')
168if dbussystemservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400169 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400170endif
171
172pamlibdir = get_option('pamlibdir')
173if pamlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400174 pamlibdir = join_paths(rootlibdir, 'security')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400175endif
176
177pamconfdir = get_option('pamconfdir')
178if pamconfdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400179 pamconfdir = join_paths(sysconfdir, 'pam.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400180endif
181
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100182memory_accounting_default = get_option('memory-accounting-default')
183
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400184conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400185conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400186conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
187conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
188conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400189conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
190conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100191
Zbigniew Jędrzejewski-Szmekf7c54272018-03-02 09:09:29 +0100192conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100193
Michael Bieble17e5ba2017-04-13 10:30:56 -0400194conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400195conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
196conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400197conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
198conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
199conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
200conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
Zbigniew Jędrzejewski-Szmekda495a02017-11-21 23:18:05 +0100201conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
Zbigniew Jędrzejewski-Szmek7f2806d2017-11-29 20:02:11 +0100202conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400203conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
204conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
205conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
206conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
207conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +0100208conf.set_quoted('ROOTPREFIX', rootprefixdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400209conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400210conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
211conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400212conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
213conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
214conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
215conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
216conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
217conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400218conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
219conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
Filipe Brandenburgere2d41372018-09-11 23:55:02 -0700220conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
Filipe Brandenburger49cdae62018-09-12 00:23:40 -0700221conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400222conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400223conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400224conf.set_quoted('LIBDIR', libdir)
225conf.set_quoted('ROOTLIBDIR', rootlibdir)
226conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
227conf.set_quoted('BOOTLIBDIR', bootlibdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400228conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
229conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
Lennart Poettering1d7579c2018-10-10 21:20:08 +0200230conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400231conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
232conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
233conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
234conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
Zbigniew Jędrzejewski-Szmek30538ff2018-10-17 14:36:09 +0200235conf.set10('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default)
Michal Koutný7f672e82018-03-09 18:27:13 +0100236conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400237
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400238substs.set('prefix', prefixdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400239substs.set('exec_prefix', prefixdir)
240substs.set('libdir', libdir)
241substs.set('rootlibdir', rootlibdir)
242substs.set('includedir', includedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400243substs.set('pkgsysconfdir', pkgsysconfdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400244substs.set('bindir', bindir)
245substs.set('rootbindir', rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400246substs.set('rootlibexecdir', rootlibexecdir)
247substs.set('systemunitdir', systemunitdir)
248substs.set('userunitdir', userunitdir)
249substs.set('systempresetdir', systempresetdir)
250substs.set('userpresetdir', userpresetdir)
251substs.set('udevhwdbdir', udevhwdbdir)
252substs.set('udevrulesdir', udevrulesdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400253substs.set('udevlibexecdir', udevlibexecdir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200254substs.set('environmentdir', environmentdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400255substs.set('catalogdir', catalogdir)
256substs.set('tmpfilesdir', tmpfilesdir)
257substs.set('sysusersdir', sysusersdir)
258substs.set('sysctldir', sysctldir)
259substs.set('binfmtdir', binfmtdir)
260substs.set('modulesloaddir', modulesloaddir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200261substs.set('modprobedir', modprobedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400262substs.set('systemgeneratordir', systemgeneratordir)
263substs.set('usergeneratordir', usergeneratordir)
264substs.set('systemenvgeneratordir', systemenvgeneratordir)
265substs.set('userenvgeneratordir', userenvgeneratordir)
266substs.set('systemshutdowndir', systemshutdowndir)
267substs.set('systemsleepdir', systemsleepdir)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400268substs.set('VARLOGDIR', varlogdir)
269substs.set('CERTIFICATEROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400270substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
271substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400272substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
273substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
274substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
275substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100276substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmekc02b6ee2018-10-17 10:21:48 +0200277substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400278
279#####################################################################
280
281cc = meson.get_compiler('c')
282pkgconfig = import('pkgconfig')
Zbigniew Jędrzejewski-Szmek6e2afb12017-04-24 21:03:35 -0400283check_compilation_sh = find_program('tools/meson-check-compilation.sh')
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100284meson_build_sh = find_program('tools/meson-build.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400285
Zbigniew Jędrzejewski-Szmekd3da2912018-09-12 11:02:58 +0200286want_tests = get_option('tests')
287slow_tests = want_tests != 'false' and get_option('slow-tests')
288install_tests = get_option('install-tests')
289
James Hilliard46e63a22018-12-27 09:16:20 +0800290if add_languages('cpp', required : fuzzer_build)
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +0200291 # Used only for tests
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200292 cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
Zbigniew Jędrzejewski-Szmek1b2acaa2018-10-09 18:48:09 +0200293else
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200294 cxx_cmd = ''
Zbigniew Jędrzejewski-Szmek94e25232017-05-13 13:23:28 -0400295endif
296
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500297if want_libfuzzer
298 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer')
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +0200299elif want_ossfuzz
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500300 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
301endif
302
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900303possible_cc_flags = [
304 '-Wextra',
305 '-Werror=undef',
306 '-Wlogical-op',
307 '-Wmissing-include-dirs',
308 '-Wold-style-definition',
309 '-Wpointer-arith',
310 '-Winit-self',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900311 '-Wfloat-equal',
312 '-Wsuggest-attribute=noreturn',
313 '-Werror=missing-prototypes',
314 '-Werror=implicit-function-declaration',
315 '-Werror=missing-declarations',
316 '-Werror=return-type',
317 '-Werror=incompatible-pointer-types',
318 '-Werror=format=2',
319 '-Wstrict-prototypes',
320 '-Wredundant-decls',
321 '-Wmissing-noreturn',
322 '-Wimplicit-fallthrough=5',
323 '-Wshadow',
324 '-Wendif-labels',
325 '-Wstrict-aliasing=2',
326 '-Wwrite-strings',
327 '-Werror=overflow',
Zbigniew Jędrzejewski-Szmekb05ecb82018-06-09 13:12:52 +0200328 '-Werror=shift-count-overflow',
Zbigniew Jędrzejewski-Szmekd28b67d2018-06-11 13:17:43 +0200329 '-Werror=shift-overflow=2',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900330 '-Wdate-time',
331 '-Wnested-externs',
Filipe Brandenburgerbf7efeb2018-09-08 13:55:09 -0700332
333 # negative arguments are correctly detected starting with meson 0.46.
334 '-Wno-unused-parameter',
335 '-Wno-missing-field-initializers',
336 '-Wno-unused-result',
337 '-Wno-format-signedness',
338
339 # work-around for gcc 7.1 turning this on on its own.
340 '-Wno-error=nonnull',
341
342 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
343 # optimizations enabled, producing essentially false positives.
344 '-Wno-maybe-uninitialized',
345
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900346 '-ffast-math',
347 '-fno-common',
348 '-fdiagnostics-show-option',
349 '-fno-strict-aliasing',
350 '-fvisibility=hidden',
351 '-fstack-protector',
352 '-fstack-protector-strong',
353 '--param=ssp-buffer-size=4',
354]
355
356# --as-needed and --no-undefined are provided by meson by default,
357# run mesonconf to see what is enabled
358possible_link_flags = [
359 '-Wl,-z,relro',
360 '-Wl,-z,now',
361]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400362
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500363# the oss-fuzz fuzzers are not built with -fPIE, so don't
364# enable it when we are linking against them
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500365if not fuzzer_build
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900366 possible_cc_flags += '-fPIE'
367 possible_link_flags += '-pie'
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500368endif
369
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900370if cc.get_id() == 'clang'
371 possible_cc_flags += [
372 '-Wno-typedef-redefinition',
373 '-Wno-gnu-variable-sized-type-not-at-end',
374 ]
375endif
376
377if get_option('buildtype') != 'debug'
378 possible_cc_flags += [
379 '-ffunction-sections',
380 '-fdata-sections',
381 ]
382
383 possible_link_flags += '-Wl,--gc-sections'
384endif
385
386add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
Yu Watanabe7a6397d2018-05-15 20:18:24 +0900387add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900388
Caio Marcelo de Oliveira Filho9e70f2f2018-02-19 01:37:19 -0800389if cc.compiles('''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400390 #include <time.h>
391 #include <inttypes.h>
392 typedef uint64_t usec_t;
393 usec_t now(clockid_t clock);
394 int main(void) {
395 struct timespec now;
396 return 0;
397 }
Fabrice Fontaine38c1c962018-11-29 13:22:08 +0100398''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400399 add_project_arguments('-Werror=shadow', language : 'c')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400400endif
401
Zbigniew Jędrzejewski-Szmek0e3cc902018-10-11 15:12:41 +0200402cpp = ' '.join(cc.cmd_array()) + ' -E'
Zbigniew Jędrzejewski-Szmek9cc0e6e2017-04-11 10:25:34 -0400403
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400404#####################################################################
405# compilation result tests
406
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400407conf.set('_GNU_SOURCE', true)
408conf.set('__SANE_USERSPACE_TYPES__', true)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400409
410conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
411conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
412conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
413conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
414conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
415conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
416conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
417
418decl_headers = '''
419#include <uchar.h>
420#include <linux/ethtool.h>
Susant Sahanibce67bb2017-09-14 19:51:39 +0000421#include <linux/fib_rules.h>
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100422#include <sys/stat.h>
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400423'''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400424
425foreach decl : ['char16_t',
426 'char32_t',
Susant Sahanibce67bb2017-09-14 19:51:39 +0000427 'struct fib_rule_uid_range',
Susant Sahani926062f2018-11-27 10:58:54 +0530428 'struct fib_rule_port_range',
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100429 'struct statx',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400430 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400431
432 # We get -1 if the size cannot be determined
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200433 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
434
435 if decl == 'struct statx'
436 if have
437 want_linux_stat_h = false
438 else
439 have = cc.sizeof(decl,
440 prefix : decl_headers + '#include <linux/stat.h>',
441 args : '-D_GNU_SOURCE') > 0
442 want_linux_stat_h = have
443 endif
444 endif
445
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200446 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400447endforeach
448
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200449conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
Filipe Brandenburger75720bf2018-07-15 22:43:35 -0700450
Yu Watanabe9714c022018-12-02 16:27:02 +0100451foreach decl : [['ETHTOOL_LINK_MODE_10baseT_Half_BIT', 'linux/ethtool.h'],
Yu Watanabe8a716f22018-11-17 23:42:27 +0900452 ['ETHTOOL_LINK_MODE_25000baseCR_Full_BIT', 'linux/ethtool.h'],
453 ['ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT', 'linux/ethtool.h'],
454 ['ETHTOOL_LINK_MODE_1000baseX_Full_BIT', 'linux/ethtool.h'],
455 ['ETHTOOL_LINK_MODE_2500baseT_Full_BIT', 'linux/ethtool.h'],
456 ['ETHTOOL_LINK_MODE_FEC_NONE_BIT', 'linux/ethtool.h'],
Yu Watanabeb6459df2018-12-04 01:28:23 +0100457 ['FRA_TUN_ID', 'linux/fib_rules.h'],
458 ['FRA_SUPPRESS_PREFIXLEN', 'linux/fib_rules.h'],
Yu Watanabe9714c022018-12-02 16:27:02 +0100459 ['FRA_PAD', 'linux/fib_rules.h'],
460 ['FRA_L3MDEV', 'linux/fib_rules.h'],
461 ['FRA_UID_RANGE', 'linux/fib_rules.h'],
462 ['FRA_DPORT_RANGE', 'linux/fib_rules.h'],
463 ['FOU_ATTR_REMCSUM_NOPARTIAL', 'linux/fou.h'],
464 ['FOU_CMD_GET', 'linux/fou.h'],
465 ['IFA_FLAGS', 'linux/if_addr.h'],
466 ['IFLA_BRIDGE_VLAN_TUNNEL_INFO', 'linux/if_bridge.h'],
467 ['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
468 ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
469 ['IN6_ADDR_GEN_MODE_RANDOM', 'linux/if_link.h'],
470 ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
471 ['IPVLAN_MODE_L3S', 'linux/if_link.h'],
472 ['IFLA_IPVLAN_FLAGS', 'linux/if_link.h'],
473 ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
474 ['IFLA_CARRIER_CHANGES', 'linux/if_link.h'],
475 ['IFLA_PHYS_SWITCH_ID', 'linux/if_link.h'],
476 ['IFLA_LINK_NETNSID', 'linux/if_link.h'],
477 ['IFLA_PHYS_PORT_NAME', 'linux/if_link.h'],
478 ['IFLA_PROTO_DOWN', 'linux/if_link.h'],
479 ['IFLA_GSO_MAX_SIZE', 'linux/if_link.h'],
480 ['IFLA_PAD', 'linux/if_link.h'],
481 ['IFLA_XDP', 'linux/if_link.h'],
482 ['IFLA_EVENT', 'linux/if_link.h'],
483 ['IFLA_IF_NETNSID', 'linux/if_link.h'],
484 ['IFLA_TARGET_NETNSID', 'linux/if_link.h'],
485 ['IFLA_NEW_IFINDEX', 'linux/if_link.h'],
486 ['IFLA_MAX_MTU', 'linux/if_link.h'],
487 ['IFLA_BOND_ACTIVE_SLAVE', 'linux/if_link.h'],
488 ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
489 ['IFLA_BOND_AD_ACTOR_SYSTEM', 'linux/if_link.h'],
490 ['IFLA_BOND_TLB_DYNAMIC_LB', 'linux/if_link.h'],
491 ['IFLA_VXLAN_UDP_ZERO_CSUM6_RX', 'linux/if_link.h'],
492 ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
493 ['IFLA_VXLAN_COLLECT_METADATA', 'linux/if_link.h'],
494 ['IFLA_VXLAN_LABEL', 'linux/if_link.h'],
495 ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
496 ['IFLA_VXLAN_TTL_INHERIT', 'linux/if_link.h'],
497 ['IFLA_GENEVE_TOS', 'linux/if_link.h'],
498 ['IFLA_GENEVE_COLLECT_METADATA', 'linux/if_link.h'],
499 ['IFLA_GENEVE_REMOTE6', 'linux/if_link.h'],
500 ['IFLA_GENEVE_UDP_ZERO_CSUM6_RX', 'linux/if_link.h'],
501 ['IFLA_GENEVE_LABEL', 'linux/if_link.h'],
502 ['IFLA_GENEVE_TTL_INHERIT', 'linux/if_link.h'],
503 ['IFLA_BR_MAX_AGE', 'linux/if_link.h'],
504 ['IFLA_BR_PRIORITY', 'linux/if_link.h'],
505 ['IFLA_BR_VLAN_PROTOCOL', 'linux/if_link.h'],
506 ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
507 ['IFLA_BR_VLAN_STATS_ENABLED', 'linux/if_link.h'],
508 ['IFLA_BR_MCAST_STATS_ENABLED', 'linux/if_link.h'],
509 ['IFLA_BR_MCAST_MLD_VERSION', 'linux/if_link.h'],
510 ['IFLA_BR_VLAN_STATS_PER_PORT', 'linux/if_link.h'],
511 ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
512 ['IFLA_BRPORT_PROXYARP_WIFI', 'linux/if_link.h'],
513 ['IFLA_BRPORT_MULTICAST_ROUTER', 'linux/if_link.h'],
514 ['IFLA_BRPORT_PAD', 'linux/if_link.h'],
515 ['IFLA_BRPORT_MCAST_FLOOD', 'linux/if_link.h'],
516 ['IFLA_BRPORT_VLAN_TUNNEL', 'linux/if_link.h'],
517 ['IFLA_BRPORT_BCAST_FLOOD', 'linux/if_link.h'],
518 ['IFLA_BRPORT_NEIGH_SUPPRESS', 'linux/if_link.h'],
519 ['IFLA_BRPORT_ISOLATED', 'linux/if_link.h'],
520 ['IFLA_BRPORT_BACKUP_PORT', 'linux/if_link.h'],
521 ['IFLA_VRF_TABLE', 'linux/if_link.h'],
522 # if_tunnel.h is buggy and cannot be included on its own
523 ['IFLA_VTI_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
524 ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
525 ['IFLA_IPTUN_COLLECT_METADATA', 'linux/if_tunnel.h', '#include <net/if.h>'],
526 ['IFLA_IPTUN_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
527 ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
528 ['IFLA_GRE_COLLECT_METADATA', 'linux/if_tunnel.h', '#include <net/if.h>'],
529 ['IFLA_GRE_IGNORE_DF', 'linux/if_tunnel.h', '#include <net/if.h>'],
530 ['IFLA_GRE_FWMARK', 'linux/if_tunnel.h', '#include <net/if.h>'],
531 ['IFLA_GRE_ERSPAN_INDEX', 'linux/if_tunnel.h', '#include <net/if.h>'],
532 ['IFLA_GRE_ERSPAN_HWID', 'linux/if_tunnel.h', '#include <net/if.h>'],
533 ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400534 ]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400535 prefix = decl.length() > 2 ? decl[2] : ''
536 have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200537 conf.set10('HAVE_' + decl[0], have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400538endforeach
539
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400540foreach ident : ['secure_getenv', '__secure_getenv']
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200541 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400542endforeach
543
544foreach ident : [
Lennart Poettering85db59b2017-12-25 12:01:14 +0100545 ['memfd_create', '''#include <sys/mman.h>'''],
Lennart Poettering7b961e42017-12-25 12:35:28 +0100546 ['gettid', '''#include <sys/types.h>
547 #include <unistd.h>'''],
Lennart Poettering3c042ad2017-12-25 12:07:40 +0100548 ['pivot_root', '''#include <stdlib.h>
549 #include <unistd.h>'''], # no known header declares pivot_root
Lennart Poettering85db59b2017-12-25 12:01:14 +0100550 ['name_to_handle_at', '''#include <sys/types.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400551 #include <sys/stat.h>
552 #include <fcntl.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100553 ['setns', '''#include <sched.h>'''],
Lennart Poettering2acfd0f2017-12-25 12:35:43 +0100554 ['renameat2', '''#include <stdio.h>
555 #include <fcntl.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400556 ['kcmp', '''#include <linux/kcmp.h>'''],
557 ['keyctl', '''#include <sys/types.h>
558 #include <keyutils.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100559 ['copy_file_range', '''#include <sys/syscall.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400560 #include <unistd.h>'''],
Daniel Mack71e52002016-10-18 17:57:10 +0200561 ['bpf', '''#include <sys/syscall.h>
562 #include <unistd.h>'''],
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100563 ['statx', '''#include <sys/types.h>
564 #include <sys/stat.h>
565 #include <unistd.h>'''],
Zbigniew Jędrzejewski-Szmekaa484f32018-02-26 21:20:00 +0100566 ['explicit_bzero' , '''#include <string.h>'''],
567 ['reallocarray', '''#include <malloc.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400568]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400569
Lennart Poettering85db59b2017-12-25 12:01:14 +0100570 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200571 conf.set10('HAVE_' + ident[0].to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400572endforeach
573
Lennart Poettering85db59b2017-12-25 12:01:14 +0100574if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200575 conf.set10('USE_SYS_RANDOM_H', true)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200576 conf.set10('HAVE_GETRANDOM', true)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400577else
578 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200579 conf.set10('USE_SYS_RANDOM_H', false)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200580 conf.set10('HAVE_GETRANDOM', have)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400581endif
582
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400583#####################################################################
584
585sed = find_program('sed')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400586awk = find_program('awk')
Zbigniew Jędrzejewski-Szmekd730e2d2017-04-25 08:49:58 -0400587m4 = find_program('m4')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400588stat = find_program('stat')
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -0400589git = find_program('git', required : false)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100590env = find_program('env')
Zbigniew Jędrzejewski-Szmekb1ffacb2018-03-22 08:34:21 +0100591perl = find_program('perl', required : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400592
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -0400593meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh'
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400594mkdir_p = 'mkdir -p $DESTDIR/@0@'
Zbigniew Jędrzejewski-Szmekd83f4f52017-04-16 12:04:46 -0400595test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
596splash_bmp = files('test/splash.bmp')
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400597
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400598# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
599# /usr/sbin, /sbin, and fall back to the default from middle column.
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500600progs = [['quotaon', '/usr/sbin/quotaon' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400601 ['quotacheck', '/usr/sbin/quotacheck' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400602 ['kmod', '/usr/bin/kmod' ],
603 ['kexec', '/usr/sbin/kexec' ],
604 ['sulogin', '/usr/sbin/sulogin' ],
605 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
606 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
607 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
608 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
609 ]
610foreach prog : progs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400611 path = get_option(prog[0] + '-path')
612 if path != ''
613 message('Using @1@ for @0@'.format(prog[0], path))
614 else
615 exe = find_program(prog[0],
616 '/usr/sbin/' + prog[0],
617 '/sbin/' + prog[0],
618 required: false)
619 path = exe.found() ? exe.path() : prog[1]
620 endif
621 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
622 conf.set_quoted(name, path)
623 substs.set(name, path)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400624endforeach
625
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500626conf.set_quoted('TELINIT', get_option('telinit-path'))
627
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400628if run_command('ln', '--relative', '--help').returncode() != 0
Zbigniew Jędrzejewski-Szmekcd001012018-03-09 08:56:23 +0100629 error('ln does not support --relative (added in coreutils 8.16)')
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400630endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400631
632############################################################
633
634gperf = find_program('gperf')
635
636gperf_test_format = '''
637#include <string.h>
638const char * in_word_set(const char *, @0@);
639@1@
640'''
641gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
642gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
643gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
644if cc.compiles(gperf_test)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400645 gperf_len_type = 'size_t'
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400646else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400647 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
648 if cc.compiles(gperf_test)
649 gperf_len_type = 'unsigned'
650 else
651 error('unable to determine gperf len type')
652 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400653endif
654message('gperf len type is @0@'.format(gperf_len_type))
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400655conf.set('GPERF_LEN_TYPE', gperf_len_type,
656 description : 'The type of gperf "len" parameter')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400657
658############################################################
659
660if not cc.has_header('sys/capability.h')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400661 error('POSIX caps headers not found')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400662endif
Björn Esser9f555bb2018-01-25 15:30:15 +0100663foreach header : ['crypt.h',
Yu Watanabeb9683ba2018-12-04 07:46:59 +0100664 'linux/btrfs_tree.h',
Yu Watanabe80df8f22018-10-21 18:35:46 +0900665 'linux/fou.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400666 'linux/memfd.h',
667 'linux/vm_sockets.h',
Yu Watanabe9714c022018-12-02 16:27:02 +0100668 'linux/can/vxcan.h',
Zbigniew Jędrzejewski-Szmekaf8786b2017-10-03 12:09:40 +0200669 'sys/auxv.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400670 'valgrind/memcheck.h',
671 'valgrind/valgrind.h',
672 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400673
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200674 conf.set10('HAVE_' + header.underscorify().to_upper(),
675 cc.has_header(header))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400676endforeach
677
678############################################################
679
680conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -0400681conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
682gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400683
684default_hierarchy = get_option('default-hierarchy')
685conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
686 description : 'default cgroup hierarchy as string')
687if default_hierarchy == 'legacy'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400688 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400689elif default_hierarchy == 'hybrid'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400690 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400691else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400692 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400693endif
694
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +0100695default_net_naming_scheme = get_option('default-net-naming-scheme')
696conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
697
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400698time_epoch = get_option('time-epoch')
Yu Watanabeac093402018-05-10 16:04:16 +0900699if time_epoch == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400700 NEWS = files('NEWS')
Yu Watanabeac093402018-05-10 16:04:16 +0900701 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400702endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400703conf.set('TIME_EPOCH', time_epoch)
704
705system_uid_max = get_option('system-uid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900706if system_uid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400707 system_uid_max = run_command(
708 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800709 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
710 '/etc/login.defs').stdout().strip()
711 if system_uid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900712 system_uid_max = 999
713 else
714 system_uid_max = system_uid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800715 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400716endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400717conf.set('SYSTEM_UID_MAX', system_uid_max)
718substs.set('systemuidmax', system_uid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400719
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400720system_gid_max = get_option('system-gid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900721if system_gid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400722 system_gid_max = run_command(
723 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800724 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
725 '/etc/login.defs').stdout().strip()
726 if system_gid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900727 system_gid_max = 999
728 else
729 system_gid_max = system_gid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800730 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400731endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400732conf.set('SYSTEM_GID_MAX', system_gid_max)
733substs.set('systemgidmax', system_gid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400734
Yu Watanabeac093402018-05-10 16:04:16 +0900735dynamic_uid_min = get_option('dynamic-uid-min')
736dynamic_uid_max = get_option('dynamic-uid-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100737conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
738conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
739substs.set('dynamicuidmin', dynamic_uid_min)
740substs.set('dynamicuidmax', dynamic_uid_max)
741
Yu Watanabeac093402018-05-10 16:04:16 +0900742container_uid_base_min = get_option('container-uid-base-min')
743container_uid_base_max = get_option('container-uid-base-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100744conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
745conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
746substs.set('containeruidbasemin', container_uid_base_min)
747substs.set('containeruidbasemax', container_uid_base_max)
748
Lennart Poetteringafde4572017-12-05 11:00:24 +0100749nobody_user = get_option('nobody-user')
750nobody_group = get_option('nobody-group')
751
Chen Qi2484bff2018-07-23 14:53:09 +0800752if not meson.is_cross_build()
753 getent_result = run_command('getent', 'passwd', '65534')
754 if getent_result.returncode() == 0
755 name = getent_result.stdout().split(':')[0]
756 if name != nobody_user
757 warning('\n' +
758 '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) +
759 'Your build will result in an user table setup that is incompatible with the local system.')
760 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100761 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800762 id_result = run_command('id', '-u', nobody_user)
763 if id_result.returncode() == 0
764 id = id_result.stdout().to_int()
765 if id != 65534
766 warning('\n' +
767 '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) +
768 'Your build will result in an user table setup that is incompatible with the local system.')
769 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100770 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100771
Chen Qi2484bff2018-07-23 14:53:09 +0800772 getent_result = run_command('getent', 'group', '65534')
773 if getent_result.returncode() == 0
774 name = getent_result.stdout().split(':')[0]
775 if name != nobody_group
776 warning('\n' +
777 '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) +
778 'Your build will result in an group table setup that is incompatible with the local system.')
779 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100780 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800781 id_result = run_command('id', '-g', nobody_group)
782 if id_result.returncode() == 0
783 id = id_result.stdout().to_int()
784 if id != 65534
785 warning('\n' +
786 '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) +
787 'Your build will result in an group table setup that is incompatible with the local system.')
788 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100789 endif
790endif
Yu Watanabe8374cc62017-12-07 17:19:11 +0900791if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
Yu Watanabe8ea9fad2018-05-10 14:50:52 +0900792 warning('\n' +
793 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
794 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
Yu Watanabe8374cc62017-12-07 17:19:11 +0900795endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100796
797conf.set_quoted('NOBODY_USER_NAME', nobody_user)
798conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
Yu Watanabe60712022017-12-07 15:49:16 +0900799substs.set('NOBODY_USER_NAME', nobody_user)
800substs.set('NOBODY_GROUP_NAME', nobody_group)
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100801
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400802tty_gid = get_option('tty-gid')
803conf.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400804substs.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400805
Ikey Doherty84786b82017-12-03 12:28:23 +0000806# Ensure provided GID argument is numeric, otherwise fallback to default assignment
Yu Watanabeac093402018-05-10 16:04:16 +0900807users_gid = get_option('users-gid')
808substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
Ikey Doherty84786b82017-12-03 12:28:23 +0000809
Yu Watanabe348b4432018-05-07 18:17:35 +0900810conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
811conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400812
Michael Bieblace5e312018-07-13 23:36:13 +0200813dev_kvm_mode = get_option('dev-kvm-mode')
814substs.set('DEV_KVM_MODE', dev_kvm_mode)
815conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
Tom Stellard4e15a732017-10-31 08:46:24 -0700816substs.set('GROUP_RENDER_MODE', get_option('group-render-mode'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400817
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400818kill_user_processes = get_option('default-kill-user-processes')
819conf.set10('KILL_USER_PROCESSES', kill_user_processes)
Michal Koutnýc7f7e852018-03-09 16:40:41 +0100820conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400821substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400822
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400823dns_servers = get_option('dns-servers')
824conf.set_quoted('DNS_SERVERS', dns_servers)
825substs.set('DNS_SERVERS', dns_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400826
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400827ntp_servers = get_option('ntp-servers')
828conf.set_quoted('NTP_SERVERS', ntp_servers)
829substs.set('NTP_SERVERS', ntp_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400830
Dave Reisner8ca9e922018-12-28 07:38:36 -0500831default_locale = get_option('default-locale')
Yu Watanabe03475e22018-12-29 22:00:07 +0900832if default_locale == ''
833 choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
834 default_locale = run_command(choose_default_locale_sh).stdout().strip()
835endif
Dave Reisner8ca9e922018-12-28 07:38:36 -0500836conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
837
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400838conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
839
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400840substs.set('SUSHELL', get_option('debug-shell'))
841substs.set('DEBUGTTY', get_option('debug-tty'))
842
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200843enable_debug_hashmap = false
844enable_debug_mmap_cache = false
Yu Watanabed6601492018-11-23 00:36:35 +0900845enable_debug_siphash = false
Yu Watanabe20e97dd2018-11-23 00:28:27 +0900846enable_debug_udev = false
Zbigniew Jędrzejewski-Szmek8f6b4422018-08-19 19:11:30 +0200847foreach name : get_option('debug-extra')
Yu Watanabead7aa762018-05-02 13:56:28 +0900848 if name == 'hashmap'
849 enable_debug_hashmap = true
850 elif name == 'mmap-cache'
851 enable_debug_mmap_cache = true
Yu Watanabed6601492018-11-23 00:36:35 +0900852 elif name == 'siphash'
853 enable_debug_siphash = true
Yu Watanabe20e97dd2018-11-23 00:28:27 +0900854 elif name == 'udev'
855 enable_debug_udev = true
Yu Watanabead7aa762018-05-02 13:56:28 +0900856 else
857 message('unknown debug option "@0@", ignoring'.format(name))
858 endif
859endforeach
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200860conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
861conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
Yu Watanabed6601492018-11-23 00:36:35 +0900862conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
Yu Watanabe20e97dd2018-11-23 00:28:27 +0900863conf.set10('ENABLE_DEBUG_UDEV', enable_debug_udev)
Zbigniew Jędrzejewski-Szmek671677d2017-04-27 20:51:34 -0400864
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200865conf.set10('VALGRIND', get_option('valgrind'))
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +0200866conf.set10('LOG_TRACE', get_option('log-trace'))
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200867
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400868#####################################################################
869
870threads = dependency('threads')
871librt = cc.find_library('rt')
872libm = cc.find_library('m')
873libdl = cc.find_library('dl')
874libcrypt = cc.find_library('crypt')
875
Zbigniew Jędrzejewski-Szmek1800cc82017-04-27 01:30:30 -0400876libcap = dependency('libcap', required : false)
877if not libcap.found()
878 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
879 libcap = cc.find_library('cap')
880endif
881
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400882libmount = dependency('mount',
Zbigniew Jędrzejewski-Szmekc0b4b0f2018-03-09 14:58:47 +0100883 version : fuzzer_build ? '>= 0' : '>= 2.30')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400884
885want_seccomp = get_option('seccomp')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500886if want_seccomp != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400887 libseccomp = dependency('libseccomp',
Zbigniew Jędrzejewski-Szmek9f0e9c02017-04-27 10:05:18 -0400888 version : '>= 2.3.1',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400889 required : want_seccomp == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200890 have = libseccomp.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400891else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200892 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400893 libseccomp = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400894endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200895conf.set10('HAVE_SECCOMP', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400896
897want_selinux = get_option('selinux')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500898if want_selinux != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400899 libselinux = dependency('libselinux',
900 version : '>= 2.1.9',
901 required : want_selinux == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200902 have = libselinux.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400903else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200904 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400905 libselinux = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400906endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200907conf.set10('HAVE_SELINUX', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400908
909want_apparmor = get_option('apparmor')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500910if want_apparmor != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400911 libapparmor = dependency('libapparmor',
912 required : want_apparmor == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200913 have = libapparmor.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400914else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200915 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400916 libapparmor = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400917endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200918conf.set10('HAVE_APPARMOR', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400919
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400920smack_run_label = get_option('smack-run-label')
921if smack_run_label != ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400922 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400923endif
924
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400925want_polkit = get_option('polkit')
926install_polkit = false
927install_polkit_pkla = false
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500928if want_polkit != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400929 install_polkit = true
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400930
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400931 libpolkit = dependency('polkit-gobject-1',
932 required : false)
933 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
934 message('Old polkit detected, will install pkla files')
935 install_polkit_pkla = true
936 endif
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400937endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200938conf.set10('ENABLE_POLKIT', install_polkit)
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400939
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400940want_acl = get_option('acl')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500941if want_acl != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400942 libacl = cc.find_library('acl', required : want_acl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200943 have = libacl.found()
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400944else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200945 have = false
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400946 libacl = []
947endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200948conf.set10('HAVE_ACL', have)
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400949
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400950want_audit = get_option('audit')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500951if want_audit != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400952 libaudit = dependency('audit', required : want_audit == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200953 have = libaudit.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400954else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200955 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400956 libaudit = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400957endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200958conf.set10('HAVE_AUDIT', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400959
960want_blkid = get_option('blkid')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500961if want_blkid != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400962 libblkid = dependency('blkid', required : want_blkid == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200963 have = libblkid.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400964else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200965 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400966 libblkid = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400967endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200968conf.set10('HAVE_BLKID', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400969
970want_kmod = get_option('kmod')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500971if want_kmod != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400972 libkmod = dependency('libkmod',
973 version : '>= 15',
974 required : want_kmod == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200975 have = libkmod.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400976else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200977 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400978 libkmod = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400979endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200980conf.set10('HAVE_KMOD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400981
982want_pam = get_option('pam')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500983if want_pam != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400984 libpam = cc.find_library('pam', required : want_pam == 'true')
985 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200986 have = libpam.found() and libpam_misc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400987else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200988 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400989 libpam = []
990 libpam_misc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400991endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200992conf.set10('HAVE_PAM', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400993
994want_microhttpd = get_option('microhttpd')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500995if want_microhttpd != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400996 libmicrohttpd = dependency('libmicrohttpd',
997 version : '>= 0.9.33',
998 required : want_microhttpd == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200999 have = libmicrohttpd.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001000else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001001 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001002 libmicrohttpd = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001003endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001004conf.set10('HAVE_MICROHTTPD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001005
1006want_libcryptsetup = get_option('libcryptsetup')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001007if want_libcryptsetup != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001008 libcryptsetup = dependency('libcryptsetup',
1009 version : '>= 1.6.0',
1010 required : want_libcryptsetup == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001011 have = libcryptsetup.found()
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +01001012 have_sector = cc.has_member(
1013 'struct crypt_params_plain',
1014 'sector_size',
1015 prefix : '#include <libcryptsetup.h>')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001016else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001017 have = false
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +01001018 have_sector = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001019 libcryptsetup = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001020endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001021conf.set10('HAVE_LIBCRYPTSETUP', have)
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +01001022conf.set10('HAVE_LIBCRYPTSETUP_SECTOR_SIZE', have_sector)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001023
1024want_libcurl = get_option('libcurl')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001025if want_libcurl != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001026 libcurl = dependency('libcurl',
1027 version : '>= 7.32.0',
1028 required : want_libcurl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001029 have = libcurl.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001030else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001031 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001032 libcurl = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001033endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001034conf.set10('HAVE_LIBCURL', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001035
1036want_libidn = get_option('libidn')
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -04001037want_libidn2 = get_option('libidn2')
1038if want_libidn == 'true' and want_libidn2 == 'true'
1039 error('libidn and libidn2 cannot be requested simultaneously')
1040endif
1041
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001042if want_libidn != 'false' and want_libidn2 != 'true' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001043 libidn = dependency('libidn',
1044 required : want_libidn == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001045 have = libidn.found()
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -04001046else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001047 have = false
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -04001048 libidn = []
1049endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001050conf.set10('HAVE_LIBIDN', have)
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001051if not have and want_libidn2 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -04001052 # libidn is used for both libidn and libidn2 objects
1053 libidn = dependency('libidn2',
1054 required : want_libidn2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001055 have = libidn.found()
1056else
1057 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001058endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001059conf.set10('HAVE_LIBIDN2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001060
1061want_libiptc = get_option('libiptc')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001062if want_libiptc != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001063 libiptc = dependency('libiptc',
1064 required : want_libiptc == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001065 have = libiptc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001066else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001067 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001068 libiptc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001069endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001070conf.set10('HAVE_LIBIPTC', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001071
1072want_qrencode = get_option('qrencode')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001073if want_qrencode != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001074 libqrencode = dependency('libqrencode',
1075 required : want_qrencode == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001076 have = libqrencode.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001077else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001078 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001079 libqrencode = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001080endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001081conf.set10('HAVE_QRENCODE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001082
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001083want_gcrypt = get_option('gcrypt')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001084if want_gcrypt != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001085 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1086 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001087 have = libgcrypt.found() and libgpg_error.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001088else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001089 have = false
1090endif
1091if not have
1092 # link to neither of the libs if one is not found
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001093 libgcrypt = []
1094 libgpg_error = []
1095endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001096conf.set10('HAVE_GCRYPT', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001097
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001098want_gnutls = get_option('gnutls')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001099if want_gnutls != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001100 libgnutls = dependency('gnutls',
1101 version : '>= 3.1.4',
1102 required : want_gnutls == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001103 have = libgnutls.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001104else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001105 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001106 libgnutls = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001107endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001108conf.set10('HAVE_GNUTLS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001109
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001110want_openssl = get_option('openssl')
1111if want_openssl != 'false' and not fuzzer_build
1112 libopenssl = dependency('openssl',
1113 version : '>= 1.1.0',
1114 required : want_openssl == 'true')
1115 have = libopenssl.found()
1116else
1117 have = false
1118 libopenssl = []
1119endif
1120conf.set10('HAVE_OPENSSL', have)
1121
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001122want_elfutils = get_option('elfutils')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001123if want_elfutils != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001124 libdw = dependency('libdw',
1125 required : want_elfutils == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001126 have = libdw.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001127else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001128 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001129 libdw = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001130endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001131conf.set10('HAVE_ELFUTILS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001132
1133want_zlib = get_option('zlib')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001134if want_zlib != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001135 libz = dependency('zlib',
1136 required : want_zlib == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001137 have = libz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001138else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001139 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001140 libz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001141endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001142conf.set10('HAVE_ZLIB', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001143
1144want_bzip2 = get_option('bzip2')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001145if want_bzip2 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001146 libbzip2 = cc.find_library('bz2',
1147 required : want_bzip2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001148 have = libbzip2.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001149else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001150 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001151 libbzip2 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001152endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001153conf.set10('HAVE_BZIP2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001154
1155want_xz = get_option('xz')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001156if want_xz != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001157 libxz = dependency('liblzma',
1158 required : want_xz == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001159 have = libxz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001160else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001161 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001162 libxz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001163endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001164conf.set10('HAVE_XZ', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001165
1166want_lz4 = get_option('lz4')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001167if want_lz4 != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001168 liblz4 = dependency('liblz4',
Zbigniew Jędrzejewski-Szmeke0a1d4b2018-10-29 18:32:51 +01001169 version : '>= 1.3.0',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001170 required : want_lz4 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001171 have = liblz4.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001172else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001173 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001174 liblz4 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001175endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001176conf.set10('HAVE_LZ4', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001177
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001178want_xkbcommon = get_option('xkbcommon')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001179if want_xkbcommon != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001180 libxkbcommon = dependency('xkbcommon',
1181 version : '>= 0.3.0',
1182 required : want_xkbcommon == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001183 have = libxkbcommon.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001184else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001185 have = false
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001186 libxkbcommon = []
1187endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001188conf.set10('HAVE_XKBCOMMON', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001189
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01001190want_pcre2 = get_option('pcre2')
1191if want_pcre2 != 'false'
1192 libpcre2 = dependency('libpcre2-8',
1193 required : want_pcre2 == 'true')
1194 have = libpcre2.found()
1195else
1196 have = false
1197 libpcre2 = []
1198endif
1199conf.set10('HAVE_PCRE2', have)
1200
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001201want_glib = get_option('glib')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001202if want_glib != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001203 libglib = dependency('glib-2.0',
1204 version : '>= 2.22.0',
1205 required : want_glib == 'true')
1206 libgobject = dependency('gobject-2.0',
1207 version : '>= 2.22.0',
1208 required : want_glib == 'true')
1209 libgio = dependency('gio-2.0',
1210 required : want_glib == 'true')
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -04001211 have = libglib.found() and libgobject.found() and libgio.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001212else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001213 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001214 libglib = []
1215 libgobject = []
1216 libgio = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001217endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001218conf.set10('HAVE_GLIB', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001219
1220want_dbus = get_option('dbus')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001221if want_dbus != 'false' and not fuzzer_build
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001222 libdbus = dependency('dbus-1',
1223 version : '>= 1.3.2',
1224 required : want_dbus == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001225 have = libdbus.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001226else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001227 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001228 libdbus = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001229endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001230conf.set10('HAVE_DBUS', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001231
Yu Watanabe42303dc2017-06-18 05:22:32 +09001232default_dnssec = get_option('default-dnssec')
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05001233if fuzzer_build
Jonathan Rudenbergb4081f32018-01-15 18:27:37 -05001234 default_dnssec = 'no'
1235endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001236if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
Yu Watanabe42303dc2017-06-18 05:22:32 +09001237 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1238 default_dnssec = 'no'
1239endif
1240conf.set('DEFAULT_DNSSEC_MODE',
1241 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1242substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1243
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001244dns_over_tls = get_option('dns-over-tls')
1245if dns_over_tls != 'false'
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001246 if dns_over_tls == 'openssl'
1247 have_gnutls = false
1248 else
1249 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.5.3'))
1250 if dns_over_tls == 'gnutls' and not have_gnutls
1251 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1252 endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001253 endif
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001254 if dns_over_tls == 'gnutls' or have_gnutls
1255 have_openssl = false
1256 else
1257 have_openssl = conf.get('HAVE_OPENSSL') == 1
1258 if dns_over_tls != 'auto' and not have_openssl
1259 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
1260 error('DNS-over-TLS support was requested$0$, but dependencies are not available'.format(str))
1261 endif
1262 endif
1263 have = have_gnutls or have_openssl
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001264else
Michael Olbrichbe5536a2018-11-11 11:30:53 +01001265 have = false
1266 have_gnutls = false
1267 have_openssl = false
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001268endif
1269conf.set10('ENABLE_DNS_OVER_TLS', have)
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001270conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1271conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001272
Iwan Timmerc9299be2018-06-13 20:26:24 +02001273default_dns_over_tls = get_option('default-dns-over-tls')
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001274if fuzzer_build
Iwan Timmerc9299be2018-06-13 20:26:24 +02001275 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001276endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001277if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
1278 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 +02001279 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001280endif
Iwan Timmerc9299be2018-06-13 20:26:24 +02001281conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1282 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1283substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001284
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001285want_importd = get_option('importd')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001286if want_importd != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001287 have = (conf.get('HAVE_LIBCURL') == 1 and
1288 conf.get('HAVE_ZLIB') == 1 and
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001289 conf.get('HAVE_XZ') == 1 and
1290 conf.get('HAVE_GCRYPT') == 1)
1291 if want_importd == 'true' and not have
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001292 error('importd support was requested, but dependencies are not available')
1293 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001294else
1295 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001296endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001297conf.set10('ENABLE_IMPORTD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001298
1299want_remote = get_option('remote')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001300if want_remote != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001301 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1302 conf.get('HAVE_LIBCURL') == 1]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001303 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1304 # it's possible to build one without the other. Complain only if
1305 # support was explictly requested. The auxiliary files like sysusers
1306 # config should be installed when any of the programs are built.
1307 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1308 error('remote support was requested, but dependencies are not available')
1309 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001310 have = have_deps[0] or have_deps[1]
1311else
1312 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001313endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001314conf.set10('ENABLE_REMOTE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001315
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001316foreach term : ['utmp',
1317 'hibernate',
1318 'environment-d',
1319 'binfmt',
1320 'coredump',
1321 'resolve',
1322 'logind',
1323 'hostnamed',
1324 'localed',
1325 'machined',
Lennart Poettering61d05782018-04-16 21:41:40 +02001326 'portabled',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001327 'networkd',
1328 'timedated',
1329 'timesyncd',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001330 'firstboot',
1331 'randomseed',
1332 'backlight',
1333 'vconsole',
1334 'quotacheck',
1335 'sysusers',
1336 'tmpfiles',
1337 'hwdb',
1338 'rfkill',
1339 'ldconfig',
1340 'efi',
1341 'tpm',
1342 'ima',
1343 'smack',
1344 'gshadow',
1345 'idn',
Yu Watanabe08540a92018-07-18 09:25:57 +09001346 'nss-myhostname',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001347 'nss-systemd']
1348 have = get_option(term)
1349 name = 'ENABLE_' + term.underscorify().to_upper()
1350 conf.set10(name, have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001351endforeach
1352
Yu Watanabe08540a92018-07-18 09:25:57 +09001353foreach tuple : [['nss-mymachines', 'machined'],
1354 ['nss-resolve', 'resolve']]
1355 want = get_option(tuple[0])
1356 if want != 'false'
1357 have = get_option(tuple[1])
1358 if want == 'true' and not have
1359 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1360 endif
1361 else
1362 have = false
1363 endif
1364 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1365 conf.set10(name, have)
1366endforeach
1367
1368enable_nss = false
1369foreach term : ['ENABLE_NSS_MYHOSTNAME',
1370 'ENABLE_NSS_MYMACHINES',
1371 'ENABLE_NSS_RESOLVE',
1372 'ENABLE_NSS_SYSTEMD']
1373 if conf.get(term) == 1
1374 enable_nss = true
1375 endif
1376endforeach
1377conf.set10('ENABLE_NSS', enable_nss)
1378
Yu Watanabe348b4432018-05-07 18:17:35 +09001379conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
Yu Watanabe6129ec82018-05-03 18:07:43 +09001380
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001381tests = []
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001382fuzzers = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001383
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11001384conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
Zbigniew Jędrzejewski-Szmek00d82c82017-07-12 21:25:17 +00001385
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001386#####################################################################
1387
1388if get_option('efi')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001389 efi_arch = host_machine.cpu_family()
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001390
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001391 if efi_arch == 'x86'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001392 EFI_MACHINE_TYPE_NAME = 'ia32'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001393 gnu_efi_arch = 'ia32'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001394 elif efi_arch == 'x86_64'
1395 EFI_MACHINE_TYPE_NAME = 'x64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001396 gnu_efi_arch = 'x86_64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001397 elif efi_arch == 'arm'
1398 EFI_MACHINE_TYPE_NAME = 'arm'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001399 gnu_efi_arch = 'arm'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001400 elif efi_arch == 'aarch64'
1401 EFI_MACHINE_TYPE_NAME = 'aa64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001402 gnu_efi_arch = 'aarch64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001403 else
1404 EFI_MACHINE_TYPE_NAME = ''
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001405 gnu_efi_arch = ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001406 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001407
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001408 have = true
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001409 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
Zbigniew Jędrzejewski-Szmek80c6fce2017-04-24 19:28:04 -04001410
Yu Watanabeac093402018-05-10 16:04:16 +09001411 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001412else
1413 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001414endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001415conf.set10('ENABLE_EFI', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001416
1417#####################################################################
1418
1419config_h = configure_file(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001420 output : 'config.h',
1421 configuration : conf)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001422
Yu Watanabe348b4432018-05-07 18:17:35 +09001423meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1424
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001425includes = include_directories('src/basic',
1426 'src/shared',
1427 'src/systemd',
1428 'src/journal',
Zbigniew Jędrzejewski-Szmeka38f7fe2018-05-16 12:05:07 +02001429 'src/journal-remote',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02001430 'src/nspawn',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001431 'src/resolve',
1432 'src/timesync',
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05001433 'src/time-wait-sync',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001434 'src/login',
1435 'src/udev',
1436 'src/libudev',
1437 'src/core',
1438 'src/libsystemd/sd-bus',
1439 'src/libsystemd/sd-device',
Yu Watanabea137a1c2018-11-16 17:30:42 +09001440 'src/libsystemd/sd-event',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001441 'src/libsystemd/sd-hwdb',
1442 'src/libsystemd/sd-id128',
1443 'src/libsystemd/sd-netlink',
1444 'src/libsystemd/sd-network',
Yu Watanabeceb26cd2018-12-10 15:45:48 +09001445 'src/libsystemd/sd-resolve',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001446 'src/libsystemd-network',
Zbigniew Jędrzejewski-Szmek2d4ceca2017-12-19 14:19:46 +01001447 '.')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001448
1449add_project_arguments('-include', 'config.h', language : 'c')
1450
Yu Watanabe6ec439f2018-11-28 20:19:41 +09001451generate_gperfs = find_program('tools/generate-gperfs.py')
1452
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001453subdir('po')
1454subdir('catalog')
1455subdir('src/systemd')
1456subdir('src/basic')
1457subdir('src/libsystemd')
1458subdir('src/libsystemd-network')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001459subdir('src/journal')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001460subdir('src/login')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001461
1462libjournal_core = static_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001463 'journal-core',
1464 libjournal_core_sources,
1465 journald_gperf_c,
1466 include_directories : includes,
1467 install : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001468
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04001469libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001470libsystemd = shared_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001471 'systemd',
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001472 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +02001473 version : libsystemd_version,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001474 include_directories : includes,
1475 link_args : ['-shared',
1476 '-Wl,--version-script=' + libsystemd_sym_path],
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001477 link_with : [libbasic,
1478 libbasic_gcrypt],
Zbigniew Jędrzejewski-Szmek5e3cec82017-12-19 19:38:43 +01001479 link_whole : [libsystemd_static,
1480 libjournal_client],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001481 dependencies : [threads,
1482 librt,
1483 libxz,
1484 liblz4],
1485 link_depends : libsystemd_sym,
1486 install : true,
1487 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001488
Davide Cavalca70848ec2018-04-09 02:43:35 -07001489static_libsystemd = get_option('static-libsystemd')
1490static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1491
1492install_libsystemd_static = static_library(
1493 'systemd',
1494 libsystemd_sources,
1495 journal_client_sources,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001496 basic_sources,
1497 basic_gcrypt_sources,
Yu Watanabebe44b572018-10-12 11:59:55 +09001498 disable_mempool_c,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001499 include_directories : includes,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001500 build_by_default : static_libsystemd != 'false',
1501 install : static_libsystemd != 'false',
1502 install_dir : rootlibdir,
1503 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1504 dependencies : [threads,
1505 librt,
1506 libxz,
1507 liblz4,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001508 libcap,
1509 libblkid,
1510 libmount,
1511 libselinux,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001512 libgcrypt],
1513 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1514
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001515############################################################
1516
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001517# binaries that have --help and are intended for use by humans,
1518# usually, but not always, installed in /bin.
1519public_programs = []
1520
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001521subdir('src/libudev')
1522subdir('src/shared')
1523subdir('src/core')
1524subdir('src/udev')
1525subdir('src/network')
1526
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001527subdir('src/analyze')
1528subdir('src/journal-remote')
1529subdir('src/coredump')
1530subdir('src/hostname')
1531subdir('src/import')
1532subdir('src/kernel-install')
1533subdir('src/locale')
1534subdir('src/machine')
Lennart Poettering61d05782018-04-16 21:41:40 +02001535subdir('src/portable')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001536subdir('src/nspawn')
1537subdir('src/resolve')
1538subdir('src/timedate')
1539subdir('src/timesync')
1540subdir('src/vconsole')
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001541subdir('src/boot/efi')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001542
1543subdir('src/test')
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001544subdir('src/fuzz')
Zbigniew Jędrzejewski-Szmek6b97bf22017-11-22 12:42:28 +01001545subdir('rules')
Zbigniew Jędrzejewski-Szmek4ff3f252017-04-13 20:47:20 -04001546subdir('test')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001547
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001548############################################################
1549
1550# only static linking apart from libdl, to make sure that the
1551# module is linked to all libraries that it uses.
1552test_dlopen = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001553 'test-dlopen',
1554 test_dlopen_c,
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001555 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001556 include_directories : includes,
1557 link_with : [libbasic],
Yu Watanabefd1939f2018-09-12 21:47:56 +09001558 dependencies : [libdl],
1559 build_by_default : want_tests != 'false')
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001560
Yu Watanabe08540a92018-07-18 09:25:57 +09001561foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
Waldemar Brodkorbe7e11bb2017-06-24 19:30:26 +02001562 ['systemd', 'ENABLE_NSS_SYSTEMD'],
Yu Watanabe08540a92018-07-18 09:25:57 +09001563 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1564 ['resolve', 'ENABLE_NSS_RESOLVE']]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001565
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001566 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001567 if condition
1568 module = tuple[0]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001569
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001570 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02001571 version_script_arg = join_paths(meson.source_root(), sym)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001572
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001573 nss = shared_library(
1574 'nss_' + module,
1575 'src/nss-@0@/nss-@0@.c'.format(module),
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001576 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001577 version : '2',
1578 include_directories : includes,
Lennart Poetteringb4b36f42017-12-12 20:13:16 +01001579 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1580 link_args : ['-Wl,-z,nodelete',
1581 '-shared',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001582 '-Wl,--version-script=' + version_script_arg,
1583 '-Wl,--undefined'],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001584 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001585 libbasic],
1586 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek5486a312017-05-12 08:31:46 -04001587 librt],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001588 link_depends : sym,
1589 install : true,
1590 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001591
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001592 # We cannot use shared_module because it does not support version suffix.
1593 # Unfortunately shared_library insists on creating the symlink…
1594 meson.add_install_script('sh', '-c',
1595 'rm $DESTDIR@0@/libnss_@1@.so'
1596 .format(rootlibdir, module))
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001597
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001598 if want_tests != 'false'
1599 test('dlopen-nss_' + module,
1600 test_dlopen,
1601 # path to dlopen must include a slash
1602 args : nss.full_path())
1603 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001604 endif
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001605endforeach
1606
1607############################################################
1608
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001609executable('systemd',
1610 systemd_sources,
1611 include_directories : includes,
1612 link_with : [libcore,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001613 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001614 dependencies : [threads,
1615 librt,
1616 libseccomp,
1617 libselinux,
Zbigniew Jędrzejewski-Szmekf4ee10a2017-04-09 14:08:53 -04001618 libmount,
1619 libblkid],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001620 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001621 install : true,
1622 install_dir : rootlibexecdir)
1623
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001624meson.add_install_script(meson_make_symlink,
1625 join_paths(rootlibexecdir, 'systemd'),
1626 join_paths(rootsbindir, 'init'))
1627
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001628exe = executable('systemd-analyze',
1629 systemd_analyze_sources,
1630 include_directories : includes,
1631 link_with : [libcore,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001632 libshared],
1633 dependencies : [threads,
1634 librt,
1635 libseccomp,
1636 libselinux,
1637 libmount,
1638 libblkid],
1639 install_rpath : rootlibexecdir,
1640 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001641public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001642
1643executable('systemd-journald',
1644 systemd_journald_sources,
1645 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001646 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001647 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001648 dependencies : [threads,
1649 libxz,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001650 liblz4,
1651 libselinux],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001652 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001653 install : true,
1654 install_dir : rootlibexecdir)
1655
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001656exe = executable('systemd-cat',
1657 systemd_cat_sources,
1658 include_directories : includes,
1659 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001660 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001661 dependencies : [threads],
1662 install_rpath : rootlibexecdir,
1663 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001664public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001665
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001666exe = executable('journalctl',
1667 journalctl_sources,
1668 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001669 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001670 dependencies : [threads,
1671 libqrencode,
1672 libxz,
Zbigniew Jędrzejewski-Szmek6becf482018-01-12 07:55:45 +01001673 liblz4,
1674 libpcre2],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001675 install_rpath : rootlibexecdir,
1676 install : true,
1677 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001678public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001679
1680executable('systemd-getty-generator',
1681 'src/getty-generator/getty-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001682 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001683 link_with : [libshared],
1684 install_rpath : rootlibexecdir,
1685 install : true,
1686 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001687
1688executable('systemd-debug-generator',
1689 'src/debug-generator/debug-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001690 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001691 link_with : [libshared],
1692 install_rpath : rootlibexecdir,
1693 install : true,
1694 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001695
Lennart Poettering35a1ff42018-11-15 22:09:29 +01001696executable('systemd-run-generator',
1697 'src/run-generator/run-generator.c',
1698 include_directories : includes,
1699 link_with : [libshared],
1700 install_rpath : rootlibexecdir,
1701 install : true,
1702 install_dir : systemgeneratordir)
1703
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001704executable('systemd-fstab-generator',
1705 'src/fstab-generator/fstab-generator.c',
1706 'src/core/mount-setup.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001707 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001708 link_with : [libshared],
1709 install_rpath : rootlibexecdir,
1710 install : true,
1711 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001712
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001713if conf.get('ENABLE_ENVIRONMENT_D') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001714 executable('30-systemd-environment-d-generator',
1715 'src/environment-d-generator/environment-d-generator.c',
1716 include_directories : includes,
1717 link_with : [libshared],
1718 install_rpath : rootlibexecdir,
1719 install : true,
1720 install_dir : userenvgeneratordir)
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04001721
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001722 meson.add_install_script(meson_make_symlink,
1723 join_paths(sysconfdir, 'environment'),
1724 join_paths(environmentdir, '99-environment.conf'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001725endif
1726
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001727if conf.get('ENABLE_HIBERNATE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001728 executable('systemd-hibernate-resume-generator',
1729 'src/hibernate-resume/hibernate-resume-generator.c',
1730 include_directories : includes,
1731 link_with : [libshared],
1732 install_rpath : rootlibexecdir,
1733 install : true,
1734 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001735
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001736 executable('systemd-hibernate-resume',
1737 'src/hibernate-resume/hibernate-resume.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001738 include_directories : includes,
1739 link_with : [libshared],
1740 install_rpath : rootlibexecdir,
1741 install : true,
1742 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001743endif
1744
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001745if conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001746 executable('systemd-gpt-auto-generator',
1747 'src/gpt-auto-generator/gpt-auto-generator.c',
Zbigniew Jędrzejewski-Szmekd284b822018-11-19 11:12:28 +01001748 'src/shared/blkid-util.h',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001749 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001750 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001751 dependencies : libblkid,
1752 install_rpath : rootlibexecdir,
1753 install : true,
1754 install_dir : systemgeneratordir)
1755
1756 exe = executable('systemd-dissect',
1757 'src/dissect/dissect.c',
1758 include_directories : includes,
1759 link_with : [libshared],
1760 install_rpath : rootlibexecdir,
1761 install : true,
1762 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001763 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001764endif
1765
Zbigniew Jędrzejewski-Szmek1ec57f32017-10-03 13:12:29 +02001766if conf.get('ENABLE_RESOLVE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001767 executable('systemd-resolved',
1768 systemd_resolved_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001769 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001770 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001771 libbasic_gcrypt,
1772 libsystemd_resolve_core],
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001773 dependencies : systemd_resolved_dependencies,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001774 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001775 install : true,
1776 install_dir : rootlibexecdir)
1777
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001778 exe = executable('resolvectl',
1779 resolvectl_sources,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001780 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001781 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001782 libbasic_gcrypt,
1783 libsystemd_resolve_core],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001784 dependencies : [threads,
Michael Biebl76c87412017-04-21 23:45:54 +02001785 libgpg_error,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001786 libm,
1787 libidn],
1788 install_rpath : rootlibexecdir,
1789 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001790 public_programs += exe
Lennart Poettering088c1362018-02-27 17:48:54 +01001791
1792 meson.add_install_script(meson_make_symlink,
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001793 join_paths(bindir, 'resolvectl'),
Lennart Poettering088c1362018-02-27 17:48:54 +01001794 join_paths(rootsbindir, 'resolvconf'))
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001795
1796 meson.add_install_script(meson_make_symlink,
1797 join_paths(bindir, 'resolvectl'),
1798 join_paths(bindir, 'systemd-resolve'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001799endif
1800
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001801if conf.get('ENABLE_LOGIND') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001802 executable('systemd-logind',
1803 systemd_logind_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001804 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001805 link_with : [liblogind_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001806 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001807 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001808 libacl],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001809 install_rpath : rootlibexecdir,
1810 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001811 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001812
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001813 exe = executable('loginctl',
1814 loginctl_sources,
1815 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001816 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001817 dependencies : [threads,
1818 liblz4,
1819 libxz],
1820 install_rpath : rootlibexecdir,
1821 install : true,
1822 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001823 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001824
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001825 exe = executable('systemd-inhibit',
1826 'src/login/inhibit.c',
1827 include_directories : includes,
1828 link_with : [libshared],
1829 install_rpath : rootlibexecdir,
1830 install : true,
1831 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001832 public_programs += exe
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001833
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001834 if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02001835 version_script_arg = join_paths(meson.source_root(), pam_systemd_sym)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001836 pam_systemd = shared_library(
1837 'pam_systemd',
1838 pam_systemd_c,
1839 name_prefix : '',
1840 include_directories : includes,
1841 link_args : ['-shared',
1842 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001843 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001844 libshared_static],
1845 dependencies : [threads,
1846 libpam,
1847 libpam_misc],
1848 link_depends : pam_systemd_sym,
1849 install : true,
1850 install_dir : pamlibdir)
1851
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001852 if want_tests != 'false'
1853 test('dlopen-pam_systemd',
1854 test_dlopen,
1855 # path to dlopen must include a slash
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02001856 args : pam_systemd.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001857 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001858 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001859
Lennart Poettering07ee5ad2018-08-08 14:50:57 +02001860 executable('systemd-user-runtime-dir',
1861 user_runtime_dir_sources,
1862 include_directories : includes,
1863 link_with : [libshared],
1864 install_rpath : rootlibexecdir,
1865 install : true,
1866 install_dir : rootlibexecdir)
1867endif
Zbigniew Jędrzejewski-Szmeka9f0f5e2017-12-09 19:30:17 +01001868
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001869if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001870 executable('systemd-user-sessions',
1871 'src/user-sessions/user-sessions.c',
1872 include_directories : includes,
1873 link_with : [libshared],
1874 install_rpath : rootlibexecdir,
1875 install : true,
1876 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001877endif
1878
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001879if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001880 exe = executable('bootctl',
1881 'src/boot/bootctl.c',
1882 include_directories : includes,
1883 link_with : [libshared],
1884 dependencies : [libblkid],
1885 install_rpath : rootlibexecdir,
1886 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001887 public_programs += exe
Lennart Poettering36695e82018-06-25 17:24:09 +02001888
1889 executable('systemd-bless-boot',
1890 'src/boot/bless-boot.c',
1891 include_directories : includes,
1892 link_with : [libshared],
1893 dependencies : [libblkid],
1894 install_rpath : rootlibexecdir,
1895 install : true,
1896 install_dir : rootlibexecdir)
Lennart Poettering8d16ed02018-06-22 17:00:47 +02001897
1898 executable('systemd-bless-boot-generator',
1899 'src/boot/bless-boot-generator.c',
1900 include_directories : includes,
1901 link_with : [libshared],
1902 install_rpath : rootlibexecdir,
1903 install : true,
1904 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001905endif
1906
Lennart Poetteringf876f532018-06-25 16:07:33 +02001907executable('systemd-boot-check-no-failures',
1908 'src/boot/boot-check-no-failures.c',
1909 include_directories : includes,
1910 link_with : [libshared],
1911 dependencies : [libblkid],
1912 install_rpath : rootlibexecdir,
1913 install : true,
1914 install_dir : rootlibexecdir)
1915
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001916exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1917 include_directories : includes,
1918 link_with : [libshared],
1919 dependencies : [threads],
1920 install_rpath : rootlibexecdir,
1921 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001922public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001923
Felipe Satelerf3794362018-05-22 15:08:57 -04001924
1925if get_option('link-systemctl-shared')
1926 systemctl_link_with = [libshared]
1927else
1928 systemctl_link_with = [libsystemd_static,
1929 libshared_static,
1930 libjournal_client,
1931 libbasic_gcrypt]
1932endif
1933
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001934exe = executable('systemctl', 'src/systemctl/systemctl.c',
1935 include_directories : includes,
Felipe Satelerf3794362018-05-22 15:08:57 -04001936 link_with : systemctl_link_with,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001937 dependencies : [threads,
1938 libcap,
1939 libselinux,
1940 libxz,
1941 liblz4],
1942 install_rpath : rootlibexecdir,
1943 install : true,
1944 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001945public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001946
Lennart Poettering61d05782018-04-16 21:41:40 +02001947if conf.get('ENABLE_PORTABLED') == 1
1948 executable('systemd-portabled',
1949 systemd_portabled_sources,
1950 include_directories : includes,
1951 link_with : [libshared],
1952 dependencies : [threads],
1953 install_rpath : rootlibexecdir,
1954 install : true,
1955 install_dir : rootlibexecdir)
1956
1957 exe = executable('portablectl', 'src/portable/portablectl.c',
1958 include_directories : includes,
1959 link_with : [libshared],
1960 dependencies : [threads],
1961 install_rpath : rootlibexecdir,
1962 install : true,
Lennart Poettering80f39b82018-10-08 17:28:44 +02001963 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001964 public_programs += exe
Lennart Poettering61d05782018-04-16 21:41:40 +02001965endif
1966
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001967foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1968 meson.add_install_script(meson_make_symlink,
1969 join_paths(rootbindir, 'systemctl'),
1970 join_paths(rootsbindir, alias))
1971endforeach
1972
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001973if conf.get('ENABLE_BACKLIGHT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001974 executable('systemd-backlight',
1975 'src/backlight/backlight.c',
1976 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001977 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001978 install_rpath : rootlibexecdir,
1979 install : true,
1980 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001981endif
1982
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001983if conf.get('ENABLE_RFKILL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001984 executable('systemd-rfkill',
1985 'src/rfkill/rfkill.c',
1986 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001987 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001988 install_rpath : rootlibexecdir,
1989 install : true,
1990 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001991endif
1992
1993executable('systemd-system-update-generator',
1994 'src/system-update-generator/system-update-generator.c',
1995 include_directories : includes,
1996 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001997 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001998 install : true,
1999 install_dir : systemgeneratordir)
2000
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002001if conf.get('HAVE_LIBCRYPTSETUP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002002 executable('systemd-cryptsetup',
2003 'src/cryptsetup/cryptsetup.c',
2004 include_directories : includes,
2005 link_with : [libshared],
2006 dependencies : [libcryptsetup],
2007 install_rpath : rootlibexecdir,
2008 install : true,
2009 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002010
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002011 executable('systemd-cryptsetup-generator',
2012 'src/cryptsetup/cryptsetup-generator.c',
2013 include_directories : includes,
2014 link_with : [libshared],
2015 dependencies : [libcryptsetup],
2016 install_rpath : rootlibexecdir,
2017 install : true,
2018 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002019
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002020 executable('systemd-veritysetup',
2021 'src/veritysetup/veritysetup.c',
2022 include_directories : includes,
2023 link_with : [libshared],
2024 dependencies : [libcryptsetup],
2025 install_rpath : rootlibexecdir,
2026 install : true,
2027 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002028
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002029 executable('systemd-veritysetup-generator',
2030 'src/veritysetup/veritysetup-generator.c',
2031 include_directories : includes,
2032 link_with : [libshared],
2033 dependencies : [libcryptsetup],
2034 install_rpath : rootlibexecdir,
2035 install : true,
2036 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002037endif
2038
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002039if conf.get('HAVE_SYSV_COMPAT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002040 executable('systemd-sysv-generator',
2041 'src/sysv-generator/sysv-generator.c',
2042 include_directories : includes,
2043 link_with : [libshared],
2044 install_rpath : rootlibexecdir,
2045 install : true,
2046 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002047
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002048 executable('systemd-rc-local-generator',
2049 'src/rc-local-generator/rc-local-generator.c',
2050 include_directories : includes,
2051 link_with : [libshared],
2052 install_rpath : rootlibexecdir,
2053 install : true,
2054 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002055endif
2056
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002057if conf.get('ENABLE_HOSTNAMED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002058 executable('systemd-hostnamed',
2059 'src/hostname/hostnamed.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002060 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002061 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002062 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002063 install : true,
2064 install_dir : rootlibexecdir)
2065
2066 exe = executable('hostnamectl',
2067 'src/hostname/hostnamectl.c',
2068 include_directories : includes,
2069 link_with : [libshared],
2070 install_rpath : rootlibexecdir,
2071 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002072 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002073endif
2074
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002075if conf.get('ENABLE_LOCALED') == 1
2076 if conf.get('HAVE_XKBCOMMON') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002077 # logind will load libxkbcommon.so dynamically on its own
2078 deps = [libdl]
2079 else
2080 deps = []
2081 endif
Zbigniew Jędrzejewski-Szmek1eeb43f2017-04-13 19:37:14 -04002082
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002083 executable('systemd-localed',
2084 systemd_localed_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002085 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002086 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002087 dependencies : deps,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002088 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002089 install : true,
2090 install_dir : rootlibexecdir)
2091
2092 exe = executable('localectl',
2093 localectl_sources,
2094 include_directories : includes,
2095 link_with : [libshared],
2096 install_rpath : rootlibexecdir,
2097 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002098 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002099endif
2100
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002101if conf.get('ENABLE_TIMEDATED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002102 executable('systemd-timedated',
2103 'src/timedate/timedated.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002104 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002105 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002106 install_rpath : rootlibexecdir,
2107 install : true,
2108 install_dir : rootlibexecdir)
Yu Watanabe6129ec82018-05-03 18:07:43 +09002109endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002110
Yu Watanabe6129ec82018-05-03 18:07:43 +09002111if conf.get('ENABLE_TIMEDATECTL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002112 exe = executable('timedatectl',
2113 'src/timedate/timedatectl.c',
2114 include_directories : includes,
2115 install_rpath : rootlibexecdir,
2116 link_with : [libshared],
Yu Watanabe6129ec82018-05-03 18:07:43 +09002117 dependencies : [libm],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002118 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002119 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002120endif
2121
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002122if conf.get('ENABLE_TIMESYNCD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002123 executable('systemd-timesyncd',
2124 systemd_timesyncd_sources,
2125 include_directories : includes,
2126 link_with : [libshared],
2127 dependencies : [threads,
2128 libm],
2129 install_rpath : rootlibexecdir,
2130 install : true,
2131 install_dir : rootlibexecdir)
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05002132
2133 executable('systemd-time-wait-sync',
2134 'src/time-wait-sync/time-wait-sync.c',
2135 include_directories : includes,
2136 link_with : [libshared],
2137 install_rpath : rootlibexecdir,
2138 install : true,
2139 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002140endif
2141
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002142if conf.get('ENABLE_MACHINED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002143 executable('systemd-machined',
2144 systemd_machined_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002145 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002146 link_with : [libmachine_core,
2147 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002148 install_rpath : rootlibexecdir,
2149 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002150 install_dir : rootlibexecdir)
2151
2152 exe = executable('machinectl',
2153 'src/machine/machinectl.c',
2154 include_directories : includes,
2155 link_with : [libshared],
2156 dependencies : [threads,
2157 libxz,
2158 liblz4],
2159 install_rpath : rootlibexecdir,
2160 install : true,
2161 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002162 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002163endif
2164
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002165if conf.get('ENABLE_IMPORTD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002166 executable('systemd-importd',
2167 systemd_importd_sources,
2168 include_directories : includes,
2169 link_with : [libshared],
2170 dependencies : [threads],
2171 install_rpath : rootlibexecdir,
2172 install : true,
2173 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002174
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002175 systemd_pull = executable('systemd-pull',
2176 systemd_pull_sources,
2177 include_directories : includes,
2178 link_with : [libshared],
2179 dependencies : [libcurl,
2180 libz,
2181 libbzip2,
2182 libxz,
2183 libgcrypt],
2184 install_rpath : rootlibexecdir,
2185 install : true,
2186 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002187
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002188 systemd_import = executable('systemd-import',
2189 systemd_import_sources,
2190 include_directories : includes,
2191 link_with : [libshared],
2192 dependencies : [libcurl,
2193 libz,
2194 libbzip2,
2195 libxz],
2196 install_rpath : rootlibexecdir,
2197 install : true,
2198 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002199
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002200 systemd_import_fs = executable('systemd-import-fs',
2201 systemd_import_fs_sources,
2202 include_directories : includes,
2203 link_with : [libshared],
2204 install_rpath : rootlibexecdir,
2205 install : true,
2206 install_dir : rootlibexecdir)
2207
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002208 systemd_export = executable('systemd-export',
2209 systemd_export_sources,
2210 include_directories : includes,
2211 link_with : [libshared],
2212 dependencies : [libcurl,
2213 libz,
2214 libbzip2,
2215 libxz],
2216 install_rpath : rootlibexecdir,
2217 install : true,
2218 install_dir : rootlibexecdir)
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002219
2220 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002221endif
2222
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002223if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002224 exe = executable('systemd-journal-upload',
2225 systemd_journal_upload_sources,
2226 include_directories : includes,
2227 link_with : [libshared],
2228 dependencies : [threads,
2229 libcurl,
2230 libgnutls,
2231 libxz,
2232 liblz4],
2233 install_rpath : rootlibexecdir,
2234 install : true,
2235 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002236 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002237endif
2238
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002239if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002240 s_j_remote = executable('systemd-journal-remote',
2241 systemd_journal_remote_sources,
2242 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc064d8d2018-05-16 10:21:58 +02002243 link_with : [libshared,
2244 libsystemd_journal_remote],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002245 dependencies : [threads,
2246 libmicrohttpd,
2247 libgnutls,
2248 libxz,
2249 liblz4],
2250 install_rpath : rootlibexecdir,
2251 install : true,
2252 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002253
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002254 s_j_gatewayd = executable('systemd-journal-gatewayd',
2255 systemd_journal_gatewayd_sources,
2256 include_directories : includes,
2257 link_with : [libshared],
2258 dependencies : [threads,
2259 libmicrohttpd,
2260 libgnutls,
2261 libxz,
2262 liblz4],
2263 install_rpath : rootlibexecdir,
2264 install : true,
2265 install_dir : rootlibexecdir)
2266 public_programs += [s_j_remote, s_j_gatewayd]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002267endif
2268
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002269if conf.get('ENABLE_COREDUMP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002270 executable('systemd-coredump',
2271 systemd_coredump_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002272 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002273 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002274 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002275 libacl,
2276 libdw,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002277 libxz,
2278 liblz4],
2279 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002280 install : true,
2281 install_dir : rootlibexecdir)
2282
2283 exe = executable('coredumpctl',
2284 coredumpctl_sources,
2285 include_directories : includes,
2286 link_with : [libshared],
2287 dependencies : [threads,
2288 libxz,
2289 liblz4],
2290 install_rpath : rootlibexecdir,
2291 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002292 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002293endif
2294
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002295if conf.get('ENABLE_BINFMT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002296 exe = executable('systemd-binfmt',
2297 'src/binfmt/binfmt.c',
2298 include_directories : includes,
2299 link_with : [libshared],
2300 install_rpath : rootlibexecdir,
2301 install : true,
2302 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002303 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002304
2305 meson.add_install_script('sh', '-c',
2306 mkdir_p.format(binfmtdir))
2307 meson.add_install_script('sh', '-c',
2308 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2309endif
2310
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002311if conf.get('ENABLE_VCONSOLE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002312 executable('systemd-vconsole-setup',
2313 'src/vconsole/vconsole-setup.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002314 include_directories : includes,
2315 link_with : [libshared],
2316 install_rpath : rootlibexecdir,
2317 install : true,
2318 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002319endif
2320
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002321if conf.get('ENABLE_RANDOMSEED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002322 executable('systemd-random-seed',
2323 'src/random-seed/random-seed.c',
2324 include_directories : includes,
2325 link_with : [libshared],
2326 install_rpath : rootlibexecdir,
2327 install : true,
2328 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002329endif
2330
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002331if conf.get('ENABLE_FIRSTBOOT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002332 executable('systemd-firstboot',
2333 'src/firstboot/firstboot.c',
2334 include_directories : includes,
2335 link_with : [libshared],
2336 dependencies : [libcrypt],
2337 install_rpath : rootlibexecdir,
2338 install : true,
2339 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002340endif
2341
2342executable('systemd-remount-fs',
2343 'src/remount-fs/remount-fs.c',
2344 'src/core/mount-setup.c',
2345 'src/core/mount-setup.h',
2346 include_directories : includes,
2347 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002348 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002349 install : true,
2350 install_dir : rootlibexecdir)
2351
2352executable('systemd-machine-id-setup',
2353 'src/machine-id-setup/machine-id-setup-main.c',
2354 'src/core/machine-id-setup.c',
2355 'src/core/machine-id-setup.h',
2356 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002357 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002358 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002359 install : true,
2360 install_dir : rootbindir)
2361
2362executable('systemd-fsck',
2363 'src/fsck/fsck.c',
2364 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002365 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002366 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002367 install : true,
2368 install_dir : rootlibexecdir)
2369
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002370executable('systemd-growfs',
2371 'src/partition/growfs.c',
2372 include_directories : includes,
2373 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekc34b75a2017-11-21 18:56:52 +01002374 dependencies : [libcryptsetup],
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002375 install_rpath : rootlibexecdir,
2376 install : true,
2377 install_dir : rootlibexecdir)
2378
Zbigniew Jędrzejewski-Szmekb7f28ac2017-11-26 22:51:29 +01002379executable('systemd-makefs',
2380 'src/partition/makefs.c',
2381 include_directories : includes,
2382 link_with : [libshared],
2383 install_rpath : rootlibexecdir,
2384 install : true,
2385 install_dir : rootlibexecdir)
2386
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002387executable('systemd-sleep',
2388 'src/sleep/sleep.c',
2389 include_directories : includes,
2390 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002391 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002392 install : true,
2393 install_dir : rootlibexecdir)
2394
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002395exe = executable('systemd-sysctl',
2396 'src/sysctl/sysctl.c',
2397 include_directories : includes,
2398 link_with : [libshared],
2399 install_rpath : rootlibexecdir,
2400 install : true,
2401 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002402public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002403
2404executable('systemd-ac-power',
2405 'src/ac-power/ac-power.c',
2406 include_directories : includes,
2407 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002408 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002409 install : true,
2410 install_dir : rootlibexecdir)
2411
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002412exe = executable('systemd-detect-virt',
2413 'src/detect-virt/detect-virt.c',
2414 include_directories : includes,
2415 link_with : [libshared],
2416 install_rpath : rootlibexecdir,
2417 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002418public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002419
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002420exe = executable('systemd-delta',
2421 'src/delta/delta.c',
2422 include_directories : includes,
2423 link_with : [libshared],
2424 install_rpath : rootlibexecdir,
2425 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002426public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002427
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002428exe = executable('systemd-escape',
2429 'src/escape/escape.c',
2430 include_directories : includes,
2431 link_with : [libshared],
2432 install_rpath : rootlibexecdir,
2433 install : true,
2434 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002435public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002436
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002437exe = executable('systemd-notify',
2438 'src/notify/notify.c',
2439 include_directories : includes,
2440 link_with : [libshared],
2441 install_rpath : rootlibexecdir,
2442 install : true,
2443 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002444public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002445
2446executable('systemd-volatile-root',
2447 'src/volatile-root/volatile-root.c',
2448 include_directories : includes,
2449 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002450 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002451 install : true,
2452 install_dir : rootlibexecdir)
2453
2454executable('systemd-cgroups-agent',
2455 'src/cgroups-agent/cgroups-agent.c',
2456 include_directories : includes,
2457 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002458 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002459 install : true,
2460 install_dir : rootlibexecdir)
2461
Zbigniew Jędrzejewski-Szmek0d1d5122018-08-21 16:08:48 +02002462exe = executable('systemd-id128',
2463 'src/id128/id128.c',
2464 include_directories : includes,
2465 link_with : [libshared],
2466 install_rpath : rootlibexecdir,
2467 install : true)
2468public_programs += exe
2469
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002470exe = executable('systemd-path',
2471 'src/path/path.c',
2472 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002473 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002474 install_rpath : rootlibexecdir,
2475 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002476public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002477
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002478exe = executable('systemd-ask-password',
2479 'src/ask-password/ask-password.c',
2480 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002481 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002482 install_rpath : rootlibexecdir,
2483 install : true,
2484 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002485public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002486
2487executable('systemd-reply-password',
2488 'src/reply-password/reply-password.c',
2489 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002490 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002491 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002492 install : true,
2493 install_dir : rootlibexecdir)
2494
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002495exe = executable('systemd-tty-ask-password-agent',
2496 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2497 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002498 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002499 install_rpath : rootlibexecdir,
2500 install : true,
2501 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002502public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002503
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002504exe = executable('systemd-cgls',
2505 'src/cgls/cgls.c',
2506 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002507 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002508 install_rpath : rootlibexecdir,
2509 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002510public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002511
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002512exe = executable('systemd-cgtop',
2513 'src/cgtop/cgtop.c',
2514 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002515 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002516 install_rpath : rootlibexecdir,
2517 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002518public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002519
2520executable('systemd-initctl',
2521 'src/initctl/initctl.c',
2522 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002523 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002524 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002525 install : true,
2526 install_dir : rootlibexecdir)
2527
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002528exe = executable('systemd-mount',
2529 'src/mount/mount-tool.c',
2530 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002531 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002532 install_rpath : rootlibexecdir,
2533 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002534public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002535
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002536meson.add_install_script(meson_make_symlink,
Michael Bieble17e5ba2017-04-13 10:30:56 -04002537 'systemd-mount', join_paths(bindir, 'systemd-umount'))
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002538
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002539exe = executable('systemd-run',
2540 'src/run/run.c',
2541 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002542 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002543 install_rpath : rootlibexecdir,
2544 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002545public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002546
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002547exe = executable('systemd-stdio-bridge',
2548 'src/stdio-bridge/stdio-bridge.c',
2549 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002550 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002551 install_rpath : rootlibexecdir,
2552 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002553public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002554
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002555exe = executable('busctl',
2556 'src/busctl/busctl.c',
2557 'src/busctl/busctl-introspect.c',
2558 'src/busctl/busctl-introspect.h',
2559 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002560 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002561 install_rpath : rootlibexecdir,
2562 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002563public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002564
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002565if conf.get('ENABLE_SYSUSERS') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002566 exe = executable('systemd-sysusers',
2567 'src/sysusers/sysusers.c',
2568 include_directories : includes,
2569 link_with : [libshared],
2570 install_rpath : rootlibexecdir,
2571 install : true,
2572 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002573 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002574endif
2575
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002576if conf.get('ENABLE_TMPFILES') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002577 exe = executable('systemd-tmpfiles',
2578 'src/tmpfiles/tmpfiles.c',
2579 include_directories : includes,
2580 link_with : [libshared],
2581 dependencies : [libacl],
2582 install_rpath : rootlibexecdir,
2583 install : true,
2584 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002585 public_programs += exe
Zbigniew Jędrzejewski-Szmekd9daae52017-11-22 14:13:32 +01002586
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002587 if want_tests != 'false'
2588 test('test-systemd-tmpfiles',
2589 test_systemd_tmpfiles_py,
2590 # https://github.com/mesonbuild/meson/issues/2681
2591 args : exe.full_path())
2592 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002593endif
2594
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002595if conf.get('ENABLE_HWDB') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002596 exe = executable('systemd-hwdb',
2597 'src/hwdb/hwdb.c',
2598 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2599 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002600 link_with : [libudev_static],
Michael Biebl0da6f392017-04-21 18:32:14 +02002601 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002602 install : true,
2603 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002604 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002605endif
2606
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002607if conf.get('ENABLE_QUOTACHECK') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002608 executable('systemd-quotacheck',
2609 'src/quotacheck/quotacheck.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002610 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002611 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002612 install_rpath : rootlibexecdir,
2613 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002614 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002615endif
2616
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002617exe = executable('systemd-socket-proxyd',
2618 'src/socket-proxy/socket-proxyd.c',
2619 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002620 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002621 dependencies : [threads],
2622 install_rpath : rootlibexecdir,
2623 install : true,
2624 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002625public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002626
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002627exe = executable('systemd-udevd',
2628 systemd_udevd_sources,
2629 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002630 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002631 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002632 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002633 libudev_static],
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002634 dependencies : [threads,
2635 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002636 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002637 libacl,
2638 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002639 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002640 install : true,
2641 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002642public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002643
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002644exe = executable('udevadm',
2645 udevadm_sources,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002646 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002647 include_directories : includes,
2648 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002649 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002650 libudev_static],
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002651 dependencies : [threads,
2652 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002653 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002654 libacl,
2655 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002656 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002657 install : true,
2658 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002659public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002660
2661executable('systemd-shutdown',
2662 systemd_shutdown_sources,
2663 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002664 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek95b862b2018-03-14 11:32:30 +01002665 dependencies : [libmount],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002666 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002667 install : true,
2668 install_dir : rootlibexecdir)
2669
2670executable('systemd-update-done',
2671 'src/update-done/update-done.c',
2672 include_directories : includes,
2673 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002674 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002675 install : true,
2676 install_dir : rootlibexecdir)
2677
2678executable('systemd-update-utmp',
2679 'src/update-utmp/update-utmp.c',
2680 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002681 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002682 dependencies : [libaudit],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002683 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002684 install : true,
2685 install_dir : rootlibexecdir)
2686
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002687if conf.get('HAVE_KMOD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002688 executable('systemd-modules-load',
2689 'src/modules-load/modules-load.c',
2690 include_directories : includes,
2691 link_with : [libshared],
2692 dependencies : [libkmod],
2693 install_rpath : rootlibexecdir,
2694 install : true,
2695 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002696
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002697 meson.add_install_script('sh', '-c',
2698 mkdir_p.format(modulesloaddir))
2699 meson.add_install_script('sh', '-c',
2700 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002701endif
2702
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002703exe = executable('systemd-nspawn',
2704 systemd_nspawn_sources,
2705 'src/core/mount-setup.c', # FIXME: use a variable?
2706 'src/core/mount-setup.h',
2707 'src/core/loopback-setup.c',
2708 'src/core/loopback-setup.h',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02002709 include_directories : includes,
2710 link_with : [libnspawn_core,
2711 libshared],
2712 dependencies : [libblkid],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002713 install_rpath : rootlibexecdir,
2714 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002715public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002716
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002717if conf.get('ENABLE_NETWORKD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002718 executable('systemd-networkd',
2719 systemd_networkd_sources,
2720 include_directories : includes,
2721 link_with : [libnetworkd_core,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002722 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002723 libudev_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002724 libshared],
Zbigniew Jędrzejewski-Szmek4b57a272017-06-21 06:05:15 -04002725 dependencies : [threads],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002726 install_rpath : rootlibexecdir,
2727 install : true,
2728 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002729
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002730 executable('systemd-networkd-wait-online',
2731 systemd_networkd_wait_online_sources,
2732 include_directories : includes,
2733 link_with : [libnetworkd_core,
2734 libshared],
2735 install_rpath : rootlibexecdir,
2736 install : true,
2737 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002738
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002739 exe = executable('networkctl',
2740 networkctl_sources,
2741 include_directories : includes,
2742 link_with : [libsystemd_network,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002743 libshared],
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002744 install_rpath : rootlibexecdir,
2745 install : true,
2746 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002747 public_programs += exe
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002748endif
Zbigniew Jędrzejewski-Szmeke821f6a2017-12-07 10:44:43 +01002749
2750executable('systemd-sulogin-shell',
2751 ['src/sulogin-shell/sulogin-shell.c'],
2752 include_directories : includes,
2753 link_with : [libshared],
2754 install_rpath : rootlibexecdir,
2755 install : true,
2756 install_dir : rootlibexecdir)
2757
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002758############################################################
2759
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002760custom_target(
2761 'systemd-runtest.env',
2762 output : 'systemd-runtest.env',
2763 command : ['sh', '-c', '{ ' +
2764 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(meson.current_source_dir(), 'test')) +
Filipe Brandenburger49cdae62018-09-12 00:23:40 -07002765 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002766 '} >@OUTPUT@'],
2767 build_by_default : true)
2768
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002769foreach tuple : tests
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002770 sources = tuple[0]
2771 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2772 dependencies = tuple[2]
2773 condition = tuple.length() >= 4 ? tuple[3] : ''
2774 type = tuple.length() >= 5 ? tuple[4] : ''
2775 defs = tuple.length() >= 6 ? tuple[5] : []
2776 incs = tuple.length() >= 7 ? tuple[6] : includes
2777 timeout = 30
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002778
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002779 name = sources[0].split('/')[-1].split('.')[0]
2780 if type.startswith('timeout=')
2781 timeout = type.split('=')[1].to_int()
2782 type = ''
2783 endif
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002784
2785 if condition == '' or conf.get(condition) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002786 exe = executable(
2787 name,
2788 sources,
2789 include_directories : incs,
2790 link_with : link_with,
2791 dependencies : dependencies,
2792 c_args : defs,
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002793 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002794 install_rpath : rootlibexecdir,
Michael Biebl7cdd9782017-06-23 03:23:30 +02002795 install : install_tests,
2796 install_dir : join_paths(testsdir, type))
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04002797
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002798 if type == 'manual'
2799 message('@0@ is a manual test'.format(name))
2800 elif type == 'unsafe' and want_tests != 'unsafe'
2801 message('@0@ is an unsafe test'.format(name))
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002802 elif want_tests != 'false'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002803 test(name, exe,
2804 env : test_env,
2805 timeout : timeout)
2806 endif
2807 else
2808 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2809 endif
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002810endforeach
2811
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002812exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002813 'test-libsystemd-sym',
2814 test_libsystemd_sym_c,
2815 include_directories : includes,
2816 link_with : [libsystemd],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002817 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002818 install : install_tests,
2819 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002820if want_tests != 'false'
2821 test('test-libsystemd-sym', exe)
2822endif
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04002823
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002824exe = executable(
2825 'test-libsystemd-static-sym',
2826 test_libsystemd_sym_c,
2827 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002828 link_with : [install_libsystemd_static],
2829 dependencies : [threads], # threads is already included in dependencies on the library,
2830 # but does not seem to get propagated. Add here as a work-around.
Yu Watanabefd1939f2018-09-12 21:47:56 +09002831 build_by_default : want_tests != 'false' and static_libsystemd_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002832 install : install_tests and static_libsystemd_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002833 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002834if want_tests != 'false' and static_libsystemd_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002835 test('test-libsystemd-static-sym', exe)
2836endif
2837
2838exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002839 'test-libudev-sym',
2840 test_libudev_sym_c,
2841 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002842 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002843 link_with : [libudev],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002844 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002845 install : install_tests,
2846 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002847if want_tests != 'false'
2848 test('test-libudev-sym', exe)
2849endif
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002850
2851exe = executable(
2852 'test-libudev-static-sym',
2853 test_libudev_sym_c,
2854 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002855 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002856 link_with : [install_libudev_static],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002857 build_by_default : want_tests != 'false' and static_libudev_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002858 install : install_tests and static_libudev_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002859 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002860if want_tests != 'false' and static_libudev_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002861 test('test-libudev-static-sym', exe)
2862endif
Zbigniew Jędrzejewski-Szmeke0bec522017-04-10 15:20:42 -04002863
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002864############################################################
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002865
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002866fuzzer_exes = []
2867
Michael Olbrich59967402018-11-11 11:27:35 +01002868if get_option('tests') != 'false'
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002869foreach tuple : fuzzers
2870 sources = tuple[0]
2871 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2872 dependencies = tuple[2]
2873 defs = tuple.length() >= 4 ? tuple[3] : []
2874 incs = tuple.length() >= 5 ? tuple[4] : includes
2875
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -05002876 if fuzzer_build
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002877 dependencies += fuzzing_engine
2878 else
2879 sources += 'src/fuzz/fuzz-main.c'
2880 endif
2881
2882 name = sources[0].split('/')[-1].split('.')[0]
2883
2884 fuzzer_exes += executable(
2885 name,
2886 sources,
2887 include_directories : [incs, include_directories('src/fuzz')],
2888 link_with : link_with,
2889 dependencies : dependencies,
2890 c_args : defs,
2891 install : false)
2892endforeach
Michael Olbrich59967402018-11-11 11:27:35 +01002893endif
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002894
2895run_target('fuzzers',
2896 depends : fuzzer_exes,
2897 command : ['true'])
2898
2899############################################################
2900
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002901make_directive_index_py = find_program('tools/make-directive-index.py')
2902make_man_index_py = find_program('tools/make-man-index.py')
Zbigniew Jędrzejewski-Szmekb184e8f2017-04-13 19:59:21 -04002903xml_helper_py = find_program('tools/xml_helper.py')
Zbigniew Jędrzejewski-Szmekabba22c2017-04-15 00:40:59 -04002904hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002905
2906subdir('units')
2907subdir('sysctl.d')
2908subdir('sysusers.d')
2909subdir('tmpfiles.d')
Zbigniew Jędrzejewski-Szmeke783f952017-11-23 13:23:42 +01002910subdir('presets')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002911subdir('hwdb')
2912subdir('network')
2913subdir('man')
2914subdir('shell-completion/bash')
2915subdir('shell-completion/zsh')
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002916subdir('docs/sysvinit')
2917subdir('docs/var-log')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002918
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002919install_subdir('factory/etc',
2920 install_dir : factorydir)
2921
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002922install_data('xorg/50-systemd-user.sh',
2923 install_dir : xinitrcdir)
Dimitri John Ledkov582faeb2017-08-02 13:41:18 +01002924install_data('modprobe.d/systemd.conf',
2925 install_dir : modprobedir)
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002926install_data('LICENSE.GPL2',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002927 'LICENSE.LGPL2.1',
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002928 'NEWS',
2929 'README',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302930 'docs/CODING_STYLE.md',
Filipe Brandenburger1d1cb162018-09-07 01:22:34 -07002931 'docs/DISTRO_PORTING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002932 'docs/ENVIRONMENT.md',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302933 'docs/HACKING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002934 'docs/TRANSIENT-SETTINGS.md',
Filipe Brandenburgerb6dc0d72018-09-07 01:44:49 -07002935 'docs/TRANSLATORS.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002936 'docs/UIDS-GIDS.md',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002937 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2938 install_dir : docdir)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002939
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002940meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2941meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2942
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002943############################################################
2944
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002945meson_check_help = find_program('tools/meson-check-help.sh')
2946
2947foreach exec : public_programs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002948 name = exec.full_path().split('/')[-1]
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002949 if want_tests != 'false'
2950 test('check-help-' + name,
2951 meson_check_help,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002952 args : exec.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002953 endif
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002954endforeach
2955
2956############################################################
2957
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002958# Enable tests for all supported sanitizers
2959foreach tuple : sanitizers
2960 sanitizer = tuple[0]
2961 build = tuple[1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002962
Yu Watanabe7a6397d2018-05-15 20:18:24 +09002963 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002964 prev = ''
2965 foreach p : fuzz_regression_tests
2966 b = p.split('/')[-2]
2967 c = p.split('/')[-1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002968
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002969 name = '@0@:@1@'.format(b, sanitizer)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002970
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002971 if name != prev
2972 if want_tests == 'false'
2973 message('Not compiling @0@ because tests is set to false'.format(name))
2974 elif slow_tests
2975 exe = custom_target(
2976 name,
2977 output : name,
2978 depends : build,
2979 command : [env, 'ln', '-fs',
2980 join_paths(build.full_path(), b),
2981 '@OUTPUT@'],
2982 build_by_default : true)
2983 else
2984 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2985 endif
2986 endif
2987 prev = name
2988
2989 if want_tests != 'false' and slow_tests
2990 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2991 env,
2992 args : [exe.full_path(),
Zbigniew Jędrzejewski-Szmeke6bad672018-08-10 17:15:05 +02002993 join_paths(meson.source_root(), p)])
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002994 endif
2995 endforeach
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002996 endif
2997endforeach
2998
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002999
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11003000############################################################
3001
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003002if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003003 all_files = run_command(
3004 git,
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003005 ['--git-dir=@0@/.git'.format(meson.source_root()),
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003006 'ls-files',
3007 ':/*.[ch]'])
3008 all_files = files(all_files.stdout().split())
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04003009
userwithuide85a6902017-08-09 13:41:44 +00003010 custom_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003011 'tags',
userwithuide85a6902017-08-09 13:41:44 +00003012 output : 'tags',
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003013 command : [env, 'etags', '-o', '@0@/TAGS'.format(meson.source_root())] + all_files)
Evegeny Vereshchagin2f099742018-05-18 10:52:17 +00003014 run_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003015 'ctags',
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003016 command : [env, 'ctags', '-o', '@0@/tags'.format(meson.source_root())] + all_files)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04003017endif
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003018
3019if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003020 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
Zbigniew Jędrzejewski-Szmeka923e082017-04-17 19:48:20 -04003021 run_target(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003022 'git-contrib',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003023 command : [meson_git_contrib_sh])
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003024endif
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003025
3026if git.found()
3027 git_head = run_command(
3028 git,
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003029 ['--git-dir=@0@/.git'.format(meson.source_root()),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003030 'rev-parse', 'HEAD']).stdout().strip()
3031 git_head_short = run_command(
3032 git,
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003033 ['--git-dir=@0@/.git'.format(meson.source_root()),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003034 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3035
3036 run_target(
3037 'git-snapshot',
3038 command : ['git', 'archive',
Zbigniew Jędrzejewski-Szmek243e5ce2018-08-10 16:50:07 +02003039 '-o', '@0@/systemd-@1@.tar.gz'.format(meson.source_root(),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003040 git_head_short),
3041 '--prefix', 'systemd-@0@/'.format(git_head),
3042 'HEAD'])
3043endif
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003044
3045############################################################
3046
Lennart Poettering51b13862017-12-20 12:51:14 +01003047meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
3048run_target(
3049 'check-api-docs',
3050 depends : [man, libsystemd, libudev],
3051 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
3052
Lennart Poettering0bc7a222018-10-02 09:53:05 +02003053run_target(
3054 'make-index-md',
3055 command : ['sh', '@0@/tools/make-index-md.sh'.format(meson.source_root()), meson.source_root()])
3056
Lennart Poettering51b13862017-12-20 12:51:14 +01003057############################################################
3058
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003059status = [
3060 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3061
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +01003062 'split /usr: @0@'.format(split_usr),
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +01003063 'split bin-sbin: @0@'.format(split_bin),
Yu Watanabe359b4962017-11-25 20:35:24 +09003064 'prefix directory: @0@'.format(prefixdir),
3065 'rootprefix directory: @0@'.format(rootprefixdir),
3066 'sysconf directory: @0@'.format(sysconfdir),
3067 'include directory: @0@'.format(includedir),
3068 'lib directory: @0@'.format(libdir),
3069 'rootlib directory: @0@'.format(rootlibdir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003070 'SysV init scripts: @0@'.format(sysvinit_path),
3071 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
Yu Watanabe359b4962017-11-25 20:35:24 +09003072 'PAM modules directory: @0@'.format(pamlibdir),
3073 'PAM configuration directory: @0@'.format(pamconfdir),
3074 'RPM macros directory: @0@'.format(rpmmacrosdir),
3075 'modprobe.d directory: @0@'.format(modprobedir),
3076 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3077 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3078 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3079 'bash completions directory: @0@'.format(bashcompletiondir),
3080 'zsh completions directory: @0@'.format(zshcompletiondir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003081 'extra start script: @0@'.format(get_option('rc-local')),
3082 'extra stop script: @0@'.format(get_option('halt-local')),
3083 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3084 get_option('debug-tty')),
3085 'TTY GID: @0@'.format(tty_gid),
Yu Watanabeac093402018-05-10 16:04:16 +09003086 'users GID: @0@'.format(substs.get('USERS_GID')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003087 'maximum system UID: @0@'.format(system_uid_max),
3088 'maximum system GID: @0@'.format(system_gid_max),
Lennart Poettering87d5e4f2017-12-02 12:48:31 +01003089 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3090 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3091 'minimum container UID base: @0@'.format(container_uid_base_min),
3092 'maximum container UID base: @0@'.format(container_uid_base_max),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003093 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
Tom Stellard4e15a732017-10-31 08:46:24 -07003094 'render group access mode: @0@'.format(get_option('group-render-mode')),
Yu Watanabe359b4962017-11-25 20:35:24 +09003095 'certificate root directory: @0@'.format(get_option('certificate-root')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003096 'support URL: @0@'.format(support_url),
Lennart Poetteringafde4572017-12-05 11:00:24 +01003097 'nobody user name: @0@'.format(nobody_user),
3098 'nobody group name: @0@'.format(nobody_group),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003099 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -04003100 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003101
3102 'default DNSSEC mode: @0@'.format(default_dnssec),
Iwan Timmerc9299be2018-06-13 20:26:24 +02003103 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003104 'default cgroup hierarchy: @0@'.format(default_hierarchy),
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +01003105 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
Dave Reisner8ca9e922018-12-28 07:38:36 -05003106 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
3107 'default locale: @0@'.format(default_locale)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003108
3109alt_dns_servers = '\n '.join(dns_servers.split(' '))
3110alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3111status += [
3112 'default DNS servers: @0@'.format(alt_dns_servers),
3113 'default NTP servers: @0@'.format(alt_ntp_servers)]
3114
3115alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3116 '@@0@'.format(time_epoch)).stdout().strip()
3117status += [
3118 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3119
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003120status += [
Zbigniew Jędrzejewski-Szmekabc8caf2018-10-11 11:10:53 +02003121 'static libsystemd: @0@'.format(static_libsystemd),
3122 'static libudev: @0@'.format(static_libudev)]
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003123
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003124# TODO:
3125# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3126# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3127# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3128
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003129if conf.get('ENABLE_EFI') == 1
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003130 status += 'efi arch: @0@'.format(efi_arch)
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003131
3132 if have_gnu_efi
3133 status += [
3134 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
Zbigniew Jędrzejewski-Szmekc512dfb2018-12-18 00:02:11 +01003135 'EFI CC @0@'.format(' '.join(efi_cc)),
Yu Watanabe359b4962017-11-25 20:35:24 +09003136 'EFI lib directory: @0@'.format(efi_libdir),
3137 'EFI lds directory: @0@'.format(efi_ldsdir),
3138 'EFI include directory: @0@'.format(efi_incdir)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003139 endif
3140endif
3141
3142found = []
3143missing = []
3144
3145foreach tuple : [
3146 ['libcryptsetup'],
3147 ['PAM'],
3148 ['AUDIT'],
3149 ['IMA'],
3150 ['AppArmor'],
3151 ['SELinux'],
3152 ['SECCOMP'],
3153 ['SMACK'],
3154 ['zlib'],
3155 ['xz'],
3156 ['lz4'],
3157 ['bzip2'],
3158 ['ACL'],
3159 ['gcrypt'],
3160 ['qrencode'],
3161 ['microhttpd'],
3162 ['gnutls'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003163 ['openssl'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003164 ['libcurl'],
Zbigniew Jędrzejewski-Szmekd1bf5672017-06-16 09:16:28 -04003165 ['idn'],
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -04003166 ['libidn2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003167 ['libidn'],
3168 ['libiptc'],
3169 ['elfutils'],
3170 ['binfmt'],
3171 ['vconsole'],
3172 ['quotacheck'],
3173 ['tmpfiles'],
3174 ['environment.d'],
3175 ['sysusers'],
3176 ['firstboot'],
3177 ['randomseed'],
3178 ['backlight'],
3179 ['rfkill'],
3180 ['logind'],
3181 ['machined'],
Lennart Poettering61d05782018-04-16 21:41:40 +02003182 ['portabled'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003183 ['importd'],
3184 ['hostnamed'],
3185 ['timedated'],
3186 ['timesyncd'],
3187 ['localed'],
3188 ['networkd'],
Yu Watanabea7456af2017-10-06 16:33:21 +09003189 ['resolve'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003190 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3191 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003192 ['coredump'],
3193 ['polkit'],
3194 ['legacy pkla', install_polkit_pkla],
3195 ['efi'],
3196 ['gnu-efi', have_gnu_efi],
3197 ['kmod'],
3198 ['xkbcommon'],
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01003199 ['pcre2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003200 ['blkid'],
3201 ['dbus'],
3202 ['glib'],
Zbigniew Jędrzejewski-Szmek6bd2bc82018-08-07 18:10:53 +02003203 ['nss-myhostname'],
3204 ['nss-mymachines'],
3205 ['nss-resolve'],
3206 ['nss-systemd'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003207 ['hwdb'],
3208 ['tpm'],
3209 ['man pages', want_man],
3210 ['html pages', want_html],
3211 ['man page indices', want_man and have_lxml],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003212 ['SysV compat'],
3213 ['utmp'],
3214 ['ldconfig'],
3215 ['hibernate'],
3216 ['adm group', get_option('adm-group')],
3217 ['wheel group', get_option('wheel-group')],
Franck Buib14e1b42017-05-09 14:02:37 +02003218 ['gshadow'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003219 ['debug hashmap'],
3220 ['debug mmap cache'],
Yu Watanabed6601492018-11-23 00:36:35 +09003221 ['debug siphash'],
Yu Watanabe20e97dd2018-11-23 00:28:27 +09003222 ['debug udev'],
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +02003223 ['valgrind', conf.get('VALGRIND') == 1],
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +02003224 ['trace logging', conf.get('LOG_TRACE') == 1],
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003225 ['link-udev-shared', get_option('link-udev-shared')],
3226 ['link-systemctl-shared', get_option('link-systemctl-shared')],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003227]
3228
Zbigniew Jędrzejewski-Szmekaf4d7862018-03-09 14:21:08 +01003229 if tuple.length() >= 2
3230 cond = tuple[1]
3231 else
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003232 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3233 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003234 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003235 endif
3236 if cond
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003237 found += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003238 else
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003239 missing += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003240 endif
3241endforeach
3242
3243status += [
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003244 '',
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003245 'enabled features: @0@'.format(', '.join(found)),
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003246 '',
3247 'disabled features: @0@'.format(', '.join(missing)),
3248 '']
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003249message('\n '.join(status))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003250
3251if rootprefixdir != rootprefix_default
Yu Watanabe8ea9fad2018-05-10 14:50:52 +09003252 warning('\n' +
3253 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3254 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3255 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003256endif