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