diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/rust/files/1.75.0-119445.patch b/sdk_container/src/third_party/coreos-overlay/dev-lang/rust/files/1.75.0-119445.patch new file mode 100644 index 00000000000..76097af861d --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/rust/files/1.75.0-119445.patch @@ -0,0 +1,85 @@ +From a4132f6d092b781b742679d2229c1c69f6ad7b16 Mon Sep 17 00:00:00 2001 +From: Alex Kiernan +Date: Sat, 30 Dec 2023 15:13:27 +0000 +Subject: [PATCH 1/2] Handle non-existent/empty /registry/src + +If remap-debuginfo is set but cargo isn't vendored into +.cargo/registry/src, don't panic: + +| thread 'main' panicked at src/core/builder.rs:1795:26: +| std::fs::read_dir(registry_src) failed with No such file or directory (os error 2) + +Signed-off-by: Alex Kiernan +--- + src/bootstrap/src/core/builder.rs | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/src/bootstrap/src/core/builder.rs b/src/bootstrap/src/core/builder.rs +index e85753a351232..08e7e0b348096 100644 +--- a/src/bootstrap/src/core/builder.rs ++++ b/src/bootstrap/src/core/builder.rs +@@ -1812,15 +1812,19 @@ impl<'a> Builder<'a> { + if self.config.rust_remap_debuginfo { + // FIXME: handle vendored sources + let registry_src = t!(home::cargo_home()).join("registry").join("src"); +- let mut env_var = OsString::new(); +- for entry in t!(std::fs::read_dir(registry_src)) { ++ if registry_src.is_dir() { ++ let mut env_var = OsString::new(); ++ for entry in t!(std::fs::read_dir(registry_src)) { ++ if !env_var.is_empty() { ++ env_var.push("\t"); ++ } ++ env_var.push(t!(entry).path()); ++ env_var.push("=/rust/deps"); ++ } + if !env_var.is_empty() { +- env_var.push("\t"); ++ cargo.env("RUSTC_CARGO_REGISTRY_SRC_TO_REMAP", env_var); + } +- env_var.push(t!(entry).path()); +- env_var.push("=/rust/deps"); + } +- cargo.env("RUSTC_CARGO_REGISTRY_SRC_TO_REMAP", env_var); + } + + // Enable usage of unstable features + +From 361f32e60788bb95011092a9b2a0472d4e6d38b1 Mon Sep 17 00:00:00 2001 +From: Alex Kiernan +Date: Sat, 30 Dec 2023 15:15:40 +0000 +Subject: [PATCH 2/2] Ignore blank + RUSTC_DEBUGINFO_MAP/RUSTC_CARGO_REGISTRY_SRC_TO_REMAP + +If RUSTC_DEBUGINFO_MAP or RUSTC_CARGO_REGISTRY_SRC_TO_REMAP are empty, +avoid inserting `--remap-path-prefix` with no associated argument. + +Signed-off-by: Alex Kiernan +--- + src/bootstrap/src/bin/rustc.rs | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/bootstrap/src/bin/rustc.rs b/src/bootstrap/src/bin/rustc.rs +index 38c55b2034496..a9dd687b75653 100644 +--- a/src/bootstrap/src/bin/rustc.rs ++++ b/src/bootstrap/src/bin/rustc.rs +@@ -161,13 +161,17 @@ fn main() { + } + + if let Ok(map) = env::var("RUSTC_DEBUGINFO_MAP") { +- cmd.arg("--remap-path-prefix").arg(&map); ++ if !map.is_empty() { ++ cmd.arg("--remap-path-prefix").arg(&map); ++ } + } + // The remap flags for Cargo registry sources need to be passed after the remapping for the + // Rust source code directory, to handle cases when $CARGO_HOME is inside the source directory. + if let Ok(maps) = env::var("RUSTC_CARGO_REGISTRY_SRC_TO_REMAP") { + for map in maps.split('\t') { +- cmd.arg("--remap-path-prefix").arg(map); ++ if !map.is_empty() { ++ cmd.arg("--remap-path-prefix").arg(map); ++ } + } + } + diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/rust/rust-1.75.0.ebuild b/sdk_container/src/third_party/coreos-overlay/dev-lang/rust/rust-1.75.0.ebuild index ee7770a89a7..88f11540e6d 100644 --- a/sdk_container/src/third_party/coreos-overlay/dev-lang/rust/rust-1.75.0.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/rust/rust-1.75.0.ebuild @@ -170,6 +170,7 @@ PATCHES=( "${FILESDIR}"/1.70.0-ignore-broken-and-non-applicable-tests.patch #"${FILESDIR}"/1.62.1-musl-dynamic-linking.patch # Only used by upstream Gentoo, fails for 1.75 "${FILESDIR}"/1.67.0-doc-wasm.patch + "${FILESDIR}"/1.75.0-119445.patch ) S="${WORKDIR}/${MY_P}-src"