From c65996ea3b7e1f59c19ece2381e5d687892c98de Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 6 Mar 2017 06:55:24 -0800 Subject: Don't put Cargo into the rustc workspace This causes problems when first cloning and bootstrapping the repository unfortunately, so let's ensure that Cargo sticks around in its own workspace. Because Cargo is a submodule it's not available by default on the inital clone of the rust-lang/rust repository. Normally it's the responsibility of the rustbuild to take care of this, but unfortunately to build rustbuild itself we need to resolve the workspace conflicts. To deal with this we'll just have to ensure that all submodules are in their own workspace, which sort of makes sense anyway as updates to dependencies as bugfixes to Cargo should go to rust-lang/cargo instead of rust-lang/rust. In any case this commit removes Cargo from the global workspace which should resolve the issues that we've been seeing. To actually perform this the `cargo` submodule has been moved to the top directory to ensure it's outside the scope of `src/Cargo.toml` as a workspace. --- src/bootstrap/lib.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/bootstrap/lib.rs') diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 071d0b0b090..4831b380837 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -76,11 +76,12 @@ extern crate num_cpus; extern crate rustc_serialize; extern crate toml; -use std::collections::HashMap; use std::cmp; +use std::collections::HashMap; use std::env; use std::ffi::OsString; use std::fs::{self, File}; +use std::io::Read; use std::path::{Component, PathBuf, Path}; use std::process::Command; @@ -995,6 +996,21 @@ impl Build { self.rust_info.version(self, channel::CFG_RELEASE_NUM) } + /// Returns the `a.b.c` version that Cargo is at. + fn cargo_release_num(&self) -> String { + let mut toml = String::new(); + t!(t!(File::open(self.src.join("cargo/Cargo.toml"))).read_to_string(&mut toml)); + for line in toml.lines() { + let prefix = "version = \""; + let suffix = "\""; + if line.starts_with(prefix) && line.ends_with(suffix) { + return line[prefix.len()..line.len() - suffix.len()].to_string() + } + } + + panic!("failed to find version in cargo's Cargo.toml") + } + /// Returns whether unstable features should be enabled for the compiler /// we're building. fn unstable_features(&self) -> bool { -- cgit 1.4.1-3-g733a5