"Fossies" - the Fresh Open Source Software Archive

Member "tin-2.4.1/install-sh" (28 Aug 2013, 7123 Bytes) of archive /linux/misc/tin-2.4.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 #! /bin/sh
    2 #
    3 # install - install a program, script, or datafile
    4 #
    5 # This originates from X11R5 (mit/util/scripts/install.sh), which was
    6 # later released in X11R6 (xc/config/util/install.sh) with the
    7 # following copyright and license.
    8 #
    9 # Copyright (C) 1994 X Consortium
   10 #
   11 # Permission is hereby granted, free of charge, to any person obtaining a copy
   12 # of this software and associated documentation files (the "Software"), to
   13 # deal in the Software without restriction, including without limitation the
   14 # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   15 # sell copies of the Software, and to permit persons to whom the Software is
   16 # furnished to do so, subject to the following conditions:
   17 #
   18 # The above copyright notice and this permission notice shall be included in
   19 # all copies or substantial portions of the Software.
   20 #
   21 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   22 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   23 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   24 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
   25 # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
   26 # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   27 #
   28 # Except as contained in this notice, the name of the X Consortium shall not
   29 # be used in advertising or otherwise to promote the sale, use or other deal-
   30 # ings in this Software without prior written authorization from the X Consor-
   31 # tium.
   32 #
   33 #
   34 # FSF changes to this file are in the public domain.
   35 #
   36 # Calling this script install-sh is preferred over install.sh, to prevent
   37 # `make' implicit rules from creating a file called install from it
   38 # when there is no Makefile.
   39 #
   40 # This script is compatible with the BSD install script, but was written
   41 # from scratch.  It can only install one file at a time, a restriction
   42 # shared with many OS's install programs.
   43 
   44 
   45 # set DOITPROG to echo to test this script
   46 
   47 # Don't use :- since 4.3BSD and earlier shells don't like it.
   48 doit="${DOITPROG-}"
   49 
   50 
   51 # put in absolute paths if you don't have them in your path; or use env. vars.
   52 
   53 mvprog="${MVPROG-mv}"
   54 cpprog="${CPPROG-cp}"
   55 chmodprog="${CHMODPROG-chmod}"
   56 chownprog="${CHOWNPROG-chown}"
   57 chgrpprog="${CHGRPPROG-chgrp}"
   58 stripprog="${STRIPPROG-strip}"
   59 rmprog="${RMPROG-rm}"
   60 mkdirprog="${MKDIRPROG-mkdir}"
   61 
   62 transformbasename=""
   63 transform_arg=""
   64 instcmd="$mvprog"
   65 chmodcmd="$chmodprog 0755"
   66 chowncmd=""
   67 chgrpcmd=""
   68 stripcmd=""
   69 rmcmd="$rmprog -f"
   70 mvcmd="$mvprog"
   71 src=""
   72 dst=""
   73 dir_arg=""
   74 
   75 while [ x"$1" != x ]; do
   76     case $1 in
   77     -c) instcmd=$cpprog
   78         shift
   79         continue;;
   80 
   81     -d) dir_arg=true
   82         shift
   83         continue;;
   84 
   85     -m) chmodcmd="$chmodprog $2"
   86         shift
   87         shift
   88         continue;;
   89 
   90     -o) chowncmd="$chownprog $2"
   91         shift
   92         shift
   93         continue;;
   94 
   95     -g) chgrpcmd="$chgrpprog $2"
   96         shift
   97         shift
   98         continue;;
   99 
  100     -s) stripcmd=$stripprog
  101         shift
  102         continue;;
  103 
  104     -t=*) transformarg=`echo $1 | sed 's/-t=//'`
  105         shift
  106         continue;;
  107 
  108     -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
  109         shift
  110         continue;;
  111 
  112     *)  if [ x"$src" = x ]
  113         then
  114         src=$1
  115         else
  116         # this colon is to work around a 386BSD /bin/sh bug
  117         :
  118         dst=$1
  119         fi
  120         shift
  121         continue;;
  122     esac
  123 done
  124 
  125 if [ x"$src" = x ]
  126 then
  127     echo "$0: no input file specified" >&2
  128     exit 1
  129 else
  130     :
  131 fi
  132 
  133 if [ x"$dir_arg" != x ]; then
  134     dst=$src
  135     src=""
  136 
  137     if [ -d "$dst" ]; then
  138         instcmd=:
  139         chmodcmd=""
  140     else
  141         instcmd=$mkdirprog
  142     fi
  143 else
  144 
  145 # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
  146 # might cause directories to be created, which would be especially bad
  147 # if $src (and thus $dsttmp) contains '*'.
  148 
  149     if [ -f "$src" ] || [ -d "$src" ]
  150     then
  151         :
  152     else
  153         echo "$0: $src does not exist" >&2
  154         exit 1
  155     fi
  156 
  157     if [ x"$dst" = x ]
  158     then
  159         echo "$0: no destination specified" >&2
  160         exit 1
  161     else
  162         :
  163     fi
  164 
  165 # If destination is a directory, append the input filename; if your system
  166 # does not like double slashes in filenames, you may need to add some logic
  167 
  168     if [ -d "$dst" ]
  169     then
  170         dst=$dst/`basename "$src"`
  171     else
  172         :
  173     fi
  174 fi
  175 
  176 ## this sed command emulates the dirname command
  177 dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
  178 
  179 # Make sure that the destination directory exists.
  180 #  this part is taken from Noah Friedman's mkinstalldirs script
  181 
  182 # Skip lots of stat calls in the usual case.
  183 if [ ! -d "$dstdir" ]; then
  184 defaultIFS='
  185     '
  186 IFS="${IFS-$defaultIFS}"
  187 
  188 oIFS=$IFS
  189 # Some sh's can't handle IFS=/ for some reason.
  190 IFS='%'
  191 set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
  192 IFS=$oIFS
  193 
  194 pathcomp=''
  195 
  196 while [ $# -ne 0 ] ; do
  197     pathcomp=$pathcomp$1
  198     shift
  199 
  200     if [ ! -d "$pathcomp" ] ;
  201         then
  202         $mkdirprog "$pathcomp"
  203     else
  204         :
  205     fi
  206 
  207     pathcomp=$pathcomp/
  208 done
  209 fi
  210 
  211 if [ x"$dir_arg" != x ]
  212 then
  213     $doit $instcmd "$dst" &&
  214 
  215     if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
  216     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
  217     if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
  218     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
  219 else
  220 
  221 # If we're going to rename the final executable, determine the name now.
  222 
  223     if [ x"$transformarg" = x ]
  224     then
  225         dstfile=`basename "$dst"`
  226     else
  227         dstfile=`basename "$dst" $transformbasename |
  228             sed $transformarg`$transformbasename
  229     fi
  230 
  231 # don't allow the sed command to completely eliminate the filename
  232 
  233     if [ x"$dstfile" = x ]
  234     then
  235         dstfile=`basename "$dst"`
  236     else
  237         :
  238     fi
  239 
  240 # Make a couple of temp file names in the proper directory.
  241 
  242     dsttmp=$dstdir/#inst.$$#
  243     rmtmp=$dstdir/#rm.$$#
  244 
  245 # Trap to clean up temp files at exit.
  246 
  247     trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
  248     trap '(exit $?); exit' 1 2 13 15
  249 
  250 # Move or copy the file name to the temp name
  251 
  252     $doit $instcmd "$src" "$dsttmp" &&
  253 
  254 # and set any options; do chmod last to preserve setuid bits
  255 
  256 # If any of these fail, we abort the whole thing.  If we want to
  257 # ignore errors from any of these, just make sure not to ignore
  258 # errors from the above "$doit $instcmd $src $dsttmp" command.
  259 
  260     if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
  261     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
  262     if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
  263     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
  264 
  265 # Now remove or move aside any old file at destination location.  We try this
  266 # two ways since rm can't unlink itself on some systems and the destination
  267 # file might be busy for other reasons.  In this case, the final cleanup
  268 # might fail but the new file should still install successfully.
  269 
  270 {
  271     if [ -f "$dstdir/$dstfile" ]
  272     then
  273         $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
  274         $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
  275         {
  276           echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
  277           (exit 1); exit
  278         }
  279     else
  280         :
  281     fi
  282 } &&
  283 
  284 # Now rename the file to the real destination.
  285 
  286     $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
  287 
  288 fi &&
  289 
  290 # The final little trick to "correctly" pass the exit status to the exit trap.
  291 
  292 {
  293     (exit 0); exit
  294 }