Blame install-sh

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