use super::audit::AuditWheelError;
use crate::auditwheel::Policy;
use anyhow::Result;
use lddtree::DependencyAnalyzer;
use std::path::{Path, PathBuf};
#[allow(clippy::result_large_err)]
pub fn find_external_libs(
artifact: impl AsRef<Path>,
policy: &Policy,
sysroot: PathBuf,
ld_paths: Vec<PathBuf>,
) -> Result<Vec<lddtree::Library>, AuditWheelError> {
let dep_analyzer = DependencyAnalyzer::new(sysroot).library_paths(ld_paths);
let deps = dep_analyzer
.analyze(artifact)
.map_err(AuditWheelError::DependencyAnalysisError)?;
let mut ext_libs = Vec::new();
for (_, lib) in deps.libraries {
let name = &lib.name;
if name.starts_with("ld-linux")
|| name == "ld64.so.2"
|| name == "ld64.so.1"
|| name.starts_with("ld-musl")
|| name.starts_with("libc.")
|| policy.lib_whitelist.contains(name)
{
continue;
}
ext_libs.push(lib);
}
Ok(ext_libs)
}