]> git.lizzy.rs Git - rust.git/commitdiff
Use autocfg to determine rust version
authorkjeremy <kjeremy@gmail.com>
Wed, 13 Nov 2019 16:19:07 +0000 (11:19 -0500)
committerkjeremy <kjeremy@gmail.com>
Wed, 13 Nov 2019 16:19:07 +0000 (11:19 -0500)
Cargo.lock
xtask/Cargo.toml
xtask/src/main.rs

index 3fa6e931ccf69193df9dc019e61ffbe44a6730a7..97452951cfc25d57ff394c82e84a13ae2c5831bc 100644 (file)
@@ -1823,6 +1823,7 @@ dependencies = [
 name = "xtask"
 version = "0.1.0"
 dependencies = [
+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "pico-args 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
index 023f6a859fd6030a2157e738f444d99e447d8ce8..72b39c3b48f02da26191736fba126c48953951f1 100644 (file)
@@ -6,6 +6,7 @@ authors = ["rust-analyzer developers"]
 publish = false
 
 [dependencies]
+autocfg = "0.1"
 walkdir = "2.1.3"
 pico-args = "0.3.0"
 quote = "1.0.2"
index c46eaa407ab15bc0e6730e068b2904c08fd39351..576ba003a7bf6dcb97ed1f6a149530fd2713e0ec 100644 (file)
@@ -9,17 +9,18 @@
 //! `.cargo/config`.
 mod help;
 
+use autocfg;
 use core::fmt::Write;
 use core::str;
 use pico_args::Arguments;
 use std::{env, path::PathBuf};
 use xtask::{
     codegen::{self, Mode},
-    install_format_hook, run, run_clippy, run_fuzzer, run_rustfmt, run_with_output, Cmd, Result,
+    install_format_hook, run, run_clippy, run_fuzzer, run_rustfmt, Cmd, Result,
 };
 
 // Latest stable, feel free to send a PR if this lags behind.
-const REQUIRED_RUST_VERSION: u32 = 39;
+const REQUIRED_RUST_VERSION: (usize, usize) = (1, 39);
 
 struct InstallOpt {
     client: Option<ClientOpt>,
@@ -226,20 +227,14 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> {
 }
 
 fn install_server(opts: ServerOpt) -> Result<()> {
-    let mut old_rust = false;
-    if let Ok(output) = run_with_output("cargo --version", ".") {
-        if let Ok(stdout) = String::from_utf8(output.stdout) {
-            println!("{}", stdout);
-            if !check_version(&stdout, REQUIRED_RUST_VERSION) {
-                old_rust = true;
-            }
-        }
-    }
+    let ac = autocfg::AutoCfg::with_dir("target")?;
+
+    let old_rust = !ac.probe_rustc_version(REQUIRED_RUST_VERSION.0, REQUIRED_RUST_VERSION.1);
 
     if old_rust {
         eprintln!(
-            "\nWARNING: at least rust 1.{}.0 is required to compile rust-analyzer\n",
-            REQUIRED_RUST_VERSION
+            "\nWARNING: at least rust {}.{}.0 is required to compile rust-analyzer\n",
+            REQUIRED_RUST_VERSION.0, REQUIRED_RUST_VERSION.1
         )
     }
 
@@ -251,20 +246,10 @@ fn install_server(opts: ServerOpt) -> Result<()> {
 
     if res.is_err() && old_rust {
         eprintln!(
-            "\nWARNING: at least rust 1.{}.0 is required to compile rust-analyzer\n",
-            REQUIRED_RUST_VERSION
+            "\nWARNING: at least rust {}.{}.0 is required to compile rust-analyzer\n",
+            REQUIRED_RUST_VERSION.0, REQUIRED_RUST_VERSION.1
         )
     }
 
     res
 }
-
-fn check_version(version_output: &str, min_minor_version: u32) -> bool {
-    // Parse second the number out of
-    //      cargo 1.39.0-beta (1c6ec66d5 2019-09-30)
-    let minor: Option<u32> = version_output.split('.').nth(1).and_then(|it| it.parse().ok());
-    match minor {
-        None => true,
-        Some(minor) => minor >= min_minor_version,
-    }
-}