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