diff --git a/src/cargo/core/compiler/custom_build.rs b/src/cargo/core/compiler/custom_build.rs index 426d8f128c2..829177f5fbb 100644 --- a/src/cargo/core/compiler/custom_build.rs +++ b/src/cargo/core/compiler/custom_build.rs @@ -724,10 +724,9 @@ impl BuildOutput { pkg_descr: &str, msrv: &Option, ) -> CargoResult<()> { - let new_syntax_added_in = &RustVersion::from_str("1.77.0")?; - if let Some(msrv) = msrv { - if msrv < new_syntax_added_in { + let new_syntax_added_in = RustVersion::from_str("1.77.0")?; + if !new_syntax_added_in.is_compatible_with(msrv.as_partial()) { bail!( "the `cargo::` syntax for build script output instructions was added in \ Rust 1.77.0, but the minimum supported Rust version of `{pkg_descr}` is {msrv}.\n\ diff --git a/tests/testsuite/build_script.rs b/tests/testsuite/build_script.rs index 06fcde62037..d8fed645aec 100644 --- a/tests/testsuite/build_script.rs +++ b/tests/testsuite/build_script.rs @@ -5502,6 +5502,39 @@ for more information about build script outputs. .run(); } +#[cargo_test] +fn test_new_syntax_with_compatible_partial_msrv() { + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + edition = "2015" + build = "build.rs" + rust-version = "1.77" + "#, + ) + .file("src/lib.rs", "") + .file( + "build.rs", + r#" + fn main() { + println!("cargo::metadata=foo=bar"); + } + "#, + ) + .build(); + + p.cargo("check") + .with_stderr_contains( + "\ +[COMPILING] foo [..] +", + ) + .run(); +} + #[cargo_test] fn test_old_syntax_with_old_msrv() { let p = project()