From f9796316103ae47edfdf14c08a39ffe0637cccd8 Mon Sep 17 00:00:00 2001 From: Patrick Roy Date: Wed, 1 Oct 2025 14:32:43 +0100 Subject: [PATCH] fix cargo doc CI step Introduce a dummy feature to hack around `cargo doc --all-features` always hitting the compile_error!(...) in vhost/src/lib.rs about incompatible features. This is happening because when documenting vhost-user-backend, cargo does not pass --cfg doc to dependencies, meaning the cfg(not(doc)) attribute that is supposed to eliminate this compile_error!() invokation when building docs does not actually trigger. Hence cargo doc fails. Introduce a custom cfg, which we tell docs.rs to set during documentation build, which disables the compile_error!(). Our CI also sets this flag for the rustdoc step (via an ugly `sed` in the pipeline definition). This cfg is also set by rust-vmm-ci for the cargo doc step. Note that we need both cfg(not(doc)) and cfg(not(RUTSDOC_disable_feature_compat_errors)), because lib.rs gets processed twice, onces by rustc (where the --cfg is passed via RUSTFLAGS), and once by rustdoc itself, where RUSTFLAGS are ignored, and instead the cfg(doc) macro comes into play (but rustdoc is only ran on the crate for which we are actually generating docs, not the dependencies). Signed-off-by: Patrick Roy --- vhost-user-backend/Cargo.toml | 5 ++++- vhost-user-backend/src/lib.rs | 13 +++++++++---- vhost/Cargo.toml | 3 +++ vhost/src/lib.rs | 13 +++++++++---- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/vhost-user-backend/Cargo.toml b/vhost-user-backend/Cargo.toml index df840c0..33ba4b3 100644 --- a/vhost-user-backend/Cargo.toml +++ b/vhost-user-backend/Cargo.toml @@ -29,7 +29,10 @@ vhost = { path = "../vhost", version = "0.14.0", features = ["test-utils", "vhos vm-memory = { workspace = true, features = ["backend-mmap", "backend-atomic"] } tempfile = "3.2.0" +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(RUSTDOC_disable_feature_compat_errors)'] } + [package.metadata.cargo-all-features] skip_feature_sets = [ ["xen", "postcopy"] -] \ No newline at end of file +] diff --git a/vhost-user-backend/src/lib.rs b/vhost-user-backend/src/lib.rs index 7e1db9e..7ade20a 100644 --- a/vhost-user-backend/src/lib.rs +++ b/vhost-user-backend/src/lib.rs @@ -36,10 +36,15 @@ pub use self::vring::{ VringMutex, VringRwLock, VringState, VringStateGuard, VringStateMutGuard, VringT, }; -/// Due to the way `xen` handles memory mappings we can not combine it with -/// `postcopy` feature which relies on persistent memory mappings. Thus we -/// disallow enabling both features at the same time. -#[cfg(all(feature = "postcopy", feature = "xen"))] +// Due to the way `xen` handles memory mappings we can not combine it with +// `postcopy` feature which relies on persistent memory mappings. Thus we +// disallow enabling both features at the same time. +#[cfg(all( + not(RUSTDOC_disable_feature_compat_errors), + not(doc), + feature = "postcopy", + feature = "xen" +))] compile_error!("Both `postcopy` and `xen` features can not be enabled at the same time."); /// An alias for `GuestMemoryAtomic>` to simplify code. diff --git a/vhost/Cargo.toml b/vhost/Cargo.toml index 88a02c3..c372c9e 100644 --- a/vhost/Cargo.toml +++ b/vhost/Cargo.toml @@ -38,6 +38,9 @@ vm-memory = { workspace = true, features=["backend-mmap"] } tempfile = "3.2.0" serial_test = "3.0" +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(RUSTDOC_disable_feature_compat_errors)'] } + [package.metadata.cargo-all-features] skip_feature_sets = [ ["xen", "postcopy"] diff --git a/vhost/src/lib.rs b/vhost/src/lib.rs index 6a2c0e1..1393cf3 100644 --- a/vhost/src/lib.rs +++ b/vhost/src/lib.rs @@ -51,10 +51,15 @@ pub mod vhost_user; #[cfg(feature = "vhost-vsock")] pub mod vsock; -/// Due to the way `xen` handles memory mappings we can not combine it with -/// `postcopy` feature which relies on persistent memory mappings. Thus we -/// disallow enabling both features at the same time. -#[cfg(all(not(doc), feature = "postcopy", feature = "xen"))] +// Due to the way `xen` handles memory mappings we can not combine it with +// `postcopy` feature which relies on persistent memory mappings. Thus we +// disallow enabling both features at the same time. +#[cfg(all( + not(RUSTDOC_disable_feature_compat_errors), + not(doc), + feature = "postcopy", + feature = "xen" +))] compile_error!("Both `postcopy` and `xen` features can not be enabled at the same time."); /// Error codes for vhost operations