diff --git a/Cargo.toml b/Cargo.toml index 470d2dd7096d..3a767a97c713 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clippy" -version = "0.0.65" +version = "0.0.66" authors = [ "Manish Goregaokar ", "Andre Bogus ", diff --git a/src/lib.rs b/src/lib.rs index 2d05419673da..205f6bd079d8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,6 +17,7 @@ use rustc::session::{config, Session}; use rustc::session::config::{Input, ErrorOutputType}; use syntax::diagnostics; use std::path::PathBuf; +use std::process::Command; struct ClippyCompilerCalls(RustcDefaultCalls); @@ -109,9 +110,14 @@ pub fn main() { let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN")); let sys_root = match (home, toolchain) { (Some(home), Some(toolchain)) => format!("{}/toolchains/{}", home, toolchain), - _ => option_env!("SYSROOT") - .expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust") - .to_owned(), + _ => option_env!("SYSROOT").map(|s| s.to_owned()) + .or(Command::new("rustc").arg("--print") + .arg("sysroot") + .output().ok() + .and_then(|out| String::from_utf8(out.stdout).ok()) + .map(|s| s.trim().to_owned()) + ) + .expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust"), }; if let Some("clippy") = std::env::args().nth(1).as_ref().map(AsRef::as_ref) {