The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
480 lines
13 KiB
480 lines
13 KiB
# SPDX-License-Identifier: Apache-2.0 |
|
# Copyright © 2021 The Meson Developers |
|
# Copyright © 2021 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 |
|
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 |
|
|
|
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, ExternalProgram]] |
|
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`.""" |
|
|
|
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] |
|
capture: bool |
|
command: T.List[T.Union[str, build.BuildTarget, build.CustomTarget, |
|
build.CustomTargetIndex, 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.CustomTarget, build.CustomTargetIndex, |
|
build.ExtractedObjects, build.GeneratedList, 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.Dict[OptionKey, T.Union[str, int, bool, 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, T.Union[str, int, bool, T.List[str]]] |
|
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.BuildTarget, build.CustomTarget, |
|
build.CustomTargetIndex, ExternalProgram, File]] |
|
fallback: T.Optional[str] |
|
input: T.List[T.Union[str, build.BuildTarget, build.CustomTarget, build.CustomTargetIndex, |
|
build.ExtractedObjects, build.GeneratedList, ExternalProgram, File]] |
|
output: T.List[str] |
|
replace_string: str |
|
|
|
|
|
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] |
|
|
|
|
|
class Subproject(ExtractRequired): |
|
|
|
default_options: T.Dict[OptionKey, T.Union[str, int, bool, T.List[str]]] |
|
version: T.List[str] |
|
|
|
|
|
class DoSubproject(ExtractRequired): |
|
|
|
default_options: T.Dict[OptionKey, T.Union[str, int, bool, T.List[str]]] |
|
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 |
|
extra_files: T.List[FileOrString] |
|
gnu_symbol_visibility: str |
|
install: bool |
|
install_mode: FileMode |
|
install_rpath: str |
|
implicit_include_directories: bool |
|
link_depends: T.List[T.Union[str, File, build.CustomTarget, build.CustomTargetIndex, build.BuildTarget]] |
|
link_language: T.Optional[str] |
|
name_prefix: T.Optional[str] |
|
name_suffix: T.Optional[str] |
|
native: MachineChoice |
|
objects: T.List[build.ObjectTypes] |
|
override_options: T.Dict[OptionKey, T.Union[str, int, bool, T.List[str]]] |
|
depend_files: NotRequired[T.List[File]] |
|
resources: T.List[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 |
|
rust_dependency_map: T.Dict[str, str] |
|
sources: SourcesVarargsType |
|
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[Literal['c', 'rust']] |
|
|
|
|
|
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] |
|
|
|
|
|
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.CustomTarget, build.CustomTargetIndex, build.GeneratedList, 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[T.Union[build.StaticLibrary, build.CustomTarget, build.CustomTargetIndex]] |
|
link_with: T.List[build.LibTypes] |
|
objects: T.List[build.ExtractedObjects] |
|
sources: T.List[T.Union[FileOrString, build.GeneratedTypes]] |
|
variables: T.Dict[str, str] |
|
version: T.Optional[str]
|
|
|