##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ## Charger les librairies de ulib. Nécessite bash. ##@cooked nocomments # Ce fichier doit être *sourcé*. Si ce fichier n'est pas sourcé, alors le # répertoire ulib doit être disponible dans le répertoire du script qui inclue # ce fichier. Ceci peut-être fait avec ulibsync. # Ensuite, des librairies individuelles de ulib peuvent être chargées avec la # fonction urequire(), e.g. # source /etc/ulib && urequire DEFAULTS conf || exit 1 # 'DEFAULTS' permet de charger base, pretty, sysinfos et compat. function eerror() { echo "error: $*" 1>&2; } function die() { [ -n "$*" ] && eerror "$*"; exit 1; } ## Calculer l'emplacement de ulib # il est possible de forcer la valeur de ULIBDIR avec FORCED_ULIBDIR. ceci est # utile avec bash 2.x qui ne supporte pas la variable BASH_SOURCE ULIBDIR="${FORCED_ULIBDIR:-@@dest@@/ulib}" if [ "$ULIBDIR" = "@@""dest""@@/ulib" ]; then # La valeur "@@"dest"@@" n'est remplacée que dans la copie de ce script # faite dans /etc. Sinon, il faut toujours faire le calcul. Cela permet de # déplacer la librairie n'importe ou sur le disque, ce qui est # particulièrement intéressant quand on fait du déploiement. ULIBDIR="${BASH_SOURCE[0]}" if [ -n "$ULIBDIR" -a -f "$ULIBDIR" ]; then # Fichier sourcé ULIBDIR="$(dirname "$ULIBDIR")" else # Fichier non sourcé. Tout exprimer par rapport au script courant ULIBDIR="$(dirname "$0")/ulib" fi fi ULIBDIR="$(cd "$ULIBDIR"; pwd)" ULIBDIRS=("$ULIBDIR") # marqueur pour tester si ulib a été chargé. Il faut avoir $ULIBINIT==$ULIBDIR ULIBINIT="$ULIBDIR" # liste des fichiers sourcés par urequire [ -n "$ULIBPROVIDED" ] || ULIBPROVIDED=(ulib) function uprovided() { # Tester si la ulibrairie $1 a déjà été chargé par urequire local ulib_ for ulib_ in "${ULIBPROVIDED[@]}"; do [ "$ulib_" == "$1" ] && return 0 done return 1 } function uprovide() { # Spécifier que la ulibrairie $1 a été sourcée, ou prétendre que c'est le # cas. uprovided "$1" && return 0 ULIBPROVIDED=("${ULIBPROVIDED[@]}" "$1") } function urequire() { # Sourcer un fichier recherché dans ULIBDIRS # Si le fichier est DEFAULTS, charger base, pretty, sysinfos et compat à la # place local ulib_ ulibdir_ found_ [ -n "$*" ] || set DEFAULTS for ulib_ in "$@"; do found_= for ulibdir_ in "${ULIBDIRS[@]}"; do if [ -f "$ulibdir_/$ulib_" ]; then found_=1 if ! uprovided "$ulib_"; then uprovide "$ulib_" source "$ulibdir_/$ulib_" || die fi break elif [ "$ulib_" == "DEFAULTS" ]; then found_=1 for ulib_ in base pretty sysinfos compat; do if ! uprovided "$ulib_"; then uprovide "$ulib_" source "$ulibdir_/$ulib_" || die fi done break fi done [ -n "$found_" ] || die "Unable to find $ulib_ in ${ULIBDIR[*]}" done } function ulib_add() { # Ajouter $1 au chemin de recherche de urequire [ -d "$1" ] && ULIBDIRS=("${ULIBDIRS[@]}" "$(cd "$1"; pwd)") } function ulib_sync() { # Synchroniser les librairies ulib dans le répertoire $1 destdir="$(abspath "${1:-.}")" [ "$destdir/ulib" != "$ULIBDIR" ] && cpdirnovcs "$ULIBDIR" "$destdir/ulib" }