tests/functional/meson.build | 2 +- tests/functional/qemu_test/config.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
When running functional tests directly there are some heuristics
to figure out where the build directory lives, along with the
possibility to override the logic by setting the QEMU_BUILD_DIR
env variable. This env var is set as part of the test env when
run via Meson but not when run directly.
A particular flaw with the currently logic is that it silently
uses the wrong location when the build directory is a sub-dir
under "./build", which is a common usage scenario for some devs.
With the recent introduction of the 'run' script, we now have
the MESON_BUILD_DIR env variable set unconditionally, so we
can rely on that from the functional tests to get the correct
location in all scenarios.
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/functional/meson.build | 2 +-
tests/functional/qemu_test/config.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index b979cff2b9..d34aefa8b0 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -74,7 +74,7 @@ foreach speed : ['quick', 'thorough']
test_deps += [qemu_img]
endif
test_env.set('QEMU_TEST_QEMU_BINARY', test_emulator.full_path())
- test_env.set('QEMU_BUILD_ROOT', meson.project_build_root())
+ test_env.set('MESON_BUILD_ROOT', meson.project_build_root())
test_env.set('PYTHONPATH', meson.project_source_root() / 'python:' +
meson.current_source_dir())
diff --git a/tests/functional/qemu_test/config.py b/tests/functional/qemu_test/config.py
index 6d4c9c3ce1..0192027233 100644
--- a/tests/functional/qemu_test/config.py
+++ b/tests/functional/qemu_test/config.py
@@ -21,7 +21,7 @@ def _source_dir():
return Path(__file__).parent.parent.parent.parent
def _build_dir():
- root = os.getenv('QEMU_BUILD_ROOT')
+ root = os.getenv('MESON_BUILD_ROOT')
if root is not None:
return Path(root)
# Makefile.mtest only exists in build dir, so if it is available, use CWD
@@ -32,7 +32,7 @@ def _build_dir():
if os.path.exists(root):
return Path(root)
- raise Exception("Cannot identify build dir, set QEMU_BUILD_ROOT")
+ raise Exception("Cannot identify build dir, set MESON_BUILD_ROOT")
BUILD_DIR = _build_dir()
--
2.53.0
On 09/03/2026 14.36, Daniel P. Berrangé wrote:
> When running functional tests directly there are some heuristics
> to figure out where the build directory lives, along with the
> possibility to override the logic by setting the QEMU_BUILD_DIR
> env variable. This env var is set as part of the test env when
> run via Meson but not when run directly.
>
> A particular flaw with the currently logic is that it silently
> uses the wrong location when the build directory is a sub-dir
> under "./build", which is a common usage scenario for some devs.
>
> With the recent introduction of the 'run' script, we now have
> the MESON_BUILD_DIR env variable set unconditionally, so we
s/MESON_BUILD_DIR/MESON_BUILD_ROOT/
> can rely on that from the functional tests to get the correct
> location in all scenarios.
That's a good idea!
> Reported-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> tests/functional/meson.build | 2 +-
> tests/functional/qemu_test/config.py | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> index b979cff2b9..d34aefa8b0 100644
> --- a/tests/functional/meson.build
> +++ b/tests/functional/meson.build
> @@ -74,7 +74,7 @@ foreach speed : ['quick', 'thorough']
> test_deps += [qemu_img]
> endif
> test_env.set('QEMU_TEST_QEMU_BINARY', test_emulator.full_path())
> - test_env.set('QEMU_BUILD_ROOT', meson.project_build_root())
> + test_env.set('MESON_BUILD_ROOT', meson.project_build_root())
I think you could even completely remove this line now completely - if I've
got that right, meson also sets this environment variable for tests
automatically.
Thomas
> test_env.set('PYTHONPATH', meson.project_source_root() / 'python:' +
> meson.current_source_dir())
>
> diff --git a/tests/functional/qemu_test/config.py b/tests/functional/qemu_test/config.py
> index 6d4c9c3ce1..0192027233 100644
> --- a/tests/functional/qemu_test/config.py
> +++ b/tests/functional/qemu_test/config.py
> @@ -21,7 +21,7 @@ def _source_dir():
> return Path(__file__).parent.parent.parent.parent
>
> def _build_dir():
> - root = os.getenv('QEMU_BUILD_ROOT')
> + root = os.getenv('MESON_BUILD_ROOT')
> if root is not None:
> return Path(root)
> # Makefile.mtest only exists in build dir, so if it is available, use CWD
> @@ -32,7 +32,7 @@ def _build_dir():
> if os.path.exists(root):
> return Path(root)
>
> - raise Exception("Cannot identify build dir, set QEMU_BUILD_ROOT")
> + raise Exception("Cannot identify build dir, set MESON_BUILD_ROOT")
>
> BUILD_DIR = _build_dir()
>
On Mon, Mar 09, 2026 at 06:46:28PM +0100, Thomas Huth wrote:
> On 09/03/2026 14.36, Daniel P. Berrangé wrote:
> > When running functional tests directly there are some heuristics
> > to figure out where the build directory lives, along with the
> > possibility to override the logic by setting the QEMU_BUILD_DIR
> > env variable. This env var is set as part of the test env when
> > run via Meson but not when run directly.
> >
> > A particular flaw with the currently logic is that it silently
> > uses the wrong location when the build directory is a sub-dir
> > under "./build", which is a common usage scenario for some devs.
> >
> > With the recent introduction of the 'run' script, we now have
> > the MESON_BUILD_DIR env variable set unconditionally, so we
>
> s/MESON_BUILD_DIR/MESON_BUILD_ROOT/
>
> > can rely on that from the functional tests to get the correct
> > location in all scenarios.
>
> That's a good idea!
>
> > Reported-by: Peter Maydell <peter.maydell@linaro.org>
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> > tests/functional/meson.build | 2 +-
> > tests/functional/qemu_test/config.py | 4 ++--
> > 2 files changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> > index b979cff2b9..d34aefa8b0 100644
> > --- a/tests/functional/meson.build
> > +++ b/tests/functional/meson.build
> > @@ -74,7 +74,7 @@ foreach speed : ['quick', 'thorough']
> > test_deps += [qemu_img]
> > endif
> > test_env.set('QEMU_TEST_QEMU_BINARY', test_emulator.full_path())
> > - test_env.set('QEMU_BUILD_ROOT', meson.project_build_root())
> > + test_env.set('MESON_BUILD_ROOT', meson.project_build_root())
>
> I think you could even completely remove this line now completely - if I've
> got that right, meson also sets this environment variable for tests
> automatically.
No, meson does not set MESON_BUILD_ROOT by default - that's something
we have to do ourselves. For the 'run' script we define it in the
'devenv' environment, but for tests we need to define it here.
With regards,
Daniel
--
|: https://berrange.com ~~ https://hachyderm.io/@berrange :|
|: https://libvirt.org ~~ https://entangle-photo.org :|
|: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|
© 2016 - 2026 Red Hat, Inc.