aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-02-15 14:48:28 -0500
committerJussi Pakkanen <jpakkane@gmail.com>2022-02-20 14:21:31 +0200
commitc85f7a39a80ccbadb9ffb76102da30c05e3db66f (patch)
tree528b37713a8e8ee23b9c96b6a6e35244ad0b29f2 /mesonbuild
parenta3e4272bd328778c1d35fd0f688fa29eef6a01f4 (diff)
downloadmeson-c85f7a39a80ccbadb9ffb76102da30c05e3db66f.zip
meson-c85f7a39a80ccbadb9ffb76102da30c05e3db66f.tar.gz
meson-c85f7a39a80ccbadb9ffb76102da30c05e3db66f.tar.bz2
mtest: raise informative error message when test program doesn't exist
If --no-rebuild is used, the test program might not exist, spawning a FileNotFoundError inside a long traceback rooted in subprocess.Popen trying to run that test program. Current versions of Meson even say it's an "unhandled python exception". But we can do one better and actually tell the user what is wrong, why, and what to do to fix it. And we can do so before getting waist deep in partially running tests. Fixes #10006
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/mtest.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py
index 4488a8c..3705ea2 100644
--- a/mesonbuild/mtest.py
+++ b/mesonbuild/mtest.py
@@ -1347,9 +1347,12 @@ class SingleTestRunner:
self.console_mode = ConsoleUser.LOGGER
def _get_test_cmd(self) -> T.Optional[T.List[str]]:
- if self.test.fname[0].endswith('.jar'):
+ testentry = self.test.fname[0]
+ if self.options.no_rebuild and not os.path.isfile(testentry):
+ raise TestException(f'The test program {testentry!r} does not exist. Cannot run tests before building them.')
+ if testentry.endswith('.jar'):
return ['java', '-jar'] + self.test.fname
- elif not self.test.is_cross_built and run_with_mono(self.test.fname[0]):
+ elif not self.test.is_cross_built and run_with_mono(testentry):
return ['mono'] + self.test.fname
elif self.test.cmd_is_built and self.test.is_cross_built and self.test.needs_exe_wrapper:
if self.test.exe_wrapper is None: