From d06d53b00d19c753d82dc4aa907de521fb725874 Mon Sep 17 00:00:00 2001 From: whitequark Date: Sat, 15 Jul 2017 03:16:21 +0000 Subject: [PATCH] firmware: don't bail out if building not from a git checkout (#783). --- artiq/firmware/libbuild_artiq/lib.rs | 64 +++++++++++++++------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/artiq/firmware/libbuild_artiq/lib.rs b/artiq/firmware/libbuild_artiq/lib.rs index 1ce45d4cd..278d82a23 100644 --- a/artiq/firmware/libbuild_artiq/lib.rs +++ b/artiq/firmware/libbuild_artiq/lib.rs @@ -3,44 +3,50 @@ extern crate walkdir; use std::env; use std::fs::File; use std::io::{Write, BufRead, BufReader}; -use std::path::Path; +use std::path::{Path, PathBuf}; use std::process::Command; use walkdir::WalkDir; pub fn git_describe() { - let id = - Command::new("git") - .arg("describe") - .arg("--tags") - .arg("--dirty") - .arg("--always") - .arg("--long") - .arg("--abbrev=8") - .output() - .ok() - .and_then(|o| String::from_utf8(o.stdout).ok()) - .map(|mut s| { - let len = s.trim_right().len(); - s.truncate(len); - s - }) - .unwrap(); - let id = id.split("-").collect::>(); - let id = format!("{}+{}.{}", id[0], id[1], id[2]); + let git_dir = Path::new("../../../.git"); - let out_dir = env::var("OUT_DIR").unwrap(); - let dest_path = Path::new(&out_dir).join("git-describe"); - let mut f = File::create(&dest_path).unwrap(); - f.write(id.as_bytes()).unwrap(); - - println!("cargo:rust-cfg=git_describe={:?}", id); - - println!("cargo:rerun-if-changed=../../../.git/HEAD"); - for entry in WalkDir::new("../../../.git/refs") { + println!("cargo:rerun-if-changed={}", git_dir.join("HEAD").display()); + for entry in WalkDir::new(git_dir.join("refs")) { let entry = entry.unwrap(); println!("cargo:rerun-if-changed={}", entry.path().display()); } + + let version; + if git_dir.exists() { + let git_describe = + Command::new("git") + .arg("describe") + .arg("--tags") + .arg("--dirty") + .arg("--always") + .arg("--long") + .arg("--abbrev=8") + .output() + .ok() + .and_then(|o| String::from_utf8(o.stdout).ok()) + .map(|mut s| { + let len = s.trim_right().len(); + s.truncate(len); + s + }) + .unwrap(); + let parts = git_describe.split("-").collect::>(); + version = format!("{}+{}.{}", parts[0], parts[1], parts[2]); + } else { + version = "unknown".to_owned(); + } + + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + let mut f = File::create(out_dir.join("git-describe")).unwrap(); + write!(f, "{}", version).unwrap(); + + println!("cargo:rust-cfg=git_describe={:?}", version); } pub fn misoc_cfg() {