15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/bin/sh
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# install - install a program, script, or datafile
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This comes from X11R5 (mit/util/scripts/install.sh).
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 1991 by the Massachusetts Institute of Technology
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Permission to use, copy, modify, distribute, and sell this software and its
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# documentation for any purpose is hereby granted without fee, provided that
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# the above copyright notice appear in all copies and that both that
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# copyright notice and this permission notice appear in supporting
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# documentation, and that the name of M.I.T. not be used in advertising or
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# publicity pertaining to distribution of the software without specific,
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# written prior permission.  M.I.T. makes no representations about the
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# suitability of this software for any purpose.  It is provided "as is"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# without express or implied warranty.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Calling this script install-sh is preferred over install.sh, to prevent
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# `make' implicit rules from creating a file called install from it
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# when there is no Makefile.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This script is compatible with the BSD install script, but was written
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# from scratch.  It can only install one file at a time, a restriction
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# shared with many OS's install programs.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# set DOITPROG to echo to test this script
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Don't use :- since 4.3BSD and earlier shells don't like it.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)doit="${DOITPROG-}"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# put in absolute paths if you don't have them in your path; or use env. vars.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mvprog="${MVPROG-mv}"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cpprog="${CPPROG-cp}"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chmodprog="${CHMODPROG-chmod}"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chownprog="${CHOWNPROG-chown}"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chgrpprog="${CHGRPPROG-chgrp}"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)stripprog="${STRIPPROG-strip}"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)rmprog="${RMPROG-rm}"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mkdirprog="${MKDIRPROG-mkdir}"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)transformbasename=""
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)transform_arg=""
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)instcmd="$mvprog"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chmodcmd="$chmodprog 0755"
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chowncmd=""
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chgrpcmd=""
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)stripcmd=""
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)rmcmd="$rmprog -f"
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mvcmd="$mvprog"
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)src=""
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dst=""
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dir_arg=""
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)while [ x"$1" != x ]; do
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case $1 in
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-c) instcmd="$cpprog"
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-d) dir_arg=true
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-m) chmodcmd="$chmodprog $2"
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-o) chowncmd="$chownprog $2"
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-g) chgrpcmd="$chgrpprog $2"
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-s) stripcmd="$stripprog"
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	*)  if [ x"$src" = x ]
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    then
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		src=$1
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    else
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		# this colon is to work around a 386BSD /bin/sh bug
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		:
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		dst=$1
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    fi
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    shift
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    continue;;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    esac
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)done
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ x"$src" = x ]
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)then
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	echo "install:	no input file specified"
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	exit 1
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	true
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ x"$dir_arg" != x ]; then
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	dst=$src
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	src=""
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ -d $dst ]; then
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		instcmd=:
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		chmodcmd=""
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		instcmd=mkdir
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fi
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# might cause directories to be created, which would be especially bad 
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# if $src (and thus $dsttmp) contains '*'.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ -f $src -o -d $src ]
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	then
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		true
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		echo "install:  $src does not exist"
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		exit 1
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fi
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$dst" = x ]
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	then
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		echo "install:	no destination specified"
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		exit 1
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		true
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fi
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If destination is a directory, append the input filename; if your system
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# does not like double slashes in filenames, you may need to add some logic
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ -d $dst ]
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	then
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		dst="$dst"/`basename $src`
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		true
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fi
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)## this sed command emulates the dirname command
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Make sure that the destination directory exists.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#  this part is taken from Noah Friedman's mkinstalldirs script
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Skip lots of stat calls in the usual case.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ ! -d "$dstdir" ]; then
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)defaultIFS='	
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)'
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IFS="${IFS-${defaultIFS}}"
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)oIFS="${IFS}"
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Some sh's can't handle IFS=/ for some reason.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IFS='%'
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IFS="${oIFS}"
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pathcomp=''
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)while [ $# -ne 0 ] ; do
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	pathcomp="${pathcomp}${1}"
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	shift
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ ! -d "${pathcomp}" ] ;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        then
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		$mkdirprog "${pathcomp}"
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		true
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fi
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	pathcomp="${pathcomp}/"
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)done
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ x"$dir_arg" != x ]
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)then
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$doit $instcmd $dst &&
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If we're going to rename the final executable, determine the name now.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$transformarg" = x ] 
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	then
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		dstfile=`basename $dst`
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		dstfile=`basename $dst $transformbasename | 
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			sed $transformarg`$transformbasename
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fi
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# don't allow the sed command to completely eliminate the filename
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$dstfile" = x ] 
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	then
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		dstfile=`basename $dst`
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	else
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		true
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	fi
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Make a temp file name in the proper directory.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	dsttmp=$dstdir/#inst.$$#
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Move or copy the file name to the temp name
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$doit $instcmd $src $dsttmp &&
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	trap "rm -f ${dsttmp}" 0 &&
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# and set any options; do chmod last to preserve setuid bits
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If any of these fail, we abort the whole thing.  If we want to
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# ignore errors from any of these, just make sure not to ignore
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# errors from the above "$doit $instcmd $src $dsttmp" command.
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Now rename the file to the real destination.
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$doit $rmcmd -f $dstdir/$dstfile &&
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$doit $mvcmd $dsttmp $dstdir/$dstfile 
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi &&
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)exit 0
252