]> git.lizzy.rs Git - rust.git/commitdiff
Extract default Config into function
authorMark Simulacrum <mark.simulacrum@gmail.com>
Sat, 10 Mar 2018 14:02:17 +0000 (07:02 -0700)
committerMark Simulacrum <mark.simulacrum@gmail.com>
Tue, 3 Apr 2018 17:39:16 +0000 (11:39 -0600)
Will permit creating Config in tests without having to parse a toml
file.

src/bootstrap/config.rs

index 8df5f406619193850b349941a447423a8a0996f2..0848590a9bc10787ba3cdc17a0723784dad66e91 100644 (file)
@@ -318,11 +318,8 @@ struct TomlTarget {
 }
 
 impl Config {
-    pub fn parse(args: &[String]) -> Config {
-        let flags = Flags::parse(&args);
-        let file = flags.config.clone();
+    pub fn default_opts() -> Config {
         let mut config = Config::default();
-        config.exclude = flags.exclude;
         config.llvm_enabled = true;
         config.llvm_optimize = true;
         config.llvm_version_check = true;
@@ -342,11 +339,26 @@ pub fn parse(args: &[String]) -> Config {
         config.rust_codegen_backends = vec![INTERNER.intern_str("llvm")];
         config.rust_codegen_backends_dir = "codegen-backends".to_owned();
 
+        // set by bootstrap.py
+        config.src = env::var_os("SRC").map(PathBuf::from).expect("'SRC' to be set");
+        config.build = INTERNER.intern_str(&env::var("BUILD").expect("'BUILD' to be set"));
+        config.out = env::var_os("BUILD_DIR").map(PathBuf::from).expect("'BUILD_DIR' set");
+
+        let stage0_root = config.out.join(&config.build).join("stage0/bin");
+        config.initial_rustc = stage0_root.join(exe("rustc", &config.build));
+        config.initial_cargo = stage0_root.join(exe("cargo", &config.build));
+
+        config
+    }
+
+    pub fn parse(args: &[String]) -> Config {
+        let flags = Flags::parse(&args);
+        let file = flags.config.clone();
+        let mut config = Config::default_opts();
+        config.exclude = flags.exclude;
         config.rustc_error_format = flags.rustc_error_format;
         config.on_fail = flags.on_fail;
         config.stage = flags.stage;
-        // set by bootstrap.py
-        config.src = env::var_os("SRC").map(PathBuf::from).expect("'SRC' to be set");
         config.jobs = flags.jobs;
         config.cmd = flags.cmd;
         config.incremental = flags.incremental;
@@ -371,7 +383,6 @@ pub fn parse(args: &[String]) -> Config {
 
         let build = toml.build.clone().unwrap_or(Build::default());
         // set by bootstrap.py
-        config.build = INTERNER.intern_str(&env::var("BUILD").unwrap());
         config.hosts.push(config.build.clone());
         for host in build.host.iter() {
             let host = INTERNER.intern_str(host);
@@ -539,22 +550,12 @@ pub fn parse(args: &[String]) -> Config {
             set(&mut config.rust_dist_src, t.src_tarball);
         }
 
-        let out = env::var_os("BUILD_DIR").map(PathBuf::from).expect("'BUILD_DIR' set");
-        config.out = out.clone();
-
-        let stage0_root = out.join(&config.build).join("stage0/bin");
-        config.initial_rustc = match build.rustc {
-            Some(s) => PathBuf::from(s),
-            None => stage0_root.join(exe("rustc", &config.build)),
-        };
-        config.initial_cargo = match build.cargo {
-            Some(s) => PathBuf::from(s),
-            None => stage0_root.join(exe("cargo", &config.build)),
-        };
-
         // Now that we've reached the end of our configuration, infer the
         // default values for all options that we haven't otherwise stored yet.
 
+        set(&mut config.initial_rustc, build.rustc.map(PathBuf::from));
+        set(&mut config.initial_rustc, build.cargo.map(PathBuf::from));
+
         let default = false;
         config.llvm_assertions = llvm_assertions.unwrap_or(default);