#![forbid(unsafe_code)]
use std::path::Path;
fn main() {
let manifest =
Path::new(env!("CARGO_MANIFEST_DIR")).join("../../packaging/windows/odox.manifest");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed={}", manifest.display());
let binary = std::env::var("CARGO_PKG_NAME").unwrap_or_default();
let icon =
Path::new(env!("CARGO_MANIFEST_DIR")).join(format!("../../packaging/windows/{binary}.ico"));
let out = Path::new(&std::env::var("OUT_DIR").expect("cargo sets OUT_DIR")).join("window.ico");
println!("cargo:rerun-if-changed={}", icon.display());
let staged = std::fs::read(&icon).unwrap_or_default();
std::fs::write(&out, staged).expect("OUT_DIR is writable");
let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
let env = std::env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
if os != "windows" || env != "msvc" {
return;
}
if !manifest.exists() {
println!(
"cargo:warning=no {} — this build declares no DPI awareness",
manifest.display()
);
return;
}
for arg in [
"/MANIFEST:EMBED".to_owned(),
format!("/MANIFESTINPUT:{}", manifest.display()),
] {
println!("cargo:rustc-link-arg-bin={binary}={arg}");
}
}