From d782e4250388f8d4c5a90a4b7afdf96e6f9e9b04 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 13 Oct 2019 09:03:20 -0700 Subject: [PATCH] Detect compiler minor version in build script --- build.rs | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/build.rs b/build.rs index dcc19c6..7f59c64 100644 --- a/build.rs +++ b/build.rs @@ -1,6 +1,6 @@ use std::env; use std::process::Command; -use std::str; +use std::str::{self, FromStr}; fn main() { let compiler = match rustc_version() { @@ -8,32 +8,28 @@ fn main() { None => return, }; - if compiler.nightly { + if compiler.minor >= 40 && compiler.nightly { println!("cargo:rustc-cfg=backtrace"); } } struct Compiler { + minor: u32, nightly: bool, } fn rustc_version() -> Option { - let rustc = match env::var_os("RUSTC") { - Some(rustc) => rustc, - None => return None, - }; + let rustc = env::var_os("RUSTC")?; + let output = Command::new(rustc).arg("--version").output().ok()?; + let version = str::from_utf8(&output.stdout).ok()?; - let output = match Command::new(rustc).arg("--version").output() { - Ok(output) => output, - Err(_) => return None, - }; + let mut pieces = version.split('.'); + if pieces.next() != Some("rustc 1") { + return None; + } - let version = match str::from_utf8(&output.stdout) { - Ok(version) => version, - Err(_) => return None, - }; - - Some(Compiler { - nightly: version.contains("nightly") || version.contains("dev"), - }) + let next = pieces.next()?; + let minor = u32::from_str(next).ok()?; + let nightly = version.contains("nightly") || version.contains("dev"); + Some(Compiler { minor, nightly }) }