use cargo_metadata::{MetadataCommand};
use std::fs::File;
use std::io::Write;
use std::path::Path;
#[allow(unused_macros)]
macro_rules! p {
($($tokens: tt)*) => {
println!("cargo:warning={}", format!($($tokens)*))
}
}
fn main() {
let metadata = MetadataCommand::new()
.exec()
.expect("Failed to execute cargo metadata");
let out_dir = std::env::var("OUT_DIR")
.expect("OUT_DIR not set by Cargo");
let dest_path = Path::new(&out_dir).join("versions.rs");
let mut file = File::create(dest_path)
.expect("Failed to create versions.rs");
writeln!(file, "// Automatically generated file. Do not edit.\n")
.expect("Failed to write to versions.rs");
writeln!(file, "/// Dependency version information generated via build.rs")
.expect("Failed to write to versions.rs");
writeln!(file, "pub const DEPENDENCIES: &[(&str, &str)] = &[")
.expect("Failed to write to versions.rs");
for package in metadata.packages {
writeln!(file, " (\"{}\", \"{}\"),", package.name, package.version)
.expect("Failed to write to versions.rs");
}
writeln!(file, "];").expect("Failed to write to versions.rs");
println!("cargo:rerun-if-changed=build.rs");
}