Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 1 | From 1546e1f95a119175b7a4e4272a26dd85505e5ede Mon Sep 17 00:00:00 2001 |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 2 | From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> |
| 3 | Date: Wed, 15 Nov 2017 15:05:01 +0100 |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 4 | Subject: [PATCH] native_bindir |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 5 | |
| 6 | Some libraries, like QT, have pre-processors that convert their input |
| 7 | files into something that the cross-compiler can process. We find the |
| 8 | path of those pre-processors via pkg-config-native instead of |
| 9 | pkg-config. |
| 10 | |
| 11 | This path forces the use of pkg-config-native for host_bins arguments. |
| 12 | |
| 13 | There are some discussions upstream to merge this patch, but I presonaly believe |
| 14 | that is is OE only. https://github.com/mesonbuild/meson/issues/1849#issuecomment-303730323 |
| 15 | |
| 16 | Upstream-Status: Inappropriate [OE specific] |
| 17 | Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 18 | |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 19 | --- |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 20 | mesonbuild/dependencies/base.py | 19 +++++++++++-------- |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 21 | mesonbuild/dependencies/ui.py | 6 +++--- |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 22 | 2 files changed, 14 insertions(+), 11 deletions(-) |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 23 | |
| 24 | diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 25 | index cd77b4b..7e3f338 100644 |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 26 | --- a/mesonbuild/dependencies/base.py |
| 27 | +++ b/mesonbuild/dependencies/base.py |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 28 | @@ -192,7 +192,7 @@ class Dependency: |
Brad Bishop | 08902b0 | 2019-08-20 09:16:51 -0400 | [diff] [blame] | 29 | def get_exe_args(self, compiler): |
| 30 | return [] |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 31 | |
| 32 | - def get_pkgconfig_variable(self, variable_name: str, kwargs: T.Dict[str, T.Any]) -> str: |
| 33 | + def get_pkgconfig_variable(self, variable_name: str, kwargs: T.Dict[str, T.Any], use_native=False) -> str: |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 34 | raise DependencyException('{!r} is not a pkgconfig dependency'.format(self.name)) |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 35 | |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 36 | def get_configtool_variable(self, variable_name): |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 37 | @@ -280,7 +280,7 @@ class InternalDependency(Dependency): |
| 38 | return True |
| 39 | return any(d.is_built() for d in self.ext_deps) |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 40 | |
| 41 | - def get_pkgconfig_variable(self, variable_name: str, kwargs: T.Dict[str, T.Any]) -> str: |
| 42 | + def get_pkgconfig_variable(self, variable_name: str, kwargs: T.Dict[str, T.Any], use_native=False) -> str: |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 43 | raise DependencyException('Method "get_pkgconfig_variable()" is ' |
| 44 | 'invalid for an internal dependency') |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 45 | |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 46 | @@ -658,8 +658,11 @@ class PkgConfigDependency(ExternalDependency): |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 47 | return s.format(self.__class__.__name__, self.name, self.is_found, |
| 48 | self.version_reqs) |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 49 | |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 50 | - def _call_pkgbin_real(self, args, env): |
| 51 | - cmd = self.pkgbin.get_command() + args |
| 52 | + def _call_pkgbin_real(self, args, env, use_native=False): |
| 53 | + if use_native: |
Brad Bishop | f3fd288 | 2019-06-21 08:06:37 -0400 | [diff] [blame] | 54 | + cmd = [self.pkgbin.get_command()[0] + "-native"] + args |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 55 | + else: |
| 56 | + cmd = self.pkgbin.get_command() + args |
William A. Kennington III | c596630 | 2020-03-20 13:04:31 -0700 | [diff] [blame] | 57 | p, out, err = Popen_safe(cmd, env=env) |
| 58 | rc, out, err = p.returncode, out.strip(), err.strip() |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 59 | call = ' '.join(cmd) |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 60 | @@ -685,7 +688,7 @@ class PkgConfigDependency(ExternalDependency): |
| 61 | env['PKG_CONFIG_LIBDIR'] = new_pkg_config_libdir |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 62 | mlog.debug('PKG_CONFIG_LIBDIR: ' + new_pkg_config_libdir) |
| 63 | |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 64 | - def _call_pkgbin(self, args, env=None): |
| 65 | + def _call_pkgbin(self, args, env=None, use_native=False): |
Brad Bishop | 08902b0 | 2019-08-20 09:16:51 -0400 | [diff] [blame] | 66 | # Always copy the environment since we're going to modify it |
| 67 | # with pkg-config variables |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 68 | if env is None: |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 69 | @@ -699,7 +702,7 @@ class PkgConfigDependency(ExternalDependency): |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 70 | targs = tuple(args) |
| 71 | cache = PkgConfigDependency.pkgbin_cache |
| 72 | if (self.pkgbin, targs, fenv) not in cache: |
| 73 | - cache[(self.pkgbin, targs, fenv)] = self._call_pkgbin_real(args, env) |
| 74 | + cache[(self.pkgbin, targs, fenv)] = self._call_pkgbin_real(args, env, use_native) |
| 75 | return cache[(self.pkgbin, targs, fenv)] |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 76 | |
William A. Kennington III | c596630 | 2020-03-20 13:04:31 -0700 | [diff] [blame] | 77 | def _convert_mingw_paths(self, args: T.List[str]) -> T.List[str]: |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 78 | @@ -905,7 +908,7 @@ class PkgConfigDependency(ExternalDependency): |
William A. Kennington III | c596630 | 2020-03-20 13:04:31 -0700 | [diff] [blame] | 79 | (self.name, out_raw)) |
| 80 | self.link_args, self.raw_link_args = self._search_libs(out, out_raw) |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 81 | |
| 82 | - def get_pkgconfig_variable(self, variable_name: str, kwargs: T.Dict[str, T.Any]) -> str: |
| 83 | + def get_pkgconfig_variable(self, variable_name: str, kwargs: T.Dict[str, T.Any], use_native=False) -> str: |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 84 | options = ['--variable=' + variable_name, self.name] |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 85 | |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 86 | if 'define_variable' in kwargs: |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 87 | @@ -918,7 +921,7 @@ class PkgConfigDependency(ExternalDependency): |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 88 | |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 89 | options = ['--define-variable=' + '='.join(definition)] + options |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 90 | |
William A. Kennington III | c596630 | 2020-03-20 13:04:31 -0700 | [diff] [blame] | 91 | - ret, out, err = self._call_pkgbin(options) |
| 92 | + ret, out, err = self._call_pkgbin(options, use_native=use_native) |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 93 | variable = '' |
| 94 | if ret != 0: |
| 95 | if self.required: |
| 96 | diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py |
Andrew Geissler | 90fd73c | 2021-03-05 15:25:55 -0600 | [diff] [blame^] | 97 | index d897d76..a598d2e 100644 |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 98 | --- a/mesonbuild/dependencies/ui.py |
| 99 | +++ b/mesonbuild/dependencies/ui.py |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 100 | @@ -325,7 +325,7 @@ class QtBaseDependency(ExternalDependency): |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 101 | self.bindir = self.get_pkgconfig_host_bins(core) |
| 102 | if not self.bindir: |
| 103 | # If exec_prefix is not defined, the pkg-config file is broken |
| 104 | - prefix = core.get_pkgconfig_variable('exec_prefix', {}) |
| 105 | + prefix = core.get_pkgconfig_variable('exec_prefix', {}, use_native=True) |
| 106 | if prefix: |
| 107 | self.bindir = os.path.join(prefix, 'bin') |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 108 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 109 | @@ -528,7 +528,7 @@ class Qt4Dependency(QtBaseDependency): |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 110 | applications = ['moc', 'uic', 'rcc', 'lupdate', 'lrelease'] |
| 111 | for application in applications: |
| 112 | try: |
| 113 | - return os.path.dirname(core.get_pkgconfig_variable('%s_location' % application, {})) |
| 114 | + return os.path.dirname(core.get_pkgconfig_variable('%s_location' % application, {}, use_native=True)) |
| 115 | except MesonException: |
| 116 | pass |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 117 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 118 | @@ -538,7 +538,7 @@ class Qt5Dependency(QtBaseDependency): |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 119 | QtBaseDependency.__init__(self, 'qt5', env, kwargs) |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 120 | |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 121 | def get_pkgconfig_host_bins(self, core): |
| 122 | - return core.get_pkgconfig_variable('host_bins', {}) |
| 123 | + return core.get_pkgconfig_variable('host_bins', {}, use_native=True) |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 124 | |
Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 125 | def get_private_includes(self, mod_inc_dir, module): |
| 126 | return _qt_get_private_includes(mod_inc_dir, module, self.version) |