Blame install-sh

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