12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#! /bin/sh
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# install - install a program, script, or datafile
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# This comes from X11R5 (mit/util/scripts/install.sh).
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Copyright 1991 by the Massachusetts Institute of Technology
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Permission to use, copy, modify, distribute, and sell this software and its
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# documentation for any purpose is hereby granted without fee, provided that
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# the above copyright notice appear in all copies and that both that
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# copyright notice and this permission notice appear in supporting
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# documentation, and that the name of M.I.T. not be used in advertising or
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# publicity pertaining to distribution of the software without specific,
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# written prior permission.  M.I.T. makes no representations about the
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# suitability of this software for any purpose.  It is provided "as is"
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# without express or implied warranty.
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Calling this script install-sh is preferred over install.sh, to prevent
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# `make' implicit rules from creating a file called install from it
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# when there is no Makefile.
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# This script is compatible with the BSD install script, but was written
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# from scratch.  It can only install one file at a time, a restriction
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# shared with many OS's install programs.
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# set DOITPROG to echo to test this script
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Don't use :- since 4.3BSD and earlier shells don't like it.
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectdoit="${DOITPROG-}"
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# put in absolute paths if you don't have them in your path; or use env. vars.
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectmvprog="${MVPROG-mv}"
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectcpprog="${CPPROG-cp}"
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectchmodprog="${CHMODPROG-chmod}"
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectchownprog="${CHOWNPROG-chown}"
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectchgrpprog="${CHGRPPROG-chgrp}"
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstripprog="${STRIPPROG-strip}"
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrmprog="${RMPROG-rm}"
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectmkdirprog="${MKDIRPROG-mkdir}"
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttransformbasename=""
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttransform_arg=""
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinstcmd="$mvprog"
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectchmodcmd="$chmodprog 0755"
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectchowncmd=""
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectchgrpcmd=""
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstripcmd=""
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrmcmd="$rmprog -f"
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectmvcmd="$mvprog"
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectsrc=""
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectdst=""
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectdir_arg=""
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectwhile [ x"$1" != x ]; do
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    case $1 in
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-c) instcmd="$cpprog"
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-d) dir_arg=true
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-m) chmodcmd="$chmodprog $2"
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-o) chowncmd="$chownprog $2"
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-g) chgrpcmd="$chgrpprog $2"
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-s) stripcmd="$stripprog"
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	*)  if [ x"$src" = x ]
952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    then
962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		src=$1
972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    else
982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		# this colon is to work around a 386BSD /bin/sh bug
992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		:
1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		dst=$1
1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    fi
1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    shift
1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    continue;;
1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    esac
1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectdone
1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectif [ x"$src" = x ]
1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectthen
1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	echo "install:	no input file specified"
1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	exit 1
1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectelse
1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	true
1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfi
1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectif [ x"$dir_arg" != x ]; then
1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	dst=$src
1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	src=""
1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	
1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ -d $dst ]; then
1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		instcmd=:
1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		instcmd=mkdir
1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	fi
1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectelse
1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# might cause directories to be created, which would be especially bad 
1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# if $src (and thus $dsttmp) contains '*'.
1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ -f $src -o -d $src ]
1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	then
1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		true
1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		echo "install:  $src does not exist"
1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		exit 1
1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	fi
1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	
1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$dst" = x ]
1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	then
1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		echo "install:	no destination specified"
1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		exit 1
1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		true
1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	fi
1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# If destination is a directory, append the input filename; if your system
1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# does not like double slashes in filenames, you may need to add some logic
1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ -d $dst ]
1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	then
1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		dst="$dst"/`basename $src`
1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		true
1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	fi
1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfi
1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project## this sed command emulates the dirname command
1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectdstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Make sure that the destination directory exists.
1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#  this part is taken from Noah Friedman's mkinstalldirs script
1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Skip lots of stat calls in the usual case.
1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectif [ ! -d "$dstdir" ]; then
1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectdefaultIFS='	
1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project'
1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectIFS="${IFS-${defaultIFS}}"
1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectoIFS="${IFS}"
1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Some sh's can't handle IFS=/ for some reason.
1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectIFS='%'
1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectIFS="${oIFS}"
1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectpathcomp=''
1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectwhile [ $# -ne 0 ] ; do
1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	pathcomp="${pathcomp}${1}"
1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	shift
1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ ! -d "${pathcomp}" ] ;
1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        then
1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		$mkdirprog "${pathcomp}"
1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		true
1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	fi
1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	pathcomp="${pathcomp}/"
1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectdone
1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfi
1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectif [ x"$dir_arg" != x ]
1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectthen
1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	$doit $instcmd $dst &&
1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectelse
2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# If we're going to rename the final executable, determine the name now.
2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$transformarg" = x ] 
2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	then
2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		dstfile=`basename $dst`
2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		dstfile=`basename $dst $transformbasename | 
2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			sed $transformarg`$transformbasename
2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	fi
2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# don't allow the sed command to completely eliminate the filename
2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$dstfile" = x ] 
2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	then
2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		dstfile=`basename $dst`
2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		true
2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	fi
2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Make a temp file name in the proper directory.
2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	dsttmp=$dstdir/#inst.$$#
2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Move or copy the file name to the temp name
2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	$doit $instcmd $src $dsttmp &&
2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	trap "rm -f ${dsttmp}" 0 &&
2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# and set any options; do chmod last to preserve setuid bits
2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# If any of these fail, we abort the whole thing.  If we want to
2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# ignore errors from any of these, just make sure not to ignore
2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# errors from the above "$doit $instcmd $src $dsttmp" command.
2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Now rename the file to the real destination.
2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	$doit $rmcmd -f $dstdir/$dstfile &&
2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	$doit $mvcmd $dsttmp $dstdir/$dstfile 
2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfi &&
2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectexit 0
251