1893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#!/bin/sh 2893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# install - install a program, script, or datafile 3893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 4ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikscriptversion=2011-11-20.07; # UTC 5893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 6893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# This originates from X11R5 (mit/util/scripts/install.sh), which was 7893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# later released in X11R6 (xc/config/util/install.sh) with the 8893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# following copyright and license. 9893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 10893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Copyright (C) 1994 X Consortium 11893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 12893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Permission is hereby granted, free of charge, to any person obtaining a copy 13893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# of this software and associated documentation files (the "Software"), to 14893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# deal in the Software without restriction, including without limitation the 15893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 16893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# sell copies of the Software, and to permit persons to whom the Software is 17893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# furnished to do so, subject to the following conditions: 18893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 19893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# The above copyright notice and this permission notice shall be included in 20893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# all copies or substantial portions of the Software. 21893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 22893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 26893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- 27893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 29893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Except as contained in this notice, the name of the X Consortium shall not 30893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# be used in advertising or otherwise to promote the sale, use or other deal- 31893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# ings in this Software without prior written authorization from the X Consor- 32893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# tium. 33893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 34893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 35893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# FSF changes to this file are in the public domain. 36893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 37893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Calling this script install-sh is preferred over install.sh, to prevent 38ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# 'make' implicit rules from creating a file called install from it 39893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# when there is no Makefile. 40893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# 41893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# This script is compatible with the BSD install script, but was written 42893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# from scratch. 43893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 44893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectnl=' 45893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project' 46893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectIFS=" "" $nl" 47893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 48893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# set DOITPROG to echo to test this script 49893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 50893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Don't use :- since 4.3BSD and earlier shells don't like it. 51893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectdoit=${DOITPROG-} 52893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectif test -z "$doit"; then 53893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project doit_exec=exec 54893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectelse 55893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project doit_exec=$doit 56893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfi 57893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 58893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Put in absolute file names if you don't have them in your path; 59893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# or use environment vars. 60893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 61893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectchgrpprog=${CHGRPPROG-chgrp} 62893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectchmodprog=${CHMODPROG-chmod} 63893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectchownprog=${CHOWNPROG-chown} 64893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectcmpprog=${CMPPROG-cmp} 65893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectcpprog=${CPPROG-cp} 66893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectmkdirprog=${MKDIRPROG-mkdir} 67893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectmvprog=${MVPROG-mv} 68893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectrmprog=${RMPROG-rm} 69893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstripprog=${STRIPPROG-strip} 70893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 71893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectposix_glob='?' 72893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectinitialize_posix_glob=' 73893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test "$posix_glob" != "?" || { 74893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (set -f) 2>/dev/null; then 75893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project posix_glob= 76893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 77893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project posix_glob=: 78893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 79893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 80893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project' 81893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 82893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectposix_mkdir= 83893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 84893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Desired mode of installed file. 85893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectmode=0755 86893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 87893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectchgrpcmd= 88893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectchmodcmd=$chmodprog 89893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectchowncmd= 90893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectmvcmd=$mvprog 91893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectrmcmd="$rmprog -f" 92893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstripcmd= 93893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 94893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectsrc= 95893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectdst= 96893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectdir_arg= 97893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectdst_arg= 98893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 99893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectcopy_on_change=false 100893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectno_target_directory= 101893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 102893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectusage="\ 103893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectUsage: $0 [OPTION]... [-T] SRCFILE DSTFILE 104893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project or: $0 [OPTION]... SRCFILES... DIRECTORY 105893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project or: $0 [OPTION]... -t DIRECTORY SRCFILES... 106893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project or: $0 [OPTION]... -d DIRECTORIES... 107893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 108893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectIn the 1st form, copy SRCFILE to DSTFILE. 109893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectIn the 2nd and 3rd, copy all SRCFILES to DIRECTORY. 110893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectIn the 4th, create DIRECTORIES. 111893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 112893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectOptions: 113893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project --help display this help and exit. 114893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project --version display version info and exit. 115893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 116893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -c (ignored) 117893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -C install only if different (preserve the last data modification time) 118893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -d create directories instead of installing files. 119893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -g GROUP $chgrpprog installed files to GROUP. 120893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -m MODE $chmodprog installed files to MODE. 121893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -o USER $chownprog installed files to USER. 122893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -s $stripprog installed files. 123893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -t DIRECTORY install into DIRECTORY. 124893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -T report an error if DSTFILE is a directory. 125893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 126893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectEnvironment variables override the default commands: 127893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG 128893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project RMPROG STRIPPROG 129893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project" 130893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 131893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectwhile test $# -ne 0; do 132893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $1 in 133893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -c) ;; 134893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 135893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -C) copy_on_change=true;; 136893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 137893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -d) dir_arg=true;; 138893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 139893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -g) chgrpcmd="$chgrpprog $2" 140893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift;; 141893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 142893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project --help) echo "$usage"; exit $?;; 143893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 144893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -m) mode=$2 145893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $mode in 146893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *' '* | *' '* | *' 147893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project'* | *'*'* | *'?'* | *'['*) 148893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project echo "$0: invalid mode: $mode" >&2 149893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit 1;; 150893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 151893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift;; 152893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 153893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -o) chowncmd="$chownprog $2" 154893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift;; 155893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 156893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -s) stripcmd=$stripprog;; 157893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 158893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -t) dst_arg=$2 159ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik # Protect names problematic for 'test' and other utilities. 160ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik case $dst_arg in 161ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik -* | [=\(\)!]) dst_arg=./$dst_arg;; 162ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik esac 163893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift;; 164893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 165893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -T) no_target_directory=true;; 166893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 167893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project --version) echo "$0 $scriptversion"; exit $?;; 168893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 169893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project --) shift 170893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project break;; 171893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 172893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project -*) echo "$0: invalid option: $1" >&2 173893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit 1;; 174893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 175893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *) break;; 176893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 177893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift 178893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectdone 179893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 180893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectif test $# -ne 0 && test -z "$dir_arg$dst_arg"; then 181893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # When -d is used, all remaining arguments are directories to create. 182893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # When -t is used, the destination is already specified. 183893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Otherwise, the last argument is the destination. Remove it from $@. 184893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for arg 185893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project do 186893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -n "$dst_arg"; then 187893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # $@ is not empty: it contains at least $arg. 188893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project set fnord "$@" "$dst_arg" 189893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift # fnord 190893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 191893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift # arg 192893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst_arg=$arg 193ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik # Protect names problematic for 'test' and other utilities. 194ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik case $dst_arg in 195ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik -* | [=\(\)!]) dst_arg=./$dst_arg;; 196ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik esac 197893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project done 198893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfi 199893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 200893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectif test $# -eq 0; then 201893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -z "$dir_arg"; then 202893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project echo "$0: no input file specified." >&2 203893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit 1 204893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 205ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik # It's OK to call 'install-sh -d' without argument. 206893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # This can happen when creating conditional directories. 207893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit 0 208893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfi 209893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 210893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectif test -z "$dir_arg"; then 211ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik do_exit='(exit $ret); exit $ret' 212ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik trap "ret=129; $do_exit" 1 213ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik trap "ret=130; $do_exit" 2 214ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik trap "ret=141; $do_exit" 13 215ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik trap "ret=143; $do_exit" 15 216893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 217893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Set umask so as not to create temps with too-generous modes. 218893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # However, 'strip' requires both read and write access to temps. 219893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $mode in 220893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Optimize common cases. 221893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *644) cp_umask=133;; 222893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *755) cp_umask=22;; 223893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 224893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *[0-7]) 225893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -z "$stripcmd"; then 226893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project u_plus_rw= 227893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 228893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project u_plus_rw='% 200' 229893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 230893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; 231893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *) 232893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -z "$stripcmd"; then 233893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project u_plus_rw= 234893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 235893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project u_plus_rw=,u+rw 236893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 237893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cp_umask=$mode$u_plus_rw;; 238893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 239893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfi 240893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 241893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectfor src 242893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectdo 243ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik # Protect names problematic for 'test' and other utilities. 244893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $src in 245ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik -* | [=\(\)!]) src=./$src;; 246893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 247893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 248893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -n "$dir_arg"; then 249893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst=$src 250893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dstdir=$dst 251893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test -d "$dstdir" 252893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dstdir_status=$? 253893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 254893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 255893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Waiting for this to be detected by the "$cpprog $src $dsttmp" command 256893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # might cause directories to be created, which would be especially bad 257893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # if $src (and thus $dsttmp) contains '*'. 258893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test ! -f "$src" && test ! -d "$src"; then 259893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project echo "$0: $src does not exist." >&2 260893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit 1 261893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 262893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 263893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -z "$dst_arg"; then 264893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project echo "$0: no destination specified." >&2 265893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit 1 266893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 267893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst=$dst_arg 268893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 269893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # If destination is a directory, append the input filename; won't work 270893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # if double slashes aren't ignored. 271893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -d "$dst"; then 272893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -n "$no_target_directory"; then 273893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project echo "$0: $dst_arg: Is a directory" >&2 274893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit 1 275893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 276893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dstdir=$dst 277893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst=$dstdir/`basename "$src"` 278893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dstdir_status=0 279893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 280893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Prefer dirname, but fall back on a substitute if dirname fails. 281893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dstdir=` 282893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (dirname "$dst") 2>/dev/null || 283893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 284893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project X"$dst" : 'X\(//\)[^/]' \| \ 285893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project X"$dst" : 'X\(//\)$' \| \ 286893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project X"$dst" : 'X\(/\)' \| . 2>/dev/null || 287893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project echo X"$dst" | 288893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ 289893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project s//\1/ 290893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project q 291893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 292893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /^X\(\/\/\)[^/].*/{ 293893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project s//\1/ 294893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project q 295893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 296893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /^X\(\/\/\)$/{ 297893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project s//\1/ 298893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project q 299893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 300893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /^X\(\/\).*/{ 301893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project s//\1/ 302893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project q 303893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 304893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project s/.*/./; q' 305893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ` 306893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 307893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test -d "$dstdir" 308893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dstdir_status=$? 309893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 310893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 311893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 312893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project obsolete_mkdir_used=false 313893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 314893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test $dstdir_status != 0; then 315893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $posix_mkdir in 316893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project '') 317893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Create intermediate dirs using mode 755 as modified by the umask. 318893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # This is like FreeBSD 'install' as of 1997-10-28. 319893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project umask=`umask` 320893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $stripcmd.$umask in 321893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Optimize common cases. 322893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *[2367][2367]) mkdir_umask=$umask;; 323893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; 324893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 325893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *[0-7]) 326893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project mkdir_umask=`expr $umask + 22 \ 327893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project - $umask % 100 % 40 + $umask % 20 \ 328893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project - $umask % 10 % 4 + $umask % 2 329893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project `;; 330893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *) mkdir_umask=$umask,go-w;; 331893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 332893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 333893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # With -d, create the new directory with the user-specified mode. 334893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Otherwise, rely on $mkdir_umask. 335893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -n "$dir_arg"; then 336893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project mkdir_mode=-m$mode 337893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 338893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project mkdir_mode= 339893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 340893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 341893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project posix_mkdir=false 342893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $umask in 343893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *[123567][0-7][0-7]) 344893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # POSIX mkdir -p sets u+wx bits regardless of umask, which 345893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # is incompatible with FreeBSD 'install' when (umask & 300) != 0. 346893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ;; 347893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *) 348893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ 349893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 350893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 351893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (umask $mkdir_umask && 352893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 353893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project then 354893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -z "$dir_arg" || { 355893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Check for POSIX incompatibilities with -m. 356893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or 357ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik # other-writable bit of parent directory when it shouldn't. 358893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. 359893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ls_ld_tmpdir=`ls -ld "$tmpdir"` 360893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $ls_ld_tmpdir in 361893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project d????-?r-*) different_mode=700;; 362893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project d????-?--*) different_mode=755;; 363893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *) false;; 364893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac && 365893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $mkdirprog -m$different_mode -p -- "$tmpdir" && { 366893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ls_ld_tmpdir_1=`ls -ld "$tmpdir"` 367893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" 368893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 369893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 370893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project then posix_mkdir=: 371893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 372893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rmdir "$tmpdir/d" "$tmpdir" 373893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 374893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Remove any dirs left behind by ancient mkdir implementations. 375893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null 376893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 377893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project trap '' 0;; 378893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac;; 379893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 380893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 381893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if 382893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $posix_mkdir && ( 383893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project umask $mkdir_umask && 384893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" 385893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ) 386893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project then : 387893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 388893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 389893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # The umask is ridiculous, or mkdir does not conform to POSIX, 390893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # or it failed possibly due to a race condition. Create the 391893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # directory the slow way, step by step, checking for races as we go. 392893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 393893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $dstdir in 394893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /*) prefix='/';; 395ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik [-=\(\)!]*) prefix='./';; 396893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *) prefix='';; 397893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 398893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 399893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project eval "$initialize_posix_glob" 400893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 401893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project oIFS=$IFS 402893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project IFS=/ 403893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $posix_glob set -f 404893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project set fnord $dstdir 405893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project shift 406893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $posix_glob set +f 407893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project IFS=$oIFS 408893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 409893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project prefixes= 410893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 411893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for d 412893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project do 413ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik test X"$d" = X && continue 414893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 415893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project prefix=$prefix$d 416893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -d "$prefix"; then 417893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project prefixes= 418893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 419893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if $posix_mkdir; then 420893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (umask=$mkdir_umask && 421893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break 422893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Don't fail if two instances are running concurrently. 423893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test -d "$prefix" || exit 1 424893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 425893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case $prefix in 426893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; 427893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *) qprefix=$prefix;; 428893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project esac 429893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project prefixes="$prefixes '$qprefix'" 430893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 431893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 432893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project prefix=$prefix/ 433893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project done 434893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 435893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -n "$prefixes"; then 436893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Don't fail if two instances are running concurrently. 437893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (umask $mkdir_umask && 438893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project eval "\$doit_exec \$mkdirprog $prefixes") || 439893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test -d "$dstdir" || exit 1 440893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project obsolete_mkdir_used=true 441893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 442893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 443893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 444893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 445893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if test -n "$dir_arg"; then 446893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && 447893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && 448893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || 449893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 450893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 451893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 452893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Make a couple of temp file names in the proper directory. 453893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dsttmp=$dstdir/_inst.$$_ 454893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rmtmp=$dstdir/_rm.$$_ 455893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 456893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Trap to clean up those temp files at exit. 457893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 458893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 459893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Copy the file name to the temp name. 460893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && 461893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 462893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # and set any options; do chmod last to preserve setuid bits. 463893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # 464893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # If any of these fail, we abort the whole thing. If we want to 465893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # ignore errors from any of these, just make sure not to ignore 466893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # errors from the above "$doit $cpprog $src $dsttmp" command. 467893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # 468893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && 469893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && 470893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && 471893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && 472893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 473893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # If -C, don't bother to copy if it wouldn't change the file. 474893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if $copy_on_change && 475893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && 476893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && 477893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 478893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project eval "$initialize_posix_glob" && 479893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $posix_glob set -f && 480893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project set X $old && old=:$2:$4:$5:$6 && 481893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project set X $new && new=:$2:$4:$5:$6 && 482893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $posix_glob set +f && 483893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 484893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test "$old" = "$new" && 485893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 486893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project then 487893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rm -f "$dsttmp" 488893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 489893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Rename the file to the real destination. 490893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || 491893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 492893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # The rename failed, perhaps because mv can't rename something else 493893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # to itself, or perhaps because mv is so ancient that it does not 494893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # support -f. 495893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 496893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Now remove or move aside any old file at destination location. 497893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # We try this two ways since rm can't unlink itself on some 498893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # systems and the destination file might be busy for other 499893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # reasons. In this case, the final cleanup might fail but the new 500893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # file should still install successfully. 501893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 502893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project test ! -f "$dst" || 503893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $doit $rmcmd -f "$dst" 2>/dev/null || 504893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && 505893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } 506893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } || 507893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { echo "$0: cannot unlink or rename $dst" >&2 508893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (exit 1); exit 1 509893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 510893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } && 511893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 512893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project # Now rename the file to the real destination. 513893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project $doit $mvcmd "$dsttmp" "$dst" 514893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 515893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi || exit 1 516893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 517893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project trap '' 0 518893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project fi 519893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectdone 520893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 521893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# Local variables: 522893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# eval: (add-hook 'write-file-hooks 'time-stamp) 523893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# time-stamp-start: "scriptversion=" 524893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# time-stamp-format: "%:y-%02m-%02d.%02H" 5255f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott# time-stamp-time-zone: "UTC" 5265f6bd84e375226bf228fc8ac90318957ec9e1e7fPatrick Scott# time-stamp-end: "; # UTC" 527893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project# End: 528