blob: bffa9c2d3e835395f137d5bb77e8e7f4aa707809 [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')
120varlogdir = join_paths(localstatedir, 'log')
121xinitrcdir = join_paths(sysconfdir, 'X11/xinit/xinitrc.d')
Yu Watanabe8a38aac2017-11-23 22:20:22 +0900122rpmmacrosdir = get_option('rpmmacrosdir')
123if rpmmacrosdir != 'no'
124 rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
125endif
Michael Biebl02fa0542017-10-21 08:32:50 +0200126modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400127
128# Our own paths
Michael Bieble17e5ba2017-04-13 10:30:56 -0400129pkgdatadir = join_paths(datadir, 'systemd')
130environmentdir = join_paths(prefixdir, 'lib/environment.d')
131pkgsysconfdir = join_paths(sysconfdir, 'systemd')
132userunitdir = join_paths(prefixdir, 'lib/systemd/user')
133userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
134tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
135sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
136sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
137binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
138modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
139networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
140pkgincludedir = join_paths(includedir, 'systemd')
141systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
142usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
143systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
144userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
145systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
146systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
147systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
148systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
149udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400150udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
151udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
152catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
153kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
154factorydir = join_paths(datadir, 'factory')
Michael Bieble17e5ba2017-04-13 10:30:56 -0400155bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
156testsdir = join_paths(prefixdir, 'lib/systemd/tests')
157systemdstatedir = join_paths(localstatedir, 'lib/systemd')
158catalogstatedir = join_paths(systemdstatedir, 'catalog')
159randomseeddir = join_paths(localstatedir, 'lib/systemd')
Lennart Poettering61d05782018-04-16 21:41:40 +0200160profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400161
tblume75aaade2018-02-01 22:46:15 +0100162docdir = get_option('docdir')
163if docdir == ''
164 docdir = join_paths(datadir, 'doc/systemd')
165endif
166
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400167dbuspolicydir = get_option('dbuspolicydir')
168if dbuspolicydir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400169 dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400170endif
171
172dbussessionservicedir = get_option('dbussessionservicedir')
173if dbussessionservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400174 dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400175endif
176
177dbussystemservicedir = get_option('dbussystemservicedir')
178if dbussystemservicedir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400179 dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400180endif
181
182pamlibdir = get_option('pamlibdir')
183if pamlibdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400184 pamlibdir = join_paths(rootlibdir, 'security')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400185endif
186
187pamconfdir = get_option('pamconfdir')
188if pamconfdir == ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400189 pamconfdir = join_paths(sysconfdir, 'pam.d')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400190endif
191
Zbigniew Jędrzejewski-Szmek444d5862018-02-15 11:43:08 +0100192memory_accounting_default = get_option('memory-accounting-default')
193
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-Szmek5c231282017-04-04 23:03:47 -0400246
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400247substs.set('prefix', prefixdir)
Zbigniew Jędrzejewski-Szmek1c2c7c62018-11-17 15:38:15 +0100248substs.set('rootprefix', rootprefixdir)
Zbigniew Jędrzejewski-Szmek23bdba62019-03-05 16:46:52 +0100249substs.set('rootprefix_noslash', rootprefixdir_noslash)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400250substs.set('exec_prefix', prefixdir)
251substs.set('libdir', libdir)
252substs.set('rootlibdir', rootlibdir)
253substs.set('includedir', includedir)
Zbigniew Jędrzejewski-Szmek1c2c7c62018-11-17 15:38:15 +0100254substs.set('sysconfdir', sysconfdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400255substs.set('bindir', bindir)
256substs.set('rootbindir', rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400257substs.set('rootlibexecdir', rootlibexecdir)
258substs.set('systemunitdir', systemunitdir)
259substs.set('userunitdir', userunitdir)
260substs.set('systempresetdir', systempresetdir)
261substs.set('userpresetdir', userpresetdir)
262substs.set('udevhwdbdir', udevhwdbdir)
263substs.set('udevrulesdir', udevrulesdir)
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400264substs.set('udevlibexecdir', udevlibexecdir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200265substs.set('environmentdir', environmentdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400266substs.set('catalogdir', catalogdir)
267substs.set('tmpfilesdir', tmpfilesdir)
268substs.set('sysusersdir', sysusersdir)
269substs.set('sysctldir', sysctldir)
270substs.set('binfmtdir', binfmtdir)
271substs.set('modulesloaddir', modulesloaddir)
Zbigniew Jędrzejewski-Szmek424e80b2018-05-19 17:02:37 +0200272substs.set('modprobedir', modprobedir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400273substs.set('systemgeneratordir', systemgeneratordir)
274substs.set('usergeneratordir', usergeneratordir)
275substs.set('systemenvgeneratordir', systemenvgeneratordir)
276substs.set('userenvgeneratordir', userenvgeneratordir)
277substs.set('systemshutdowndir', systemshutdowndir)
278substs.set('systemsleepdir', systemsleepdir)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400279substs.set('VARLOGDIR', varlogdir)
280substs.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-Szmekc02b6ee2018-10-17 10:21:48 +0200287substs.set('HIGH_RLIMIT_NOFILE', conf.get('HIGH_RLIMIT_NOFILE'))
Zbigniew Jędrzejewski-Szmeke9bbff12019-05-09 13:23:50 +0200288substs.set('BUILD_ROOT', meson.current_build_dir())
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400289
290#####################################################################
291
292cc = meson.get_compiler('c')
293pkgconfig = import('pkgconfig')
Zbigniew Jędrzejewski-Szmek6e2afb12017-04-24 21:03:35 -0400294check_compilation_sh = find_program('tools/meson-check-compilation.sh')
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100295meson_build_sh = find_program('tools/meson-build.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400296
Zbigniew Jędrzejewski-Szmekd3da2912018-09-12 11:02:58 +0200297want_tests = get_option('tests')
298slow_tests = want_tests != 'false' and get_option('slow-tests')
299install_tests = get_option('install-tests')
300
James Hilliard46e63a22018-12-27 09:16:20 +0800301if add_languages('cpp', required : fuzzer_build)
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +0200302 # Used only for tests
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200303 cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
Zbigniew Jędrzejewski-Szmek1b2acaa2018-10-09 18:48:09 +0200304else
Zbigniew Jędrzejewski-Szmek9b0ca012018-10-10 11:50:57 +0200305 cxx_cmd = ''
Zbigniew Jędrzejewski-Szmek94e25232017-05-13 13:23:28 -0400306endif
307
Jonathan Rudenberg31e57a32018-01-16 10:25:43 -0500308if want_libfuzzer
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +0200309 fuzzing_engine = meson.get_compiler('cpp').find_library('Fuzzer', required : false)
310 if fuzzing_engine.found()
311 add_project_arguments('-fsanitize-coverage=trace-pc-guard,trace-cmp', language : 'c')
312 elif cc.has_argument('-fsanitize=fuzzer-no-link')
313 add_project_arguments('-fsanitize=fuzzer-no-link', language : 'c')
314 else
315 error('Looks like neither libFuzzer nor -fsanitize=fuzzer-no-link is supported')
316 endif
Zbigniew Jędrzejewski-Szmekc09edc72018-10-10 11:56:45 +0200317elif want_ossfuzz
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -0500318 fuzzing_engine = meson.get_compiler('cpp').find_library('FuzzingEngine')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000319elif want_fuzzbuzz
320 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 -0500321endif
322
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900323possible_cc_flags = [
324 '-Wextra',
325 '-Werror=undef',
326 '-Wlogical-op',
327 '-Wmissing-include-dirs',
328 '-Wold-style-definition',
329 '-Wpointer-arith',
330 '-Winit-self',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900331 '-Wfloat-equal',
332 '-Wsuggest-attribute=noreturn',
333 '-Werror=missing-prototypes',
334 '-Werror=implicit-function-declaration',
335 '-Werror=missing-declarations',
336 '-Werror=return-type',
337 '-Werror=incompatible-pointer-types',
338 '-Werror=format=2',
339 '-Wstrict-prototypes',
340 '-Wredundant-decls',
341 '-Wmissing-noreturn',
342 '-Wimplicit-fallthrough=5',
343 '-Wshadow',
344 '-Wendif-labels',
345 '-Wstrict-aliasing=2',
346 '-Wwrite-strings',
347 '-Werror=overflow',
Zbigniew Jędrzejewski-Szmekb05ecb82018-06-09 13:12:52 +0200348 '-Werror=shift-count-overflow',
Zbigniew Jędrzejewski-Szmekd28b67d2018-06-11 13:17:43 +0200349 '-Werror=shift-overflow=2',
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900350 '-Wdate-time',
351 '-Wnested-externs',
Filipe Brandenburgerbf7efeb2018-09-08 13:55:09 -0700352
353 # negative arguments are correctly detected starting with meson 0.46.
354 '-Wno-unused-parameter',
355 '-Wno-missing-field-initializers',
356 '-Wno-unused-result',
357 '-Wno-format-signedness',
Zbigniew Jędrzejewski-Szmekeed33622019-03-07 10:56:15 +0100358 '-Wno-error=#warnings', # clang
359 '-Wno-string-plus-int', # clang
Filipe Brandenburgerbf7efeb2018-09-08 13:55:09 -0700360
361 # work-around for gcc 7.1 turning this on on its own.
362 '-Wno-error=nonnull',
363
364 # Disable -Wmaybe-uninitialized, since it's noisy on gcc 8 with
365 # optimizations enabled, producing essentially false positives.
366 '-Wno-maybe-uninitialized',
367
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900368 '-ffast-math',
369 '-fno-common',
370 '-fdiagnostics-show-option',
371 '-fno-strict-aliasing',
372 '-fvisibility=hidden',
373 '-fstack-protector',
374 '-fstack-protector-strong',
375 '--param=ssp-buffer-size=4',
376]
377
378# --as-needed and --no-undefined are provided by meson by default,
379# run mesonconf to see what is enabled
380possible_link_flags = [
381 '-Wl,-z,relro',
382 '-Wl,-z,now',
383]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400384
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900385if cc.get_id() == 'clang'
386 possible_cc_flags += [
387 '-Wno-typedef-redefinition',
388 '-Wno-gnu-variable-sized-type-not-at-end',
389 ]
390endif
391
392if get_option('buildtype') != 'debug'
393 possible_cc_flags += [
394 '-ffunction-sections',
395 '-fdata-sections',
396 ]
397
398 possible_link_flags += '-Wl,--gc-sections'
399endif
400
Zbigniew Jędrzejewski-Szmeka73f6212019-03-28 09:44:02 +0100401if get_option('b_ndebug') == 'true'
402 # With asserts disabled with get a bunch of warnings about variables which
403 # are used only in the asserts. This is not useful at all, so let's just silence
404 # those warnings.
405 possible_cc_flags += [
406 '-Wno-unused-variable',
407 '-Wno-unused-but-set-variable',
408 ]
409endif
410
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900411add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
Yu Watanabe7a6397d2018-05-15 20:18:24 +0900412add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
Yu Watanabe30a4ddf2018-05-10 15:30:42 +0900413
Caio Marcelo de Oliveira Filho9e70f2f2018-02-19 01:37:19 -0800414if cc.compiles('''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400415 #include <time.h>
416 #include <inttypes.h>
417 typedef uint64_t usec_t;
418 usec_t now(clockid_t clock);
419 int main(void) {
420 struct timespec now;
421 return 0;
422 }
Fabrice Fontaine38c1c962018-11-29 13:22:08 +0100423''', args: '-Werror=shadow', name : '-Werror=shadow with local shadowing')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400424 add_project_arguments('-Werror=shadow', language : 'c')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400425endif
426
Zbigniew Jędrzejewski-Szmek0e3cc902018-10-11 15:12:41 +0200427cpp = ' '.join(cc.cmd_array()) + ' -E'
Zbigniew Jędrzejewski-Szmek9cc0e6e2017-04-11 10:25:34 -0400428
Zbigniew Jędrzejewski-Szmek6695c202019-05-07 15:10:58 +0200429has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
430
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400431#####################################################################
432# compilation result tests
433
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400434conf.set('_GNU_SOURCE', true)
435conf.set('__SANE_USERSPACE_TYPES__', true)
Zbigniew Jędrzejewski-Szmek6695c202019-05-07 15:10:58 +0200436conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400437
438conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
439conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
440conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
441conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
442conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
443conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
444conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
445
446decl_headers = '''
447#include <uchar.h>
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100448#include <sys/stat.h>
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400449'''
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400450
451foreach decl : ['char16_t',
452 'char32_t',
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100453 'struct statx',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400454 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400455
456 # We get -1 if the size cannot be determined
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200457 have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
458
459 if decl == 'struct statx'
460 if have
461 want_linux_stat_h = false
462 else
463 have = cc.sizeof(decl,
464 prefix : decl_headers + '#include <linux/stat.h>',
465 args : '-D_GNU_SOURCE') > 0
466 want_linux_stat_h = have
467 endif
468 endif
469
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200470 conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400471endforeach
472
Zbigniew Jędrzejewski-Szmek9c869d02018-07-18 17:26:17 +0200473conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
Filipe Brandenburger75720bf2018-07-15 22:43:35 -0700474
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400475foreach ident : ['secure_getenv', '__secure_getenv']
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200476 conf.set10('HAVE_' + ident.to_upper(), cc.has_function(ident))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400477endforeach
478
479foreach ident : [
Lennart Poettering85db59b2017-12-25 12:01:14 +0100480 ['memfd_create', '''#include <sys/mman.h>'''],
Lennart Poettering7b961e42017-12-25 12:35:28 +0100481 ['gettid', '''#include <sys/types.h>
482 #include <unistd.h>'''],
Lennart Poettering3c042ad2017-12-25 12:07:40 +0100483 ['pivot_root', '''#include <stdlib.h>
484 #include <unistd.h>'''], # no known header declares pivot_root
Lennart Poettering85db59b2017-12-25 12:01:14 +0100485 ['name_to_handle_at', '''#include <sys/types.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400486 #include <sys/stat.h>
487 #include <fcntl.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100488 ['setns', '''#include <sched.h>'''],
Lennart Poettering2acfd0f2017-12-25 12:35:43 +0100489 ['renameat2', '''#include <stdio.h>
490 #include <fcntl.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400491 ['kcmp', '''#include <linux/kcmp.h>'''],
492 ['keyctl', '''#include <sys/types.h>
493 #include <keyutils.h>'''],
Lennart Poettering85db59b2017-12-25 12:01:14 +0100494 ['copy_file_range', '''#include <sys/syscall.h>
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400495 #include <unistd.h>'''],
Daniel Mack71e52002016-10-18 17:57:10 +0200496 ['bpf', '''#include <sys/syscall.h>
497 #include <unistd.h>'''],
Lennart Poettering4c2e1b32018-02-20 12:48:33 +0100498 ['statx', '''#include <sys/types.h>
499 #include <sys/stat.h>
500 #include <unistd.h>'''],
Zbigniew Jędrzejewski-Szmekaa484f32018-02-26 21:20:00 +0100501 ['explicit_bzero' , '''#include <string.h>'''],
502 ['reallocarray', '''#include <malloc.h>'''],
Michal Sekletarb070c7c2019-03-12 18:58:26 +0100503 ['set_mempolicy', '''#include <stdlib.h>
504 #include <unistd.h>'''],
505 ['get_mempolicy', '''#include <stdlib.h>
506 #include <unistd.h>'''],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400507]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400508
Lennart Poettering85db59b2017-12-25 12:01:14 +0100509 have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200510 conf.set10('HAVE_' + ident[0].to_upper(), have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400511endforeach
512
Lennart Poettering85db59b2017-12-25 12:01:14 +0100513if cc.has_function('getrandom', prefix : '''#include <sys/random.h>''', args : '-D_GNU_SOURCE')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200514 conf.set10('USE_SYS_RANDOM_H', true)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200515 conf.set10('HAVE_GETRANDOM', true)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400516else
517 have = cc.has_function('getrandom', prefix : '''#include <linux/random.h>''')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200518 conf.set10('USE_SYS_RANDOM_H', false)
Zbigniew Jędrzejewski-Szmek4b9545f2017-10-03 10:32:34 +0200519 conf.set10('HAVE_GETRANDOM', have)
Zbigniew Jędrzejewski-Szmek4984c8b2017-04-19 21:20:54 -0400520endif
521
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400522#####################################################################
523
Davide Cavalca1485aac2019-02-27 11:19:07 -0500524vcs_tagger = [project_source_root + '/tools/meson-vcs-tag.sh',
525 project_source_root,
Zbigniew Jędrzejewski-Szmeke1ca7342018-12-19 13:33:09 +0100526 get_option('version-tag'),
Zbigniew Jędrzejewski-Szmek681bd2c2018-12-20 20:35:25 +0100527 meson.project_version()]
528
Louis Taylord1084aa2019-01-21 21:45:36 +0000529version_h = vcs_tag(
530 input : 'src/version/version.h.in',
531 output : 'version.h',
532 command: vcs_tagger)
533
534versiondep = declare_dependency(sources: version_h)
535
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400536sed = find_program('sed')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400537awk = find_program('awk')
Zbigniew Jędrzejewski-Szmekd730e2d2017-04-25 08:49:58 -0400538m4 = find_program('m4')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400539stat = find_program('stat')
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -0400540git = find_program('git', required : false)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +1100541env = find_program('env')
Zbigniew Jędrzejewski-Szmekb1ffacb2018-03-22 08:34:21 +0100542perl = find_program('perl', required : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400543
Davide Cavalca1485aac2019-02-27 11:19:07 -0500544meson_make_symlink = project_source_root + '/tools/meson-make-symlink.sh'
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400545mkdir_p = 'mkdir -p $DESTDIR/@0@'
Zbigniew Jędrzejewski-Szmekd83f4f52017-04-16 12:04:46 -0400546test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh')
547splash_bmp = files('test/splash.bmp')
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -0400548
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400549# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
550# /usr/sbin, /sbin, and fall back to the default from middle column.
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500551progs = [['quotaon', '/usr/sbin/quotaon' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400552 ['quotacheck', '/usr/sbin/quotacheck' ],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400553 ['kmod', '/usr/bin/kmod' ],
554 ['kexec', '/usr/sbin/kexec' ],
555 ['sulogin', '/usr/sbin/sulogin' ],
556 ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
557 ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
558 ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
559 ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
560 ]
561foreach prog : progs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400562 path = get_option(prog[0] + '-path')
563 if path != ''
564 message('Using @1@ for @0@'.format(prog[0], path))
565 else
566 exe = find_program(prog[0],
567 '/usr/sbin/' + prog[0],
568 '/sbin/' + prog[0],
569 required: false)
570 path = exe.found() ? exe.path() : prog[1]
571 endif
572 name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
573 conf.set_quoted(name, path)
574 substs.set(name, path)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400575endforeach
576
Mike Gilbert2fa645f2018-01-04 07:14:20 -0500577conf.set_quoted('TELINIT', get_option('telinit-path'))
578
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400579if run_command('ln', '--relative', '--help').returncode() != 0
Zbigniew Jędrzejewski-Szmekcd001012018-03-09 08:56:23 +0100580 error('ln does not support --relative (added in coreutils 8.16)')
Zbigniew Jędrzejewski-Szmek1276a9f2017-04-18 19:11:54 -0400581endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400582
583############################################################
584
585gperf = find_program('gperf')
586
587gperf_test_format = '''
588#include <string.h>
589const char * in_word_set(const char *, @0@);
590@1@
591'''
592gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
593gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
594gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
595if cc.compiles(gperf_test)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400596 gperf_len_type = 'size_t'
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400597else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400598 gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
599 if cc.compiles(gperf_test)
600 gperf_len_type = 'unsigned'
601 else
602 error('unable to determine gperf len type')
603 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400604endif
605message('gperf len type is @0@'.format(gperf_len_type))
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400606conf.set('GPERF_LEN_TYPE', gperf_len_type,
607 description : 'The type of gperf "len" parameter')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400608
609############################################################
610
611if not cc.has_header('sys/capability.h')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400612 error('POSIX caps headers not found')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400613endif
Björn Esser9f555bb2018-01-25 15:30:15 +0100614foreach header : ['crypt.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400615 'linux/memfd.h',
616 'linux/vm_sockets.h',
Zbigniew Jędrzejewski-Szmekaf8786b2017-10-03 12:09:40 +0200617 'sys/auxv.h',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400618 'valgrind/memcheck.h',
619 'valgrind/valgrind.h',
620 ]
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -0400621
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200622 conf.set10('HAVE_' + header.underscorify().to_upper(),
623 cc.has_header(header))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400624endforeach
625
626############################################################
627
628conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -0400629conf.set10('ENABLE_COMPAT_GATEWAY_HOSTNAME', get_option('compat-gateway-hostname'))
630gateway_hostnames = ['_gateway'] + (conf.get('ENABLE_COMPAT_GATEWAY_HOSTNAME') == 1 ? ['gateway'] : [])
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400631
632default_hierarchy = get_option('default-hierarchy')
633conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
634 description : 'default cgroup hierarchy as string')
635if default_hierarchy == 'legacy'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400636 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400637elif default_hierarchy == 'hybrid'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400638 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400639else
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400640 conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400641endif
642
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +0100643default_net_naming_scheme = get_option('default-net-naming-scheme')
644conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
645
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400646time_epoch = get_option('time-epoch')
Yu Watanabeac093402018-05-10 16:04:16 +0900647if time_epoch == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400648 NEWS = files('NEWS')
Yu Watanabeac093402018-05-10 16:04:16 +0900649 time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout().to_int()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400650endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400651conf.set('TIME_EPOCH', time_epoch)
652
653system_uid_max = get_option('system-uid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900654if system_uid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400655 system_uid_max = run_command(
656 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800657 '/^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
658 '/etc/login.defs').stdout().strip()
659 if system_uid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900660 system_uid_max = 999
661 else
662 system_uid_max = system_uid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800663 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400664endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400665conf.set('SYSTEM_UID_MAX', system_uid_max)
666substs.set('systemuidmax', system_uid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400667
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400668system_gid_max = get_option('system-gid-max')
Yu Watanabeac093402018-05-10 16:04:16 +0900669if system_gid_max == -1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400670 system_gid_max = run_command(
671 awk,
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800672 '/^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
673 '/etc/login.defs').stdout().strip()
674 if system_gid_max == ''
Yu Watanabeac093402018-05-10 16:04:16 +0900675 system_gid_max = 999
676 else
677 system_gid_max = system_gid_max.to_int()
Caio Marcelo de Oliveira Filho2f62cf32018-02-18 18:33:16 -0800678 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400679endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400680conf.set('SYSTEM_GID_MAX', system_gid_max)
681substs.set('systemgidmax', system_gid_max)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400682
Yu Watanabeac093402018-05-10 16:04:16 +0900683dynamic_uid_min = get_option('dynamic-uid-min')
684dynamic_uid_max = get_option('dynamic-uid-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100685conf.set('DYNAMIC_UID_MIN', dynamic_uid_min)
686conf.set('DYNAMIC_UID_MAX', dynamic_uid_max)
687substs.set('dynamicuidmin', dynamic_uid_min)
688substs.set('dynamicuidmax', dynamic_uid_max)
689
Yu Watanabeac093402018-05-10 16:04:16 +0900690container_uid_base_min = get_option('container-uid-base-min')
691container_uid_base_max = get_option('container-uid-base-max')
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100692conf.set('CONTAINER_UID_BASE_MIN', container_uid_base_min)
693conf.set('CONTAINER_UID_BASE_MAX', container_uid_base_max)
694substs.set('containeruidbasemin', container_uid_base_min)
695substs.set('containeruidbasemax', container_uid_base_max)
696
Lennart Poetteringafde4572017-12-05 11:00:24 +0100697nobody_user = get_option('nobody-user')
698nobody_group = get_option('nobody-group')
699
Chen Qi2484bff2018-07-23 14:53:09 +0800700if not meson.is_cross_build()
701 getent_result = run_command('getent', 'passwd', '65534')
702 if getent_result.returncode() == 0
703 name = getent_result.stdout().split(':')[0]
704 if name != nobody_user
705 warning('\n' +
706 '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) +
707 'Your build will result in an user table setup that is incompatible with the local system.')
708 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100709 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800710 id_result = run_command('id', '-u', nobody_user)
711 if id_result.returncode() == 0
712 id = id_result.stdout().to_int()
713 if id != 65534
714 warning('\n' +
715 '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) +
716 'Your build will result in an user table setup that is incompatible with the local system.')
717 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100718 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100719
Chen Qi2484bff2018-07-23 14:53:09 +0800720 getent_result = run_command('getent', 'group', '65534')
721 if getent_result.returncode() == 0
722 name = getent_result.stdout().split(':')[0]
723 if name != nobody_group
724 warning('\n' +
725 '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) +
726 'Your build will result in an group table setup that is incompatible with the local system.')
727 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100728 endif
Chen Qi2484bff2018-07-23 14:53:09 +0800729 id_result = run_command('id', '-g', nobody_group)
730 if id_result.returncode() == 0
731 id = id_result.stdout().to_int()
732 if id != 65534
733 warning('\n' +
734 '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) +
735 'Your build will result in an group table setup that is incompatible with the local system.')
736 endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100737 endif
738endif
Yu Watanabe8374cc62017-12-07 17:19:11 +0900739if nobody_user != nobody_group and not (nobody_user == 'nobody' and nobody_group == 'nogroup')
Yu Watanabe8ea9fad2018-05-10 14:50:52 +0900740 warning('\n' +
741 'The configured user name "@0@" and group name "@0@" of the nobody user/group are not equivalent.\n'.format(nobody_user, nobody_group) +
742 'Please re-check that both "nobody-user" and "nobody-group" options are correctly set.')
Yu Watanabe8374cc62017-12-07 17:19:11 +0900743endif
Lennart Poetteringafde4572017-12-05 11:00:24 +0100744
745conf.set_quoted('NOBODY_USER_NAME', nobody_user)
746conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
Yu Watanabe60712022017-12-07 15:49:16 +0900747substs.set('NOBODY_USER_NAME', nobody_user)
748substs.set('NOBODY_GROUP_NAME', nobody_group)
Lennart Poettering87d5e4f2017-12-02 12:48:31 +0100749
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400750tty_gid = get_option('tty-gid')
751conf.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400752substs.set('TTY_GID', tty_gid)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400753
Ikey Doherty84786b82017-12-03 12:28:23 +0000754# Ensure provided GID argument is numeric, otherwise fallback to default assignment
Yu Watanabeac093402018-05-10 16:04:16 +0900755users_gid = get_option('users-gid')
756substs.set('USERS_GID', users_gid < 0 ? '-' : users_gid)
Ikey Doherty84786b82017-12-03 12:28:23 +0000757
Yu Watanabe348b4432018-05-07 18:17:35 +0900758conf.set10('ENABLE_ADM_GROUP', get_option('adm-group'))
759conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400760
Michael Bieblace5e312018-07-13 23:36:13 +0200761dev_kvm_mode = get_option('dev-kvm-mode')
762substs.set('DEV_KVM_MODE', dev_kvm_mode)
763conf.set10('DEV_KVM_UACCESS', dev_kvm_mode != '0666')
Michael Biebl055a0832019-03-13 23:22:26 +0100764group_render_mode = get_option('group-render-mode')
765substs.set('GROUP_RENDER_MODE', group_render_mode)
766conf.set10('GROUP_RENDER_UACCESS', group_render_mode != '0666')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400767
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400768kill_user_processes = get_option('default-kill-user-processes')
769conf.set10('KILL_USER_PROCESSES', kill_user_processes)
Michal Koutnýc7f7e852018-03-09 16:40:41 +0100770conf.set_quoted('KILL_USER_PROCESSES_YES_NO', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek2a4c1562017-04-12 19:54:33 -0400771substs.set('KILL_USER_PROCESSES', kill_user_processes ? 'yes' : 'no')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400772
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400773dns_servers = get_option('dns-servers')
774conf.set_quoted('DNS_SERVERS', dns_servers)
775substs.set('DNS_SERVERS', dns_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400776
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -0400777ntp_servers = get_option('ntp-servers')
778conf.set_quoted('NTP_SERVERS', ntp_servers)
779substs.set('NTP_SERVERS', ntp_servers)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400780
Dave Reisner8ca9e922018-12-28 07:38:36 -0500781default_locale = get_option('default-locale')
Yu Watanabe03475e22018-12-29 22:00:07 +0900782if default_locale == ''
James Hilliard50f2fc72019-01-05 11:28:59 +0800783 if not meson.is_cross_build()
784 choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
785 default_locale = run_command(choose_default_locale_sh).stdout().strip()
786 else
787 default_locale = 'C.UTF-8'
788 endif
Yu Watanabe03475e22018-12-29 22:00:07 +0900789endif
Dave Reisner8ca9e922018-12-28 07:38:36 -0500790conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
791
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400792conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
793
Zbigniew Jędrzejewski-Szmek3131bfe2017-04-10 19:06:45 -0400794substs.set('SUSHELL', get_option('debug-shell'))
795substs.set('DEBUGTTY', get_option('debug-tty'))
796
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200797enable_debug_hashmap = false
798enable_debug_mmap_cache = false
Yu Watanabed6601492018-11-23 00:36:35 +0900799enable_debug_siphash = false
Zbigniew Jędrzejewski-Szmek8f6b4422018-08-19 19:11:30 +0200800foreach name : get_option('debug-extra')
Yu Watanabead7aa762018-05-02 13:56:28 +0900801 if name == 'hashmap'
802 enable_debug_hashmap = true
803 elif name == 'mmap-cache'
804 enable_debug_mmap_cache = true
Yu Watanabed6601492018-11-23 00:36:35 +0900805 elif name == 'siphash'
806 enable_debug_siphash = true
Yu Watanabead7aa762018-05-02 13:56:28 +0900807 else
808 message('unknown debug option "@0@", ignoring'.format(name))
809 endif
810endforeach
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200811conf.set10('ENABLE_DEBUG_HASHMAP', enable_debug_hashmap)
812conf.set10('ENABLE_DEBUG_MMAP_CACHE', enable_debug_mmap_cache)
Yu Watanabed6601492018-11-23 00:36:35 +0900813conf.set10('ENABLE_DEBUG_SIPHASH', enable_debug_siphash)
Zbigniew Jędrzejewski-Szmek671677d2017-04-27 20:51:34 -0400814
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200815conf.set10('VALGRIND', get_option('valgrind'))
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +0200816conf.set10('LOG_TRACE', get_option('log-trace'))
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +0200817
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400818#####################################################################
819
820threads = dependency('threads')
821librt = cc.find_library('rt')
822libm = cc.find_library('m')
823libdl = cc.find_library('dl')
824libcrypt = cc.find_library('crypt')
825
Zbigniew Jędrzejewski-Szmek1800cc82017-04-27 01:30:30 -0400826libcap = dependency('libcap', required : false)
827if not libcap.found()
828 # Compat with Ubuntu 14.04 which ships libcap w/o .pc file
829 libcap = cc.find_library('cap')
830endif
831
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400832libmount = dependency('mount',
Zbigniew Jędrzejewski-Szmekc0b4b0f2018-03-09 14:58:47 +0100833 version : fuzzer_build ? '>= 0' : '>= 2.30')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400834
835want_seccomp = get_option('seccomp')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000836if want_seccomp != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400837 libseccomp = dependency('libseccomp',
Zbigniew Jędrzejewski-Szmek9f0e9c02017-04-27 10:05:18 -0400838 version : '>= 2.3.1',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400839 required : want_seccomp == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200840 have = libseccomp.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400841else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200842 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400843 libseccomp = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400844endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200845conf.set10('HAVE_SECCOMP', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400846
847want_selinux = get_option('selinux')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000848if want_selinux != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400849 libselinux = dependency('libselinux',
850 version : '>= 2.1.9',
851 required : want_selinux == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200852 have = libselinux.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400853else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200854 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400855 libselinux = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400856endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200857conf.set10('HAVE_SELINUX', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400858
859want_apparmor = get_option('apparmor')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000860if want_apparmor != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400861 libapparmor = dependency('libapparmor',
862 required : want_apparmor == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200863 have = libapparmor.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400864else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200865 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400866 libapparmor = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400867endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200868conf.set10('HAVE_APPARMOR', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400869
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400870smack_run_label = get_option('smack-run-label')
871if smack_run_label != ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400872 conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400873endif
874
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400875want_polkit = get_option('polkit')
876install_polkit = false
877install_polkit_pkla = false
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000878if want_polkit != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400879 install_polkit = true
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400880
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400881 libpolkit = dependency('polkit-gobject-1',
882 required : false)
883 if libpolkit.found() and libpolkit.version().version_compare('< 0.106')
884 message('Old polkit detected, will install pkla files')
885 install_polkit_pkla = true
886 endif
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400887endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200888conf.set10('ENABLE_POLKIT', install_polkit)
Zbigniew Jędrzejewski-Szmek3ca0cb72017-04-12 19:09:26 -0400889
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400890want_acl = get_option('acl')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000891if want_acl != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400892 libacl = cc.find_library('acl', required : want_acl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200893 have = libacl.found()
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400894else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200895 have = false
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400896 libacl = []
897endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200898conf.set10('HAVE_ACL', have)
Zbigniew Jędrzejewski-Szmek36f03872017-04-21 13:53:59 -0400899
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400900want_audit = get_option('audit')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000901if want_audit != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400902 libaudit = dependency('audit', required : want_audit == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200903 have = libaudit.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400904else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200905 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400906 libaudit = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400907endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200908conf.set10('HAVE_AUDIT', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400909
910want_blkid = get_option('blkid')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000911if want_blkid != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400912 libblkid = dependency('blkid', required : want_blkid == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200913 have = libblkid.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400914else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200915 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400916 libblkid = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400917endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200918conf.set10('HAVE_BLKID', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400919
920want_kmod = get_option('kmod')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000921if want_kmod != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400922 libkmod = dependency('libkmod',
923 version : '>= 15',
924 required : want_kmod == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200925 have = libkmod.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400926else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200927 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400928 libkmod = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400929endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200930conf.set10('HAVE_KMOD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400931
932want_pam = get_option('pam')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000933if want_pam != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400934 libpam = cc.find_library('pam', required : want_pam == 'true')
935 libpam_misc = cc.find_library('pam_misc', required : want_pam == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200936 have = libpam.found() and libpam_misc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400937else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200938 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400939 libpam = []
940 libpam_misc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400941endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200942conf.set10('HAVE_PAM', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400943
944want_microhttpd = get_option('microhttpd')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000945if want_microhttpd != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400946 libmicrohttpd = dependency('libmicrohttpd',
947 version : '>= 0.9.33',
948 required : want_microhttpd == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200949 have = libmicrohttpd.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400950else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200951 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400952 libmicrohttpd = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400953endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200954conf.set10('HAVE_MICROHTTPD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400955
956want_libcryptsetup = get_option('libcryptsetup')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000957if want_libcryptsetup != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400958 libcryptsetup = dependency('libcryptsetup',
959 version : '>= 1.6.0',
960 required : want_libcryptsetup == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200961 have = libcryptsetup.found()
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +0100962 have_sector = cc.has_member(
963 'struct crypt_params_plain',
964 'sector_size',
965 prefix : '#include <libcryptsetup.h>')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400966else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200967 have = false
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +0100968 have_sector = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400969 libcryptsetup = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400970endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200971conf.set10('HAVE_LIBCRYPTSETUP', have)
Dimitri John Ledkova9fc6402018-08-29 15:38:09 +0100972conf.set10('HAVE_LIBCRYPTSETUP_SECTOR_SIZE', have_sector)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400973
974want_libcurl = get_option('libcurl')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +0000975if want_libcurl != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400976 libcurl = dependency('libcurl',
977 version : '>= 7.32.0',
978 required : want_libcurl == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200979 have = libcurl.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400980else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200981 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -0400982 libcurl = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400983endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200984conf.set10('HAVE_LIBCURL', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400985
986want_libidn = get_option('libidn')
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -0400987want_libidn2 = get_option('libidn2')
988if want_libidn == 'true' and want_libidn2 == 'true'
989 error('libidn and libidn2 cannot be requested simultaneously')
990endif
991
Yu Watanabe1b931392019-06-29 03:13:30 +0900992if want_libidn2 != 'false' and want_libidn != 'true' and not skip_deps
Zbigniew Jędrzejewski-Szmek7f7ab222017-07-12 03:25:59 -0400993 libidn = dependency('libidn2',
994 required : want_libidn2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +0200995 have = libidn.found()
996else
997 have = false
Yu Watanabe1b931392019-06-29 03:13:30 +0900998 libidn = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -0400999endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001000conf.set10('HAVE_LIBIDN2', have)
Yu Watanabe1b931392019-06-29 03:13:30 +09001001if not have and want_libidn != 'false' and not skip_deps
1002 # libidn is used for both libidn and libidn2 objects
1003 libidn = dependency('libidn',
1004 required : want_libidn == 'true')
1005 have = libidn.found()
1006else
1007 have = false
1008endif
1009conf.set10('HAVE_LIBIDN', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001010
1011want_libiptc = get_option('libiptc')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001012if want_libiptc != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001013 libiptc = dependency('libiptc',
1014 required : want_libiptc == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001015 have = libiptc.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001016else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001017 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001018 libiptc = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001019endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001020conf.set10('HAVE_LIBIPTC', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001021
1022want_qrencode = get_option('qrencode')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001023if want_qrencode != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001024 libqrencode = dependency('libqrencode',
1025 required : want_qrencode == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001026 have = libqrencode.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001027else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001028 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001029 libqrencode = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001030endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001031conf.set10('HAVE_QRENCODE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001032
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001033want_gcrypt = get_option('gcrypt')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001034if want_gcrypt != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001035 libgcrypt = cc.find_library('gcrypt', required : want_gcrypt == 'true')
1036 libgpg_error = cc.find_library('gpg-error', required : want_gcrypt == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001037 have = libgcrypt.found() and libgpg_error.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001038else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001039 have = false
1040endif
1041if not have
1042 # link to neither of the libs if one is not found
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001043 libgcrypt = []
1044 libgpg_error = []
1045endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001046conf.set10('HAVE_GCRYPT', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001047
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001048want_gnutls = get_option('gnutls')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001049if want_gnutls != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001050 libgnutls = dependency('gnutls',
1051 version : '>= 3.1.4',
1052 required : want_gnutls == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001053 have = libgnutls.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001054else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001055 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001056 libgnutls = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001057endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001058conf.set10('HAVE_GNUTLS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001059
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001060want_openssl = get_option('openssl')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001061if want_openssl != 'false' and not skip_deps
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001062 libopenssl = dependency('openssl',
1063 version : '>= 1.1.0',
1064 required : want_openssl == 'true')
1065 have = libopenssl.found()
1066else
1067 have = false
1068 libopenssl = []
1069endif
1070conf.set10('HAVE_OPENSSL', have)
1071
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001072want_elfutils = get_option('elfutils')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001073if want_elfutils != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001074 libdw = dependency('libdw',
1075 required : want_elfutils == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001076 have = libdw.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001077else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001078 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001079 libdw = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001080endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001081conf.set10('HAVE_ELFUTILS', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001082
1083want_zlib = get_option('zlib')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001084if want_zlib != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001085 libz = dependency('zlib',
1086 required : want_zlib == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001087 have = libz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001088else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001089 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001090 libz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001091endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001092conf.set10('HAVE_ZLIB', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001093
1094want_bzip2 = get_option('bzip2')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001095if want_bzip2 != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001096 libbzip2 = cc.find_library('bz2',
1097 required : want_bzip2 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001098 have = libbzip2.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001099else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001100 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001101 libbzip2 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001102endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001103conf.set10('HAVE_BZIP2', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001104
1105want_xz = get_option('xz')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001106if want_xz != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001107 libxz = dependency('liblzma',
1108 required : want_xz == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001109 have = libxz.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001110else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001111 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001112 libxz = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001113endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001114conf.set10('HAVE_XZ', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001115
1116want_lz4 = get_option('lz4')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001117if want_lz4 != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001118 liblz4 = dependency('liblz4',
Zbigniew Jędrzejewski-Szmeke0a1d4b2018-10-29 18:32:51 +01001119 version : '>= 1.3.0',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001120 required : want_lz4 == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001121 have = liblz4.found()
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001122else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001123 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001124 liblz4 = []
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001125endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001126conf.set10('HAVE_LZ4', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001127
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001128want_xkbcommon = get_option('xkbcommon')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001129if want_xkbcommon != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001130 libxkbcommon = dependency('xkbcommon',
1131 version : '>= 0.3.0',
1132 required : want_xkbcommon == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001133 have = libxkbcommon.found()
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001134else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001135 have = false
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001136 libxkbcommon = []
1137endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001138conf.set10('HAVE_XKBCOMMON', have)
Zbigniew Jędrzejewski-Szmeka44fb602017-07-26 14:08:46 -04001139
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01001140want_pcre2 = get_option('pcre2')
1141if want_pcre2 != 'false'
1142 libpcre2 = dependency('libpcre2-8',
1143 required : want_pcre2 == 'true')
1144 have = libpcre2.found()
1145else
1146 have = false
1147 libpcre2 = []
1148endif
1149conf.set10('HAVE_PCRE2', have)
1150
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001151want_glib = get_option('glib')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001152if want_glib != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001153 libglib = dependency('glib-2.0',
1154 version : '>= 2.22.0',
1155 required : want_glib == 'true')
1156 libgobject = dependency('gobject-2.0',
1157 version : '>= 2.22.0',
1158 required : want_glib == 'true')
1159 libgio = dependency('gio-2.0',
1160 required : want_glib == 'true')
Zbigniew Jędrzejewski-Szmek2c201c22017-04-27 21:13:08 -04001161 have = libglib.found() and libgobject.found() and libgio.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001162else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001163 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001164 libglib = []
1165 libgobject = []
1166 libgio = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001167endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001168conf.set10('HAVE_GLIB', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001169
1170want_dbus = get_option('dbus')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001171if want_dbus != 'false' and not skip_deps
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001172 libdbus = dependency('dbus-1',
1173 version : '>= 1.3.2',
1174 required : want_dbus == 'true')
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001175 have = libdbus.found()
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001176else
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001177 have = false
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001178 libdbus = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001179endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001180conf.set10('HAVE_DBUS', have)
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001181
Yu Watanabe42303dc2017-06-18 05:22:32 +09001182default_dnssec = get_option('default-dnssec')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001183if skip_deps
Jonathan Rudenbergb4081f32018-01-15 18:27:37 -05001184 default_dnssec = 'no'
1185endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001186if default_dnssec != 'no' and conf.get('HAVE_GCRYPT') == 0
Yu Watanabe42303dc2017-06-18 05:22:32 +09001187 message('default-dnssec cannot be set to yes or allow-downgrade when gcrypt is disabled. Setting default-dnssec to no.')
1188 default_dnssec = 'no'
1189endif
1190conf.set('DEFAULT_DNSSEC_MODE',
1191 'DNSSEC_' + default_dnssec.underscorify().to_upper())
1192substs.set('DEFAULT_DNSSEC_MODE', default_dnssec)
1193
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001194dns_over_tls = get_option('dns-over-tls')
1195if dns_over_tls != 'false'
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001196 if dns_over_tls == 'openssl'
1197 have_gnutls = false
1198 else
1199 have_gnutls = (conf.get('HAVE_GNUTLS') == 1 and libgnutls.version().version_compare('>= 3.5.3'))
1200 if dns_over_tls == 'gnutls' and not have_gnutls
1201 error('DNS-over-TLS support was requested with gnutls, but dependencies are not available')
1202 endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001203 endif
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001204 if dns_over_tls == 'gnutls' or have_gnutls
1205 have_openssl = false
1206 else
1207 have_openssl = conf.get('HAVE_OPENSSL') == 1
1208 if dns_over_tls != 'auto' and not have_openssl
1209 str = dns_over_tls == 'openssl' ? ' with openssl' : ''
Yu Watanabeb349bc52019-06-17 10:22:54 +09001210 error('DNS-over-TLS support was requested@0@, but dependencies are not available'.format(str))
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001211 endif
1212 endif
1213 have = have_gnutls or have_openssl
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001214else
Michael Olbrichbe5536a2018-11-11 11:30:53 +01001215 have = false
1216 have_gnutls = false
1217 have_openssl = false
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001218endif
1219conf.set10('ENABLE_DNS_OVER_TLS', have)
Iwan Timmer096cbdc2018-07-26 22:47:50 +01001220conf.set10('DNS_OVER_TLS_USE_GNUTLS', have_gnutls)
1221conf.set10('DNS_OVER_TLS_USE_OPENSSL', have_openssl)
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001222
Iwan Timmerc9299be2018-06-13 20:26:24 +02001223default_dns_over_tls = get_option('default-dns-over-tls')
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00001224if skip_deps
Iwan Timmerc9299be2018-06-13 20:26:24 +02001225 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001226endif
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001227if default_dns_over_tls != 'no' and conf.get('ENABLE_DNS_OVER_TLS') == 0
Iwan Timmer4310bfc2019-02-18 20:41:46 +01001228 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 +02001229 default_dns_over_tls = 'no'
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001230endif
Iwan Timmerc9299be2018-06-13 20:26:24 +02001231conf.set('DEFAULT_DNS_OVER_TLS_MODE',
1232 'DNS_OVER_TLS_' + default_dns_over_tls.underscorify().to_upper())
1233substs.set('DEFAULT_DNS_OVER_TLS_MODE', default_dns_over_tls)
Iwan Timmer5d67a7a2018-04-27 17:50:38 +02001234
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001235want_importd = get_option('importd')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001236if want_importd != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001237 have = (conf.get('HAVE_LIBCURL') == 1 and
1238 conf.get('HAVE_ZLIB') == 1 and
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001239 conf.get('HAVE_XZ') == 1 and
1240 conf.get('HAVE_GCRYPT') == 1)
1241 if want_importd == 'true' and not have
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001242 error('importd support was requested, but dependencies are not available')
1243 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001244else
1245 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001246endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001247conf.set10('ENABLE_IMPORTD', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001248
1249want_remote = get_option('remote')
Zbigniew Jędrzejewski-Szmek4390be32017-04-13 20:30:07 -04001250if want_remote != 'false'
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001251 have_deps = [conf.get('HAVE_MICROHTTPD') == 1,
1252 conf.get('HAVE_LIBCURL') == 1]
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001253 # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
1254 # it's possible to build one without the other. Complain only if
Ben Boeckel5238e952019-04-26 20:22:40 -04001255 # support was explicitly requested. The auxiliary files like sysusers
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001256 # config should be installed when any of the programs are built.
1257 if want_remote == 'true' and not (have_deps[0] and have_deps[1])
1258 error('remote support was requested, but dependencies are not available')
1259 endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001260 have = have_deps[0] or have_deps[1]
1261else
1262 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001263endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001264conf.set10('ENABLE_REMOTE', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001265
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001266foreach term : ['utmp',
1267 'hibernate',
1268 'environment-d',
1269 'binfmt',
1270 'coredump',
1271 'resolve',
1272 'logind',
1273 'hostnamed',
1274 'localed',
1275 'machined',
Lennart Poettering61d05782018-04-16 21:41:40 +02001276 'portabled',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001277 'networkd',
1278 'timedated',
1279 'timesyncd',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001280 'firstboot',
1281 'randomseed',
1282 'backlight',
1283 'vconsole',
1284 'quotacheck',
1285 'sysusers',
1286 'tmpfiles',
1287 'hwdb',
1288 'rfkill',
1289 'ldconfig',
1290 'efi',
1291 'tpm',
1292 'ima',
1293 'smack',
1294 'gshadow',
1295 'idn',
Yu Watanabe08540a92018-07-18 09:25:57 +09001296 'nss-myhostname',
Zbigniew Jędrzejewski-Szmeka9149d82017-10-03 13:15:27 +02001297 'nss-systemd']
1298 have = get_option(term)
1299 name = 'ENABLE_' + term.underscorify().to_upper()
1300 conf.set10(name, have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001301endforeach
1302
Yu Watanabe08540a92018-07-18 09:25:57 +09001303foreach tuple : [['nss-mymachines', 'machined'],
1304 ['nss-resolve', 'resolve']]
1305 want = get_option(tuple[0])
1306 if want != 'false'
1307 have = get_option(tuple[1])
1308 if want == 'true' and not have
1309 error('@0@ is requested but @1@ is disabled'.format(tuple[0], tuple[1]))
1310 endif
1311 else
1312 have = false
1313 endif
1314 name = 'ENABLE_' + tuple[0].underscorify().to_upper()
1315 conf.set10(name, have)
1316endforeach
1317
1318enable_nss = false
1319foreach term : ['ENABLE_NSS_MYHOSTNAME',
1320 'ENABLE_NSS_MYMACHINES',
1321 'ENABLE_NSS_RESOLVE',
1322 'ENABLE_NSS_SYSTEMD']
1323 if conf.get(term) == 1
1324 enable_nss = true
1325 endif
1326endforeach
1327conf.set10('ENABLE_NSS', enable_nss)
1328
Yu Watanabe348b4432018-05-07 18:17:35 +09001329conf.set10('ENABLE_TIMEDATECTL', get_option('timedated') or get_option('timesyncd'))
Yu Watanabe6129ec82018-05-03 18:07:43 +09001330
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001331tests = []
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001332fuzzers = []
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001333
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11001334conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
Zbigniew Jędrzejewski-Szmek00d82c82017-07-12 21:25:17 +00001335
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001336#####################################################################
1337
1338if get_option('efi')
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001339 efi_arch = host_machine.cpu_family()
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001340
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001341 if efi_arch == 'x86'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001342 EFI_MACHINE_TYPE_NAME = 'ia32'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001343 gnu_efi_arch = 'ia32'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001344 elif efi_arch == 'x86_64'
1345 EFI_MACHINE_TYPE_NAME = 'x64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001346 gnu_efi_arch = 'x86_64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001347 elif efi_arch == 'arm'
1348 EFI_MACHINE_TYPE_NAME = 'arm'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001349 gnu_efi_arch = 'arm'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001350 elif efi_arch == 'aarch64'
1351 EFI_MACHINE_TYPE_NAME = 'aa64'
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001352 gnu_efi_arch = 'aarch64'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001353 else
1354 EFI_MACHINE_TYPE_NAME = ''
Zbigniew Jędrzejewski-Szmek6800fe72017-04-19 22:57:52 -04001355 gnu_efi_arch = ''
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001356 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001357
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001358 have = true
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001359 conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
Zbigniew Jędrzejewski-Szmek80c6fce2017-04-24 19:28:04 -04001360
Yu Watanabeac093402018-05-10 16:04:16 +09001361 conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001362else
1363 have = false
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001364endif
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001365conf.set10('ENABLE_EFI', have)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001366
1367#####################################################################
1368
1369config_h = configure_file(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001370 output : 'config.h',
1371 configuration : conf)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001372
Yu Watanabe348b4432018-05-07 18:17:35 +09001373meson_apply_m4 = find_program('tools/meson-apply-m4.sh')
1374
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001375includes = include_directories('src/basic',
1376 'src/shared',
1377 'src/systemd',
1378 'src/journal',
Zbigniew Jędrzejewski-Szmeka38f7fe2018-05-16 12:05:07 +02001379 'src/journal-remote',
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02001380 'src/nspawn',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001381 'src/resolve',
1382 'src/timesync',
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05001383 'src/time-wait-sync',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001384 'src/login',
1385 'src/udev',
1386 'src/libudev',
1387 'src/core',
Lennart Poettering9e71f5d2019-03-05 12:12:33 +01001388 'src/shutdown',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001389 'src/libsystemd/sd-bus',
1390 'src/libsystemd/sd-device',
Yu Watanabea137a1c2018-11-16 17:30:42 +09001391 'src/libsystemd/sd-event',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001392 'src/libsystemd/sd-hwdb',
1393 'src/libsystemd/sd-id128',
1394 'src/libsystemd/sd-netlink',
1395 'src/libsystemd/sd-network',
Yu Watanabeceb26cd2018-12-10 15:45:48 +09001396 'src/libsystemd/sd-resolve',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001397 'src/libsystemd-network',
Zbigniew Jędrzejewski-Szmek2d4ceca2017-12-19 14:19:46 +01001398 '.')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001399
1400add_project_arguments('-include', 'config.h', language : 'c')
1401
Yu Watanabe6ec439f2018-11-28 20:19:41 +09001402generate_gperfs = find_program('tools/generate-gperfs.py')
1403
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001404subdir('po')
1405subdir('catalog')
1406subdir('src/systemd')
1407subdir('src/basic')
1408subdir('src/libsystemd')
1409subdir('src/libsystemd-network')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001410subdir('src/journal')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001411subdir('src/login')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001412
1413libjournal_core = static_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001414 'journal-core',
1415 libjournal_core_sources,
1416 journald_gperf_c,
1417 include_directories : includes,
1418 install : false)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001419
Davide Cavalca1485aac2019-02-27 11:19:07 -05001420libsystemd_sym_path = '@0@/@1@'.format(project_source_root, libsystemd_sym)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001421libsystemd = shared_library(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001422 'systemd',
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001423 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek56d50ab2017-09-28 19:24:16 +02001424 version : libsystemd_version,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001425 include_directories : includes,
1426 link_args : ['-shared',
1427 '-Wl,--version-script=' + libsystemd_sym_path],
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001428 link_with : [libbasic,
1429 libbasic_gcrypt],
Zbigniew Jędrzejewski-Szmek5e3cec82017-12-19 19:38:43 +01001430 link_whole : [libsystemd_static,
1431 libjournal_client],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001432 dependencies : [threads,
1433 librt,
1434 libxz,
1435 liblz4],
1436 link_depends : libsystemd_sym,
1437 install : true,
1438 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001439
Davide Cavalca70848ec2018-04-09 02:43:35 -07001440static_libsystemd = get_option('static-libsystemd')
1441static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'
1442
1443install_libsystemd_static = static_library(
1444 'systemd',
1445 libsystemd_sources,
1446 journal_client_sources,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001447 basic_sources,
1448 basic_gcrypt_sources,
Yu Watanabebe44b572018-10-12 11:59:55 +09001449 disable_mempool_c,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001450 include_directories : includes,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001451 build_by_default : static_libsystemd != 'false',
1452 install : static_libsystemd != 'false',
1453 install_dir : rootlibdir,
1454 pic : static_libsystemd == 'true' or static_libsystemd == 'pic',
1455 dependencies : [threads,
1456 librt,
1457 libxz,
1458 liblz4,
Zbigniew Jędrzejewski-Szmek975464e2018-04-25 15:29:48 +02001459 libcap,
1460 libblkid,
1461 libmount,
1462 libselinux,
Davide Cavalca70848ec2018-04-09 02:43:35 -07001463 libgcrypt],
1464 c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
1465
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001466############################################################
1467
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001468# binaries that have --help and are intended for use by humans,
1469# usually, but not always, installed in /bin.
1470public_programs = []
1471
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001472subdir('src/libudev')
1473subdir('src/shared')
1474subdir('src/core')
Lennart Poettering9e71f5d2019-03-05 12:12:33 +01001475subdir('src/shutdown')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001476subdir('src/udev')
1477subdir('src/network')
1478
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001479subdir('src/analyze')
1480subdir('src/journal-remote')
1481subdir('src/coredump')
1482subdir('src/hostname')
1483subdir('src/import')
1484subdir('src/kernel-install')
1485subdir('src/locale')
1486subdir('src/machine')
Lennart Poettering61d05782018-04-16 21:41:40 +02001487subdir('src/portable')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001488subdir('src/nspawn')
1489subdir('src/resolve')
1490subdir('src/timedate')
1491subdir('src/timesync')
1492subdir('src/vconsole')
Zbigniew Jędrzejewski-Szmekb7100722017-04-12 15:05:55 -04001493subdir('src/boot/efi')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001494
1495subdir('src/test')
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05001496subdir('src/fuzz')
Zbigniew Jędrzejewski-Szmek6b97bf22017-11-22 12:42:28 +01001497subdir('rules')
Zbigniew Jędrzejewski-Szmek4ff3f252017-04-13 20:47:20 -04001498subdir('test')
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04001499
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001500############################################################
1501
1502# only static linking apart from libdl, to make sure that the
1503# module is linked to all libraries that it uses.
1504test_dlopen = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001505 'test-dlopen',
1506 test_dlopen_c,
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001507 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001508 include_directories : includes,
1509 link_with : [libbasic],
Yu Watanabefd1939f2018-09-12 21:47:56 +09001510 dependencies : [libdl],
1511 build_by_default : want_tests != 'false')
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001512
Yu Watanabe08540a92018-07-18 09:25:57 +09001513foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
Waldemar Brodkorbe7e11bb2017-06-24 19:30:26 +02001514 ['systemd', 'ENABLE_NSS_SYSTEMD'],
Yu Watanabe08540a92018-07-18 09:25:57 +09001515 ['mymachines', 'ENABLE_NSS_MYMACHINES'],
1516 ['resolve', 'ENABLE_NSS_RESOLVE']]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001517
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001518 condition = tuple[1] == '' or conf.get(tuple[1]) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001519 if condition
1520 module = tuple[0]
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001521
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001522 sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
Davide Cavalca1485aac2019-02-27 11:19:07 -05001523 version_script_arg = join_paths(project_source_root, sym)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001524
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001525 nss = shared_library(
1526 'nss_' + module,
1527 'src/nss-@0@/nss-@0@.c'.format(module),
Zbigniew Jędrzejewski-Szmeka5d88352018-10-09 16:02:55 +02001528 disable_mempool_c,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001529 version : '2',
1530 include_directories : includes,
Lennart Poetteringb4b36f42017-12-12 20:13:16 +01001531 # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
1532 link_args : ['-Wl,-z,nodelete',
1533 '-shared',
Jussi Pakkanen700805f2019-04-06 21:59:06 +02001534 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001535 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001536 libbasic],
1537 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek5486a312017-05-12 08:31:46 -04001538 librt],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001539 link_depends : sym,
1540 install : true,
1541 install_dir : rootlibdir)
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001542
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001543 # We cannot use shared_module because it does not support version suffix.
1544 # Unfortunately shared_library insists on creating the symlink…
1545 meson.add_install_script('sh', '-c',
1546 'rm $DESTDIR@0@/libnss_@1@.so'
1547 .format(rootlibdir, module))
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001548
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001549 if want_tests != 'false'
1550 test('dlopen-nss_' + module,
1551 test_dlopen,
1552 # path to dlopen must include a slash
1553 args : nss.full_path())
1554 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001555 endif
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001556endforeach
1557
1558############################################################
1559
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001560executable('systemd',
1561 systemd_sources,
1562 include_directories : includes,
1563 link_with : [libcore,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001564 libshared],
Michael Olbrich416d7d42019-02-25 11:59:23 +01001565 dependencies : [versiondep,
1566 threads,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001567 librt,
1568 libseccomp,
1569 libselinux,
Zbigniew Jędrzejewski-Szmekf4ee10a2017-04-09 14:08:53 -04001570 libmount,
1571 libblkid],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001572 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001573 install : true,
1574 install_dir : rootlibexecdir)
1575
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001576meson.add_install_script(meson_make_symlink,
1577 join_paths(rootlibexecdir, 'systemd'),
1578 join_paths(rootsbindir, 'init'))
1579
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001580exe = executable('systemd-analyze',
1581 systemd_analyze_sources,
1582 include_directories : includes,
1583 link_with : [libcore,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001584 libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01001585 dependencies : [versiondep,
1586 threads,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001587 librt,
1588 libseccomp,
1589 libselinux,
1590 libmount,
1591 libblkid],
1592 install_rpath : rootlibexecdir,
1593 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001594public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001595
1596executable('systemd-journald',
1597 systemd_journald_sources,
1598 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001599 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001600 libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001601 dependencies : [threads,
1602 libxz,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04001603 liblz4,
1604 libselinux],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04001605 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001606 install : true,
1607 install_dir : rootlibexecdir)
1608
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001609exe = executable('systemd-cat',
1610 systemd_cat_sources,
1611 include_directories : includes,
1612 link_with : [libjournal_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001613 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001614 dependencies : [threads],
1615 install_rpath : rootlibexecdir,
1616 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001617public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001618
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001619exe = executable('journalctl',
1620 journalctl_sources,
1621 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001622 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001623 dependencies : [threads,
1624 libqrencode,
1625 libxz,
Zbigniew Jędrzejewski-Szmek6becf482018-01-12 07:55:45 +01001626 liblz4,
1627 libpcre2],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001628 install_rpath : rootlibexecdir,
1629 install : true,
1630 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001631public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001632
1633executable('systemd-getty-generator',
1634 'src/getty-generator/getty-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001635 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001636 link_with : [libshared],
1637 install_rpath : rootlibexecdir,
1638 install : true,
1639 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001640
1641executable('systemd-debug-generator',
1642 'src/debug-generator/debug-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001643 include_directories : includes,
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001644 link_with : [libshared],
1645 install_rpath : rootlibexecdir,
1646 install : true,
1647 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001648
Lennart Poettering35a1ff42018-11-15 22:09:29 +01001649executable('systemd-run-generator',
1650 'src/run-generator/run-generator.c',
1651 include_directories : includes,
1652 link_with : [libshared],
1653 install_rpath : rootlibexecdir,
1654 install : true,
1655 install_dir : systemgeneratordir)
1656
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001657executable('systemd-fstab-generator',
1658 'src/fstab-generator/fstab-generator.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001659 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01001660 link_with : [libcore_shared,
1661 libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001662 install_rpath : rootlibexecdir,
1663 install : true,
1664 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001665
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001666if conf.get('ENABLE_ENVIRONMENT_D') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001667 executable('30-systemd-environment-d-generator',
1668 'src/environment-d-generator/environment-d-generator.c',
1669 include_directories : includes,
1670 link_with : [libshared],
1671 install_rpath : rootlibexecdir,
1672 install : true,
1673 install_dir : userenvgeneratordir)
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04001674
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001675 meson.add_install_script(meson_make_symlink,
1676 join_paths(sysconfdir, 'environment'),
1677 join_paths(environmentdir, '99-environment.conf'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001678endif
1679
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001680if conf.get('ENABLE_HIBERNATE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001681 executable('systemd-hibernate-resume-generator',
1682 'src/hibernate-resume/hibernate-resume-generator.c',
1683 include_directories : includes,
1684 link_with : [libshared],
1685 install_rpath : rootlibexecdir,
1686 install : true,
1687 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001688
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001689 executable('systemd-hibernate-resume',
1690 'src/hibernate-resume/hibernate-resume.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001691 include_directories : includes,
1692 link_with : [libshared],
1693 install_rpath : rootlibexecdir,
1694 install : true,
1695 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001696endif
1697
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001698if conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001699 executable('systemd-gpt-auto-generator',
1700 'src/gpt-auto-generator/gpt-auto-generator.c',
Zbigniew Jędrzejewski-Szmekd284b822018-11-19 11:12:28 +01001701 'src/shared/blkid-util.h',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001702 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001703 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001704 dependencies : libblkid,
1705 install_rpath : rootlibexecdir,
1706 install : true,
1707 install_dir : systemgeneratordir)
1708
1709 exe = executable('systemd-dissect',
1710 'src/dissect/dissect.c',
1711 include_directories : includes,
1712 link_with : [libshared],
1713 install_rpath : rootlibexecdir,
1714 install : true,
1715 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001716 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001717endif
1718
Zbigniew Jędrzejewski-Szmek1ec57f32017-10-03 13:12:29 +02001719if conf.get('ENABLE_RESOLVE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001720 executable('systemd-resolved',
1721 systemd_resolved_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001722 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001723 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001724 libbasic_gcrypt,
1725 libsystemd_resolve_core],
Yu Watanabe56ddbf12018-06-21 01:29:49 +09001726 dependencies : systemd_resolved_dependencies,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001727 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001728 install : true,
1729 install_dir : rootlibexecdir)
1730
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001731 exe = executable('resolvectl',
1732 resolvectl_sources,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001733 include_directories : includes,
Zbigniew Jędrzejewski-Szmek34e221a2017-12-19 19:06:56 +01001734 link_with : [libshared,
Zbigniew Jędrzejewski-Szmek568a4ff2017-12-19 22:46:01 +01001735 libbasic_gcrypt,
1736 libsystemd_resolve_core],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001737 dependencies : [threads,
Michael Biebl76c87412017-04-21 23:45:54 +02001738 libgpg_error,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001739 libm,
1740 libidn],
1741 install_rpath : rootlibexecdir,
1742 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001743 public_programs += exe
Lennart Poettering088c1362018-02-27 17:48:54 +01001744
1745 meson.add_install_script(meson_make_symlink,
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001746 join_paths(bindir, 'resolvectl'),
Lennart Poettering088c1362018-02-27 17:48:54 +01001747 join_paths(rootsbindir, 'resolvconf'))
Yu Watanabec2e84ca2018-04-19 03:24:23 +09001748
1749 meson.add_install_script(meson_make_symlink,
1750 join_paths(bindir, 'resolvectl'),
1751 join_paths(bindir, 'systemd-resolve'))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001752endif
1753
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001754if conf.get('ENABLE_LOGIND') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001755 executable('systemd-logind',
1756 systemd_logind_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001757 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001758 link_with : [liblogind_core,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001759 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001760 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001761 libacl],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001762 install_rpath : rootlibexecdir,
1763 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001764 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001765
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001766 exe = executable('loginctl',
1767 loginctl_sources,
1768 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001769 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001770 dependencies : [threads,
1771 liblz4,
1772 libxz],
1773 install_rpath : rootlibexecdir,
1774 install : true,
1775 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001776 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001777
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001778 exe = executable('systemd-inhibit',
1779 'src/login/inhibit.c',
1780 include_directories : includes,
1781 link_with : [libshared],
1782 install_rpath : rootlibexecdir,
1783 install : true,
1784 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001785 public_programs += exe
Zbigniew Jędrzejewski-Szmek83b6af32017-04-14 20:10:28 -04001786
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001787 if conf.get('HAVE_PAM') == 1
Davide Cavalca1485aac2019-02-27 11:19:07 -05001788 version_script_arg = join_paths(project_source_root, pam_systemd_sym)
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001789 pam_systemd = shared_library(
1790 'pam_systemd',
1791 pam_systemd_c,
1792 name_prefix : '',
1793 include_directories : includes,
1794 link_args : ['-shared',
1795 '-Wl,--version-script=' + version_script_arg],
Zbigniew Jędrzejewski-Szmek37e4d7a2017-12-19 11:35:01 +01001796 link_with : [libsystemd_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001797 libshared_static],
1798 dependencies : [threads,
1799 libpam,
1800 libpam_misc],
1801 link_depends : pam_systemd_sym,
1802 install : true,
1803 install_dir : pamlibdir)
1804
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001805 if want_tests != 'false'
1806 test('dlopen-pam_systemd',
1807 test_dlopen,
1808 # path to dlopen must include a slash
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02001809 args : pam_systemd.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02001810 endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001811 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001812
Lennart Poettering07ee5ad2018-08-08 14:50:57 +02001813 executable('systemd-user-runtime-dir',
1814 user_runtime_dir_sources,
1815 include_directories : includes,
1816 link_with : [libshared],
1817 install_rpath : rootlibexecdir,
1818 install : true,
1819 install_dir : rootlibexecdir)
1820endif
Zbigniew Jędrzejewski-Szmeka9f0f5e2017-12-09 19:30:17 +01001821
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001822if conf.get('HAVE_PAM') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001823 executable('systemd-user-sessions',
1824 'src/user-sessions/user-sessions.c',
1825 include_directories : includes,
1826 link_with : [libshared],
1827 install_rpath : rootlibexecdir,
1828 install : true,
1829 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001830endif
1831
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001832if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_BLKID') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001833 exe = executable('bootctl',
1834 'src/boot/bootctl.c',
1835 include_directories : includes,
1836 link_with : [libshared],
1837 dependencies : [libblkid],
1838 install_rpath : rootlibexecdir,
1839 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001840 public_programs += exe
Lennart Poettering36695e82018-06-25 17:24:09 +02001841
1842 executable('systemd-bless-boot',
1843 'src/boot/bless-boot.c',
1844 include_directories : includes,
1845 link_with : [libshared],
1846 dependencies : [libblkid],
1847 install_rpath : rootlibexecdir,
1848 install : true,
1849 install_dir : rootlibexecdir)
Lennart Poettering8d16ed02018-06-22 17:00:47 +02001850
1851 executable('systemd-bless-boot-generator',
1852 'src/boot/bless-boot-generator.c',
1853 include_directories : includes,
1854 link_with : [libshared],
1855 install_rpath : rootlibexecdir,
1856 install : true,
1857 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001858endif
1859
Lennart Poetteringf876f532018-06-25 16:07:33 +02001860executable('systemd-boot-check-no-failures',
1861 'src/boot/boot-check-no-failures.c',
1862 include_directories : includes,
1863 link_with : [libshared],
1864 dependencies : [libblkid],
1865 install_rpath : rootlibexecdir,
1866 install : true,
1867 install_dir : rootlibexecdir)
1868
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001869exe = executable('systemd-socket-activate', 'src/activate/activate.c',
1870 include_directories : includes,
1871 link_with : [libshared],
1872 dependencies : [threads],
1873 install_rpath : rootlibexecdir,
1874 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001875public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001876
Felipe Satelerf3794362018-05-22 15:08:57 -04001877
1878if get_option('link-systemctl-shared')
1879 systemctl_link_with = [libshared]
1880else
1881 systemctl_link_with = [libsystemd_static,
1882 libshared_static,
1883 libjournal_client,
1884 libbasic_gcrypt]
1885endif
1886
Lennart Poettering63a3b3c2019-03-22 20:05:08 +01001887exe = executable('systemctl',
1888 'src/systemctl/systemctl.c',
1889 'src/systemctl/sysv-compat.h',
1890 'src/systemctl/sysv-compat.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001891 include_directories : includes,
Felipe Satelerf3794362018-05-22 15:08:57 -04001892 link_with : systemctl_link_with,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04001893 dependencies : [threads,
1894 libcap,
1895 libselinux,
1896 libxz,
1897 liblz4],
1898 install_rpath : rootlibexecdir,
1899 install : true,
1900 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001901public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001902
Lennart Poettering61d05782018-04-16 21:41:40 +02001903if conf.get('ENABLE_PORTABLED') == 1
1904 executable('systemd-portabled',
1905 systemd_portabled_sources,
1906 include_directories : includes,
1907 link_with : [libshared],
1908 dependencies : [threads],
1909 install_rpath : rootlibexecdir,
1910 install : true,
1911 install_dir : rootlibexecdir)
1912
1913 exe = executable('portablectl', 'src/portable/portablectl.c',
1914 include_directories : includes,
1915 link_with : [libshared],
1916 dependencies : [threads],
1917 install_rpath : rootlibexecdir,
1918 install : true,
Lennart Poettering80f39b82018-10-08 17:28:44 +02001919 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02001920 public_programs += exe
Lennart Poettering61d05782018-04-16 21:41:40 +02001921endif
1922
Zbigniew Jędrzejewski-Szmekba7f4ae2018-02-28 10:20:48 +01001923foreach alias : ['halt', 'poweroff', 'reboot', 'runlevel', 'shutdown', 'telinit']
1924 meson.add_install_script(meson_make_symlink,
1925 join_paths(rootbindir, 'systemctl'),
1926 join_paths(rootsbindir, alias))
1927endforeach
1928
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001929if conf.get('ENABLE_BACKLIGHT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001930 executable('systemd-backlight',
1931 'src/backlight/backlight.c',
1932 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001933 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001934 install_rpath : rootlibexecdir,
1935 install : true,
1936 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001937endif
1938
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001939if conf.get('ENABLE_RFKILL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001940 executable('systemd-rfkill',
1941 'src/rfkill/rfkill.c',
1942 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02001943 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001944 install_rpath : rootlibexecdir,
1945 install : true,
1946 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001947endif
1948
1949executable('systemd-system-update-generator',
1950 'src/system-update-generator/system-update-generator.c',
1951 include_directories : includes,
1952 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04001953 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001954 install : true,
1955 install_dir : systemgeneratordir)
1956
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001957if conf.get('HAVE_LIBCRYPTSETUP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001958 executable('systemd-cryptsetup',
1959 'src/cryptsetup/cryptsetup.c',
1960 include_directories : includes,
1961 link_with : [libshared],
1962 dependencies : [libcryptsetup],
1963 install_rpath : rootlibexecdir,
1964 install : true,
1965 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001966
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001967 executable('systemd-cryptsetup-generator',
1968 'src/cryptsetup/cryptsetup-generator.c',
1969 include_directories : includes,
1970 link_with : [libshared],
1971 dependencies : [libcryptsetup],
1972 install_rpath : rootlibexecdir,
1973 install : true,
1974 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001975
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001976 executable('systemd-veritysetup',
1977 'src/veritysetup/veritysetup.c',
1978 include_directories : includes,
1979 link_with : [libshared],
1980 dependencies : [libcryptsetup],
1981 install_rpath : rootlibexecdir,
1982 install : true,
1983 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001984
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001985 executable('systemd-veritysetup-generator',
1986 'src/veritysetup/veritysetup-generator.c',
1987 include_directories : includes,
1988 link_with : [libshared],
1989 dependencies : [libcryptsetup],
1990 install_rpath : rootlibexecdir,
1991 install : true,
1992 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04001993endif
1994
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02001995if conf.get('HAVE_SYSV_COMPAT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04001996 executable('systemd-sysv-generator',
1997 'src/sysv-generator/sysv-generator.c',
1998 include_directories : includes,
1999 link_with : [libshared],
2000 install_rpath : rootlibexecdir,
2001 install : true,
2002 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002003
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002004 executable('systemd-rc-local-generator',
2005 'src/rc-local-generator/rc-local-generator.c',
2006 include_directories : includes,
2007 link_with : [libshared],
2008 install_rpath : rootlibexecdir,
2009 install : true,
2010 install_dir : systemgeneratordir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002011endif
2012
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002013if conf.get('ENABLE_HOSTNAMED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002014 executable('systemd-hostnamed',
2015 'src/hostname/hostnamed.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002016 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002017 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002018 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002019 install : true,
2020 install_dir : rootlibexecdir)
2021
2022 exe = executable('hostnamectl',
2023 'src/hostname/hostnamectl.c',
2024 include_directories : includes,
2025 link_with : [libshared],
2026 install_rpath : rootlibexecdir,
2027 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002028 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002029endif
2030
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002031if conf.get('ENABLE_LOCALED') == 1
2032 if conf.get('HAVE_XKBCOMMON') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002033 # logind will load libxkbcommon.so dynamically on its own
2034 deps = [libdl]
2035 else
2036 deps = []
2037 endif
Zbigniew Jędrzejewski-Szmek1eeb43f2017-04-13 19:37:14 -04002038
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002039 executable('systemd-localed',
2040 systemd_localed_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002041 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002042 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002043 dependencies : deps,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002044 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002045 install : true,
2046 install_dir : rootlibexecdir)
2047
2048 exe = executable('localectl',
2049 localectl_sources,
2050 include_directories : includes,
2051 link_with : [libshared],
2052 install_rpath : rootlibexecdir,
2053 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002054 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002055endif
2056
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002057if conf.get('ENABLE_TIMEDATED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002058 executable('systemd-timedated',
2059 'src/timedate/timedated.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002060 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002061 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002062 install_rpath : rootlibexecdir,
2063 install : true,
2064 install_dir : rootlibexecdir)
Yu Watanabe6129ec82018-05-03 18:07:43 +09002065endif
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002066
Yu Watanabe6129ec82018-05-03 18:07:43 +09002067if conf.get('ENABLE_TIMEDATECTL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002068 exe = executable('timedatectl',
2069 'src/timedate/timedatectl.c',
2070 include_directories : includes,
2071 install_rpath : rootlibexecdir,
2072 link_with : [libshared],
Yu Watanabe6129ec82018-05-03 18:07:43 +09002073 dependencies : [libm],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002074 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002075 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002076endif
2077
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002078if conf.get('ENABLE_TIMESYNCD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002079 executable('systemd-timesyncd',
2080 systemd_timesyncd_sources,
2081 include_directories : includes,
2082 link_with : [libshared],
2083 dependencies : [threads,
2084 libm],
2085 install_rpath : rootlibexecdir,
2086 install : true,
2087 install_dir : rootlibexecdir)
Peter A. Bigot5c3376e2018-03-21 06:42:04 -05002088
2089 executable('systemd-time-wait-sync',
2090 'src/time-wait-sync/time-wait-sync.c',
2091 include_directories : includes,
2092 link_with : [libshared],
2093 install_rpath : rootlibexecdir,
2094 install : true,
2095 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002096endif
2097
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002098if conf.get('ENABLE_MACHINED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002099 executable('systemd-machined',
2100 systemd_machined_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002101 include_directories : includes,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002102 link_with : [libmachine_core,
2103 libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002104 install_rpath : rootlibexecdir,
2105 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002106 install_dir : rootlibexecdir)
2107
2108 exe = executable('machinectl',
2109 'src/machine/machinectl.c',
2110 include_directories : includes,
2111 link_with : [libshared],
2112 dependencies : [threads,
2113 libxz,
2114 liblz4],
2115 install_rpath : rootlibexecdir,
2116 install : true,
2117 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002118 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002119endif
2120
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002121if conf.get('ENABLE_IMPORTD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002122 executable('systemd-importd',
2123 systemd_importd_sources,
2124 include_directories : includes,
2125 link_with : [libshared],
2126 dependencies : [threads],
2127 install_rpath : rootlibexecdir,
2128 install : true,
2129 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002130
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002131 systemd_pull = executable('systemd-pull',
2132 systemd_pull_sources,
2133 include_directories : includes,
2134 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002135 dependencies : [versiondep,
2136 libcurl,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002137 libz,
2138 libbzip2,
2139 libxz,
2140 libgcrypt],
2141 install_rpath : rootlibexecdir,
2142 install : true,
2143 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002144
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002145 systemd_import = executable('systemd-import',
2146 systemd_import_sources,
2147 include_directories : includes,
2148 link_with : [libshared],
2149 dependencies : [libcurl,
2150 libz,
2151 libbzip2,
2152 libxz],
2153 install_rpath : rootlibexecdir,
2154 install : true,
2155 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002156
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002157 systemd_import_fs = executable('systemd-import-fs',
2158 systemd_import_fs_sources,
2159 include_directories : includes,
2160 link_with : [libshared],
2161 install_rpath : rootlibexecdir,
2162 install : true,
2163 install_dir : rootlibexecdir)
2164
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002165 systemd_export = executable('systemd-export',
2166 systemd_export_sources,
2167 include_directories : includes,
2168 link_with : [libshared],
2169 dependencies : [libcurl,
2170 libz,
2171 libbzip2,
2172 libxz],
2173 install_rpath : rootlibexecdir,
2174 install : true,
2175 install_dir : rootlibexecdir)
Lennart Poettering1d7579c2018-10-10 21:20:08 +02002176
2177 public_programs += [systemd_pull, systemd_import, systemd_import_fs, systemd_export]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002178endif
2179
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002180if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002181 exe = executable('systemd-journal-upload',
2182 systemd_journal_upload_sources,
2183 include_directories : includes,
2184 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002185 dependencies : [versiondep,
2186 threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002187 libcurl,
2188 libgnutls,
2189 libxz,
2190 liblz4],
2191 install_rpath : rootlibexecdir,
2192 install : true,
2193 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002194 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002195endif
2196
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002197if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002198 s_j_remote = executable('systemd-journal-remote',
2199 systemd_journal_remote_sources,
2200 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc064d8d2018-05-16 10:21:58 +02002201 link_with : [libshared,
2202 libsystemd_journal_remote],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002203 dependencies : [threads,
2204 libmicrohttpd,
2205 libgnutls,
2206 libxz,
2207 liblz4],
2208 install_rpath : rootlibexecdir,
2209 install : true,
2210 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002211
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002212 s_j_gatewayd = executable('systemd-journal-gatewayd',
2213 systemd_journal_gatewayd_sources,
2214 include_directories : includes,
2215 link_with : [libshared],
2216 dependencies : [threads,
2217 libmicrohttpd,
2218 libgnutls,
2219 libxz,
2220 liblz4],
2221 install_rpath : rootlibexecdir,
2222 install : true,
2223 install_dir : rootlibexecdir)
2224 public_programs += [s_j_remote, s_j_gatewayd]
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002225endif
2226
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002227if conf.get('ENABLE_COREDUMP') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002228 executable('systemd-coredump',
2229 systemd_coredump_sources,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002230 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002231 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002232 dependencies : [threads,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002233 libacl,
2234 libdw,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002235 libxz,
2236 liblz4],
2237 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002238 install : true,
2239 install_dir : rootlibexecdir)
2240
2241 exe = executable('coredumpctl',
2242 coredumpctl_sources,
2243 include_directories : includes,
2244 link_with : [libshared],
2245 dependencies : [threads,
2246 libxz,
2247 liblz4],
2248 install_rpath : rootlibexecdir,
2249 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002250 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002251endif
2252
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002253if conf.get('ENABLE_BINFMT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002254 exe = executable('systemd-binfmt',
2255 'src/binfmt/binfmt.c',
2256 include_directories : includes,
2257 link_with : [libshared],
2258 install_rpath : rootlibexecdir,
2259 install : true,
2260 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002261 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002262
2263 meson.add_install_script('sh', '-c',
2264 mkdir_p.format(binfmtdir))
2265 meson.add_install_script('sh', '-c',
2266 mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
2267endif
2268
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002269if conf.get('ENABLE_VCONSOLE') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002270 executable('systemd-vconsole-setup',
2271 'src/vconsole/vconsole-setup.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002272 include_directories : includes,
2273 link_with : [libshared],
2274 install_rpath : rootlibexecdir,
2275 install : true,
2276 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002277endif
2278
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002279if conf.get('ENABLE_RANDOMSEED') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002280 executable('systemd-random-seed',
2281 'src/random-seed/random-seed.c',
2282 include_directories : includes,
2283 link_with : [libshared],
2284 install_rpath : rootlibexecdir,
2285 install : true,
2286 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002287endif
2288
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002289if conf.get('ENABLE_FIRSTBOOT') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002290 executable('systemd-firstboot',
2291 'src/firstboot/firstboot.c',
2292 include_directories : includes,
2293 link_with : [libshared],
2294 dependencies : [libcrypt],
2295 install_rpath : rootlibexecdir,
2296 install : true,
2297 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002298endif
2299
2300executable('systemd-remount-fs',
2301 'src/remount-fs/remount-fs.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002302 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002303 link_with : [libcore_shared,
2304 libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002305 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002306 install : true,
2307 install_dir : rootlibexecdir)
2308
2309executable('systemd-machine-id-setup',
2310 'src/machine-id-setup/machine-id-setup-main.c',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002311 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002312 link_with : [libcore_shared,
2313 libshared],
Zbigniew Jędrzejewski-Szmekb2fc5832017-04-10 18:13:00 -04002314 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002315 install : true,
2316 install_dir : rootbindir)
2317
2318executable('systemd-fsck',
2319 'src/fsck/fsck.c',
2320 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002321 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002322 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002323 install : true,
2324 install_dir : rootlibexecdir)
2325
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002326executable('systemd-growfs',
2327 'src/partition/growfs.c',
2328 include_directories : includes,
2329 link_with : [libshared],
Zbigniew Jędrzejewski-Szmekc34b75a2017-11-21 18:56:52 +01002330 dependencies : [libcryptsetup],
Zbigniew Jędrzejewski-Szmek80750ad2017-10-23 13:40:38 +02002331 install_rpath : rootlibexecdir,
2332 install : true,
2333 install_dir : rootlibexecdir)
2334
Zbigniew Jędrzejewski-Szmekb7f28ac2017-11-26 22:51:29 +01002335executable('systemd-makefs',
2336 'src/partition/makefs.c',
2337 include_directories : includes,
2338 link_with : [libshared],
2339 install_rpath : rootlibexecdir,
2340 install : true,
2341 install_dir : rootlibexecdir)
2342
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002343executable('systemd-sleep',
2344 'src/sleep/sleep.c',
2345 include_directories : includes,
2346 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002347 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002348 install : true,
2349 install_dir : rootlibexecdir)
2350
Yu Watanabed25e1272019-01-03 02:32:57 +09002351install_data('src/sleep/sleep.conf',
2352 install_dir : pkgsysconfdir)
2353
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002354exe = executable('systemd-sysctl',
2355 'src/sysctl/sysctl.c',
2356 include_directories : includes,
2357 link_with : [libshared],
2358 install_rpath : rootlibexecdir,
2359 install : true,
2360 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002361public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002362
2363executable('systemd-ac-power',
2364 'src/ac-power/ac-power.c',
2365 include_directories : includes,
2366 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002367 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002368 install : true,
2369 install_dir : rootlibexecdir)
2370
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002371exe = executable('systemd-detect-virt',
2372 'src/detect-virt/detect-virt.c',
2373 include_directories : includes,
2374 link_with : [libshared],
2375 install_rpath : rootlibexecdir,
2376 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002377public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002378
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002379exe = executable('systemd-delta',
2380 'src/delta/delta.c',
2381 include_directories : includes,
2382 link_with : [libshared],
2383 install_rpath : rootlibexecdir,
2384 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002385public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002386
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002387exe = executable('systemd-escape',
2388 'src/escape/escape.c',
2389 include_directories : includes,
2390 link_with : [libshared],
2391 install_rpath : rootlibexecdir,
2392 install : true,
2393 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002394public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002395
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002396exe = executable('systemd-notify',
2397 'src/notify/notify.c',
2398 include_directories : includes,
2399 link_with : [libshared],
2400 install_rpath : rootlibexecdir,
2401 install : true,
2402 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002403public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002404
2405executable('systemd-volatile-root',
2406 'src/volatile-root/volatile-root.c',
2407 include_directories : includes,
2408 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002409 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002410 install : true,
2411 install_dir : rootlibexecdir)
2412
2413executable('systemd-cgroups-agent',
2414 'src/cgroups-agent/cgroups-agent.c',
2415 include_directories : includes,
2416 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002417 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002418 install : true,
2419 install_dir : rootlibexecdir)
2420
Zbigniew Jędrzejewski-Szmek0d1d5122018-08-21 16:08:48 +02002421exe = executable('systemd-id128',
2422 'src/id128/id128.c',
2423 include_directories : includes,
2424 link_with : [libshared],
2425 install_rpath : rootlibexecdir,
2426 install : true)
2427public_programs += exe
2428
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002429exe = executable('systemd-path',
2430 'src/path/path.c',
2431 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002432 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002433 install_rpath : rootlibexecdir,
2434 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002435public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002436
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002437exe = executable('systemd-ask-password',
2438 'src/ask-password/ask-password.c',
2439 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002440 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002441 install_rpath : rootlibexecdir,
2442 install : true,
2443 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002444public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002445
2446executable('systemd-reply-password',
2447 'src/reply-password/reply-password.c',
2448 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002449 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002450 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002451 install : true,
2452 install_dir : rootlibexecdir)
2453
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002454exe = executable('systemd-tty-ask-password-agent',
2455 'src/tty-ask-password-agent/tty-ask-password-agent.c',
2456 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002457 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002458 install_rpath : rootlibexecdir,
2459 install : true,
2460 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002461public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002462
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002463exe = executable('systemd-cgls',
2464 'src/cgls/cgls.c',
2465 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002466 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002467 install_rpath : rootlibexecdir,
2468 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002469public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002470
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002471exe = executable('systemd-cgtop',
2472 'src/cgtop/cgtop.c',
2473 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002474 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002475 install_rpath : rootlibexecdir,
2476 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002477public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002478
2479executable('systemd-initctl',
2480 'src/initctl/initctl.c',
2481 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002482 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002483 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002484 install : true,
2485 install_dir : rootlibexecdir)
2486
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002487exe = executable('systemd-mount',
2488 'src/mount/mount-tool.c',
2489 include_directories : includes,
Michael Biebl34ce0a52017-04-25 20:19:54 +02002490 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek7d991d42019-04-04 13:41:47 +02002491 dependencies: [libmount],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002492 install_rpath : rootlibexecdir,
2493 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002494public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002495
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002496meson.add_install_script(meson_make_symlink,
Michael Bieble17e5ba2017-04-13 10:30:56 -04002497 'systemd-mount', join_paths(bindir, 'systemd-umount'))
Zbigniew Jędrzejewski-Szmek7b76fce2017-04-09 23:55:50 -04002498
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002499exe = executable('systemd-run',
2500 'src/run/run.c',
2501 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002502 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002503 install_rpath : rootlibexecdir,
2504 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002505public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002506
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002507exe = executable('systemd-stdio-bridge',
2508 'src/stdio-bridge/stdio-bridge.c',
2509 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002510 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002511 dependencies : [versiondep],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002512 install_rpath : rootlibexecdir,
2513 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002514public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002515
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002516exe = executable('busctl',
2517 'src/busctl/busctl.c',
2518 'src/busctl/busctl-introspect.c',
2519 'src/busctl/busctl-introspect.h',
2520 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002521 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002522 install_rpath : rootlibexecdir,
2523 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002524public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002525
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002526if conf.get('ENABLE_SYSUSERS') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002527 exe = executable('systemd-sysusers',
2528 'src/sysusers/sysusers.c',
2529 include_directories : includes,
2530 link_with : [libshared],
2531 install_rpath : rootlibexecdir,
2532 install : true,
2533 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002534 public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002535endif
2536
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002537if conf.get('ENABLE_TMPFILES') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002538 exe = executable('systemd-tmpfiles',
2539 'src/tmpfiles/tmpfiles.c',
2540 include_directories : includes,
2541 link_with : [libshared],
2542 dependencies : [libacl],
2543 install_rpath : rootlibexecdir,
2544 install : true,
2545 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002546 public_programs += exe
Zbigniew Jędrzejewski-Szmekd9daae52017-11-22 14:13:32 +01002547
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002548 if want_tests != 'false'
2549 test('test-systemd-tmpfiles',
2550 test_systemd_tmpfiles_py,
2551 # https://github.com/mesonbuild/meson/issues/2681
2552 args : exe.full_path())
2553 endif
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002554endif
2555
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002556if conf.get('ENABLE_HWDB') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002557 exe = executable('systemd-hwdb',
2558 'src/hwdb/hwdb.c',
2559 'src/libsystemd/sd-hwdb/hwdb-internal.h',
2560 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002561 link_with : [libudev_static],
Michael Biebl0da6f392017-04-21 18:32:14 +02002562 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002563 install : true,
2564 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002565 public_programs += exe
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002566endif
2567
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002568if conf.get('ENABLE_QUOTACHECK') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002569 executable('systemd-quotacheck',
2570 'src/quotacheck/quotacheck.c',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002571 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002572 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002573 install_rpath : rootlibexecdir,
2574 install : true,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002575 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002576endif
2577
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002578exe = executable('systemd-socket-proxyd',
2579 'src/socket-proxy/socket-proxyd.c',
2580 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002581 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002582 dependencies : [threads],
2583 install_rpath : rootlibexecdir,
2584 install : true,
2585 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002586public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002587
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002588exe = executable('systemd-udevd',
2589 systemd_udevd_sources,
2590 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002591 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002592 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002593 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002594 libudev_static],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002595 dependencies : [versiondep,
2596 threads,
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002597 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002598 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002599 libacl,
2600 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002601 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002602 install : true,
2603 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002604public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002605
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002606exe = executable('udevadm',
2607 udevadm_sources,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002608 c_args : '-DLOG_REALM=LOG_REALM_UDEV',
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002609 include_directories : includes,
2610 link_with : [libudev_core,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002611 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002612 libudev_static],
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002613 dependencies : [versiondep,
2614 threads,
Zbigniew Jędrzejewski-Szmek3a30f212017-04-17 12:07:12 -04002615 libkmod,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002616 libidn,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002617 libacl,
2618 libblkid],
Zbigniew Jędrzejewski-Szmek1aec3ed2017-04-17 19:33:10 -04002619 install_rpath : udev_rpath,
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002620 install : true,
2621 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002622public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002623
2624executable('systemd-shutdown',
2625 systemd_shutdown_sources,
2626 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002627 link_with : [libcore_shared,
2628 libshared],
Zbigniew Jędrzejewski-Szmek95b862b2018-03-14 11:32:30 +01002629 dependencies : [libmount],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002630 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002631 install : true,
2632 install_dir : rootlibexecdir)
2633
2634executable('systemd-update-done',
2635 'src/update-done/update-done.c',
2636 include_directories : includes,
2637 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002638 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002639 install : true,
2640 install_dir : rootlibexecdir)
2641
2642executable('systemd-update-utmp',
2643 'src/update-utmp/update-utmp.c',
2644 include_directories : includes,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002645 link_with : [libshared],
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002646 dependencies : [libaudit],
Zbigniew Jędrzejewski-Szmek421f0012017-04-12 12:02:30 -04002647 install_rpath : rootlibexecdir,
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002648 install : true,
2649 install_dir : rootlibexecdir)
2650
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002651if conf.get('HAVE_KMOD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002652 executable('systemd-modules-load',
2653 'src/modules-load/modules-load.c',
2654 include_directories : includes,
2655 link_with : [libshared],
2656 dependencies : [libkmod],
2657 install_rpath : rootlibexecdir,
2658 install : true,
2659 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002660
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002661 meson.add_install_script('sh', '-c',
2662 mkdir_p.format(modulesloaddir))
2663 meson.add_install_script('sh', '-c',
2664 mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002665endif
2666
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002667exe = executable('systemd-nspawn',
2668 systemd_nspawn_sources,
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02002669 include_directories : includes,
Zbigniew Jędrzejewski-Szmek53f79e12019-03-05 16:19:40 +01002670 link_with : [libcore_shared,
2671 libnspawn_core,
Zbigniew Jędrzejewski-Szmek97d90612018-05-28 10:37:11 +02002672 libshared],
Franck Bui82384232019-03-22 11:09:08 +01002673 dependencies : [libblkid,
2674 libseccomp],
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002675 install_rpath : rootlibexecdir,
2676 install : true)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002677public_programs += exe
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002678
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02002679if conf.get('ENABLE_NETWORKD') == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002680 executable('systemd-networkd',
2681 systemd_networkd_sources,
2682 include_directories : includes,
2683 link_with : [libnetworkd_core,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002684 libsystemd_network,
Zbigniew Jędrzejewski-Szmek0c06b502017-12-19 20:54:46 +01002685 libudev_static,
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002686 libshared],
Zbigniew Jędrzejewski-Szmek4b57a272017-06-21 06:05:15 -04002687 dependencies : [threads],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002688 install_rpath : rootlibexecdir,
2689 install : true,
2690 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002691
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002692 executable('systemd-networkd-wait-online',
2693 systemd_networkd_wait_online_sources,
2694 include_directories : includes,
2695 link_with : [libnetworkd_core,
2696 libshared],
2697 install_rpath : rootlibexecdir,
2698 install : true,
2699 install_dir : rootlibexecdir)
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002700
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002701 exe = executable('networkctl',
2702 networkctl_sources,
2703 include_directories : includes,
2704 link_with : [libsystemd_network,
Zbigniew Jędrzejewski-Szmekaac26052017-04-14 18:49:47 -04002705 libshared],
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002706 install_rpath : rootlibexecdir,
2707 install : true,
2708 install_dir : rootbindir)
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02002709 public_programs += exe
Felipe Satelerdcfe0722017-08-21 09:48:41 -03002710endif
Zbigniew Jędrzejewski-Szmeke821f6a2017-12-07 10:44:43 +01002711
2712executable('systemd-sulogin-shell',
2713 ['src/sulogin-shell/sulogin-shell.c'],
2714 include_directories : includes,
2715 link_with : [libshared],
2716 install_rpath : rootlibexecdir,
2717 install : true,
2718 install_dir : rootlibexecdir)
2719
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002720############################################################
2721
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002722custom_target(
2723 'systemd-runtest.env',
2724 output : 'systemd-runtest.env',
2725 command : ['sh', '-c', '{ ' +
Davide Cavalca1485aac2019-02-27 11:19:07 -05002726 'echo SYSTEMD_TEST_DATA=@0@; '.format(join_paths(project_source_root, 'test')) +
Filipe Brandenburger49cdae62018-09-12 00:23:40 -07002727 'echo SYSTEMD_CATALOG_DIR=@0@; '.format(join_paths(meson.current_build_dir(), 'catalog')) +
Filipe Brandenburgere2d41372018-09-11 23:55:02 -07002728 '} >@OUTPUT@'],
2729 build_by_default : true)
2730
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002731foreach tuple : tests
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002732 sources = tuple[0]
2733 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2734 dependencies = tuple[2]
2735 condition = tuple.length() >= 4 ? tuple[3] : ''
2736 type = tuple.length() >= 5 ? tuple[4] : ''
2737 defs = tuple.length() >= 6 ? tuple[5] : []
2738 incs = tuple.length() >= 7 ? tuple[6] : includes
2739 timeout = 30
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002740
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002741 name = sources[0].split('/')[-1].split('.')[0]
2742 if type.startswith('timeout=')
2743 timeout = type.split('=')[1].to_int()
2744 type = ''
2745 endif
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002746
2747 if condition == '' or conf.get(condition) == 1
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002748 exe = executable(
2749 name,
2750 sources,
2751 include_directories : incs,
2752 link_with : link_with,
Zbigniew Jędrzejewski-Szmek60722ad2019-02-24 22:49:38 +01002753 dependencies : [versiondep,
2754 dependencies],
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002755 c_args : defs,
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002756 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002757 install_rpath : rootlibexecdir,
Michael Biebl7cdd9782017-06-23 03:23:30 +02002758 install : install_tests,
2759 install_dir : join_paths(testsdir, type))
Zbigniew Jędrzejewski-Szmek572baca2017-04-08 01:55:38 -04002760
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002761 if type == 'manual'
2762 message('@0@ is a manual test'.format(name))
2763 elif type == 'unsafe' and want_tests != 'unsafe'
2764 message('@0@ is an unsafe test'.format(name))
Zbigniew Jędrzejewski-Szmek3b2bdd62018-09-12 16:52:08 +02002765 elif want_tests != 'false'
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002766 test(name, exe,
2767 env : test_env,
2768 timeout : timeout)
2769 endif
2770 else
2771 message('Not compiling @0@ because @1@ is not true'.format(name, condition))
2772 endif
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002773endforeach
2774
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002775exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002776 'test-libsystemd-sym',
2777 test_libsystemd_sym_c,
2778 include_directories : includes,
2779 link_with : [libsystemd],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002780 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002781 install : install_tests,
2782 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002783if want_tests != 'false'
2784 test('test-libsystemd-sym', exe)
2785endif
Zbigniew Jędrzejewski-Szmek37ab1a22017-04-10 14:13:40 -04002786
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002787exe = executable(
2788 'test-libsystemd-static-sym',
2789 test_libsystemd_sym_c,
2790 include_directories : includes,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002791 link_with : [install_libsystemd_static],
2792 dependencies : [threads], # threads is already included in dependencies on the library,
2793 # but does not seem to get propagated. Add here as a work-around.
Yu Watanabefd1939f2018-09-12 21:47:56 +09002794 build_by_default : want_tests != 'false' and static_libsystemd_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002795 install : install_tests and static_libsystemd_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002796 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002797if want_tests != 'false' and static_libsystemd_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002798 test('test-libsystemd-static-sym', exe)
2799endif
2800
2801exe = executable(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002802 'test-libudev-sym',
2803 test_libudev_sym_c,
2804 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002805 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002806 link_with : [libudev],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002807 build_by_default : want_tests != 'false',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002808 install : install_tests,
2809 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002810if want_tests != 'false'
2811 test('test-libudev-sym', exe)
2812endif
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002813
2814exe = executable(
2815 'test-libudev-static-sym',
2816 test_libudev_sym_c,
2817 include_directories : includes,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002818 c_args : '-Wno-deprecated-declarations',
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002819 link_with : [install_libudev_static],
Yu Watanabefd1939f2018-09-12 21:47:56 +09002820 build_by_default : want_tests != 'false' and static_libudev_pic,
Davide Cavalca20f3d322018-04-24 13:34:48 -07002821 install : install_tests and static_libudev_pic,
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002822 install_dir : testsdir)
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002823if want_tests != 'false' and static_libudev_pic
Zbigniew Jędrzejewski-Szmek0632b4c2018-04-23 13:49:27 +02002824 test('test-libudev-static-sym', exe)
2825endif
Zbigniew Jędrzejewski-Szmeke0bec522017-04-10 15:20:42 -04002826
Zbigniew Jędrzejewski-Szmek69e96422017-04-07 00:19:09 -04002827############################################################
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002828
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002829fuzzer_exes = []
2830
Michael Olbrich59967402018-11-11 11:27:35 +01002831if get_option('tests') != 'false'
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002832foreach tuple : fuzzers
2833 sources = tuple[0]
2834 link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
2835 dependencies = tuple[2]
2836 defs = tuple.length() >= 4 ? tuple[3] : []
2837 incs = tuple.length() >= 5 ? tuple[4] : includes
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002838 link_args = []
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002839
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002840 if want_ossfuzz or want_fuzzbuzz
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002841 dependencies += fuzzing_engine
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002842 elif want_libfuzzer
2843 if fuzzing_engine.found()
2844 dependencies += fuzzing_engine
2845 else
2846 link_args += ['-fsanitize=fuzzer']
2847 endif
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002848 else
2849 sources += 'src/fuzz/fuzz-main.c'
2850 endif
2851
Evgeny Vereshchagin87ac55a2019-05-05 19:28:42 +00002852 if want_fuzzbuzz
2853 sources += 'src/fuzz/fuzzer-entry-point.c'
2854 endif
2855
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002856 name = sources[0].split('/')[-1].split('.')[0]
2857
2858 fuzzer_exes += executable(
2859 name,
2860 sources,
2861 include_directories : [incs, include_directories('src/fuzz')],
2862 link_with : link_with,
2863 dependencies : dependencies,
2864 c_args : defs,
Evgeny Vereshchagin9c5c4672019-05-09 00:03:41 +02002865 link_args: link_args,
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002866 install : false)
2867endforeach
Michael Olbrich59967402018-11-11 11:27:35 +01002868endif
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002869
Zbigniew Jędrzejewski-Szmek63058f42019-01-05 13:20:52 +01002870run_target('fuzzers',
2871 depends : fuzzer_exes,
Jonathan Rudenberg7db7d5b2018-01-13 19:51:07 -05002872 command : ['true'])
2873
2874############################################################
2875
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002876make_directive_index_py = find_program('tools/make-directive-index.py')
2877make_man_index_py = find_program('tools/make-man-index.py')
Zbigniew Jędrzejewski-Szmekb184e8f2017-04-13 19:59:21 -04002878xml_helper_py = find_program('tools/xml_helper.py')
Zbigniew Jędrzejewski-Szmekabba22c2017-04-15 00:40:59 -04002879hwdb_update_sh = find_program('tools/meson-hwdb-update.sh')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002880
2881subdir('units')
2882subdir('sysctl.d')
2883subdir('sysusers.d')
2884subdir('tmpfiles.d')
Zbigniew Jędrzejewski-Szmeke783f952017-11-23 13:23:42 +01002885subdir('presets')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002886subdir('hwdb')
2887subdir('network')
2888subdir('man')
2889subdir('shell-completion/bash')
2890subdir('shell-completion/zsh')
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002891subdir('docs/sysvinit')
2892subdir('docs/var-log')
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002893
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002894install_subdir('factory/etc',
2895 install_dir : factorydir)
2896
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002897install_data('xorg/50-systemd-user.sh',
2898 install_dir : xinitrcdir)
Dimitri John Ledkov582faeb2017-08-02 13:41:18 +01002899install_data('modprobe.d/systemd.conf',
2900 install_dir : modprobedir)
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002901install_data('LICENSE.GPL2',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002902 'LICENSE.LGPL2.1',
Lennart Poetteringf09eb762018-02-26 11:48:46 +01002903 'NEWS',
2904 'README',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302905 'docs/CODING_STYLE.md',
Filipe Brandenburger1d1cb162018-09-07 01:22:34 -07002906 'docs/DISTRO_PORTING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002907 'docs/ENVIRONMENT.md',
Faheel Ahmadeea98402018-10-30 23:01:20 +05302908 'docs/HACKING.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002909 'docs/TRANSIENT-SETTINGS.md',
Filipe Brandenburgerb6dc0d72018-09-07 01:44:49 -07002910 'docs/TRANSLATORS.md',
Filipe Brandenburger9e825eb2018-09-07 01:02:42 -07002911 'docs/UIDS-GIDS.md',
Zbigniew Jędrzejewski-Szmek5c231282017-04-04 23:03:47 -04002912 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
2913 install_dir : docdir)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002914
Zbigniew Jędrzejewski-Szmek94e75a52017-04-09 23:55:05 -04002915meson.add_install_script('sh', '-c', mkdir_p.format(systemdstatedir))
2916meson.add_install_script('sh', '-c', 'touch $DESTDIR@0@'.format(prefixdir))
2917
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002918############################################################
2919
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002920meson_check_help = find_program('tools/meson-check-help.sh')
2921
2922foreach exec : public_programs
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002923 name = exec.full_path().split('/')[-1]
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002924 if want_tests != 'false'
2925 test('check-help-' + name,
2926 meson_check_help,
Zbigniew Jędrzejewski-Szmekc1cd6742018-09-12 16:57:06 +02002927 args : exec.full_path())
Zbigniew Jędrzejewski-Szmek938be082018-09-12 11:08:49 +02002928 endif
Zbigniew Jędrzejewski-Szmek005a29f2017-04-13 11:52:05 -04002929endforeach
2930
2931############################################################
2932
Zbigniew Jędrzejewski-Szmekc6448ee2019-05-07 20:46:36 +02002933check_directives_sh = find_program('tools/check-directives.sh')
2934
2935if want_tests != 'false'
2936 test('check-directives',
2937 check_directives_sh,
2938 args : project_source_root)
2939endif
2940
2941############################################################
2942
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002943# Enable tests for all supported sanitizers
2944foreach tuple : sanitizers
2945 sanitizer = tuple[0]
2946 build = tuple[1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002947
Yu Watanabe7a6397d2018-05-15 20:18:24 +09002948 if cc.has_link_argument('-fsanitize=@0@'.format(sanitizer))
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002949 prev = ''
2950 foreach p : fuzz_regression_tests
2951 b = p.split('/')[-2]
2952 c = p.split('/')[-1]
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002953
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002954 name = '@0@:@1@'.format(b, sanitizer)
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002955
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002956 if name != prev
2957 if want_tests == 'false'
2958 message('Not compiling @0@ because tests is set to false'.format(name))
2959 elif slow_tests
2960 exe = custom_target(
2961 name,
2962 output : name,
2963 depends : build,
2964 command : [env, 'ln', '-fs',
2965 join_paths(build.full_path(), b),
2966 '@OUTPUT@'],
2967 build_by_default : true)
2968 else
2969 message('Not compiling @0@ because slow-tests is set to false'.format(name))
2970 endif
2971 endif
2972 prev = name
2973
2974 if want_tests != 'false' and slow_tests
2975 test('@0@:@1@:@2@'.format(b, c, sanitizer),
2976 env,
2977 args : [exe.full_path(),
Davide Cavalca1485aac2019-02-27 11:19:07 -05002978 join_paths(project_source_root, p)])
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002979 endif
2980 endforeach
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002981 endif
2982endforeach
2983
Zbigniew Jędrzejewski-Szmek52d4d1d2018-03-14 14:27:04 +01002984
Zbigniew Jędrzejewski-Szmekb68dfb92018-01-19 17:54:30 +11002985############################################################
2986
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04002987if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002988 all_files = run_command(
2989 git,
Davide Cavalca1485aac2019-02-27 11:19:07 -05002990 ['--git-dir=@0@/.git'.format(project_source_root),
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04002991 'ls-files',
2992 ':/*.[ch]'])
2993 all_files = files(all_files.stdout().split())
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04002994
userwithuide85a6902017-08-09 13:41:44 +00002995 custom_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04002996 'tags',
userwithuide85a6902017-08-09 13:41:44 +00002997 output : 'tags',
Davide Cavalca1485aac2019-02-27 11:19:07 -05002998 command : [env, 'etags', '-o', '@0@/TAGS'.format(project_source_root)] + all_files)
Evegeny Vereshchagin2f099742018-05-18 10:52:17 +00002999 run_target(
Zbigniew Jędrzejewski-Szmek0700e8b2017-07-03 12:42:29 -04003000 'ctags',
Davide Cavalca1485aac2019-02-27 11:19:07 -05003001 command : [env, 'ctags', '-o', '@0@/tags'.format(project_source_root)] + all_files)
Zbigniew Jędrzejewski-Szmekd68b3422017-04-06 14:33:27 -04003002endif
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003003
3004if git.found()
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003005 meson_git_contrib_sh = find_program('tools/meson-git-contrib.sh')
Zbigniew Jędrzejewski-Szmeka923e082017-04-17 19:48:20 -04003006 run_target(
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003007 'git-contrib',
Zbigniew Jędrzejewski-Szmek37efbbd2017-04-17 19:25:00 -04003008 command : [meson_git_contrib_sh])
Zbigniew Jędrzejewski-Szmek177929c2017-04-15 00:16:23 -04003009endif
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003010
3011if git.found()
3012 git_head = run_command(
3013 git,
Davide Cavalca1485aac2019-02-27 11:19:07 -05003014 ['--git-dir=@0@/.git'.format(project_source_root),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003015 'rev-parse', 'HEAD']).stdout().strip()
3016 git_head_short = run_command(
3017 git,
Davide Cavalca1485aac2019-02-27 11:19:07 -05003018 ['--git-dir=@0@/.git'.format(project_source_root),
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003019 'rev-parse', '--short=7', 'HEAD']).stdout().strip()
3020
3021 run_target(
3022 'git-snapshot',
3023 command : ['git', 'archive',
Davide Cavalca1485aac2019-02-27 11:19:07 -05003024 '-o', '@0@/systemd-@1@.tar.gz'.format(project_source_root,
Zbigniew Jędrzejewski-Szmekdd6ab3d2017-04-24 19:28:05 -04003025 git_head_short),
3026 '--prefix', 'systemd-@0@/'.format(git_head),
3027 'HEAD'])
3028endif
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003029
3030############################################################
3031
Lennart Poettering51b13862017-12-20 12:51:14 +01003032meson_check_api_docs_sh = find_program('tools/meson-check-api-docs.sh')
3033run_target(
3034 'check-api-docs',
3035 depends : [man, libsystemd, libudev],
3036 command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
3037
3038############################################################
3039
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003040status = [
3041 '@0@ @1@'.format(meson.project_name(), meson.project_version()),
3042
Zbigniew Jędrzejewski-Szmek26754132018-03-01 11:49:42 +01003043 'split /usr: @0@'.format(split_usr),
Zbigniew Jędrzejewski-Szmek157baa82018-03-01 10:28:29 +01003044 'split bin-sbin: @0@'.format(split_bin),
Yu Watanabe359b4962017-11-25 20:35:24 +09003045 'prefix directory: @0@'.format(prefixdir),
3046 'rootprefix directory: @0@'.format(rootprefixdir),
3047 'sysconf directory: @0@'.format(sysconfdir),
3048 'include directory: @0@'.format(includedir),
3049 'lib directory: @0@'.format(libdir),
3050 'rootlib directory: @0@'.format(rootlibdir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003051 'SysV init scripts: @0@'.format(sysvinit_path),
3052 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
Yu Watanabe359b4962017-11-25 20:35:24 +09003053 'PAM modules directory: @0@'.format(pamlibdir),
3054 'PAM configuration directory: @0@'.format(pamconfdir),
3055 'RPM macros directory: @0@'.format(rpmmacrosdir),
3056 'modprobe.d directory: @0@'.format(modprobedir),
3057 'D-Bus policy directory: @0@'.format(dbuspolicydir),
3058 'D-Bus session directory: @0@'.format(dbussessionservicedir),
3059 'D-Bus system directory: @0@'.format(dbussystemservicedir),
3060 'bash completions directory: @0@'.format(bashcompletiondir),
3061 'zsh completions directory: @0@'.format(zshcompletiondir),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003062 'extra start script: @0@'.format(get_option('rc-local')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003063 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
3064 get_option('debug-tty')),
3065 'TTY GID: @0@'.format(tty_gid),
Yu Watanabeac093402018-05-10 16:04:16 +09003066 'users GID: @0@'.format(substs.get('USERS_GID')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003067 'maximum system UID: @0@'.format(system_uid_max),
3068 'maximum system GID: @0@'.format(system_gid_max),
Lennart Poettering87d5e4f2017-12-02 12:48:31 +01003069 'minimum dynamic UID: @0@'.format(dynamic_uid_min),
3070 'maximum dynamic UID: @0@'.format(dynamic_uid_max),
3071 'minimum container UID base: @0@'.format(container_uid_base_min),
3072 'maximum container UID base: @0@'.format(container_uid_base_max),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003073 '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
Tom Stellard4e15a732017-10-31 08:46:24 -07003074 'render group access mode: @0@'.format(get_option('group-render-mode')),
Yu Watanabe359b4962017-11-25 20:35:24 +09003075 'certificate root directory: @0@'.format(get_option('certificate-root')),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003076 'support URL: @0@'.format(support_url),
Lennart Poetteringafde4572017-12-05 11:00:24 +01003077 'nobody user name: @0@'.format(nobody_user),
3078 'nobody group name: @0@'.format(nobody_group),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003079 'fallback hostname: @0@'.format(get_option('fallback-hostname')),
Zbigniew Jędrzejewski-Szmek5248e7e2017-07-11 02:15:08 -04003080 'symbolic gateway hostnames: @0@'.format(', '.join(gateway_hostnames)),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003081
3082 'default DNSSEC mode: @0@'.format(default_dnssec),
Iwan Timmerc9299be2018-06-13 20:26:24 +02003083 'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003084 'default cgroup hierarchy: @0@'.format(default_hierarchy),
Zbigniew Jędrzejewski-Szmek06da5c62018-12-11 23:28:29 +01003085 'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
Dave Reisner8ca9e922018-12-28 07:38:36 -05003086 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
3087 'default locale: @0@'.format(default_locale)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003088
3089alt_dns_servers = '\n '.join(dns_servers.split(' '))
3090alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
3091status += [
3092 'default DNS servers: @0@'.format(alt_dns_servers),
3093 'default NTP servers: @0@'.format(alt_ntp_servers)]
3094
3095alt_time_epoch = run_command('date', '-Is', '-u', '-d',
3096 '@@0@'.format(time_epoch)).stdout().strip()
3097status += [
3098 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
3099
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003100status += [
Zbigniew Jędrzejewski-Szmekabc8caf2018-10-11 11:10:53 +02003101 'static libsystemd: @0@'.format(static_libsystemd),
3102 'static libudev: @0@'.format(static_libudev)]
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003103
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003104# TODO:
3105# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
3106# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
3107# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
3108
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003109if conf.get('ENABLE_EFI') == 1
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003110 status += 'efi arch: @0@'.format(efi_arch)
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003111
3112 if have_gnu_efi
3113 status += [
3114 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
Zbigniew Jędrzejewski-Szmekc512dfb2018-12-18 00:02:11 +01003115 'EFI CC @0@'.format(' '.join(efi_cc)),
Yu Watanabe359b4962017-11-25 20:35:24 +09003116 'EFI lib directory: @0@'.format(efi_libdir),
3117 'EFI lds directory: @0@'.format(efi_ldsdir),
3118 'EFI include directory: @0@'.format(efi_incdir)]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003119 endif
3120endif
3121
3122found = []
3123missing = []
3124
3125foreach tuple : [
3126 ['libcryptsetup'],
3127 ['PAM'],
3128 ['AUDIT'],
3129 ['IMA'],
3130 ['AppArmor'],
3131 ['SELinux'],
3132 ['SECCOMP'],
3133 ['SMACK'],
3134 ['zlib'],
3135 ['xz'],
3136 ['lz4'],
3137 ['bzip2'],
3138 ['ACL'],
3139 ['gcrypt'],
3140 ['qrencode'],
3141 ['microhttpd'],
3142 ['gnutls'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003143 ['openssl'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003144 ['libcurl'],
Zbigniew Jędrzejewski-Szmekd1bf5672017-06-16 09:16:28 -04003145 ['idn'],
Zbigniew Jędrzejewski-Szmek87057e22017-05-09 21:56:34 -04003146 ['libidn2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003147 ['libidn'],
3148 ['libiptc'],
3149 ['elfutils'],
3150 ['binfmt'],
3151 ['vconsole'],
3152 ['quotacheck'],
3153 ['tmpfiles'],
3154 ['environment.d'],
3155 ['sysusers'],
3156 ['firstboot'],
3157 ['randomseed'],
3158 ['backlight'],
3159 ['rfkill'],
3160 ['logind'],
3161 ['machined'],
Lennart Poettering61d05782018-04-16 21:41:40 +02003162 ['portabled'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003163 ['importd'],
3164 ['hostnamed'],
3165 ['timedated'],
3166 ['timesyncd'],
3167 ['localed'],
3168 ['networkd'],
Yu Watanabea7456af2017-10-06 16:33:21 +09003169 ['resolve'],
Iwan Timmer096cbdc2018-07-26 22:47:50 +01003170 ['DNS-over-TLS(gnutls)', conf.get('DNS_OVER_TLS_USE_GNUTLS') == 1],
3171 ['DNS-over-TLS(openssl)', conf.get('DNS_OVER_TLS_USE_OPENSSL') == 1],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003172 ['coredump'],
3173 ['polkit'],
3174 ['legacy pkla', install_polkit_pkla],
3175 ['efi'],
3176 ['gnu-efi', have_gnu_efi],
3177 ['kmod'],
3178 ['xkbcommon'],
Zbigniew Jędrzejewski-Szmekc4c978a2018-01-12 05:47:17 +01003179 ['pcre2'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003180 ['blkid'],
3181 ['dbus'],
3182 ['glib'],
Zbigniew Jędrzejewski-Szmek6bd2bc82018-08-07 18:10:53 +02003183 ['nss-myhostname'],
3184 ['nss-mymachines'],
3185 ['nss-resolve'],
3186 ['nss-systemd'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003187 ['hwdb'],
3188 ['tpm'],
3189 ['man pages', want_man],
3190 ['html pages', want_html],
3191 ['man page indices', want_man and have_lxml],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003192 ['SysV compat'],
3193 ['utmp'],
3194 ['ldconfig'],
3195 ['hibernate'],
3196 ['adm group', get_option('adm-group')],
3197 ['wheel group', get_option('wheel-group')],
Franck Buib14e1b42017-05-09 14:02:37 +02003198 ['gshadow'],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003199 ['debug hashmap'],
3200 ['debug mmap cache'],
Yu Watanabed6601492018-11-23 00:36:35 +09003201 ['debug siphash'],
Zbigniew Jędrzejewski-Szmekd18cb392018-05-13 22:28:24 +02003202 ['valgrind', conf.get('VALGRIND') == 1],
Zbigniew Jędrzejewski-Szmekfd5dec92018-08-07 17:34:47 +02003203 ['trace logging', conf.get('LOG_TRACE') == 1],
Lennart Poettering19d8c9c2018-10-05 16:38:42 +02003204 ['link-udev-shared', get_option('link-udev-shared')],
3205 ['link-systemctl-shared', get_option('link-systemctl-shared')],
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003206]
3207
Zbigniew Jędrzejewski-Szmekaf4d7862018-03-09 14:21:08 +01003208 if tuple.length() >= 2
3209 cond = tuple[1]
3210 else
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003211 ident1 = 'HAVE_' + tuple[0].underscorify().to_upper()
3212 ident2 = 'ENABLE_' + tuple[0].underscorify().to_upper()
Zbigniew Jędrzejewski-Szmek349cc4a2017-10-03 10:41:51 +02003213 cond = conf.get(ident1, 0) == 1 or conf.get(ident2, 0) == 1
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003214 endif
3215 if cond
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003216 found += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003217 else
Zbigniew Jędrzejewski-Szmek5a8b1642018-07-31 09:44:11 +02003218 missing += tuple[0]
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003219 endif
3220endforeach
3221
3222status += [
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003223 '',
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003224 'enabled features: @0@'.format(', '.join(found)),
Zbigniew Jędrzejewski-Szmek9d39c1b2017-07-26 14:14:44 -04003225 '',
3226 'disabled features: @0@'.format(', '.join(missing)),
3227 '']
Zbigniew Jędrzejewski-Szmek829257d2017-04-27 20:54:52 -04003228message('\n '.join(status))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003229
3230if rootprefixdir != rootprefix_default
Yu Watanabe8ea9fad2018-05-10 14:50:52 +09003231 warning('\n' +
3232 'Note that the installation prefix was changed to "@0@".\n'.format(rootprefixdir) +
3233 'systemd used fixed names for unit file directories and other paths, so anything\n' +
3234 'except the default ("@0@") is strongly discouraged.'.format(rootprefix_default))
Zbigniew Jędrzejewski-Szmek9a8e64b2017-11-28 21:46:53 +01003235endif