mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 15:25:46 +00:00
89140523dc
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.
20 lines
1.1 KiB
Rust
20 lines
1.1 KiB
Rust
fn main() {
|
|
// Windows/MSVC test binaries only: bind to Common-Controls v6.
|
|
//
|
|
// The `tauri` dev-dependency pulls the wry/tao windowing runtime into this
|
|
// crate's *test* executables, which statically import `TaskDialogIndirect`
|
|
// from comctl32. That symbol lives only in Common-Controls v6 (WinSxS); the
|
|
// bare System32 comctl32.dll is v5.82 and does not export 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 its
|
|
// embedded manifest — mirror that here, scoped to test targets only (never
|
|
// the app, the rlib, or 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='*'"
|
|
);
|
|
}
|
|
}
|