Blame install-sh

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