summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJyun-Yan You <jyyou.tw@gmail.com>2015-12-08 08:53:19 +0800
committerJyun-Yan You <jyyou.tw@gmail.com>2015-12-08 08:53:19 +0800
commitaab86181074fe13e821dd64c3a7dd467b69e3c3d (patch)
tree55c99937da1879da53cc070430d1929a94ba5a1e
parent852e7a3b095458f39a67474071a627daa1d2dbd1 (diff)
parentcf43c805f14381dafe5d1a46a43b109664977cdf (diff)
Merge pull request #242 from dimbleby/canonicalize-clang
Make sure that we really have found clang
-rw-r--r--src/lib.rs26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 63e1a819..a4da3722 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -263,24 +263,24 @@ fn builder_state()
// Get the first directory in PATH that contains a file named "clang".
fn get_clang_dir() -> Option<path::PathBuf>{
- match env::var_os("PATH") {
- Some(paths) => {
- for p in env::split_paths(&paths) {
- let mut bin_path = p.clone();
- bin_path.push("clang");
- match fs::metadata(bin_path) {
- Ok(m) => {
- if m.is_file() {
- return Some(p);
- }
+ if let Some(paths) = env::var_os("PATH") {
+ for mut path in env::split_paths(&paths) {
+ path.push("clang");
+ if let Ok(real_path) = fs::canonicalize(&path) {
+ if fs::metadata(&real_path).iter().any(|m| m.is_file()) &&
+ real_path
+ .file_name()
+ .and_then(|f| f.to_str())
+ .iter()
+ .any(|&f| f == "clang") {
+ if let Some(dir) = real_path.parent() {
+ return Some(dir.to_path_buf())
}
- _ => (),
}
}
- None
}
- None => None,
}
+ None
}
// Try to find the directory that contains clang's bundled headers. Clang itself does something