117721Speter#!/bin/sh
217721Speter# install - install a program, script, or datafile
3177391Sobrien
4177391Sobrienscriptversion=2006-10-14.15
5177391Sobrien
6177391Sobrien# This originates from X11R5 (mit/util/scripts/install.sh), which was
7177391Sobrien# later released in X11R6 (xc/config/util/install.sh) with the
8177391Sobrien# following copyright and license.
917721Speter#
10177391Sobrien# Copyright (C) 1994 X Consortium
1181404Speter#
12177391Sobrien# Permission is hereby granted, free of charge, to any person obtaining a copy
13177391Sobrien# of this software and associated documentation files (the "Software"), to
14177391Sobrien# deal in the Software without restriction, including without limitation the
15177391Sobrien# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16177391Sobrien# sell copies of the Software, and to permit persons to whom the Software is
17177391Sobrien# furnished to do so, subject to the following conditions:
1881404Speter#
19177391Sobrien# The above copyright notice and this permission notice shall be included in
20177391Sobrien# all copies or substantial portions of the Software.
21177391Sobrien#
22177391Sobrien# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23177391Sobrien# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24177391Sobrien# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
25177391Sobrien# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26177391Sobrien# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27177391Sobrien# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28177391Sobrien#
29177391Sobrien# Except as contained in this notice, the name of the X Consortium shall not
30177391Sobrien# be used in advertising or otherwise to promote the sale, use or other deal-
31177391Sobrien# ings in this Software without prior written authorization from the X Consor-
32177391Sobrien# tium.
33177391Sobrien#
34177391Sobrien#
35177391Sobrien# FSF changes to this file are in the public domain.
36177391Sobrien#
3717721Speter# Calling this script install-sh is preferred over install.sh, to prevent
3817721Speter# `make' implicit rules from creating a file called install from it
3917721Speter# when there is no Makefile.
4017721Speter#
4117721Speter# This script is compatible with the BSD install script, but was written
42177391Sobrien# from scratch.
4317721Speter
44177391Sobriennl='
45177391Sobrien'
46177391SobrienIFS=" ""	$nl"
4717721Speter
4817721Speter# set DOITPROG to echo to test this script
4917721Speter
5017721Speter# Don't use :- since 4.3BSD and earlier shells don't like it.
5117721Speterdoit="${DOITPROG-}"
52177391Sobrienif test -z "$doit"; then
53177391Sobrien  doit_exec=exec
54177391Sobrienelse
55177391Sobrien  doit_exec=$doit
56177391Sobrienfi
5717721Speter
58177391Sobrien# Put in absolute file names if you don't have them in your path;
59177391Sobrien# or use environment vars.
6017721Speter
6117721Spetermvprog="${MVPROG-mv}"
6217721Spetercpprog="${CPPROG-cp}"
6317721Speterchmodprog="${CHMODPROG-chmod}"
6417721Speterchownprog="${CHOWNPROG-chown}"
6517721Speterchgrpprog="${CHGRPPROG-chgrp}"
6617721Speterstripprog="${STRIPPROG-strip}"
6717721Speterrmprog="${RMPROG-rm}"
6817721Spetermkdirprog="${MKDIRPROG-mkdir}"
6917721Speter
70177391Sobrienposix_glob=
71177391Sobrienposix_mkdir=
72177391Sobrien
73177391Sobrien# Desired mode of installed file.
74177391Sobrienmode=0755
75177391Sobrien
76177391Sobrienchmodcmd=$chmodprog
77177391Sobrienchowncmd=
78177391Sobrienchgrpcmd=
79177391Sobrienstripcmd=
8017721Speterrmcmd="$rmprog -f"
8117721Spetermvcmd="$mvprog"
82177391Sobriensrc=
83177391Sobriendst=
84177391Sobriendir_arg=
85177391Sobriendstarg=
86177391Sobrienno_target_directory=
8717721Speter
88177391Sobrienusage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
89177391Sobrien   or: $0 [OPTION]... SRCFILES... DIRECTORY
90177391Sobrien   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
91177391Sobrien   or: $0 [OPTION]... -d DIRECTORIES...
9217721Speter
93177391SobrienIn the 1st form, copy SRCFILE to DSTFILE.
94177391SobrienIn the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
95177391SobrienIn the 4th, create DIRECTORIES.
9617721Speter
97177391SobrienOptions:
98177391Sobrien-c         (ignored)
99177391Sobrien-d         create directories instead of installing files.
100177391Sobrien-g GROUP   $chgrpprog installed files to GROUP.
101177391Sobrien-m MODE    $chmodprog installed files to MODE.
102177391Sobrien-o USER    $chownprog installed files to USER.
103177391Sobrien-s         $stripprog installed files.
104177391Sobrien-t DIRECTORY  install into DIRECTORY.
105177391Sobrien-T         report an error if DSTFILE is a directory.
106177391Sobrien--help     display this help and exit.
107177391Sobrien--version  display version info and exit.
10817721Speter
109177391SobrienEnvironment variables override the default commands:
110177391Sobrien  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
111177391Sobrien"
11217721Speter
113177391Sobrienwhile test $# -ne 0; do
114177391Sobrien  case $1 in
115177391Sobrien    -c) shift
116177391Sobrien        continue;;
11717721Speter
118177391Sobrien    -d) dir_arg=true
119177391Sobrien        shift
120177391Sobrien        continue;;
12117721Speter
122177391Sobrien    -g) chgrpcmd="$chgrpprog $2"
123177391Sobrien        shift
124177391Sobrien        shift
125177391Sobrien        continue;;
12617721Speter
127177391Sobrien    --help) echo "$usage"; exit $?;;
12817721Speter
129177391Sobrien    -m) mode=$2
130177391Sobrien        shift
131177391Sobrien        shift
132177391Sobrien	case $mode in
133177391Sobrien	  *' '* | *'	'* | *'
134177391Sobrien'*	  | *'*'* | *'?'* | *'['*)
135177391Sobrien	    echo "$0: invalid mode: $mode" >&2
136177391Sobrien	    exit 1;;
137177391Sobrien	esac
138177391Sobrien        continue;;
139177391Sobrien
140177391Sobrien    -o) chowncmd="$chownprog $2"
141177391Sobrien        shift
142177391Sobrien        shift
143177391Sobrien        continue;;
144177391Sobrien
145177391Sobrien    -s) stripcmd=$stripprog
146177391Sobrien        shift
147177391Sobrien        continue;;
148177391Sobrien
149177391Sobrien    -t) dstarg=$2
150177391Sobrien	shift
151177391Sobrien	shift
152177391Sobrien	continue;;
153177391Sobrien
154177391Sobrien    -T) no_target_directory=true
155177391Sobrien	shift
156177391Sobrien	continue;;
157177391Sobrien
158177391Sobrien    --version) echo "$0 $scriptversion"; exit $?;;
159177391Sobrien
160177391Sobrien    --)	shift
161177391Sobrien	break;;
162177391Sobrien
163177391Sobrien    -*)	echo "$0: invalid option: $1" >&2
164177391Sobrien	exit 1;;
165177391Sobrien
166177391Sobrien    *)  break;;
167177391Sobrien  esac
16817721Speterdone
16917721Speter
170177391Sobrienif test $# -ne 0 && test -z "$dir_arg$dstarg"; then
171177391Sobrien  # When -d is used, all remaining arguments are directories to create.
172177391Sobrien  # When -t is used, the destination is already specified.
173177391Sobrien  # Otherwise, the last argument is the destination.  Remove it from $@.
174177391Sobrien  for arg
175177391Sobrien  do
176177391Sobrien    if test -n "$dstarg"; then
177177391Sobrien      # $@ is not empty: it contains at least $arg.
178177391Sobrien      set fnord "$@" "$dstarg"
179177391Sobrien      shift # fnord
180177391Sobrien    fi
181177391Sobrien    shift # arg
182177391Sobrien    dstarg=$arg
183177391Sobrien  done
18417721Speterfi
18517721Speter
186177391Sobrienif test $# -eq 0; then
187177391Sobrien  if test -z "$dir_arg"; then
188177391Sobrien    echo "$0: no input file specified." >&2
189177391Sobrien    exit 1
190177391Sobrien  fi
191177391Sobrien  # It's OK to call `install-sh -d' without argument.
192177391Sobrien  # This can happen when creating conditional directories.
193177391Sobrien  exit 0
194177391Sobrienfi
19517721Speter
196177391Sobrienif test -z "$dir_arg"; then
197177391Sobrien  trap '(exit $?); exit' 1 2 13 15
19817721Speter
199177391Sobrien  # Set umask so as not to create temps with too-generous modes.
200177391Sobrien  # However, 'strip' requires both read and write access to temps.
201177391Sobrien  case $mode in
202177391Sobrien    # Optimize common cases.
203177391Sobrien    *644) cp_umask=133;;
204177391Sobrien    *755) cp_umask=22;;
20517721Speter
206177391Sobrien    *[0-7])
207177391Sobrien      if test -z "$stripcmd"; then
208177391Sobrien	u_plus_rw=
209177391Sobrien      else
210177391Sobrien	u_plus_rw='% 200'
211177391Sobrien      fi
212177391Sobrien      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
213177391Sobrien    *)
214177391Sobrien      if test -z "$stripcmd"; then
215177391Sobrien	u_plus_rw=
216177391Sobrien      else
217177391Sobrien	u_plus_rw=,u+rw
218177391Sobrien      fi
219177391Sobrien      cp_umask=$mode$u_plus_rw;;
220177391Sobrien  esac
22117721Speterfi
22217721Speter
223177391Sobrienfor src
224177391Sobriendo
225177391Sobrien  # Protect names starting with `-'.
226177391Sobrien  case $src in
227177391Sobrien    -*) src=./$src ;;
228177391Sobrien  esac
22917721Speter
230177391Sobrien  if test -n "$dir_arg"; then
231177391Sobrien    dst=$src
232177391Sobrien    dstdir=$dst
233177391Sobrien    test -d "$dstdir"
234177391Sobrien    dstdir_status=$?
235177391Sobrien  else
23617721Speter
237177391Sobrien    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
238177391Sobrien    # might cause directories to be created, which would be especially bad
239177391Sobrien    # if $src (and thus $dsttmp) contains '*'.
240177391Sobrien    if test ! -f "$src" && test ! -d "$src"; then
241177391Sobrien      echo "$0: $src does not exist." >&2
242177391Sobrien      exit 1
243177391Sobrien    fi
24417721Speter
245177391Sobrien    if test -z "$dstarg"; then
246177391Sobrien      echo "$0: no destination specified." >&2
247177391Sobrien      exit 1
248177391Sobrien    fi
24917721Speter
250177391Sobrien    dst=$dstarg
251177391Sobrien    # Protect names starting with `-'.
252177391Sobrien    case $dst in
253177391Sobrien      -*) dst=./$dst ;;
254177391Sobrien    esac
25517721Speter
256177391Sobrien    # If destination is a directory, append the input filename; won't work
257177391Sobrien    # if double slashes aren't ignored.
258177391Sobrien    if test -d "$dst"; then
259177391Sobrien      if test -n "$no_target_directory"; then
260177391Sobrien	echo "$0: $dstarg: Is a directory" >&2
261177391Sobrien	exit 1
262177391Sobrien      fi
263177391Sobrien      dstdir=$dst
264177391Sobrien      dst=$dstdir/`basename "$src"`
265177391Sobrien      dstdir_status=0
266177391Sobrien    else
267177391Sobrien      # Prefer dirname, but fall back on a substitute if dirname fails.
268177391Sobrien      dstdir=`
269177391Sobrien	(dirname "$dst") 2>/dev/null ||
270177391Sobrien	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
271177391Sobrien	     X"$dst" : 'X\(//\)[^/]' \| \
272177391Sobrien	     X"$dst" : 'X\(//\)$' \| \
273177391Sobrien	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
274177391Sobrien	echo X"$dst" |
275177391Sobrien	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
276177391Sobrien		   s//\1/
277177391Sobrien		   q
278177391Sobrien		 }
279177391Sobrien		 /^X\(\/\/\)[^/].*/{
280177391Sobrien		   s//\1/
281177391Sobrien		   q
282177391Sobrien		 }
283177391Sobrien		 /^X\(\/\/\)$/{
284177391Sobrien		   s//\1/
285177391Sobrien		   q
286177391Sobrien		 }
287177391Sobrien		 /^X\(\/\).*/{
288177391Sobrien		   s//\1/
289177391Sobrien		   q
290177391Sobrien		 }
291177391Sobrien		 s/.*/./; q'
292177391Sobrien      `
29317721Speter
294177391Sobrien      test -d "$dstdir"
295177391Sobrien      dstdir_status=$?
296177391Sobrien    fi
297177391Sobrien  fi
298177391Sobrien
299177391Sobrien  obsolete_mkdir_used=false
300177391Sobrien
301177391Sobrien  if test $dstdir_status != 0; then
302177391Sobrien    case $posix_mkdir in
303177391Sobrien      '')
304177391Sobrien	# Create intermediate dirs using mode 755 as modified by the umask.
305177391Sobrien	# This is like FreeBSD 'install' as of 1997-10-28.
306177391Sobrien	umask=`umask`
307177391Sobrien	case $stripcmd.$umask in
308177391Sobrien	  # Optimize common cases.
309177391Sobrien	  *[2367][2367]) mkdir_umask=$umask;;
310177391Sobrien	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
311177391Sobrien
312177391Sobrien	  *[0-7])
313177391Sobrien	    mkdir_umask=`expr $umask + 22 \
314177391Sobrien	      - $umask % 100 % 40 + $umask % 20 \
315177391Sobrien	      - $umask % 10 % 4 + $umask % 2
316177391Sobrien	    `;;
317177391Sobrien	  *) mkdir_umask=$umask,go-w;;
318177391Sobrien	esac
319177391Sobrien
320177391Sobrien	# With -d, create the new directory with the user-specified mode.
321177391Sobrien	# Otherwise, rely on $mkdir_umask.
322177391Sobrien	if test -n "$dir_arg"; then
323177391Sobrien	  mkdir_mode=-m$mode
32417721Speter	else
325177391Sobrien	  mkdir_mode=
32617721Speter	fi
32717721Speter
328177391Sobrien	posix_mkdir=false
329177391Sobrien	case $umask in
330177391Sobrien	  *[123567][0-7][0-7])
331177391Sobrien	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
332177391Sobrien	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
333177391Sobrien	    ;;
334177391Sobrien	  *)
335177391Sobrien	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
336177391Sobrien	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
33717721Speter
338177391Sobrien	    if (umask $mkdir_umask &&
339177391Sobrien		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
340177391Sobrien	    then
341177391Sobrien	      if test -z "$dir_arg" || {
342177391Sobrien		   # Check for POSIX incompatibilities with -m.
343177391Sobrien		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
344177391Sobrien		   # other-writeable bit of parent directory when it shouldn't.
345177391Sobrien		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
346177391Sobrien		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
347177391Sobrien		   case $ls_ld_tmpdir in
348177391Sobrien		     d????-?r-*) different_mode=700;;
349177391Sobrien		     d????-?--*) different_mode=755;;
350177391Sobrien		     *) false;;
351177391Sobrien		   esac &&
352177391Sobrien		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
353177391Sobrien		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
354177391Sobrien		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
355177391Sobrien		   }
356177391Sobrien		 }
357177391Sobrien	      then posix_mkdir=:
358177391Sobrien	      fi
359177391Sobrien	      rmdir "$tmpdir/d" "$tmpdir"
360177391Sobrien	    else
361177391Sobrien	      # Remove any dirs left behind by ancient mkdir implementations.
362177391Sobrien	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
363177391Sobrien	    fi
364177391Sobrien	    trap '' 0;;
365177391Sobrien	esac;;
366177391Sobrien    esac
36717721Speter
368177391Sobrien    if
369177391Sobrien      $posix_mkdir && (
370177391Sobrien	umask $mkdir_umask &&
371177391Sobrien	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
372177391Sobrien      )
373177391Sobrien    then :
374177391Sobrien    else
37517721Speter
376177391Sobrien      # The umask is ridiculous, or mkdir does not conform to POSIX,
377177391Sobrien      # or it failed possibly due to a race condition.  Create the
378177391Sobrien      # directory the slow way, step by step, checking for races as we go.
37917721Speter
380177391Sobrien      case $dstdir in
381177391Sobrien	/*) prefix=/ ;;
382177391Sobrien	-*) prefix=./ ;;
383177391Sobrien	*)  prefix= ;;
384177391Sobrien      esac
38517721Speter
386177391Sobrien      case $posix_glob in
387177391Sobrien        '')
388177391Sobrien	  if (set -f) 2>/dev/null; then
389177391Sobrien	    posix_glob=true
390177391Sobrien	  else
391177391Sobrien	    posix_glob=false
392177391Sobrien	  fi ;;
393177391Sobrien      esac
39417721Speter
395177391Sobrien      oIFS=$IFS
396177391Sobrien      IFS=/
397177391Sobrien      $posix_glob && set -f
398177391Sobrien      set fnord $dstdir
399177391Sobrien      shift
400177391Sobrien      $posix_glob && set +f
401177391Sobrien      IFS=$oIFS
402177391Sobrien
403177391Sobrien      prefixes=
404177391Sobrien
405177391Sobrien      for d
406177391Sobrien      do
407177391Sobrien	test -z "$d" && continue
408177391Sobrien
409177391Sobrien	prefix=$prefix$d
410177391Sobrien	if test -d "$prefix"; then
411177391Sobrien	  prefixes=
41217721Speter	else
413177391Sobrien	  if $posix_mkdir; then
414177391Sobrien	    (umask=$mkdir_umask &&
415177391Sobrien	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
416177391Sobrien	    # Don't fail if two instances are running concurrently.
417177391Sobrien	    test -d "$prefix" || exit 1
418177391Sobrien	  else
419177391Sobrien	    case $prefix in
420177391Sobrien	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
421177391Sobrien	      *) qprefix=$prefix;;
422177391Sobrien	    esac
423177391Sobrien	    prefixes="$prefixes '$qprefix'"
424177391Sobrien	  fi
42517721Speter	fi
426177391Sobrien	prefix=$prefix/
427177391Sobrien      done
42817721Speter
429177391Sobrien      if test -n "$prefixes"; then
430177391Sobrien	# Don't fail if two instances are running concurrently.
431177391Sobrien	(umask $mkdir_umask &&
432177391Sobrien	 eval "\$doit_exec \$mkdirprog $prefixes") ||
433177391Sobrien	  test -d "$dstdir" || exit 1
434177391Sobrien	obsolete_mkdir_used=true
435177391Sobrien      fi
436177391Sobrien    fi
437177391Sobrien  fi
43817721Speter
439177391Sobrien  if test -n "$dir_arg"; then
440177391Sobrien    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
441177391Sobrien    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
442177391Sobrien    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
443177391Sobrien      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
444177391Sobrien  else
44517721Speter
446177391Sobrien    # Make a couple of temp file names in the proper directory.
447177391Sobrien    dsttmp=$dstdir/_inst.$$_
448177391Sobrien    rmtmp=$dstdir/_rm.$$_
44917721Speter
450177391Sobrien    # Trap to clean up those temp files at exit.
451177391Sobrien    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
45217721Speter
453177391Sobrien    # Copy the file name to the temp name.
454177391Sobrien    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
45517721Speter
456177391Sobrien    # and set any options; do chmod last to preserve setuid bits.
457177391Sobrien    #
458177391Sobrien    # If any of these fail, we abort the whole thing.  If we want to
459177391Sobrien    # ignore errors from any of these, just make sure not to ignore
460177391Sobrien    # errors from the above "$doit $cpprog $src $dsttmp" command.
461177391Sobrien    #
462177391Sobrien    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
463177391Sobrien      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
464177391Sobrien      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
465177391Sobrien      && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
46617721Speter
467177391Sobrien    # Now rename the file to the real destination.
468177391Sobrien    { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
469177391Sobrien      || {
470177391Sobrien	   # The rename failed, perhaps because mv can't rename something else
471177391Sobrien	   # to itself, or perhaps because mv is so ancient that it does not
472177391Sobrien	   # support -f.
47317721Speter
474177391Sobrien	   # Now remove or move aside any old file at destination location.
475177391Sobrien	   # We try this two ways since rm can't unlink itself on some
476177391Sobrien	   # systems and the destination file might be busy for other
477177391Sobrien	   # reasons.  In this case, the final cleanup might fail but the new
478177391Sobrien	   # file should still install successfully.
479177391Sobrien	   {
480177391Sobrien	     if test -f "$dst"; then
481177391Sobrien	       $doit $rmcmd -f "$dst" 2>/dev/null \
482177391Sobrien	       || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
483177391Sobrien		     && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
484177391Sobrien	       || {
485177391Sobrien		 echo "$0: cannot unlink or rename $dst" >&2
486177391Sobrien		 (exit 1); exit 1
487177391Sobrien	       }
488177391Sobrien	     else
489177391Sobrien	       :
490177391Sobrien	     fi
491177391Sobrien	   } &&
49217721Speter
493177391Sobrien	   # Now rename the file to the real destination.
494177391Sobrien	   $doit $mvcmd "$dsttmp" "$dst"
495177391Sobrien	 }
496177391Sobrien    } || exit 1
49717721Speter
498177391Sobrien    trap '' 0
499177391Sobrien  fi
500177391Sobriendone
50117721Speter
502177391Sobrien# Local variables:
503177391Sobrien# eval: (add-hook 'write-file-hooks 'time-stamp)
504177391Sobrien# time-stamp-start: "scriptversion="
505177391Sobrien# time-stamp-format: "%:y-%02m-%02d.%02H"
506177391Sobrien# time-stamp-end: "$"
507177391Sobrien# End:
508