diff options
Diffstat (limited to 'mesonbuild/modules/__init__.py')
| -rw-r--r-- | mesonbuild/modules/__init__.py | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py index 8c6ed2fec..0df85faf1 100644 --- a/mesonbuild/modules/__init__.py +++ b/mesonbuild/modules/__init__.py @@ -7,7 +7,7 @@ from __future__ import annotations import dataclasses import typing as T -from .. import build, dependencies, mesonlib +from .. import build, dependencies, mesonlib, mlog from ..options import OptionKey from ..build import IncludeDirs from ..interpreterbase.decorators import noKwargs, noPosargs @@ -15,6 +15,7 @@ from ..mesonlib import relpath, HoldableObject, MachineChoice from ..programs import ExternalProgram if T.TYPE_CHECKING: + from ..dependencies.base import DependencyObjectKWs from ..interpreter import Interpreter from ..interpreter.interpreter import ProgramVersionFunc from ..interpreterbase import TYPE_var, TYPE_kwargs @@ -110,6 +111,20 @@ class ModuleState: # Normal program lookup return self.find_program(name, required=required, wanted=wanted) + def override_dependency(self, depname: str, dep: Dependency, static: T.Optional[bool] = None, + for_machine: MachineChoice = MachineChoice.HOST) -> None: + kwargs: DependencyObjectKWs = {} + if static is not None: + kwargs['static'] = static + identifier = dependencies.get_dep_identifier(depname, kwargs) + override = self.dependency_overrides[for_machine].get(identifier) + if override: + m = 'Tried to override dependency {!r} which has already been resolved or overridden at {}' + location = mlog.get_error_location_string(override.node.filename, override.node.lineno) + raise mesonlib.MesonException(m.format(depname, location)) + self.dependency_overrides[for_machine][identifier] = \ + build.DependencyOverride(dep, self._interpreter.current_node) + def overridden_dependency(self, depname: str, for_machine: MachineChoice = MachineChoice.HOST) -> Dependency: identifier = dependencies.get_dep_identifier(depname, {}) try: |
