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