Prevent dependencies between std/test/rustc unifying with each other
This commit is contained in:
parent
08bfe16129
commit
e5828d4dc0
@ -853,14 +853,30 @@ impl<'a> Builder<'a> {
|
|||||||
|
|
||||||
// FIXME: Temporary fix for https://github.com/rust-lang/cargo/issues/3005
|
// FIXME: Temporary fix for https://github.com/rust-lang/cargo/issues/3005
|
||||||
// Force cargo to output binaries with disambiguating hashes in the name
|
// Force cargo to output binaries with disambiguating hashes in the name
|
||||||
let metadata = if compiler.stage == 0 {
|
let mut metadata = if compiler.stage == 0 {
|
||||||
// Treat stage0 like special channel, whether it's a normal prior-
|
// Treat stage0 like a special channel, whether it's a normal prior-
|
||||||
// release rustc or a local rebuild with the same version, so we
|
// release rustc or a local rebuild with the same version, so we
|
||||||
// never mix these libraries by accident.
|
// never mix these libraries by accident.
|
||||||
"bootstrap"
|
"bootstrap".to_string()
|
||||||
} else {
|
} else {
|
||||||
&self.config.channel
|
self.config.channel.to_string()
|
||||||
};
|
};
|
||||||
|
// We want to make sure that none of the dependencies between
|
||||||
|
// std/test/rustc unify with one another. This is done for weird linkage
|
||||||
|
// reasons but the gist of the problem is that if librustc, libtest, and
|
||||||
|
// libstd all depend on libc from crates.io (which they actually do) we
|
||||||
|
// want to make sure they all get distinct versions. Things get really
|
||||||
|
// weird if we try to unify all these dependencies right now, namely
|
||||||
|
// around how many times the library is linked in dynamic libraries and
|
||||||
|
// such. If rustc were a static executable or if we didn't ship dylibs
|
||||||
|
// this wouldn't be a problem, but we do, so it is. This is in general
|
||||||
|
// just here to make sure things build right. If you can remove this and
|
||||||
|
// things still build right, please do!
|
||||||
|
match mode {
|
||||||
|
Mode::Std => metadata.push_str("std"),
|
||||||
|
Mode::Test => metadata.push_str("test"),
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
cargo.env("__CARGO_DEFAULT_LIB_METADATA", &metadata);
|
cargo.env("__CARGO_DEFAULT_LIB_METADATA", &metadata);
|
||||||
|
|
||||||
let stage;
|
let stage;
|
||||||
|
Loading…
Reference in New Issue
Block a user