From 5cd9f88d6cafbbc2b748ffc85226d53800a05aac Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Sun, 20 Jun 2021 11:29:06 +0200 Subject: fix: Ensure that build targets have all methods from ExternalProgram As a side-effect from #8885 `find_program()` returns now `Executable` objects when `meson.override_find_program` is called with an executable target. To resolve this conflict the missing methods from `ExternalProgram` are added to `BuildTarget`. --- mesonbuild/interpreter/interpreterobjects.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'mesonbuild/interpreter/interpreterobjects.py') diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py index 7c4e75e..744f69c 100644 --- a/mesonbuild/interpreter/interpreterobjects.py +++ b/mesonbuild/interpreter/interpreterobjects.py @@ -582,19 +582,14 @@ class ExternalProgramHolder(ObjectHolder[ExternalProgram]): return self._full_path() def _full_path(self) -> str: - exe = self.held_object - # TODO: How is this case even possible? Why can this hold a build.Executable? - if isinstance(exe, build.Executable): - assert self.interpreter.backend is not None - return self.interpreter.backend.get_target_filename_abs(exe) if not self.found(): raise InterpreterException('Unable to get the path of a not-found external program') - path = exe.get_path() + path = self.held_object.get_path() assert path is not None - return exe.get_path() + return path def found(self) -> bool: - return isinstance(self.held_object, build.Executable) or self.held_object.found() + return self.held_object.found() class ExternalLibraryHolder(ObjectHolder[ExternalLibrary]): def __init__(self, el: ExternalLibrary, interpreter: 'Interpreter'): @@ -790,6 +785,8 @@ class BuildTargetHolder(ObjectHolder[_BuildTarget]): 'get_id': self.get_id_method, 'outdir': self.outdir_method, 'full_path': self.full_path_method, + 'path': self.path_method, + 'found': self.found_method, 'private_dir_include': self.private_dir_include_method, }) @@ -810,6 +807,12 @@ class BuildTargetHolder(ObjectHolder[_BuildTarget]): @noPosargs @noKwargs + @FeatureNew('BuildTarget.found', '0.59.0') + def found_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> bool: + return True + + @noPosargs + @noKwargs def private_dir_include_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> build.IncludeDirs: return build.IncludeDirs('', [], False, [self.interpreter.backend.get_target_private_dir(self._target_object)]) @@ -820,6 +823,12 @@ class BuildTargetHolder(ObjectHolder[_BuildTarget]): @noPosargs @noKwargs + @FeatureDeprecated('BuildTarget.path', '0.55.0', 'Use BuildTarget.full_path instead') + def path_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str: + return self.interpreter.backend.get_target_filename_abs(self._target_object) + + @noPosargs + @noKwargs def outdir_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str: return self.interpreter.backend.get_target_dir(self._target_object) -- cgit v1.1