diff options
| author | Xavier Claessens <xclaessens@netflix.com> | 2025-10-12 10:20:47 -0400 |
|---|---|---|
| committer | Xavier Claessens <xclaesse@gmail.com> | 2025-10-15 12:15:39 -0400 |
| commit | bd33265b04ca609afe6bb895453c5757bbbbb27d (patch) | |
| tree | 03b87a92694d2f7821612f6405540cc0e044ab6d /mesonbuild/interpreter | |
| parent | 4795475595ef6b87074df9e38d09a3dff2690396 (diff) | |
| download | meson-bd33265b04ca609afe6bb895453c5757bbbbb27d.tar.gz | |
Replace OverrideExecutable and OverrideProgram with LocalProgram
Diffstat (limited to 'mesonbuild/interpreter')
| -rw-r--r-- | mesonbuild/interpreter/interpreter.py | 18 | ||||
| -rw-r--r-- | mesonbuild/interpreter/interpreterobjects.py | 42 | ||||
| -rw-r--r-- | mesonbuild/interpreter/mesonmain.py | 7 |
3 files changed, 25 insertions, 42 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py index 62922c2b3..552e1331b 100644 --- a/mesonbuild/interpreter/interpreter.py +++ b/mesonbuild/interpreter/interpreter.py @@ -118,7 +118,6 @@ if T.TYPE_CHECKING: from ..backend.backends import Backend from ..interpreterbase.baseobjects import InterpreterObject, TYPE_var, TYPE_kwargs from ..options import OptionDict - from ..programs import OverrideProgram from .type_checking import SourcesVarargsType # Input source types passed to Targets @@ -130,7 +129,7 @@ if T.TYPE_CHECKING: BuildTargetSource = T.Union[mesonlib.FileOrString, build.GeneratedTypes, build.StructuredSources] - ProgramVersionFunc = T.Callable[[T.Union[ExternalProgram, build.Executable, OverrideProgram]], str] + ProgramVersionFunc = T.Callable[[T.Union[ExternalProgram, build.LocalProgram]], str] TestClass = T.TypeVar('TestClass', bound=Test) @@ -441,7 +440,6 @@ class Interpreter(InterpreterBase, HoldableObject): build.Generator: OBJ.GeneratorHolder, build.GeneratedList: OBJ.GeneratedListHolder, build.ExtractedObjects: OBJ.GeneratedObjectsHolder, - build.OverrideExecutable: OBJ.OverrideExecutableHolder, build.LocalProgram: OBJ.LocalProgramHolder, build.RunTarget: OBJ.RunTargetHolder, build.AliasTarget: OBJ.AliasTargetHolder, @@ -1623,7 +1621,7 @@ class Interpreter(InterpreterBase, HoldableObject): def program_from_overrides(self, command_names: T.List[mesonlib.FileOrString], extra_info: T.List['mlog.TV_Loggable'] - ) -> T.Optional[T.Union[ExternalProgram, OverrideProgram, build.OverrideExecutable, build.LocalProgram]]: + ) -> T.Optional[T.Union[ExternalProgram, build.LocalProgram]]: for name in command_names: if not isinstance(name, str): continue @@ -1638,7 +1636,7 @@ class Interpreter(InterpreterBase, HoldableObject): if isinstance(name, str): self.build.searched_programs.add(name) - def add_find_program_override(self, name: str, exe: T.Union[build.OverrideExecutable, ExternalProgram, OverrideProgram, build.LocalProgram]) -> None: + def add_find_program_override(self, name: str, exe: T.Union[ExternalProgram, build.LocalProgram]) -> None: if name in self.build.searched_programs: raise InterpreterException(f'Tried to override finding of executable "{name}" which has already been found.') if name in self.build.find_overrides: @@ -1663,7 +1661,7 @@ class Interpreter(InterpreterBase, HoldableObject): search_dirs: T.Optional[T.List[str]] = None, version_arg: T.Optional[str] = '', version_func: T.Optional[ProgramVersionFunc] = None - ) -> T.Union[ExternalProgram, build.OverrideExecutable, OverrideProgram, build.LocalProgram]: + ) -> T.Union[ExternalProgram, build.LocalProgram]: args = mesonlib.listify(args) extra_info: T.List[mlog.TV_Loggable] = [] @@ -1695,7 +1693,7 @@ class Interpreter(InterpreterBase, HoldableObject): version_arg: T.Optional[str], version_func: T.Optional[ProgramVersionFunc], extra_info: T.List[mlog.TV_Loggable] - ) -> T.Optional[T.Union[ExternalProgram, build.Executable, OverrideProgram, build.LocalProgram]]: + ) -> T.Optional[T.Union[ExternalProgram, build.LocalProgram]]: progobj = self.program_from_overrides(args, extra_info) if progobj: return progobj @@ -1731,7 +1729,7 @@ class Interpreter(InterpreterBase, HoldableObject): return progobj - def check_program_version(self, progobj: T.Union[ExternalProgram, build.Executable, OverrideProgram, build.LocalProgram], + def check_program_version(self, progobj: T.Union[ExternalProgram, build.LocalProgram], wanted: T.Union[str, T.List[str]], version_func: T.Optional[ProgramVersionFunc], extra_info: T.List[mlog.TV_Loggable]) -> bool: @@ -1758,7 +1756,7 @@ class Interpreter(InterpreterBase, HoldableObject): def find_program_fallback(self, fallback: str, args: T.List[mesonlib.FileOrString], default_options: OptionDict, required: bool, extra_info: T.List[mlog.TV_Loggable] - ) -> T.Optional[T.Union[ExternalProgram, build.Executable, OverrideProgram]]: + ) -> T.Optional[T.Union[ExternalProgram, build.LocalProgram]]: mlog.log('Fallback to subproject', mlog.bold(fallback), 'which provides program', mlog.bold(' '.join(args))) sp_kwargs: kwtypes.DoSubproject = { @@ -1785,7 +1783,7 @@ class Interpreter(InterpreterBase, HoldableObject): @disablerIfNotFound def func_find_program(self, node: mparser.BaseNode, args: T.Tuple[T.List[mesonlib.FileOrString]], kwargs: 'kwtypes.FindProgram', - ) -> T.Union['build.Executable', ExternalProgram, 'OverrideProgram']: + ) -> T.Union[ExternalProgram, build.LocalProgram]: disabled, required, feature = extract_required_kwarg(kwargs, self.subproject) if disabled: assert feature, 'for mypy' diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py index 82d0a75df..431086669 100644 --- a/mesonbuild/interpreter/interpreterobjects.py +++ b/mesonbuild/interpreter/interpreterobjects.py @@ -605,10 +605,10 @@ class DependencyHolder(ObjectHolder[Dependency]): raise InterpreterException('as_shared method is only supported on declare_dependency() objects') return self.held_object.get_as_shared(kwargs['recursive']) -_EXTPROG = T.TypeVar('_EXTPROG', bound=ExternalProgram) +_BASEPROG = T.TypeVar('_BASEPROG', bound=T.Union[ExternalProgram, build.LocalProgram]) -class _ExternalProgramHolder(ObjectHolder[_EXTPROG]): - def __init__(self, ep: _EXTPROG, interpreter: 'Interpreter') -> None: +class _BaseProgramHolder(ObjectHolder[_BASEPROG]): + def __init__(self, ep: _BASEPROG, interpreter: 'Interpreter') -> None: super().__init__(ep, interpreter) @noPosargs @@ -619,15 +619,15 @@ class _ExternalProgramHolder(ObjectHolder[_EXTPROG]): @noPosargs @noKwargs - @FeatureDeprecated('ExternalProgram.path', '0.55.0', - 'use ExternalProgram.full_path() instead') + @FeatureDeprecated('Program.path', '0.55.0', + 'use Program.full_path() instead') @InterpreterObject.method('path') def path_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str: return self._full_path() @noPosargs @noKwargs - @FeatureNew('ExternalProgram.full_path', '0.55.0') + @FeatureNew('Program.full_path', '0.55.0') @InterpreterObject.method('full_path') def full_path_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str: return self._full_path() @@ -641,9 +641,11 @@ class _ExternalProgramHolder(ObjectHolder[_EXTPROG]): @noPosargs @noKwargs - @FeatureNew('ExternalProgram.version', '0.62.0') + @FeatureNew('Program.version', '0.62.0') @InterpreterObject.method('version') def version_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str: + if isinstance(self.held_object, build.LocalProgram) and isinstance(self.held_object.program, build.Executable): + FeatureNew.single_use('Program.version with an executable', '1.9.0', subproject=self.subproject, location=self.current_node) if not self.found(): raise InterpreterException('Unable to get the version of a not-found external program') try: @@ -654,7 +656,10 @@ class _ExternalProgramHolder(ObjectHolder[_EXTPROG]): def found(self) -> bool: return self.held_object.found() -class ExternalProgramHolder(_ExternalProgramHolder[ExternalProgram]): +class ExternalProgramHolder(_BaseProgramHolder[ExternalProgram]): + pass + +class LocalProgramHolder(_BaseProgramHolder[build.LocalProgram]): pass class ExternalLibraryHolder(ObjectHolder[ExternalLibrary]): @@ -1163,24 +1168,3 @@ class StructuredSourcesHolder(ObjectHolder[build.StructuredSources]): def __init__(self, sources: build.StructuredSources, interp: 'Interpreter'): super().__init__(sources, interp) - -class OverrideExecutableHolder(BuildTargetHolder[build.OverrideExecutable]): - @noPosargs - @noKwargs - @FeatureNew('OverrideExecutable.version', '1.9.0') - @InterpreterObject.method('version') - def version_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str: - return self.held_object.get_version(self.interpreter) - -class LocalProgramHolder(ObjectHolder[build.LocalProgram]): - @noPosargs - @noKwargs - @InterpreterObject.method('version') - def version_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str: - return self.held_object.version - - @noPosargs - @noKwargs - @InterpreterObject.method('found') - def found_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> bool: - return True diff --git a/mesonbuild/interpreter/mesonmain.py b/mesonbuild/interpreter/mesonmain.py index 79ebd9af1..5a4d7f899 100644 --- a/mesonbuild/interpreter/mesonmain.py +++ b/mesonbuild/interpreter/mesonmain.py @@ -14,7 +14,7 @@ from .. import mlog, coredata from ..mesonlib import MachineChoice from ..options import OptionKey -from ..programs import OverrideProgram, ExternalProgram +from ..programs import ExternalProgram from ..interpreter.type_checking import ENV_KW, ENV_METHOD_KW, ENV_SEPARATOR_KW, env_convertor_with_method from ..interpreterbase import (MesonInterpreterObject, FeatureNew, FeatureDeprecated, typed_pos_args, noArgsFlattening, noPosargs, noKwargs, @@ -322,9 +322,10 @@ class MesonMain(MesonInterpreterObject): self.interpreter.environment.build_dir) if not os.path.exists(abspath): raise InterpreterException(f'Tried to override {name} with a file that does not exist.') - exe = OverrideProgram(name, self.interpreter.project_version, command=[abspath]) + prog = ExternalProgram(name, command=[abspath], silent=True) + exe = build.LocalProgram(prog, self.interpreter.project_version) elif isinstance(exe, build.Executable): - exe = build.OverrideExecutable(exe, self.interpreter.project_version) + exe = build.LocalProgram(exe, self.interpreter.project_version) self.interpreter.add_find_program_override(name, exe) @typed_kwargs( |
