# SPDX-License-Identifier: Apache-2.0 # Copyright © 2021-2025 Intel Corporation # Copyright © 2021-2025 Intel Corporation from __future__ import annotations """Keyword Argument type annotations.""" import typing as T from typing_extensions import TypedDict, Literal, Protocol, NotRequired from .. import build from .. import options from ..compilers import Compiler from ..dependencies.base import Dependency, DependencyMethods, IncludeType from ..mesonlib import EnvironmentVariables, MachineChoice, File, FileMode, FileOrString from ..options import OptionKey from ..modules.cmake import CMakeSubprojectOptions from ..programs import ExternalProgram from .type_checking import PkgConfigDefineType, SourcesVarargsType TestArgs = T.Union[str, File, build.Target, ExternalProgram] RustAbi = Literal['rust', 'c'] 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.""" should_fail: bool timeout: int workdir: T.Optional[str] depends: T.List[T.Union[build.CustomTarget, build.BuildTarget]] priority: int env: EnvironmentVariables suite: T.List[str] class FuncBenchmark(BaseTest): """Keyword Arguments shared between `test` and `benchmark`.""" args: T.List[TestArgs] protocol: Literal['exitcode', 'tap', 'gtest', 'rust'] class FuncTest(FuncBenchmark): """Keyword Arguments for `test` `test` only adds the `is_parallel` argument over benchmark, so inheritance 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 its arguments from this class. """ required: T.Union[bool, options.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] env: EnvironmentVariables 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 follow_symlinks: T.Optional[bool] class FuncInstallData(TypedDict): install_dir: str sources: T.List[FileOrString] rename: T.List[str] install_mode: FileMode follow_symlinks: T.Optional[bool] class FuncInstallHeaders(TypedDict): install_dir: T.Optional[str] install_mode: FileMode subdir: T.Optional[str] follow_symlinks: T.Optional[bool] 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: EnvironmentVariables class CustomTarget(TypedDict): build_always: bool build_always_stale: T.Optional[bool] build_by_default: T.Optional[bool] build_subdir: str capture: bool command: T.List[T.Union[str, build.BuildTargetTypes, ExternalProgram, File]] console: bool depend_files: T.List[FileOrString] depends: T.List[T.Union[build.BuildTarget, build.CustomTarget]] depfile: T.Optional[str] env: EnvironmentVariables feed: bool input: T.List[T.Union[str, build.BuildTarget, build.GeneratedTypes, build.ExtractedObjects, ExternalProgram, File]] install: bool install_dir: T.List[T.Union[str, T.Literal[False]]] install_mode: FileMode install_tag: T.List[T.Optional[str]] output: T.List[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: EnvironmentVariables class Project(TypedDict): version: T.Optional[FileOrString] meson_version: T.Optional[str] default_options: T.List[str] license: T.List[str] license_files: T.List[str] subproject_dir: str class _FoundProto(Protocol): """Protocol for subdir arguments. This allows us to define any object 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): default_options: T.Dict[OptionKey, options.ElementaryOptionValues] native: MachineChoice version: T.List[str] class RunCommand(TypedDict): check: bool capture: T.Optional[bool] env: EnvironmentVariables class FeatureOptionRequire(TypedDict): error_message: T.Optional[str] class DependencyPkgConfigVar(TypedDict): default: T.Optional[str] define_variable: PkgConfigDefineType class DependencyGetVariable(TypedDict): cmake: T.Optional[str] pkgconfig: T.Optional[str] configtool: T.Optional[str] internal: T.Optional[str] system: T.Optional[str] default_value: T.Optional[str] pkgconfig_define: PkgConfigDefineType class ConfigurationDataSet(TypedDict): description: T.Optional[str] class VcsTag(TypedDict): command: T.List[T.Union[str, build.GeneratedTypes, ExternalProgram, File]] fallback: T.Optional[str] input: T.List[T.Union[str, build.BuildTarget, build.GeneratedTypes, build.ExtractedObjects, ExternalProgram, File]] output: T.List[str] replace_string: str install: bool install_tag: T.Optional[str] install_dir: T.Optional[str] install_mode: FileMode class ConfigureFile(TypedDict): output: str capture: bool format: T.Literal['meson', 'cmake', 'cmake@'] output_format: T.Literal['c', 'json', 'nasm'] depfile: T.Optional[str] install: T.Optional[bool] install_dir: T.Union[str, T.Literal[False]] install_mode: FileMode install_tag: T.Optional[str] encoding: str command: T.Optional[T.List[T.Union[build.Executable, ExternalProgram, Compiler, File, str]]] input: T.List[FileOrString] configuration: T.Optional[T.Union[T.Dict[str, T.Union[str, int, bool]], build.ConfigurationData]] macro_name: T.Optional[str] build_subdir: str class Subproject(ExtractRequired): default_options: T.Dict[OptionKey, options.ElementaryOptionValues] version: T.List[str] class DoSubproject(ExtractRequired): default_options: T.Dict[OptionKey, options.ElementaryOptionValues] version: T.List[str] cmake_options: T.List[str] options: T.Optional[CMakeSubprojectOptions] class _BaseBuildTarget(TypedDict): """Arguments used by all BuildTarget like functions. This really exists because Jar is so different than all of the other BuildTarget functions. """ build_by_default: bool build_rpath: str dependencies: T.List[Dependency] extra_files: T.List[FileOrString] gnu_symbol_visibility: str include_directories: T.List[build.IncludeDirs] install: bool install_mode: FileMode install_tag: T.Optional[str] install_rpath: str implicit_include_directories: bool link_depends: T.List[T.Union[str, File, build.GeneratedTypes]] link_language: T.Optional[str] link_whole: T.List[build.StaticTargetTypes] link_with: T.List[build.BuildTargetTypes] name_prefix: T.Optional[str] name_suffix: T.Optional[str] native: MachineChoice objects: T.List[build.ObjectTypes] override_options: T.Dict[str, options.ElementaryOptionValues] depend_files: NotRequired[T.List[File]] resources: T.List[str] vala_header: T.Optional[str] vala_vapi: T.Optional[str] vala_gir: T.Optional[str] class _BuildTarget(_BaseBuildTarget): """Arguments shared by non-JAR functions""" d_debug: T.List[T.Union[str, int]] d_import_dirs: T.List[T.Union[str, build.IncludeDirs]] d_module_versions: T.List[T.Union[str, int]] d_unittest: bool install_dir: T.List[T.Union[str, bool]] rust_crate_type: T.Optional[Literal['bin', 'lib', 'rlib', 'dylib', 'cdylib', 'staticlib', 'proc-macro']] rust_dependency_map: T.Dict[str, str] swift_interoperability_mode: Literal['c', 'cpp'] swift_module_name: str sources: SourcesVarargsType c_pch: T.List[str] cpp_pch: T.List[str] c_args: T.List[str] cpp_args: T.List[str] cuda_args: T.List[str] fortran_args: T.List[str] d_args: T.List[str] objc_args: T.List[str] objcpp_args: T.List[str] rust_args: T.List[str] vala_args: T.List[T.Union[str, File]] # Yes, Vala is really special cs_args: T.List[str] swift_args: T.List[str] cython_args: T.List[str] nasm_args: T.List[str] masm_args: T.List[str] class _LibraryMixin(TypedDict): rust_abi: T.Optional[RustAbi] class Executable(_BuildTarget): export_dynamic: T.Optional[bool] gui_app: T.Optional[bool] implib: T.Optional[T.Union[str, bool]] pie: T.Optional[bool] vs_module_defs: T.Optional[T.Union[str, File, build.CustomTarget, build.CustomTargetIndex]] win_subsystem: T.Optional[str] android_exe_type: T.Optional[Literal['application', 'executable']] class _StaticLibMixin(TypedDict): prelink: bool pic: T.Optional[bool] class StaticLibrary(_BuildTarget, _StaticLibMixin, _LibraryMixin): pass class _SharedLibMixin(TypedDict): darwin_versions: T.Optional[T.Tuple[str, str]] soversion: T.Optional[str] version: T.Optional[str] vs_module_defs: T.Optional[T.Union[str, File, build.CustomTarget, build.CustomTargetIndex]] class SharedLibrary(_BuildTarget, _SharedLibMixin, _LibraryMixin): pass class SharedModule(_BuildTarget, _LibraryMixin): vs_module_defs: T.Optional[T.Union[str, File, build.CustomTarget, build.CustomTargetIndex]] class Library(_BuildTarget, _SharedLibMixin, _StaticLibMixin, _LibraryMixin): """For library, both_library, and as a base for build_target""" c_static_args: NotRequired[T.List[str]] c_shared_args: NotRequired[T.List[str]] cpp_static_args: NotRequired[T.List[str]] cpp_shared_args: NotRequired[T.List[str]] cuda_static_args: NotRequired[T.List[str]] cuda_shared_args: NotRequired[T.List[str]] fortran_static_args: NotRequired[T.List[str]] fortran_shared_args: NotRequired[T.List[str]] d_static_args: NotRequired[T.List[str]] d_shared_args: NotRequired[T.List[str]] objc_static_args: NotRequired[T.List[str]] objc_shared_args: NotRequired[T.List[str]] objcpp_static_args: NotRequired[T.List[str]] objcpp_shared_args: NotRequired[T.List[str]] rust_static_args: NotRequired[T.List[str]] rust_shared_args: NotRequired[T.List[str]] vala_static_args: NotRequired[T.List[T.Union[str, File]]] # Yes, Vala is really special vala_shared_args: NotRequired[T.List[T.Union[str, File]]] # Yes, Vala is really special cs_static_args: NotRequired[T.List[str]] cs_shared_args: NotRequired[T.List[str]] swift_static_args: NotRequired[T.List[str]] swift_shared_args: NotRequired[T.List[str]] cython_static_args: NotRequired[T.List[str]] cython_shared_args: NotRequired[T.List[str]] nasm_static_args: NotRequired[T.List[str]] nasm_shared_args: NotRequired[T.List[str]] masm_static_args: NotRequired[T.List[str]] masm_shared_args: NotRequired[T.List[str]] class BuildTarget(Library): target_type: Literal['executable', 'shared_library', 'static_library', 'shared_module', 'both_libraries', 'library', 'jar'] class Jar(_BaseBuildTarget): main_class: str java_resources: T.Optional[build.StructuredSources] sources: T.Union[str, File, build.GeneratedTypes, build.ExtractedObjects, build.BuildTarget] java_args: T.List[str] class FuncDeclareDependency(TypedDict): compile_args: T.List[str] d_import_dirs: T.List[T.Union[build.IncludeDirs, str]] d_module_versions: T.List[T.Union[str, int]] dependencies: T.List[Dependency] extra_files: T.List[FileOrString] include_directories: T.List[T.Union[build.IncludeDirs, str]] link_args: T.List[str] link_whole: T.List[build.StaticTargetTypes] link_with: T.List[build.BuildTargetTypes] objects: T.List[build.ExtractedObjects] sources: T.List[T.Union[FileOrString, build.GeneratedTypes]] variables: T.Dict[str, str] version: T.Optional[str] class FuncDependency(ExtractRequired): allow_fallback: T.Optional[bool] cmake_args: T.List[str] cmake_module_path: T.List[str] cmake_package_version: str components: T.List[str] default_options: T.Dict[OptionKey, options.ElementaryOptionValues] fallback: T.Union[str, T.List[str], None] include_type: IncludeType language: T.Optional[str] main: bool method: DependencyMethods modules: T.List[str] native: MachineChoice not_found_message: str optional_modules: T.List[str] private_headers: bool static: T.Optional[bool] version: T.List[str]