170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#!/bin/sh
270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#
370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# install - install a program, script, or datafile
470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# This comes from X11R5 (mit/util/scripts/install.sh).
570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#
670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Copyright 1991 by the Massachusetts Institute of Technology
770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#
870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Permission to use, copy, modify, distribute, and sell this software and its
970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# documentation for any purpose is hereby granted without fee, provided that
1070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# the above copyright notice appear in all copies and that both that
1170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# copyright notice and this permission notice appear in supporting
1270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# documentation, and that the name of M.I.T. not be used in advertising or
1370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# publicity pertaining to distribution of the software without specific,
1470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# written prior permission.  M.I.T. makes no representations about the
1570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# suitability of this software for any purpose.  It is provided "as is"
1670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# without express or implied warranty.
1770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#
1870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Calling this script install-sh is preferred over install.sh, to prevent
1970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# `make' implicit rules from creating a file called install from it
2070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# when there is no Makefile.
2170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#
2270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# This script is compatible with the BSD install script, but was written
2370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# from scratch.  It can only install one file at a time, a restriction
2470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# shared with many OS's install programs.
2570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
2670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
2770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# set DOITPROG to echo to test this script
2870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
2970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Don't use :- since 4.3BSD and earlier shells don't like it.
3070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedoit="${DOITPROG-}"
3170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
3270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
3370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# put in absolute paths if you don't have them in your path; or use env. vars.
3470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
3570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinemvprog="${MVPROG-mv}"
3670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinecpprog="${CPPROG-cp}"
3770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechmodprog="${CHMODPROG-chmod}"
3870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechownprog="${CHOWNPROG-chown}"
3970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechgrpprog="${CHGRPPROG-chgrp}"
4070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinestripprog="${STRIPPROG-strip}"
4170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinermprog="${RMPROG-rm}"
4270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinemkdirprog="${MKDIRPROG-mkdir}"
4370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
4470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinetransformbasename=""
4570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinetransform_arg=""
4670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineinstcmd="$mvprog"
4770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechmodcmd="$chmodprog 0755"
4870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechowncmd=""
4970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechgrpcmd=""
5070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinestripcmd=""
5170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinermcmd="$rmprog -f"
5270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinemvcmd="$mvprog"
5370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinesrc=""
5470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedst=""
5570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedir_arg=""
5670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
5770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinewhile [ x"$1" != x ]; do
5870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine    case $1 in
5970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-c) instcmd="$cpprog"
6070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
6170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
6270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
6370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-d) dir_arg=true
6470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
6570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
6670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
6770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-m) chmodcmd="$chmodprog $2"
6870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
6970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
7070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
7170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
7270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-o) chowncmd="$chownprog $2"
7370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
7470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
7570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
7670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
7770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-g) chgrpcmd="$chgrpprog $2"
7870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
7970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
8070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
8170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
8270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-s) stripcmd="$stripprog"
8370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
8470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
8570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
8670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
8770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
8870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
8970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
9070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
9170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
9270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
9370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
9470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	*)  if [ x"$src" = x ]
9570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    then
9670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		src=$1
9770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    else
9870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		# this colon is to work around a 386BSD /bin/sh bug
9970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		:
10070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		dst=$1
10170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    fi
10270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    shift
10370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	    continue;;
10470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine    esac
10570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedone
10670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
10770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ x"$src" = x ]
10870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinethen
10970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	echo "install:	no input file specified"
11070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	exit 1
11170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineelse
11270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	true
11370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi
11470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
11570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ x"$dir_arg" != x ]; then
11670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	dst=$src
11770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	src=""
11870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	
11970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ -d $dst ]; then
12070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		instcmd=:
12170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	else
12270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		instcmd=mkdir
12370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	fi
12470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineelse
12570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
12670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
12770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# might cause directories to be created, which would be especially bad 
12870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# if $src (and thus $dsttmp) contains '*'.
12970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
13070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ -f $src -o -d $src ]
13170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	then
13270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		true
13370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	else
13470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		echo "install:  $src does not exist"
13570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		exit 1
13670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	fi
13770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	
13870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$dst" = x ]
13970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	then
14070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		echo "install:	no destination specified"
14170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		exit 1
14270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	else
14370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		true
14470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	fi
14570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
14670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# If destination is a directory, append the input filename; if your system
14770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# does not like double slashes in filenames, you may need to add some logic
14870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
14970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ -d $dst ]
15070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	then
15170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		dst="$dst"/`basename $src`
15270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	else
15370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		true
15470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	fi
15570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi
15670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
15770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine## this sed command emulates the dirname command
15870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
15970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
16070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Make sure that the destination directory exists.
16170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#  this part is taken from Noah Friedman's mkinstalldirs script
16270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
16370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Skip lots of stat calls in the usual case.
16470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ ! -d "$dstdir" ]; then
16570a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkinedefaultIFS='	
16670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine'
16770a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineIFS="${IFS-${defaultIFS}}"
16870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
16970a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineoIFS="${IFS}"
17070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Some sh's can't handle IFS=/ for some reason.
17170a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineIFS='%'
17270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
17370a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineIFS="${oIFS}"
17470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
17570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinepathcomp=''
17670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
17770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinewhile [ $# -ne 0 ] ; do
17870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	pathcomp="${pathcomp}${1}"
17970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	shift
18070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
18170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ ! -d "${pathcomp}" ] ;
18270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine        then
18370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		$mkdirprog "${pathcomp}"
18470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	else
18570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		true
18670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	fi
18770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
18870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	pathcomp="${pathcomp}/"
18970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedone
19070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi
19170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
19270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ x"$dir_arg" != x ]
19370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinethen
19470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	$doit $instcmd $dst &&
19570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
19670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
19770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
19870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
19970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
20070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineelse
20170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
20270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# If we're going to rename the final executable, determine the name now.
20370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
20470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$transformarg" = x ] 
20570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	then
20670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		dstfile=`basename $dst`
20770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	else
20870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		dstfile=`basename $dst $transformbasename | 
20970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine			sed $transformarg`$transformbasename
21070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	fi
21170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
21270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# don't allow the sed command to completely eliminate the filename
21370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
21470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$dstfile" = x ] 
21570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	then
21670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		dstfile=`basename $dst`
21770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	else
21870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine		true
21970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	fi
22070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
22170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Make a temp file name in the proper directory.
22270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
22370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	dsttmp=$dstdir/#inst.$$#
22470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
22570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Move or copy the file name to the temp name
22670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
22770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	$doit $instcmd $src $dsttmp &&
22870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
22970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	trap "rm -f ${dsttmp}" 0 &&
23070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
23170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# and set any options; do chmod last to preserve setuid bits
23270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
23370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# If any of these fail, we abort the whole thing.  If we want to
23470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# ignore errors from any of these, just make sure not to ignore
23570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# errors from the above "$doit $instcmd $src $dsttmp" command.
23670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
23770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
23870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
23970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
24070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
24170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
24270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Now rename the file to the real destination.
24370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
24470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	$doit $rmcmd -f $dstdir/$dstfile &&
24570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine	$doit $mvcmd $dsttmp $dstdir/$dstfile 
24670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
24770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi &&
24870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
24970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine
25070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineexit 0
251