diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2021-06-01 16:05:09 -0700 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2021-06-15 12:36:05 -0700 |
commit | 2bc7a1b3dad998b12d80a52f83bab9a5981b2ec8 (patch) | |
tree | 2bec1ef09673257f4fa772e699f20a28457dd961 /mesonbuild/modules | |
parent | 61ddceb3b99928de78a97e406c990377cd3085b4 (diff) | |
download | meson-2bc7a1b3dad998b12d80a52f83bab9a5981b2ec8.zip meson-2bc7a1b3dad998b12d80a52f83bab9a5981b2ec8.tar.gz meson-2bc7a1b3dad998b12d80a52f83bab9a5981b2ec8.tar.bz2 |
modules/qt: fully annotate and check qt.has_tools
Diffstat (limited to 'mesonbuild/modules')
-rw-r--r-- | mesonbuild/modules/qt.py | 22 | ||||
-rw-r--r-- | mesonbuild/modules/unstable_rust.py | 2 |
2 files changed, 19 insertions, 5 deletions
diff --git a/mesonbuild/modules/qt.py b/mesonbuild/modules/qt.py index 0d27c2a..4e01393 100644 --- a/mesonbuild/modules/qt.py +++ b/mesonbuild/modules/qt.py @@ -26,12 +26,13 @@ from . import ModuleReturnValue, ExtensionModule from ..interpreterbase import ContainerTypeInfo, FeatureDeprecated, FeatureDeprecatedKwargs, KwargInfo, noPosargs, permittedKwargs, FeatureNew, FeatureNewKwargs, typed_kwargs from ..interpreter import extract_required_kwarg from ..programs import NonExistingExternalProgram -from ..interpreter.interpreterobjects import DependencyHolder, ExternalLibraryHolder, IncludeDirsHolder +from ..interpreter.interpreterobjects import DependencyHolder, ExternalLibraryHolder, IncludeDirsHolder, FeatureOptionHolder if T.TYPE_CHECKING: from . import ModuleState from ..dependencies.qt import QtPkgConfigDependency, QmakeQtDependency from ..interpreter import Interpreter + from ..interpreter import kwargs from ..programs import ExternalProgram QtDependencyType = T.Union[QtPkgConfigDependency, QmakeQtDependency] @@ -79,6 +80,10 @@ if T.TYPE_CHECKING: dependencies: T.List[T.Union[DependencyHolder, ExternalLibraryHolder]] method: str + class HasToolKwArgs(kwargs.ExtractRequired): + + method: str + class QtBaseModule(ExtensionModule): _tools_detected = False @@ -221,11 +226,19 @@ class QtBaseModule(ExtensionModule): result.append(File(is_built=False, subdir=state.subdir, fname=path_from_rcc)) return result + @FeatureNew('qt.has_tools', '0.54.0') @noPosargs + @typed_kwargs( + 'qt.has_tools', + KwargInfo('required', (bool, FeatureOptionHolder), default=False), + KwargInfo('method', str, default='auto'), + ) @permittedKwargs({'method', 'required'}) - @FeatureNew('qt.has_tools', '0.54.0') - def has_tools(self, state: 'ModuleState', args: T.Tuple, kwargs) -> bool: + def has_tools(self, state: 'ModuleState', args: T.Tuple, kwargs: 'HasToolKwArgs') -> bool: method = kwargs.get('method', 'auto') + # We have to cast here because TypedDicts are invariant, even though + # ExtractRequiredKwArgs is a subset of HasToolKwArgs, type checkers + # will insist this is wrong disabled, required, feature = extract_required_kwarg(kwargs, state.subproject, default=False) if disabled: mlog.log('qt.has_tools skipped: feature', mlog.bold(feature), 'disabled') @@ -429,7 +442,8 @@ class QtBaseModule(ExtensionModule): @FeatureNewKwargs('qt.compile_translations', '0.56.0', ['qresource']) @FeatureNewKwargs('qt.compile_translations', '0.56.0', ['rcc_extra_arguments']) @permittedKwargs({'ts_files', 'qresource', 'rcc_extra_arguments', 'install', 'install_dir', 'build_by_default', 'method'}) - def compile_translations(self, state, args, kwargs): + @noPosargs + def compile_translations(self, state: 'ModuleState', args: T.Tuple, kwargs: T.Dict[str, T.Any]) -> ModuleReturnValue: ts_files, install_dir = [extract_as_list(kwargs, c, pop=True) for c in ['ts_files', 'install_dir']] qresource = kwargs.get('qresource') if qresource: diff --git a/mesonbuild/modules/unstable_rust.py b/mesonbuild/modules/unstable_rust.py index d5678ea..f602e09 100644 --- a/mesonbuild/modules/unstable_rust.py +++ b/mesonbuild/modules/unstable_rust.py @@ -199,7 +199,7 @@ class RustModule(ExtensionModule): if self._bindgen_bin is None: # there's some bugs in the interpreter typeing. - self._bindgen_bin = T.cast('ExternalProgram', state.find_program('bindgen').held_object) + self._bindgen_bin = state.find_program('bindgen').held_object name: str if isinstance(header, File): |