diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index 7462bd8c0..271c6b4d4 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -1148,7 +1148,15 @@ def get_dep_identifier(name, kwargs): modlist = [modlist] for module in modlist: elements.append(module) - return '/'.join(elements) + '/main' + str(kwargs.get('main', False)) + '/static' + str(kwargs.get('static', False)) + # We use a tuple because we need a non-mutable structure to use as the key + # of a dictionary and a string has potential for name collisions + identifier = tuple(elements) + identifier += ('main', kwargs.get('main', False)) + identifier += ('static', kwargs.get('static', False)) + if 'fallback' in kwargs: + f = kwargs.get('fallback') + identifier += ('fallback', f[0], f[1]) + return identifier def find_external_dependency(name, environment, kwargs): required = kwargs.get('required', True) diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 5a99e1c76..1491767b9 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1626,7 +1626,9 @@ class Interpreter(): dep = dependencies.find_external_dependency(name, self.environment, kwargs) except dependencies.DependencyException: if 'fallback' in kwargs: - return self.dependency_fallback(kwargs) + dep = self.dependency_fallback(kwargs) + self.coredata.deps[identifier] = dep.held_object + return dep raise self.coredata.deps[identifier] = dep return DependencyHolder(dep)