diff --git a/MAINTAINERS b/MAINTAINERS index a03898ccb6..81f48f0709 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4479,6 +4479,7 @@ R: Philippe Mathieu-Daudé S: Maintained F: meson.build F: meson_options.txt +F: run.in F: scripts/check_sparse.py F: scripts/symlink-install-tree.py diff --git a/docs/devel/build-system.rst b/docs/devel/build-system.rst index 6204aa6a72..b9797a374c 100644 --- a/docs/devel/build-system.rst +++ b/docs/devel/build-system.rst @@ -515,6 +515,18 @@ generates ``Makefile`` from ``Makefile.in``. Built by configure: +``run`` + Used to run commands / scripts from the git checkout. Sets ``$PATH`` + to point to locally built binaries, and activates the python venv + before running the requested command. Pass the command to run as + args, for example:: + + $ ./build/run ./script/qmp/qmp-shell-wrap qemu-system-x86_64 + + will use the ``python3`` binary and site-packages from the local + venv to run ``qmp-shell-wrap`` and spawn the QEMU emulator from + the build directory. + ``config-host.mak`` When configure has determined the characteristics of the build host it will write the paths to various tools to this file, for use in ``Makefile`` diff --git a/docs/devel/testing/functional.rst b/docs/devel/testing/functional.rst index fdeaebaadc..1978f96eba 100644 --- a/docs/devel/testing/functional.rst +++ b/docs/devel/testing/functional.rst @@ -53,15 +53,14 @@ the following line will only run the tests for the x86_64 target: make check-functional-x86_64 To run a single test file without the meson test runner, you can also -execute the file directly by specifying two environment variables first, -the PYTHONPATH that has to include the python folder and the tests/functional -folder of the source tree, and QEMU_TEST_QEMU_BINARY that has to point -to the QEMU binary that should be used for the test. The current working -directory should be your build folder. For example:: +execute the file directly by specifying the name of the emulator target +binary as an env variable. - $ export PYTHONPATH=../python:../tests/functional - $ export QEMU_TEST_QEMU_BINARY=$PWD/qemu-system-x86_64 - $ pyvenv/bin/python3 ../tests/functional/test_file.py +Assuming the current working directory is the top level source checkout +and the build directory is './build':: + + $ export QEMU_TEST_QEMU_BINARY=qemu-system-x86_64 + $ ./build/run tests/functional/x86_64/test_virtio_version.py The test framework will automatically purge any scratch files created during the tests. If needing to debug a failed test, it is possible to keep these diff --git a/meson.build b/meson.build index 3790cf15f5..14b1160c15 100644 --- a/meson.build +++ b/meson.build @@ -4,8 +4,6 @@ project('qemu', ['c'], meson_version: '>=1.5.0', 'rust_std=2021', 'build.rust_std=2021'], version: files('VERSION')) -meson.add_devenv({ 'MESON_BUILD_ROOT' : meson.project_build_root() }) - add_test_setup('quick', exclude_suites: ['slow', 'thorough'], is_default: true, env: ['RUST_BACKTRACE=1']) add_test_setup('slow', exclude_suites: ['thorough'], @@ -3501,6 +3499,20 @@ endif config_host_h = configure_file(output: 'config-host.h', configuration: config_host_data) genh += config_host_h +devenv = environment() +devenv.set('MESON_BUILD_ROOT', meson.project_build_root()) +devenv.set('VIRTUAL_ENV', meson.project_build_root() / 'pyvenv') +devenv.prepend('PATH', meson.project_build_root() / 'pyvenv'/ 'bin') +devenv.prepend('PYTHONPATH', meson.current_source_dir() / 'tests' / 'functional') +devenv.prepend('PYTHONPATH', meson.current_source_dir() / 'python') +meson.add_devenv(devenv) + +run_config = configuration_data({'build_dir': meson.current_build_dir()}) +run = configure_file(input: 'run.in', + output: 'run', + configuration: run_config) +run_command('chmod', 'a+x', meson.current_build_dir() / 'run', check: true) + hxtool = find_program('scripts/hxtool') shaderinclude = find_program('scripts/shaderinclude.py') qapi_gen = find_program('scripts/qapi-gen.py') diff --git a/run.in b/run.in new file mode 100644 index 0000000000..1bb12272a7 --- /dev/null +++ b/run.in @@ -0,0 +1,4 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0-or-later + +exec @build_dir@/pyvenv/bin/meson devenv -C @build_dir@ -w "$PWD" "$@"