//! `.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>,
}
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
)
}
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,
- }
-}