home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / readline.zip / readline-2.1 / support / install.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  1995-03-27  |  5KB  |  236 lines

  1. #!/bin/sh
  2. #
  3. # install - install a program, script, or datafile
  4. # This comes from X11R5.
  5. #
  6. # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
  7. #
  8. # This script is compatible with the BSD install script, but was written
  9. # from scratch.
  10. #
  11.  
  12. # set DOITPROG to echo to test this script
  13.  
  14. # Don't use :- since 4.3BSD and earlier shells don't like it.
  15. doit="${DOITPROG-}"
  16.  
  17.  
  18. # put in absolute paths if you don't have them in your path; or use env. vars.
  19.  
  20. mvprog="${MVPROG-mv}"
  21. cpprog="${CPPROG-cp}"
  22. chmodprog="${CHMODPROG-chmod}"
  23. chownprog="${CHOWNPROG-chown}"
  24. chgrpprog="${CHGRPPROG-chgrp}"
  25. stripprog="${STRIPPROG-strip}"
  26. rmprog="${RMPROG-rm}"
  27. mkdirprog="${MKDIRPROG-mkdir}"
  28.  
  29. tranformbasename=""
  30. transform_arg=""
  31. instcmd="$mvprog"
  32. chmodcmd="$chmodprog 0755"
  33. chowncmd=""
  34. chgrpcmd=""
  35. stripcmd=""
  36. rmcmd="$rmprog -f"
  37. mvcmd="$mvprog"
  38. src=""
  39. dst=""
  40. dir_arg=""
  41.  
  42. while [ x"$1" != x ]; do
  43.     case $1 in
  44.     -c) instcmd="$cpprog"
  45.         shift
  46.         continue;;
  47.  
  48.     -d) dir_arg=true
  49.         shift
  50.         continue;;
  51.  
  52.     -m) chmodcmd="$chmodprog $2"
  53.         shift
  54.         shift
  55.         continue;;
  56.  
  57.     -o) chowncmd="$chownprog $2"
  58.         shift
  59.         shift
  60.         continue;;
  61.  
  62.     -g) chgrpcmd="$chgrpprog $2"
  63.         shift
  64.         shift
  65.         continue;;
  66.  
  67.     -s) stripcmd="$stripprog"
  68.         shift
  69.         continue;;
  70.  
  71.     -t=*) transformarg=`echo $1 | sed 's/-t=//'`
  72.         shift
  73.         continue;;
  74.  
  75.     -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
  76.         shift
  77.         continue;;
  78.  
  79.     *)  if [ x"$src" = x ]
  80.         then
  81.         src=$1
  82.         else
  83.         # this colon is to work around a 386BSD /bin/sh bug
  84.         :
  85.         dst=$1
  86.         fi
  87.         shift
  88.         continue;;
  89.     esac
  90. done
  91.  
  92. if [ x"$src" = x ]
  93. then
  94.     echo "install:    no input file specified"
  95.     exit 1
  96. else
  97.     true
  98. fi
  99.  
  100. if [ x"$dir_arg" != x ]; then
  101.     dst=$src
  102.     src=""
  103.     
  104.     if [ -d $dst ]; then
  105.         instcmd=:
  106.     else
  107.         instcmd=mkdir
  108.     fi
  109. else
  110.  
  111. # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
  112. # might cause directories to be created, which would be especially bad 
  113. # if $src (and thus $dsttmp) contains '*'.
  114.  
  115.     if [ -f $src -o -d $src ]
  116.     then
  117.         true
  118.     else
  119.         echo "install:  $src does not exist"
  120.         exit 1
  121.     fi
  122.     
  123.     if [ x"$dst" = x ]
  124.     then
  125.         echo "install:    no destination specified"
  126.         exit 1
  127.     else
  128.         true
  129.     fi
  130.  
  131. # If destination is a directory, append the input filename; if your system
  132. # does not like double slashes in filenames, you may need to add some logic
  133.  
  134.     if [ -d $dst ]
  135.     then
  136.         dst="$dst"/`basename $src`
  137.     else
  138.         true
  139.     fi
  140. fi
  141.  
  142. ## this sed command emulates the dirname command
  143. dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
  144.  
  145. # Make sure that the destination directory exists.
  146. #  this part is taken from Noah Friedman's mkinstalldirs script
  147.  
  148. # Skip lots of stat calls in the usual case.
  149. if [ ! -d "$dstdir" ]; then
  150. defaultIFS='    
  151. '
  152. IFS="${IFS-${defaultIFS}}"
  153.  
  154. oIFS="${IFS}"
  155. # Some sh's can't handle IFS=/ for some reason.
  156. IFS='%'
  157. set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
  158. IFS="${oIFS}"
  159.  
  160. pathcomp=''
  161.  
  162. while [ $# -ne 0 ] ; do
  163.     pathcomp="${pathcomp}${1}"
  164.     shift
  165.  
  166.     if [ ! -d "${pathcomp}" ] ;
  167.         then
  168.         $mkdirprog "${pathcomp}"
  169.     else
  170.         true
  171.     fi
  172.  
  173.     pathcomp="${pathcomp}/"
  174. done
  175. fi
  176.  
  177. if [ x"$dir_arg" != x ]
  178. then
  179.     $doit $instcmd $dst &&
  180.  
  181.     if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
  182.     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
  183.     if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
  184.     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
  185. else
  186.  
  187. # If we're going to rename the final executable, determine the name now.
  188.  
  189.     if [ x"$transformarg" = x ] 
  190.     then
  191.         dstfile=`basename $dst`
  192.     else
  193.         dstfile=`basename $dst $transformbasename | 
  194.             sed $transformarg`$transformbasename
  195.     fi
  196.  
  197. # don't allow the sed command to completely eliminate the filename
  198.  
  199.     if [ x"$dstfile" = x ] 
  200.     then
  201.         dstfile=`basename $dst`
  202.     else
  203.         true
  204.     fi
  205.  
  206. # Make a temp file name in the proper directory.
  207.  
  208.     dsttmp=$dstdir/#inst.$$#
  209.  
  210. # Move or copy the file name to the temp name
  211.  
  212.     $doit $instcmd $src $dsttmp &&
  213.  
  214.     trap "rm -f ${dsttmp}" 0 &&
  215.  
  216. # and set any options; do chmod last to preserve setuid bits
  217.  
  218. # If any of these fail, we abort the whole thing.  If we want to
  219. # ignore errors from any of these, just make sure not to ignore
  220. # errors from the above "$doit $instcmd $src $dsttmp" command.
  221.  
  222.     if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
  223.     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
  224.     if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
  225.     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
  226.  
  227. # Now rename the file to the real destination.
  228.  
  229.     $doit $rmcmd -f $dstdir/$dstfile &&
  230.     $doit $mvcmd $dsttmp $dstdir/$dstfile 
  231.  
  232. fi &&
  233.  
  234.  
  235. exit 0
  236.