fn main() { // Bundle the gettext `.po` translations under `lang/` so the UI's `@tr(...)` // strings can switch language at runtime via slint::select_bundled_translation. // Source language is Chinese (the msgids); `lang//LC_MESSAGES/meatshell.po` // provides other locales. No per-component context, so msgids are the raw // Chinese strings. println!("cargo:rerun-if-changed=lang"); slint_build::compile_with_config( "ui/app.slint", slint_build::CompilerConfiguration::new() .with_style("fluent".into()) .with_bundled_translations("lang") .with_default_translation_context(slint_build::DefaultTranslationContext::None), ) .expect("Slint build failed"); // Embed the application icon into the Windows executable so it shows up in // Explorer, the taskbar and shortcuts. Build scripts run on the host, so a // Linux -> Windows cross build must check the target OS via Cargo env vars // instead of `#[cfg(windows)]`. println!("cargo:rerun-if-env-changed=CARGO_CFG_TARGET_OS"); if std::env::var("CARGO_CFG_TARGET_OS").as_deref() == Ok("windows") { println!("cargo:rerun-if-changed=assets/meatshell.ico"); let mut res = winresource::WindowsResource::new(); res.set_icon("assets/meatshell.ico"); if let Err(e) = res.compile() { println!("cargo:warning=failed to embed Windows icon: {e}"); } } }