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