rldd_minimal 1.2.0

Minimalistic recursive ELF dependency resolver for Linux, BSDs, and Solaris.
Documentation
use super::*;

#[test]
fn test_verbose_deps() -> Result<(), Box<dyn std::error::Error>> {
    let select = 1;

    #[cfg(feature = "enable_ld_library_path")]
    {
        let ld_path = "/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib";
        unsafe { std::env::set_var("LD_LIBRARY_PATH", ld_path); }
    }

    let home = env!("HOME");

    let path = match select {
        1 => "/bin/ls",
        2 => "/etc/os-release",
        3 => "file_not_found",
        4 => "/usr/lib/libcuda.so.570.169",
        5 => "/usr/lib64/libcuda.so.570.169",
        6 => "/usr/bin/ocenaudio",
        7 => &format!("{}/.ALPack/bin/busybox", home),
        _ => panic!("invalid selection"),
    };

    let deps = rldd_minimal(path)?;
    let (mut dnf, mut df) = (0, 0);

    println!("\nRLDD_MINIMAL TEST\n");
    match deps.elf_type {
        ElfType::Dynamic => println!("Dynamic: depends on shared libs"),
        ElfType::Static => println!("Static: all libs included"),
        ElfType::Pie => println!("PIE: position independent executable"),
        ElfType::Invalid => println!("Invalid ELF"),
    }

    match deps.arch {
        ElfArch::Elf32 => println!("Elf32: Architecture 32-bit"),
        ElfArch::Elf64 => println!("Elf64: Architecture 64-bit"),
        ElfArch::Unknown => println!("Unknown ELF")
    }

    println!("\nRecursive dependencies for {}:", path);
    for (i, (lib, path_or_status)) in deps.deps.iter().enumerate() {
        let num = i + 1;
        let colorized = if path_or_status == "not found" || path_or_status == "arch mismatch" {
            format!("\x1b[1;31m{}\x1b[0m", path_or_status)
        } else if path_or_status.starts_with("/lib") || path_or_status.starts_with("/usr") {
            format!("\x1b[1;32m{}\x1b[0m", path_or_status)
        } else {
            format!("\x1b[1;33m{}\x1b[0m", path_or_status)
        };

        println!("{num}. {} => {}", lib, colorized);

        match path_or_status.as_str() {
            "not found" | "arch mismatch" => dnf += 1,
            _ => df += 1,
        }
    }
    println!("\nDependencies found: {df}");
    println!("Dependencies not found: {dnf}\n");
    Ok(())
}