diff options
Diffstat (limited to 'xtask/src/main.rs')
-rw-r--r-- | xtask/src/main.rs | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 623058436..c08915aac 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs | |||
@@ -8,9 +8,12 @@ use pico_args::Arguments; | |||
8 | use std::{env, path::PathBuf}; | 8 | use std::{env, path::PathBuf}; |
9 | use xtask::{ | 9 | use xtask::{ |
10 | gen_tests, generate_boilerplate, install_format_hook, run, run_clippy, run_fuzzer, run_rustfmt, | 10 | gen_tests, generate_boilerplate, install_format_hook, run, run_clippy, run_fuzzer, run_rustfmt, |
11 | Cmd, Overwrite, Result, | 11 | run_with_output, Cmd, Overwrite, Result, |
12 | }; | 12 | }; |
13 | 13 | ||
14 | // Latest stable, feel free to send a PR if this lags behind. | ||
15 | const REQUIRED_RUST_VERSION: u32 = 38; | ||
16 | |||
14 | struct InstallOpt { | 17 | struct InstallOpt { |
15 | client: Option<ClientOpt>, | 18 | client: Option<ClientOpt>, |
16 | server: Option<ServerOpt>, | 19 | server: Option<ServerOpt>, |
@@ -210,9 +213,44 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { | |||
210 | } | 213 | } |
211 | 214 | ||
212 | fn install_server(opts: ServerOpt) -> Result<()> { | 215 | fn install_server(opts: ServerOpt) -> Result<()> { |
213 | if opts.jemalloc { | 216 | let mut old_rust = false; |
217 | if let Ok(output) = run_with_output("cargo --version", ".") { | ||
218 | if let Ok(stdout) = String::from_utf8(output.stdout) { | ||
219 | if !check_version(&stdout, REQUIRED_RUST_VERSION) { | ||
220 | old_rust = true; | ||
221 | } | ||
222 | } | ||
223 | } | ||
224 | |||
225 | if old_rust { | ||
226 | eprintln!( | ||
227 | "\nWARNING: at least rust 1.{}.0 is required to compile rust-analyzer\n", | ||
228 | REQUIRED_RUST_VERSION | ||
229 | ) | ||
230 | } | ||
231 | |||
232 | let res = if opts.jemalloc { | ||
214 | run("cargo install --path crates/ra_lsp_server --locked --force --features jemalloc", ".") | 233 | run("cargo install --path crates/ra_lsp_server --locked --force --features jemalloc", ".") |
215 | } else { | 234 | } else { |
216 | run("cargo install --path crates/ra_lsp_server --locked --force", ".") | 235 | run("cargo install --path crates/ra_lsp_server --locked --force", ".") |
236 | }; | ||
237 | |||
238 | if res.is_err() && old_rust { | ||
239 | eprintln!( | ||
240 | "\nWARNING: at least rust 1.{}.0 is required to compile rust-analyzer\n", | ||
241 | REQUIRED_RUST_VERSION | ||
242 | ) | ||
243 | } | ||
244 | |||
245 | res | ||
246 | } | ||
247 | |||
248 | fn check_version(version_output: &str, min_minor_version: u32) -> bool { | ||
249 | // Parse second the number out of | ||
250 | // cargo 1.39.0-beta (1c6ec66d5 2019-09-30) | ||
251 | let minor: Option<u32> = version_output.split('.').nth(1).and_then(|it| it.parse().ok()); | ||
252 | match minor { | ||
253 | None => true, | ||
254 | Some(minor) => minor >= min_minor_version, | ||
217 | } | 255 | } |
218 | } | 256 | } |