Changeset View
Changeset View
Standalone View
Standalone View
head/lang/rust/files/patch-src_bootstrap_lib.rs
Property | Old Value | New Value |
---|---|---|
fbsd:nokeywords | null | yes \ No newline at end of property |
svn:eol-style | null | native \ No newline at end of property |
svn:mime-type | null | text/plain \ No newline at end of property |
Attempt to fix intermittent "can't find crate for `std`" build failures | |||||
The location of rustc (found via env::current_exe()) is used to | |||||
find the right libstd. However it might have been "copied" by | |||||
creating a hard link to the new location instead. Like /proc/curproc/file, | |||||
KERN_PROC_PATHNAME (used internally by current_exe()) can return | |||||
any of the file's multiple paths. Most of the time it returns the | |||||
right rustc path and the build will succeed but occasionally it | |||||
will return the "wrong" path and the build fails with: | |||||
error[E0463]: can't find crate for `std` | |||||
If this is right a viable workaround should be to never create hard | |||||
links during the build, so let's try that. | |||||
--- src/bootstrap/lib.rs.orig 2020-07-23 20:16:43 UTC | |||||
+++ src/bootstrap/lib.rs | |||||
@@ -1173,10 +1173,6 @@ impl Build { | |||||
if metadata.file_type().is_symlink() { | |||||
let link = t!(fs::read_link(src)); | |||||
t!(symlink_file(link, dst)); | |||||
- } else if let Ok(()) = fs::hard_link(src, dst) { | |||||
- // Attempt to "easy copy" by creating a hard link | |||||
- // (symlinks don't work on windows), but if that fails | |||||
- // just fall back to a slow `copy` operation. | |||||
} else { | |||||
if let Err(e) = fs::copy(src, dst) { | |||||
panic!("failed to copy `{}` to `{}`: {}", src.display(), dst.display(), e) |