Skip to content

Commit

Permalink
Compile-time warning when git is missing (ajeetdsouza#187)
Browse files Browse the repository at this point in the history
  • Loading branch information
ajeetdsouza authored Apr 20, 2021
1 parent 5cb091d commit 7d9ca0d
Showing 1 changed file with 44 additions and 10 deletions.
54 changes: 44 additions & 10 deletions build.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,50 @@
use std::env;
use std::process::Command;

fn main() {
let git_describe = Command::new("git")
.args(&["describe", "--tags", "--broken"])
.output()
.ok()
.and_then(|proc| String::from_utf8(proc.stdout).ok());
macro_rules! warn {
($fmt:tt) => ({
::std::println!(::std::concat!("cargo:warning=", $fmt));
});
($fmt:tt, $($arg:tt)*) => ({
::std::println!(::std::concat!("cargo:warning=", $fmt), $($arg)*);
});
}

let version_info = match git_describe {
Some(description) if !description.is_empty() => description,
_ => format!("v{}", env!("CARGO_PKG_VERSION")),
fn git_version() -> Option<String> {
let mut git = Command::new("git");
git.args(&["describe", "--tags", "--broken"]);

let output = match git.output() {
Err(e) => {
warn!("when retrieving version: git failed to start: {}", e);
return None;
}
Ok(output) if !output.status.success() => {
warn!(
"when retrieving version: git exited with code: {:?}",
output.status.code()
);
return None;
}
Ok(output) => output,
};

println!("cargo:rustc-env=ZOXIDE_VERSION={}", version_info);
match String::from_utf8(output.stdout) {
Ok(version) => Some(version),
Err(e) => {
warn!("when retrieving version: git returned invalid utf-8: {}", e);
None
}
}
}

fn crate_version() -> String {
warn!("falling back to crate version");
// unwrap is safe here, since Cargo will always supply this variable.
format!("v{}", env::var("CARGO_PKG_VERSION").unwrap())
}

fn main() {
let version = git_version().unwrap_or_else(crate_version);
println!("cargo:rustc-env=ZOXIDE_VERSION={}", version);
}

0 comments on commit 7d9ca0d

Please sign in to comment.