Error when `ldd` is not in path (#506)

Closes https://github.com/astral-sh/puffin/issues/493.
This commit is contained in:
Charlie Marsh 2023-11-27 21:55:04 -08:00 committed by GitHub
parent 8855f44b5f
commit 3d47d2b1da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 7 deletions

View File

@ -12,12 +12,18 @@ use tracing::trace;
// glibc version is taken from std/sys/unix/os.rs
fn glibc_version_from_ldd() -> Result<Os, PlatformError> {
trace!("falling back to `ldd --version` to detect OS libc version");
trace!("Falling back to `ldd --version` to detect OS libc version");
let output = Command::new("ldd")
.args(["--version"])
.output()
.expect("failed to execute ldd");
let output_str = std::str::from_utf8(&output.stdout).unwrap();
.map_err(|err| {
PlatformError::OsVersionDetectionError(format!("Failed to execute ldd: {err}"))
})?;
let output_str = std::str::from_utf8(&output.stdout).map_err(|err| {
PlatformError::OsVersionDetectionError(format!(
"Failed to parse ldd output as UTF-8: {err}"
))
})?;
let version_str = ldd_output_to_version_str(output_str)?;
parse_glibc_version(version_str).ok_or_else(|| {
@ -51,10 +57,10 @@ pub(crate) fn detect_linux_libc() -> Result<Os, PlatformError> {
let libc = find_libc()?;
let linux = if let Ok(Some((major, minor))) = get_musl_version(&libc) {
Os::Musllinux { major, minor }
} else if let Some(osversion) = detect_linux_libc_from_ld_symlink(&libc) {
return Ok(osversion);
} else if let Ok(osversion) = glibc_version_from_ldd() {
return Ok(osversion);
} else if let Some(os_version) = detect_linux_libc_from_ld_symlink(&libc) {
return Ok(os_version);
} else if let Ok(os_version) = glibc_version_from_ldd() {
return Ok(os_version);
} else {
let msg = "\
Couldn't detect either glibc version nor musl libc version, \