170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine#!/bin/sh 270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# 370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# install - install a program, script, or datafile 470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# This comes from X11R5 (mit/util/scripts/install.sh). 570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# 670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Copyright 1991 by the Massachusetts Institute of Technology 770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# 870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Permission to use, copy, modify, distribute, and sell this software and its 970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# documentation for any purpose is hereby granted without fee, provided that 1070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# the above copyright notice appear in all copies and that both that 1170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# copyright notice and this permission notice appear in supporting 1270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# documentation, and that the name of M.I.T. not be used in advertising or 1370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# publicity pertaining to distribution of the software without specific, 1470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# written prior permission. M.I.T. makes no representations about the 1570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# suitability of this software for any purpose. It is provided "as is" 1670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# without express or implied warranty. 1770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# 1870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Calling this script install-sh is preferred over install.sh, to prevent 1970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# `make' implicit rules from creating a file called install from it 2070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# when there is no Makefile. 2170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# 2270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# This script is compatible with the BSD install script, but was written 2370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# from scratch. It can only install one file at a time, a restriction 2470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# shared with many OS's install programs. 2570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 2670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 2770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# set DOITPROG to echo to test this script 2870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 2970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Don't use :- since 4.3BSD and earlier shells don't like it. 3070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedoit="${DOITPROG-}" 3170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 3270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 3370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# put in absolute paths if you don't have them in your path; or use env. vars. 3470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 3570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinemvprog="${MVPROG-mv}" 3670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinecpprog="${CPPROG-cp}" 3770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechmodprog="${CHMODPROG-chmod}" 3870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechownprog="${CHOWNPROG-chown}" 3970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechgrpprog="${CHGRPPROG-chgrp}" 4070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinestripprog="${STRIPPROG-strip}" 4170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinermprog="${RMPROG-rm}" 4270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinemkdirprog="${MKDIRPROG-mkdir}" 4370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 4470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinetransformbasename="" 4570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinetransform_arg="" 4670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineinstcmd="$mvprog" 4770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechmodcmd="$chmodprog 0755" 4870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechowncmd="" 4970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinechgrpcmd="" 5070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinestripcmd="" 5170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinermcmd="$rmprog -f" 5270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinemvcmd="$mvprog" 5370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinesrc="" 5470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedst="" 5570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedir_arg="" 5670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 5770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinewhile [ x"$1" != x ]; do 5870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine case $1 in 5970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -c) instcmd="$cpprog" 6070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 6170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 6270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 6370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -d) dir_arg=true 6470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 6570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 6670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 6770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -m) chmodcmd="$chmodprog $2" 6870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 6970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 7070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 7170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 7270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -o) chowncmd="$chownprog $2" 7370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 7470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 7570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 7670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 7770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -g) chgrpcmd="$chgrpprog $2" 7870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 7970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 8070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 8170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 8270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -s) stripcmd="$stripprog" 8370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 8470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 8570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 8670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -t=*) transformarg=`echo $1 | sed 's/-t=//'` 8770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 8870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 8970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 9070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 9170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 9270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 9370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 9470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine *) if [ x"$src" = x ] 9570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine then 9670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine src=$1 9770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 9870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine # this colon is to work around a 386BSD /bin/sh bug 9970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine : 10070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine dst=$1 10170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 10270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 10370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine continue;; 10470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine esac 10570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedone 10670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 10770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ x"$src" = x ] 10870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinethen 10970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine echo "install: no input file specified" 11070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine exit 1 11170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineelse 11270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine true 11370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi 11470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 11570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ x"$dir_arg" != x ]; then 11670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine dst=$src 11770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine src="" 11870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 11970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ -d $dst ]; then 12070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine instcmd=: 12170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 12270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine instcmd=mkdir 12370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 12470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineelse 12570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 12670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 12770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# might cause directories to be created, which would be especially bad 12870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# if $src (and thus $dsttmp) contains '*'. 12970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 13070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ -f $src -o -d $src ] 13170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine then 13270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine true 13370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 13470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine echo "install: $src does not exist" 13570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine exit 1 13670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 13770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 13870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$dst" = x ] 13970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine then 14070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine echo "install: no destination specified" 14170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine exit 1 14270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 14370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine true 14470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 14570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 14670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# If destination is a directory, append the input filename; if your system 14770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# does not like double slashes in filenames, you may need to add some logic 14870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 14970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ -d $dst ] 15070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine then 15170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine dst="$dst"/`basename $src` 15270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 15370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine true 15470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 15570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi 15670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 15770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine## this sed command emulates the dirname command 15870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 15970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 16070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Make sure that the destination directory exists. 16170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# this part is taken from Noah Friedman's mkinstalldirs script 16270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 16370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Skip lots of stat calls in the usual case. 16470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ ! -d "$dstdir" ]; then 16570a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkinedefaultIFS=' 16670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine' 16770a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineIFS="${IFS-${defaultIFS}}" 16870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 16970a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineoIFS="${IFS}" 17070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Some sh's can't handle IFS=/ for some reason. 17170a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineIFS='%' 17270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 17370a18cd874a22452aca9e39e22275ed4538ed20bVladimir ChtchetkineIFS="${oIFS}" 17470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 17570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinepathcomp='' 17670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 17770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinewhile [ $# -ne 0 ] ; do 17870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine pathcomp="${pathcomp}${1}" 17970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine shift 18070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 18170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ ! -d "${pathcomp}" ] ; 18270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine then 18370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine $mkdirprog "${pathcomp}" 18470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 18570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine true 18670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 18770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 18870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine pathcomp="${pathcomp}/" 18970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinedone 19070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi 19170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 19270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineif [ x"$dir_arg" != x ] 19370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinethen 19470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine $doit $instcmd $dst && 19570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 19670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 19770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 19870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 19970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 20070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineelse 20170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 20270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# If we're going to rename the final executable, determine the name now. 20370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 20470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$transformarg" = x ] 20570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine then 20670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine dstfile=`basename $dst` 20770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 20870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine dstfile=`basename $dst $transformbasename | 20970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine sed $transformarg`$transformbasename 21070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 21170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 21270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# don't allow the sed command to completely eliminate the filename 21370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 21470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$dstfile" = x ] 21570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine then 21670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine dstfile=`basename $dst` 21770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine else 21870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine true 21970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine fi 22070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 22170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Make a temp file name in the proper directory. 22270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 22370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine dsttmp=$dstdir/#inst.$$# 22470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 22570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Move or copy the file name to the temp name 22670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 22770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine $doit $instcmd $src $dsttmp && 22870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 22970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine trap "rm -f ${dsttmp}" 0 && 23070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 23170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# and set any options; do chmod last to preserve setuid bits 23270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 23370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# If any of these fail, we abort the whole thing. If we want to 23470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# ignore errors from any of these, just make sure not to ignore 23570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# errors from the above "$doit $instcmd $src $dsttmp" command. 23670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 23770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 23870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 23970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 24070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 24170a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 24270a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine# Now rename the file to the real destination. 24370a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 24470a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine $doit $rmcmd -f $dstdir/$dstfile && 24570a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine $doit $mvcmd $dsttmp $dstdir/$dstfile 24670a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 24770a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkinefi && 24870a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 24970a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkine 25070a18cd874a22452aca9e39e22275ed4538ed20bVladimir Chtchetkineexit 0 251