Blame SOURCES/libsodium-1.0.18/build-aux/install-sh

rdobuilder 775784
#!/bin/sh
rdobuilder 775784
# install - install a program, script, or datafile
rdobuilder 775784
rdobuilder 775784
scriptversion=2018-03-11.20; # UTC
rdobuilder 775784
rdobuilder 775784
# This originates from X11R5 (mit/util/scripts/install.sh), which was
rdobuilder 775784
# later released in X11R6 (xc/config/util/install.sh) with the
rdobuilder 775784
# following copyright and license.
rdobuilder 775784
#
rdobuilder 775784
# Copyright (C) 1994 X Consortium
rdobuilder 775784
#
rdobuilder 775784
# Permission is hereby granted, free of charge, to any person obtaining a copy
rdobuilder 775784
# of this software and associated documentation files (the "Software"), to
rdobuilder 775784
# deal in the Software without restriction, including without limitation the
rdobuilder 775784
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
rdobuilder 775784
# sell copies of the Software, and to permit persons to whom the Software is
rdobuilder 775784
# furnished to do so, subject to the following conditions:
rdobuilder 775784
#
rdobuilder 775784
# The above copyright notice and this permission notice shall be included in
rdobuilder 775784
# all copies or substantial portions of the Software.
rdobuilder 775784
#
rdobuilder 775784
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
rdobuilder 775784
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
rdobuilder 775784
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
rdobuilder 775784
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
rdobuilder 775784
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
rdobuilder 775784
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
rdobuilder 775784
#
rdobuilder 775784
# Except as contained in this notice, the name of the X Consortium shall not
rdobuilder 775784
# be used in advertising or otherwise to promote the sale, use or other deal-
rdobuilder 775784
# ings in this Software without prior written authorization from the X Consor-
rdobuilder 775784
# tium.
rdobuilder 775784
#
rdobuilder 775784
#
rdobuilder 775784
# FSF changes to this file are in the public domain.
rdobuilder 775784
#
rdobuilder 775784
# Calling this script install-sh is preferred over install.sh, to prevent
rdobuilder 775784
# 'make' implicit rules from creating a file called install from it
rdobuilder 775784
# when there is no Makefile.
rdobuilder 775784
#
rdobuilder 775784
# This script is compatible with the BSD install script, but was written
rdobuilder 775784
# from scratch.
rdobuilder 775784
rdobuilder 775784
tab='	'
rdobuilder 775784
nl='
rdobuilder 775784
'
rdobuilder 775784
IFS=" $tab$nl"
rdobuilder 775784
rdobuilder 775784
# Set DOITPROG to "echo" to test this script.
rdobuilder 775784
rdobuilder 775784
doit=${DOITPROG-}
rdobuilder 775784
doit_exec=${doit:-exec}
rdobuilder 775784
rdobuilder 775784
# Put in absolute file names if you don't have them in your path;
rdobuilder 775784
# or use environment vars.
rdobuilder 775784
rdobuilder 775784
chgrpprog=${CHGRPPROG-chgrp}
rdobuilder 775784
chmodprog=${CHMODPROG-chmod}
rdobuilder 775784
chownprog=${CHOWNPROG-chown}
rdobuilder 775784
cmpprog=${CMPPROG-cmp}
rdobuilder 775784
cpprog=${CPPROG-cp}
rdobuilder 775784
mkdirprog=${MKDIRPROG-mkdir}
rdobuilder 775784
mvprog=${MVPROG-mv}
rdobuilder 775784
rmprog=${RMPROG-rm}
rdobuilder 775784
stripprog=${STRIPPROG-strip}
rdobuilder 775784
rdobuilder 775784
posix_mkdir=
rdobuilder 775784
rdobuilder 775784
# Desired mode of installed file.
rdobuilder 775784
mode=0755
rdobuilder 775784
rdobuilder 775784
chgrpcmd=
rdobuilder 775784
chmodcmd=$chmodprog
rdobuilder 775784
chowncmd=
rdobuilder 775784
mvcmd=$mvprog
rdobuilder 775784
rmcmd="$rmprog -f"
rdobuilder 775784
stripcmd=
rdobuilder 775784
rdobuilder 775784
src=
rdobuilder 775784
dst=
rdobuilder 775784
dir_arg=
rdobuilder 775784
dst_arg=
rdobuilder 775784
rdobuilder 775784
copy_on_change=false
rdobuilder 775784
is_target_a_directory=possibly
rdobuilder 775784
rdobuilder 775784
usage="\
rdobuilder 775784
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
rdobuilder 775784
   or: $0 [OPTION]... SRCFILES... DIRECTORY
rdobuilder 775784
   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
rdobuilder 775784
   or: $0 [OPTION]... -d DIRECTORIES...
rdobuilder 775784
rdobuilder 775784
In the 1st form, copy SRCFILE to DSTFILE.
rdobuilder 775784
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
rdobuilder 775784
In the 4th, create DIRECTORIES.
rdobuilder 775784
rdobuilder 775784
Options:
rdobuilder 775784
     --help     display this help and exit.
rdobuilder 775784
     --version  display version info and exit.
rdobuilder 775784
rdobuilder 775784
  -c            (ignored)
rdobuilder 775784
  -C            install only if different (preserve the last data modification time)
rdobuilder 775784
  -d            create directories instead of installing files.
rdobuilder 775784
  -g GROUP      $chgrpprog installed files to GROUP.
rdobuilder 775784
  -m MODE       $chmodprog installed files to MODE.
rdobuilder 775784
  -o USER       $chownprog installed files to USER.
rdobuilder 775784
  -s            $stripprog installed files.
rdobuilder 775784
  -t DIRECTORY  install into DIRECTORY.
rdobuilder 775784
  -T            report an error if DSTFILE is a directory.
rdobuilder 775784
rdobuilder 775784
Environment variables override the default commands:
rdobuilder 775784
  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
rdobuilder 775784
  RMPROG STRIPPROG
rdobuilder 775784
"
rdobuilder 775784
rdobuilder 775784
while test $# -ne 0; do
rdobuilder 775784
  case $1 in
rdobuilder 775784
    -c) ;;
rdobuilder 775784
rdobuilder 775784
    -C) copy_on_change=true;;
rdobuilder 775784
rdobuilder 775784
    -d) dir_arg=true;;
rdobuilder 775784
rdobuilder 775784
    -g) chgrpcmd="$chgrpprog $2"
rdobuilder 775784
        shift;;
rdobuilder 775784
rdobuilder 775784
    --help) echo "$usage"; exit $?;;
rdobuilder 775784
rdobuilder 775784
    -m) mode=$2
rdobuilder 775784
        case $mode in
rdobuilder 775784
          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
rdobuilder 775784
            echo "$0: invalid mode: $mode" >&2
rdobuilder 775784
            exit 1;;
rdobuilder 775784
        esac
rdobuilder 775784
        shift;;
rdobuilder 775784
rdobuilder 775784
    -o) chowncmd="$chownprog $2"
rdobuilder 775784
        shift;;
rdobuilder 775784
rdobuilder 775784
    -s) stripcmd=$stripprog;;
rdobuilder 775784
rdobuilder 775784
    -t)
rdobuilder 775784
        is_target_a_directory=always
rdobuilder 775784
        dst_arg=$2
rdobuilder 775784
        # Protect names problematic for 'test' and other utilities.
rdobuilder 775784
        case $dst_arg in
rdobuilder 775784
          -* | [=\(\)!]) dst_arg=./$dst_arg;;
rdobuilder 775784
        esac
rdobuilder 775784
        shift;;
rdobuilder 775784
rdobuilder 775784
    -T) is_target_a_directory=never;;
rdobuilder 775784
rdobuilder 775784
    --version) echo "$0 $scriptversion"; exit $?;;
rdobuilder 775784
rdobuilder 775784
    --) shift
rdobuilder 775784
        break;;
rdobuilder 775784
rdobuilder 775784
    -*) echo "$0: invalid option: $1" >&2
rdobuilder 775784
        exit 1;;
rdobuilder 775784
rdobuilder 775784
    *)  break;;
rdobuilder 775784
  esac
rdobuilder 775784
  shift
rdobuilder 775784
done
rdobuilder 775784
rdobuilder 775784
# We allow the use of options -d and -T together, by making -d
rdobuilder 775784
# take the precedence; this is for compatibility with GNU install.
rdobuilder 775784
rdobuilder 775784
if test -n "$dir_arg"; then
rdobuilder 775784
  if test -n "$dst_arg"; then
rdobuilder 775784
    echo "$0: target directory not allowed when installing a directory." >&2
rdobuilder 775784
    exit 1
rdobuilder 775784
  fi
rdobuilder 775784
fi
rdobuilder 775784
rdobuilder 775784
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
rdobuilder 775784
  # When -d is used, all remaining arguments are directories to create.
rdobuilder 775784
  # When -t is used, the destination is already specified.
rdobuilder 775784
  # Otherwise, the last argument is the destination.  Remove it from $@.
rdobuilder 775784
  for arg
rdobuilder 775784
  do
rdobuilder 775784
    if test -n "$dst_arg"; then
rdobuilder 775784
      # $@ is not empty: it contains at least $arg.
rdobuilder 775784
      set fnord "$@" "$dst_arg"
rdobuilder 775784
      shift # fnord
rdobuilder 775784
    fi
rdobuilder 775784
    shift # arg
rdobuilder 775784
    dst_arg=$arg
rdobuilder 775784
    # Protect names problematic for 'test' and other utilities.
rdobuilder 775784
    case $dst_arg in
rdobuilder 775784
      -* | [=\(\)!]) dst_arg=./$dst_arg;;
rdobuilder 775784
    esac
rdobuilder 775784
  done
rdobuilder 775784
fi
rdobuilder 775784
rdobuilder 775784
if test $# -eq 0; then
rdobuilder 775784
  if test -z "$dir_arg"; then
rdobuilder 775784
    echo "$0: no input file specified." >&2
rdobuilder 775784
    exit 1
rdobuilder 775784
  fi
rdobuilder 775784
  # It's OK to call 'install-sh -d' without argument.
rdobuilder 775784
  # This can happen when creating conditional directories.
rdobuilder 775784
  exit 0
rdobuilder 775784
fi
rdobuilder 775784
rdobuilder 775784
if test -z "$dir_arg"; then
rdobuilder 775784
  if test $# -gt 1 || test "$is_target_a_directory" = always; then
rdobuilder 775784
    if test ! -d "$dst_arg"; then
rdobuilder 775784
      echo "$0: $dst_arg: Is not a directory." >&2
rdobuilder 775784
      exit 1
rdobuilder 775784
    fi
rdobuilder 775784
  fi
rdobuilder 775784
fi
rdobuilder 775784
rdobuilder 775784
if test -z "$dir_arg"; then
rdobuilder 775784
  do_exit='(exit $ret); exit $ret'
rdobuilder 775784
  trap "ret=129; $do_exit" 1
rdobuilder 775784
  trap "ret=130; $do_exit" 2
rdobuilder 775784
  trap "ret=141; $do_exit" 13
rdobuilder 775784
  trap "ret=143; $do_exit" 15
rdobuilder 775784
rdobuilder 775784
  # Set umask so as not to create temps with too-generous modes.
rdobuilder 775784
  # However, 'strip' requires both read and write access to temps.
rdobuilder 775784
  case $mode in
rdobuilder 775784
    # Optimize common cases.
rdobuilder 775784
    *644) cp_umask=133;;
rdobuilder 775784
    *755) cp_umask=22;;
rdobuilder 775784
rdobuilder 775784
    *[0-7])
rdobuilder 775784
      if test -z "$stripcmd"; then
rdobuilder 775784
        u_plus_rw=
rdobuilder 775784
      else
rdobuilder 775784
        u_plus_rw='% 200'
rdobuilder 775784
      fi
rdobuilder 775784
      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
rdobuilder 775784
    *)
rdobuilder 775784
      if test -z "$stripcmd"; then
rdobuilder 775784
        u_plus_rw=
rdobuilder 775784
      else
rdobuilder 775784
        u_plus_rw=,u+rw
rdobuilder 775784
      fi
rdobuilder 775784
      cp_umask=$mode$u_plus_rw;;
rdobuilder 775784
  esac
rdobuilder 775784
fi
rdobuilder 775784
rdobuilder 775784
for src
rdobuilder 775784
do
rdobuilder 775784
  # Protect names problematic for 'test' and other utilities.
rdobuilder 775784
  case $src in
rdobuilder 775784
    -* | [=\(\)!]) src=./$src;;
rdobuilder 775784
  esac
rdobuilder 775784
rdobuilder 775784
  if test -n "$dir_arg"; then
rdobuilder 775784
    dst=$src
rdobuilder 775784
    dstdir=$dst
rdobuilder 775784
    test -d "$dstdir"
rdobuilder 775784
    dstdir_status=$?
rdobuilder 775784
  else
rdobuilder 775784
rdobuilder 775784
    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
rdobuilder 775784
    # might cause directories to be created, which would be especially bad
rdobuilder 775784
    # if $src (and thus $dsttmp) contains '*'.
rdobuilder 775784
    if test ! -f "$src" && test ! -d "$src"; then
rdobuilder 775784
      echo "$0: $src does not exist." >&2
rdobuilder 775784
      exit 1
rdobuilder 775784
    fi
rdobuilder 775784
rdobuilder 775784
    if test -z "$dst_arg"; then
rdobuilder 775784
      echo "$0: no destination specified." >&2
rdobuilder 775784
      exit 1
rdobuilder 775784
    fi
rdobuilder 775784
    dst=$dst_arg
rdobuilder 775784
rdobuilder 775784
    # If destination is a directory, append the input filename.
rdobuilder 775784
    if test -d "$dst"; then
rdobuilder 775784
      if test "$is_target_a_directory" = never; then
rdobuilder 775784
        echo "$0: $dst_arg: Is a directory" >&2
rdobuilder 775784
        exit 1
rdobuilder 775784
      fi
rdobuilder 775784
      dstdir=$dst
rdobuilder 775784
      dstbase=`basename "$src"`
rdobuilder 775784
      case $dst in
rdobuilder 775784
	*/) dst=$dst$dstbase;;
rdobuilder 775784
	*)  dst=$dst/$dstbase;;
rdobuilder 775784
      esac
rdobuilder 775784
      dstdir_status=0
rdobuilder 775784
    else
rdobuilder 775784
      dstdir=`dirname "$dst"`
rdobuilder 775784
      test -d "$dstdir"
rdobuilder 775784
      dstdir_status=$?
rdobuilder 775784
    fi
rdobuilder 775784
  fi
rdobuilder 775784
rdobuilder 775784
  case $dstdir in
rdobuilder 775784
    */) dstdirslash=$dstdir;;
rdobuilder 775784
    *)  dstdirslash=$dstdir/;;
rdobuilder 775784
  esac
rdobuilder 775784
rdobuilder 775784
  obsolete_mkdir_used=false
rdobuilder 775784
rdobuilder 775784
  if test $dstdir_status != 0; then
rdobuilder 775784
    case $posix_mkdir in
rdobuilder 775784
      '')
rdobuilder 775784
        # Create intermediate dirs using mode 755 as modified by the umask.
rdobuilder 775784
        # This is like FreeBSD 'install' as of 1997-10-28.
rdobuilder 775784
        umask=`umask`
rdobuilder 775784
        case $stripcmd.$umask in
rdobuilder 775784
          # Optimize common cases.
rdobuilder 775784
          *[2367][2367]) mkdir_umask=$umask;;
rdobuilder 775784
          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
rdobuilder 775784
rdobuilder 775784
          *[0-7])
rdobuilder 775784
            mkdir_umask=`expr $umask + 22 \
rdobuilder 775784
              - $umask % 100 % 40 + $umask % 20 \
rdobuilder 775784
              - $umask % 10 % 4 + $umask % 2
rdobuilder 775784
            `;;
rdobuilder 775784
          *) mkdir_umask=$umask,go-w;;
rdobuilder 775784
        esac
rdobuilder 775784
rdobuilder 775784
        # With -d, create the new directory with the user-specified mode.
rdobuilder 775784
        # Otherwise, rely on $mkdir_umask.
rdobuilder 775784
        if test -n "$dir_arg"; then
rdobuilder 775784
          mkdir_mode=-m$mode
rdobuilder 775784
        else
rdobuilder 775784
          mkdir_mode=
rdobuilder 775784
        fi
rdobuilder 775784
rdobuilder 775784
        posix_mkdir=false
rdobuilder 775784
        case $umask in
rdobuilder 775784
          *[123567][0-7][0-7])
rdobuilder 775784
            # POSIX mkdir -p sets u+wx bits regardless of umask, which
rdobuilder 775784
            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
rdobuilder 775784
            ;;
rdobuilder 775784
          *)
rdobuilder 775784
            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
rdobuilder 775784
            # here however when possible just to lower collision chance.
rdobuilder 775784
            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
rdobuilder 775784
rdobuilder 775784
            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
rdobuilder 775784
rdobuilder 775784
            # Because "mkdir -p" follows existing symlinks and we likely work
rdobuilder 775784
            # directly in world-writeable /tmp, make sure that the '$tmpdir'
rdobuilder 775784
            # directory is successfully created first before we actually test
rdobuilder 775784
            # 'mkdir -p' feature.
rdobuilder 775784
            if (umask $mkdir_umask &&
rdobuilder 775784
                $mkdirprog $mkdir_mode "$tmpdir" &&
rdobuilder 775784
                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
rdobuilder 775784
            then
rdobuilder 775784
              if test -z "$dir_arg" || {
rdobuilder 775784
                   # Check for POSIX incompatibilities with -m.
rdobuilder 775784
                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
rdobuilder 775784
                   # other-writable bit of parent directory when it shouldn't.
rdobuilder 775784
                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
rdobuilder 775784
                   test_tmpdir="$tmpdir/a"
rdobuilder 775784
                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
rdobuilder 775784
                   case $ls_ld_tmpdir in
rdobuilder 775784
                     d????-?r-*) different_mode=700;;
rdobuilder 775784
                     d????-?--*) different_mode=755;;
rdobuilder 775784
                     *) false;;
rdobuilder 775784
                   esac &&
rdobuilder 775784
                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
rdobuilder 775784
                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
rdobuilder 775784
                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
rdobuilder 775784
                   }
rdobuilder 775784
                 }
rdobuilder 775784
              then posix_mkdir=:
rdobuilder 775784
              fi
rdobuilder 775784
              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
rdobuilder 775784
            else
rdobuilder 775784
              # Remove any dirs left behind by ancient mkdir implementations.
rdobuilder 775784
              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
rdobuilder 775784
            fi
rdobuilder 775784
            trap '' 0;;
rdobuilder 775784
        esac;;
rdobuilder 775784
    esac
rdobuilder 775784
rdobuilder 775784
    if
rdobuilder 775784
      $posix_mkdir && (
rdobuilder 775784
        umask $mkdir_umask &&
rdobuilder 775784
        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
rdobuilder 775784
      )
rdobuilder 775784
    then :
rdobuilder 775784
    else
rdobuilder 775784
rdobuilder 775784
      # The umask is ridiculous, or mkdir does not conform to POSIX,
rdobuilder 775784
      # or it failed possibly due to a race condition.  Create the
rdobuilder 775784
      # directory the slow way, step by step, checking for races as we go.
rdobuilder 775784
rdobuilder 775784
      case $dstdir in
rdobuilder 775784
        /*) prefix='/';;
rdobuilder 775784
        [-=\(\)!]*) prefix='./';;
rdobuilder 775784
        *)  prefix='';;
rdobuilder 775784
      esac
rdobuilder 775784
rdobuilder 775784
      oIFS=$IFS
rdobuilder 775784
      IFS=/
rdobuilder 775784
      set -f
rdobuilder 775784
      set fnord $dstdir
rdobuilder 775784
      shift
rdobuilder 775784
      set +f
rdobuilder 775784
      IFS=$oIFS
rdobuilder 775784
rdobuilder 775784
      prefixes=
rdobuilder 775784
rdobuilder 775784
      for d
rdobuilder 775784
      do
rdobuilder 775784
        test X"$d" = X && continue
rdobuilder 775784
rdobuilder 775784
        prefix=$prefix$d
rdobuilder 775784
        if test -d "$prefix"; then
rdobuilder 775784
          prefixes=
rdobuilder 775784
        else
rdobuilder 775784
          if $posix_mkdir; then
rdobuilder 775784
            (umask=$mkdir_umask &&
rdobuilder 775784
             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
rdobuilder 775784
            # Don't fail if two instances are running concurrently.
rdobuilder 775784
            test -d "$prefix" || exit 1
rdobuilder 775784
          else
rdobuilder 775784
            case $prefix in
rdobuilder 775784
              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
rdobuilder 775784
              *) qprefix=$prefix;;
rdobuilder 775784
            esac
rdobuilder 775784
            prefixes="$prefixes '$qprefix'"
rdobuilder 775784
          fi
rdobuilder 775784
        fi
rdobuilder 775784
        prefix=$prefix/
rdobuilder 775784
      done
rdobuilder 775784
rdobuilder 775784
      if test -n "$prefixes"; then
rdobuilder 775784
        # Don't fail if two instances are running concurrently.
rdobuilder 775784
        (umask $mkdir_umask &&
rdobuilder 775784
         eval "\$doit_exec \$mkdirprog $prefixes") ||
rdobuilder 775784
          test -d "$dstdir" || exit 1
rdobuilder 775784
        obsolete_mkdir_used=true
rdobuilder 775784
      fi
rdobuilder 775784
    fi
rdobuilder 775784
  fi
rdobuilder 775784
rdobuilder 775784
  if test -n "$dir_arg"; then
rdobuilder 775784
    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
rdobuilder 775784
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
rdobuilder 775784
    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
rdobuilder 775784
      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
rdobuilder 775784
  else
rdobuilder 775784
rdobuilder 775784
    # Make a couple of temp file names in the proper directory.
rdobuilder 775784
    dsttmp=${dstdirslash}_inst.$$_
rdobuilder 775784
    rmtmp=${dstdirslash}_rm.$$_
rdobuilder 775784
rdobuilder 775784
    # Trap to clean up those temp files at exit.
rdobuilder 775784
    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
rdobuilder 775784
rdobuilder 775784
    # Copy the file name to the temp name.
rdobuilder 775784
    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
rdobuilder 775784
rdobuilder 775784
    # and set any options; do chmod last to preserve setuid bits.
rdobuilder 775784
    #
rdobuilder 775784
    # If any of these fail, we abort the whole thing.  If we want to
rdobuilder 775784
    # ignore errors from any of these, just make sure not to ignore
rdobuilder 775784
    # errors from the above "$doit $cpprog $src $dsttmp" command.
rdobuilder 775784
    #
rdobuilder 775784
    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
rdobuilder 775784
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
rdobuilder 775784
    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
rdobuilder 775784
    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
rdobuilder 775784
rdobuilder 775784
    # If -C, don't bother to copy if it wouldn't change the file.
rdobuilder 775784
    if $copy_on_change &&
rdobuilder 775784
       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
rdobuilder 775784
       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
rdobuilder 775784
       set -f &&
rdobuilder 775784
       set X $old && old=:$2:$4:$5:$6 &&
rdobuilder 775784
       set X $new && new=:$2:$4:$5:$6 &&
rdobuilder 775784
       set +f &&
rdobuilder 775784
       test "$old" = "$new" &&
rdobuilder 775784
       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
rdobuilder 775784
    then
rdobuilder 775784
      rm -f "$dsttmp"
rdobuilder 775784
    else
rdobuilder 775784
      # Rename the file to the real destination.
rdobuilder 775784
      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
rdobuilder 775784
rdobuilder 775784
      # The rename failed, perhaps because mv can't rename something else
rdobuilder 775784
      # to itself, or perhaps because mv is so ancient that it does not
rdobuilder 775784
      # support -f.
rdobuilder 775784
      {
rdobuilder 775784
        # Now remove or move aside any old file at destination location.
rdobuilder 775784
        # We try this two ways since rm can't unlink itself on some
rdobuilder 775784
        # systems and the destination file might be busy for other
rdobuilder 775784
        # reasons.  In this case, the final cleanup might fail but the new
rdobuilder 775784
        # file should still install successfully.
rdobuilder 775784
        {
rdobuilder 775784
          test ! -f "$dst" ||
rdobuilder 775784
          $doit $rmcmd -f "$dst" 2>/dev/null ||
rdobuilder 775784
          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
rdobuilder 775784
            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
rdobuilder 775784
          } ||
rdobuilder 775784
          { echo "$0: cannot unlink or rename $dst" >&2
rdobuilder 775784
            (exit 1); exit 1
rdobuilder 775784
          }
rdobuilder 775784
        } &&
rdobuilder 775784
rdobuilder 775784
        # Now rename the file to the real destination.
rdobuilder 775784
        $doit $mvcmd "$dsttmp" "$dst"
rdobuilder 775784
      }
rdobuilder 775784
    fi || exit 1
rdobuilder 775784
rdobuilder 775784
    trap '' 0
rdobuilder 775784
  fi
rdobuilder 775784
done
rdobuilder 775784
rdobuilder 775784
# Local variables:
rdobuilder 775784
# eval: (add-hook 'before-save-hook 'time-stamp)
rdobuilder 775784
# time-stamp-start: "scriptversion="
rdobuilder 775784
# time-stamp-format: "%:y-%02m-%02d.%02H"
rdobuilder 775784
# time-stamp-time-zone: "UTC0"
rdobuilder 775784
# time-stamp-end: "; # UTC"
rdobuilder 775784
# End: