aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/dependencies/__init__.py3
-rw-r--r--mesonbuild/dependencies/base.py18
-rw-r--r--mesonbuild/interpreter/compiler.py15
3 files changed, 20 insertions, 16 deletions
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py
index 1e1a9f7..cdadd56 100644
--- a/mesonbuild/dependencies/__init__.py
+++ b/mesonbuild/dependencies/__init__.py
@@ -18,7 +18,7 @@ from .hdf5 import hdf5_factory
from .base import Dependency, InternalDependency, ExternalDependency, NotFoundDependency
from .base import (
ExternalLibrary, DependencyException, DependencyMethods,
- BuiltinDependency, SystemDependency)
+ BuiltinDependency, SystemDependency, get_leaf_external_dependencies)
from .cmake import CMakeDependency
from .configtool import ConfigToolDependency
from .dub import DubDependency
@@ -65,6 +65,7 @@ __all__ = [
'find_external_dependency',
'get_dep_identifier',
+ 'get_leaf_external_dependencies',
]
"""Dependency representations and discovery logic.
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 1242af7..c2a274e 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -23,7 +23,7 @@ import itertools
import typing as T
from enum import Enum
-from .. import mlog
+from .. import mlog, mesonlib
from ..compilers import clib_langs
from ..mesonlib import LibType, MachineChoice, MesonException, HoldableObject
from ..mesonlib import version_compare_many
@@ -461,6 +461,22 @@ class ExternalLibrary(ExternalDependency):
return new
+def get_leaf_external_dependencies(deps: T.List[Dependency]) -> T.List[Dependency]:
+ if not deps:
+ # Ensure that we always return a new instance
+ return deps.copy()
+ final_deps = []
+ while deps:
+ next_deps = []
+ for d in mesonlib.listify(deps):
+ if not isinstance(d, Dependency) or d.is_built():
+ raise DependencyException('Dependencies must be external dependencies')
+ final_deps.append(d)
+ next_deps.extend(d.ext_deps)
+ deps = next_deps
+ return final_deps
+
+
def sort_libpaths(libpaths: T.List[str], refpaths: T.List[str]) -> T.List[str]:
"""Sort <libpaths> according to <refpaths>
diff --git a/mesonbuild/interpreter/compiler.py b/mesonbuild/interpreter/compiler.py
index 9dc6544..185d151 100644
--- a/mesonbuild/interpreter/compiler.py
+++ b/mesonbuild/interpreter/compiler.py
@@ -239,20 +239,7 @@ class CompilerHolder(ObjectHolder['Compiler']):
return args
def _determine_dependencies(self, deps: T.List['dependencies.Dependency'], endl: str = ':') -> T.Tuple[T.List['dependencies.Dependency'], str]:
- if deps:
- final_deps = []
- while deps:
- next_deps = []
- for d in mesonlib.listify(deps):
- if not isinstance(d, dependencies.Dependency) or d.is_built():
- raise InterpreterException('Dependencies must be external dependencies')
- final_deps.append(d)
- next_deps.extend(d.ext_deps)
- deps = next_deps
- deps = final_deps
- else:
- # Ensure that we always return a new instance
- deps = deps.copy()
+ deps = dependencies.get_leaf_external_dependencies(deps)
return deps, self._dep_msg(deps, endl)
@typed_pos_args('compiler.alignment', str)