1425d256321f590e4ca86e3294055e9fad135f9b2mmentovai#!/bin/sh 2425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# install - install a program, script, or datafile 3425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 4cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comscriptversion=2011-11-20.07; # UTC 5425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 6425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# This originates from X11R5 (mit/util/scripts/install.sh), which was 7425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# later released in X11R6 (xc/config/util/install.sh) with the 8425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# following copyright and license. 9425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 10425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# Copyright (C) 1994 X Consortium 11425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 12425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# Permission is hereby granted, free of charge, to any person obtaining a copy 13425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# of this software and associated documentation files (the "Software"), to 14425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# deal in the Software without restriction, including without limitation the 15425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 16425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# sell copies of the Software, and to permit persons to whom the Software is 17425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# furnished to do so, subject to the following conditions: 18425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 19425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# The above copyright notice and this permission notice shall be included in 20425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# all copies or substantial portions of the Software. 21425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 22425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 26425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- 27425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 29425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# Except as contained in this notice, the name of the X Consortium shall not 30425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# be used in advertising or otherwise to promote the sale, use or other deal- 31425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# ings in this Software without prior written authorization from the X Consor- 32425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# tium. 33425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 34425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 35425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# FSF changes to this file are in the public domain. 36425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 37425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# Calling this script install-sh is preferred over install.sh, to prevent 38cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com# 'make' implicit rules from creating a file called install from it 39425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# when there is no Makefile. 40425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# 41425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# This script is compatible with the BSD install script, but was written 42af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai# from scratch. 43af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 44af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovainl=' 45af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai' 46af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaiIFS=" "" $nl" 47425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 48425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# set DOITPROG to echo to test this script 49425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 50425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# Don't use :- since 4.3BSD and earlier shells don't like it. 51cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comdoit=${DOITPROG-} 52af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaiif test -z "$doit"; then 53af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai doit_exec=exec 54af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaielse 55af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai doit_exec=$doit 56af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaifi 57425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 58af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai# Put in absolute file names if you don't have them in your path; 59af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai# or use environment vars. 60425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 61cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comchgrpprog=${CHGRPPROG-chgrp} 62cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comchmodprog=${CHMODPROG-chmod} 63cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comchownprog=${CHOWNPROG-chown} 64cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comcmpprog=${CMPPROG-cmp} 65cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comcpprog=${CPPROG-cp} 66cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.commkdirprog=${MKDIRPROG-mkdir} 67cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.commvprog=${MVPROG-mv} 68cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comrmprog=${RMPROG-rm} 69cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comstripprog=${STRIPPROG-strip} 70cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 71cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.composix_glob='?' 72cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.cominitialize_posix_glob=' 73cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com test "$posix_glob" != "?" || { 74cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com if (set -f) 2>/dev/null; then 75cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com posix_glob= 76cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com else 77cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com posix_glob=: 78cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com fi 79cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com } 80cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com' 81425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 82af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaiposix_mkdir= 83af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 84af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai# Desired mode of installed file. 85af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaimode=0755 86af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 87cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comchgrpcmd= 88af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaichmodcmd=$chmodprog 89425d256321f590e4ca86e3294055e9fad135f9b2mmentovaichowncmd= 90cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.commvcmd=$mvprog 91425d256321f590e4ca86e3294055e9fad135f9b2mmentovairmcmd="$rmprog -f" 92cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comstripcmd= 93cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 94425d256321f590e4ca86e3294055e9fad135f9b2mmentovaisrc= 95425d256321f590e4ca86e3294055e9fad135f9b2mmentovaidst= 96425d256321f590e4ca86e3294055e9fad135f9b2mmentovaidir_arg= 97cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comdst_arg= 98cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 99cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comcopy_on_change=false 100425d256321f590e4ca86e3294055e9fad135f9b2mmentovaino_target_directory= 101425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 102cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comusage="\ 103cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comUsage: $0 [OPTION]... [-T] SRCFILE DSTFILE 104425d256321f590e4ca86e3294055e9fad135f9b2mmentovai or: $0 [OPTION]... SRCFILES... DIRECTORY 105425d256321f590e4ca86e3294055e9fad135f9b2mmentovai or: $0 [OPTION]... -t DIRECTORY SRCFILES... 106425d256321f590e4ca86e3294055e9fad135f9b2mmentovai or: $0 [OPTION]... -d DIRECTORIES... 107425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 108425d256321f590e4ca86e3294055e9fad135f9b2mmentovaiIn the 1st form, copy SRCFILE to DSTFILE. 109425d256321f590e4ca86e3294055e9fad135f9b2mmentovaiIn the 2nd and 3rd, copy all SRCFILES to DIRECTORY. 110425d256321f590e4ca86e3294055e9fad135f9b2mmentovaiIn the 4th, create DIRECTORIES. 111425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 112425d256321f590e4ca86e3294055e9fad135f9b2mmentovaiOptions: 113cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com --help display this help and exit. 114cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com --version display version info and exit. 115cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 116cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -c (ignored) 117cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -C install only if different (preserve the last data modification time) 118cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -d create directories instead of installing files. 119cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -g GROUP $chgrpprog installed files to GROUP. 120cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -m MODE $chmodprog installed files to MODE. 121cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -o USER $chownprog installed files to USER. 122cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -s $stripprog installed files. 123cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -t DIRECTORY install into DIRECTORY. 124cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -T report an error if DSTFILE is a directory. 125425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 126425d256321f590e4ca86e3294055e9fad135f9b2mmentovaiEnvironment variables override the default commands: 127cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG 128cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com RMPROG STRIPPROG 129425d256321f590e4ca86e3294055e9fad135f9b2mmentovai" 130425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 131af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaiwhile test $# -ne 0; do 132425d256321f590e4ca86e3294055e9fad135f9b2mmentovai case $1 in 133cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -c) ;; 134425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 135cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -C) copy_on_change=true;; 136cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 137cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -d) dir_arg=true;; 138425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 139425d256321f590e4ca86e3294055e9fad135f9b2mmentovai -g) chgrpcmd="$chgrpprog $2" 140cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com shift;; 141425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 142425d256321f590e4ca86e3294055e9fad135f9b2mmentovai --help) echo "$usage"; exit $?;; 143425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 144af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai -m) mode=$2 145af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $mode in 146af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *' '* | *' '* | *' 147af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai'* | *'*'* | *'?'* | *'['*) 148af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai echo "$0: invalid mode: $mode" >&2 149af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai exit 1;; 150af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac 151cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com shift;; 152425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 153425d256321f590e4ca86e3294055e9fad135f9b2mmentovai -o) chowncmd="$chownprog $2" 154cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com shift;; 155425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 156cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -s) stripcmd=$stripprog;; 157425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 158cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -t) dst_arg=$2 159cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # Protect names problematic for 'test' and other utilities. 160cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com case $dst_arg in 161cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -* | [=\(\)!]) dst_arg=./$dst_arg;; 162cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com esac 163cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com shift;; 164425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 165cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -T) no_target_directory=true;; 166425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 167425d256321f590e4ca86e3294055e9fad135f9b2mmentovai --version) echo "$0 $scriptversion"; exit $?;; 168425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 169af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai --) shift 170425d256321f590e4ca86e3294055e9fad135f9b2mmentovai break;; 171af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 172af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai -*) echo "$0: invalid option: $1" >&2 173af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai exit 1;; 174af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 175af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *) break;; 176425d256321f590e4ca86e3294055e9fad135f9b2mmentovai esac 177cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com shift 178425d256321f590e4ca86e3294055e9fad135f9b2mmentovaidone 179425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 180cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.comif test $# -ne 0 && test -z "$dir_arg$dst_arg"; then 181af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # When -d is used, all remaining arguments are directories to create. 182af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # When -t is used, the destination is already specified. 183af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Otherwise, the last argument is the destination. Remove it from $@. 184af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai for arg 185af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai do 186cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com if test -n "$dst_arg"; then 187af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # $@ is not empty: it contains at least $arg. 188cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com set fnord "$@" "$dst_arg" 189af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai shift # fnord 190af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 191af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai shift # arg 192cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com dst_arg=$arg 193cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # Protect names problematic for 'test' and other utilities. 194cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com case $dst_arg in 195cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -* | [=\(\)!]) dst_arg=./$dst_arg;; 196cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com esac 197af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai done 198af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaifi 199af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 200af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaiif test $# -eq 0; then 201425d256321f590e4ca86e3294055e9fad135f9b2mmentovai if test -z "$dir_arg"; then 202425d256321f590e4ca86e3294055e9fad135f9b2mmentovai echo "$0: no input file specified." >&2 203425d256321f590e4ca86e3294055e9fad135f9b2mmentovai exit 1 204425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 205cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # It's OK to call 'install-sh -d' without argument. 206425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # This can happen when creating conditional directories. 207425d256321f590e4ca86e3294055e9fad135f9b2mmentovai exit 0 208425d256321f590e4ca86e3294055e9fad135f9b2mmentovaifi 209425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 210af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaiif test -z "$dir_arg"; then 211cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com do_exit='(exit $ret); exit $ret' 212cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com trap "ret=129; $do_exit" 1 213cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com trap "ret=130; $do_exit" 2 214cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com trap "ret=141; $do_exit" 13 215cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com trap "ret=143; $do_exit" 15 216af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 217af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Set umask so as not to create temps with too-generous modes. 218af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # However, 'strip' requires both read and write access to temps. 219af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $mode in 220af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Optimize common cases. 221af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *644) cp_umask=133;; 222af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *755) cp_umask=22;; 223af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 224af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *[0-7]) 225af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if test -z "$stripcmd"; then 226af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai u_plus_rw= 227af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 228af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai u_plus_rw='% 200' 229af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 230af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; 231af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *) 232af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if test -z "$stripcmd"; then 233af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai u_plus_rw= 234af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 235af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai u_plus_rw=,u+rw 236af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 237af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai cp_umask=$mode$u_plus_rw;; 238af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac 239af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaifi 240af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 241425d256321f590e4ca86e3294055e9fad135f9b2mmentovaifor src 242425d256321f590e4ca86e3294055e9fad135f9b2mmentovaido 243cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # Protect names problematic for 'test' and other utilities. 244425d256321f590e4ca86e3294055e9fad135f9b2mmentovai case $src in 245cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com -* | [=\(\)!]) src=./$src;; 246425d256321f590e4ca86e3294055e9fad135f9b2mmentovai esac 247425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 248425d256321f590e4ca86e3294055e9fad135f9b2mmentovai if test -n "$dir_arg"; then 249425d256321f590e4ca86e3294055e9fad135f9b2mmentovai dst=$src 250af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai dstdir=$dst 251af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai test -d "$dstdir" 252af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai dstdir_status=$? 253425d256321f590e4ca86e3294055e9fad135f9b2mmentovai else 254af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 255425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # Waiting for this to be detected by the "$cpprog $src $dsttmp" command 256425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # might cause directories to be created, which would be especially bad 257425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # if $src (and thus $dsttmp) contains '*'. 258425d256321f590e4ca86e3294055e9fad135f9b2mmentovai if test ! -f "$src" && test ! -d "$src"; then 259425d256321f590e4ca86e3294055e9fad135f9b2mmentovai echo "$0: $src does not exist." >&2 260425d256321f590e4ca86e3294055e9fad135f9b2mmentovai exit 1 261425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 262425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 263cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com if test -z "$dst_arg"; then 264425d256321f590e4ca86e3294055e9fad135f9b2mmentovai echo "$0: no destination specified." >&2 265425d256321f590e4ca86e3294055e9fad135f9b2mmentovai exit 1 266425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 267cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com dst=$dst_arg 268425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 269425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # If destination is a directory, append the input filename; won't work 270425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # if double slashes aren't ignored. 271425d256321f590e4ca86e3294055e9fad135f9b2mmentovai if test -d "$dst"; then 272425d256321f590e4ca86e3294055e9fad135f9b2mmentovai if test -n "$no_target_directory"; then 273cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com echo "$0: $dst_arg: Is a directory" >&2 274425d256321f590e4ca86e3294055e9fad135f9b2mmentovai exit 1 275425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 276af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai dstdir=$dst 277af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai dst=$dstdir/`basename "$src"` 278af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai dstdir_status=0 279af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 280af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Prefer dirname, but fall back on a substitute if dirname fails. 281af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai dstdir=` 282af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai (dirname "$dst") 2>/dev/null || 283af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 284af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai X"$dst" : 'X\(//\)[^/]' \| \ 285af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai X"$dst" : 'X\(//\)$' \| \ 286af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai X"$dst" : 'X\(/\)' \| . 2>/dev/null || 287af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai echo X"$dst" | 288af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ 289af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai s//\1/ 290af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai q 291af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai } 292af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai /^X\(\/\/\)[^/].*/{ 293af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai s//\1/ 294af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai q 295af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai } 296af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai /^X\(\/\/\)$/{ 297af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai s//\1/ 298af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai q 299af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai } 300af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai /^X\(\/\).*/{ 301af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai s//\1/ 302af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai q 303af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai } 304af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai s/.*/./; q' 305af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai ` 306af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 307af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai test -d "$dstdir" 308af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai dstdir_status=$? 309425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 310425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 311425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 312af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai obsolete_mkdir_used=false 313af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 314af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if test $dstdir_status != 0; then 315af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $posix_mkdir in 316af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai '') 317af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Create intermediate dirs using mode 755 as modified by the umask. 318af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # This is like FreeBSD 'install' as of 1997-10-28. 319af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai umask=`umask` 320af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $stripcmd.$umask in 321af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Optimize common cases. 322af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *[2367][2367]) mkdir_umask=$umask;; 323af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; 324af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 325af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *[0-7]) 326af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai mkdir_umask=`expr $umask + 22 \ 327af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai - $umask % 100 % 40 + $umask % 20 \ 328af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai - $umask % 10 % 4 + $umask % 2 329af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai `;; 330af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *) mkdir_umask=$umask,go-w;; 331af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac 332af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 333af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # With -d, create the new directory with the user-specified mode. 334af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Otherwise, rely on $mkdir_umask. 335af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if test -n "$dir_arg"; then 336af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai mkdir_mode=-m$mode 337af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 338af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai mkdir_mode= 339af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 340af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 341af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai posix_mkdir=false 342af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $umask in 343af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *[123567][0-7][0-7]) 344af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # POSIX mkdir -p sets u+wx bits regardless of umask, which 345af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # is incompatible with FreeBSD 'install' when (umask & 300) != 0. 346af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai ;; 347af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *) 348af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ 349af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 350af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 351af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if (umask $mkdir_umask && 352af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 353af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai then 354af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if test -z "$dir_arg" || { 355af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Check for POSIX incompatibilities with -m. 356af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or 357cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # other-writable bit of parent directory when it shouldn't. 358af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. 359af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai ls_ld_tmpdir=`ls -ld "$tmpdir"` 360af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $ls_ld_tmpdir in 361af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai d????-?r-*) different_mode=700;; 362af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai d????-?--*) different_mode=755;; 363af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *) false;; 364af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac && 365af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai $mkdirprog -m$different_mode -p -- "$tmpdir" && { 366af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai ls_ld_tmpdir_1=`ls -ld "$tmpdir"` 367af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" 368af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai } 369af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai } 370af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai then posix_mkdir=: 371af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 372af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai rmdir "$tmpdir/d" "$tmpdir" 373af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 374af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Remove any dirs left behind by ancient mkdir implementations. 375af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null 376af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 377af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai trap '' 0;; 378af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac;; 379af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac 380425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 381af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if 382af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai $posix_mkdir && ( 383af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai umask $mkdir_umask && 384af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" 385af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai ) 386af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai then : 387af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 388425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 389af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # The umask is ridiculous, or mkdir does not conform to POSIX, 390af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # or it failed possibly due to a race condition. Create the 391af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # directory the slow way, step by step, checking for races as we go. 392af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 393af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $dstdir in 394cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com /*) prefix='/';; 395cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com [-=\(\)!]*) prefix='./';; 396cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com *) prefix='';; 397af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac 398af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 399cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com eval "$initialize_posix_glob" 400af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 401af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai oIFS=$IFS 402af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai IFS=/ 403cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $posix_glob set -f 404af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai set fnord $dstdir 405425d256321f590e4ca86e3294055e9fad135f9b2mmentovai shift 406cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $posix_glob set +f 407af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai IFS=$oIFS 408af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 409af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai prefixes= 410af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 411af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai for d 412af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai do 413cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com test X"$d" = X && continue 414af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 415af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai prefix=$prefix$d 416af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if test -d "$prefix"; then 417af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai prefixes= 418af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 419af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if $posix_mkdir; then 420af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai (umask=$mkdir_umask && 421af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break 422af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Don't fail if two instances are running concurrently. 423af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai test -d "$prefix" || exit 1 424af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai else 425af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai case $prefix in 426af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; 427af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai *) qprefix=$prefix;; 428af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai esac 429af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai prefixes="$prefixes '$qprefix'" 430af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 431af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 432af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai prefix=$prefix/ 433af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai done 434af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai 435af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai if test -n "$prefixes"; then 436af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai # Don't fail if two instances are running concurrently. 437af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai (umask $mkdir_umask && 438af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai eval "\$doit_exec \$mkdirprog $prefixes") || 439af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai test -d "$dstdir" || exit 1 440af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai obsolete_mkdir_used=true 441425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 442af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 443425d256321f590e4ca86e3294055e9fad135f9b2mmentovai fi 444425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 445425d256321f590e4ca86e3294055e9fad135f9b2mmentovai if test -n "$dir_arg"; then 446af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && 447af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && 448af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || 449af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 450425d256321f590e4ca86e3294055e9fad135f9b2mmentovai else 451425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 452425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # Make a couple of temp file names in the proper directory. 453425d256321f590e4ca86e3294055e9fad135f9b2mmentovai dsttmp=$dstdir/_inst.$$_ 454425d256321f590e4ca86e3294055e9fad135f9b2mmentovai rmtmp=$dstdir/_rm.$$_ 455425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 456425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # Trap to clean up those temp files at exit. 457425d256321f590e4ca86e3294055e9fad135f9b2mmentovai trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 458425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 459425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # Copy the file name to the temp name. 460af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && 461425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 462425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # and set any options; do chmod last to preserve setuid bits. 463425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # 464425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # If any of these fail, we abort the whole thing. If we want to 465425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # ignore errors from any of these, just make sure not to ignore 466425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # errors from the above "$doit $cpprog $src $dsttmp" command. 467425d256321f590e4ca86e3294055e9fad135f9b2mmentovai # 468cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && 469cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && 470cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && 471cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && 472cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 473cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # If -C, don't bother to copy if it wouldn't change the file. 474cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com if $copy_on_change && 475cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && 476cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && 477cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 478cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com eval "$initialize_posix_glob" && 479cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $posix_glob set -f && 480cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com set X $old && old=:$2:$4:$5:$6 && 481cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com set X $new && new=:$2:$4:$5:$6 && 482cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $posix_glob set +f && 483cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 484cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com test "$old" = "$new" && 485cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 486cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com then 487cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com rm -f "$dsttmp" 488cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com else 489cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # Rename the file to the real destination. 490cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || 491cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 492cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # The rename failed, perhaps because mv can't rename something else 493cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # to itself, or perhaps because mv is so ancient that it does not 494cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # support -f. 495cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { 496cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # Now remove or move aside any old file at destination location. 497cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # We try this two ways since rm can't unlink itself on some 498cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # systems and the destination file might be busy for other 499cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # reasons. In this case, the final cleanup might fail but the new 500cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # file should still install successfully. 501cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { 502cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com test ! -f "$dst" || 503cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $doit $rmcmd -f "$dst" 2>/dev/null || 504cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && 505cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } 506cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com } || 507cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com { echo "$0: cannot unlink or rename $dst" >&2 508cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com (exit 1); exit 1 509cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com } 510cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com } && 511cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com 512cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com # Now rename the file to the real destination. 513cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com $doit $mvcmd "$dsttmp" "$dst" 514cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com } 515cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com fi || exit 1 516425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 517af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai trap '' 0 518af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovai fi 519af3c43f00e98047bc7f80dcf4c16b876e095769fmmentovaidone 520425d256321f590e4ca86e3294055e9fad135f9b2mmentovai 521425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# Local variables: 522425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# eval: (add-hook 'write-file-hooks 'time-stamp) 523425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# time-stamp-start: "scriptversion=" 524425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# time-stamp-format: "%:y-%02m-%02d.%02H" 525cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com# time-stamp-time-zone: "UTC" 526cf98b6aefb18b02548819050bde21c21dd7ed15bted.mielczarek@gmail.com# time-stamp-end: "; # UTC" 527425d256321f590e4ca86e3294055e9fad135f9b2mmentovai# End: 528