#![allow(clippy::expect_used, clippy::unwrap_used, clippy::panic)]
use std::env;
use std::fs;
use std::path::PathBuf;
fn main() {
let manifest_dir = PathBuf::from(
env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR must be set during build"),
);
let workspace_root = manifest_dir
.parent()
.and_then(|p| p.parent())
.expect("Failed to find workspace root (expected two levels up)");
let workspace_toml = workspace_root.join("Cargo.toml");
if workspace_toml.exists() {
println!("cargo:rerun-if-changed={}", workspace_toml.display());
}
let content = match fs::read_to_string(&workspace_toml) {
Ok(content) => content,
Err(_) => {
println!("cargo:rustc-env=ICED_VERSION=0.14");
println!("cargo:rustc-env=SERDE_VERSION=1.0");
println!("cargo:rustc-env=SERDE_JSON_VERSION=1.0");
return;
}
};
for line in content.lines() {
let line = line.trim();
if let Some(version) = extract_version(line, "iced") {
println!("cargo:rustc-env=ICED_VERSION={}", version);
}
if let Some(version) = extract_version(line, "serde") {
println!("cargo:rustc-env=SERDE_VERSION={}", version);
}
if let Some(version) = extract_version(line, "serde_json") {
println!("cargo:rustc-env=SERDE_JSON_VERSION={}", version);
}
}
}
fn extract_version(line: &str, dep_name: &str) -> Option<String> {
if !line.starts_with(dep_name) {
return None;
}
if let Some(version_start) = line.find("version = \"") {
let after_version = &line[version_start + 11..]; if let Some(quote_pos) = after_version.find('"') {
return Some(after_version[..quote_pos].to_string());
}
}
if let Some(eq_pos) = line.find('=') {
let after_eq = line[eq_pos + 1..].trim();
if after_eq.starts_with('"') && after_eq.ends_with('"') {
return Some(after_eq[1..after_eq.len() - 1].to_string());
}
}
None
}