diff options
| author | Dylan Baker <dylan@pnwbakers.com> | 2025-08-01 15:40:44 -0700 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-10-20 15:15:53 -0700 |
| commit | 035b8e4c013d686da7ab433b643338f696e15500 (patch) | |
| tree | bf3fc4dcbf4e7e2f3014dfcdbf95efc7fcb34039 /mesonbuild/modules | |
| parent | ae89ca1015fd1d8306bbb78c31f1bde53375a712 (diff) | |
| download | meson-035b8e4c013d686da7ab433b643338f696e15500.tar.gz | |
dependency: Use a TypedDict to describe the keyword arguments to Dependency
This allows us to check that all of the keyword arguments are of the
correct type.
Diffstat (limited to 'mesonbuild/modules')
| -rw-r--r-- | mesonbuild/modules/_qt.py | 5 | ||||
| -rw-r--r-- | mesonbuild/modules/gnome.py | 4 | ||||
| -rw-r--r-- | mesonbuild/modules/python.py | 12 |
3 files changed, 12 insertions, 9 deletions
diff --git a/mesonbuild/modules/_qt.py b/mesonbuild/modules/_qt.py index ef3193b9c..e28033281 100644 --- a/mesonbuild/modules/_qt.py +++ b/mesonbuild/modules/_qt.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright 2015 The Meson development team -# Copyright © 2021-2023 Intel Corporation +# Copyright © 2021-2025 Intel Corporation from __future__ import annotations @@ -24,6 +24,7 @@ from ..programs import NonExistingExternalProgram if T.TYPE_CHECKING: from . import ModuleState from ..dependencies.qt import QtPkgConfigDependency, QmakeQtDependency + from ..dependencies.base import DependencyObjectKWs from ..interpreter import Interpreter from ..interpreter import kwargs from ..mesonlib import FileOrString @@ -269,7 +270,7 @@ class QtBaseModule(ExtensionModule): return self._tools_detected = True mlog.log(f'Detecting Qt{self.qt_version} tools') - kwargs = {'required': required, 'modules': 'Core', 'method': method} + kwargs: DependencyObjectKWs = {'required': required, 'modules': 'Core', 'method': method} # type: ignore[typeddict-unknown-key] # Just pick one to make mypy happy qt = T.cast('QtPkgConfigDependency', find_external_dependency(f'qt{self.qt_version}', state.environment, kwargs)) if qt.found(): diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index 9e525601e..b1fe250da 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright 2015-2016 The Meson development team -# Copyright © 2023-2024 Intel Corporation +# Copyright © 2023-2025 Intel Corporation '''This module provides helper functions for Gnome/GLib related functionality such as gobject-introspection, gresources and gtk-doc''' @@ -283,7 +283,7 @@ class GnomeModule(ExtensionModule): def _get_native_glib_version(self, state: 'ModuleState') -> str: if self.native_glib_version is None: glib_dep = PkgConfigDependency('glib-2.0', state.environment, - {'native': True, 'required': False}) + {'native': True, 'required': False}) # type: ignore[typeddict-unknown-key] if glib_dep.found(): self.native_glib_version = glib_dep.get_version() else: diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py index 6f5a63a0b..1bf02fe76 100644 --- a/mesonbuild/modules/python.py +++ b/mesonbuild/modules/python.py @@ -31,10 +31,10 @@ if T.TYPE_CHECKING: from . import ModuleState from ..build import Build, Data - from ..dependencies import Dependency + from ..dependencies.base import Dependency, DependencyObjectKWs from ..interpreter import Interpreter from ..interpreter.interpreter import BuildTargetSource - from ..interpreter.kwargs import ExtractRequired, SharedModule as SharedModuleKw + from ..interpreter.kwargs import ExtractRequired, SharedModule as SharedModuleKw, FuncDependency from ..interpreterbase.baseobjects import TYPE_var, TYPE_kwargs class PyInstallKw(TypedDict): @@ -246,7 +246,7 @@ class PythonInstallation(_ExternalProgramHolder['PythonExternalProgram']): return '0x{:02x}{:02x}0000'.format(major, minor) - def _dependency_method_impl(self, kwargs: TYPE_kwargs) -> Dependency: + def _dependency_method_impl(self, kwargs: DependencyObjectKWs) -> Dependency: for_machine = self.interpreter.machine_from_native_kwarg(kwargs) identifier = get_dep_identifier(self._full_path(), kwargs) @@ -272,13 +272,15 @@ class PythonInstallation(_ExternalProgramHolder['PythonExternalProgram']): @noPosargs @typed_kwargs('python_installation.dependency', *DEPENDENCY_KWS, allow_unknown=True) @InterpreterObject.method('dependency') - def dependency_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwargs') -> 'Dependency': + def dependency_method(self, args: T.List['TYPE_var'], kwargs: FuncDependency) -> 'Dependency': disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) + nkwargs = T.cast('DependencyObjectKWs', kwargs.copy()) + nkwargs['required'] = required if disabled: mlog.log('Dependency', mlog.bold('python'), 'skipped: feature', mlog.bold(feature), 'disabled') return NotFoundDependency('python', self.interpreter.environment) else: - dep = self._dependency_method_impl(kwargs) + dep = self._dependency_method_impl(nkwargs) if required and not dep.found(): raise mesonlib.MesonException('Python dependency not found') return dep |
