"Fossies" - the Fresh Open Source Software Archive

Member "xarchive-0.2.8-6/config/install-sh" (6 Feb 2005, 6376 Bytes) of package /linux/privat/old/xarchive-0.2.8-6.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 "install:  no input file specified"
  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 "install:  $src does not exist"
  154         exit 1
  155     fi
  156     
  157     if [ x"$dst" = x ]
  158     then
  159         echo "install:  no destination specified"
  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 temp file name in the proper directory.
  241 
  242     dsttmp=$dstdir/#inst.$$#
  243 
  244 # Move or copy the file name to the temp name
  245 
  246     $doit $instcmd $src $dsttmp &&
  247 
  248     trap "rm -f ${dsttmp}" 0 &&
  249 
  250 # and set any options; do chmod last to preserve setuid bits
  251 
  252 # If any of these fail, we abort the whole thing.  If we want to
  253 # ignore errors from any of these, just make sure not to ignore
  254 # errors from the above "$doit $instcmd $src $dsttmp" command.
  255 
  256     if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
  257     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
  258     if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
  259     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
  260 
  261 # Now rename the file to the real destination.
  262 
  263     $doit $rmcmd -f $dstdir/$dstfile &&
  264     $doit $mvcmd $dsttmp $dstdir/$dstfile 
  265 
  266 fi &&
  267 
  268 
  269 exit 0