Difference for utils/install-sh from version 1.1 to 1.2


version 1.1 version 1.2
Line 1
 
Line 1
 #! /bin/sh  #! /bin/sh
 #  
 # install - install a program, script, or datafile  # install - install a program, script, or datafile
 # This comes from X11R5 (mit/util/scripts/install.sh).  
   scriptversion=2004-10-22.00
   
   # This originates from X11R5 (mit/util/scripts/install.sh), which was
   # later released in X11R6 (xc/config/util/install.sh) with the
   # following copyright and license.
   #
   # Copyright (C) 1994 X Consortium
   #
   # Permission is hereby granted, free of charge, to any person obtaining a copy
   # of this software and associated documentation files (the "Software"), to
   # deal in the Software without restriction, including without limitation the
   # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   # sell copies of the Software, and to permit persons to whom the Software is
   # furnished to do so, subject to the following conditions:
   #
   # The above copyright notice and this permission notice shall be included in
   # all copies or substantial portions of the Software.
   #
   # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
   # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
   # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   #
   # Except as contained in this notice, the name of the X Consortium shall not
   # be used in advertising or otherwise to promote the sale, use or other deal-
   # ings in this Software without prior written authorization from the X Consor-
   # tium.
 #  #
 # Copyright 1991 by the Massachusetts Institute of Technology  
 #  #
 # Permission to use, copy, modify, distribute, and sell this software and its  # FSF changes to this file are in the public domain.
 # documentation for any purpose is hereby granted without fee, provided that  
 # the above copyright notice appear in all copies and that both that  
 # copyright notice and this permission notice appear in supporting  
 # documentation, and that the name of M.I.T. not be used in advertising or  
 # publicity pertaining to distribution of the software without specific,  
 # written prior permission.  M.I.T. makes no representations about the  
 # suitability of this software for any purpose.  It is provided "as is"  
 # without express or implied warranty.  
 #  #
 # Calling this script install-sh is preferred over install.sh, to prevent  # Calling this script install-sh is preferred over install.sh, to prevent
 # `make' implicit rules from creating a file called install from it  # `make' implicit rules from creating a file called install from it
Line 23
 
Line 42
 # from scratch.  It can only install one file at a time, a restriction  # from scratch.  It can only install one file at a time, a restriction
 # shared with many OS's install programs.  # shared with many OS's install programs.
   
   
 # set DOITPROG to echo to test this script  # set DOITPROG to echo to test this script
   
 # Don't use :- since 4.3BSD and earlier shells don't like it.  # Don't use :- since 4.3BSD and earlier shells don't like it.
 doit="${DOITPROG-}"  doit="${DOITPROG-}"
   
   
 # put in absolute paths if you don't have them in your path; or use env. vars.  # put in absolute paths if you don't have them in your path; or use env. vars.
   
 mvprog="${MVPROG-mv}"  mvprog="${MVPROG-mv}"
Line 41
 
Line 58
 rmprog="${RMPROG-rm}"  rmprog="${RMPROG-rm}"
 mkdirprog="${MKDIRPROG-mkdir}"  mkdirprog="${MKDIRPROG-mkdir}"
   
 transformbasename=""  
 transform_arg=""  
 instcmd="$mvprog"  
 chmodcmd="$chmodprog 0755"  chmodcmd="$chmodprog 0755"
 chowncmd=""  chowncmd=
 chgrpcmd=""  chgrpcmd=
 stripcmd=""  stripcmd=
 rmcmd="$rmprog -f"  rmcmd="$rmprog -f"
 mvcmd="$mvprog"  mvcmd="$mvprog"
 src=""  src=
 dst=""  dst=
 dir_arg=""  dir_arg=
   dstarg=
   no_target_directory=
   
   usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
      or: $0 [OPTION]... SRCFILES... DIRECTORY
      or: $0 [OPTION]... -t DIRECTORY SRCFILES...
      or: $0 [OPTION]... -d DIRECTORIES...
   
   In the 1st form, copy SRCFILE to DSTFILE.
   In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
   In the 4th, create DIRECTORIES.
   
   Options:
   -c         (ignored)
   -d         create directories instead of installing files.
   -g GROUP   $chgrpprog installed files to GROUP.
   -m MODE    $chmodprog installed files to MODE.
   -o USER    $chownprog installed files to USER.
   -s         $stripprog installed files.
   -t DIRECTORY  install into DIRECTORY.
   -T         report an error if DSTFILE is a directory.
   --help     display this help and exit.
   --version  display version info and exit.
   
   Environment variables override the default commands:
     CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
   "
   
 while [ x"$1" != x ]; do  while test -n "$1"; do
     case $1 in      case $1 in
  -c) instcmd="$cpprog"      -c) shift
      shift  
      continue;;       continue;;
   
  -d) dir_arg=true   -d) dir_arg=true
      shift       shift
      continue;;       continue;;
   
  -m) chmodcmd="$chmodprog $2"      -g) chgrpcmd="$chgrpprog $2"
      shift       shift
      shift       shift
      continue;;       continue;;
   
  -o) chowncmd="$chownprog $2"      --help) echo "$usage"; exit 0;;
   
       -m) chmodcmd="$chmodprog $2"
      shift       shift
      shift       shift
      continue;;       continue;;
   
  -g) chgrpcmd="$chgrpprog $2"      -o) chowncmd="$chownprog $2"
      shift       shift
      shift       shift
      continue;;       continue;;
   
  -s) stripcmd="$stripprog"      -s) stripcmd=$stripprog
      shift       shift
      continue;;       continue;;
   
  -t=*) transformarg=`echo $1 | sed 's/-t=//'`      -t) dstarg=$2
    shift
      shift       shift
      continue;;       continue;;
   
  -b=*) transformbasename=`echo $1 | sed 's/-b=//'`      -T) no_target_directory=true
      shift       shift
      continue;;       continue;;
   
  *)  if [ x"$src" = x ]      --version) echo "$0 $scriptversion"; exit 0;;
      then  
  src=$1      *)  # When -d is used, all remaining arguments are directories to create.
      else   # When -t is used, the destination is already specified.
  # this colon is to work around a 386BSD /bin/sh bug   test -n "$dir_arg$dstarg" && break
  :          # Otherwise, the last argument is the destination.  Remove it from $@.
  dst=$1   for arg
    do
             if test -n "$dstarg"; then
        # $@ is not empty: it contains at least $arg.
        set fnord "$@" "$dstarg"
        shift # fnord
      fi       fi
      shift     shift # arg
      continue;;     dstarg=$arg
    done
    break;;
     esac      esac
 done  done
   
 if [ x"$src" = x ]  if test -z "$1"; then
 then    if test -z "$dir_arg"; then
  echo "install: no input file specified"      echo "$0: no input file specified." >&2
  exit 1   exit 1
 else    fi
  true    # It's OK to call `install-sh -d' without argument.
     # This can happen when creating conditional directories.
     exit 0
 fi  fi
   
 if [ x"$dir_arg" != x ]; then  for src
   do
     # Protect names starting with `-'.
     case $src in
       -*) src=./$src ;;
     esac
   
     if test -n "$dir_arg"; then
  dst=$src   dst=$src
  src=""      src=
    
  if [ -d $dst ]; then      if test -d "$dst"; then
  instcmd=:        mkdircmd=:
         chmodcmd=
  else   else
  instcmd=mkdir        mkdircmd=$mkdirprog
  fi   fi
 else  else
       # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
 # Waiting for this to be detected by the "$instcmd $src $dsttmp" command  
 # might cause directories to be created, which would be especially bad   # might cause directories to be created, which would be especially bad
 # if $src (and thus $dsttmp) contains '*'.  # if $src (and thus $dsttmp) contains '*'.
       if test ! -f "$src" && test ! -d "$src"; then
  if [ -f $src -o -d $src ]        echo "$0: $src does not exist." >&2
  then  
  true  
  else  
  echo "install:  $src does not exist"  
  exit 1   exit 1
  fi   fi
    
  if [ x"$dst" = x ]      if test -z "$dstarg"; then
  then        echo "$0: no destination specified." >&2
  echo "install: no destination specified"  
  exit 1   exit 1
  else  
  true  
  fi   fi
   
 # If destination is a directory, append the input filename; if your system      dst=$dstarg
 # does not like double slashes in filenames, you may need to add some logic      # Protect names starting with `-'.
       case $dst in
         -*) dst=./$dst ;;
       esac
   
  if [ -d $dst ]      # If destination is a directory, append the input filename; won't work
  then      # if double slashes aren't ignored.
  dst="$dst"/`basename $src`      if test -d "$dst"; then
  else        if test -n "$no_target_directory"; then
  true   echo "$0: $dstarg: Is a directory" >&2
    exit 1
         fi
         dst=$dst/`basename "$src"`
  fi   fi
 fi  fi
   
 ## this sed command emulates the dirname command    # This sed command emulates the dirname command.
 dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`    dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
   
 # Make sure that the destination directory exists.  # Make sure that the destination directory exists.
 #  this part is taken from Noah Friedman's mkinstalldirs script  
   
 # Skip lots of stat calls in the usual case.  # Skip lots of stat calls in the usual case.
 if [ ! -d "$dstdir" ]; then    if test ! -d "$dstdir"; then
 defaultIFS='   defaultIFS='
 '  '
 IFS="${IFS-${defaultIFS}}"      IFS="${IFS-$defaultIFS}"
   
 oIFS="${IFS}"      oIFS=$IFS
 # Some sh's can't handle IFS=/ for some reason.  # Some sh's can't handle IFS=/ for some reason.
 IFS='%'  IFS='%'
 set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`      set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
 IFS="${oIFS}"      shift
       IFS=$oIFS
   
 pathcomp=''      pathcomp=
   
 while [ $# -ne 0 ] ; do      while test $# -ne 0 ; do
  pathcomp="${pathcomp}${1}"        pathcomp=$pathcomp$1
  shift   shift
         if test ! -d "$pathcomp"; then
  if [ ! -d "${pathcomp}" ] ;          $mkdirprog "$pathcomp"
         then   # mkdir can fail with a `File exist' error in case several
  $mkdirprog "${pathcomp}"   # install-sh are creating the directory concurrently.  This
  else   # is OK.
  true   test -d "$pathcomp" || exit
  fi   fi
         pathcomp=$pathcomp/
  pathcomp="${pathcomp}/"  
 done  done
 fi  fi
   
 if [ x"$dir_arg" != x ]    if test -n "$dir_arg"; then
 then      $doit $mkdircmd "$dst" \
  $doit $instcmd $dst &&        && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
         && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
  if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&        && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
  if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&        && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
  if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&  
  if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi  
 else  
   
 # If we're going to rename the final executable, determine the name now.  
   
  if [ x"$transformarg" = x ]   
  then  
  dstfile=`basename $dst`  
  else   else
  dstfile=`basename $dst $transformbasename |       dstfile=`basename "$dst"`
  sed $transformarg`$transformbasename  
  fi  
   
 # don't allow the sed command to completely eliminate the filename  
   
  if [ x"$dstfile" = x ]       # Make a couple of temp file names in the proper directory.
  then      dsttmp=$dstdir/_inst.$$_
  dstfile=`basename $dst`      rmtmp=$dstdir/_rm.$$_
  else  
  true  
  fi  
   
 # Make a temp file name in the proper directory.      # Trap to clean up those temp files at exit.
       trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
       trap '(exit $?); exit' 1 2 13 15
   
  dsttmp=$dstdir/#inst.$$#      # Copy the file name to the temp name.
       $doit $cpprog "$src" "$dsttmp" &&
 # Move or copy the file name to the temp name  
   
  $doit $instcmd $src $dsttmp &&  
   
  trap "rm -f ${dsttmp}" 0 &&  
   
 # and set any options; do chmod last to preserve setuid bits  
   
       # and set any options; do chmod last to preserve setuid bits.
       #
 # If any of these fail, we abort the whole thing.  If we want to  # If any of these fail, we abort the whole thing.  If we want to
 # ignore errors from any of these, just make sure not to ignore  # ignore errors from any of these, just make sure not to ignore
 # errors from the above "$doit $instcmd $src $dsttmp" command.      # errors from the above "$doit $cpprog $src $dsttmp" command.
       #
  if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&      { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
  if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&        && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
  if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&        && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
  if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&        && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
   
 # Now rename the file to the real destination.  # Now rename the file to the real destination.
       { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
         || {
       # The rename failed, perhaps because mv can't rename something else
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
   
       # Now remove or move aside any old file at destination location.
       # We try this two ways since rm can't unlink itself on some
       # systems and the destination file might be busy for other
       # reasons.  In this case, the final cleanup might fail but the new
       # file should still install successfully.
       {
         if test -f "$dstdir/$dstfile"; then
           $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
           || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
           || {
    echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
    (exit 1); exit
           }
         else
           :
         fi
       } &&
   
  $doit $rmcmd -f $dstdir/$dstfile &&      # Now rename the file to the real destination.
  $doit $mvcmd $dsttmp $dstdir/$dstfile       $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
    }
 fi &&      }
     fi || { (exit 1); exit; }
   done
   
 exit 0  # The final little trick to "correctly" pass the exit status to the exit trap.
   {
     (exit 0); exit
   }
   
   # Local variables:
   # eval: (add-hook 'write-file-hooks 'time-stamp)
   # time-stamp-start: "scriptversion="
   # time-stamp-format: "%:y-%02m-%02d.%02H"
   # time-stamp-end: "$"
   # End:


Legend:
line(s) removed in v.1.1 
line(s) changed
 line(s) added in v.1.2

File made using version 1.98 of cvs2html by leaf at 2011-07-21 17:02