rust: add qemu-api doctests to "meson test"

Doctests are weird.  They are essentially integration tests, but they're
"ran" by executing rustdoc --test, which takes a compiler-ish
command line.  This is supported by Meson 1.8.0.

Because they run the linker and need all the .o files, run them in the
build jobs rather than the test jobs.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2025-04-05 10:33:09 +02:00
parent 53de966c3e
commit f620cadc0c
4 changed files with 16 additions and 9 deletions

View file

@ -76,7 +76,8 @@
fi fi
- section_end buildenv - section_end buildenv
- section_start test "Running tests" - section_start test "Running tests"
- $MAKE NINJA=":" $MAKE_CHECK_ARGS # doctests need all the compilation artifacts
- $MAKE NINJA=":" MTESTARGS="--no-suite doc" $MAKE_CHECK_ARGS
- section_end test - section_end test
.native_test_job_template: .native_test_job_template:

View file

@ -41,7 +41,7 @@ build-system-ubuntu:
IMAGE: ubuntu2204 IMAGE: ubuntu2204
CONFIGURE_ARGS: --enable-docs --enable-rust CONFIGURE_ARGS: --enable-docs --enable-rust
TARGETS: alpha-softmmu microblazeel-softmmu mips64el-softmmu TARGETS: alpha-softmmu microblazeel-softmmu mips64el-softmmu
MAKE_CHECK_ARGS: check-build MAKE_CHECK_ARGS: check-build check-doc
check-system-ubuntu: check-system-ubuntu:
extends: .native_test_job_template extends: .native_test_job_template
@ -115,7 +115,7 @@ build-system-fedora:
CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs --enable-crypto-afalg --enable-rust CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs --enable-crypto-afalg --enable-rust
TARGETS: microblaze-softmmu mips-softmmu TARGETS: microblaze-softmmu mips-softmmu
xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
MAKE_CHECK_ARGS: check-build MAKE_CHECK_ARGS: check-build check-doc
build-system-fedora-rust-nightly: build-system-fedora-rust-nightly:
extends: extends:
@ -127,12 +127,7 @@ build-system-fedora-rust-nightly:
IMAGE: fedora-rust-nightly IMAGE: fedora-rust-nightly
CONFIGURE_ARGS: --disable-docs --enable-rust --enable-strict-rust-lints CONFIGURE_ARGS: --disable-docs --enable-rust --enable-strict-rust-lints
TARGETS: aarch64-softmmu TARGETS: aarch64-softmmu
MAKE_CHECK_ARGS: check-build MAKE_CHECK_ARGS: check-build check-doc
after_script:
- source scripts/ci/gitlab-ci-section
- section_start test "Running Rust doctests"
- cd build
- pyvenv/bin/meson devenv -w ../rust ${CARGO-cargo} test --doc -p qemu_api
allow_failure: true allow_failure: true

View file

@ -66,6 +66,8 @@ be run via ``meson test`` or ``make``::
make check-rust make check-rust
Note that doctests require all ``.o`` files from the build to be available.
Supported tools Supported tools
''''''''''''''' '''''''''''''''

View file

@ -45,6 +45,15 @@ rust.test('rust-qemu-api-tests', _qemu_api_rs,
qemu_api = declare_dependency(link_with: [_qemu_api_rs], qemu_api = declare_dependency(link_with: [_qemu_api_rs],
dependencies: [qemu_api_macros, qom, hwcore, chardev, migration]) dependencies: [qemu_api_macros, qom, hwcore, chardev, migration])
# Doctests are essentially integration tests, so they need the same dependencies.
# Note that running them requires the object files for C code, so place them
# in a separate suite that is run by the "build" CI jobs rather than "check".
rust.doctest('rust-qemu-api-doctests',
_qemu_api_rs,
protocol: 'rust',
dependencies: qemu_api,
suite: ['doc', 'rust'])
test('rust-qemu-api-integration', test('rust-qemu-api-integration',
executable( executable(
'rust-qemu-api-integration', 'rust-qemu-api-integration',