13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#!/bin/sh 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org# A minimal replacement for 'install' that supports installing symbolic links. 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org# Only a limited number of options are supported: 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org# -d dir Create a directory 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org# -m mode Sets a file's mode when installing 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org# If these commands aren't portable, we'll need some "if (arch)" type stuff 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgSYMLINK="ln -s" 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgMKDIR="mkdir -p" 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgRM="rm -f" 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgMODE="" 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgif [ "$1" = "-d" ] ; then 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # make a directory path 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org $MKDIR "$2" 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org exit 0 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgfi 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgif [ "$1" = "-m" ] ; then 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # set file mode 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MODE=$2 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org shift 2 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgfi 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org# install file(s) into destination 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgif [ $# -ge 2 ] ; then 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # Last cmd line arg is the dest dir 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for FILE in $@ ; do 34760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org DESTDIR="$FILE" 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org done 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # Loop over args, moving them to DEST directory 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org I=1 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for FILE in $@ ; do 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if [ $I = $# ] ; then 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # stop, don't want to install $DEST into $DEST 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org exit 0 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fi 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 45760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org DEST=$DESTDIR 46760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 47760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org # On CYGWIN, because DLLs are loaded by the native Win32 loader, 48760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org # they are installed in the executable path. Stub libraries used 49760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org # only for linking are installed in the library path 50760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org case `uname` in 51760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org CYGWIN*) 52760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org case $FILE in 53760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org *.dll) 54760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org DEST="$DEST/../bin" 55760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ;; 56760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org *) 57760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ;; 58760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org esac 59760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ;; 60760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org *) 61760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ;; 62760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org esac 63760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PWDSAVE=`pwd` 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # determine file's type 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if [ -h "$FILE" ] ; then 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org #echo $FILE is a symlink 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # Unfortunately, cp -d isn't universal so we have to 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # use a work-around. 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # Use ls -l to find the target that the link points to 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org LL=`ls -l "$FILE"` 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for L in $LL ; do 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TARGET=$L 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org done 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org #echo $FILE is a symlink pointing to $TARGET 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org FILE=`basename "$FILE"` 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # Go to $DEST and make the link 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cd "$DEST" # pushd 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org $RM "$FILE" 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org $SYMLINK "$TARGET" "$FILE" 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cd "$PWDSAVE" # popd 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org elif [ -f "$FILE" ] ; then 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org #echo "$FILE" is a regular file 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org # Only copy if the files differ 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ! cmp -s $FILE $DEST/`basename $FILE`; then 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org $RM "$DEST/`basename $FILE`" 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cp "$FILE" "$DEST" 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fi 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if [ $MODE ] ; then 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org FILE=`basename "$FILE"` 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org chmod $MODE "$DEST/$FILE" 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fi 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org echo "Unknown type of argument: " "$FILE" 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org exit 1 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fi 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org I=`expr $I + 1` 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org done 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org exit 0 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgfi 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org# If we get here, we didn't find anything to do 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgecho "Usage:" 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgecho " install -d dir Create named directory" 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgecho " install [-m mode] file [...] dest Install files in destination" 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 113