From a341089601a9e70488c6ae3597e9955e61598879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Rakic?= Date: Sun, 15 Dec 2024 18:16:30 +0000 Subject: [PATCH 1/3] add given lib dir to `fill_libraries` error context --- collector/src/toolchain.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collector/src/toolchain.rs b/collector/src/toolchain.rs index d576fb05f..d2d01f58e 100644 --- a/collector/src/toolchain.rs +++ b/collector/src/toolchain.rs @@ -278,7 +278,7 @@ impl ToolchainComponents { /// Finds known library components in the given `dir` and stores them in `self`. fn fill_libraries(&mut self, dir: &Path) -> anyhow::Result<()> { let files: Vec<(PathBuf, String)> = fs::read_dir(dir) - .context("Cannot read lib dir to find components")? + .with_context(|| format!("Cannot read lib dir `{}` to find components", dir.display()))? .map(|entry| Ok(entry?)) .collect::>>()? .into_iter() From 2968c39594d0afa39443e2ac1b7d7c4d01efa776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Rakic?= Date: Sun, 15 Dec 2024 18:18:36 +0000 Subject: [PATCH 2/3] ensure rustc managed to print the sysroot --- collector/src/toolchain.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/collector/src/toolchain.rs b/collector/src/toolchain.rs index d2d01f58e..051524d5e 100644 --- a/collector/src/toolchain.rs +++ b/collector/src/toolchain.rs @@ -589,13 +589,15 @@ pub fn create_toolchain_from_published_version( } fn get_lib_dir_from_rustc(rustc: &Path) -> anyhow::Result { - let sysroot = Command::new(rustc) - .arg("--print") - .arg("sysroot") - .output()? - .stdout; - let sysroot_path = String::from_utf8_lossy(&sysroot); - + let output = Command::new(rustc).arg("--print").arg("sysroot").output()?; + if !output.status.success() { + anyhow::bail!( + "rustc failed to provide sysroot, exit status: {}\nstderr: {}", + output.status, + String::from_utf8_lossy(&output.stderr) + ); + } + let sysroot_path = String::from_utf8_lossy(&output.stdout); Ok(Path::new(sysroot_path.as_ref().trim()).join("lib")) } From 862da0837d90533e68dc49a91c6e285b37bbb185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Rakic?= Date: Sun, 15 Dec 2024 18:19:54 +0000 Subject: [PATCH 3/3] ensure rustc returned a sysroot that exists on disk --- collector/src/toolchain.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/collector/src/toolchain.rs b/collector/src/toolchain.rs index 051524d5e..503fa2d5d 100644 --- a/collector/src/toolchain.rs +++ b/collector/src/toolchain.rs @@ -598,7 +598,14 @@ fn get_lib_dir_from_rustc(rustc: &Path) -> anyhow::Result { ); } let sysroot_path = String::from_utf8_lossy(&output.stdout); - Ok(Path::new(sysroot_path.as_ref().trim()).join("lib")) + let lib_dir = Path::new(sysroot_path.as_ref().trim()).join("lib"); + if !lib_dir.exists() { + anyhow::bail!( + "rustc returned non-existent sysroot: `{}`", + lib_dir.display() + ); + } + Ok(lib_dir) } #[cfg(test)]