diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py index 1777dae594f..71b8f3c4553 100644 --- a/src/bootstrap/bootstrap.py +++ b/src/bootstrap/bootstrap.py @@ -1233,16 +1233,18 @@ def bootstrap(help_triggered): build.verbose = args.verbose build.clean = args.clean - # Read from `--config`, then `RUST_BOOTSTRAP_CONFIG`, then fallback to `config.toml` (if it - # exists). + # Read from `--config`, then `RUST_BOOTSTRAP_CONFIG`, then `./config.toml`, + # then `config.toml` in the root directory. toml_path = args.config or os.getenv('RUST_BOOTSTRAP_CONFIG') - if not toml_path and os.path.exists('config.toml'): + using_default_path = toml_path is None + if using_default_path: toml_path = 'config.toml' - - if toml_path: if not os.path.exists(toml_path): toml_path = os.path.join(build.rust_root, toml_path) + # Give a hard error if `--config` or `RUST_BOOTSTRAP_CONFIG` are set to a missing path, + # but not if `config.toml` hasn't been created. + if not using_default_path or os.path.exists(toml_path): with open(toml_path) as config: build.config_toml = config.read() diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 73a855ae4d7..0c0a4733231 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -647,7 +647,8 @@ pub fn parse(args: &[String]) -> Config { let get_toml = |file: &Path| { use std::process; - let contents = t!(fs::read_to_string(file), "`include` config not found"); + let contents = + t!(fs::read_to_string(file), format!("config file {} not found", file.display())); match toml::from_str(&contents) { Ok(table) => table, Err(err) => { @@ -657,14 +658,24 @@ pub fn parse(args: &[String]) -> Config { } }; - // check --config first, then `$RUST_BOOTSTRAP_CONFIG` first, then `config.toml` + // Read from `--config`, then `RUST_BOOTSTRAP_CONFIG`, then `./config.toml`, then `config.toml` in the root directory. let toml_path = flags .config .clone() - .or_else(|| env::var_os("RUST_BOOTSTRAP_CONFIG").map(PathBuf::from)) - .unwrap_or_else(|| PathBuf::from("config.toml")); - let mut toml = - if toml_path.exists() { get_toml(&toml_path) } else { TomlConfig::default() }; + .or_else(|| env::var_os("RUST_BOOTSTRAP_CONFIG").map(PathBuf::from)); + let using_default_path = toml_path.is_none(); + let mut toml_path = toml_path.unwrap_or_else(|| PathBuf::from("config.toml")); + if using_default_path && !toml_path.exists() { + toml_path = config.src.join(toml_path); + } + + // Give a hard error if `--config` or `RUST_BOOTSTRAP_CONFIG` are set to a missing path, + // but not if `config.toml` hasn't been created. + let mut toml = if !using_default_path || toml_path.exists() { + get_toml(&toml_path) + } else { + TomlConfig::default() + }; if let Some(include) = &toml.profile { let mut include_path = config.src.clone();