use std::{env, fs}; use build_support::catalog_gate::{ CatalogBuildMode, CatalogGateInput, select_catalog_build_mode, validate_production_catalog, }; mod build_support { #[path = "catalog_gate.rs"] pub(crate) mod catalog_gate; } const FIXTURE_DEVELOPMENT_ENV: &str = "LANSPREAD_USE_FIXTURE_CATALOG"; fn main() { println!("cargo:rerun-if-env-changed=TAURI_CONFIG"); println!("cargo:rerun-if-env-changed={FIXTURE_DEVELOPMENT_ENV}"); println!("cargo:rerun-if-changed=tauri.conf.json"); println!("cargo:rerun-if-changed=game.db"); println!("cargo:rerun-if-changed=manifests"); let mode = catalog_build_mode().unwrap_or_else(|error| { panic!("catalog packaging policy failed: {error}"); }); if mode == CatalogBuildMode::Production && let Err(error) = validate_production_catalog("game.db", "manifests") { panic!("production catalog authority gate failed: {error}"); } tauri_build::build(); } fn catalog_build_mode() -> Result> { let base_config = fs::read_to_string("tauri.conf.json")?; let config_override = env::var_os("TAURI_CONFIG") .map(|value| { value .into_string() .map_err(|_| "TAURI_CONFIG is not valid UTF-8".to_owned()) }) .transpose()?; let fixture_development_opt_in = match env::var_os(FIXTURE_DEVELOPMENT_ENV) { None => false, Some(value) if value == "1" => true, Some(_) => { return Err(format!("{FIXTURE_DEVELOPMENT_ENV} must be exactly 1 when set").into()); } }; let cargo_profile = env::var("PROFILE").ok(); let out_dir = env::var_os("OUT_DIR").map(std::path::PathBuf::from); select_catalog_build_mode(CatalogGateInput { base_config: &base_config, config_override: config_override.as_deref(), fixture_development_opt_in, cargo_profile: cargo_profile.as_deref(), out_dir: out_dir.as_deref(), }) .map_err(Into::into) }