diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2024-11-20 14:33:15 +0100 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-04-02 08:44:37 -0700 |
| commit | 00dc6fa4dfee880a3c3c17f658e6d0b98a93bab6 (patch) | |
| tree | 605a07217c8dfcb53270664e18e756a282a4c4e6 /mesonbuild | |
| parent | efcef42f9d1b94e332827854299125be35038466 (diff) | |
| download | meson-00dc6fa4dfee880a3c3c17f658e6d0b98a93bab6.tar.gz | |
rust: extract common parts of rust.test and rust.doctest
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'mesonbuild')
| -rw-r--r-- | mesonbuild/modules/rust.py | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/mesonbuild/modules/rust.py b/mesonbuild/modules/rust.py index 70b206032..7e599505d 100644 --- a/mesonbuild/modules/rust.py +++ b/mesonbuild/modules/rust.py @@ -35,14 +35,17 @@ if T.TYPE_CHECKING: from typing_extensions import TypedDict, Literal - class FuncTest(_kwargs.BaseTest): + ArgsType = T.TypeVar('ArgsType') - args: T.List[_kwargs.TestArgs] + class FuncRustTest(_kwargs.BaseTest, T.Generic[ArgsType]): + args: T.List[ArgsType] dependencies: T.List[T.Union[Dependency, ExternalLibrary]] is_parallel: bool link_with: T.List[LibTypes] rust_args: T.List[str] + FuncTest = FuncRustTest[_kwargs.TestArgs] + class FuncBindgen(TypedDict): args: T.List[str] @@ -56,6 +59,18 @@ if T.TYPE_CHECKING: bindgen_version: T.List[str] +RUST_TEST_KWS: T.List[KwargInfo] = [ + KwargInfo( + 'rust_args', + ContainerTypeInfo(list, str), + listify=True, + default=[], + since='1.2.0', + ), + KwargInfo('is_parallel', bool, default=False), +] + + class RustModule(ExtensionModule): """A module that holds helper functions for rust.""" @@ -78,22 +93,7 @@ class RustModule(ExtensionModule): 'proc_macro': self.proc_macro, }) - @typed_pos_args('rust.test', str, BuildTarget) - @typed_kwargs( - 'rust.test', - *TEST_KWS, - DEPENDENCIES_KW, - LINK_WITH_KW.evolve(since='1.2.0'), - KwargInfo( - 'rust_args', - ContainerTypeInfo(list, str), - listify=True, - default=[], - since='1.2.0', - ), - KwargInfo('is_parallel', bool, default=False), - ) - def test(self, state: ModuleState, args: T.Tuple[str, BuildTarget], kwargs: FuncTest) -> ModuleReturnValue: + def test_common(self, funcname: str, state: ModuleState, args: T.Tuple[str, BuildTarget], kwargs: FuncRustTest) -> T.Tuple[Executable, _kwargs.FuncTest]: """Generate a rust test target from a given rust target. Rust puts its unitests inside its main source files, unlike most @@ -141,15 +141,15 @@ class RustModule(ExtensionModule): name = args[0] base_target: BuildTarget = args[1] if not base_target.uses_rust(): - raise InterpreterException('Second positional argument to rustmod.test() must be a rust based target') + raise InterpreterException(f'Second positional argument to rustmod.{funcname}() must be a rust based target') extra_args = kwargs['args'] # Delete any arguments we don't want passed if '--test' in extra_args: - mlog.warning('Do not add --test to rustmod.test arguments') + mlog.warning(f'Do not add --test to rustmod.{funcname}() arguments') extra_args.remove('--test') if '--format' in extra_args: - mlog.warning('Do not add --format to rustmod.test arguments') + mlog.warning(f'Do not add --format to rustmod.{funcname}() arguments') i = extra_args.index('--format') # Also delete the argument to --format del extra_args[i + 1] @@ -189,7 +189,19 @@ class RustModule(ExtensionModule): base_target.objects, base_target.environment, base_target.compilers, new_target_kwargs ) + return new_target, tkwargs + @typed_pos_args('rust.test', str, BuildTarget) + @typed_kwargs( + 'rust.test', + *TEST_KWS, + DEPENDENCIES_KW, + LINK_WITH_KW.evolve(since='1.2.0'), + *RUST_TEST_KWS, + ) + def test(self, state: ModuleState, args: T.Tuple[str, BuildTarget], kwargs: FuncTest) -> ModuleReturnValue: + name, _ = args + new_target, tkwargs = self.test_common('test', state, args, kwargs) test: Test = self.interpreter.make_test( self.interpreter.current_node, (name, new_target), tkwargs) |
