diff options
-rw-r--r-- | mesonbuild/compilers/__init__.py | 2 | ||||
-rw-r--r-- | mesonbuild/interpreter/compiler.py | 35 | ||||
-rw-r--r-- | mesonbuild/interpreterbase/baseobjects.py | 4 |
3 files changed, 24 insertions, 17 deletions
diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py index b46c8f6..be4809f 100644 --- a/mesonbuild/compilers/__init__.py +++ b/mesonbuild/compilers/__init__.py @@ -15,6 +15,7 @@ # Public symbols for compilers sub-package when using 'from . import compilers' __all__ = [ 'Compiler', + 'RunResult', 'all_languages', 'base_options', @@ -112,6 +113,7 @@ __all__ = [ # Bring symbols from each module into compilers sub-package namespace from .compilers import ( Compiler, + RunResult, all_languages, base_options, clib_langs, diff --git a/mesonbuild/interpreter/compiler.py b/mesonbuild/interpreter/compiler.py index 3a3ce34..b67cc88 100644 --- a/mesonbuild/interpreter/compiler.py +++ b/mesonbuild/interpreter/compiler.py @@ -6,17 +6,20 @@ from .interpreterobjects import (IncludeDirsHolder, ExternalLibraryHolder, from .. import mesonlib from .. import mlog from .. import dependencies -from ..interpreterbase import (InterpreterObject, noPosargs, noKwargs, permittedKwargs, +from ..interpreterbase import (ObjectHolder, noPosargs, noKwargs, permittedKwargs, FeatureNew, FeatureNewKwargs, disablerIfNotFound, - check_stringlist, InterpreterException, InvalidArguments, - InvalidCode) + check_stringlist, InterpreterException, InvalidArguments) import typing as T +import os -class TryRunResultHolder(InterpreterObject): - def __init__(self, res): - super().__init__() - self.res = res +if T.TYPE_CHECKING: + from ..environment import Environment + from ..compilers import Compiler, RunResult + +class TryRunResultHolder(ObjectHolder['RunResult']): + def __init__(self, res: 'RunResult'): + super().__init__(res) self.methods.update({'returncode': self.returncode_method, 'compiled': self.compiled_method, 'stdout': self.stdout_method, @@ -26,22 +29,22 @@ class TryRunResultHolder(InterpreterObject): @noPosargs @permittedKwargs({}) def returncode_method(self, args, kwargs): - return self.res.returncode + return self.held_object.returncode @noPosargs @permittedKwargs({}) def compiled_method(self, args, kwargs): - return self.res.compiled + return self.held_object.compiled @noPosargs @permittedKwargs({}) def stdout_method(self, args, kwargs): - return self.res.stdout + return self.held_object.stdout @noPosargs @permittedKwargs({}) def stderr_method(self, args, kwargs): - return self.res.stderr + return self.held_object.stderr header_permitted_kwargs = { 'required', @@ -61,12 +64,10 @@ find_library_permitted_kwargs = { find_library_permitted_kwargs |= {'header_' + k for k in header_permitted_kwargs} -class CompilerHolder(InterpreterObject): +class CompilerHolder(ObjectHolder['Compiler']): def __init__(self, compiler: 'Compiler', env: 'Environment', subproject: str): - InterpreterObject.__init__(self) - self.compiler = compiler + super().__init__(compiler, subproject=subproject) self.environment = env - self.subproject = subproject self.methods.update({'compiles': self.compiles_method, 'links': self.links_method, 'get_id': self.get_id_method, @@ -101,6 +102,10 @@ class CompilerHolder(InterpreterObject): 'get_argument_syntax': self.get_argument_syntax_method, }) + @property + def compiler(self) -> 'Compiler': + return self.held_object + def _dep_msg(self, deps, endl): msg_single = 'with dependency {}' msg_many = 'with dependencies {}' diff --git a/mesonbuild/interpreterbase/baseobjects.py b/mesonbuild/interpreterbase/baseobjects.py index d723222..3e3963f 100644 --- a/mesonbuild/interpreterbase/baseobjects.py +++ b/mesonbuild/interpreterbase/baseobjects.py @@ -18,14 +18,14 @@ from .helpers import flatten import typing as T -TV_fw_var = T.Union[str, int, float, bool, list, dict, 'InterpreterObject', 'ObjectHolder'] +TV_fw_var = T.Union[str, int, float, bool, list, dict, 'InterpreterObject'] TV_fw_args = T.List[T.Union[mparser.BaseNode, TV_fw_var]] TV_fw_kwargs = T.Dict[str, T.Union[mparser.BaseNode, TV_fw_var]] TV_func = T.TypeVar('TV_func', bound=T.Callable[..., T.Any]) TYPE_elementary = T.Union[str, int, float, bool] -TYPE_var = T.Union[TYPE_elementary, T.List[T.Any], T.Dict[str, T.Any], 'InterpreterObject', 'ObjectHolder'] +TYPE_var = T.Union[TYPE_elementary, T.List[T.Any], T.Dict[str, T.Any], 'InterpreterObject'] TYPE_nvar = T.Union[TYPE_var, mparser.BaseNode] TYPE_nkwargs = T.Dict[str, TYPE_nvar] TYPE_key_resolver = T.Callable[[mparser.BaseNode], str] |