#!/bin/sh
#
# CONFIGURE - configure le Makefile de la distribution de pages de manuel "man-pages-fr".
#
# c. 2008-06-13
# r. 2008-06-14 1


# Copyright (c) 2008 Sébastien Boillod <sbb at tuxfamily dot org>.
#               2008 Alain Portal <alain dot portal at univ-montp2 dot fr>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

define () {
    # Imprime la valeur d'une définition.
    # define DEFINITION
    local DEF=$1
    echo $DEF | cut -f 2- -d "="
}

growl () {
    # Imprime un message d'erreur sur stderr et sort si le code n'est pas nul.
    # growl CODE, MESSAGE
    local ERR=$1 PR='(E)'; shift 1
    if [ "$1" ]; then
        # S'il y a un second argument, on utilise 'echo'.
        [ $ERR = 0 ] && PR='(W)'
        echo "$PR $*" 1>&2
    else
        # Autrement c'est 'cat' à partir de stdin.
        cat <&0 >&2
    fi
    [ $ERR = 0 ] || exit $ERR
}

require () {
    # Vérifie que la commande demandée est dans le PATH de l'utilisateur.
    # require COMMANDE
    local CMD=$1
    echo "Recherche de la commande '$CMD'..."
    if ! hash $CMD 2>/dev/null; then
        growl 1 "La commande requise '$CMD' est absente de votre PATH."
    fi
}

cd $(dirname $0)

unset MAN DOC PFX ISO FHS HLP DISTRIB ZIP ZPX SEL QUIET VERB
readonly DISTRIB="man-pages-fr" # le nom de la "distribution"
VERB="#"
for OPT in $@; do
    case $OPT in
        --bzip2) ZIP="bzip2" ; ZPX=".bz2";;
        --docdir=?*) DOC=$(define $OPT);;
        --encoding=?*) ISO=$(define $OPT) ;;
        --fhs) FHS=1 ;;
        --gzip) ZIP="gzip" ; ZPX=".gz" ;;
        --help) HLP=1 ;;
        --mandir=?*) MAN=$(define $OPT) ;;
        --prefix=?*) PFX=$(define $OPT) ;;
        --quiet) QUIET="#" ; VERB="" ;;
        --sections=?*) SEL=$(define $OPT) ;;
        *) growl 1 "Option « $OPT » inconnue. Consultez « $0 --help »."
    esac
done

if [ "$HLP" ]; then
    cat >&1 << EOH
Configuration de la distribution de pages de manuel '$DISTRIB'.

  Chemins d'installation :

    --prefix=<chemin>    Installer les pages de manuel dans <chemin>,
                         par défaut « /usr/local ».
    --mandir=<chemin>    Installer les pages de manuel dans <chemin>,
                         par défaut « <prefix>/man/fr ».
    --docdir=<chemin>    Installer la documentation associée à la distribution
                         dans <chemin>, par défaut « <prefix>/doc/$DISTRIB ».

  Autres options :

    --bzip2              Compresser les pages de manuel avec bzip2.
    --gzip               Compresser les pages de manuel avec gzip.
    --encoding=<code>    Convertir les pages de manuel vers l'encodage <code>.
                         Par défaut, les pages sont en UTF-8.
    --fhs                Se conformer aux recommandations du Linux Filesystem
                         Hierarchy Standard pour construire les chemins
                         d'installation.
    --help               Afficher cette aide.
    --quiet              Rendre l'installation moins bavarde.
    --sections=<liste>   N'installer que les sections indiquées dans <liste>,
                         séparées les unes des autres par des virgules.
                         Ex : « --sections=1,8 » pour n'installer que
                         les sections 1 et 8.

EOH
exit 0
fi
require sed
echo "Construction des chemins d'installation..."
[ "$PFX" ] || PFX="/usr/local"
if [ ! "$DOC" ]; then
    # Résolution du chemin d'installation des docs.
    if [ "$FHS" ]; then
        DOC="$PFX/share/doc/$DISTRIB"
    else
        DOC="$PFX/doc/$DISTRIB"
    fi
fi

if [ ! "$MAN" ]; then
    # Résolution du chemin d'installation des pages de manuels.
    if [ "$FHS" ]; then
        MAN="$PFX/share/man/fr"
    else
        MAN="$PFX/man/fr"
    fi
fi

if [ "$ISO" ]; then
    # Les tests pour la conversion éventuelles des pages.
    require iconv
    ISO=$(echo $ISO | sed "y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; s/^[^=]*=//")
    echo "Test de la pertinence de l'encodage requis..."
    if [ ! "$(iconv --list | sed "s,//,,g; /^$ISO$/!d")" ]; then
        # On vérifie que l'encodage de sortie est reconnu.
        growl 1 "L'encodage demandé ne semble par être reconnu par iconv. Consultez 'iconv --list'."
    fi
fi

if [ "$ZIP" ]; then
    # Le test attaché à la compression des pages
    require $ZIP; ZIP="$ZIP -f -9"
fi

if [ "$SEL" ]; then
    # Consolidation de la sélection des sections.
    SEL=$(echo " $SEL " | sed "s/,/ /g; / [^1-8] /d; s/^ \| $//g")
    [ "$SEL" ] || growl 1 "La liste de sections indiquées est incorrecte." 
else
    SEL="1 2 3 4 5 6 7 8" # les sections à installer par défaut.
fi

# Tout semble OK, allons-y pour la génération du Makefile...
echo "Génération du Makefile..."
sed "s/@encoding@/$ISO/; s/@zip@/$ZIP/; s/@append@/$ZPX/; s/@sections@/$SEL/;
     s/@quiet@/$QUIET/; s/@verbose@/$VERB/;
     s#@mandir@#$MAN#; s#@docdir@#$DOC#" Makefile.in > Makefile

# On imprime le rapport.
cat >&1 <<EOS

Le Makefile de la distribution de pages de manuel '$DISTRIB'
a été généré avec les paramètres suivants :

    Répertoire des pages de manuel :          $MAN
    Répertoire de la documentation associée : $DOC
    Sections à installer :                    $SEL
    Encodage des fichiers installés :         ${ISO:-"UTF-8"}
    Commande de compression utilisée :        ${ZIP:-"aucune"}

Si cela vous convient, procédez à l'installation en tapant « make ».
Autrement, consultez « $0 --help » pour obtenir la liste des
options de configuration disponibles.

EOS

exit 0

# FdF
