19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#!/bin/sh
29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#
39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# install - install a program, script, or datafile
49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# This comes from X11R5 (mit/util/scripts/install.sh).
59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#
69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Copyright 1991 by the Massachusetts Institute of Technology
79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#
89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Permission to use, copy, modify, distribute, and sell this software and its
99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# documentation for any purpose is hereby granted without fee, provided that
109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# the above copyright notice appear in all copies and that both that
119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# copyright notice and this permission notice appear in supporting
129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# documentation, and that the name of M.I.T. not be used in advertising or
139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# publicity pertaining to distribution of the software without specific,
149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# written prior permission.  M.I.T. makes no representations about the
159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# suitability of this software for any purpose.  It is provided "as is"
169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# without express or implied warranty.
179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#
189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Calling this script install-sh is preferred over install.sh, to prevent
199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# `make' implicit rules from creating a file called install from it
209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# when there is no Makefile.
219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#
229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# This script is compatible with the BSD install script, but was written
239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# from scratch.  It can only install one file at a time, a restriction
249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# shared with many OS's install programs.
259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# set DOITPROG to echo to test this script
289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Don't use :- since 4.3BSD and earlier shells don't like it.
309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdoit="${DOITPROG-}"
319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# put in absolute paths if you don't have them in your path; or use env. vars.
349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectmvprog="${MVPROG-mv}"
369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectcpprog="${CPPROG-cp}"
379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchmodprog="${CHMODPROG-chmod}"
389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchownprog="${CHOWNPROG-chown}"
399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchgrpprog="${CHGRPPROG-chgrp}"
409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstripprog="${STRIPPROG-strip}"
419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectrmprog="${RMPROG-rm}"
429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectmkdirprog="${MKDIRPROG-mkdir}"
439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttransformbasename=""
459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttransform_arg=""
469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectinstcmd="$mvprog"
479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchmodcmd="$chmodprog 0755"
489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchowncmd=""
499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchgrpcmd=""
509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstripcmd=""
519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectrmcmd="$rmprog -f"
529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectmvcmd="$mvprog"
539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectsrc=""
549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdst=""
559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdir_arg=""
569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwhile [ x"$1" != x ]; do
589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    case $1 in
599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-c) instcmd="$cpprog"
609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-d) dir_arg=true
649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-m) chmodcmd="$chmodprog $2"
689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-o) chowncmd="$chownprog $2"
739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-g) chgrpcmd="$chgrpprog $2"
789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-s) stripcmd="$stripprog"
839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	*)  if [ x"$src" = x ]
959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    then
969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		src=$1
979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    else
989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		# this colon is to work around a 386BSD /bin/sh bug
999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		:
1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		dst=$1
1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    fi
1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    shift
1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    continue;;
1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    esac
1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdone
1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectif [ x"$src" = x ]
1089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectthen
1099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	echo "install:	no input file specified"
1109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	exit 1
1119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectelse
1129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	true
1139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectfi
1149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectif [ x"$dir_arg" != x ]; then
1169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	dst=$src
1179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	src=""
1189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	
1199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ -d $dst ]; then
1209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		instcmd=:
1219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
1229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		instcmd=mkdir
1239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fi
1249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectelse
1259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
1279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# might cause directories to be created, which would be especially bad 
1289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# if $src (and thus $dsttmp) contains '*'.
1299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ -f $src -o -d $src ]
1319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	then
1329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		true
1339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
1349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		echo "install:  $src does not exist"
1359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		exit 1
1369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fi
1379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	
1389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$dst" = x ]
1399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	then
1409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		echo "install:	no destination specified"
1419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		exit 1
1429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
1439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		true
1449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fi
1459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# If destination is a directory, append the input filename; if your system
1479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# does not like double slashes in filenames, you may need to add some logic
1489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ -d $dst ]
1509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	then
1519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		dst="$dst"/`basename $src`
1529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
1539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		true
1549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fi
1559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectfi
1569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project## this sed command emulates the dirname command
1589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
1599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Make sure that the destination directory exists.
1619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  this part is taken from Noah Friedman's mkinstalldirs script
1629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Skip lots of stat calls in the usual case.
1649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectif [ ! -d "$dstdir" ]; then
1659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectdefaultIFS='	
1669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project'
1679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectIFS="${IFS-${defaultIFS}}"
1689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectoIFS="${IFS}"
1709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Some sh's can't handle IFS=/ for some reason.
1719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectIFS='%'
1729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
1739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectIFS="${oIFS}"
1749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectpathcomp=''
1769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwhile [ $# -ne 0 ] ; do
1789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	pathcomp="${pathcomp}${1}"
1799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	shift
1809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ ! -d "${pathcomp}" ] ;
1829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project        then
1839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		$mkdirprog "${pathcomp}"
1849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
1859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		true
1869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fi
1879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	pathcomp="${pathcomp}/"
1899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdone
1909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectfi
1919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectif [ x"$dir_arg" != x ]
1939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectthen
1949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	$doit $instcmd $dst &&
1959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
1979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
1989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
1999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
2009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectelse
2019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# If we're going to rename the final executable, determine the name now.
2039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$transformarg" = x ] 
2059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	then
2069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		dstfile=`basename $dst`
2079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
2089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		dstfile=`basename $dst $transformbasename | 
2099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			sed $transformarg`$transformbasename
2109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fi
2119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# don't allow the sed command to completely eliminate the filename
2139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$dstfile" = x ] 
2159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	then
2169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		dstfile=`basename $dst`
2179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
2189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		true
2199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fi
2209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Make a temp file name in the proper directory.
2229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	dsttmp=$dstdir/#inst.$$#
2249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Move or copy the file name to the temp name
2269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	$doit $instcmd $src $dsttmp &&
2289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	trap "rm -f ${dsttmp}" 0 &&
2309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# and set any options; do chmod last to preserve setuid bits
2329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# If any of these fail, we abort the whole thing.  If we want to
2349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# ignore errors from any of these, just make sure not to ignore
2359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# errors from the above "$doit $instcmd $src $dsttmp" command.
2369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
2389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
2399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
2409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
2419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# Now rename the file to the real destination.
2439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	$doit $rmcmd -f $dstdir/$dstfile &&
2459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	$doit $mvcmd $dsttmp $dstdir/$dstfile 
2469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectfi &&
2489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectexit 0
251