diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2017-11-29 14:58:08 -0800 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-11-30 22:19:54 +0200 |
commit | d573a29bdaf64026e00b5c169f58c54d004e5244 (patch) | |
tree | 530c3d3883ae8b02767f6c0bfe609db9f3549f8d | |
parent | cabbb30ab457e30084c8e125fe394c1801048b67 (diff) | |
download | meson-d573a29bdaf64026e00b5c169f58c54d004e5244.zip meson-d573a29bdaf64026e00b5c169f58c54d004e5244.tar.gz meson-d573a29bdaf64026e00b5c169f58c54d004e5244.tar.bz2 |
mtest: Chdir into the build directory before running tests with -C
When `ninja -C builddir/ test` is run, ninja will change into the build
dir before starting, but `meson test -C builddir/` does not. This is
important because meson does not use (for good reasons) absolute paths,
which means if a test case needs to be passed as an argument a file name
that is part of the build process, it will be relative builddir. Without
changing into the builddir the path will not exist (or worse, point at
the wrong thing), and test will not behave as intended.
To fix this mtest will change directory before starting tests, and will
change back after all tests have been finished.
Fixes #2710
-rw-r--r-- | mesonbuild/mtest.py | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py index 30322aa..b39f5af 100644 --- a/mesonbuild/mtest.py +++ b/mesonbuild/mtest.py @@ -482,35 +482,41 @@ TIMEOUT: %4d numlen = len('%d' % len(tests)) self.open_log_files() wrap = self.get_wrapper() + startdir = os.getcwd() + if self.options.wd: + os.chdir(self.options.wd) - for _ in range(self.options.repeat): - for i, test in enumerate(tests): - visible_name = self.get_pretty_suite(test) - - if self.options.gdb: - test.timeout = None - - if not test.is_parallel or self.options.gdb: - self.drain_futures(futures) - futures = [] - res = self.run_single_test(wrap, test) - self.print_stats(numlen, tests, visible_name, res, i) - else: - if not executor: - executor = conc.ThreadPoolExecutor(max_workers=self.options.num_processes) - f = executor.submit(self.run_single_test, wrap, test) - futures.append((f, numlen, tests, visible_name, i)) + try: + for _ in range(self.options.repeat): + for i, test in enumerate(tests): + visible_name = self.get_pretty_suite(test) + + if self.options.gdb: + test.timeout = None + + if not test.is_parallel or self.options.gdb: + self.drain_futures(futures) + futures = [] + res = self.run_single_test(wrap, test) + self.print_stats(numlen, tests, visible_name, res, i) + else: + if not executor: + executor = conc.ThreadPoolExecutor(max_workers=self.options.num_processes) + f = executor.submit(self.run_single_test, wrap, test) + futures.append((f, numlen, tests, visible_name, i)) + if self.options.repeat > 1 and self.fail_count: + break if self.options.repeat > 1 and self.fail_count: break - if self.options.repeat > 1 and self.fail_count: - break - self.drain_futures(futures) - self.print_summary() - self.print_collected_logs() + self.drain_futures(futures) + self.print_summary() + self.print_collected_logs() - if self.logfilename: - print('Full log written to %s' % self.logfilename) + if self.logfilename: + print('Full log written to %s' % self.logfilename) + finally: + os.chdir(startdir) def drain_futures(self, futures): for i in futures: |