Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #!/bin/sh
  2.  
  3.  
  4. # A minimal replacement for 'install' that supports installing symbolic links.
  5. # Only a limited number of options are supported:
  6. # -d dir          Create a directory
  7. # -m mode         Sets a file's mode when installing
  8.  
  9.  
  10. # If these commands aren't portable, we'll need some "if (arch)" type stuff
  11. SYMLINK="ln -s"
  12. MKDIR="mkdir -p"
  13. RM="rm -f"
  14.  
  15. MODE=""
  16.  
  17. if [ "$1" = "-d" ] ; then
  18.         # make a directory path
  19.         $MKDIR "$2"
  20.         exit 0
  21. fi
  22.  
  23. if [ "$1" = "-m" ] ; then
  24.         # set file mode
  25.         MODE=$2
  26.         shift 2
  27. fi
  28.  
  29. # install file(s) into destination
  30. if [ $# -ge 2 ] ; then
  31.  
  32.         # Last cmd line arg is the dest dir
  33.         for FILE in $@ ; do
  34.                 DESTDIR="$FILE"
  35.         done
  36.  
  37.         # Loop over args, moving them to DEST directory
  38.         I=1
  39.         for FILE in $@ ; do
  40.                 if [ $I = $# ] ; then
  41.                         # stop, don't want to install $DEST into $DEST
  42.                         exit 0
  43.                 fi
  44.  
  45.                 DEST=$DESTDIR
  46.  
  47.                 # On CYGWIN, because DLLs are loaded by the native Win32 loader,
  48.                 # they are installed in the executable path.  Stub libraries used
  49.                 # only for linking are installed in the library path
  50.                 case `uname` in
  51.                     CYGWIN*)
  52.                         case $FILE in
  53.                             *.dll)
  54.                                 DEST="$DEST/../bin"
  55.                                 ;;
  56.                             *)
  57.                                 ;;
  58.                         esac
  59.                         ;;
  60.                     *)
  61.                         ;;
  62.                 esac
  63.  
  64.                 PWDSAVE=`pwd`
  65.  
  66.                 # determine file's type
  67.                 if [ -h "$FILE" ] ; then
  68.                         #echo $FILE is a symlink
  69.                         # Unfortunately, cp -d isn't universal so we have to
  70.                         # use a work-around.
  71.  
  72.                         # Use ls -l to find the target that the link points to
  73.                         LL=`ls -l "$FILE"`
  74.                         for L in $LL ; do
  75.                                 TARGET=$L
  76.                         done
  77.                         #echo $FILE is a symlink pointing to $TARGET
  78.  
  79.                         FILE=`basename "$FILE"`
  80.                         # Go to $DEST and make the link
  81.                         cd "$DEST"        # pushd
  82.                                 $RM "$FILE"
  83.                                 $SYMLINK "$TARGET" "$FILE"
  84.                         cd "$PWDSAVE"     # popd
  85.  
  86.                 elif [ -f "$FILE" ] ; then
  87.                         #echo "$FILE" is a regular file
  88.                         # Only copy if the files differ
  89.                         if ! cmp -s $FILE $DEST/`basename $FILE`; then
  90.                                 $RM "$DEST/`basename $FILE`"
  91.                                 cp "$FILE" "$DEST"
  92.                         fi
  93.                         if [ $MODE ] ; then
  94.                                 FILE=`basename "$FILE"`
  95.                                 chmod $MODE "$DEST/$FILE"
  96.                         fi
  97.                 else
  98.                         echo "Unknown type of argument: " "$FILE"
  99.                         exit 1
  100.                 fi
  101.  
  102.                 I=`expr $I + 1`
  103.         done
  104.  
  105.         exit 0
  106. fi
  107.  
  108. # If we get here, we didn't find anything to do
  109. echo "Usage:"
  110. echo "  install -d dir                      Create named directory"
  111. echo "  install [-m mode] file [...] dest   Install files in destination"
  112.  
  113.