

package provide pist 1.0

## pist_guessTclib -- recherche la tcllib et positionne env(TCLLIB) et ...
# 
# Retourne le répertoire de la librairie tcllib (pour auto_path).
# Si non trouvé : affiche un message et exit.
# 
# Syntaxe :
#   pist_guessTclib appliName dir
# 
# Recherche le répertoire de la tcllib (pour ajout dans l'auto_path)
# et positionne :
#   - la variable d'environnement TCLLIB
#   - la variable [set $appliName](tcllib)
# 
# arguments :
#   - appliName : nom du tableau à remplire avec l'élément (tcllib)
#   - dir : répertoire 
# 
# La tcllib est recherché dans l'ordre 
# - si le package "base64" est accessible, c'est fini : [info lib]
#   est retourné
# - retourne env(TCLLIB) si existe,
# - recherche dans l'ordre dans :
#    - [info lib]/.. (à coté de la librairie standard de tcl)
#    - <dir>/lib     (sous répertoire lib de l'argument)
#    - <dir>
#    - <dir>/..
#    - <dir>/../..
#    - <dir>/../../..
# 
# Effet de bord :
#   - positionnement de la variable d'envronnement TCLLIB (si absente)
#   - positionnement de la variable <appliName>(tcllib)
# 
# Historique : 26/10/01 : création
# 
proc pist_guessTclib { appliName  dir } {

global env auto_path
upvar #0 $appliName appli
   
    if { ![catch {package require base64}] } {
    
        # rien à faire : la tcllib est déja connu par cette distrib tcl
        # 
        set appli(tcllib) [info lib]
        
    } elseif { [info exists ::env(TCLLIB)] } {
    
        # L'utilisateur a précisé la tcllib à  utiliser 
        lappend auto_path $env(TCLLIB)
        set appli(tcllib) $env(TCLLIB)
        
    } else {
    
        # tcllib n'est pas installée en standard dans cette distrib de tcl.
        # On va donc essayer de la trouver au voisinage de appli.
        # Les packages de la tcllib peuvent être rangés soit directement sous
        # le nom "tcllib/" soit dans un sous-répertoire du style
        # "tclib/modules/"
        # appli accepte choisira une librairie de la forme 
        #   .../tcllib-1.2a/modules/
        # de préférence à 
        #   .../tcllib-1.1/modules/
        # 
        foreach dir  [ list                                         \
                        [file dir [info lib] ]                      \
                        [file join $dir lib]                        \
                        $dir                                        \
                        [file dir $dir]                             \
                        [file dir [file dir $dir]]                  \
                        [file dir [file dir [file dir $dir]]]       \
        ] {                                                       
            foreach tcllib  [lsort -dictionary -decreasing [concat  \
                    [glob -nocomplain -join $dir tcllib* modules]   \
                    [glob -nocomplain -join $dir tcllib*]           \
            ]]  {
                set pkgFile [file join $tcllib base64 pkgIndex.tcl]
                if { [file isfile $pkgFile] } {
                    set appli(tcllib) [file dir [file dir $pkgFile]]
                    break
                }
            }
            if { [info exists appli(tcllib)] } {
                break
            }
        }
        if { ![info exists appli(tcllib)] } {
            set msg      "Impossible de trouver la librairie tcllib \n"
            append msg   "   - ni dans la distribution de $appliName "
            append msg                              "($dir),\n"
            append msg   "   - ni au voisinage de $appliName,\n"
            append msg   "   - ni au voisinage de la librairie de [info lib],\n"
            puts stderr \n$msg\n
            exit
        }
        lappend auto_path $appli(tcllib)
        # Pour gagner du temps par les process suivant :
        set ::env(TCLLIB) $appli(tcllib)
        
    }
    return  $appli(tcllib)
}

# ./
