#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 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" } 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