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