Blame config/install-sh

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