1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#!/bin/sh
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#
3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# install - install a program, script, or datafile
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# This comes from X11R5 (mit/util/scripts/install.sh).
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Copyright 1991 by the Massachusetts Institute of Technology
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Permission to use, copy, modify, distribute, and sell this software and its
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# documentation for any purpose is hereby granted without fee, provided that
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# the above copyright notice appear in all copies and that both that
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# copyright notice and this permission notice appear in supporting
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# documentation, and that the name of M.I.T. not be used in advertising or
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# publicity pertaining to distribution of the software without specific,
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# written prior permission.  M.I.T. makes no representations about the
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# suitability of this software for any purpose.  It is provided "as is"
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# without express or implied warranty.
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Calling this script install-sh is preferred over install.sh, to prevent
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# `make' implicit rules from creating a file called install from it
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# when there is no Makefile.
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# This script is compatible with the BSD install script, but was written
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# from scratch.  It can only install one file at a time, a restriction
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# shared with many OS's install programs.
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# set DOITPROG to echo to test this script
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Don't use :- since 4.3BSD and earlier shells don't like it.
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querudoit="${DOITPROG-}"
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# put in absolute paths if you don't have them in your path; or use env. vars.
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querumvprog="${MVPROG-mv}"
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querucpprog="${CPPROG-cp}"
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchmodprog="${CHMODPROG-chmod}"
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchownprog="${CHOWNPROG-chown}"
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchgrpprog="${CHGRPPROG-chgrp}"
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustripprog="${STRIPPROG-strip}"
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querurmprog="${RMPROG-rm}"
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querumkdirprog="${MKDIRPROG-mkdir}"
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutransformbasename=""
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutransform_arg=""
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinstcmd="$mvprog"
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchmodcmd="$chmodprog 0755"
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchowncmd=""
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchgrpcmd=""
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustripcmd=""
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querurmcmd="$rmprog -f"
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querumvcmd="$mvprog"
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querusrc=""
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querudst=""
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querudir_arg=""
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruwhile [ x"$1" != x ]; do
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    case $1 in
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-c) instcmd="$cpprog"
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-d) dir_arg=true
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-m) chmodcmd="$chmodprog $2"
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-o) chowncmd="$chownprog $2"
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-g) chgrpcmd="$chgrpprog $2"
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-s) stripcmd="$stripprog"
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	*)  if [ x"$src" = x ]
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    then
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		src=$1
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    else
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		# this colon is to work around a 386BSD /bin/sh bug
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		:
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		dst=$1
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    fi
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    shift
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	    continue;;
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    esac
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querudone
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruif [ x"$src" = x ]
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruthen
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	echo "install:	no input file specified"
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	exit 1
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruelse
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	true
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querufi
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruif [ x"$dir_arg" != x ]; then
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	dst=$src
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	src=""
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ -d $dst ]; then
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		instcmd=:
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		chmodcmd=""
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	else
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		instcmd=mkdir
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	fi
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruelse
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# might cause directories to be created, which would be especially bad 
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# if $src (and thus $dsttmp) contains '*'.
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ -f $src -o -d $src ]
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	then
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		true
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	else
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		echo "install:  $src does not exist"
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		exit 1
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	fi
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$dst" = x ]
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	then
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		echo "install:	no destination specified"
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		exit 1
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	else
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		true
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	fi
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# If destination is a directory, append the input filename; if your system
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# does not like double slashes in filenames, you may need to add some logic
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ -d $dst ]
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	then
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		dst="$dst"/`basename $src`
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	else
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		true
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	fi
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querufi
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru## this sed command emulates the dirname command
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querudstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Make sure that the destination directory exists.
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#  this part is taken from Noah Friedman's mkinstalldirs script
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Skip lots of stat calls in the usual case.
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruif [ ! -d "$dstdir" ]; then
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QuerudefaultIFS='	
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru'
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruIFS="${IFS-${defaultIFS}}"
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruoIFS="${IFS}"
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Some sh's can't handle IFS=/ for some reason.
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruIFS='%'
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruIFS="${oIFS}"
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupathcomp=''
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruwhile [ $# -ne 0 ] ; do
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	pathcomp="${pathcomp}${1}"
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	shift
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ ! -d "${pathcomp}" ] ;
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        then
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		$mkdirprog "${pathcomp}"
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	else
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		true
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	fi
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	pathcomp="${pathcomp}/"
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querudone
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querufi
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruif [ x"$dir_arg" != x ]
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruthen
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	$doit $instcmd $dst &&
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruelse
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# If we're going to rename the final executable, determine the name now.
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$transformarg" = x ] 
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	then
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		dstfile=`basename $dst`
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	else
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		dstfile=`basename $dst $transformbasename | 
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru			sed $transformarg`$transformbasename
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	fi
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# don't allow the sed command to completely eliminate the filename
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$dstfile" = x ] 
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	then
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		dstfile=`basename $dst`
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	else
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru		true
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	fi
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Make a temp file name in the proper directory.
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	dsttmp=$dstdir/#inst.$$#
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Move or copy the file name to the temp name
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	$doit $instcmd $src $dsttmp &&
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	trap "rm -f ${dsttmp}" 0 &&
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# and set any options; do chmod last to preserve setuid bits
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# If any of these fail, we abort the whole thing.  If we want to
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# ignore errors from any of these, just make sure not to ignore
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# errors from the above "$doit $instcmd $src $dsttmp" command.
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru# Now rename the file to the real destination.
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	$doit $rmcmd -f $dstdir/$dstfile &&
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru	$doit $mvcmd $dsttmp $dstdir/$dstfile 
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querufi &&
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruexit 0
252