use std::env;
use std::error::Error;
use std::fs::File;
use std::io::prelude::*;
use std::path::PathBuf;
use built;
use vergen_gitcl::{BuildBuilder, Emitter, GitclBuilder};
pub fn build_gen(git: Option<String>) -> Result<(), Box<dyn Error>> {
{
let b = include_bytes!("./build_src/pm_bin.rs");
let p: PathBuf = [env::var("OUT_DIR").unwrap(), "pm_bin.rs".into()]
.iter()
.collect();
let mut f = File::create(p)?;
f.write_all(b)?;
}
Emitter::default()
.add_instructions(&BuildBuilder::all_build()?)?
.add_instructions(
&GitclBuilder::default()
.describe(true, false, None)
.sha(false)
.build()?,
)?
.emit()?;
if let Some(g) = git {
let p: PathBuf = [g.clone(), ".git".into(), "index".into()].iter().collect();
match p.canonicalize() {
Ok(p) => {
println!("cargo:rerun-if-changed={}", p.to_str().unwrap());
}
_ => {
println!("cargo:warning=can not find {}/.git/index", g);
}
}
}
built::write_built_file()?;
Ok(())
}