summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/meson/meson/0003-native_bindir.patch
blob: 2b22531dd0c1d67e08bc377565e4c0e98ac99788 (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 e762d85c823adfefc27ba6128c7b997aa50166ce 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 6d3678f..90fdb80 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -146,7 +146,7 @@ class Dependency:
     def need_threads(self):
         return False
 
-    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):
@@ -183,7 +183,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')
 
@@ -523,15 +523,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):
         if env is None:
             fenv = env
             env = os.environ
@@ -540,7 +543,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):
@@ -718,7 +721,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:
@@ -731,7 +734,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 197d22c..c683d21 100644
--- a/mesonbuild/dependencies/ui.py
+++ b/mesonbuild/dependencies/ui.py
@@ -285,7 +285,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')
 
@@ -427,7 +427,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
 
@@ -437,7 +437,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)