From bd57eb5badcc23f89fdd5d4fdd09d7a9238d9dab Mon Sep 17 00:00:00 2001 From: bors Date: Wed, 27 May 2020 19:33:35 +0000 Subject: [PATCH 1/2] Auto merge of #8290 - ehuss:fix-lld-freshness, r=alexcrichton Fix fingerprinting for lld on Windows with dylib. This fixes an issue where if `lld` is used on Windows, dynamic libraries will never be treated as "fresh". This is a regression from #8210 where Cargo is expecting export files to be created, but lld does not create these. The solution is to ignore "Auxiliary" files in fingerprinting, which AFAIK aren't really needed (only the primary output files really matter). Fixes #8284 --- src/cargo/core/compiler/fingerprint.rs | 2 +- tests/testsuite/freshness.rs | 36 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/cargo/core/compiler/fingerprint.rs b/src/cargo/core/compiler/fingerprint.rs index 145a622bb1f..b432839850a 100644 --- a/src/cargo/core/compiler/fingerprint.rs +++ b/src/cargo/core/compiler/fingerprint.rs @@ -1229,7 +1229,7 @@ fn calculate_normal(cx: &mut Context<'_, '_>, unit: &Unit) -> CargoResult Date: Fri, 5 Jun 2020 14:31:21 +0000 Subject: [PATCH 2/2] Auto merge of #8329 - ehuss:apple-no-hash, r=alexcrichton Don't hash executable filenames on apple platforms. Due to some recent changes to the backtrace crate, backtraces on apple platforms haven't been working (they are missing line/filename information). The reason is that previously libbacktrace would hunt through the directory for any matching file in the `.dSYM` directory. The new implementation expects a file matching the executable name exactly (which no longer includes the hash because Cargo renames it). The solution here is to not include a hash in the executable filename. This matches the behavior on Windows which does it for a similar reason (paths are embedded in pdb files). The downside is that switching between different settings (like different features) causes Cargo to rebuild the binary each time. I don't think this is a particularly common use case, at least I've not heard any complaints about this behavior on Windows. Fixes https://github.com/rust-lang/rust/issues/72550 --- src/cargo/core/compiler/context/compilation_files.rs | 9 ++++++++- tests/testsuite/build.rs | 2 +- tests/testsuite/collisions.rs | 4 ++-- tests/testsuite/freshness.rs | 6 +++--- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/cargo/core/compiler/context/compilation_files.rs b/src/cargo/core/compiler/context/compilation_files.rs index 04d75fe0ac5..5d2cf4efce9 100644 --- a/src/cargo/core/compiler/context/compilation_files.rs +++ b/src/cargo/core/compiler/context/compilation_files.rs @@ -608,6 +608,12 @@ fn should_use_metadata(bcx: &BuildContext<'_, '_>, unit: &Unit) -> bool { // - wasm32 executables: When using emscripten, the path to the .wasm file // is embedded in the .js file, so we don't want the hash in there. // TODO: Is this necessary for wasm32-unknown-unknown? + // - apple executables: The executable name is used in the dSYM directory + // (such as `target/debug/foo.dSYM/Contents/Resources/DWARF/foo-64db4e4bf99c12dd`). + // Unfortunately this causes problems with our current backtrace + // implementation which looks for a file matching the exe name exactly. + // See https://github.com/rust-lang/rust/issues/72550#issuecomment-638501691 + // for more details. // // This is only done for local packages, as we don't expect to export // dependencies. @@ -622,7 +628,8 @@ fn should_use_metadata(bcx: &BuildContext<'_, '_>, unit: &Unit) -> bool { if (unit.target.is_dylib() || unit.target.is_cdylib() || (unit.target.is_executable() && short_name.starts_with("wasm32-")) - || (unit.target.is_executable() && short_name.contains("msvc"))) + || (unit.target.is_executable() && short_name.contains("msvc")) + || (unit.target.is_executable() && short_name.contains("-apple-"))) && unit.pkg.package_id().source_id().is_path() && env::var("__CARGO_DEFAULT_LIB_METADATA").is_err() { diff --git a/tests/testsuite/build.rs b/tests/testsuite/build.rs index 204d23cef0e..f176e77a19e 100644 --- a/tests/testsuite/build.rs +++ b/tests/testsuite/build.rs @@ -4149,7 +4149,7 @@ fn uplift_dsym_of_bin_on_mac() { assert!(p.target_debug_dir().join("foo.dSYM").is_dir()); assert!(p.target_debug_dir().join("b.dSYM").is_dir()); assert!(p.target_debug_dir().join("b.dSYM").is_symlink()); - assert!(p.target_debug_dir().join("examples/c.dSYM").is_symlink()); + assert!(p.target_debug_dir().join("examples/c.dSYM").is_dir()); assert!(!p.target_debug_dir().join("c.dSYM").exists()); assert!(!p.target_debug_dir().join("d.dSYM").exists()); } diff --git a/tests/testsuite/collisions.rs b/tests/testsuite/collisions.rs index e81ef90919f..5b94aae28ec 100644 --- a/tests/testsuite/collisions.rs +++ b/tests/testsuite/collisions.rs @@ -91,9 +91,9 @@ This may become a hard error in the future; see