aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/coredata.py9
-rw-r--r--mesonbuild/dependencies/base.py4
-rw-r--r--mesonbuild/interpreter.py17
-rw-r--r--mesonbuild/mconf.py3
-rw-r--r--mesonbuild/mintro.py2
-rw-r--r--mesonbuild/modules/rpm.py2
-rw-r--r--mesonbuild/munstable_coredata.py22
7 files changed, 35 insertions, 24 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index 9075c30..ac620d7 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -359,7 +359,14 @@ class CoreData:
self.cross_files = self.__load_config_files(options.cross_file, 'cross')
self.compilers = OrderedDict()
self.cross_compilers = OrderedDict()
- self.deps = OrderedDict()
+
+ build_cache = DependencyCache(self.builtins, False)
+ if self.cross_files:
+ host_cache = DependencyCache(self.builtins, True)
+ else:
+ host_cache = build_cache
+ self.deps = PerMachine(build_cache, host_cache) # type: PerMachine[DependencyCache]
+
self.compiler_check_cache = OrderedDict()
# Only to print a warning if it changes between Meson invocations.
self.config_files = self.__load_config_files(options.native_file, 'native')
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index f2397e2..7836099 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -2358,8 +2358,8 @@ class ExtraFrameworkDependency(ExternalDependency):
return 'framework'
-def get_dep_identifier(name, kwargs, want_cross: bool) -> Tuple:
- identifier = (name, want_cross)
+def get_dep_identifier(name, kwargs) -> Tuple:
+ identifier = (name, )
for key, value in kwargs.items():
# 'version' is irrelevant for caching; the caller must check version matches
# 'native' is handled above with `want_cross`
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 4a91b68..9efe5cd 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2860,14 +2860,13 @@ external dependencies (including libraries) must go to "dependencies".''')
# FIXME: Not all dependencies support such a distinction right now,
# and we repeat this check inside dependencies that do. We need to
# consolidate this somehow.
- is_cross = self.environment.is_cross_build()
- if 'native' in kwargs and is_cross:
- want_cross = not kwargs['native']
+ if self.environment.is_cross_build() and kwargs.get('native', False):
+ for_machine = MachineChoice.BUILD
else:
- want_cross = is_cross
+ for_machine = MachineChoice.HOST
- identifier = dependencies.get_dep_identifier(name, kwargs, want_cross)
- cached_dep = self.coredata.deps.get(identifier)
+ identifier = dependencies.get_dep_identifier(name, kwargs)
+ cached_dep = self.coredata.deps[for_machine].get(identifier)
if cached_dep:
if not cached_dep.found():
mlog.log('Dependency', mlog.bold(name),
@@ -3019,7 +3018,11 @@ external dependencies (including libraries) must go to "dependencies".''')
# cannot cache them. They must always be evaluated else
# we won't actually read all the build files.
if dep.found():
- self.coredata.deps[identifier] = dep
+ if self.environment.is_cross_build() and kwargs.get('native', False):
+ for_machine = MachineChoice.BUILD
+ else:
+ for_machine = MachineChoice.HOST
+ self.coredata.deps[for_machine].put(identifier, dep)
return DependencyHolder(dep, self.subproject)
if has_fallback:
diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py
index b62c8b3..6e0d2d0 100644
--- a/mesonbuild/mconf.py
+++ b/mesonbuild/mconf.py
@@ -63,7 +63,8 @@ class Conf:
raise ConfException('Directory {} is neither a Meson build directory nor a project source directory.'.format(build_dir))
def clear_cache(self):
- self.coredata.deps.clear()
+ self.coredata.deps.host.clear()
+ self.coredata.deps.build.clear()
def set_options(self, options):
self.coredata.set_options(options)
diff --git a/mesonbuild/mintro.py b/mesonbuild/mintro.py
index cf55b6f..1d716ef 100644
--- a/mesonbuild/mintro.py
+++ b/mesonbuild/mintro.py
@@ -282,7 +282,7 @@ def list_deps_from_source(intr: IntrospectionInterpreter):
def list_deps(coredata: cdata.CoreData):
result = []
- for d in coredata.deps.values():
+ for d in coredata.deps.host.values():
if d.found():
result += [{'name': d.name,
'compile_args': d.get_compile_args(),
diff --git a/mesonbuild/modules/rpm.py b/mesonbuild/modules/rpm.py
index 7c1cefb..b99ae8d 100644
--- a/mesonbuild/modules/rpm.py
+++ b/mesonbuild/modules/rpm.py
@@ -83,7 +83,7 @@ class RPMModule(ExtensionModule):
fn.write('BuildRequires: meson\n')
for compiler in required_compilers:
fn.write('BuildRequires: %s\n' % compiler)
- for dep in coredata.environment.coredata.deps:
+ for dep in coredata.environment.coredata.deps.host:
fn.write('BuildRequires: pkgconfig(%s)\n' % dep[0])
# ext_libs and ext_progs have been removed from coredata so the following code
# no longer works. It is kept as a reminder of the idea should anyone wish
diff --git a/mesonbuild/munstable_coredata.py b/mesonbuild/munstable_coredata.py
index f16468c..864df04 100644
--- a/mesonbuild/munstable_coredata.py
+++ b/mesonbuild/munstable_coredata.py
@@ -97,13 +97,11 @@ def run(options):
print('Cached cross compilers:')
dump_compilers(v)
elif k == 'deps':
- native = []
- cross = []
- for dep_key, dep in sorted(v.items()):
- if dep_key[1]:
- cross.append((dep_key, dep))
- else:
- native.append((dep_key, dep))
+ native = list(sorted(v.build.items()))
+ if v.host is not v.build:
+ cross = list(sorted(v.host.items()))
+ else:
+ cross = []
def print_dep(dep_key, dep):
print(' ' + dep_key[0] + ": ")
@@ -115,12 +113,14 @@ def run(options):
if native:
print('Cached native dependencies:')
- for dep_key, dep in native:
- print_dep(dep_key, dep)
+ for dep_key, deps in native:
+ for dep in deps:
+ print_dep(dep_key, dep)
if cross:
print('Cached dependencies:')
- for dep_key, dep in cross:
- print_dep(dep_key, dep)
+ for dep_key, deps in cross:
+ for dep in deps:
+ print_dep(dep_key, dep)
else:
print(k + ':')
print(textwrap.indent(pprint.pformat(v), ' '))