Blame install-sh

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