fn main() { println!("cargo::rerun-if-changed=../web/dist"); #[cfg(feature = "web")] { println!("cargo::warning=searching frontend files in $WORKSPACE_ROOT/web/dist"); let Ok(dist) = std::fs::read_dir(std::path::Path::new("../web/dist")) else { println!("cargo::error=could not find 'web/dist' dir: did you 'trunk build' the frontend crate?"); return; }; let mut found_wasm = false; let mut found_js = false; let mut found_index = false; let mut found_style = false; let mut found_favicon = false; let mut found_icon = false; let mut found_manifest = false; for f in dist.flatten() { if let Ok(ftype) = f.file_type() { if ftype.is_file() { let fname = f.file_name().to_string_lossy().to_string(); if !found_wasm { found_wasm = if_matches_set_env_path("CARGO_UPUB_FRONTEND_WASM", &f, &fname, "upub-web", ".wasm"); } if !found_js { found_js = if_matches_set_env_path("CARGO_UPUB_FRONTEND_JS", &f, &fname, "upub-web", ".js"); } if !found_style { found_style = if_matches_set_env_path("CARGO_UPUB_FRONTEND_STYLE", &f, &fname, "style", ".css"); } if !found_index { found_index = if_matches_set_env_path("CARGO_UPUB_FRONTEND_INDEX", &f, &fname, "index", ".html"); } if !found_favicon { found_favicon = if_matches_set_env_path("CARGO_UPUB_FRONTEND_FAVICON", &f, &fname, "favicon", ".ico") } if !found_icon { found_icon = if_matches_set_env_path("CARGO_UPUB_FRONTEND_PWA_ICON", &f, &fname, "icon", ".png") } if !found_manifest { found_manifest = if_matches_set_env_path("CARGO_UPUB_FRONTEND_PWA_MANIFEST", &f, &fname, "manifest", ".json") } } } } if !found_wasm { println!("cargo::error=could not find wasm payload"); } if !found_js { println!("cargo::error=could not find js bindings"); } if !found_style { println!("cargo::error=could not find style sheet"); } if !found_favicon { println!("cargo::error=could not find favicon image"); } if !found_icon { println!("cargo::error=could not find pwa icon image"); } if !found_manifest { println!("cargo::error=could not find pwa manifest"); } if !found_index { println!("cargo::error=could not find html index"); } } } fn if_matches_set_env_path(var: &str, f: &std::fs::DirEntry, fname: &str, first: &str, last: &str) -> bool { if fname.starts_with(first) && fname.ends_with(last) { match f.path().canonicalize() { Ok(path) => println!("cargo::rustc-env={var}={}", path.to_string_lossy()), Err(e) => println!("cargo::warning=could not canonicalize '{}': {e}", f.path().to_string_lossy()), } true } else { false } }