Files
Psychotoxical 89140523dc chore(build): bind Windows cargo-test binaries to Common-Controls v6 manifest (#1257)
On Windows/MSVC the test executables for `psysonic-analysis`, `psysonic-audio`
and the top `psysonic` crate link the wry/tao windowing runtime (via the tauri
dependency) and statically import `TaskDialogIndirect` from comctl32. That symbol
only exists in Common-Controls v6; System32 comctl32.dll is v5.82 and lacks it,
so an unmanifested test exe aborts at startup with STATUS_ENTRYPOINT_NOT_FOUND
(0xC0000139) before any test runs. The app binary avoids this through the
manifest tauri_build embeds.

Declare the Common-Controls v6 dependency on the test binaries via build-script
link args, gated to windows-msvc. The app binary's manifest is unchanged
(byte-identical: tauri_build already embeds the same dependency, the linker
dedupes). Non-Windows/CI builds are unaffected.
2026-07-07 18:55:41 +02:00

21 lines
1.1 KiB
Rust

fn main() {
// Windows/MSVC test binaries only: bind to Common-Controls v6.
//
// The library test harness (`--lib` unittests) links the wry/tao windowing
// runtime and statically imports `TaskDialogIndirect` from comctl32, which
// exists only in Common-Controls v6 (WinSxS). The real app binary gets that
// manifest from `tauri_build`, but the separate test executable does not, so
// it aborts at startup with STATUS_ENTRYPOINT_NOT_FOUND (0xC0000139). Add the
// dependency to test targets only — never the app binary (which already has a
// manifest via tauri_build) nor non-Windows/CI builds.
let is_windows_msvc = std::env::var("CARGO_CFG_TARGET_OS").as_deref() == Ok("windows")
&& std::env::var("CARGO_CFG_TARGET_ENV").as_deref() == Ok("msvc");
if is_windows_msvc {
println!(
"cargo::rustc-link-arg=/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
);
}
tauri_build::build()
}