summaryrefslogtreecommitdiff
path: root/mesonbuild/modules/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/modules/__init__.py')
-rw-r--r--mesonbuild/modules/__init__.py17
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: