magicpak 1.4.0

Build minimal docker images without static linking
Documentation
use crate::base::{Error, Result};
use crate::domain::{Bundle, Executable};

fn bundle_shared_object_dependencies_impl(
    bundle: &mut Bundle,
    exe: &Executable,
    cc: &str,
    noload_resolver: bool,
) -> Result<()> {
    tracing::info!(
        exe = %exe.path().display(),
        "action: bundle shared object dependencies",
    );

    let cc_path = which::which(cc).map_err(|e| Error::ExecutableLocateFailed(cc.to_owned(), e))?;

    bundle.add(exe.interpreter());
    if noload_resolver {
        bundle.add(exe.dynamic_libraries_noload(cc_path)?);
    } else {
        bundle.add(exe.dynamic_libraries(cc_path)?);
    }

    Ok(())
}

pub fn bundle_shared_object_dependencies(
    bundle: &mut Bundle,
    exe: &Executable,
    cc: &str,
) -> Result<()> {
    bundle_shared_object_dependencies_impl(bundle, exe, cc, false)
}

pub fn bundle_shared_object_dependencies_noload(
    bundle: &mut Bundle,
    exe: &Executable,
    cc: &str,
) -> Result<()> {
    bundle_shared_object_dependencies_impl(bundle, exe, cc, true)
}