/ crates / teleghosts / build.rs
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  }