Blame build-aux/install-sh

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