build.rs
1 use std::process::Command; 2 3 type Result<T = (), E = Box<dyn std::error::Error>> = ::std::result::Result<T, E>; 4 5 fn main() -> Result { 6 let mut version = version()?; 7 8 if std::env::var("PROFILE").unwrap() == "debug" { 9 version.push_str("-debug"); 10 } 11 12 let features: Vec<_> = std::env::vars() 13 .filter_map(|(key, _)| key.strip_prefix("CARGO_FEATURE_").map(str::to_lowercase)) 14 .collect(); 15 16 println!("cargo::rustc-env=TELEGHOSTS_VERSION={version}"); 17 println!("cargo::rustc-env=TELEGHOSTS_FEATURES={features:?}"); 18 19 Ok(()) 20 } 21 22 fn version() -> Result<String> { 23 let output = Command::new("git") 24 .arg("describe") 25 .arg("--always") 26 .arg("--broken") 27 .arg("--dirty") 28 .output()?; 29 30 if output.status.success() { 31 let stdout = String::from_utf8(output.stdout)?; 32 Ok(stdout.trim().to_owned()) 33 } else { 34 let stderr = String::from_utf8(output.stderr).unwrap_or_default(); 35 Err(format!( 36 "Failed to exec `git describe --always --broken --dirty`: {}\n{stderr}", 37 output.status 38 ) 39 .into()) 40 } 41 }