Skip to content

Commit 781e690

Browse files
nirbheekjpakkane
authored andcommitted
dependencies: Distinguish native/cross while caching
Closes #1366
1 parent 4dae59d commit 781e690

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

mesonbuild/dependencies.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,14 @@ def __init__(self, name, environment, kwargs):
108108
self.cargs = []
109109
self.libs = []
110110
if 'native' in kwargs and environment.is_cross_build():
111-
want_cross = not kwargs['native']
111+
self.want_cross = not kwargs['native']
112112
else:
113-
want_cross = environment.is_cross_build()
113+
self.want_cross = environment.is_cross_build()
114114
self.name = name
115115

116116
# When finding dependencies for cross-compiling, we don't care about
117117
# the 'native' pkg-config
118-
if want_cross:
118+
if self.want_cross:
119119
if 'pkgconfig' not in environment.cross_info.config['binaries']:
120120
if self.required:
121121
raise DependencyException('Pkg-config binary missing from cross file')
@@ -142,7 +142,7 @@ def __init__(self, name, environment, kwargs):
142142
if self.required:
143143
raise DependencyException('Pkg-config not found.')
144144
return
145-
if want_cross:
145+
if self.want_cross:
146146
self.type_string = 'Cross'
147147
else:
148148
self.type_string = 'Native'
@@ -551,17 +551,17 @@ def __init__(self, environment, kwargs):
551551
self.environment = environment
552552
self.libdir = ''
553553
if 'native' in kwargs and environment.is_cross_build():
554-
want_cross = not kwargs['native']
554+
self.want_cross = not kwargs['native']
555555
else:
556-
want_cross = environment.is_cross_build()
556+
self.want_cross = environment.is_cross_build()
557557
try:
558558
self.boost_root = os.environ['BOOST_ROOT']
559559
if not os.path.isabs(self.boost_root):
560560
raise DependencyException('BOOST_ROOT must be an absolute path.')
561561
except KeyError:
562562
self.boost_root = None
563563
if self.boost_root is None:
564-
if want_cross:
564+
if self.want_cross:
565565
raise DependencyException('BOOST_ROOT is needed while cross-compiling')
566566
if mesonlib.is_windows():
567567
self.boost_root = self.detect_win_root()

mesonbuild/interpreter.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,6 +1788,15 @@ def func_dependency(self, node, args, kwargs):
17881788
raise InvalidArguments('''Characters <, > and = are forbidden in target names. To specify version
17891789
requirements use the version keyword argument instead.''')
17901790
identifier = dependencies.get_dep_identifier(name, kwargs)
1791+
# Check if we want this as a cross-dep or a native-dep
1792+
# FIXME: Not all dependencies support such a distinction right now,
1793+
# and we repeat this check inside dependencies that do. We need to
1794+
# consolidate this somehow.
1795+
is_cross = self.environment.is_cross_build()
1796+
if 'native' in kwargs and is_cross:
1797+
want_cross = not kwargs['native']
1798+
else:
1799+
want_cross = is_cross
17911800
# Check if we've already searched for and found this dep
17921801
cached_dep = None
17931802
if identifier in self.coredata.deps:
@@ -1804,6 +1813,9 @@ def func_dependency(self, node, args, kwargs):
18041813
# so we properly go into fallback/error code paths
18051814
if kwargs.get('required', True) and not getattr(cached_dep, 'required', False):
18061815
cached_dep = None
1816+
# Don't reuse cached dep if one is a cross-dep and the other is a native dep
1817+
if not getattr(cached_dep, 'want_cross', is_cross) == want_cross:
1818+
cached_dep = None
18071819

18081820
if cached_dep:
18091821
dep = cached_dep

0 commit comments

Comments
 (0)