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