fn main() {
#[cfg(target_os = "windows")]
{
sync_tauri_version();
tauri_build::build();
}
}
#[cfg(target_os = "windows")]
fn sync_tauri_version() {
use std::fs;
use std::path::PathBuf;
let manifest_dir = PathBuf::from(
std::env::var("CARGO_MANIFEST_DIR")
.expect("CARGO_MANIFEST_DIR not set — cargo invokes build scripts with it"),
);
let conf_path = manifest_dir.join("tauri.conf.json");
let cargo_version = std::env::var("CARGO_PKG_VERSION")
.expect("CARGO_PKG_VERSION not set — cargo invokes build scripts with it");
println!("cargo:rerun-if-changed=tauri.conf.json");
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
let original = fs::read_to_string(&conf_path)
.unwrap_or_else(|e| panic!("read {}: {e}", conf_path.display()));
const PATTERN: &str = "\"version\": \"";
let Some(start_idx) = original.find(PATTERN) else {
panic!(
"could not find {PATTERN:?} field in {} — has the file been hand-edited into a shape build.rs can't parse?",
conf_path.display()
);
};
let val_start = start_idx + PATTERN.len();
let Some(end_offset) = original[val_start..].find('"') else {
panic!(
"malformed \"version\" field in {} (unterminated string)",
conf_path.display()
);
};
let val_end = val_start + end_offset;
let current_version = &original[val_start..val_end];
if current_version == cargo_version {
return; }
let mut updated = String::with_capacity(original.len() + cargo_version.len());
updated.push_str(&original[..val_start]);
updated.push_str(&cargo_version);
updated.push_str(&original[val_end..]);
fs::write(&conf_path, updated).unwrap_or_else(|e| panic!("write {}: {e}", conf_path.display()));
println!(
"cargo:warning=tauri.conf.json version synced: {current_version:?} -> {cargo_version} (was drifting; #260)"
);
}