128 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			128 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
 | |
| source "$(dirname "$0")/lib/ulib/ulib" || exit 1
 | |
| urequire DEFAULTS
 | |
| 
 | |
| 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
 | 
