summaryrefslogtreecommitdiff
blob: 0b488f50cd5b68b56172957d46a915e281608958 (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
From 3bb300a76ed4d7a614c4a83ddefe86425040ec13 Mon Sep 17 00:00:00 2001
From: Dylan Baker <dylan@pnwbakers.com>
Date: Mon, 24 Sep 2018 11:08:19 -0700
Subject: [PATCH] backends: allow running host arch binaries on compatible
 build machines

Meson 0.48.0 some validation for using compiled binaries in custom
targets and generators, which is nice. It didn't take into account
though that as long as the OS is the same, some architectures support
running a related architecture natively (x86_64 can run x86 natively,
for example).

Fortunately we already have a method for covering this case available
through the Environment class.

Fixes #4254
---
 mesonbuild/backend/backends.py | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 0e7e8e0fe3..ccbbe173fd 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import os, pickle, re
+import textwrap
 from .. import build
 from .. import dependencies
 from .. import mesonlib
@@ -731,10 +732,11 @@ def get_regen_filelist(self):
     def exe_object_to_cmd_array(self, exe):
         if self.environment.is_cross_build() and \
            isinstance(exe, build.BuildTarget) and exe.is_cross:
-            if self.environment.exe_wrapper is None:
-                s = 'Can not use target %s as a generator because it is cross-built\n'
-                s += 'and no exe wrapper is defined. You might want to set it to native instead.'
-                s = s % exe.name
+            if self.environment.exe_wrapper is None and self.environment.cross_info.need_exe_wrapper():
+                s = textwrap.dedent('''
+                    Can not use target {} as a generator because it is cross-built
+                    and no exe wrapper is defined or needs_exe_wrapper is true.
+                    You might want to set it to native instead.'''.format(exe.name))
                 raise MesonException(s)
         if isinstance(exe, build.BuildTarget):
             exe_arr = [os.path.join(self.environment.get_build_dir(), self.get_target_filename(exe))]