summaryrefslogtreecommitdiff
path: root/mesonbuild/modules
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-08-01 15:40:44 -0700
committerDylan Baker <dylan@pnwbakers.com>2025-10-20 15:15:53 -0700
commit035b8e4c013d686da7ab433b643338f696e15500 (patch)
treebf3fc4dcbf4e7e2f3014dfcdbf95efc7fcb34039 /mesonbuild/modules
parentae89ca1015fd1d8306bbb78c31f1bde53375a712 (diff)
downloadmeson-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.py5
-rw-r--r--mesonbuild/modules/gnome.py4
-rw-r--r--mesonbuild/modules/python.py12
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