auv-cli 0.0.29

AUV core command-line frontend
use std::env;
use std::fs;
use std::path::PathBuf;

fn main() {
  println!("cargo:rerun-if-env-changed=AUV_WINDOWS_HELPER_EXE_PATH");

  let output = PathBuf::from(env::var_os("OUT_DIR").expect("Cargo must provide OUT_DIR")).join("embedded_windows_helper.rs");
  let source = match (env::var_os("CARGO_CFG_TARGET_OS").as_deref(), env::var_os("AUV_WINDOWS_HELPER_EXE_PATH")) {
    (Some(target), Some(path)) if target == "windows" => {
      let path = PathBuf::from(path);
      println!("cargo:rerun-if-changed={}", path.display());
      let payload = PathBuf::from(env::var_os("OUT_DIR").expect("Cargo must provide OUT_DIR")).join("auv-helper.exe");
      fs::copy(&path, &payload).unwrap_or_else(|error| panic!("failed to stage {}: {error}", path.display()));
      "pub(super) const EXECUTABLE: Option<&[u8]> = Some(include_bytes!(concat!(env!(\"OUT_DIR\"), \"/auv-helper.exe\")));\n"
    }
    _ => "pub(super) const EXECUTABLE: Option<&[u8]> = None;\n",
  };

  fs::write(output, source).expect("write embedded Windows helper module");
}