mirror of
https://github.com/rust-lang/cargo
synced 2024-09-13 04:51:31 +00:00
Revert "Check if rust-src contains a vendor dir, and patch it in"
This reverts commit eadb4fc86c
.
This commit is contained in:
parent
0fd4d96474
commit
602f6b64de
|
@ -10,7 +10,6 @@ use crate::ops::{self, Packages};
|
||||||
use crate::util::errors::CargoResult;
|
use crate::util::errors::CargoResult;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
/// Parse the `-Zbuild-std` flag.
|
/// Parse the `-Zbuild-std` flag.
|
||||||
|
@ -39,46 +38,28 @@ pub fn resolve_std<'cfg>(
|
||||||
crates: &[String],
|
crates: &[String],
|
||||||
) -> CargoResult<(PackageSet<'cfg>, Resolve, ResolvedFeatures)> {
|
) -> CargoResult<(PackageSet<'cfg>, Resolve, ResolvedFeatures)> {
|
||||||
let src_path = detect_sysroot_src_path(target_data)?;
|
let src_path = detect_sysroot_src_path(target_data)?;
|
||||||
|
let to_patch = [
|
||||||
// Special std packages should be pulled from `library/` and should be
|
"rustc-std-workspace-core",
|
||||||
// prefixed with `rustc-std-workspace-` in certain places.
|
"rustc-std-workspace-alloc",
|
||||||
let libs_prefix = "library/";
|
"rustc-std-workspace-std",
|
||||||
let special_std_prefix = "rustc-std-workspace-";
|
];
|
||||||
let libs_path = src_path.join(libs_prefix);
|
let patches = to_patch
|
||||||
|
.iter()
|
||||||
// Crates in rust-src to build. libtest is in some sense the "root" package
|
.map(|&name| {
|
||||||
// of std, as nothing else depends on it, so it must be explicitly added.
|
let source_path = SourceId::for_path(&src_path.join("library").join(name))?;
|
||||||
let mut members = vec![format!("{}test", libs_prefix)];
|
let dep = Dependency::parse_no_deprecated(name, None, source_path)?;
|
||||||
|
|
||||||
// If rust-src contains a "vendor" directory, then patch in all the crates it contains.
|
|
||||||
let vendor_path = src_path.join("vendor");
|
|
||||||
let vendor_dir = fs::read_dir(vendor_path)?;
|
|
||||||
let patches = vendor_dir
|
|
||||||
.into_iter()
|
|
||||||
.map(|entry| {
|
|
||||||
let entry = entry?;
|
|
||||||
let name = entry
|
|
||||||
.file_name()
|
|
||||||
.into_string()
|
|
||||||
.map_err(|_| anyhow::anyhow!("package name wasn't utf8"))?;
|
|
||||||
|
|
||||||
// Remap the rustc-std-workspace crates to the actual rust-src libraries
|
|
||||||
let path = if let Some(real_name) = name.strip_prefix(special_std_prefix) {
|
|
||||||
// Record this crate as something to build in the workspace
|
|
||||||
members.push(format!("{}{}", libs_prefix, real_name));
|
|
||||||
libs_path.join(&name)
|
|
||||||
} else {
|
|
||||||
entry.path()
|
|
||||||
};
|
|
||||||
let source_path = SourceId::for_path(&path)?;
|
|
||||||
let dep = Dependency::parse_no_deprecated(&name, None, source_path)?;
|
|
||||||
Ok(dep)
|
Ok(dep)
|
||||||
})
|
})
|
||||||
.collect::<CargoResult<Vec<_>>>()?;
|
.collect::<CargoResult<Vec<_>>>()?;
|
||||||
|
|
||||||
let crates_io_url = crate::sources::CRATES_IO_INDEX.parse().unwrap();
|
let crates_io_url = crate::sources::CRATES_IO_INDEX.parse().unwrap();
|
||||||
let mut patch = HashMap::new();
|
let mut patch = HashMap::new();
|
||||||
patch.insert(crates_io_url, patches);
|
patch.insert(crates_io_url, patches);
|
||||||
|
let members = vec![
|
||||||
|
String::from("library/std"),
|
||||||
|
String::from("library/core"),
|
||||||
|
String::from("library/alloc"),
|
||||||
|
String::from("library/test"),
|
||||||
|
];
|
||||||
let ws_config = crate::core::WorkspaceConfig::Root(crate::core::WorkspaceRootConfig::new(
|
let ws_config = crate::core::WorkspaceConfig::Root(crate::core::WorkspaceRootConfig::new(
|
||||||
&src_path,
|
&src_path,
|
||||||
&Some(members),
|
&Some(members),
|
||||||
|
|
|
@ -10,7 +10,6 @@ std = { path = "../std" }
|
||||||
panic_unwind = { path = "../panic_unwind" }
|
panic_unwind = { path = "../panic_unwind" }
|
||||||
compiler_builtins = { path = "../compiler_builtins" }
|
compiler_builtins = { path = "../compiler_builtins" }
|
||||||
registry-dep-using-std = { version = "*", features = ['mockbuild'] }
|
registry-dep-using-std = { version = "*", features = ['mockbuild'] }
|
||||||
registry-dep-only-used-by-test = { version = "*" }
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
panic-unwind = []
|
panic-unwind = []
|
||||||
|
|
|
@ -7,5 +7,4 @@ extern crate test;
|
||||||
pub use test::*;
|
pub use test::*;
|
||||||
|
|
||||||
pub fn custom_api() {
|
pub fn custom_api() {
|
||||||
registry_dep_only_used_by_test::wow_testing_is_so_easy();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "registry-dep-only-used-by-test"
|
|
||||||
version = "1.0.0"
|
|
||||||
authors = ["Alex Crichton <alex@alexcrichton.com>"]
|
|
||||||
edition = "2018"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
|
|
||||||
[features]
|
|
|
@ -1,2 +0,0 @@
|
||||||
pub fn wow_testing_is_so_easy() {
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "registry-dep-using-alloc"
|
|
||||||
version = "1.0.0"
|
|
||||||
authors = ["Alex Crichton <alex@alexcrichton.com>"]
|
|
||||||
edition = "2018"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
rustc-std-workspace-alloc = { version = "*", optional = true }
|
|
||||||
rustc-std-workspace-core = { version = "*", optional = true }
|
|
||||||
|
|
||||||
[features]
|
|
||||||
mockbuild = ["rustc-std-workspace-alloc", "rustc-std-workspace-core"]
|
|
|
@ -1,9 +0,0 @@
|
||||||
#[cfg(feature = "mockbuild")]
|
|
||||||
pub fn custom_api() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = "mockbuild"))]
|
|
||||||
pub fn non_sysroot_api() {
|
|
||||||
core::custom_api();
|
|
||||||
alloc::custom_api();
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "registry-dep-using-core"
|
|
||||||
version = "1.0.0"
|
|
||||||
authors = ["Alex Crichton <alex@alexcrichton.com>"]
|
|
||||||
edition = "2018"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
rustc-std-workspace-core = { version = "*", optional = true }
|
|
||||||
|
|
||||||
[features]
|
|
||||||
mockbuild = ["rustc-std-workspace-core"]
|
|
|
@ -1,8 +0,0 @@
|
||||||
#[cfg(feature = "mockbuild")]
|
|
||||||
pub fn custom_api() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = "mockbuild"))]
|
|
||||||
pub fn non_sysroot_api() {
|
|
||||||
core::custom_api();
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "registry-dep-using-std"
|
|
||||||
version = "1.0.0"
|
|
||||||
authors = ["Alex Crichton <alex@alexcrichton.com>"]
|
|
||||||
edition = "2018"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
rustc-std-workspace-std = { version = "*", optional = true }
|
|
||||||
|
|
||||||
[features]
|
|
||||||
mockbuild = ["rustc-std-workspace-std"]
|
|
|
@ -1,8 +0,0 @@
|
||||||
#[cfg(feature = "mockbuild")]
|
|
||||||
pub fn custom_api() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = "mockbuild"))]
|
|
||||||
pub fn non_sysroot_api() {
|
|
||||||
std::custom_api();
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
this file shouldn't be read
|
|
|
@ -1 +0,0 @@
|
||||||
this file shouldn't be read
|
|
|
@ -1 +0,0 @@
|
||||||
this file shouldn't be read
|
|
|
@ -27,18 +27,71 @@ fn setup() -> Option<Setup> {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register a version of one of the std dependencies that doesn't compile.
|
// Our mock sysroot requires a few packages from crates.io, so make sure
|
||||||
// This ensures that the mock-std's vendor is actually being used.
|
// they're "published" to crates.io. Also edit their code a bit to make sure
|
||||||
|
// that they have access to our custom crates with custom apis.
|
||||||
Package::new("registry-dep-using-core", "1.0.0")
|
Package::new("registry-dep-using-core", "1.0.0")
|
||||||
.file(
|
.file(
|
||||||
"src/lib.rs",
|
"src/lib.rs",
|
||||||
"
|
"
|
||||||
don't compile me bro!!
|
#![no_std]
|
||||||
|
|
||||||
|
#[cfg(feature = \"mockbuild\")]
|
||||||
|
pub fn custom_api() {
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = \"mockbuild\"))]
|
||||||
|
pub fn non_sysroot_api() {
|
||||||
|
core::custom_api();
|
||||||
|
}
|
||||||
",
|
",
|
||||||
)
|
)
|
||||||
.add_dep(Dependency::new("rustc-std-workspace-core", "*").optional(true))
|
.add_dep(Dependency::new("rustc-std-workspace-core", "*").optional(true))
|
||||||
.feature("mockbuild", &["rustc-std-workspace-core"])
|
.feature("mockbuild", &["rustc-std-workspace-core"])
|
||||||
.publish();
|
.publish();
|
||||||
|
Package::new("registry-dep-using-alloc", "1.0.0")
|
||||||
|
.file(
|
||||||
|
"src/lib.rs",
|
||||||
|
"
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
|
extern crate alloc;
|
||||||
|
|
||||||
|
#[cfg(feature = \"mockbuild\")]
|
||||||
|
pub fn custom_api() {
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = \"mockbuild\"))]
|
||||||
|
pub fn non_sysroot_api() {
|
||||||
|
core::custom_api();
|
||||||
|
alloc::custom_api();
|
||||||
|
}
|
||||||
|
",
|
||||||
|
)
|
||||||
|
.add_dep(Dependency::new("rustc-std-workspace-core", "*").optional(true))
|
||||||
|
.add_dep(Dependency::new("rustc-std-workspace-alloc", "*").optional(true))
|
||||||
|
.feature(
|
||||||
|
"mockbuild",
|
||||||
|
&["rustc-std-workspace-core", "rustc-std-workspace-alloc"],
|
||||||
|
)
|
||||||
|
.publish();
|
||||||
|
Package::new("registry-dep-using-std", "1.0.0")
|
||||||
|
.file(
|
||||||
|
"src/lib.rs",
|
||||||
|
"
|
||||||
|
#[cfg(feature = \"mockbuild\")]
|
||||||
|
pub fn custom_api() {
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = \"mockbuild\"))]
|
||||||
|
pub fn non_sysroot_api() {
|
||||||
|
std::custom_api();
|
||||||
|
}
|
||||||
|
",
|
||||||
|
)
|
||||||
|
.add_dep(Dependency::new("rustc-std-workspace-std", "*").optional(true))
|
||||||
|
.feature("mockbuild", &["rustc-std-workspace-std"])
|
||||||
|
.publish();
|
||||||
|
|
||||||
let p = ProjectBuilder::new(paths::root().join("rustc-wrapper"))
|
let p = ProjectBuilder::new(paths::root().join("rustc-wrapper"))
|
||||||
.file(
|
.file(
|
||||||
|
@ -282,81 +335,6 @@ fn depend_same_as_std() {
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Our mock sysroot requires a few packages from crates.io, so make sure
|
|
||||||
// they're "published" to crates.io. Also edit their code a bit to make sure
|
|
||||||
// that they have access to our custom crates with custom apis.
|
|
||||||
Package::new("registry-dep-using-core", "1.0.0")
|
|
||||||
.file(
|
|
||||||
"src/lib.rs",
|
|
||||||
"
|
|
||||||
#![no_std]
|
|
||||||
|
|
||||||
#[cfg(feature = \"mockbuild\")]
|
|
||||||
pub fn custom_api() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = \"mockbuild\"))]
|
|
||||||
pub fn non_sysroot_api() {
|
|
||||||
core::custom_api();
|
|
||||||
}
|
|
||||||
",
|
|
||||||
)
|
|
||||||
.add_dep(Dependency::new("rustc-std-workspace-core", "*").optional(true))
|
|
||||||
.feature("mockbuild", &["rustc-std-workspace-core"])
|
|
||||||
.publish();
|
|
||||||
Package::new("registry-dep-using-alloc", "1.0.0")
|
|
||||||
.file(
|
|
||||||
"src/lib.rs",
|
|
||||||
"
|
|
||||||
#![no_std]
|
|
||||||
|
|
||||||
extern crate alloc;
|
|
||||||
|
|
||||||
#[cfg(feature = \"mockbuild\")]
|
|
||||||
pub fn custom_api() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = \"mockbuild\"))]
|
|
||||||
pub fn non_sysroot_api() {
|
|
||||||
core::custom_api();
|
|
||||||
alloc::custom_api();
|
|
||||||
}
|
|
||||||
",
|
|
||||||
)
|
|
||||||
.add_dep(Dependency::new("rustc-std-workspace-core", "*").optional(true))
|
|
||||||
.add_dep(Dependency::new("rustc-std-workspace-alloc", "*").optional(true))
|
|
||||||
.feature(
|
|
||||||
"mockbuild",
|
|
||||||
&["rustc-std-workspace-core", "rustc-std-workspace-alloc"],
|
|
||||||
)
|
|
||||||
.publish();
|
|
||||||
Package::new("registry-dep-using-std", "1.0.0")
|
|
||||||
.file(
|
|
||||||
"src/lib.rs",
|
|
||||||
"
|
|
||||||
#[cfg(feature = \"mockbuild\")]
|
|
||||||
pub fn custom_api() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = \"mockbuild\"))]
|
|
||||||
pub fn non_sysroot_api() {
|
|
||||||
std::custom_api();
|
|
||||||
}
|
|
||||||
",
|
|
||||||
)
|
|
||||||
.add_dep(Dependency::new("rustc-std-workspace-std", "*").optional(true))
|
|
||||||
.feature("mockbuild", &["rustc-std-workspace-std"])
|
|
||||||
.publish();
|
|
||||||
Package::new("registry-dep-only-used-by-test", "1.0.0")
|
|
||||||
.file(
|
|
||||||
"src/lib.rs",
|
|
||||||
"
|
|
||||||
pub fn wow_testing_is_so_easy() {
|
|
||||||
}
|
|
||||||
",
|
|
||||||
)
|
|
||||||
.publish();
|
|
||||||
|
|
||||||
let p = project()
|
let p = project()
|
||||||
.file(
|
.file(
|
||||||
"src/lib.rs",
|
"src/lib.rs",
|
||||||
|
|
Loading…
Reference in a new issue