Bail out an error when using cargo:: in custom build script

Signed-off-by: hi-rustin <rustin.liu@gmail.com>
This commit is contained in:
hi-rustin 2023-07-07 09:33:41 +08:00
parent 45782b6b8a
commit 4bdeb53cb5
2 changed files with 40 additions and 1 deletions

View file

@ -690,7 +690,17 @@ impl BuildOutput {
continue;
}
let data = match iter.next() {
Some(val) => val,
Some(val) => {
if val.starts_with(":") {
// Line started with `cargo::`.
bail!("unsupported output in {}: `{}`\n\
Found a `cargo::key=value` build directive which is reserved for future use.\n\
Either change the directive to `cargo:key=value` syntax (note the single `:`) or upgrade your version of Rust.\n\
See https://doc.rust-lang.org/cargo/reference/build-scripts.html#outputs-of-the-build-script \
for more information about build script outputs.", whence, line);
}
val
}
None => continue,
};

View file

@ -5140,6 +5140,35 @@ for more information about build script outputs.
.run();
}
#[cargo_test]
fn wrong_syntax_with_two_colons() {
let p = project()
.file("src/lib.rs", "")
.file(
"build.rs",
r#"
fn main() {
println!("cargo::foo=bar");
}
"#,
)
.build();
p.cargo("build")
.with_status(101)
.with_stderr(
"\
[COMPILING] foo [..]
error: unsupported output in build script of `foo v0.0.1 ([ROOT]/foo)`: `cargo::foo=bar`
Found a `cargo::key=value` build directive which is reserved for future use.
Either change the directive to `cargo:key=value` syntax (note the single `:`) or upgrade your version of Rust.
See https://doc.rust-lang.org/cargo/reference/build-scripts.html#outputs-of-the-build-script \
for more information about build script outputs.
",
)
.run();
}
#[cargo_test]
fn custom_build_closes_stdin() {
// Ensure stdin is closed to prevent deadlock.