#!/bin/bash

shopt -s nullglob
shopt -s extglob

prefixe=/usr/local

[ -z "$PREFIXE_UTILISER" ] || prefixe="$PREFIXE_UTILISER"
[ "x$1" = "x-r" ] && shift && prefixe="$1" && shift

if [ \( "x$1" = x \) -o ! -d "$prefixe/$1" ]
then
	echo '# Utiliser'
	echo '# Crée des liens de /usr/local/<x> vers /usr/local/<biblio>/<x>'
	echo '# © Guillaume Outters 2003-2004,2007'
	echo
	echo 'Utilisation: '"$0"' <biblio>'
	exit 1
fi

allerUtiliser()
{
	local i
	local j
	i="${1%/}"
	cd "$prefixe/${i%%/*}"
	j="${1//@/a}"
	#j="${j////@}" # Bash 3.0
	j="`echo "$j" | tr / @`"
	j="${j%%*([^@])}"
	j="${j//+([^@])/..}"
	i="$i/"
	utiliser "${j//@//}${1%%/*}" "${i#*/}"*
}

utiliser()
{
	local ou="$1"
	local a
	shift
	until [ $# = 0 ]
	do
		# On commence par virer les liens qu'une de nos précédentes versions
		# auraient placés, et pour les liens déjà utilisés par un autre
		# logiciel, on les remplace si possible par un dossier qu'on va se
		# partager.
		if [ -L "$prefixe/$1" ]
		then
			a="`ls -l "$prefixe/$1"`" # Vers où ça pointe pour l'heure?
			a="${a##*-> }"
			if [ "${a%%-*([^-])+([0-9])*([^-])*(-*([^-]))}" = "${ou%%-*([^-])+([0-9])*([^-])*(-*([^-]))}" ] # Même racine, mettons version plus ancienne, on écrase.
			then
				rm "$prefixe/$1"
			elif [ -d "$prefixe/`dirname "$1"`/$a" ] # La destination est un répertoire, on peut l'utiliser.
			then
				rm "$prefixe/$1"
				mkdir "$prefixe/$1"
				a="`echo "$a" | sed -e 's#\.\./##g'`"
				echo "On ménage $a…" >&2
				( allerUtiliser "$a" )
			else
				echo "$1 déjà occupé par $a" >&2
			fi
		fi
		if [ -d "$1" -a -d "$prefixe/$1" -a ! -L "$prefixe/$1" ]
		then
			utiliser "../$ou" "$1"/*
		elif [ \( ! -e "$prefixe/$1" \) ]
		then
			ln -s "$ou/$1" "$prefixe/$1"
		else
			echo Impossible d\'écraser $1
		fi
		shift
	done
}

allerUtiliser "$1"
