diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2021-10-07 11:12:04 +0200 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2021-11-23 18:10:15 +0530 |
commit | 47ba919b2146c956c4a7221f4f078804122a6990 (patch) | |
tree | 99e86c92aa852782226088d7fa6dea83523206f2 | |
parent | 5163a02fec8836a55952353fb598ac6ced3b6a3c (diff) | |
download | meson-47ba919b2146c956c4a7221f4f078804122a6990.zip meson-47ba919b2146c956c4a7221f4f078804122a6990.tar.gz meson-47ba919b2146c956c4a7221f4f078804122a6990.tar.bz2 |
rust: clean up inputs and outputs to bindgen
Make the handling of bindgen inputs consistent with the inputs and outputs of
source_strings_to_files.
However, for the first source argument reject anything that cannot
possibly be an header file. This also fixes a mypy failure from the next
patch, since ExtractedObjects does not have a zero-argument get_outputs
method.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
5 files changed, 50 insertions, 4 deletions
diff --git a/mesonbuild/modules/unstable_rust.py b/mesonbuild/modules/unstable_rust.py index 998dbfd..d0d9ca5 100644 --- a/mesonbuild/modules/unstable_rust.py +++ b/mesonbuild/modules/unstable_rust.py @@ -17,7 +17,7 @@ import typing as T from . import ExtensionModule, ModuleReturnValue from .. import mlog -from ..build import BothLibraries, BuildTarget, CustomTargetIndex, Executable, GeneratedList, IncludeDirs, CustomTarget +from ..build import BothLibraries, BuildTarget, CustomTargetIndex, Executable, ExtractedObjects, GeneratedList, IncludeDirs, CustomTarget from ..dependencies import Dependency, ExternalLibrary from ..interpreter.interpreter import TEST_KWARGS from ..interpreterbase import ContainerTypeInfo, InterpreterException, KwargInfo, FeatureNew, typed_kwargs, typed_pos_args, noPosargs @@ -27,7 +27,7 @@ if T.TYPE_CHECKING: from . import ModuleState from ..interpreter import Interpreter from ..interpreter import kwargs as _kwargs - from ..interpreter.interpreter import SourceInputs + from ..interpreter.interpreter import SourceInputs, SourceOutputs from ..programs import ExternalProgram from typing_extensions import TypedDict @@ -168,7 +168,7 @@ class RustModule(ExtensionModule): KwargInfo('include_directories', ContainerTypeInfo(list, IncludeDirs), default=[], listify=True), KwargInfo( 'input', - ContainerTypeInfo(list, (File, GeneratedList, BuildTarget, BothLibraries, CustomTargetIndex, CustomTarget, str), allow_empty=False), + ContainerTypeInfo(list, (File, GeneratedList, BuildTarget, BothLibraries, ExtractedObjects, CustomTargetIndex, CustomTarget, str), allow_empty=False), default=[], listify=True, required=True, @@ -184,7 +184,7 @@ class RustModule(ExtensionModule): header, *_deps = self.interpreter.source_strings_to_files(kwargs['input']) # Split File and Target dependencies to add pass to CustomTarget - depends: T.List[T.Union[GeneratedList, BuildTarget, CustomTargetIndex, CustomTarget]] = [] + depends: T.List['SourceOutputs'] = [] depend_files: T.List[File] = [] for d in _deps: if isinstance(d, File): @@ -203,6 +203,8 @@ class RustModule(ExtensionModule): name: str if isinstance(header, File): name = header.fname + elif isinstance(header, (BuildTarget, BothLibraries, ExtractedObjects)): + raise InterpreterException('bindgen source file must be a C header, not an object or build target') else: name = header.get_outputs()[0] diff --git a/test cases/failing/115 nonsensical bindgen/meson.build b/test cases/failing/115 nonsensical bindgen/meson.build new file mode 100644 index 0000000..6995f67 --- /dev/null +++ b/test cases/failing/115 nonsensical bindgen/meson.build @@ -0,0 +1,20 @@ +# SPDX-license-identifer: Apache-2.0 +# Copyright © 2021 Intel Corporation + +project('rustmod bindgen', 'c') + +if not add_languages('rust', required: false) + error('MESON_SKIP_TEST test requires rust compiler') +endif + +prog_bindgen = find_program('bindgen', required : false) +if not prog_bindgen.found() + error('MESON_SKIP_TEST bindgen not found') +endif + +c_lib = static_library('clib', 'src/source.c') + +import('unstable-rust').bindgen( + input : c_lib, + output : 'header.rs', +) diff --git a/test cases/failing/115 nonsensical bindgen/src/header.h b/test cases/failing/115 nonsensical bindgen/src/header.h new file mode 100644 index 0000000..750621f --- /dev/null +++ b/test cases/failing/115 nonsensical bindgen/src/header.h @@ -0,0 +1,8 @@ +// SPDX-license-identifer: Apache-2.0 +// Copyright © 2021 Intel Corporation + +#pragma once + +#include <stdint.h> + +int32_t add(const int32_t, const int32_t); diff --git a/test cases/failing/115 nonsensical bindgen/src/source.c b/test cases/failing/115 nonsensical bindgen/src/source.c new file mode 100644 index 0000000..d652d28 --- /dev/null +++ b/test cases/failing/115 nonsensical bindgen/src/source.c @@ -0,0 +1,8 @@ +// SPDX-license-identifer: Apache-2.0 +// Copyright © 2021 Intel Corporation + +#include "header.h" + +int32_t add(const int32_t first, const int32_t second) { + return first + second; +} diff --git a/test cases/failing/115 nonsensical bindgen/test.json b/test cases/failing/115 nonsensical bindgen/test.json new file mode 100644 index 0000000..d9249b2 --- /dev/null +++ b/test cases/failing/115 nonsensical bindgen/test.json @@ -0,0 +1,8 @@ +{ + "stdout": [ + { + "line": "test cases/failing/115 nonsensical bindgen/meson.build:17:24: ERROR: bindgen source file must be a C header, not an object or build target" + } + ] +} + |