Donnie Berkholz wrote:
Brian Paul wrote:
"make install" uses two tools to install files: $(INSTALL) and
$(COPY_LIBS). $INSTALL is 'install' but $COPY_LIBS is "cp -f -d" (on
linux anyway).
We need COPY_LIBS because 'install' doesn't preserve symbolic links.
Unfortunately, not all versions of 'cp' support the -d option either.
Kind of a mess.
To fix all this I've written a shell script that replaces install. It
supports the -d and -m options and keeps symbolic links in tact. This
script will eliminate the need for INSTALL and COPY_LIBS.
I thought I'd post it here for review first. I'm not a bash script
expert by any means.
Some suggestions inline, mostly for portability and allowing spaces in
the destination or target paths.
Thanks for the tips, Donnie! New version attached.
How does one get the "Nth" command line parameter when N is a
variable? I wasn't able to figure that out.
As for the portability of 'ln -s', the Mesa Makefile system isn't used
on Windows and the mklib script uses ln -s on quite a few systems (no
problems reported so far).
-Brian
#!/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"
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
# Find last cmd line arg, it's the dest dir
for v in $@ ; do
DEST=$v
done
#echo dest is $DEST
# 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
# 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
PWDSAVE="$PWD"
cd "$DEST" # pushd
$SYMLINK "$TARGET" "$FILE"
cd "$PWDSAVE" # popd
elif [ -f "$FILE" ] ; then
#echo "$FILE" is a regular file
cp "$FILE" "$DEST"
if [ $MODE ] ; then
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"
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev