90 lines
1.4 KiB
Bash
90 lines
1.4 KiB
Bash
#!/bin/sh
|
|
#
|
|
# install-symlink source destination destdir
|
|
#
|
|
|
|
SYMLINKS=symlinks
|
|
LN_S="@LN_S@"
|
|
RM="@RM@"
|
|
FORCE_RELATIVE=NO
|
|
FORCE_ABSOLUTE=NO
|
|
|
|
while echo $1 | grep -q -- ^- ;
|
|
do
|
|
case $1 in
|
|
--relative)
|
|
FORCE_RELATIVE=YES
|
|
;;
|
|
--absolute)
|
|
FORCE_ABSOLUTE=YES
|
|
;;
|
|
--debian)
|
|
FORCE_ABSOLUTE=NO
|
|
FORCE_RELATIVE=NO
|
|
;;
|
|
--symlinks=*)
|
|
SYMLINKS=$(echo $1 | sed -e 's/--symlinks=//')
|
|
;;
|
|
*)
|
|
echo "Unknown option $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift;
|
|
done
|
|
|
|
|
|
FIX_SYMLINK="$SYMLINKS -c"
|
|
|
|
SRC="$1"
|
|
DEST="$2"
|
|
DESTDIR="$3"
|
|
|
|
if ! echo $SRC | grep -q ^/ ; then
|
|
echo $SRC: Source pathname must be absolute
|
|
exit 1
|
|
fi
|
|
|
|
if ! echo $DEST | grep -q ^/ ; then
|
|
echo $DEST: Destination pathname must be absolute
|
|
exit 1
|
|
fi
|
|
|
|
if ! test -e "$DESTDIR$SRC" ; then
|
|
echo $DESTDIR$SRC: file or directory does not exist
|
|
exit 1
|
|
fi
|
|
|
|
$RM -f "$DESTDIR$DEST"
|
|
|
|
if test "$LN_S" != "ln -s" ; then
|
|
$LN_S "$DESTDIR$SRC" "$DESTDIR$DEST"
|
|
exit 0
|
|
fi
|
|
|
|
if test $(dirname "$SRC") = $(dirname "$DEST") ; then
|
|
$LN_S "$(basename "$SRC")" "$DESTDIR$DEST"
|
|
exit 0
|
|
fi
|
|
|
|
TOP_SRC=$(echo $SRC | awk -F/ '{print $2}')
|
|
TOP_DEST=$(echo $DEST | awk -F/ '{print $2}')
|
|
|
|
if test $FORCE_RELATIVE = YES ; then
|
|
TOP_SRC=FORCE
|
|
TOP_DEST=FORCE
|
|
fi
|
|
|
|
if test $FORCE_ABSOLUTE = YES ; then
|
|
TOP_SRC=FORCE
|
|
TOP_DEST=FORCE_ABSOLUTE
|
|
fi
|
|
|
|
if test $TOP_SRC != $TOP_DEST ; then
|
|
$LN_S "$SRC" "$DESTDIR$DEST"
|
|
else
|
|
$LN_S "$DESTDIR$SRC" "$DESTDIR$DEST"
|
|
$FIX_SYMLINK "$DESTDIR$DEST"
|
|
fi
|
|
|