113 lines
2.5 KiB
Plaintext
113 lines
2.5 KiB
Plaintext
|
#!/bin/sh
|
||
|
|
||
|
|
||
|
# A minimal replacement for 'install' that supports installing symbolic links.
|
||
|
# Only a limited number of options are supported:
|
||
|
# -d dir Create a directory
|
||
|
# -m mode Sets a file's mode when installing
|
||
|
|
||
|
|
||
|
# If these commands aren't portable, we'll need some "if (arch)" type stuff
|
||
|
SYMLINK="ln -s"
|
||
|
MKDIR="mkdir -p"
|
||
|
RM="rm -f"
|
||
|
|
||
|
MODE=""
|
||
|
|
||
|
if [ "$1" = "-d" ] ; then
|
||
|
# make a directory path
|
||
|
$MKDIR "$2"
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
if [ "$1" = "-m" ] ; then
|
||
|
# set file mode
|
||
|
MODE=$2
|
||
|
shift 2
|
||
|
fi
|
||
|
|
||
|
# install file(s) into destination
|
||
|
if [ $# -ge 2 ] ; then
|
||
|
|
||
|
# Last cmd line arg is the dest dir
|
||
|
for FILE in $@ ; do
|
||
|
DESTDIR="$FILE"
|
||
|
done
|
||
|
|
||
|
# Loop over args, moving them to DEST directory
|
||
|
I=1
|
||
|
for FILE in $@ ; do
|
||
|
if [ $I = $# ] ; then
|
||
|
# stop, don't want to install $DEST into $DEST
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
DEST=$DESTDIR
|
||
|
|
||
|
# On CYGWIN, because DLLs are loaded by the native Win32 loader,
|
||
|
# they are installed in the executable path. Stub libraries used
|
||
|
# only for linking are installed in the library path
|
||
|
case `uname` in
|
||
|
CYGWIN*)
|
||
|
case $FILE in
|
||
|
*.dll)
|
||
|
DEST="$DEST/../bin"
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
PWDSAVE=`pwd`
|
||
|
|
||
|
# determine file's type
|
||
|
if [ -h "$FILE" ] ; then
|
||
|
#echo $FILE is a symlink
|
||
|
# Unfortunately, cp -d isn't universal so we have to
|
||
|
# use a work-around.
|
||
|
|
||
|
# Use ls -l to find the target that the link points to
|
||
|
LL=`ls -l "$FILE"`
|
||
|
for L in $LL ; do
|
||
|
TARGET=$L
|
||
|
done
|
||
|
#echo $FILE is a symlink pointing to $TARGET
|
||
|
|
||
|
FILE=`basename "$FILE"`
|
||
|
# Go to $DEST and make the link
|
||
|
cd "$DEST" # pushd
|
||
|
$RM "$FILE"
|
||
|
$SYMLINK "$TARGET" "$FILE"
|
||
|
cd "$PWDSAVE" # popd
|
||
|
|
||
|
elif [ -f "$FILE" ] ; then
|
||
|
#echo "$FILE" is a regular file
|
||
|
# Only copy if the files differ
|
||
|
if ! cmp -s $FILE $DEST/`basename $FILE`; then
|
||
|
$RM "$DEST/`basename $FILE`"
|
||
|
cp "$FILE" "$DEST"
|
||
|
fi
|
||
|
if [ $MODE ] ; then
|
||
|
FILE=`basename "$FILE"`
|
||
|
chmod $MODE "$DEST/$FILE"
|
||
|
fi
|
||
|
else
|
||
|
echo "Unknown type of argument: " "$FILE"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
I=`expr $I + 1`
|
||
|
done
|
||
|
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# If we get here, we didn't find anything to do
|
||
|
echo "Usage:"
|
||
|
echo " install -d dir Create named directory"
|
||
|
echo " install [-m mode] file [...] dest Install files in destination"
|
||
|
|