150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#! /bin/sh
250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#
350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# install - install a program, script, or datafile
450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# This comes from X11R5.
550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#
650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Calling this script install-sh is preferred over install.sh, to prevent
750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# `make' implicit rules from creating a file called install from it
850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# when there is no Makefile.
950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#
1050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# This script is compatible with the BSD install script, but was written
1150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# from scratch.
1250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#
1350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
1450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
1550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# set DOITPROG to echo to test this script
1650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
1750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Don't use :- since 4.3BSD and earlier shells don't like it.
1850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odoit="${DOITPROG-}"
1950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
2050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
2150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# put in absolute paths if you don't have them in your path; or use env. vars.
2250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
2350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'omvprog="${MVPROG-mv}"
2450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ocpprog="${CPPROG-cp}"
2550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochmodprog="${CHMODPROG-chmod}"
2650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochownprog="${CHOWNPROG-chown}"
2750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochgrpprog="${CHGRPPROG-chgrp}"
2850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ostripprog="${STRIPPROG-strip}"
2950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ormprog="${RMPROG-rm}"
3050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'omkdirprog="${MKDIRPROG-mkdir}"
3150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
3250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'otranformbasename=""
3350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'otransform_arg=""
3450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oinstcmd="$mvprog"
3550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochmodcmd="$chmodprog 0755"
3650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochowncmd=""
3750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ochgrpcmd=""
3850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ostripcmd=""
3950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ormcmd="$rmprog -f"
4050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'omvcmd="$mvprog"
4150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'osrc=""
4250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odst=""
4350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odir_arg=""
4450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
4550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'owhile [ x"$1" != x ]; do
4650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o    case $1 in
4750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-c) instcmd="$cpprog"
4850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
4950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
5050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
5150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-d) dir_arg=true
5250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
5350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
5450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
5550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-m) chmodcmd="$chmodprog $2"
5650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
5750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
5850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
5950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
6050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-o) chowncmd="$chownprog $2"
6150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
6250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
6350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
6450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
6550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-g) chgrpcmd="$chgrpprog $2"
6650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
6750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
6850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
6950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
7050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-s) stripcmd="$stripprog"
7150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
7250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
7350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
7450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
7550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
7650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
7750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
7850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
7950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
8050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
8150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
8250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	*)  if [ x"$src" = x ]
8350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    then
8450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		src=$1
8550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    else
8650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		# this colon is to work around a 386BSD /bin/sh bug
8750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		:
8850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		dst=$1
8950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    fi
9050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    shift
9150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	    continue;;
9250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o    esac
9350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odone
9450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
9550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ x"$src" = x ]
9650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'othen
9750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	echo "install:	no input file specified"
9850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	exit 1
9950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oelse
10050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	true
10150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi
10250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
10350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ x"$dir_arg" != x ]; then
10450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	dst=$src
10550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	src=""
10650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	
10750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ -d $dst ]; then
10850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		instcmd=:
10950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	else
11050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		instcmd=mkdir
11150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	fi
11250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oelse
11350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
11450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
11550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# might cause directories to be created, which would be especially bad 
11650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# if $src (and thus $dsttmp) contains '*'.
11750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
11850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ -f $src -o -d $src ]
11950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	then
12050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		true
12150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	else
12250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		echo "install:  $src does not exist"
12350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		exit 1
12450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	fi
12550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	
12650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$dst" = x ]
12750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	then
12850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		echo "install:	no destination specified"
12950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		exit 1
13050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	else
13150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		true
13250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	fi
13350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
13450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# If destination is a directory, append the input filename; if your system
13550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# does not like double slashes in filenames, you may need to add some logic
13650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
13750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ -d $dst ]
13850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	then
13950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		dst="$dst"/`basename $src`
14050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	else
14150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		true
14250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	fi
14350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi
14450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
14550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o## this sed command emulates the dirname command
14650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
14750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
14850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Make sure that the destination directory exists.
14950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#  this part is taken from Noah Friedman's mkinstalldirs script
15050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
15150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Skip lots of stat calls in the usual case.
15250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ ! -d "$dstdir" ]; then
15350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odefaultIFS='	
15450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o'
15550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oIFS="${IFS-${defaultIFS}}"
15650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
15750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ooIFS="${IFS}"
15850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Some sh's can't handle IFS=/ for some reason.
15950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oIFS='%'
16050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
16150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oIFS="${oIFS}"
16250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
16350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'opathcomp=''
16450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
16550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'owhile [ $# -ne 0 ] ; do
16650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	pathcomp="${pathcomp}${1}"
16750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	shift
16850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
16950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ ! -d "${pathcomp}" ] ;
17050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o        then
17150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		$mkdirprog "${pathcomp}"
17250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	else
17350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		true
17450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	fi
17550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
17650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	pathcomp="${pathcomp}/"
17750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'odone
17850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi
17950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
18050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oif [ x"$dir_arg" != x ]
18150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'othen
18250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	$doit $instcmd $dst &&
18350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
18450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
18550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
18650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
18750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
18850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oelse
18950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
19050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# If we're going to rename the final executable, determine the name now.
19150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
19250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$transformarg" = x ] 
19350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	then
19450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		dstfile=`basename $dst`
19550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	else
19650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		dstfile=`basename $dst $transformbasename | 
19750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o			sed $transformarg`$transformbasename
19850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	fi
19950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
20050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# don't allow the sed command to completely eliminate the filename
20150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
20250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$dstfile" = x ] 
20350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	then
20450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		dstfile=`basename $dst`
20550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	else
20650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		true
20750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	fi
20850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
20950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Make a temp file name in the proper directory.
21050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
21150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	dsttmp=$dstdir/#inst.$$#
21250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
21350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Move or copy the file name to the temp name
21450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
21550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	$doit $instcmd $src $dsttmp &&
21650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
21750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	trap "rm -f ${dsttmp}" 0 &&
21850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
21950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# and set any options; do chmod last to preserve setuid bits
22050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
22150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# If any of these fail, we abort the whole thing.  If we want to
22250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# ignore errors from any of these, just make sure not to ignore
22350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# errors from the above "$doit $instcmd $src $dsttmp" command.
22450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
22550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
22650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
22750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
22850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
22950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
23050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o# Now rename the file to the real destination.
23150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
23250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	$doit $rmcmd -f $dstdir/$dstfile &&
23350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	$doit $mvcmd $dsttmp $dstdir/$dstfile 
23450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
23550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'ofi &&
23650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
23750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
23850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oexit 0
239