# SPDX-License-Identifier: Apache-2.0 # Copyright © 2021 The Meson Developers # Copyright © 2021 Intel Corporation """Keyword Argument type annotations.""" import typing as T from typing_extensions import TypedDict, Literal, Protocol from .. import build from .. import coredata from ..mesonlib import MachineChoice, File, FileMode, FileOrString, OptionKey from ..programs import ExternalProgram class FuncAddProjectArgs(TypedDict): """Keyword Arguments for the add_*_arguments family of arguments. including `add_global_arguments`, `add_project_arguments`, and their link variants Because of the use of a convertor function, we get the native keyword as a MachineChoice instance already. """ native: MachineChoice language: T.List[str] class BaseTest(TypedDict): """Shared base for the Rust module.""" args: T.List[T.Union[str, File, build.Target]] should_fail: bool timeout: int workdir: T.Optional[str] depends: T.List[T.Union[build.CustomTarget, build.BuildTarget]] priority: int env: build.EnvironmentVariables suite: T.List[str] class FuncBenchmark(BaseTest): """Keyword Arguments shared between `test` and `benchmark`.""" protocol: Literal['exitcode', 'tap', 'gtest', 'rust'] class FuncTest(FuncBenchmark): """Keyword Arguments for `test` `test` only adds the `is_prallel` argument over benchmark, so inherintance is helpful here. """ is_parallel: bool class ExtractRequired(TypedDict): """Keyword Arguments consumed by the `extract_required_kwargs` function. Any function that uses the `required` keyword argument which accepts either a boolean or a feature option should inherit it's arguments from this class. """ required: T.Union[bool, coredata.UserFeatureOption] class ExtractSearchDirs(TypedDict): """Keyword arguments consumed by the `extract_search_dirs` function. See the not in `ExtractRequired` """ dirs: T.List[str] class FuncGenerator(TypedDict): """Keyword rguments for the generator function.""" arguments: T.List[str] output: T.List[str] depfile: T.Optional[str] capture: bool depends: T.List[T.Union[build.BuildTarget, build.CustomTarget]] class GeneratorProcess(TypedDict): """Keyword Arguments for generator.process.""" preserve_path_from: T.Optional[str] extra_args: T.List[str] class DependencyMethodPartialDependency(TypedDict): """ Keyword Arguments for the dep.partial_dependency methods """ compile_args: bool link_args: bool links: bool includes: bool sources: bool class BuildTargeMethodExtractAllObjects(TypedDict): recursive: bool class FuncInstallSubdir(TypedDict): install_dir: str strip_directory: bool exclude_files: T.List[str] exclude_directories: T.List[str] install_mode: FileMode class FuncInstallData(TypedDict): install_dir: str sources: T.List[FileOrString] rename: T.List[str] install_mode: FileMode class FuncInstallHeaders(TypedDict): install_dir: T.Optional[str] install_mode: FileMode subdir: T.Optional[str] class FuncInstallMan(TypedDict): install_dir: T.Optional[str] install_mode: FileMode locale: T.Optional[str] class FuncImportModule(ExtractRequired): disabler: bool class FuncIncludeDirectories(TypedDict): is_system: bool class FuncAddLanguages(ExtractRequired): native: T.Optional[bool] class RunTarget(TypedDict): command: T.List[T.Union[str, build.BuildTarget, build.CustomTarget, ExternalProgram, File]] depends: T.List[T.Union[build.BuildTarget, build.CustomTarget]] env: build.EnvironmentVariables class CustomTarget(TypedDict): build_always: bool build_always_stale: bool build_by_default: bool capture: bool command: T.List[T.Union[str, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, ExternalProgram, File]] consonle: bool depend_files: T.List[FileOrString] depends: T.List[T.Union[build.BuildTarget, build.CustomTarget]] depfile: T.Optional[str] env: build.EnvironmentVariables feed: bool input: T.List[T.Union[str, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, build.ExtractedObjects, build.GeneratedList, ExternalProgram, File]] install: bool install_dir: T.List[T.Union[str, bool]] install_mode: FileMode install_tag: T.List[T.Union[str, bool]] output: T.List[str] override_options: T.Dict[OptionKey, str] class AddTestSetup(TypedDict): exe_wrapper: T.List[T.Union[str, ExternalProgram]] gdb: bool timeout_multiplier: int is_default: bool exclude_suites: T.List[str] env: build.EnvironmentVariables class Project(TypedDict): version: T.Optional[FileOrString] meson_version: T.Optional[str] default_options: T.List[str] license: T.List[str] subproject_dir: str class _FoundProto(Protocol): """Protocol for subdir arguments. This allows us to define any objec that has a found(self) -> bool method """ def found(self) -> bool: ... class Subdir(TypedDict): if_found: T.List[_FoundProto] class Summary(TypedDict): section: str bool_yn: bool list_sep: T.Optional[str] class FindProgram(ExtractRequired, ExtractSearchDirs): native: MachineChoice version: T.List[str] class RunCommand(TypedDict): check: bool capture: T.Optional[bool] env: build.EnvironmentVariables