use cargo_metadata::Metadata;
use std::env;
use std::path::PathBuf;
const SHORT_VERSION: &str = env!("CARGO_PKG_VERSION");
const PACKAGES: [&str; 3] = ["nuts-archive", "nuts-container", "nuts-directory"];
fn cargo_metadata() -> Metadata {
let cargo = env::var("CARGO").unwrap();
let manifest_path: PathBuf = [
env::var("CARGO_MANIFEST_DIR").unwrap(),
"Cargo.toml".to_string(),
]
.iter()
.collect();
println!("CARGO: {}", cargo);
println!("CARGO_MANIFEST_DIR: {}", manifest_path.display());
let mut cmd = cargo_metadata::MetadataCommand::new();
cmd.cargo_path(cargo);
cmd.manifest_path(manifest_path);
cmd.exec().unwrap()
}
fn main() {
let metadata = cargo_metadata();
let packages = metadata
.packages
.iter()
.filter(|pkg| PACKAGES.iter().position(|name| name == &pkg.name).is_some());
let version_str = packages
.map(|pkg| format!("{}: {}", pkg.name, pkg.version))
.collect::<Vec<String>>()
.join(", ");
let short_version = format!("{}", SHORT_VERSION);
let long_version = format!("{} ({})", SHORT_VERSION, version_str);
println!("cargo:rustc-env=NUTS_TOOL_SHORT_VERSION={}", short_version);
println!("cargo:rustc-env=NUTS_TOOL_LONG_VERSION={}", long_version);
}