1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#! /bin/sh
2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#
3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# install - install a program, script, or datafile
4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# This comes from X11R5 (mit/util/scripts/install.sh).
5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#
6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Copyright 1991 by the Massachusetts Institute of Technology
7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#
8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Permission to use, copy, modify, distribute, and sell this software and its
9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# documentation for any purpose is hereby granted without fee, provided that
10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# the above copyright notice appear in all copies and that both that
11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# copyright notice and this permission notice appear in supporting
12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# documentation, and that the name of M.I.T. not be used in advertising or
13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# publicity pertaining to distribution of the software without specific,
14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# written prior permission.  M.I.T. makes no representations about the
15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# suitability of this software for any purpose.  It is provided "as is"
16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# without express or implied warranty.
17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#
18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Calling this script install-sh is preferred over install.sh, to prevent
19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# `make' implicit rules from creating a file called install from it
20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# when there is no Makefile.
21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#
22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# This script is compatible with the BSD install script, but was written
23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# from scratch.  It can only install one file at a time, a restriction
24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# shared with many OS's install programs.
25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# set DOITPROG to echo to test this script
28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Don't use :- since 4.3BSD and earlier shells don't like it.
30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdoit="${DOITPROG-}"
31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# put in absolute paths if you don't have them in your path; or use env. vars.
34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmvprog="${MVPROG-mv}"
36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectcpprog="${CPPROG-cp}"
37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchmodprog="${CHMODPROG-chmod}"
38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchownprog="${CHOWNPROG-chown}"
39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchgrpprog="${CHGRPPROG-chgrp}"
40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstripprog="${STRIPPROG-strip}"
41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrmprog="${RMPROG-rm}"
42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmkdirprog="${MKDIRPROG-mkdir}"
43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttransformbasename=""
45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttransform_arg=""
46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectinstcmd="$mvprog"
47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchmodcmd="$chmodprog 0755"
48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchowncmd=""
49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchgrpcmd=""
50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstripcmd=""
51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrmcmd="$rmprog -f"
52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmvcmd="$mvprog"
53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsrc=""
54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdst=""
55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdir_arg=""
56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectwhile [ x"$1" != x ]; do
58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project    case $1 in
59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-c) instcmd="$cpprog"
60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-d) dir_arg=true
64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-m) chmodcmd="$chmodprog $2"
68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-o) chowncmd="$chownprog $2"
73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-g) chgrpcmd="$chgrpprog $2"
78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-s) stripcmd="$stripprog"
83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	*)  if [ x"$src" = x ]
95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    then
96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		src=$1
97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    else
98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		# this colon is to work around a 386BSD /bin/sh bug
99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		:
100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		dst=$1
101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    fi
102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    shift
103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	    continue;;
104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project    esac
105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdone
106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ x"$src" = x ]
108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectthen
109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	echo "install:	no input file specified"
110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	exit 1
111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectelse
112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	true
113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi
114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ x"$dir_arg" != x ]; then
116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	dst=$src
117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	src=""
118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	
119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ -d $dst ]; then
120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		instcmd=:
121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		instcmd=mkdir
123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	fi
124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectelse
125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# might cause directories to be created, which would be especially bad 
128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# if $src (and thus $dsttmp) contains '*'.
129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ -f $src -o -d $src ]
131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	then
132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		true
133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		echo "install:  $src does not exist"
135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		exit 1
136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	fi
137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	
138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$dst" = x ]
139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	then
140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		echo "install:	no destination specified"
141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		exit 1
142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		true
144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	fi
145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# If destination is a directory, append the input filename; if your system
147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# does not like double slashes in filenames, you may need to add some logic
148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ -d $dst ]
150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	then
151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		dst="$dst"/`basename $src`
152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		true
154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	fi
155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi
156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project## this sed command emulates the dirname command
158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Make sure that the destination directory exists.
161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#  this part is taken from Noah Friedman's mkinstalldirs script
162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Skip lots of stat calls in the usual case.
164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ ! -d "$dstdir" ]; then
165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectdefaultIFS='	
166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project'
167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectIFS="${IFS-${defaultIFS}}"
168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectoIFS="${IFS}"
170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Some sh's can't handle IFS=/ for some reason.
171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectIFS='%'
172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectIFS="${oIFS}"
174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpathcomp=''
176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectwhile [ $# -ne 0 ] ; do
178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	pathcomp="${pathcomp}${1}"
179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	shift
180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ ! -d "${pathcomp}" ] ;
182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project        then
183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		$mkdirprog "${pathcomp}"
184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		true
186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	fi
187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	pathcomp="${pathcomp}/"
189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdone
190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi
191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectif [ x"$dir_arg" != x ]
193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectthen
194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	$doit $instcmd $dst &&
195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectelse
201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# If we're going to rename the final executable, determine the name now.
203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$transformarg" = x ] 
205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	then
206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		dstfile=`basename $dst`
207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		dstfile=`basename $dst $transformbasename | 
209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			sed $transformarg`$transformbasename
210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	fi
211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# don't allow the sed command to completely eliminate the filename
213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$dstfile" = x ] 
215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	then
216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		dstfile=`basename $dst`
217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		true
219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	fi
220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Make a temp file name in the proper directory.
222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	dsttmp=$dstdir/#inst.$$#
224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Move or copy the file name to the temp name
226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	$doit $instcmd $src $dsttmp &&
228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	trap "rm -f ${dsttmp}" 0 &&
230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# and set any options; do chmod last to preserve setuid bits
232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# If any of these fail, we abort the whole thing.  If we want to
234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# ignore errors from any of these, just make sure not to ignore
235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# errors from the above "$doit $instcmd $src $dsttmp" command.
236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project# Now rename the file to the real destination.
243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	$doit $rmcmd -f $dstdir/$dstfile &&
245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	$doit $mvcmd $dsttmp $dstdir/$dstfile 
246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfi &&
248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectexit 0
251