summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/meson/meson/0003-native_bindir.patch
blob: 57de598d2f1d7db8f5725fe06a5535a043aef0ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
From ac38495de38a1ea42e2bc09a2f23c2e945fbc22d Mon Sep 17 00:00:00 2001
From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Date: Wed, 15 Nov 2017 15:05:01 +0100
Subject: [PATCH] native_bindir

Some libraries, like QT, have pre-processors that convert their input
files into something that the cross-compiler can process. We find the
path of those pre-processors via pkg-config-native instead of
pkg-config.

This path forces the use of pkg-config-native for host_bins arguments.

There are some discussions upstream to merge this patch, but I presonaly believe
that is is OE only. https://github.com/mesonbuild/meson/issues/1849#issuecomment-303730323

Upstream-Status: Inappropriate [OE specific]
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

---
 mesonbuild/dependencies/base.py | 19 +++++++++++--------
 mesonbuild/dependencies/ui.py   |  6 +++---
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 21da8e2..7d1ef85 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -155,7 +155,7 @@ class Dependency:
     def get_exe_args(self, compiler):
         return []
 
-    def get_pkgconfig_variable(self, variable_name, kwargs):
+    def get_pkgconfig_variable(self, variable_name, kwargs, use_native=False):
         raise DependencyException('{!r} is not a pkgconfig dependency'.format(self.name))
 
     def get_configtool_variable(self, variable_name):
@@ -214,7 +214,7 @@ class InternalDependency(Dependency):
         self.sources = sources
         self.ext_deps = ext_deps
 
-    def get_pkgconfig_variable(self, variable_name, kwargs):
+    def get_pkgconfig_variable(self, variable_name, kwargs, use_native=False):
         raise DependencyException('Method "get_pkgconfig_variable()" is '
                                   'invalid for an internal dependency')
 
@@ -639,15 +639,18 @@ class PkgConfigDependency(ExternalDependency):
         return s.format(self.__class__.__name__, self.name, self.is_found,
                         self.version_reqs)
 
-    def _call_pkgbin_real(self, args, env):
-        cmd = self.pkgbin.get_command() + args
+    def _call_pkgbin_real(self, args, env, use_native=False):
+        if use_native:
+            cmd = [self.pkgbin.get_command()[0] + "-native"] + args
+        else:
+            cmd = self.pkgbin.get_command() + args
         p, out = Popen_safe(cmd, env=env)[0:2]
         rc, out = p.returncode, out.strip()
         call = ' '.join(cmd)
         mlog.debug("Called `{}` -> {}\n{}".format(call, rc, out))
         return rc, out
 
-    def _call_pkgbin(self, args, env=None):
+    def _call_pkgbin(self, args, env=None, use_native=False):
         # Always copy the environment since we're going to modify it
         # with pkg-config variables
         if env is None:
@@ -663,7 +666,7 @@ class PkgConfigDependency(ExternalDependency):
         targs = tuple(args)
         cache = PkgConfigDependency.pkgbin_cache
         if (self.pkgbin, targs, fenv) not in cache:
-            cache[(self.pkgbin, targs, fenv)] = self._call_pkgbin_real(args, env)
+            cache[(self.pkgbin, targs, fenv)] = self._call_pkgbin_real(args, env, use_native)
         return cache[(self.pkgbin, targs, fenv)]
 
     def _convert_mingw_paths(self, args):
@@ -845,7 +848,7 @@ class PkgConfigDependency(ExternalDependency):
                                       (self.name, out_raw))
         self.link_args, self.raw_link_args = self._search_libs(out, out_raw)
 
-    def get_pkgconfig_variable(self, variable_name, kwargs):
+    def get_pkgconfig_variable(self, variable_name, kwargs, use_native=False):
         options = ['--variable=' + variable_name, self.name]
 
         if 'define_variable' in kwargs:
@@ -858,7 +861,7 @@ class PkgConfigDependency(ExternalDependency):
 
             options = ['--define-variable=' + '='.join(definition)] + options
 
-        ret, out = self._call_pkgbin(options)
+        ret, out = self._call_pkgbin(options, use_native=use_native)
         variable = ''
         if ret != 0:
             if self.required:
diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py
index 6d784e6..73a9e13 100644
--- a/mesonbuild/dependencies/ui.py
+++ b/mesonbuild/dependencies/ui.py
@@ -330,7 +330,7 @@ class QtBaseDependency(ExternalDependency):
         self.bindir = self.get_pkgconfig_host_bins(core)
         if not self.bindir:
             # If exec_prefix is not defined, the pkg-config file is broken
-            prefix = core.get_pkgconfig_variable('exec_prefix', {})
+            prefix = core.get_pkgconfig_variable('exec_prefix', {}, use_native=True)
             if prefix:
                 self.bindir = os.path.join(prefix, 'bin')
 
@@ -507,7 +507,7 @@ class Qt4Dependency(QtBaseDependency):
         applications = ['moc', 'uic', 'rcc', 'lupdate', 'lrelease']
         for application in applications:
             try:
-                return os.path.dirname(core.get_pkgconfig_variable('%s_location' % application, {}))
+                return os.path.dirname(core.get_pkgconfig_variable('%s_location' % application, {}, use_native=True))
             except MesonException:
                 pass
 
@@ -517,7 +517,7 @@ class Qt5Dependency(QtBaseDependency):
         QtBaseDependency.__init__(self, 'qt5', env, kwargs)
 
     def get_pkgconfig_host_bins(self, core):
-        return core.get_pkgconfig_variable('host_bins', {})
+        return core.get_pkgconfig_variable('host_bins', {}, use_native=True)
 
     def get_private_includes(self, mod_inc_dir, module):
         return _qt_get_private_includes(mod_inc_dir, module, self.version)