diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2021-06-20 11:29:06 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2021-06-21 20:19:06 +0300 |
commit | 5cd9f88d6cafbbc2b748ffc85226d53800a05aac (patch) | |
tree | 314ae3accb148ac6f180da3373c9b4949b9e54f4 /mesonbuild/interpreter/interpreterobjects.py | |
parent | 2e8729a7e6cee460f8e75e231ecdd01933fbd277 (diff) | |
download | meson-5cd9f88d6cafbbc2b748ffc85226d53800a05aac.zip meson-5cd9f88d6cafbbc2b748ffc85226d53800a05aac.tar.gz meson-5cd9f88d6cafbbc2b748ffc85226d53800a05aac.tar.bz2 |
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`.
Diffstat (limited to 'mesonbuild/interpreter/interpreterobjects.py')
-rw-r--r-- | mesonbuild/interpreter/interpreterobjects.py | 25 |
1 files changed, 17 insertions, 8 deletions
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) |