From a094ed23a9e7930245bcc5dffcd9eeebfec0dca3 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:40:59 +0100 Subject: [PATCH] Fail builds when required Windows resource embedding fails (#427) The app build scripts stop the build when required Windows resources fail to embed (cargo::error instead of the ignored cargo:error). Fixes #264. --- apps/craft-anything-cli/build.rs | 2 +- .../craft-anything-cli/tests/build_scripts.rs | 19 +++++++++++++++++++ apps/craft-anything/build.rs | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 apps/craft-anything-cli/tests/build_scripts.rs diff --git a/apps/craft-anything-cli/build.rs b/apps/craft-anything-cli/build.rs index 67d42916..613f617e 100644 --- a/apps/craft-anything-cli/build.rs +++ b/apps/craft-anything-cli/build.rs @@ -22,7 +22,7 @@ fn main() { res.set_manifest(MANIFEST).set("OriginalFilename", "craft-anything-cli.exe").set("InternalName", "craft-anything-cli"); if let Err(e) = res.compile() { if std::env::var_os("CRAFT_ANYTHING_REQUIRE_WINRES").is_some() { - println!("cargo:error=embedding Windows resources failed: {e}"); + println!("cargo::error=embedding Windows resources failed: {e}"); return; } println!("cargo:warning=craft-anything-cli.exe built without its DPI-aware manifest: {e}"); diff --git a/apps/craft-anything-cli/tests/build_scripts.rs b/apps/craft-anything-cli/tests/build_scripts.rs new file mode 100644 index 00000000..b202b7eb --- /dev/null +++ b/apps/craft-anything-cli/tests/build_scripts.rs @@ -0,0 +1,19 @@ +//! The app build scripts must fail the build (Cargo's `cargo::error` instruction) when Windows +//! resources are required. The single-colon `cargo:error=` form is ignored by Cargo as metadata. + +use std::path::Path; + +fn read(rel: &str) -> String { + let path = Path::new(env!("CARGO_MANIFEST_DIR")).join(rel); + std::fs::read_to_string(&path).unwrap_or_default() +} + +#[test] +fn required_windows_resource_failure_uses_cargo_error_directive() { + for rel in ["build.rs", "../craft-anything/build.rs"] { + let src = read(rel); + assert!(!src.is_empty(), "{rel} should be readable"); + assert!(!src.contains("cargo:error="), "{rel} emits the ignored single-colon error directive"); + assert!(src.contains("cargo::error="), "{rel} must emit cargo::error= when resources are required"); + } +} diff --git a/apps/craft-anything/build.rs b/apps/craft-anything/build.rs index de78f170..a289e2ce 100644 --- a/apps/craft-anything/build.rs +++ b/apps/craft-anything/build.rs @@ -20,7 +20,7 @@ fn main() { .set("InternalName", "craft-anything"); if let Err(e) = res.compile() { if std::env::var_os("CRAFT_ANYTHING_REQUIRE_WINRES").is_some() { - println!("cargo:error=embedding Windows resources failed: {e}"); + println!("cargo::error=embedding Windows resources failed: {e}"); return; } println!("cargo:warning=craft-anything.exe built without icon/version resources: {e}");