blob: 979b1858677a8ff12086edf958a361cc235a6c5b [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',
Zbigniew Jędrzejewski-Szmek7eb8a472019-04-03 10:00:14 +02004 version : '242',
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 Poetteringbfe6bb22019-03-27 14:23:57 +010015libsystemd_version = '0.26.0'
16libudev_version = '1.6.14'
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +020017
Yu Watanabe348b4432018-05-07 18:17:35 +090018# We need the same data in two different formats, ugh!
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040019# Also, for hysterical reasons, we use different variable
20# names, sometimes. Not all variables are included in every
21# set. Ugh, ugh, ugh!
22conf = configuration_data()
Zbigniew Jędrzejewski-Szmeka67c3182018-12-19 11:23:42 +010023conf.set('PROJECT_VERSION', meson.project_version())
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040024
25substs = configuration_data()
Zbigniew Jędrzejewski-Szmeka67c3182018-12-19 11:23:42 +010026substs.set('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
27substs.set('PROJECT_VERSION', meson.project_version())
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040028
Davide Cavalca1485aac2019-02-27 11:19:07 -050029# This is to be used instead of meson.source_root(), as the latter will return
30# the wrong result when systemd is being built as a meson subproject
31project_source_root = meson.current_source_dir()
Zbigniew Jędrzejewski-Szmeka0b15b42019-06-07 14:41:36 +020032relative_source_path = run_command('realpath',
33 '--relative-to=@0@'.format(meson.current_build_dir()),
34 project_source_root).stdout().strip()
35conf.set_quoted('RELATIVE_SOURCE_PATH', relative_source_path)
Davide Cavalca1485aac2019-02-27 11:19:07 -050036
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +020037want_ossfuzz = get_option('oss-fuzz')
38want_libfuzzer = get_option('llvm-fuzz')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +000039want_fuzzbuzz = get_option('fuzzbuzz')
40if want_ossfuzz + want_libfuzzer + want_fuzzbuzz > 1
41 error('only one of oss-fuzz, llvm-fuzz or fuzzbuzz can be specified')
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +020042endif
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +000043
44skip_deps = want_ossfuzz or want_libfuzzer
45fuzzer_build = want_ossfuzz or want_libfuzzer or want_fuzzbuzz
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +020046
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040047#####################################################################
48
Zbigniew Jędrzejewski-Szmek003c8872017-07-24 04:41:45 -040049# Try to install the git pre-commit hook
Davide Cavalca1485aac2019-02-27 11:19:07 -050050git_hook = run_command(join_paths(project_source_root, 'tools/add-git-hook.sh'))
Zbigniew Jędrzejewski-Szmek003c8872017-07-24 04:41:45 -040051if git_hook.returncode() == 0
52 message(git_hook.stdout().strip())
53endif
54
55#####################################################################
56
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +010057if get_option('split-usr') == 'auto'
58 split_usr = run_command('test', '-L', '/bin').returncode() != 0
59else
60 split_usr = get_option('split-usr') == 'true'
61endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010062conf.set10('HAVE_SPLIT_USR', split_usr,
63 description : '/usr/bin and /bin directories are separate')
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010064
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010065if get_option('split-bin') == 'auto'
66 split_bin = run_command('test', '-L', '/usr/sbin').returncode() != 0
67else
68 split_bin = get_option('split-bin') == 'true'
69endif
Zbigniew Jędrzejewski-Szmek671f0f82018-03-01 21:48:36 +010070conf.set10('HAVE_SPLIT_BIN', split_bin,
71 description : 'bin and sbin directories are separate')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +010072
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010073rootprefixdir = get_option('rootprefix')
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010074# Unusual rootprefixdir values are used by some distros
75# (see https://github.com/systemd/systemd/pull/7461).
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +010076rootprefix_default = split_usr ? '/' : '/usr'
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +010077if rootprefixdir == ''
78 rootprefixdir = rootprefix_default
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +010079endif
Zbigniew Jędrzejewski-Szmek23bdba62019-03-05 16:46:52 +010080rootprefixdir_noslash = rootprefixdir == '/' ? '' : rootprefixdir
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040081
82sysvinit_path = get_option('sysvinit-path')
83sysvrcnd_path = get_option('sysvrcnd-path')
Yu Watanabe348b4432018-05-07 18:17:35 +090084conf.set10('HAVE_SYSV_COMPAT', sysvinit_path != '' and sysvrcnd_path != '',
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +020085 description : 'SysV init scripts and rcN.d links are supported')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040086
Lennart Poetteringa8b627a2018-10-11 18:23:26 +020087conf.set10('BUMP_PROC_SYS_FS_FILE_MAX', get_option('bump-proc-sys-fs-file-max'))
88conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
Lennart Poettering09dad042018-11-15 09:50:42 +010089conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
Lennart Poetteringa8b627a2018-10-11 18:23:26 +020090
Zbigniew Jędrzejewski-Szmek23bdba62019-03-05 16:46:52 +010091# join_paths ignores the preceding arguments if an absolute component is
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040092# encountered, so this should canonicalize various paths when they are
93# absolute or relative.
94prefixdir = get_option('prefix')
95if not prefixdir.startswith('/')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -040096 error('Prefix is not absolute: "@0@"'.format(prefixdir))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -040097endif
98bindir = join_paths(prefixdir, get_option('bindir'))
99libdir = join_paths(prefixdir, get_option('libdir'))
100sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
101includedir = join_paths(prefixdir, get_option('includedir'))
102datadir = join_paths(prefixdir, get_option('datadir'))
103localstatedir = join_paths('/', get_option('localstatedir'))
104
105rootbindir = join_paths(rootprefixdir, 'bin')
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +0100106rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400107rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
108
109rootlibdir = get_option('rootlibdir')
110if rootlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400111 rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400112endif
113
114# Dirs of external packages
Benedikt Morbacha95696e2018-08-10 04:59:54 +0200115pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
116pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400117polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
118polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
119polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400120xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
Yu Watanabe8a38aac2017-11-23 22:20:22 +0900121rpmmacrosdir = get_option('rpmmacrosdir')
122if rpmmacrosdir != 'no'
123 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
124endif
Michael Biebl02fa0542017-10-21 08:32:50 +0200125modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400126
127# Our own paths
Michael Bieble17e5ba2017-04-13 10:30:56 -0400128pkgdatadir = join_paths(datadir, 'systemd')
129environmentdir = join_paths(prefixdir, 'lib/environment.d')
130pkgsysconfdir = join_paths(sysconfdir, 'systemd')
131userunitdir = join_paths(prefixdir, 'lib/systemd/user')
132userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
133tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
134sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
135sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
136binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
137modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
138networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
139pkgincludedir = join_paths(includedir, 'systemd')
140systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
141usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
142systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
143userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
144systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
145systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
146systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
147systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
148udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400149udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
150udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
151catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
152kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
153factorydir = join_paths(datadir, 'factory')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400154bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
155testsdir = join_paths(prefixdir, 'lib/systemd/tests')
156systemdstatedir = join_paths(localstatedir, 'lib/systemd')
157catalogstatedir = join_paths(systemdstatedir, 'catalog')
158randomseeddir = join_paths(localstatedir, 'lib/systemd')
Lennart Poettering61d05782018-04-16 21:41:40 +0200159profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400160
tblume75aaade2018-02-01 22:46:15 +0100161docdir = get_option('docdir')
162if docdir == ''
163 docdir = join_paths(datadir, 'doc/systemd')
164endif
165
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400166dbuspolicydir = get_option('dbuspolicydir')
167if dbuspolicydir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400168 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400169endif
170
171dbussessionservicedir = get_option('dbussessionservicedir')
172if dbussessionservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400173 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400174endif
175
176dbussystemservicedir = get_option('dbussystemservicedir')
177if dbussystemservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400178 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400179endif
180
181pamlibdir = get_option('pamlibdir')
182if pamlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400183 pamlibdir = join_paths(rootlibdir, 'security')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400184endif
185
186pamconfdir = get_option('pamconfdir')
187if pamconfdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400188 pamconfdir = join_paths(sysconfdir, 'pam.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400189endif
190
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100191memory_accounting_default = get_option('memory-accounting-default')
Zbigniew Jędrzejewski-Szmek36cf4502019-06-06 19:22:20 +0200192status_unit_format_default = get_option('status-unit-format-default')
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100193
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400194conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400195conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'system'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400196conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
197conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
198conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400199conf.set_quoted('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100200
Zbigniew Jędrzejewski-Szmekf7c54272018-03-02 09:09:29 +0100201conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
Alexander F Rødseth96164a32018-03-01 13:12:02 +0100202
Michael Bieble17e5ba2017-04-13 10:30:56 -0400203conf.set_quoted('USER_CONFIG_UNIT_PATH', join_paths(pkgsysconfdir, 'user'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400204conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
205conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400206conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
207conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
208conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
209conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
Zbigniew Jędrzejewski-Szmekda495a02017-11-21 23:18:05 +0100210conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
Zbigniew Jędrzejewski-Szmek7f2806d2017-11-29 20:02:11 +0100211conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400212conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
213conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-sleep'))
214conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
215conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
216conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
Zbigniew Jędrzejewski-Szmek74344a12017-11-28 20:00:10 +0100217conf.set_quoted('ROOTPREFIX', rootprefixdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400218conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400219conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
220conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400221conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
222conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
223conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
224conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
225conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
226conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400227conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
228conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
Filipe Brandenburgere2d41372018-09-11 23:55:02 -0700229conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
Filipe Brandenburger49cdae62018-09-12 00:23:40 -0700230conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400231conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400232conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400233conf.set_quoted('LIBDIR', libdir)
234conf.set_quoted('ROOTLIBDIR', rootlibdir)
235conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
236conf.set_quoted('BOOTLIBDIR', bootlibdir)
Michael Bieble17e5ba2017-04-13 10:30:56 -0400237conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
238conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
Lennart Poettering1d7579c2018-10-10 21:20:08 +0200239conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400240conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
241conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
242conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
243conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
Zbigniew Jędrzejewski-Szmek30538ff2018-10-17 14:36:09 +0200244conf.set10('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default)
Michal Koutný7f672e82018-03-09 18:27:13 +0100245conf.set_quoted('MEMORY_ACCOUNTING_DEFAULT_YES_NO', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek36cf4502019-06-06 19:22:20 +0200246conf.set('STATUS_UNIT_FORMAT_DEFAULT', 'STATUS_UNIT_FORMAT_' + status_unit_format_default.to_upper())
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400247
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400248substs.set('prefix', prefixdir)
Zbigniew Jędrzejewski-Szmek1c2c7c62018-11-17 15:38:15 +0100249substs.set('rootprefix', rootprefixdir)
Zbigniew Jędrzejewski-Szmek23bdba62019-03-05 16:46:52 +0100250substs.set('rootprefix_noslash', rootprefixdir_noslash)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400251substs.set('exec_prefix', prefixdir)
252substs.set('libdir', libdir)
253substs.set('rootlibdir', rootlibdir)
254substs.set('includedir', includedir)
Zbigniew Jędrzejewski-Szmek1c2c7c62018-11-17 15:38:15 +0100255substs.set('sysconfdir', sysconfdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400256substs.set('bindir', bindir)
257substs.set('rootbindir', rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400258substs.set('rootlibexecdir', rootlibexecdir)
259substs.set('systemunitdir', systemunitdir)
260substs.set('userunitdir', userunitdir)
261substs.set('systempresetdir', systempresetdir)
262substs.set('userpresetdir', userpresetdir)
263substs.set('udevhwdbdir', udevhwdbdir)
264substs.set('udevrulesdir', udevrulesdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400265substs.set('udevlibexecdir', udevlibexecdir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200266substs.set('environmentdir', environmentdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400267substs.set('catalogdir', catalogdir)
268substs.set('tmpfilesdir', tmpfilesdir)
269substs.set('sysusersdir', sysusersdir)
270substs.set('sysctldir', sysctldir)
271substs.set('binfmtdir', binfmtdir)
272substs.set('modulesloaddir', modulesloaddir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200273substs.set('modprobedir', modprobedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400274substs.set('systemgeneratordir', systemgeneratordir)
275substs.set('usergeneratordir', usergeneratordir)
276substs.set('systemenvgeneratordir', systemenvgeneratordir)
277substs.set('userenvgeneratordir', userenvgeneratordir)
278substs.set('systemshutdowndir', systemshutdowndir)
279substs.set('systemsleepdir', systemsleepdir)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400280substs.set('CERTIFICATEROOT', get_option('certificate-root'))
Michael Bieble17e5ba2017-04-13 10:30:56 -0400281substs.set('SYSTEMCTL', join_paths(rootbindir, 'systemctl'))
282substs.set('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400283substs.set('SYSTEM_SYSVINIT_PATH', sysvinit_path)
284substs.set('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
285substs.set('RC_LOCAL_SCRIPT_PATH_START', get_option('rc-local'))
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100286substs.set('MEMORY_ACCOUNTING_DEFAULT', memory_accounting_default ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek36cf4502019-06-06 19:22:20 +0200287substs.set('STATUS_UNIT_FORMAT_DEFAULT', status_unit_format_default)
Zbigniew Jędrzejewski-Szmekc02b6ee2018-10-17 10:21:48 +0200288substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
Zbigniew Jędrzejewski-Szmeke9bbff12019-05-09 13:23:50 +0200289substs.set('BUILD_ROOT', meson.current_build_dir())
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400290
291#####################################################################
292
293cc = meson.get_compiler('c')
294pkgconfig = import('pkgconfig')
Zbigniew Jędrzejewski-Szmek6e2afb12017-04-24 21:03:35 -0400295check_compilation_sh = find_program('tools/meson-check-compilation.sh')
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100296meson_build_sh = find_program('tools/meson-build.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400297
Zbigniew Jędrzejewski-Szmekd3da2912018-09-12 11:02:58 +0200298want_tests = get_option('tests')
299slow_tests = want_tests != 'false' and get_option('slow-tests')
300install_tests = get_option('install-tests')
301
James Hilliard46e63a22018-12-27 09:16:20 +0800302if add_languages('cpp', required : fuzzer_build)
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +0200303 # Used only for tests
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200304 cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
Zbigniew Jędrzejewski-Szmek1b2acaa2018-10-09 18:48:09 +0200305else
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200306 cxx_cmd = ''
Zbigniew Jędrzejewski-Szmek94e25232017-05-13 13:23:28 -0400307endif
308
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500309if want_libfuzzer
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +0200310 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer', required : false)
311 if fuzzing_engine.found()
312 add_project_arguments('-fsanitize-coverage=trace-pc-guard,trace-cmp', language : 'c')
313 elif cc.has_argument('-fsanitize=fuzzer-no-link')
314 add_project_arguments('-fsanitize=fuzzer-no-link', language : 'c')
315 else
316 error('Looks like neither libFuzzer nor -fsanitize=fuzzer-no-link is supported')
317 endif
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +0200318elif want_ossfuzz
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500319 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000320elif want_fuzzbuzz
321 fuzzing_engine = meson.get_compiler('cpp').find_library(get_option('fuzzbuzz-engine'), dirs: get_option('fuzzbuzz-engine-dir'))
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500322endif
323
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900324possible_cc_flags = [
325 '-Wextra',
326 '-Werror=undef',
327 '-Wlogical-op',
328 '-Wmissing-include-dirs',
329 '-Wold-style-definition',
330 '-Wpointer-arith',
331 '-Winit-self',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900332 '-Wfloat-equal',
333 '-Wsuggest-attribute=noreturn',
334 '-Werror=missing-prototypes',
335 '-Werror=implicit-function-declaration',
336 '-Werror=missing-declarations',
337 '-Werror=return-type',
338 '-Werror=incompatible-pointer-types',
339 '-Werror=format=2',
340 '-Wstrict-prototypes',
341 '-Wredundant-decls',
342 '-Wmissing-noreturn',
343 '-Wimplicit-fallthrough=5',
344 '-Wshadow',
345 '-Wendif-labels',
346 '-Wstrict-aliasing=2',
347 '-Wwrite-strings',
348 '-Werror=overflow',
Zbigniew Jędrzejewski-Szmekb05ecb82018-06-09 13:12:52 +0200349 '-Werror=shift-count-overflow',
Zbigniew Jędrzejewski-Szmekd28b67d2018-06-11 13:17:43 +0200350 '-Werror=shift-overflow=2',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900351 '-Wdate-time',
352 '-Wnested-externs',
Filipe Brandenburgerbf7efeb2018-09-08 13:55:09 -0700353
354 # negative arguments are correctly detected starting with meson 0.46.
355 '-Wno-unused-parameter',
356 '-Wno-missing-field-initializers',
357 '-Wno-unused-result',
358 '-Wno-format-signedness',
Zbigniew Jędrzejewski-Szmekeed33622019-03-07 10:56:15 +0100359 '-Wno-error=#warnings', # clang
360 '-Wno-string-plus-int', # clang
Filipe Brandenburgerbf7efeb2018-09-08 13:55:09 -0700361
362 # work-around for gcc 7.1 turning this on on its own.
363 '-Wno-error=nonnull',
364
365 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
366 # optimizations enabled, producing essentially false positives.
367 '-Wno-maybe-uninitialized',
368
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900369 '-ffast-math',
370 '-fno-common',
371 '-fdiagnostics-show-option',
372 '-fno-strict-aliasing',
373 '-fvisibility=hidden',
374 '-fstack-protector',
375 '-fstack-protector-strong',
376 '--param=ssp-buffer-size=4',
377]
378
379# --as-needed and --no-undefined are provided by meson by default,
380# run mesonconf to see what is enabled
381possible_link_flags = [
382 '-Wl,-z,relro',
383 '-Wl,-z,now',
384]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400385
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900386if cc.get_id() == 'clang'
387 possible_cc_flags += [
388 '-Wno-typedef-redefinition',
389 '-Wno-gnu-variable-sized-type-not-at-end',
390 ]
391endif
392
393if get_option('buildtype') != 'debug'
394 possible_cc_flags += [
395 '-ffunction-sections',
396 '-fdata-sections',
397 ]
398
399 possible_link_flags += '-Wl,--gc-sections'
400endif
401
Zbigniew Jędrzejewski-Szmeka73f6212019-03-28 09:44:02 +0100402if get_option('b_ndebug') == 'true'
403 # With asserts disabled with get a bunch of warnings about variables which
404 # are used only in the asserts. This is not useful at all, so let's just silence
405 # those warnings.
406 possible_cc_flags += [
407 '-Wno-unused-variable',
408 '-Wno-unused-but-set-variable',
409 ]
410endif
411
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900412add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
Yu Watanabe7a6397d2018-05-15 20:18:24 +0900413add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900414
Caio Marcelo de Oliveira Filho9e70f2f2018-02-19 01:37:19 -0800415if cc.compiles('''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400416 #include <time.h>
417 #include <inttypes.h>
418 typedef uint64_t usec_t;
419 usec_t now(clockid_t clock);
420 int main(void) {
421 struct timespec now;
422 return 0;
423 }
Fabrice Fontaine38c1c962018-11-29 13:22:08 +0100424''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400425 add_project_arguments('-Werror=shadow', language : 'c')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400426endif
427
Zbigniew Jędrzejewski-Szmek0e3cc902018-10-11 15:12:41 +0200428cpp = ' '.join(cc.cmd_array()) + ' -E'
Zbigniew Jędrzejewski-Szmek9cc0e6e2017-04-11 10:25:34 -0400429
Zbigniew Jędrzejewski-Szmek6695c202019-05-07 15:10:58 +0200430has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
431
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400432#####################################################################
433# compilation result tests
434
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400435conf.set('_GNU_SOURCE', true)
436conf.set('__SANE_USERSPACE_TYPES__', true)
Zbigniew Jędrzejewski-Szmek6695c202019-05-07 15:10:58 +0200437conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400438
439conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
440conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
441conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
442conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
443conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
444conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
445conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
446
447decl_headers = '''
448#include <uchar.h>
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100449#include <sys/stat.h>
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400450'''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400451
452foreach decl : ['char16_t',
453 'char32_t',
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100454 'struct statx',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400455 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400456
457 # We get -1 if the size cannot be determined
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200458 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
459
460 if decl == 'struct statx'
461 if have
462 want_linux_stat_h = false
463 else
464 have = cc.sizeof(decl,
465 prefix : decl_headers + '#include <linux/stat.h>',
466 args : '-D_GNU_SOURCE') > 0
467 want_linux_stat_h = have
468 endif
469 endif
470
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200471 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400472endforeach
473
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200474conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
Filipe Brandenburger75720bf2018-07-15 22:43:35 -0700475
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400476foreach ident : ['secure_getenv', '__secure_getenv']
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200477 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400478endforeach
479
480foreach ident : [
Lennart Poettering85db59b2017-12-25 12:01:14 +0100481 ['memfd_create', '''#include <sys/mman.h>'''],
Lennart Poettering7b961e42017-12-25 12:35:28 +0100482 ['gettid', '''#include <sys/types.h>
483 #include <unistd.h>'''],
Lennart Poettering3c042ad2017-12-25 12:07:40 +0100484 ['pivot_root', '''#include <stdlib.h>
485 #include <unistd.h>'''], # no known header declares pivot_root
Lennart Poettering85db59b2017-12-25 12:01:14 +0100486 ['name_to_handle_at', '''#include <sys/types.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400487 #include <sys/stat.h>
488 #include <fcntl.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100489 ['setns', '''#include <sched.h>'''],
Lennart Poettering2acfd0f2017-12-25 12:35:43 +0100490 ['renameat2', '''#include <stdio.h>
491 #include <fcntl.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400492 ['kcmp', '''#include <linux/kcmp.h>'''],
493 ['keyctl', '''#include <sys/types.h>
494 #include <keyutils.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100495 ['copy_file_range', '''#include <sys/syscall.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400496 #include <unistd.h>'''],
Daniel Mack71e52002016-10-18 17:57:10 +0200497 ['bpf', '''#include <sys/syscall.h>
498 #include <unistd.h>'''],
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100499 ['statx', '''#include <sys/types.h>
500 #include <sys/stat.h>
501 #include <unistd.h>'''],
Zbigniew Jędrzejewski-Szmekaa484f32018-02-26 21:20:00 +0100502 ['explicit_bzero' , '''#include <string.h>'''],
503 ['reallocarray', '''#include <malloc.h>'''],
Michal Sekletarb070c7c2019-03-12 18:58:26 +0100504 ['set_mempolicy', '''#include <stdlib.h>
505 #include <unistd.h>'''],
506 ['get_mempolicy', '''#include <stdlib.h>
507 #include <unistd.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400508]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400509
Lennart Poettering85db59b2017-12-25 12:01:14 +0100510 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200511 conf.set10('HAVE_' + ident[0].to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400512endforeach
513
Lennart Poettering85db59b2017-12-25 12:01:14 +0100514if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200515 conf.set10('USE_SYS_RANDOM_H', true)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200516 conf.set10('HAVE_GETRANDOM', true)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400517else
518 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200519 conf.set10('USE_SYS_RANDOM_H', false)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200520 conf.set10('HAVE_GETRANDOM', have)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400521endif
522
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400523#####################################################################
524
Davide Cavalca1485aac2019-02-27 11:19:07 -0500525vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
526 project_source_root,
Zbigniew Jędrzejewski-Szmeke1ca7342018-12-19 13:33:09 +0100527 get_option('version-tag'),
Zbigniew Jędrzejewski-Szmek681bd2c2018-12-20 20:35:25 +0100528 meson.project_version()]
529
Louis Taylord1084aa2019-01-21 21:45:36 +0000530version_h = vcs_tag(
531 input : 'src/version/version.h.in',
532 output : 'version.h',
533 command: vcs_tagger)
534
535versiondep = declare_dependency(sources: version_h)
536
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400537sed = find_program('sed')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400538awk = find_program('awk')
Zbigniew Jędrzejewski-Szmekd730e2d2017-04-25 08:49:58 -0400539m4 = find_program('m4')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400540stat = find_program('stat')
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -0400541git = find_program('git', required : false)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100542env = find_program('env')
Zbigniew Jędrzejewski-Szmekb1ffacb2018-03-22 08:34:21 +0100543perl = find_program('perl', required : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400544
Davide Cavalca1485aac2019-02-27 11:19:07 -0500545meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400546mkdir_p = 'mkdir -p $DESTDIR/@0@'
Zbigniew Jędrzejewski-Szmekd83f4f52017-04-16 12:04:46 -0400547test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
548splash_bmp = files('test/splash.bmp')
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400549
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400550# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
551# /usr/sbin, /sbin, and fall back to the default from middle column.
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500552progs = [['quotaon', '/usr/sbin/quotaon' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400553 ['quotacheck', '/usr/sbin/quotacheck' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400554 ['kmod', '/usr/bin/kmod' ],
555 ['kexec', '/usr/sbin/kexec' ],
556 ['sulogin', '/usr/sbin/sulogin' ],
557 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
558 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
559 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
560 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
561 ]
562foreach prog : progs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400563 path = get_option(prog[0] + '-path')
564 if path != ''
565 message('Using @1@ for @0@'.format(prog[0], path))
566 else
567 exe = find_program(prog[0],
568 '/usr/sbin/' + prog[0],
569 '/sbin/' + prog[0],
570 required: false)
571 path = exe.found() ? exe.path() : prog[1]
572 endif
573 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
574 conf.set_quoted(name, path)
575 substs.set(name, path)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400576endforeach
577
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500578conf.set_quoted('TELINIT', get_option('telinit-path'))
579
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400580if run_command('ln', '--relative', '--help').returncode() != 0
Zbigniew Jędrzejewski-Szmekcd001012018-03-09 08:56:23 +0100581 error('ln does not support --relative (added in coreutils 8.16)')
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400582endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400583
584############################################################
585
586gperf = find_program('gperf')
587
588gperf_test_format = '''
589#include <string.h>
590const char * in_word_set(const char *, @0@);
591@1@
592'''
593gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
594gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
595gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
596if cc.compiles(gperf_test)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400597 gperf_len_type = 'size_t'
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400598else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400599 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
600 if cc.compiles(gperf_test)
601 gperf_len_type = 'unsigned'
602 else
603 error('unable to determine gperf len type')
604 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400605endif
606message('gperf len type is @0@'.format(gperf_len_type))
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400607conf.set('GPERF_LEN_TYPE', gperf_len_type,
608 description : 'The type of gperf "len" parameter')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400609
610############################################################
611
612if not cc.has_header('sys/capability.h')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400613 error('POSIX caps headers not found')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400614endif
Björn Esser9f555bb2018-01-25 15:30:15 +0100615foreach header : ['crypt.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400616 'linux/memfd.h',
617 'linux/vm_sockets.h',
Zbigniew Jędrzejewski-Szmekaf8786b2017-10-03 12:09:40 +0200618 'sys/auxv.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400619 'valgrind/memcheck.h',
620 'valgrind/valgrind.h',
621 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400622
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200623 conf.set10('HAVE_' + header.underscorify().to_upper(),
624 cc.has_header(header))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400625endforeach
626
627############################################################
628
629conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -0400630conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
631gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400632
633default_hierarchy = get_option('default-hierarchy')
634conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
635 description : 'default cgroup hierarchy as string')
636if default_hierarchy == 'legacy'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400637 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400638elif default_hierarchy == 'hybrid'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400639 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400640else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400641 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400642endif
643
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +0100644default_net_naming_scheme = get_option('default-net-naming-scheme')
645conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
646
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400647time_epoch = get_option('time-epoch')
Yu Watanabeac093402018-05-10 16:04:16 +0900648if time_epoch == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400649 NEWS = files('NEWS')
Yu Watanabeac093402018-05-10 16:04:16 +0900650 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400651endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400652conf.set('TIME_EPOCH', time_epoch)
653
654system_uid_max = get_option('system-uid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900655if system_uid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400656 system_uid_max = run_command(
657 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800658 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
659 '/etc/login.defs').stdout().strip()
660 if system_uid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900661 system_uid_max = 999
662 else
663 system_uid_max = system_uid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800664 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400665endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400666conf.set('SYSTEM_UID_MAX', system_uid_max)
667substs.set('systemuidmax', system_uid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400668
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400669system_gid_max = get_option('system-gid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900670if system_gid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400671 system_gid_max = run_command(
672 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800673 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
674 '/etc/login.defs').stdout().strip()
675 if system_gid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900676 system_gid_max = 999
677 else
678 system_gid_max = system_gid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800679 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400680endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400681conf.set('SYSTEM_GID_MAX', system_gid_max)
682substs.set('systemgidmax', system_gid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400683
Yu Watanabeac093402018-05-10 16:04:16 +0900684dynamic_uid_min = get_option('dynamic-uid-min')
685dynamic_uid_max = get_option('dynamic-uid-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100686conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
687conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
688substs.set('dynamicuidmin', dynamic_uid_min)
689substs.set('dynamicuidmax', dynamic_uid_max)
690
Yu Watanabeac093402018-05-10 16:04:16 +0900691container_uid_base_min = get_option('container-uid-base-min')
692container_uid_base_max = get_option('container-uid-base-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100693conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
694conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
695substs.set('containeruidbasemin', container_uid_base_min)
696substs.set('containeruidbasemax', container_uid_base_max)
697
Lennart Poetteringafde4572017-12-05 11:00:24 +0100698nobody_user = get_option('nobody-user')
699nobody_group = get_option('nobody-group')
700
Chen Qi2484bff2018-07-23 14:53:09 +0800701if not meson.is_cross_build()
702 getent_result = run_command('getent', 'passwd', '65534')
703 if getent_result.returncode() == 0
704 name = getent_result.stdout().split(':')[0]
705 if name != nobody_user
706 warning('\n' +
707 '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) +
708 'Your build will result in an user table setup that is incompatible with the local system.')
709 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100710 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800711 id_result = run_command('id', '-u', nobody_user)
712 if id_result.returncode() == 0
713 id = id_result.stdout().to_int()
714 if id != 65534
715 warning('\n' +
716 '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) +
717 'Your build will result in an user table setup that is incompatible with the local system.')
718 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100719 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100720
Chen Qi2484bff2018-07-23 14:53:09 +0800721 getent_result = run_command('getent', 'group', '65534')
722 if getent_result.returncode() == 0
723 name = getent_result.stdout().split(':')[0]
724 if name != nobody_group
725 warning('\n' +
726 '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) +
727 'Your build will result in an group table setup that is incompatible with the local system.')
728 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100729 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800730 id_result = run_command('id', '-g', nobody_group)
731 if id_result.returncode() == 0
732 id = id_result.stdout().to_int()
733 if id != 65534
734 warning('\n' +
735 '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) +
736 'Your build will result in an group table setup that is incompatible with the local system.')
737 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100738 endif
739endif
Yu Watanabe8374cc62017-12-07 17:19:11 +0900740if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
Yu Watanabe8ea9fad2018-05-10 14:50:52 +0900741 warning('\n' +
742 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
743 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
Yu Watanabe8374cc62017-12-07 17:19:11 +0900744endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100745
746conf.set_quoted('NOBODY_USER_NAME', nobody_user)
747conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
Yu Watanabe60712022017-12-07 15:49:16 +0900748substs.set('NOBODY_USER_NAME', nobody_user)
749substs.set('NOBODY_GROUP_NAME', nobody_group)
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100750
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400751tty_gid = get_option('tty-gid')
752conf.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400753substs.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400754
Ikey Doherty84786b82017-12-03 12:28:23 +0000755# Ensure provided GID argument is numeric, otherwise fallback to default assignment
Yu Watanabeac093402018-05-10 16:04:16 +0900756users_gid = get_option('users-gid')
757substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
Ikey Doherty84786b82017-12-03 12:28:23 +0000758
Yu Watanabe348b4432018-05-07 18:17:35 +0900759conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
760conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400761
Michael Bieblace5e312018-07-13 23:36:13 +0200762dev_kvm_mode = get_option('dev-kvm-mode')
763substs.set('DEV_KVM_MODE', dev_kvm_mode)
764conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
Michael Biebl055a0832019-03-13 23:22:26 +0100765group_render_mode = get_option('group-render-mode')
766substs.set('GROUP_RENDER_MODE', group_render_mode)
767conf.set10('GROUP_RENDER_UACCESS', group_render_mode != '0666')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400768
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400769kill_user_processes = get_option('default-kill-user-processes')
770conf.set10('KILL_USER_PROCESSES', kill_user_processes)
Michal Koutnýc7f7e852018-03-09 16:40:41 +0100771conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400772substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400773
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400774dns_servers = get_option('dns-servers')
775conf.set_quoted('DNS_SERVERS', dns_servers)
776substs.set('DNS_SERVERS', dns_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400777
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400778ntp_servers = get_option('ntp-servers')
779conf.set_quoted('NTP_SERVERS', ntp_servers)
780substs.set('NTP_SERVERS', ntp_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400781
Dave Reisner8ca9e922018-12-28 07:38:36 -0500782default_locale = get_option('default-locale')
Yu Watanabe03475e22018-12-29 22:00:07 +0900783if default_locale == ''
James Hilliard50f2fc72019-01-05 11:28:59 +0800784 if not meson.is_cross_build()
785 choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
786 default_locale = run_command(choose_default_locale_sh).stdout().strip()
787 else
788 default_locale = 'C.UTF-8'
789 endif
Yu Watanabe03475e22018-12-29 22:00:07 +0900790endif
Dave Reisner8ca9e922018-12-28 07:38:36 -0500791conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
792
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400793conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
794
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400795substs.set('SUSHELL', get_option('debug-shell'))
796substs.set('DEBUGTTY', get_option('debug-tty'))
Jan Synacek93912e82019-04-25 12:19:16 +0200797conf.set_quoted('DEBUGTTY', get_option('debug-tty'))
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400798
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200799enable_debug_hashmap = false
800enable_debug_mmap_cache = false
Yu Watanabed6601492018-11-23 00:36:35 +0900801enable_debug_siphash = false
Zbigniew Jędrzejewski-Szmek8f6b4422018-08-19 19:11:30 +0200802foreach name : get_option('debug-extra')
Yu Watanabead7aa762018-05-02 13:56:28 +0900803 if name == 'hashmap'
804 enable_debug_hashmap = true
805 elif name == 'mmap-cache'
806 enable_debug_mmap_cache = true
Yu Watanabed6601492018-11-23 00:36:35 +0900807 elif name == 'siphash'
808 enable_debug_siphash = true
Yu Watanabead7aa762018-05-02 13:56:28 +0900809 else
810 message('unknown debug option "@0@", ignoring'.format(name))
811 endif
812endforeach
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200813conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
814conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
Yu Watanabed6601492018-11-23 00:36:35 +0900815conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
Zbigniew Jędrzejewski-Szmek671677d2017-04-27 20:51:34 -0400816
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200817conf.set10('VALGRIND', get_option('valgrind'))
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +0200818conf.set10('LOG_TRACE', get_option('log-trace'))
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200819
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400820#####################################################################
821
822threads = dependency('threads')
823librt = cc.find_library('rt')
824libm = cc.find_library('m')
825libdl = cc.find_library('dl')
826libcrypt = cc.find_library('crypt')
827
Zbigniew Jędrzejewski-Szmek1800cc82017-04-27 01:30:30 -0400828libcap = dependency('libcap', required : false)
829if not libcap.found()
830 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
831 libcap = cc.find_library('cap')
832endif
833
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400834libmount = dependency('mount',
Zbigniew Jędrzejewski-Szmekc0b4b0f2018-03-09 14:58:47 +0100835 version : fuzzer_build ? '>= 0' : '>= 2.30')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400836
837want_seccomp = get_option('seccomp')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000838if want_seccomp != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400839 libseccomp = dependency('libseccomp',
Zbigniew Jędrzejewski-Szmek9f0e9c02017-04-27 10:05:18 -0400840 version : '>= 2.3.1',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400841 required : want_seccomp == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200842 have = libseccomp.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400843else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200844 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400845 libseccomp = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400846endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200847conf.set10('HAVE_SECCOMP', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400848
849want_selinux = get_option('selinux')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000850if want_selinux != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400851 libselinux = dependency('libselinux',
852 version : '>= 2.1.9',
853 required : want_selinux == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200854 have = libselinux.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400855else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200856 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400857 libselinux = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400858endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200859conf.set10('HAVE_SELINUX', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400860
861want_apparmor = get_option('apparmor')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000862if want_apparmor != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400863 libapparmor = dependency('libapparmor',
864 required : want_apparmor == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200865 have = libapparmor.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400866else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200867 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400868 libapparmor = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400869endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200870conf.set10('HAVE_APPARMOR', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400871
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400872smack_run_label = get_option('smack-run-label')
873if smack_run_label != ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400874 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400875endif
876
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400877want_polkit = get_option('polkit')
878install_polkit = false
879install_polkit_pkla = false
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000880if want_polkit != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400881 install_polkit = true
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400882
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400883 libpolkit = dependency('polkit-gobject-1',
884 required : false)
885 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
886 message('Old polkit detected, will install pkla files')
887 install_polkit_pkla = true
888 endif
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400889endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200890conf.set10('ENABLE_POLKIT', install_polkit)
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400891
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400892want_acl = get_option('acl')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000893if want_acl != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400894 libacl = cc.find_library('acl', required : want_acl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200895 have = libacl.found()
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400896else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200897 have = false
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400898 libacl = []
899endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200900conf.set10('HAVE_ACL', have)
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400901
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400902want_audit = get_option('audit')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000903if want_audit != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400904 libaudit = dependency('audit', required : want_audit == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200905 have = libaudit.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400906else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200907 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400908 libaudit = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400909endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200910conf.set10('HAVE_AUDIT', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400911
912want_blkid = get_option('blkid')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000913if want_blkid != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400914 libblkid = dependency('blkid', required : want_blkid == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200915 have = libblkid.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400916else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200917 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400918 libblkid = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400919endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200920conf.set10('HAVE_BLKID', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400921
922want_kmod = get_option('kmod')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000923if want_kmod != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400924 libkmod = dependency('libkmod',
925 version : '>= 15',
926 required : want_kmod == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200927 have = libkmod.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400928else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200929 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400930 libkmod = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400931endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200932conf.set10('HAVE_KMOD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400933
934want_pam = get_option('pam')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000935if want_pam != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400936 libpam = cc.find_library('pam', required : want_pam == 'true')
937 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200938 have = libpam.found() and libpam_misc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400939else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200940 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400941 libpam = []
942 libpam_misc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400943endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200944conf.set10('HAVE_PAM', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400945
946want_microhttpd = get_option('microhttpd')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000947if want_microhttpd != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400948 libmicrohttpd = dependency('libmicrohttpd',
949 version : '>= 0.9.33',
950 required : want_microhttpd == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200951 have = libmicrohttpd.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400952else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200953 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400954 libmicrohttpd = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400955endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200956conf.set10('HAVE_MICROHTTPD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400957
958want_libcryptsetup = get_option('libcryptsetup')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000959if want_libcryptsetup != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400960 libcryptsetup = dependency('libcryptsetup',
961 version : '>= 1.6.0',
962 required : want_libcryptsetup == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200963 have = libcryptsetup.found()
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +0100964 have_sector = cc.has_member(
965 'struct crypt_params_plain',
966 'sector_size',
967 prefix : '#include <libcryptsetup.h>')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400968else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200969 have = false
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +0100970 have_sector = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400971 libcryptsetup = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400972endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200973conf.set10('HAVE_LIBCRYPTSETUP', have)
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +0100974conf.set10('HAVE_LIBCRYPTSETUP_SECTOR_SIZE', have_sector)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400975
976want_libcurl = get_option('libcurl')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000977if want_libcurl != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400978 libcurl = dependency('libcurl',
979 version : '>= 7.32.0',
980 required : want_libcurl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200981 have = libcurl.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400982else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200983 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400984 libcurl = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400985endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200986conf.set10('HAVE_LIBCURL', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400987
988want_libidn = get_option('libidn')
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -0400989want_libidn2 = get_option('libidn2')
990if want_libidn == 'true' and want_libidn2 == 'true'
991 error('libidn and libidn2 cannot be requested simultaneously')
992endif
993
Yu Watanabe1b931392019-06-29 03:13:30 +0900994if want_libidn2 != 'false' and want_libidn != 'true' and not skip_deps
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -0400995 libidn = dependency('libidn2',
996 required : want_libidn2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200997 have = libidn.found()
998else
999 have = false
Yu Watanabe1b931392019-06-29 03:13:30 +09001000 libidn = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001001endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001002conf.set10('HAVE_LIBIDN2', have)
Yu Watanabe1b931392019-06-29 03:13:30 +09001003if not have and want_libidn != 'false' and not skip_deps
1004 # libidn is used for both libidn and libidn2 objects
1005 libidn = dependency('libidn',
1006 required : want_libidn == 'true')
1007 have = libidn.found()
1008else
1009 have = false
1010endif
1011conf.set10('HAVE_LIBIDN', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001012
1013want_libiptc = get_option('libiptc')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001014if want_libiptc != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001015 libiptc = dependency('libiptc',
1016 required : want_libiptc == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001017 have = libiptc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001018else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001019 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001020 libiptc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001021endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001022conf.set10('HAVE_LIBIPTC', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001023
1024want_qrencode = get_option('qrencode')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001025if want_qrencode != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001026 libqrencode = dependency('libqrencode',
1027 required : want_qrencode == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001028 have = libqrencode.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001029else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001030 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001031 libqrencode = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001032endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001033conf.set10('HAVE_QRENCODE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001034
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001035want_gcrypt = get_option('gcrypt')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001036if want_gcrypt != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001037 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1038 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001039 have = libgcrypt.found() and libgpg_error.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001040else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001041 have = false
1042endif
1043if not have
1044 # link to neither of the libs if one is not found
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001045 libgcrypt = []
1046 libgpg_error = []
1047endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001048conf.set10('HAVE_GCRYPT', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001049
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001050want_gnutls = get_option('gnutls')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001051if want_gnutls != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001052 libgnutls = dependency('gnutls',
1053 version : '>= 3.1.4',
1054 required : want_gnutls == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001055 have = libgnutls.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001056else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001057 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001058 libgnutls = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001059endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001060conf.set10('HAVE_GNUTLS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001061
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001062want_openssl = get_option('openssl')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001063if want_openssl != 'false' and not skip_deps
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001064 libopenssl = dependency('openssl',
1065 version : '>= 1.1.0',
1066 required : want_openssl == 'true')
1067 have = libopenssl.found()
1068else
1069 have = false
1070 libopenssl = []
1071endif
1072conf.set10('HAVE_OPENSSL', have)
1073
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001074want_elfutils = get_option('elfutils')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001075if want_elfutils != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001076 libdw = dependency('libdw',
1077 required : want_elfutils == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001078 have = libdw.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001079else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001080 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001081 libdw = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001082endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001083conf.set10('HAVE_ELFUTILS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001084
1085want_zlib = get_option('zlib')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001086if want_zlib != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001087 libz = dependency('zlib',
1088 required : want_zlib == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001089 have = libz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001090else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001091 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001092 libz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001093endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001094conf.set10('HAVE_ZLIB', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001095
1096want_bzip2 = get_option('bzip2')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001097if want_bzip2 != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001098 libbzip2 = cc.find_library('bz2',
1099 required : want_bzip2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001100 have = libbzip2.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001101else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001102 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001103 libbzip2 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001104endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001105conf.set10('HAVE_BZIP2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001106
1107want_xz = get_option('xz')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001108if want_xz != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001109 libxz = dependency('liblzma',
1110 required : want_xz == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001111 have = libxz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001112else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001113 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001114 libxz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001115endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001116conf.set10('HAVE_XZ', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001117
1118want_lz4 = get_option('lz4')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001119if want_lz4 != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001120 liblz4 = dependency('liblz4',
Zbigniew Jędrzejewski-Szmeke0a1d4b2018-10-29 18:32:51 +01001121 version : '>= 1.3.0',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001122 required : want_lz4 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001123 have = liblz4.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001124else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001125 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001126 liblz4 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001127endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001128conf.set10('HAVE_LZ4', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001129
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001130want_xkbcommon = get_option('xkbcommon')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001131if want_xkbcommon != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001132 libxkbcommon = dependency('xkbcommon',
1133 version : '>= 0.3.0',
1134 required : want_xkbcommon == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001135 have = libxkbcommon.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001136else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001137 have = false
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001138 libxkbcommon = []
1139endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001140conf.set10('HAVE_XKBCOMMON', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001141
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01001142want_pcre2 = get_option('pcre2')
1143if want_pcre2 != 'false'
1144 libpcre2 = dependency('libpcre2-8',
1145 required : want_pcre2 == 'true')
1146 have = libpcre2.found()
1147else
1148 have = false
1149 libpcre2 = []
1150endif
1151conf.set10('HAVE_PCRE2', have)
1152
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001153want_glib = get_option('glib')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001154if want_glib != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001155 libglib = dependency('glib-2.0',
1156 version : '>= 2.22.0',
1157 required : want_glib == 'true')
1158 libgobject = dependency('gobject-2.0',
1159 version : '>= 2.22.0',
1160 required : want_glib == 'true')
1161 libgio = dependency('gio-2.0',
1162 required : want_glib == 'true')
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -04001163 have = libglib.found() and libgobject.found() and libgio.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001164else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001165 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001166 libglib = []
1167 libgobject = []
1168 libgio = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001169endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001170conf.set10('HAVE_GLIB', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001171
1172want_dbus = get_option('dbus')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001173if want_dbus != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001174 libdbus = dependency('dbus-1',
1175 version : '>= 1.3.2',
1176 required : want_dbus == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001177 have = libdbus.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001178else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001179 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001180 libdbus = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001181endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001182conf.set10('HAVE_DBUS', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001183
Yu Watanabe42303dc2017-06-18 05:22:32 +09001184default_dnssec = get_option('default-dnssec')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001185if skip_deps
Jonathan Rudenbergb4081f32018-01-15 18:27:37 -05001186 default_dnssec = 'no'
1187endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001188if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
Yu Watanabe42303dc2017-06-18 05:22:32 +09001189 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1190 default_dnssec = 'no'
1191endif
1192conf.set('DEFAULT_DNSSEC_MODE',
1193 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1194substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1195
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001196dns_over_tls = get_option('dns-over-tls')
1197if dns_over_tls != 'false'
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001198 if dns_over_tls == 'openssl'
1199 have_gnutls = false
1200 else
1201 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.5.3'))
1202 if dns_over_tls == 'gnutls' and not have_gnutls
1203 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1204 endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001205 endif
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001206 if dns_over_tls == 'gnutls' or have_gnutls
1207 have_openssl = false
1208 else
1209 have_openssl = conf.get('HAVE_OPENSSL') == 1
1210 if dns_over_tls != 'auto' and not have_openssl
1211 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
Yu Watanabeb349bc52019-06-17 10:22:54 +09001212 error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001213 endif
1214 endif
1215 have = have_gnutls or have_openssl
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001216else
Michael Olbrichbe5536a2018-11-11 11:30:53 +01001217 have = false
1218 have_gnutls = false
1219 have_openssl = false
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001220endif
1221conf.set10('ENABLE_DNS_OVER_TLS', have)
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001222conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1223conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001224
Iwan Timmerc9299be2018-06-13 20:26:24 +02001225default_dns_over_tls = get_option('default-dns-over-tls')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001226if skip_deps
Iwan Timmerc9299be2018-06-13 20:26:24 +02001227 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001228endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001229if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
Iwan Timmer4310bfc2019-02-18 20:41:46 +01001230 message('default-dns-over-tls cannot be enabled or set to opportunistic when DNS-over-TLS support is disabled. Setting default-dns-over-tls to no.')
Iwan Timmerc9299be2018-06-13 20:26:24 +02001231 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001232endif
Iwan Timmerc9299be2018-06-13 20:26:24 +02001233conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1234 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1235substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001236
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001237want_importd = get_option('importd')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001238if want_importd != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001239 have = (conf.get('HAVE_LIBCURL') == 1 and
1240 conf.get('HAVE_ZLIB') == 1 and
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001241 conf.get('HAVE_XZ') == 1 and
1242 conf.get('HAVE_GCRYPT') == 1)
1243 if want_importd == 'true' and not have
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001244 error('importd support was requested, but dependencies are not available')
1245 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001246else
1247 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001248endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001249conf.set10('ENABLE_IMPORTD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001250
1251want_remote = get_option('remote')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001252if want_remote != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001253 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1254 conf.get('HAVE_LIBCURL') == 1]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001255 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1256 # it's possible to build one without the other. Complain only if
Ben Boeckel5238e952019-04-26 20:22:40 -04001257 # support was explicitly requested. The auxiliary files like sysusers
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001258 # config should be installed when any of the programs are built.
1259 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1260 error('remote support was requested, but dependencies are not available')
1261 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001262 have = have_deps[0] or have_deps[1]
1263else
1264 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001265endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001266conf.set10('ENABLE_REMOTE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001267
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001268foreach term : ['utmp',
1269 'hibernate',
1270 'environment-d',
1271 'binfmt',
1272 'coredump',
1273 'resolve',
1274 'logind',
1275 'hostnamed',
1276 'localed',
1277 'machined',
Lennart Poettering61d05782018-04-16 21:41:40 +02001278 'portabled',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001279 'networkd',
1280 'timedated',
1281 'timesyncd',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001282 'firstboot',
1283 'randomseed',
1284 'backlight',
1285 'vconsole',
1286 'quotacheck',
1287 'sysusers',
1288 'tmpfiles',
1289 'hwdb',
1290 'rfkill',
1291 'ldconfig',
1292 'efi',
1293 'tpm',
1294 'ima',
1295 'smack',
1296 'gshadow',
1297 'idn',
Yu Watanabe08540a92018-07-18 09:25:57 +09001298 'nss-myhostname',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001299 'nss-systemd']
1300 have = get_option(term)
1301 name = 'ENABLE_' + term.underscorify().to_upper()
1302 conf.set10(name, have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001303endforeach
1304
Yu Watanabe08540a92018-07-18 09:25:57 +09001305foreach tuple : [['nss-mymachines', 'machined'],
1306 ['nss-resolve', 'resolve']]
1307 want = get_option(tuple[0])
1308 if want != 'false'
1309 have = get_option(tuple[1])
1310 if want == 'true' and not have
1311 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1312 endif
1313 else
1314 have = false
1315 endif
1316 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1317 conf.set10(name, have)
1318endforeach
1319
1320enable_nss = false
1321foreach term : ['ENABLE_NSS_MYHOSTNAME',
1322 'ENABLE_NSS_MYMACHINES',
1323 'ENABLE_NSS_RESOLVE',
1324 'ENABLE_NSS_SYSTEMD']
1325 if conf.get(term) == 1
1326 enable_nss = true
1327 endif
1328endforeach
1329conf.set10('ENABLE_NSS', enable_nss)
1330
Yu Watanabe348b4432018-05-07 18:17:35 +09001331conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
Yu Watanabe6129ec82018-05-03 18:07:43 +09001332
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001333tests = []
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001334fuzzers = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001335
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11001336conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
Zbigniew Jędrzejewski-Szmek00d82c82017-07-12 21:25:17 +00001337
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001338#####################################################################
1339
1340if get_option('efi')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001341 efi_arch = host_machine.cpu_family()
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001342
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001343 if efi_arch == 'x86'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001344 EFI_MACHINE_TYPE_NAME = 'ia32'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001345 gnu_efi_arch = 'ia32'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001346 elif efi_arch == 'x86_64'
1347 EFI_MACHINE_TYPE_NAME = 'x64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001348 gnu_efi_arch = 'x86_64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001349 elif efi_arch == 'arm'
1350 EFI_MACHINE_TYPE_NAME = 'arm'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001351 gnu_efi_arch = 'arm'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001352 elif efi_arch == 'aarch64'
1353 EFI_MACHINE_TYPE_NAME = 'aa64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001354 gnu_efi_arch = 'aarch64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001355 else
1356 EFI_MACHINE_TYPE_NAME = ''
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001357 gnu_efi_arch = ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001358 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001359
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001360 have = true
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001361 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
Zbigniew Jędrzejewski-Szmek80c6fce2017-04-24 19:28:04 -04001362
Yu Watanabeac093402018-05-10 16:04:16 +09001363 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001364else
1365 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001366endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001367conf.set10('ENABLE_EFI', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001368
1369#####################################################################
1370
1371config_h = configure_file(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001372 output : 'config.h',
1373 configuration : conf)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001374
Yu Watanabe348b4432018-05-07 18:17:35 +09001375meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1376
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001377includes = include_directories('src/basic',
Zbigniew Jędrzejewski-Szmek91b08bb2019-07-02 13:01:23 +02001378 'src/boot',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001379 'src/shared',
1380 'src/systemd',
1381 'src/journal',
Zbigniew Jędrzejewski-Szmeka38f7fe2018-05-16 12:05:07 +02001382 'src/journal-remote',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02001383 'src/nspawn',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001384 'src/resolve',
1385 'src/timesync',
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05001386 'src/time-wait-sync',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001387 'src/login',
1388 'src/udev',
1389 'src/libudev',
1390 'src/core',
Lennart Poettering9e71f5d2019-03-05 12:12:33 +01001391 'src/shutdown',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001392 'src/libsystemd/sd-bus',
1393 'src/libsystemd/sd-device',
Yu Watanabea137a1c2018-11-16 17:30:42 +09001394 'src/libsystemd/sd-event',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001395 'src/libsystemd/sd-hwdb',
1396 'src/libsystemd/sd-id128',
1397 'src/libsystemd/sd-netlink',
1398 'src/libsystemd/sd-network',
Yu Watanabeceb26cd2018-12-10 15:45:48 +09001399 'src/libsystemd/sd-resolve',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001400 'src/libsystemd-network',
Zbigniew Jędrzejewski-Szmek2d4ceca2017-12-19 14:19:46 +01001401 '.')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001402
1403add_project_arguments('-include', 'config.h', language : 'c')
1404
Yu Watanabe6ec439f2018-11-28 20:19:41 +09001405generate_gperfs = find_program('tools/generate-gperfs.py')
1406
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001407subdir('po')
1408subdir('catalog')
1409subdir('src/systemd')
1410subdir('src/basic')
1411subdir('src/libsystemd')
1412subdir('src/libsystemd-network')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001413subdir('src/journal')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001414subdir('src/login')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001415
1416libjournal_core = static_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001417 'journal-core',
1418 libjournal_core_sources,
1419 journald_gperf_c,
1420 include_directories : includes,
1421 install : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001422
Davide Cavalca1485aac2019-02-27 11:19:07 -05001423libsystemd_sym_path = '@0@/@1@'.format(project_source_root, libsystemd_sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001424libsystemd = shared_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001425 'systemd',
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001426 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +02001427 version : libsystemd_version,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001428 include_directories : includes,
1429 link_args : ['-shared',
1430 '-Wl,--version-script=' + libsystemd_sym_path],
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001431 link_with : [libbasic,
1432 libbasic_gcrypt],
Zbigniew Jędrzejewski-Szmek5e3cec82017-12-19 19:38:43 +01001433 link_whole : [libsystemd_static,
1434 libjournal_client],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001435 dependencies : [threads,
1436 librt,
1437 libxz,
1438 liblz4],
1439 link_depends : libsystemd_sym,
1440 install : true,
1441 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001442
Davide Cavalca70848ec2018-04-09 02:43:35 -07001443static_libsystemd = get_option('static-libsystemd')
1444static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1445
1446install_libsystemd_static = static_library(
1447 'systemd',
1448 libsystemd_sources,
1449 journal_client_sources,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001450 basic_sources,
1451 basic_gcrypt_sources,
Yu Watanabebe44b572018-10-12 11:59:55 +09001452 disable_mempool_c,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001453 include_directories : includes,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001454 build_by_default : static_libsystemd != 'false',
1455 install : static_libsystemd != 'false',
1456 install_dir : rootlibdir,
1457 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1458 dependencies : [threads,
1459 librt,
1460 libxz,
1461 liblz4,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001462 libcap,
1463 libblkid,
1464 libmount,
1465 libselinux,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001466 libgcrypt],
1467 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1468
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001469############################################################
1470
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001471# binaries that have --help and are intended for use by humans,
1472# usually, but not always, installed in /bin.
1473public_programs = []
1474
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001475subdir('src/libudev')
1476subdir('src/shared')
1477subdir('src/core')
Lennart Poettering9e71f5d2019-03-05 12:12:33 +01001478subdir('src/shutdown')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001479subdir('src/udev')
1480subdir('src/network')
1481
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001482subdir('src/analyze')
1483subdir('src/journal-remote')
1484subdir('src/coredump')
1485subdir('src/hostname')
1486subdir('src/import')
1487subdir('src/kernel-install')
1488subdir('src/locale')
1489subdir('src/machine')
Lennart Poettering61d05782018-04-16 21:41:40 +02001490subdir('src/portable')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001491subdir('src/nspawn')
1492subdir('src/resolve')
1493subdir('src/timedate')
1494subdir('src/timesync')
1495subdir('src/vconsole')
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001496subdir('src/boot/efi')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001497
1498subdir('src/test')
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001499subdir('src/fuzz')
Zbigniew Jędrzejewski-Szmek6b97bf22017-11-22 12:42:28 +01001500subdir('rules')
Zbigniew Jędrzejewski-Szmek4ff3f252017-04-13 20:47:20 -04001501subdir('test')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001502
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001503############################################################
1504
1505# only static linking apart from libdl, to make sure that the
1506# module is linked to all libraries that it uses.
1507test_dlopen = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001508 'test-dlopen',
1509 test_dlopen_c,
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001510 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001511 include_directories : includes,
1512 link_with : [libbasic],
Yu Watanabefd1939f2018-09-12 21:47:56 +09001513 dependencies : [libdl],
1514 build_by_default : want_tests != 'false')
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001515
Yu Watanabe08540a92018-07-18 09:25:57 +09001516foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
Waldemar Brodkorbe7e11bb2017-06-24 19:30:26 +02001517 ['systemd', 'ENABLE_NSS_SYSTEMD'],
Yu Watanabe08540a92018-07-18 09:25:57 +09001518 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1519 ['resolve', 'ENABLE_NSS_RESOLVE']]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001520
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001521 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001522 if condition
1523 module = tuple[0]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001524
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001525 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
Davide Cavalca1485aac2019-02-27 11:19:07 -05001526 version_script_arg = join_paths(project_source_root, sym)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001527
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001528 nss = shared_library(
1529 'nss_' + module,
1530 'src/nss-@0@/nss-@0@.c'.format(module),
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001531 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001532 version : '2',
1533 include_directories : includes,
Lennart Poetteringb4b36f42017-12-12 20:13:16 +01001534 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1535 link_args : ['-Wl,-z,nodelete',
1536 '-shared',
Jussi Pakkanen700805f2019-04-06 21:59:06 +02001537 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001538 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001539 libbasic],
1540 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek5486a312017-05-12 08:31:46 -04001541 librt],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001542 link_depends : sym,
1543 install : true,
1544 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001545
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001546 # We cannot use shared_module because it does not support version suffix.
1547 # Unfortunately shared_library insists on creating the symlink…
1548 meson.add_install_script('sh', '-c',
1549 'rm $DESTDIR@0@/libnss_@1@.so'
1550 .format(rootlibdir, module))
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001551
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001552 if want_tests != 'false'
1553 test('dlopen-nss_' + module,
1554 test_dlopen,
1555 # path to dlopen must include a slash
1556 args : nss.full_path())
1557 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001558 endif
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001559endforeach
1560
1561############################################################
1562
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001563executable('systemd',
1564 systemd_sources,
1565 include_directories : includes,
1566 link_with : [libcore,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001567 libshared],
Michael Olbrich416d7d42019-02-25 11:59:23 +01001568 dependencies : [versiondep,
1569 threads,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001570 librt,
1571 libseccomp,
1572 libselinux,
Zbigniew Jędrzejewski-Szmekf4ee10a2017-04-09 14:08:53 -04001573 libmount,
1574 libblkid],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001575 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001576 install : true,
1577 install_dir : rootlibexecdir)
1578
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001579meson.add_install_script(meson_make_symlink,
1580 join_paths(rootlibexecdir, 'systemd'),
1581 join_paths(rootsbindir, 'init'))
1582
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001583exe = executable('systemd-analyze',
1584 systemd_analyze_sources,
1585 include_directories : includes,
1586 link_with : [libcore,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001587 libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01001588 dependencies : [versiondep,
1589 threads,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001590 librt,
1591 libseccomp,
1592 libselinux,
1593 libmount,
1594 libblkid],
1595 install_rpath : rootlibexecdir,
1596 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001597public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001598
1599executable('systemd-journald',
1600 systemd_journald_sources,
1601 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001602 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001603 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001604 dependencies : [threads,
1605 libxz,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001606 liblz4,
1607 libselinux],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001608 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001609 install : true,
1610 install_dir : rootlibexecdir)
1611
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001612exe = executable('systemd-cat',
1613 systemd_cat_sources,
1614 include_directories : includes,
1615 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001616 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001617 dependencies : [threads],
1618 install_rpath : rootlibexecdir,
1619 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001620public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001621
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001622exe = executable('journalctl',
1623 journalctl_sources,
1624 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001625 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001626 dependencies : [threads,
1627 libqrencode,
1628 libxz,
Zbigniew Jędrzejewski-Szmek6becf482018-01-12 07:55:45 +01001629 liblz4,
1630 libpcre2],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001631 install_rpath : rootlibexecdir,
1632 install : true,
1633 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001634public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001635
1636executable('systemd-getty-generator',
1637 'src/getty-generator/getty-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001638 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001639 link_with : [libshared],
1640 install_rpath : rootlibexecdir,
1641 install : true,
1642 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001643
1644executable('systemd-debug-generator',
1645 'src/debug-generator/debug-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001646 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001647 link_with : [libshared],
1648 install_rpath : rootlibexecdir,
1649 install : true,
1650 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001651
Lennart Poettering35a1ff42018-11-15 22:09:29 +01001652executable('systemd-run-generator',
1653 'src/run-generator/run-generator.c',
1654 include_directories : includes,
1655 link_with : [libshared],
1656 install_rpath : rootlibexecdir,
1657 install : true,
1658 install_dir : systemgeneratordir)
1659
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001660executable('systemd-fstab-generator',
1661 'src/fstab-generator/fstab-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001662 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01001663 link_with : [libcore_shared,
1664 libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001665 install_rpath : rootlibexecdir,
1666 install : true,
1667 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001668
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001669if conf.get('ENABLE_ENVIRONMENT_D') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001670 executable('30-systemd-environment-d-generator',
1671 'src/environment-d-generator/environment-d-generator.c',
1672 include_directories : includes,
1673 link_with : [libshared],
1674 install_rpath : rootlibexecdir,
1675 install : true,
1676 install_dir : userenvgeneratordir)
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04001677
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001678 meson.add_install_script(meson_make_symlink,
1679 join_paths(sysconfdir, 'environment'),
1680 join_paths(environmentdir, '99-environment.conf'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001681endif
1682
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001683if conf.get('ENABLE_HIBERNATE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001684 executable('systemd-hibernate-resume-generator',
1685 'src/hibernate-resume/hibernate-resume-generator.c',
1686 include_directories : includes,
1687 link_with : [libshared],
1688 install_rpath : rootlibexecdir,
1689 install : true,
1690 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001691
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001692 executable('systemd-hibernate-resume',
1693 'src/hibernate-resume/hibernate-resume.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001694 include_directories : includes,
1695 link_with : [libshared],
1696 install_rpath : rootlibexecdir,
1697 install : true,
1698 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001699endif
1700
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001701if conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001702 executable('systemd-gpt-auto-generator',
1703 'src/gpt-auto-generator/gpt-auto-generator.c',
Zbigniew Jędrzejewski-Szmekd284b822018-11-19 11:12:28 +01001704 'src/shared/blkid-util.h',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001705 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001706 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001707 dependencies : libblkid,
1708 install_rpath : rootlibexecdir,
1709 install : true,
1710 install_dir : systemgeneratordir)
1711
1712 exe = executable('systemd-dissect',
1713 'src/dissect/dissect.c',
1714 include_directories : includes,
1715 link_with : [libshared],
1716 install_rpath : rootlibexecdir,
1717 install : true,
1718 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001719 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001720endif
1721
Zbigniew Jędrzejewski-Szmek1ec57f32017-10-03 13:12:29 +02001722if conf.get('ENABLE_RESOLVE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001723 executable('systemd-resolved',
1724 systemd_resolved_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001725 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001726 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001727 libbasic_gcrypt,
1728 libsystemd_resolve_core],
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001729 dependencies : systemd_resolved_dependencies,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001730 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001731 install : true,
1732 install_dir : rootlibexecdir)
1733
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001734 exe = executable('resolvectl',
1735 resolvectl_sources,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001736 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001737 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001738 libbasic_gcrypt,
1739 libsystemd_resolve_core],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001740 dependencies : [threads,
Michael Biebl76c87412017-04-21 23:45:54 +02001741 libgpg_error,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001742 libm,
1743 libidn],
1744 install_rpath : rootlibexecdir,
1745 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001746 public_programs += exe
Lennart Poettering088c1362018-02-27 17:48:54 +01001747
1748 meson.add_install_script(meson_make_symlink,
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001749 join_paths(bindir, 'resolvectl'),
Lennart Poettering088c1362018-02-27 17:48:54 +01001750 join_paths(rootsbindir, 'resolvconf'))
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001751
1752 meson.add_install_script(meson_make_symlink,
1753 join_paths(bindir, 'resolvectl'),
1754 join_paths(bindir, 'systemd-resolve'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001755endif
1756
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001757if conf.get('ENABLE_LOGIND') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001758 executable('systemd-logind',
1759 systemd_logind_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001760 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001761 link_with : [liblogind_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001762 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001763 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001764 libacl],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001765 install_rpath : rootlibexecdir,
1766 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001767 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001768
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001769 exe = executable('loginctl',
1770 loginctl_sources,
1771 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001772 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001773 dependencies : [threads,
1774 liblz4,
1775 libxz],
1776 install_rpath : rootlibexecdir,
1777 install : true,
1778 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001779 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001780
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001781 exe = executable('systemd-inhibit',
1782 'src/login/inhibit.c',
1783 include_directories : includes,
1784 link_with : [libshared],
1785 install_rpath : rootlibexecdir,
1786 install : true,
1787 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001788 public_programs += exe
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001789
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001790 if conf.get('HAVE_PAM') == 1
Davide Cavalca1485aac2019-02-27 11:19:07 -05001791 version_script_arg = join_paths(project_source_root, pam_systemd_sym)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001792 pam_systemd = shared_library(
1793 'pam_systemd',
1794 pam_systemd_c,
1795 name_prefix : '',
1796 include_directories : includes,
1797 link_args : ['-shared',
1798 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001799 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001800 libshared_static],
1801 dependencies : [threads,
1802 libpam,
1803 libpam_misc],
1804 link_depends : pam_systemd_sym,
1805 install : true,
1806 install_dir : pamlibdir)
1807
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001808 if want_tests != 'false'
1809 test('dlopen-pam_systemd',
1810 test_dlopen,
1811 # path to dlopen must include a slash
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02001812 args : pam_systemd.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001813 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001814 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001815
Lennart Poettering07ee5ad2018-08-08 14:50:57 +02001816 executable('systemd-user-runtime-dir',
1817 user_runtime_dir_sources,
1818 include_directories : includes,
1819 link_with : [libshared],
1820 install_rpath : rootlibexecdir,
1821 install : true,
1822 install_dir : rootlibexecdir)
1823endif
Zbigniew Jędrzejewski-Szmeka9f0f5e2017-12-09 19:30:17 +01001824
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001825if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001826 executable('systemd-user-sessions',
1827 'src/user-sessions/user-sessions.c',
1828 include_directories : includes,
1829 link_with : [libshared],
1830 install_rpath : rootlibexecdir,
1831 install : true,
1832 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001833endif
1834
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001835if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001836 exe = executable('bootctl',
1837 'src/boot/bootctl.c',
1838 include_directories : includes,
1839 link_with : [libshared],
1840 dependencies : [libblkid],
1841 install_rpath : rootlibexecdir,
1842 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001843 public_programs += exe
Lennart Poettering36695e82018-06-25 17:24:09 +02001844
1845 executable('systemd-bless-boot',
1846 'src/boot/bless-boot.c',
1847 include_directories : includes,
1848 link_with : [libshared],
1849 dependencies : [libblkid],
1850 install_rpath : rootlibexecdir,
1851 install : true,
1852 install_dir : rootlibexecdir)
Lennart Poettering8d16ed02018-06-22 17:00:47 +02001853
1854 executable('systemd-bless-boot-generator',
1855 'src/boot/bless-boot-generator.c',
1856 include_directories : includes,
1857 link_with : [libshared],
1858 install_rpath : rootlibexecdir,
1859 install : true,
1860 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001861endif
1862
Lennart Poetteringf876f532018-06-25 16:07:33 +02001863executable('systemd-boot-check-no-failures',
1864 'src/boot/boot-check-no-failures.c',
1865 include_directories : includes,
1866 link_with : [libshared],
1867 dependencies : [libblkid],
1868 install_rpath : rootlibexecdir,
1869 install : true,
1870 install_dir : rootlibexecdir)
1871
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001872exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1873 include_directories : includes,
1874 link_with : [libshared],
1875 dependencies : [threads],
1876 install_rpath : rootlibexecdir,
1877 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001878public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001879
Felipe Satelerf3794362018-05-22 15:08:57 -04001880
1881if get_option('link-systemctl-shared')
1882 systemctl_link_with = [libshared]
1883else
1884 systemctl_link_with = [libsystemd_static,
1885 libshared_static,
1886 libjournal_client,
1887 libbasic_gcrypt]
1888endif
1889
Lennart Poettering63a3b3c2019-03-22 20:05:08 +01001890exe = executable('systemctl',
1891 'src/systemctl/systemctl.c',
1892 'src/systemctl/sysv-compat.h',
1893 'src/systemctl/sysv-compat.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001894 include_directories : includes,
Felipe Satelerf3794362018-05-22 15:08:57 -04001895 link_with : systemctl_link_with,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001896 dependencies : [threads,
1897 libcap,
1898 libselinux,
1899 libxz,
1900 liblz4],
1901 install_rpath : rootlibexecdir,
1902 install : true,
1903 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001904public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001905
Lennart Poettering61d05782018-04-16 21:41:40 +02001906if conf.get('ENABLE_PORTABLED') == 1
1907 executable('systemd-portabled',
1908 systemd_portabled_sources,
1909 include_directories : includes,
1910 link_with : [libshared],
1911 dependencies : [threads],
1912 install_rpath : rootlibexecdir,
1913 install : true,
1914 install_dir : rootlibexecdir)
1915
1916 exe = executable('portablectl', 'src/portable/portablectl.c',
1917 include_directories : includes,
1918 link_with : [libshared],
1919 dependencies : [threads],
1920 install_rpath : rootlibexecdir,
1921 install : true,
Lennart Poettering80f39b82018-10-08 17:28:44 +02001922 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001923 public_programs += exe
Lennart Poettering61d05782018-04-16 21:41:40 +02001924endif
1925
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001926foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1927 meson.add_install_script(meson_make_symlink,
1928 join_paths(rootbindir, 'systemctl'),
1929 join_paths(rootsbindir, alias))
1930endforeach
1931
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001932if conf.get('ENABLE_BACKLIGHT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001933 executable('systemd-backlight',
1934 'src/backlight/backlight.c',
1935 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001936 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001937 install_rpath : rootlibexecdir,
1938 install : true,
1939 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001940endif
1941
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001942if conf.get('ENABLE_RFKILL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001943 executable('systemd-rfkill',
1944 'src/rfkill/rfkill.c',
1945 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001946 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001947 install_rpath : rootlibexecdir,
1948 install : true,
1949 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001950endif
1951
1952executable('systemd-system-update-generator',
1953 'src/system-update-generator/system-update-generator.c',
1954 include_directories : includes,
1955 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001956 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001957 install : true,
1958 install_dir : systemgeneratordir)
1959
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001960if conf.get('HAVE_LIBCRYPTSETUP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001961 executable('systemd-cryptsetup',
1962 'src/cryptsetup/cryptsetup.c',
1963 include_directories : includes,
1964 link_with : [libshared],
1965 dependencies : [libcryptsetup],
1966 install_rpath : rootlibexecdir,
1967 install : true,
1968 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001969
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001970 executable('systemd-cryptsetup-generator',
1971 'src/cryptsetup/cryptsetup-generator.c',
1972 include_directories : includes,
1973 link_with : [libshared],
1974 dependencies : [libcryptsetup],
1975 install_rpath : rootlibexecdir,
1976 install : true,
1977 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001978
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001979 executable('systemd-veritysetup',
1980 'src/veritysetup/veritysetup.c',
1981 include_directories : includes,
1982 link_with : [libshared],
1983 dependencies : [libcryptsetup],
1984 install_rpath : rootlibexecdir,
1985 install : true,
1986 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001987
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001988 executable('systemd-veritysetup-generator',
1989 'src/veritysetup/veritysetup-generator.c',
1990 include_directories : includes,
1991 link_with : [libshared],
1992 dependencies : [libcryptsetup],
1993 install_rpath : rootlibexecdir,
1994 install : true,
1995 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001996endif
1997
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001998if conf.get('HAVE_SYSV_COMPAT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001999 executable('systemd-sysv-generator',
2000 'src/sysv-generator/sysv-generator.c',
2001 include_directories : includes,
2002 link_with : [libshared],
2003 install_rpath : rootlibexecdir,
2004 install : true,
2005 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002006
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002007 executable('systemd-rc-local-generator',
2008 'src/rc-local-generator/rc-local-generator.c',
2009 include_directories : includes,
2010 link_with : [libshared],
2011 install_rpath : rootlibexecdir,
2012 install : true,
2013 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002014endif
2015
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002016if conf.get('ENABLE_HOSTNAMED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002017 executable('systemd-hostnamed',
2018 'src/hostname/hostnamed.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002019 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002020 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002021 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002022 install : true,
2023 install_dir : rootlibexecdir)
2024
2025 exe = executable('hostnamectl',
2026 'src/hostname/hostnamectl.c',
2027 include_directories : includes,
2028 link_with : [libshared],
2029 install_rpath : rootlibexecdir,
2030 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002031 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002032endif
2033
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002034if conf.get('ENABLE_LOCALED') == 1
2035 if conf.get('HAVE_XKBCOMMON') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002036 # logind will load libxkbcommon.so dynamically on its own
2037 deps = [libdl]
2038 else
2039 deps = []
2040 endif
Zbigniew Jędrzejewski-Szmek1eeb43f2017-04-13 19:37:14 -04002041
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002042 executable('systemd-localed',
2043 systemd_localed_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002044 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002045 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002046 dependencies : deps,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002047 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002048 install : true,
2049 install_dir : rootlibexecdir)
2050
2051 exe = executable('localectl',
2052 localectl_sources,
2053 include_directories : includes,
2054 link_with : [libshared],
2055 install_rpath : rootlibexecdir,
2056 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002057 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002058endif
2059
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002060if conf.get('ENABLE_TIMEDATED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002061 executable('systemd-timedated',
2062 'src/timedate/timedated.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002063 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002064 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002065 install_rpath : rootlibexecdir,
2066 install : true,
2067 install_dir : rootlibexecdir)
Yu Watanabe6129ec82018-05-03 18:07:43 +09002068endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002069
Yu Watanabe6129ec82018-05-03 18:07:43 +09002070if conf.get('ENABLE_TIMEDATECTL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002071 exe = executable('timedatectl',
2072 'src/timedate/timedatectl.c',
2073 include_directories : includes,
2074 install_rpath : rootlibexecdir,
2075 link_with : [libshared],
Yu Watanabe6129ec82018-05-03 18:07:43 +09002076 dependencies : [libm],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002077 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002078 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002079endif
2080
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002081if conf.get('ENABLE_TIMESYNCD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002082 executable('systemd-timesyncd',
2083 systemd_timesyncd_sources,
2084 include_directories : includes,
2085 link_with : [libshared],
2086 dependencies : [threads,
2087 libm],
2088 install_rpath : rootlibexecdir,
2089 install : true,
2090 install_dir : rootlibexecdir)
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05002091
2092 executable('systemd-time-wait-sync',
2093 'src/time-wait-sync/time-wait-sync.c',
2094 include_directories : includes,
2095 link_with : [libshared],
2096 install_rpath : rootlibexecdir,
2097 install : true,
2098 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002099endif
2100
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002101if conf.get('ENABLE_MACHINED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002102 executable('systemd-machined',
2103 systemd_machined_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002104 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002105 link_with : [libmachine_core,
2106 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002107 install_rpath : rootlibexecdir,
2108 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002109 install_dir : rootlibexecdir)
2110
2111 exe = executable('machinectl',
2112 'src/machine/machinectl.c',
2113 include_directories : includes,
2114 link_with : [libshared],
2115 dependencies : [threads,
2116 libxz,
2117 liblz4],
2118 install_rpath : rootlibexecdir,
2119 install : true,
2120 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002121 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002122endif
2123
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002124if conf.get('ENABLE_IMPORTD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002125 executable('systemd-importd',
2126 systemd_importd_sources,
2127 include_directories : includes,
2128 link_with : [libshared],
2129 dependencies : [threads],
2130 install_rpath : rootlibexecdir,
2131 install : true,
2132 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002133
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002134 systemd_pull = executable('systemd-pull',
2135 systemd_pull_sources,
2136 include_directories : includes,
2137 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002138 dependencies : [versiondep,
2139 libcurl,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002140 libz,
2141 libbzip2,
2142 libxz,
2143 libgcrypt],
2144 install_rpath : rootlibexecdir,
2145 install : true,
2146 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002147
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002148 systemd_import = executable('systemd-import',
2149 systemd_import_sources,
2150 include_directories : includes,
2151 link_with : [libshared],
2152 dependencies : [libcurl,
2153 libz,
2154 libbzip2,
2155 libxz],
2156 install_rpath : rootlibexecdir,
2157 install : true,
2158 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002159
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002160 systemd_import_fs = executable('systemd-import-fs',
2161 systemd_import_fs_sources,
2162 include_directories : includes,
2163 link_with : [libshared],
2164 install_rpath : rootlibexecdir,
2165 install : true,
2166 install_dir : rootlibexecdir)
2167
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002168 systemd_export = executable('systemd-export',
2169 systemd_export_sources,
2170 include_directories : includes,
2171 link_with : [libshared],
2172 dependencies : [libcurl,
2173 libz,
2174 libbzip2,
2175 libxz],
2176 install_rpath : rootlibexecdir,
2177 install : true,
2178 install_dir : rootlibexecdir)
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002179
2180 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002181endif
2182
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002183if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002184 exe = executable('systemd-journal-upload',
2185 systemd_journal_upload_sources,
2186 include_directories : includes,
2187 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002188 dependencies : [versiondep,
2189 threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002190 libcurl,
2191 libgnutls,
2192 libxz,
2193 liblz4],
2194 install_rpath : rootlibexecdir,
2195 install : true,
2196 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002197 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002198endif
2199
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002200if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002201 s_j_remote = executable('systemd-journal-remote',
2202 systemd_journal_remote_sources,
2203 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc064d8d2018-05-16 10:21:58 +02002204 link_with : [libshared,
2205 libsystemd_journal_remote],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002206 dependencies : [threads,
2207 libmicrohttpd,
2208 libgnutls,
2209 libxz,
2210 liblz4],
2211 install_rpath : rootlibexecdir,
2212 install : true,
2213 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002214
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002215 s_j_gatewayd = executable('systemd-journal-gatewayd',
2216 systemd_journal_gatewayd_sources,
2217 include_directories : includes,
2218 link_with : [libshared],
2219 dependencies : [threads,
2220 libmicrohttpd,
2221 libgnutls,
2222 libxz,
2223 liblz4],
2224 install_rpath : rootlibexecdir,
2225 install : true,
2226 install_dir : rootlibexecdir)
2227 public_programs += [s_j_remote, s_j_gatewayd]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002228endif
2229
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002230if conf.get('ENABLE_COREDUMP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002231 executable('systemd-coredump',
2232 systemd_coredump_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002233 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002234 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002235 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002236 libacl,
2237 libdw,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002238 libxz,
2239 liblz4],
2240 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002241 install : true,
2242 install_dir : rootlibexecdir)
2243
2244 exe = executable('coredumpctl',
2245 coredumpctl_sources,
2246 include_directories : includes,
2247 link_with : [libshared],
2248 dependencies : [threads,
2249 libxz,
2250 liblz4],
2251 install_rpath : rootlibexecdir,
2252 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002253 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002254endif
2255
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002256if conf.get('ENABLE_BINFMT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002257 exe = executable('systemd-binfmt',
2258 'src/binfmt/binfmt.c',
2259 include_directories : includes,
2260 link_with : [libshared],
2261 install_rpath : rootlibexecdir,
2262 install : true,
2263 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002264 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002265
2266 meson.add_install_script('sh', '-c',
2267 mkdir_p.format(binfmtdir))
2268 meson.add_install_script('sh', '-c',
2269 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2270endif
2271
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002272if conf.get('ENABLE_VCONSOLE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002273 executable('systemd-vconsole-setup',
2274 'src/vconsole/vconsole-setup.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002275 include_directories : includes,
2276 link_with : [libshared],
2277 install_rpath : rootlibexecdir,
2278 install : true,
2279 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002280endif
2281
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002282if conf.get('ENABLE_RANDOMSEED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002283 executable('systemd-random-seed',
2284 'src/random-seed/random-seed.c',
2285 include_directories : includes,
2286 link_with : [libshared],
2287 install_rpath : rootlibexecdir,
2288 install : true,
2289 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002290endif
2291
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002292if conf.get('ENABLE_FIRSTBOOT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002293 executable('systemd-firstboot',
2294 'src/firstboot/firstboot.c',
2295 include_directories : includes,
2296 link_with : [libshared],
2297 dependencies : [libcrypt],
2298 install_rpath : rootlibexecdir,
2299 install : true,
2300 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002301endif
2302
2303executable('systemd-remount-fs',
2304 'src/remount-fs/remount-fs.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002305 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002306 link_with : [libcore_shared,
2307 libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002308 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002309 install : true,
2310 install_dir : rootlibexecdir)
2311
2312executable('systemd-machine-id-setup',
2313 'src/machine-id-setup/machine-id-setup-main.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002314 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002315 link_with : [libcore_shared,
2316 libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002317 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002318 install : true,
2319 install_dir : rootbindir)
2320
2321executable('systemd-fsck',
2322 'src/fsck/fsck.c',
2323 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002324 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002325 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002326 install : true,
2327 install_dir : rootlibexecdir)
2328
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002329executable('systemd-growfs',
2330 'src/partition/growfs.c',
2331 include_directories : includes,
2332 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekc34b75a2017-11-21 18:56:52 +01002333 dependencies : [libcryptsetup],
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002334 install_rpath : rootlibexecdir,
2335 install : true,
2336 install_dir : rootlibexecdir)
2337
Zbigniew Jędrzejewski-Szmekb7f28ac2017-11-26 22:51:29 +01002338executable('systemd-makefs',
2339 'src/partition/makefs.c',
2340 include_directories : includes,
2341 link_with : [libshared],
2342 install_rpath : rootlibexecdir,
2343 install : true,
2344 install_dir : rootlibexecdir)
2345
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002346executable('systemd-sleep',
2347 'src/sleep/sleep.c',
2348 include_directories : includes,
2349 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002350 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002351 install : true,
2352 install_dir : rootlibexecdir)
2353
Yu Watanabed25e1272019-01-03 02:32:57 +09002354install_data('src/sleep/sleep.conf',
2355 install_dir : pkgsysconfdir)
2356
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002357exe = executable('systemd-sysctl',
2358 'src/sysctl/sysctl.c',
2359 include_directories : includes,
2360 link_with : [libshared],
2361 install_rpath : rootlibexecdir,
2362 install : true,
2363 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002364public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002365
2366executable('systemd-ac-power',
2367 'src/ac-power/ac-power.c',
2368 include_directories : includes,
2369 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002370 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002371 install : true,
2372 install_dir : rootlibexecdir)
2373
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002374exe = executable('systemd-detect-virt',
2375 'src/detect-virt/detect-virt.c',
2376 include_directories : includes,
2377 link_with : [libshared],
2378 install_rpath : rootlibexecdir,
2379 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002380public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002381
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002382exe = executable('systemd-delta',
2383 'src/delta/delta.c',
2384 include_directories : includes,
2385 link_with : [libshared],
2386 install_rpath : rootlibexecdir,
2387 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002388public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002389
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002390exe = executable('systemd-escape',
2391 'src/escape/escape.c',
2392 include_directories : includes,
2393 link_with : [libshared],
2394 install_rpath : rootlibexecdir,
2395 install : true,
2396 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002397public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002398
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002399exe = executable('systemd-notify',
2400 'src/notify/notify.c',
2401 include_directories : includes,
2402 link_with : [libshared],
2403 install_rpath : rootlibexecdir,
2404 install : true,
2405 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002406public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002407
2408executable('systemd-volatile-root',
2409 'src/volatile-root/volatile-root.c',
2410 include_directories : includes,
2411 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002412 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002413 install : true,
2414 install_dir : rootlibexecdir)
2415
2416executable('systemd-cgroups-agent',
2417 'src/cgroups-agent/cgroups-agent.c',
2418 include_directories : includes,
2419 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002420 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002421 install : true,
2422 install_dir : rootlibexecdir)
2423
Zbigniew Jędrzejewski-Szmek0d1d5122018-08-21 16:08:48 +02002424exe = executable('systemd-id128',
2425 'src/id128/id128.c',
2426 include_directories : includes,
2427 link_with : [libshared],
2428 install_rpath : rootlibexecdir,
2429 install : true)
2430public_programs += exe
2431
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002432exe = executable('systemd-path',
2433 'src/path/path.c',
2434 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002435 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002436 install_rpath : rootlibexecdir,
2437 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002438public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002439
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002440exe = executable('systemd-ask-password',
2441 'src/ask-password/ask-password.c',
2442 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002443 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002444 install_rpath : rootlibexecdir,
2445 install : true,
2446 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002447public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002448
2449executable('systemd-reply-password',
2450 'src/reply-password/reply-password.c',
2451 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002452 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002453 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002454 install : true,
2455 install_dir : rootlibexecdir)
2456
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002457exe = executable('systemd-tty-ask-password-agent',
2458 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2459 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002460 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002461 install_rpath : rootlibexecdir,
2462 install : true,
2463 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002464public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002465
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002466exe = executable('systemd-cgls',
2467 'src/cgls/cgls.c',
2468 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002469 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002470 install_rpath : rootlibexecdir,
2471 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002472public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002473
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002474exe = executable('systemd-cgtop',
2475 'src/cgtop/cgtop.c',
2476 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002477 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002478 install_rpath : rootlibexecdir,
2479 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002480public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002481
2482executable('systemd-initctl',
2483 'src/initctl/initctl.c',
2484 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002485 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002486 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002487 install : true,
2488 install_dir : rootlibexecdir)
2489
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002490exe = executable('systemd-mount',
2491 'src/mount/mount-tool.c',
2492 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002493 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek7d991d42019-04-04 13:41:47 +02002494 dependencies: [libmount],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002495 install_rpath : rootlibexecdir,
2496 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002497public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002498
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002499meson.add_install_script(meson_make_symlink,
Michael Bieble17e5ba2017-04-13 10:30:56 -04002500 'systemd-mount', join_paths(bindir, 'systemd-umount'))
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002501
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002502exe = executable('systemd-run',
2503 'src/run/run.c',
2504 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002505 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002506 install_rpath : rootlibexecdir,
2507 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002508public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002509
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002510exe = executable('systemd-stdio-bridge',
2511 'src/stdio-bridge/stdio-bridge.c',
2512 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002513 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002514 dependencies : [versiondep],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002515 install_rpath : rootlibexecdir,
2516 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002517public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002518
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002519exe = executable('busctl',
2520 'src/busctl/busctl.c',
2521 'src/busctl/busctl-introspect.c',
2522 'src/busctl/busctl-introspect.h',
2523 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002524 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002525 install_rpath : rootlibexecdir,
2526 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002527public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002528
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002529if conf.get('ENABLE_SYSUSERS') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002530 exe = executable('systemd-sysusers',
2531 'src/sysusers/sysusers.c',
2532 include_directories : includes,
2533 link_with : [libshared],
2534 install_rpath : rootlibexecdir,
2535 install : true,
2536 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002537 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002538endif
2539
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002540if conf.get('ENABLE_TMPFILES') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002541 exe = executable('systemd-tmpfiles',
2542 'src/tmpfiles/tmpfiles.c',
2543 include_directories : includes,
2544 link_with : [libshared],
2545 dependencies : [libacl],
2546 install_rpath : rootlibexecdir,
2547 install : true,
2548 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002549 public_programs += exe
Zbigniew Jędrzejewski-Szmekd9daae52017-11-22 14:13:32 +01002550
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002551 if want_tests != 'false'
2552 test('test-systemd-tmpfiles',
2553 test_systemd_tmpfiles_py,
2554 # https://github.com/mesonbuild/meson/issues/2681
2555 args : exe.full_path())
2556 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002557endif
2558
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002559if conf.get('ENABLE_HWDB') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002560 exe = executable('systemd-hwdb',
2561 'src/hwdb/hwdb.c',
2562 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2563 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002564 link_with : [libudev_static],
Michael Biebl0da6f392017-04-21 18:32:14 +02002565 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002566 install : true,
2567 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002568 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002569endif
2570
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002571if conf.get('ENABLE_QUOTACHECK') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002572 executable('systemd-quotacheck',
2573 'src/quotacheck/quotacheck.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002574 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002575 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002576 install_rpath : rootlibexecdir,
2577 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002578 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002579endif
2580
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002581exe = executable('systemd-socket-proxyd',
2582 'src/socket-proxy/socket-proxyd.c',
2583 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002584 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002585 dependencies : [threads],
2586 install_rpath : rootlibexecdir,
2587 install : true,
2588 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002589public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002590
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002591exe = executable('systemd-udevd',
2592 systemd_udevd_sources,
2593 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002594 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002595 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002596 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002597 libudev_static],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002598 dependencies : [versiondep,
2599 threads,
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002600 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002601 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002602 libacl,
2603 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002604 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002605 install : true,
2606 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002607public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002608
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002609exe = executable('udevadm',
2610 udevadm_sources,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002611 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002612 include_directories : includes,
2613 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002614 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002615 libudev_static],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002616 dependencies : [versiondep,
2617 threads,
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002618 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002619 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002620 libacl,
2621 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002622 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002623 install : true,
2624 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002625public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002626
2627executable('systemd-shutdown',
2628 systemd_shutdown_sources,
2629 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002630 link_with : [libcore_shared,
2631 libshared],
Zbigniew Jędrzejewski-Szmek95b862b2018-03-14 11:32:30 +01002632 dependencies : [libmount],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002633 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002634 install : true,
2635 install_dir : rootlibexecdir)
2636
2637executable('systemd-update-done',
2638 'src/update-done/update-done.c',
2639 include_directories : includes,
2640 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002641 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002642 install : true,
2643 install_dir : rootlibexecdir)
2644
2645executable('systemd-update-utmp',
2646 'src/update-utmp/update-utmp.c',
2647 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002648 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002649 dependencies : [libaudit],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002650 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002651 install : true,
2652 install_dir : rootlibexecdir)
2653
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002654if conf.get('HAVE_KMOD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002655 executable('systemd-modules-load',
2656 'src/modules-load/modules-load.c',
2657 include_directories : includes,
2658 link_with : [libshared],
2659 dependencies : [libkmod],
2660 install_rpath : rootlibexecdir,
2661 install : true,
2662 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002663
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002664 meson.add_install_script('sh', '-c',
2665 mkdir_p.format(modulesloaddir))
2666 meson.add_install_script('sh', '-c',
2667 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002668endif
2669
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002670exe = executable('systemd-nspawn',
2671 systemd_nspawn_sources,
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02002672 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002673 link_with : [libcore_shared,
2674 libnspawn_core,
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02002675 libshared],
Franck Bui82384232019-03-22 11:09:08 +01002676 dependencies : [libblkid,
2677 libseccomp],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002678 install_rpath : rootlibexecdir,
2679 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002680public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002681
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002682if conf.get('ENABLE_NETWORKD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002683 executable('systemd-networkd',
2684 systemd_networkd_sources,
2685 include_directories : includes,
2686 link_with : [libnetworkd_core,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002687 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002688 libudev_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002689 libshared],
Zbigniew Jędrzejewski-Szmek4b57a272017-06-21 06:05:15 -04002690 dependencies : [threads],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002691 install_rpath : rootlibexecdir,
2692 install : true,
2693 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002694
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002695 executable('systemd-networkd-wait-online',
2696 systemd_networkd_wait_online_sources,
2697 include_directories : includes,
2698 link_with : [libnetworkd_core,
2699 libshared],
2700 install_rpath : rootlibexecdir,
2701 install : true,
2702 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002703
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002704 exe = executable('networkctl',
2705 networkctl_sources,
2706 include_directories : includes,
2707 link_with : [libsystemd_network,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002708 libshared],
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002709 install_rpath : rootlibexecdir,
2710 install : true,
2711 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002712 public_programs += exe
Yu Watanabe426c1d32019-07-13 03:35:04 +09002713
2714 executable('systemd-network-generator',
2715 network_generator_sources,
2716 include_directories : includes,
2717 link_with : [libshared],
2718 install_rpath : rootlibexecdir,
2719 install : true,
2720 install_dir : rootlibexecdir)
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002721endif
Zbigniew Jędrzejewski-Szmeke821f6a2017-12-07 10:44:43 +01002722
2723executable('systemd-sulogin-shell',
2724 ['src/sulogin-shell/sulogin-shell.c'],
2725 include_directories : includes,
2726 link_with : [libshared],
2727 install_rpath : rootlibexecdir,
2728 install : true,
2729 install_dir : rootlibexecdir)
2730
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002731############################################################
2732
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002733custom_target(
2734 'systemd-runtest.env',
2735 output : 'systemd-runtest.env',
2736 command : ['sh', '-c', '{ ' +
Davide Cavalca1485aac2019-02-27 11:19:07 -05002737 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
Filipe Brandenburger49cdae62018-09-12 00:23:40 -07002738 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002739 '} >@OUTPUT@'],
2740 build_by_default : true)
2741
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002742foreach tuple : tests
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002743 sources = tuple[0]
2744 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2745 dependencies = tuple[2]
2746 condition = tuple.length() >= 4 ? tuple[3] : ''
2747 type = tuple.length() >= 5 ? tuple[4] : ''
2748 defs = tuple.length() >= 6 ? tuple[5] : []
2749 incs = tuple.length() >= 7 ? tuple[6] : includes
2750 timeout = 30
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002751
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002752 name = sources[0].split('/')[-1].split('.')[0]
2753 if type.startswith('timeout=')
2754 timeout = type.split('=')[1].to_int()
2755 type = ''
2756 endif
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002757
2758 if condition == '' or conf.get(condition) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002759 exe = executable(
2760 name,
2761 sources,
2762 include_directories : incs,
2763 link_with : link_with,
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002764 dependencies : [versiondep,
2765 dependencies],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002766 c_args : defs,
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002767 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002768 install_rpath : rootlibexecdir,
Michael Biebl7cdd9782017-06-23 03:23:30 +02002769 install : install_tests,
2770 install_dir : join_paths(testsdir, type))
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04002771
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002772 if type == 'manual'
2773 message('@0@ is a manual test'.format(name))
2774 elif type == 'unsafe' and want_tests != 'unsafe'
2775 message('@0@ is an unsafe test'.format(name))
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002776 elif want_tests != 'false'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002777 test(name, exe,
2778 env : test_env,
2779 timeout : timeout)
2780 endif
2781 else
2782 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2783 endif
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002784endforeach
2785
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002786exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002787 'test-libsystemd-sym',
2788 test_libsystemd_sym_c,
2789 include_directories : includes,
2790 link_with : [libsystemd],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002791 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002792 install : install_tests,
2793 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002794if want_tests != 'false'
2795 test('test-libsystemd-sym', exe)
2796endif
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04002797
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002798exe = executable(
2799 'test-libsystemd-static-sym',
2800 test_libsystemd_sym_c,
2801 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002802 link_with : [install_libsystemd_static],
2803 dependencies : [threads], # threads is already included in dependencies on the library,
2804 # but does not seem to get propagated. Add here as a work-around.
Yu Watanabefd1939f2018-09-12 21:47:56 +09002805 build_by_default : want_tests != 'false' and static_libsystemd_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002806 install : install_tests and static_libsystemd_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002807 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002808if want_tests != 'false' and static_libsystemd_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002809 test('test-libsystemd-static-sym', exe)
2810endif
2811
2812exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002813 'test-libudev-sym',
2814 test_libudev_sym_c,
2815 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002816 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002817 link_with : [libudev],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002818 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002819 install : install_tests,
2820 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002821if want_tests != 'false'
2822 test('test-libudev-sym', exe)
2823endif
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002824
2825exe = executable(
2826 'test-libudev-static-sym',
2827 test_libudev_sym_c,
2828 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002829 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002830 link_with : [install_libudev_static],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002831 build_by_default : want_tests != 'false' and static_libudev_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002832 install : install_tests and static_libudev_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_libudev_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002835 test('test-libudev-static-sym', exe)
2836endif
Zbigniew Jędrzejewski-Szmeke0bec522017-04-10 15:20:42 -04002837
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002838############################################################
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002839
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002840fuzzer_exes = []
2841
Michael Olbrich59967402018-11-11 11:27:35 +01002842if get_option('tests') != 'false'
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002843foreach tuple : fuzzers
2844 sources = tuple[0]
2845 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2846 dependencies = tuple[2]
2847 defs = tuple.length() >= 4 ? tuple[3] : []
2848 incs = tuple.length() >= 5 ? tuple[4] : includes
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002849 link_args = []
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002850
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002851 if want_ossfuzz or want_fuzzbuzz
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002852 dependencies += fuzzing_engine
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002853 elif want_libfuzzer
2854 if fuzzing_engine.found()
2855 dependencies += fuzzing_engine
2856 else
2857 link_args += ['-fsanitize=fuzzer']
2858 endif
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002859 else
2860 sources += 'src/fuzz/fuzz-main.c'
2861 endif
2862
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00002863 if want_fuzzbuzz
2864 sources += 'src/fuzz/fuzzer-entry-point.c'
2865 endif
2866
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002867 name = sources[0].split('/')[-1].split('.')[0]
2868
2869 fuzzer_exes += executable(
2870 name,
2871 sources,
2872 include_directories : [incs, include_directories('src/fuzz')],
2873 link_with : link_with,
2874 dependencies : dependencies,
2875 c_args : defs,
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002876 link_args: link_args,
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002877 install : false)
2878endforeach
Michael Olbrich59967402018-11-11 11:27:35 +01002879endif
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002880
Zbigniew Jędrzejewski-Szmek63058f42019-01-05 13:20:52 +01002881run_target('fuzzers',
2882 depends : fuzzer_exes,
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002883 command : ['true'])
2884
2885############################################################
2886
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002887make_directive_index_py = find_program('tools/make-directive-index.py')
2888make_man_index_py = find_program('tools/make-man-index.py')
Zbigniew Jędrzejewski-Szmekb184e8f2017-04-13 19:59:21 -04002889xml_helper_py = find_program('tools/xml_helper.py')
Zbigniew Jędrzejewski-Szmekabba22c2017-04-15 00:40:59 -04002890hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002891
2892subdir('units')
2893subdir('sysctl.d')
2894subdir('sysusers.d')
2895subdir('tmpfiles.d')
Zbigniew Jędrzejewski-Szmeke783f952017-11-23 13:23:42 +01002896subdir('presets')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002897subdir('hwdb')
2898subdir('network')
2899subdir('man')
2900subdir('shell-completion/bash')
2901subdir('shell-completion/zsh')
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002902subdir('docs/sysvinit')
2903subdir('docs/var-log')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002904
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002905install_subdir('factory/etc',
2906 install_dir : factorydir)
2907
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002908install_data('xorg/50-systemd-user.sh',
2909 install_dir : xinitrcdir)
Dimitri John Ledkov582faeb2017-08-02 13:41:18 +01002910install_data('modprobe.d/systemd.conf',
2911 install_dir : modprobedir)
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002912install_data('LICENSE.GPL2',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002913 'LICENSE.LGPL2.1',
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002914 'NEWS',
2915 'README',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302916 'docs/CODING_STYLE.md',
Filipe Brandenburger1d1cb162018-09-07 01:22:34 -07002917 'docs/DISTRO_PORTING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002918 'docs/ENVIRONMENT.md',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302919 'docs/HACKING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002920 'docs/TRANSIENT-SETTINGS.md',
Filipe Brandenburgerb6dc0d72018-09-07 01:44:49 -07002921 'docs/TRANSLATORS.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002922 'docs/UIDS-GIDS.md',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002923 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2924 install_dir : docdir)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002925
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002926meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2927meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2928
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002929############################################################
2930
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002931meson_check_help = find_program('tools/meson-check-help.sh')
2932
2933foreach exec : public_programs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002934 name = exec.full_path().split('/')[-1]
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002935 if want_tests != 'false'
2936 test('check-help-' + name,
2937 meson_check_help,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002938 args : exec.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002939 endif
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002940endforeach
2941
2942############################################################
2943
Zbigniew Jędrzejewski-Szmekc6448ee2019-05-07 20:46:36 +02002944check_directives_sh = find_program('tools/check-directives.sh')
2945
2946if want_tests != 'false'
2947 test('check-directives',
2948 check_directives_sh,
2949 args : project_source_root)
2950endif
2951
2952############################################################
2953
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002954# Enable tests for all supported sanitizers
2955foreach tuple : sanitizers
2956 sanitizer = tuple[0]
2957 build = tuple[1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002958
Yu Watanabe7a6397d2018-05-15 20:18:24 +09002959 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002960 prev = ''
2961 foreach p : fuzz_regression_tests
2962 b = p.split('/')[-2]
2963 c = p.split('/')[-1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002964
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002965 name = '@0@:@1@'.format(b, sanitizer)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002966
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002967 if name != prev
2968 if want_tests == 'false'
2969 message('Not compiling @0@ because tests is set to false'.format(name))
2970 elif slow_tests
2971 exe = custom_target(
2972 name,
2973 output : name,
2974 depends : build,
2975 command : [env, 'ln', '-fs',
2976 join_paths(build.full_path(), b),
2977 '@OUTPUT@'],
2978 build_by_default : true)
2979 else
2980 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2981 endif
2982 endif
2983 prev = name
2984
2985 if want_tests != 'false' and slow_tests
2986 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2987 env,
2988 args : [exe.full_path(),
Davide Cavalca1485aac2019-02-27 11:19:07 -05002989 join_paths(project_source_root, p)])
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002990 endif
2991 endforeach
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002992 endif
2993endforeach
2994
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002995
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002996############################################################
2997
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04002998if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002999 all_files = run_command(
3000 git,
Davide Cavalca1485aac2019-02-27 11:19:07 -05003001 ['--git-dir=@0@/.git'.format(project_source_root),
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003002 'ls-files',
3003 ':/*.[ch]'])
3004 all_files = files(all_files.stdout().split())
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04003005
userwithuide85a6902017-08-09 13:41:44 +00003006 custom_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003007 'tags',
userwithuide85a6902017-08-09 13:41:44 +00003008 output : 'tags',
Davide Cavalca1485aac2019-02-27 11:19:07 -05003009 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
Evegeny Vereshchagin2f099742018-05-18 10:52:17 +00003010 run_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003011 'ctags',
Davide Cavalca1485aac2019-02-27 11:19:07 -05003012 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04003013endif
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003014
3015if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003016 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
Zbigniew Jędrzejewski-Szmeka923e082017-04-17 19:48:20 -04003017 run_target(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003018 'git-contrib',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003019 command : [meson_git_contrib_sh])
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003020endif
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003021
3022if git.found()
3023 git_head = run_command(
3024 git,
Davide Cavalca1485aac2019-02-27 11:19:07 -05003025 ['--git-dir=@0@/.git'.format(project_source_root),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003026 'rev-parse', 'HEAD']).stdout().strip()
3027 git_head_short = run_command(
3028 git,
Davide Cavalca1485aac2019-02-27 11:19:07 -05003029 ['--git-dir=@0@/.git'.format(project_source_root),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003030 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3031
3032 run_target(
3033 'git-snapshot',
3034 command : ['git', 'archive',
Davide Cavalca1485aac2019-02-27 11:19:07 -05003035 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003036 git_head_short),
3037 '--prefix', 'systemd-@0@/'.format(git_head),
3038 'HEAD'])
3039endif
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003040
3041############################################################
3042
Lennart Poettering51b13862017-12-20 12:51:14 +01003043meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
3044run_target(
3045 'check-api-docs',
3046 depends : [man, libsystemd, libudev],
3047 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
3048
3049############################################################
3050
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003051status = [
3052 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3053
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +01003054 'split /usr: @0@'.format(split_usr),
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +01003055 'split bin-sbin: @0@'.format(split_bin),
Yu Watanabe359b4962017-11-25 20:35:24 +09003056 'prefix directory: @0@'.format(prefixdir),
3057 'rootprefix directory: @0@'.format(rootprefixdir),
3058 'sysconf directory: @0@'.format(sysconfdir),
3059 'include directory: @0@'.format(includedir),
3060 'lib directory: @0@'.format(libdir),
3061 'rootlib directory: @0@'.format(rootlibdir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003062 'SysV init scripts: @0@'.format(sysvinit_path),
3063 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
Yu Watanabe359b4962017-11-25 20:35:24 +09003064 'PAM modules directory: @0@'.format(pamlibdir),
3065 'PAM configuration directory: @0@'.format(pamconfdir),
3066 'RPM macros directory: @0@'.format(rpmmacrosdir),
3067 'modprobe.d directory: @0@'.format(modprobedir),
3068 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3069 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3070 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3071 'bash completions directory: @0@'.format(bashcompletiondir),
3072 'zsh completions directory: @0@'.format(zshcompletiondir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003073 'extra start script: @0@'.format(get_option('rc-local')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003074 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3075 get_option('debug-tty')),
3076 'TTY GID: @0@'.format(tty_gid),
Yu Watanabeac093402018-05-10 16:04:16 +09003077 'users GID: @0@'.format(substs.get('USERS_GID')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003078 'maximum system UID: @0@'.format(system_uid_max),
3079 'maximum system GID: @0@'.format(system_gid_max),
Lennart Poettering87d5e4f2017-12-02 12:48:31 +01003080 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3081 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3082 'minimum container UID base: @0@'.format(container_uid_base_min),
3083 'maximum container UID base: @0@'.format(container_uid_base_max),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003084 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
Tom Stellard4e15a732017-10-31 08:46:24 -07003085 'render group access mode: @0@'.format(get_option('group-render-mode')),
Yu Watanabe359b4962017-11-25 20:35:24 +09003086 'certificate root directory: @0@'.format(get_option('certificate-root')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003087 'support URL: @0@'.format(support_url),
Lennart Poetteringafde4572017-12-05 11:00:24 +01003088 'nobody user name: @0@'.format(nobody_user),
3089 'nobody group name: @0@'.format(nobody_group),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003090 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -04003091 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003092
3093 'default DNSSEC mode: @0@'.format(default_dnssec),
Iwan Timmerc9299be2018-06-13 20:26:24 +02003094 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003095 'default cgroup hierarchy: @0@'.format(default_hierarchy),
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +01003096 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
Dave Reisner8ca9e922018-12-28 07:38:36 -05003097 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
3098 'default locale: @0@'.format(default_locale)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003099
3100alt_dns_servers = '\n '.join(dns_servers.split(' '))
3101alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3102status += [
3103 'default DNS servers: @0@'.format(alt_dns_servers),
3104 'default NTP servers: @0@'.format(alt_ntp_servers)]
3105
3106alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3107 '@@0@'.format(time_epoch)).stdout().strip()
3108status += [
3109 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3110
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003111status += [
Zbigniew Jędrzejewski-Szmekabc8caf2018-10-11 11:10:53 +02003112 'static libsystemd: @0@'.format(static_libsystemd),
3113 'static libudev: @0@'.format(static_libudev)]
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003114
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003115# TODO:
3116# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3117# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3118# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3119
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003120if conf.get('ENABLE_EFI') == 1
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003121 status += 'efi arch: @0@'.format(efi_arch)
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003122
3123 if have_gnu_efi
3124 status += [
3125 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
Zbigniew Jędrzejewski-Szmekc512dfb2018-12-18 00:02:11 +01003126 'EFI CC @0@'.format(' '.join(efi_cc)),
Yu Watanabe359b4962017-11-25 20:35:24 +09003127 'EFI lib directory: @0@'.format(efi_libdir),
3128 'EFI lds directory: @0@'.format(efi_ldsdir),
3129 'EFI include directory: @0@'.format(efi_incdir)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003130 endif
3131endif
3132
3133found = []
3134missing = []
3135
3136foreach tuple : [
3137 ['libcryptsetup'],
3138 ['PAM'],
3139 ['AUDIT'],
3140 ['IMA'],
3141 ['AppArmor'],
3142 ['SELinux'],
3143 ['SECCOMP'],
3144 ['SMACK'],
3145 ['zlib'],
3146 ['xz'],
3147 ['lz4'],
3148 ['bzip2'],
3149 ['ACL'],
3150 ['gcrypt'],
3151 ['qrencode'],
3152 ['microhttpd'],
3153 ['gnutls'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003154 ['openssl'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003155 ['libcurl'],
Zbigniew Jędrzejewski-Szmekd1bf5672017-06-16 09:16:28 -04003156 ['idn'],
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -04003157 ['libidn2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003158 ['libidn'],
3159 ['libiptc'],
3160 ['elfutils'],
3161 ['binfmt'],
3162 ['vconsole'],
3163 ['quotacheck'],
3164 ['tmpfiles'],
3165 ['environment.d'],
3166 ['sysusers'],
3167 ['firstboot'],
3168 ['randomseed'],
3169 ['backlight'],
3170 ['rfkill'],
3171 ['logind'],
3172 ['machined'],
Lennart Poettering61d05782018-04-16 21:41:40 +02003173 ['portabled'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003174 ['importd'],
3175 ['hostnamed'],
3176 ['timedated'],
3177 ['timesyncd'],
3178 ['localed'],
3179 ['networkd'],
Yu Watanabea7456af2017-10-06 16:33:21 +09003180 ['resolve'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003181 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3182 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003183 ['coredump'],
3184 ['polkit'],
3185 ['legacy pkla', install_polkit_pkla],
3186 ['efi'],
3187 ['gnu-efi', have_gnu_efi],
3188 ['kmod'],
3189 ['xkbcommon'],
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01003190 ['pcre2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003191 ['blkid'],
3192 ['dbus'],
3193 ['glib'],
Zbigniew Jędrzejewski-Szmek6bd2bc82018-08-07 18:10:53 +02003194 ['nss-myhostname'],
3195 ['nss-mymachines'],
3196 ['nss-resolve'],
3197 ['nss-systemd'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003198 ['hwdb'],
3199 ['tpm'],
3200 ['man pages', want_man],
3201 ['html pages', want_html],
3202 ['man page indices', want_man and have_lxml],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003203 ['SysV compat'],
3204 ['utmp'],
3205 ['ldconfig'],
3206 ['hibernate'],
3207 ['adm group', get_option('adm-group')],
3208 ['wheel group', get_option('wheel-group')],
Franck Buib14e1b42017-05-09 14:02:37 +02003209 ['gshadow'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003210 ['debug hashmap'],
3211 ['debug mmap cache'],
Yu Watanabed6601492018-11-23 00:36:35 +09003212 ['debug siphash'],
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +02003213 ['valgrind', conf.get('VALGRIND') == 1],
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +02003214 ['trace logging', conf.get('LOG_TRACE') == 1],
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003215 ['link-udev-shared', get_option('link-udev-shared')],
3216 ['link-systemctl-shared', get_option('link-systemctl-shared')],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003217]
3218
Zbigniew Jędrzejewski-Szmekaf4d7862018-03-09 14:21:08 +01003219 if tuple.length() >= 2
3220 cond = tuple[1]
3221 else
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003222 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3223 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003224 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003225 endif
3226 if cond
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003227 found += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003228 else
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003229 missing += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003230 endif
3231endforeach
3232
3233status += [
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003234 '',
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003235 'enabled features: @0@'.format(', '.join(found)),
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003236 '',
3237 'disabled features: @0@'.format(', '.join(missing)),
3238 '']
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003239message('\n '.join(status))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003240
3241if rootprefixdir != rootprefix_default
Yu Watanabe8ea9fad2018-05-10 14:50:52 +09003242 warning('\n' +
3243 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3244 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3245 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003246endif