fn main() {
println!("cargo:rerun-if-changed=src/app");
println!("cargo:rerun-if-changed=Trunk.toml");
println!("cargo:rerun-if-changed=Cargo.toml");
let is_server = std::env::var("CARGO_FEATURE_SERVER").is_ok();
let is_wasm = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default() == "wasm32";
let skip_frontend = std::env::var("EXPMAN_SKIP_FRONTEND_BUILD").is_ok();
if is_server && !is_wasm && !skip_frontend {
eprintln!("expman: Building dashboard frontend with trunk...");
let status = std::process::Command::new("trunk")
.env("CARGO_TARGET_DIR", "target/wasm_build")
.env_remove("MAKEFLAGS")
.env_remove("CARGO_MAKEFLAGS")
.args(["build", "--release"])
.stderr(std::process::Stdio::inherit())
.status();
if matches!(status, Ok(s) if s.success()) {
println!("cargo:warning=Dashboard frontend built successfully.");
} else {
if std::path::Path::new("dist/index.html").exists() {
println!("cargo:warning=Trunk build failed, but using existing dist/ directory.");
} else {
eprintln!("Error: Dashboard frontend build failed and no existing 'dist/index.html' found.");
eprintln!("The 'server' feature requires the frontend to be built.");
std::process::exit(1);
}
}
} else if is_server && !is_wasm && skip_frontend {
if !std::path::Path::new("dist/index.html").exists() {
eprintln!(
"Error: 'EXPMAN_SKIP_FRONTEND_BUILD' is set but 'dist/index.html' is missing."
);
std::process::exit(1);
}
}
}