Blame install-sh

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