#!/usr/bin/env bash 
set -u

ROOT_DIR="$1"
# Trouver le dossier du package (ex: pystopt)
TARGET_DIR=$(find "$ROOT_DIR" -name "libStOpt.dylib" -exec dirname {} + | head -n 1)

echo "--- ASPIRATION EXHAUSTIVE DES DÉPENDANCES ---"
cd "$TARGET_DIR"

# Fonction récursive pour aspirer les dépendances
aspiration_recursive() {
    local file=$1
    echo "  Analyse de : $file"

    # 1. Lister les dépendances (on exclut les libs système Apple et les liens déjà relatifs)
    deps=$(otool -L "$file" | awk '{print $1}' | grep -E "/opt/homebrew|/usr/local|@rpath" | grep -v "$file")

    for dep in $deps; do
        lib_name=$(basename "$dep")

        # 2. Si c'est une lib externe (Brew/Local), on la COPIE si elle n'est pas déjà là
        if [[ "$dep" == /opt/homebrew/* ]] || [[ "$dep" == /usr/local/* ]]; then
            if [ ! -f "$lib_name" ]; then
                echo "    [COPIE] $dep -> $TARGET_DIR/$lib_name"
                cp "$dep" .
                chmod 755 "$lib_name"
                # On rend la lib copiée autonome
                install_name_tool -id "@loader_path/$lib_name" "$lib_name"
                # On descend récursivement dans ses propres dépendances (ex: Boost -> Zlib)
                aspiration_recursive "$lib_name"
            fi
        fi

        # 3. ON FORCE LE LIEN RELATIF (C'est la garantie delocate)
        # On remplace l'ancien chemin (absolu ou @rpath) par un lien local direct
        echo "    [LINK] $dep ==> @loader_path/$lib_name"
        install_name_tool -change "$dep" "@loader_path/$lib_name" "$file" || true
    done
}

# Appliquer l'aspiration sur les entrées principales
for entry in *.dylib *.so; do
    [ -e "$entry" ] || continue
    # Fix ID pour les dylibs internes
    if [[ "$entry" == *.dylib ]]; then
        install_name_tool -id "@loader_path/$entry" "$entry" || true
    fi
    aspiration_recursive "$entry"
done

# Nettoyage final : s'assurer que @loader_path est dans le RPATH de tout le monde
for f in *.dylib *.so; do
    install_name_tool -add_rpath "@loader_path" "$f" 2>/dev/null || true
done

echo "--- CONTENU FINAL DE LA WHEEL ---"
ls -lh
