aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2023-07-19 13:04:50 -0700
committerXavier Claessens <xclaesse@gmail.com>2023-07-20 14:20:46 -0400
commit68da3669a41d3423bc5db593b66def8a59d2f625 (patch)
tree7426718329199481688cf21e2166d5995242747c
parent686f6aac31d56cfc73f0ccbae32c57661f602da1 (diff)
downloadmeson-68da3669a41d3423bc5db593b66def8a59d2f625.zip
meson-68da3669a41d3423bc5db593b66def8a59d2f625.tar.gz
meson-68da3669a41d3423bc5db593b66def8a59d2f625.tar.bz2
interpreter: use type_checking defined target argument lists
This moves to a list of shared objects inside the type_checking module. This is based on my experience of fully typing all of these functions several times, and will make it easier to slowly land all of the changes we want to make.
-rw-r--r--mesonbuild/interpreter/interpreter.py24
-rw-r--r--mesonbuild/interpreter/type_checking.py75
2 files changed, 90 insertions, 9 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 2534efc..853d858 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -50,12 +50,16 @@ from .interpreterobjects import (
NullSubprojectInterpreter,
)
from .type_checking import (
+ BUILD_TARGET_KWS,
COMMAND_KW,
CT_BUILD_ALWAYS,
CT_BUILD_ALWAYS_STALE,
CT_BUILD_BY_DEFAULT,
CT_INPUT_KW,
CT_INSTALL_DIR_KW,
+ EXECUTABLE_KWS,
+ JAR_KWS,
+ LIBRARY_KWS,
MULTI_OUTPUT_KW,
OUTPUT_KW,
DEFAULT_OPTIONS,
@@ -78,10 +82,12 @@ from .type_checking import (
INSTALL_TAG_KW,
LANGUAGE_KW,
NATIVE_KW,
- OVERRIDE_OPTIONS_KW,
PRESERVE_PATH_KW,
REQUIRED_KW,
+ SHARED_LIB_KWS,
+ SHARED_MOD_KWS,
SOURCES_KW,
+ STATIC_LIB_KWS,
VARIABLES_KW,
TEST_KWS,
NoneType,
@@ -1805,7 +1811,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@FeatureDeprecatedKwargs('executable', '0.56.0', ['gui_app'], extra_message="Use 'win_subsystem' instead.")
@permittedKwargs(build.known_exe_kwargs)
@typed_pos_args('executable', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.StructuredSources, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('executable', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('executable', *EXECUTABLE_KWS, allow_unknown=True)
def func_executable(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[BuildTargetSource]],
kwargs: kwtypes.Executable) -> build.Executable:
@@ -1813,7 +1819,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@permittedKwargs(build.known_stlib_kwargs)
@typed_pos_args('static_library', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.StructuredSources, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('static_library', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('static_library', *STATIC_LIB_KWS, allow_unknown=True)
def func_static_lib(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[BuildTargetSource]],
kwargs: kwtypes.StaticLibrary) -> build.StaticLibrary:
@@ -1821,7 +1827,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@permittedKwargs(build.known_shlib_kwargs)
@typed_pos_args('shared_library', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.StructuredSources, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('shared_library', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('shared_library', *SHARED_LIB_KWS, allow_unknown=True)
def func_shared_lib(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[BuildTargetSource]],
kwargs: kwtypes.SharedLibrary) -> build.SharedLibrary:
@@ -1831,7 +1837,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@permittedKwargs(known_library_kwargs)
@typed_pos_args('both_libraries', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.StructuredSources, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('both_libraries', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('both_libraries', *LIBRARY_KWS, allow_unknown=True)
def func_both_lib(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[BuildTargetSource]],
kwargs: kwtypes.Library) -> build.BothLibraries:
@@ -1840,7 +1846,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@FeatureNew('shared_module', '0.37.0')
@permittedKwargs(build.known_shmod_kwargs)
@typed_pos_args('shared_module', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.StructuredSources, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('shared_module', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('shared_module', *SHARED_MOD_KWS, allow_unknown=True)
def func_shared_module(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[BuildTargetSource]],
kwargs: kwtypes.SharedModule) -> build.SharedModule:
@@ -1848,7 +1854,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@permittedKwargs(known_library_kwargs)
@typed_pos_args('library', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.StructuredSources, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('library', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('library', *LIBRARY_KWS, allow_unknown=True)
def func_library(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[BuildTargetSource]],
kwargs: kwtypes.Library) -> build.Executable:
@@ -1856,7 +1862,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@permittedKwargs(build.known_jar_kwargs)
@typed_pos_args('jar', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('jar', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('jar', *JAR_KWS, allow_unknown=True)
def func_jar(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[T.Union[str, mesonlib.File, build.GeneratedTypes]]],
kwargs: kwtypes.Jar) -> build.Jar:
@@ -1865,7 +1871,7 @@ class Interpreter(InterpreterBase, HoldableObject):
@FeatureNewKwargs('build_target', '0.40.0', ['link_whole', 'override_options'])
@permittedKwargs(known_build_target_kwargs)
@typed_pos_args('build_target', str, varargs=(str, mesonlib.File, build.CustomTarget, build.CustomTargetIndex, build.GeneratedList, build.StructuredSources, build.ExtractedObjects, build.BuildTarget))
- @typed_kwargs('build_target', OVERRIDE_OPTIONS_KW, allow_unknown=True)
+ @typed_kwargs('build_target', *BUILD_TARGET_KWS, allow_unknown=True)
def func_build_target(self, node: mparser.BaseNode,
args: T.Tuple[str, T.List[BuildTargetSource]],
kwargs: kwtypes.BuildTarget
diff --git a/mesonbuild/interpreter/type_checking.py b/mesonbuild/interpreter/type_checking.py
index 8b57d06..f2a7408 100644
--- a/mesonbuild/interpreter/type_checking.py
+++ b/mesonbuild/interpreter/type_checking.py
@@ -479,3 +479,78 @@ TEST_KWS: T.List[KwargInfo] = [
KwargInfo('suite', ContainerTypeInfo(list, str), listify=True, default=['']), # yes, a list of empty string
KwargInfo('verbose', bool, default=False, since='0.62.0'),
]
+
+# Applies to all build_target like classes
+_ALL_TARGET_KWS: T.List[KwargInfo] = [
+ OVERRIDE_OPTIONS_KW,
+]
+
+# Applies to all build_target classes except jar
+_BUILD_TARGET_KWS: T.List[KwargInfo] = [
+ *_ALL_TARGET_KWS,
+]
+
+# Arguments exclusive to Executable. These are separated to make integrating
+# them into build_target easier
+_EXCLUSIVE_EXECUTABLE_KWS: T.List[KwargInfo] = []
+
+# The total list of arguments used by Executable
+EXECUTABLE_KWS = [
+ *_BUILD_TARGET_KWS,
+ *_EXCLUSIVE_EXECUTABLE_KWS,
+]
+
+# Arguments exclusive to StaticLibrary. These are separated to make integrating
+# them into build_target easier
+_EXCLUSIVE_STATIC_LIB_KWS: T.List[KwargInfo] = []
+
+# The total list of arguments used by StaticLibrary
+STATIC_LIB_KWS = [
+ *_BUILD_TARGET_KWS,
+ *_EXCLUSIVE_STATIC_LIB_KWS,
+]
+
+# Arguments exclusive to SharedLibrary. These are separated to make integrating
+# them into build_target easier
+_EXCLUSIVE_SHARED_LIB_KWS: T.List[KwargInfo] = []
+
+# The total list of arguments used by SharedLibrary
+SHARED_LIB_KWS = [
+ *_BUILD_TARGET_KWS,
+ *_EXCLUSIVE_SHARED_LIB_KWS,
+]
+
+# Arguments exclusive to SharedModule. These are separated to make integrating
+# them into build_target easier
+_EXCLUSIVE_SHARED_MOD_KWS: T.List[KwargInfo] = []
+
+# The total list of arguments used by SharedModule
+SHARED_MOD_KWS = [
+ *_BUILD_TARGET_KWS,
+ *_EXCLUSIVE_SHARED_MOD_KWS,
+]
+
+# Arguments exclusive to JAR. These are separated to make integrating
+# them into build_target easier
+_EXCLUSIVE_JAR_KWS: T.List[KwargInfo] = []
+
+# The total list of arguments used by JAR
+JAR_KWS = [
+ *_ALL_TARGET_KWS,
+ *_EXCLUSIVE_JAR_KWS,
+]
+
+# Arguments used by both_library and library
+LIBRARY_KWS = [
+ *_BUILD_TARGET_KWS,
+ *_EXCLUSIVE_SHARED_LIB_KWS,
+ *_EXCLUSIVE_SHARED_MOD_KWS,
+ *_EXCLUSIVE_STATIC_LIB_KWS,
+]
+
+# Arguments used by build_Target
+BUILD_TARGET_KWS = [
+ *LIBRARY_KWS,
+ *_EXCLUSIVE_EXECUTABLE_KWS,
+ *_EXCLUSIVE_JAR_KWS,
+]