about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorO01eg <o01eg@yandex.ru>2018-02-05 20:10:05 +0300
committerO01eg <o01eg@yandex.ru>2018-02-05 20:10:05 +0300
commit7be8e2fbb3745602ac864fc079a040dd3a80d91d (patch)
tree6791457fadc825d603938f661e708b9fe5e83317 /src/bootstrap
parentdd29d3dd76c3aed18d7708c636b8d1e259a4c294 (diff)
downloadrust-7be8e2fbb3745602ac864fc079a040dd3a80d91d.tar.gz
rust-7be8e2fbb3745602ac864fc079a040dd3a80d91d.zip
Add build.tools option to manage installation of extended rust tools.
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/config.rs5
-rwxr-xr-xsrc/bootstrap/configure.py1
-rw-r--r--src/bootstrap/install.rs21
3 files changed, 19 insertions, 8 deletions
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index be8910120ee..4f4fd14ae8c 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -13,7 +13,7 @@
 //! This module implements parsing `config.toml` configuration files to tweak
 //! how the build runs.
 
-use std::collections::HashMap;
+use std::collections::{HashMap, HashSet};
 use std::env;
 use std::fs::File;
 use std::io::prelude::*;
@@ -52,6 +52,7 @@ pub struct Config {
     pub target_config: HashMap<Interned<String>, Target>,
     pub full_bootstrap: bool,
     pub extended: bool,
+    pub tools: Option<HashSet<String>>,
     pub sanitizers: bool,
     pub profiler: bool,
     pub ignore_git: bool,
@@ -191,6 +192,7 @@ struct Build {
     python: Option<String>,
     full_bootstrap: Option<bool>,
     extended: Option<bool>,
+    tools: Option<HashSet<String>>,
     verbose: Option<usize>,
     sanitizers: Option<bool>,
     profiler: Option<bool>,
@@ -395,6 +397,7 @@ impl Config {
         set(&mut config.vendor, build.vendor);
         set(&mut config.full_bootstrap, build.full_bootstrap);
         set(&mut config.extended, build.extended);
+        config.tools = build.tools;
         set(&mut config.verbose, build.verbose);
         set(&mut config.sanitizers, build.sanitizers);
         set(&mut config.profiler, build.profiler);
diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py
index d51752a12d9..99a3ee4e4c3 100755
--- a/src/bootstrap/configure.py
+++ b/src/bootstrap/configure.py
@@ -144,6 +144,7 @@ o("jemalloc", "rust.use-jemalloc", "build liballoc with jemalloc")
 o("full-bootstrap", "build.full-bootstrap", "build three compilers instead of two")
 o("extended", "build.extended", "build an extended rust tool set")
 
+v("tools", "build.tools", "List of extended tools will be installed")
 v("build", "build.build", "GNUs ./configure syntax LLVM build triple")
 v("host", None, "GNUs ./configure syntax LLVM host triples")
 v("target", None, "GNUs ./configure syntax LLVM target triples")
diff --git a/src/bootstrap/install.rs b/src/bootstrap/install.rs
index 743f32ece99..86df36f209e 100644
--- a/src/bootstrap/install.rs
+++ b/src/bootstrap/install.rs
@@ -185,32 +185,39 @@ install!((self, builder, _config),
             install_std(builder, self.stage, *target);
         }
     };
-    Cargo, "cargo", _config.extended, only_hosts: true, {
+    Cargo, "cargo", _config.extended &&
+            _config.tools.as_ref().map_or(true, |t| t.contains("cargo")), only_hosts: true, {
         builder.ensure(dist::Cargo { stage: self.stage, target: self.target });
         install_cargo(builder, self.stage, self.target);
     };
-    Rls, "rls", _config.extended, only_hosts: true, {
-        if builder.ensure(dist::Rls { stage: self.stage, target: self.target }).is_some() {
+    Rls, "rls", _config.extended &&
+            _config.tools.as_ref().map_or(true, |t| t.contains("rls")), only_hosts: true, {
+        if builder.ensure(dist::Rls { stage: self.stage, target: self.target }).is_some() ||
+            builder.config.tools.as_ref().map_or(false, |t| t.contains("rls")) {
             install_rls(builder, self.stage, self.target);
         } else {
             println!("skipping Install RLS stage{} ({})", self.stage, self.target);
         }
     };
-    Rustfmt, "rustfmt", _config.extended, only_hosts: true, {
-        if builder.ensure(dist::Rustfmt { stage: self.stage, target: self.target }).is_some() {
+    Rustfmt, "rustfmt", _config.extended &&
+            _config.tools.as_ref().map_or(true, |t| t.contains("rustfmt")), only_hosts: true, {
+        if builder.ensure(dist::Rustfmt { stage: self.stage, target: self.target }).is_some() ||
+            builder.config.tools.as_ref().map_or(false, |t| t.contains("rustfmt"))  {
             install_rustfmt(builder, self.stage, self.target);
         } else {
             println!("skipping Install Rustfmt stage{} ({})", self.stage, self.target);
         }
     };
-    Analysis, "analysis", _config.extended, only_hosts: false, {
+    Analysis, "analysis", _config.extended &&
+            _config.tools.as_ref().map_or(true, |t| t.contains("analysis")), only_hosts: false, {
         builder.ensure(dist::Analysis {
             compiler: builder.compiler(self.stage, self.host),
             target: self.target
         });
         install_analysis(builder, self.stage, self.target);
     };
-    Src, "src", _config.extended, only_hosts: true, {
+    Src, "src", _config.extended &&
+            _config.tools.as_ref().map_or(true, |t| t.contains("src")), only_hosts: true, {
         builder.ensure(dist::Src);
         install_src(builder, self.stage);
     }, ONLY_BUILD;