aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2017-05-08 02:00:36 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2017-05-09 14:24:48 +0530
commit830b44867cc3747f186c4a737675b067bb94fae2 (patch)
tree82513ac7a75a72faf16efa37568042d64aee5b75
parent66f0ccb39b74f7d1022ec70fa9627bd6e4de8e29 (diff)
downloadmeson-830b44867cc3747f186c4a737675b067bb94fae2.zip
meson-830b44867cc3747f186c4a737675b067bb94fae2.tar.gz
meson-830b44867cc3747f186c4a737675b067bb94fae2.tar.bz2
dependencies: Only store found deps in the cache
This simplifies everything since it means we will always search for the dependency again on the system if it wasn't found. This is particularly important when running `ninja reconfigure` with an edited PKG_CONFIG_PATH to point to a path that contains more pkg-config files.
-rw-r--r--mesonbuild/interpreter.py37
1 files changed, 7 insertions, 30 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 0db097e..5df26cc 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1854,15 +1854,6 @@ class Interpreter(InterpreterBase):
mlog.log(mlog.red('DEPRECATION:'), 'find_library() is removed, use the corresponding method in compiler object instead.')
def _find_cached_dep(self, name, kwargs):
- '''
- Check that there aren't any mismatches between the cached dep and the
- wanted dep in terms of version and whether to use a fallback or not.
- For instance, the cached dep and the wanted dep could have mismatching
- version requirements. The cached dep did not search for a fallback, but
- the wanted dep specifies a fallback. There are many more edge-cases.
- Most cases are (or should be) documented in:
- `test cases/linuxlike/5 dependency versions/meson.build`
- '''
# Check if we want this as a cross-dep or a native-dep
# FIXME: Not all dependencies support such a distinction right now,
# and we repeat this check inside dependencies that do. We need to
@@ -1880,33 +1871,17 @@ class Interpreter(InterpreterBase):
else:
# Check if exactly the same dep with different version requirements
# was found already.
- # We only return early if we find a usable cached dependency since
- # there might be multiple cached dependencies like this.
wanted = identifier[1]
for trial, trial_dep in self.coredata.deps.items():
# trial[1], identifier[1] are the version requirements
if trial[0] != identifier[0] or trial[2:] != identifier[2:]:
continue
- if trial_dep.found():
- found = trial_dep.get_version()
- if not wanted or mesonlib.version_compare_many(found, wanted)[0]:
- # We either don't care about the version, or our
- # version requirements matched the trial dep's version,
- # and the trial dep was a found dep!
- return identifier, trial_dep
- elif not trial[1]:
- # If the not-found cached dep did not have any version
- # requirements, this probably means the external dependency
- # cannot be found.
+ found = trial_dep.get_version()
+ if not wanted or mesonlib.version_compare_many(found, wanted)[0]:
+ # We either don't care about the version, or our
+ # version requirements matched the trial dep's version.
cached_dep = trial_dep
break
- # There's a subproject fallback specified for this not-found dependency
- # which might provide it, so we must check it.
- if cached_dep and not cached_dep.found() and 'fallback' in kwargs:
- return identifier, None
- # Either no cached deps matched the dep we're looking for, or some
- # not-found cached dep matched and there is no fallback specified.
- # Either way, we're done.
return identifier, cached_dep
def func_dependency(self, node, args, kwargs):
@@ -1958,7 +1933,9 @@ class Interpreter(InterpreterBase):
if not dep:
raise exception
- self.coredata.deps[identifier] = dep
+ # Only store found-deps in the cache
+ if dep.found():
+ self.coredata.deps[identifier] = dep
return DependencyHolder(dep)
def get_subproject_infos(self, kwargs):