130 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | 
						|
 | 
						|
function display_help() {
 | 
						|
    uecho "$scriptname: Créer une archive auto-extractible qui installe son contenu avec uinst
 | 
						|
 | 
						|
USAGE
 | 
						|
    $scriptname [options] [--bare] src cmd...
 | 
						|
    $scriptname [options] [--uinst] src
 | 
						|
 | 
						|
OPTIONS
 | 
						|
    --bare
 | 
						|
        Installer le contenu de l'archive en lançant la commande 'cmd...' avec
 | 
						|
        le répertoire courant étant le contenu de l'archive. Typiquement, ce
 | 
						|
        sera une commande de forme './script', où script est un fichier situé à
 | 
						|
        la racine de l'archive
 | 
						|
        Dans ce mode d'installation, l'option --self-contained est ignorée.
 | 
						|
    --uinst
 | 
						|
        Installer le contenu de l'archive avec uinst (par défaut)
 | 
						|
    -o dest
 | 
						|
        Spécifier le fichier de sortie. Par défaut, il s'agit de
 | 
						|
        \${src}-installer.run
 | 
						|
    --tmp-archive
 | 
						|
        Spécifier qu'il s'agit d'une archive temporaire. Cette archive
 | 
						|
        s'auto-détruit après utilisation.
 | 
						|
    --self-contained
 | 
						|
        Spécifier que l'archive doit pouvoir s'installer même sur un système sur
 | 
						|
        lequel nutools n'est pas installé. Cette archive contiendra une copie
 | 
						|
        locale de ulib et uinst.sh"
 | 
						|
}
 | 
						|
 | 
						|
source "$(dirname "$0")/ulib/ulib" &&
 | 
						|
urequire DEFAULTS ||
 | 
						|
exit 1
 | 
						|
 | 
						|
MAKESELFDIR="$scriptdir/lib/makeself-2.1.5"
 | 
						|
 | 
						|
sfxtype=uinst
 | 
						|
mode=755
 | 
						|
parse_opts "${PRETTYOPTS[@]}" \
 | 
						|
    --help '$exit_with display_help' \
 | 
						|
    --bare sfxtype=bare \
 | 
						|
    --uinst sfxtype=uinst \
 | 
						|
    -o: dest \
 | 
						|
    -m: mode= \
 | 
						|
    --tmp-archive tmp_archive \
 | 
						|
    --self-contained self_contained \
 | 
						|
    @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | 
						|
 | 
						|
src="$(abspath "${1:-.}")"
 | 
						|
srcname="$(basename "$src")"
 | 
						|
 | 
						|
################################################################################
 | 
						|
if [ "$sfxtype" == "uinst" ]; then
 | 
						|
    ac_set_tmpdir archivedir
 | 
						|
    conf="$archivedir/uinst_prepare.conf"
 | 
						|
    
 | 
						|
    ## préparer l'installation
 | 
						|
    "$scriptdir/uinst" --prepare-1s "$archivedir" \
 | 
						|
        --prepare-conf "$conf" \
 | 
						|
        ${self_contained:+--prepare-with-ulib} \
 | 
						|
        "$src" || die
 | 
						|
    
 | 
						|
    # la commande ci-dessus crée un fichier de configuration avec la variable
 | 
						|
    # prepare_name qui contient le *nom* du répertoire ou du fichier dans
 | 
						|
    # $archivedir à installer
 | 
						|
    source "$conf"
 | 
						|
    [ -n "$dest" ] || dest="${prepare_name}_installer.run"
 | 
						|
    
 | 
						|
    # si le fichier à générer se trouve dans le répertoire à installer, créer
 | 
						|
    # l'archive dans le répertoire au-dessus
 | 
						|
    dest="$(abspath "$dest")"
 | 
						|
    if [ "$src" == "$dest" -o "${dest#$src/}" != "$dest" ]; then
 | 
						|
        dest="$(dirname "$src")/$(basename "$dest")"
 | 
						|
    fi
 | 
						|
    
 | 
						|
    if [ -f "$dest" -a -z "$tmp_archive" ]; then
 | 
						|
        ask_yesno "Voulez-vous remplacer l'archive existante $(ppath "$dest")?" O || exit 0
 | 
						|
    fi
 | 
						|
    
 | 
						|
    ## arguments pour la création de l'archive
 | 
						|
    args=("$MAKESELFDIR/makeself.sh" --quiet ${tmp_archive:+--tmp-archive} --nox11
 | 
						|
        "$archivedir" "$dest"
 | 
						|
        "$srcname installer"
 | 
						|
        )
 | 
						|
 | 
						|
    if [ -n "$self_contained" ]; then
 | 
						|
        args=("${args[@]}" /bin/sh ./uinst.sh --prepare-2s)
 | 
						|
    else
 | 
						|
        args=("${args[@]}" uinst)
 | 
						|
    fi
 | 
						|
    args=("${args[@]}" "$prepare_name")
 | 
						|
 | 
						|
################################################################################
 | 
						|
elif [ "$sfxtype" == "bare" ]; then
 | 
						|
    shift
 | 
						|
    [ -n "$*" ] || die "Vous devez spécifier la commande à lancer pour installer l'archive"
 | 
						|
    [ -d "$src" ] || die "$src doit être un répertoire"
 | 
						|
    [ -n "$dest" ] || dest="${srcname}_installer.run"
 | 
						|
 | 
						|
    # si le fichier à générer se trouve dans le répertoire à installer, créer
 | 
						|
    # l'archive dans le répertoire au-dessus
 | 
						|
    dest="$(abspath "$dest")"
 | 
						|
    if [ "$src" == "$dest" -o "${dest#$src/}" != "$dest" ]; then
 | 
						|
        dest="$(dirname "$src")/$(basename "$dest")"
 | 
						|
    fi
 | 
						|
    
 | 
						|
    if [ -f "$dest" -a -z "$tmp_archive" ]; then
 | 
						|
        ask_yesno "Voulez-vous remplacer l'archive existante $(ppath "$dest")?" O || exit 0
 | 
						|
    fi
 | 
						|
 | 
						|
    ## arguments pour la création de l'archive
 | 
						|
    args=("$MAKESELFDIR/makeself.sh" --quiet ${tmp_archive:+--tmp-archive} --nox11
 | 
						|
        "$src" "$dest"
 | 
						|
        "$srcname installer"
 | 
						|
        "$@"
 | 
						|
    )
 | 
						|
fi
 | 
						|
 | 
						|
################################################################################
 | 
						|
# créer l'archive
 | 
						|
 | 
						|
estep "Création de l'archive $(ppath "$dest")"
 | 
						|
"${args[@]}"
 | 
						|
 | 
						|
# l'archive doit être exécutable
 | 
						|
[ -n "$mode" ] && chmod "$mode" "$dest"
 | 
						|
 | 
						|
exit 0
 |