Auto merge of #75654 - tmandry:rollup-ej0oezi, r=tmandry

Rollup of 3 pull requests

Successful merges:

 - #75548 (librustc_metadata::locator: Properly detect file type.)
 - #75603 (Use more compatible out-implib style)
 - #75637 (update stacker to 0.1.11 to unbreak build for wasm32-unknown-unknown)

Failed merges:

r? @ghost
This commit is contained in:
bors 2020-08-18 03:21:22 +00:00
commit b97e9b5dc7
4 changed files with 14 additions and 8 deletions

View file

@ -4345,9 +4345,9 @@ checksum = "ffbc596e092fe5f598b12ef46cc03754085ac2f4d8c739ad61c4ae266cc3b3fa"
[[package]] [[package]]
name = "stacker" name = "stacker"
version = "0.1.9" version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72dd941b456e1c006d6b9f27c526d5b69281288aeea8cba82c19d3843d8ccdd2" checksum = "a92bc346006ae78c539d6ab2cf1a1532bc657b8339c464877a990ec82073c66f"
dependencies = [ dependencies = [
"cc", "cc",
"cfg-if", "cfg-if",

View file

@ -266,7 +266,7 @@ impl<'a> GccLinker<'a> {
if let Some(implib_name) = implib_name { if let Some(implib_name) = implib_name {
let implib = out_filename.parent().map(|dir| dir.join(&implib_name)); let implib = out_filename.parent().map(|dir| dir.join(&implib_name));
if let Some(implib) = implib { if let Some(implib) = implib {
self.linker_arg(&format!("--out-implib,{}", (*implib).to_str().unwrap())); self.linker_arg(&format!("--out-implib={}", (*implib).to_str().unwrap()));
} }
} }
} }

View file

@ -30,7 +30,7 @@ rustc_index = { path = "../librustc_index", package = "rustc_index" }
bitflags = "1.2.1" bitflags = "1.2.1"
measureme = "0.7.1" measureme = "0.7.1"
libc = "0.2" libc = "0.2"
stacker = "0.1.9" stacker = "0.1.11"
tempfile = "3.0.5" tempfile = "3.0.5"
[dependencies.parking_lot] [dependencies.parking_lot]

View file

@ -685,13 +685,19 @@ impl<'a> CrateLocator<'a> {
&& file.ends_with(&self.target.options.dll_suffix) && file.ends_with(&self.target.options.dll_suffix)
{ {
// Make sure there's at most one rlib and at most one dylib. // Make sure there's at most one rlib and at most one dylib.
let loc = fs::canonicalize(&loc).unwrap_or_else(|_| loc.clone()); // Note to take care and match against the non-canonicalized name:
// some systems save build artifacts into content-addressed stores
// that do not preserve extensions, and then link to them using
// e.g. symbolic links. If we canonicalize too early, we resolve
// the symlink, the file type is lost and we might treat rlibs and
// rmetas as dylibs.
let loc_canon = fs::canonicalize(&loc).unwrap_or_else(|_| loc.clone());
if loc.file_name().unwrap().to_str().unwrap().ends_with(".rlib") { if loc.file_name().unwrap().to_str().unwrap().ends_with(".rlib") {
rlibs.insert(loc, PathKind::ExternFlag); rlibs.insert(loc_canon, PathKind::ExternFlag);
} else if loc.file_name().unwrap().to_str().unwrap().ends_with(".rmeta") { } else if loc.file_name().unwrap().to_str().unwrap().ends_with(".rmeta") {
rmetas.insert(loc, PathKind::ExternFlag); rmetas.insert(loc_canon, PathKind::ExternFlag);
} else { } else {
dylibs.insert(loc, PathKind::ExternFlag); dylibs.insert(loc_canon, PathKind::ExternFlag);
} }
} else { } else {
self.rejected_via_filename self.rejected_via_filename