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