summaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/dependencies/base.py')
-rw-r--r--mesonbuild/dependencies/base.py46
1 files changed, 29 insertions, 17 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 01175291e..b8db1c5ed 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -21,6 +21,8 @@ from ..options import OptionKey
#from ..interpreterbase import FeatureDeprecated, FeatureNew
if T.TYPE_CHECKING:
+ from typing_extensions import TypedDict
+
from ..compilers.compilers import Compiler
from ..environment import Environment
from ..interpreterbase import FeatureCheckBase
@@ -30,6 +32,16 @@ if T.TYPE_CHECKING:
)
from ..interpreter.type_checking import PkgConfigDefineType
+ class DependencyObjectKWs(TypedDict, total=False):
+
+ """Keyword arguments that the Dependency IR object accepts.
+
+ This is different than the arguments as taken by the Interpreter, since
+ it is expected to be clean.
+ """
+
+ cmake_args: T.List[str]
+
_MissingCompilerBase = Compiler
else:
_MissingCompilerBase = object
@@ -98,16 +110,16 @@ DependencyTypeName = T.NewType('DependencyTypeName', str)
class Dependency(HoldableObject):
@classmethod
- def _process_include_type_kw(cls, kwargs: T.Dict[str, T.Any]) -> str:
+ def _process_include_type_kw(cls, kwargs: DependencyObjectKWs) -> str:
if 'include_type' not in kwargs:
return 'preserve'
- if not isinstance(kwargs['include_type'], str):
+ if not isinstance(kwargs['include_type'], str): # type: ignore[typeddict-item]
raise DependencyException('The include_type kwarg must be a string type')
- if kwargs['include_type'] not in ['preserve', 'system', 'non-system']:
+ if kwargs['include_type'] not in ['preserve', 'system', 'non-system']: # type: ignore[typeddict-item]
raise DependencyException("include_type may only be one of ['preserve', 'system', 'non-system']")
- return kwargs['include_type']
+ return kwargs['include_type'] # type: ignore[typeddict-item]
- def __init__(self, type_name: DependencyTypeName, kwargs: T.Dict[str, T.Any]) -> None:
+ def __init__(self, type_name: DependencyTypeName, kwargs: DependencyObjectKWs) -> None:
# This allows two Dependencies to be compared even after being copied.
# The purpose is to allow the name to be changed, but still have a proper comparison
self._id = uuid.uuid4().int
@@ -264,7 +276,7 @@ class Dependency(HoldableObject):
def generate_system_dependency(self, include_type: str) -> 'Dependency':
new_dep = copy.deepcopy(self)
- new_dep.include_type = self._process_include_type_kw({'include_type': include_type})
+ new_dep.include_type = self._process_include_type_kw({'include_type': include_type}) # type: ignore[typeddict-unknown-key]
return new_dep
def get_as_static(self, recursive: bool) -> Dependency:
@@ -390,14 +402,14 @@ class InternalDependency(Dependency):
return new_dep
class HasNativeKwarg:
- def __init__(self, kwargs: T.Dict[str, T.Any]):
+ def __init__(self, kwargs: DependencyObjectKWs):
self.for_machine = self.get_for_machine_from_kwargs(kwargs)
- def get_for_machine_from_kwargs(self, kwargs: T.Dict[str, T.Any]) -> MachineChoice:
+ def get_for_machine_from_kwargs(self, kwargs: DependencyObjectKWs) -> MachineChoice:
return MachineChoice.BUILD if kwargs.get('native', False) else MachineChoice.HOST
class ExternalDependency(Dependency, HasNativeKwarg):
- def __init__(self, type_name: DependencyTypeName, environment: 'Environment', kwargs: T.Dict[str, T.Any], language: T.Optional[str] = None):
+ def __init__(self, type_name: DependencyTypeName, environment: 'Environment', kwargs: DependencyObjectKWs, language: T.Optional[str] = None):
Dependency.__init__(self, type_name, kwargs)
self.env = environment
self.name = type_name # default
@@ -406,10 +418,10 @@ class ExternalDependency(Dependency, HasNativeKwarg):
version_reqs = kwargs.get('version', None)
if isinstance(version_reqs, str):
version_reqs = [version_reqs]
- self.version_reqs: T.Optional[T.List[str]] = version_reqs
- self.required = kwargs.get('required', True)
- self.silent = kwargs.get('silent', False)
- self.static = kwargs.get('static', self.env.coredata.optstore.get_value_for(OptionKey('prefer_static')))
+ self.version_reqs = T.cast('T.Optional[T.List[str]]', version_reqs)
+ self.required = T.cast('bool', kwargs.get('required', True))
+ self.silent = T.cast('bool', kwargs.get('silent', False))
+ self.static = T.cast('bool', kwargs.get('static', self.env.coredata.optstore.get_value_for(OptionKey('prefer_static'))))
self.libtype = LibType.STATIC if self.static else LibType.PREFER_SHARED
if not isinstance(self.static, bool):
raise DependencyException('Static keyword must be boolean')
@@ -603,8 +615,8 @@ def strip_system_includedirs(environment: 'Environment', for_machine: MachineCho
exclude = {f'-I{p}' for p in environment.get_compiler_system_include_dirs(for_machine)}
return [i for i in include_args if i not in exclude]
-def process_method_kw(possible: T.Iterable[DependencyMethods], kwargs: T.Dict[str, T.Any]) -> T.List[DependencyMethods]:
- method: T.Union[DependencyMethods, str] = kwargs.get('method', 'auto')
+def process_method_kw(possible: T.Iterable[DependencyMethods], kwargs: DependencyObjectKWs) -> T.List[DependencyMethods]:
+ method = T.cast('T.Union[DependencyMethods, str]', kwargs.get('method', 'auto'))
if isinstance(method, DependencyMethods):
return [method]
# TODO: try/except?
@@ -670,7 +682,7 @@ class SystemDependency(ExternalDependency):
"""Dependency base for System type dependencies."""
- def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any],
+ def __init__(self, name: str, env: 'Environment', kwargs: DependencyObjectKWs,
language: T.Optional[str] = None) -> None:
super().__init__(DependencyTypeName('system'), env, kwargs, language=language)
self.name = name
@@ -684,7 +696,7 @@ class BuiltinDependency(ExternalDependency):
"""Dependency base for Builtin type dependencies."""
- def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any],
+ def __init__(self, name: str, env: 'Environment', kwargs: DependencyObjectKWs,
language: T.Optional[str] = None) -> None:
super().__init__(DependencyTypeName('builtin'), env, kwargs, language=language)
self.name = name