comparison install-sh @ 1693:27d68ccb2c9e

New release
author Adam Chlipala <adam@chlipala.net>
date Sat, 10 Mar 2012 13:13:15 -0500
parents 482815817e99
children 6a621a625b04
comparison
equal deleted inserted replaced
1692:a1a1d66aebac 1693:27d68ccb2c9e
1 #!/bin/sh 1 #!/bin/sh
2 # install - install a program, script, or datafile 2 # install - install a program, script, or datafile
3 3
4 scriptversion=2009-04-28.21; # UTC 4 scriptversion=2011-01-19.21; # UTC
5 5
6 # This originates from X11R5 (mit/util/scripts/install.sh), which was 6 # This originates from X11R5 (mit/util/scripts/install.sh), which was
7 # later released in X11R6 (xc/config/util/install.sh) with the 7 # later released in X11R6 (xc/config/util/install.sh) with the
8 # following copyright and license. 8 # following copyright and license.
9 # 9 #
154 shift;; 154 shift;;
155 155
156 -s) stripcmd=$stripprog;; 156 -s) stripcmd=$stripprog;;
157 157
158 -t) dst_arg=$2 158 -t) dst_arg=$2
159 # Protect names problematic for `test' and other utilities.
160 case $dst_arg in
161 -* | [=\(\)!]) dst_arg=./$dst_arg;;
162 esac
159 shift;; 163 shift;;
160 164
161 -T) no_target_directory=true;; 165 -T) no_target_directory=true;;
162 166
163 --version) echo "$0 $scriptversion"; exit $?;; 167 --version) echo "$0 $scriptversion"; exit $?;;
184 set fnord "$@" "$dst_arg" 188 set fnord "$@" "$dst_arg"
185 shift # fnord 189 shift # fnord
186 fi 190 fi
187 shift # arg 191 shift # arg
188 dst_arg=$arg 192 dst_arg=$arg
193 # Protect names problematic for `test' and other utilities.
194 case $dst_arg in
195 -* | [=\(\)!]) dst_arg=./$dst_arg;;
196 esac
189 done 197 done
190 fi 198 fi
191 199
192 if test $# -eq 0; then 200 if test $# -eq 0; then
193 if test -z "$dir_arg"; then 201 if test -z "$dir_arg"; then
198 # This can happen when creating conditional directories. 206 # This can happen when creating conditional directories.
199 exit 0 207 exit 0
200 fi 208 fi
201 209
202 if test -z "$dir_arg"; then 210 if test -z "$dir_arg"; then
203 trap '(exit $?); exit' 1 2 13 15 211 do_exit='(exit $ret); exit $ret'
212 trap "ret=129; $do_exit" 1
213 trap "ret=130; $do_exit" 2
214 trap "ret=141; $do_exit" 13
215 trap "ret=143; $do_exit" 15
204 216
205 # Set umask so as not to create temps with too-generous modes. 217 # Set umask so as not to create temps with too-generous modes.
206 # However, 'strip' requires both read and write access to temps. 218 # However, 'strip' requires both read and write access to temps.
207 case $mode in 219 case $mode in
208 # Optimize common cases. 220 # Optimize common cases.
226 esac 238 esac
227 fi 239 fi
228 240
229 for src 241 for src
230 do 242 do
231 # Protect names starting with `-'. 243 # Protect names problematic for `test' and other utilities.
232 case $src in 244 case $src in
233 -*) src=./$src;; 245 -* | [=\(\)!]) src=./$src;;
234 esac 246 esac
235 247
236 if test -n "$dir_arg"; then 248 if test -n "$dir_arg"; then
237 dst=$src 249 dst=$src
238 dstdir=$dst 250 dstdir=$dst
250 262
251 if test -z "$dst_arg"; then 263 if test -z "$dst_arg"; then
252 echo "$0: no destination specified." >&2 264 echo "$0: no destination specified." >&2
253 exit 1 265 exit 1
254 fi 266 fi
255
256 dst=$dst_arg 267 dst=$dst_arg
257 # Protect names starting with `-'.
258 case $dst in
259 -*) dst=./$dst;;
260 esac
261 268
262 # If destination is a directory, append the input filename; won't work 269 # If destination is a directory, append the input filename; won't work
263 # if double slashes aren't ignored. 270 # if double slashes aren't ignored.
264 if test -d "$dst"; then 271 if test -d "$dst"; then
265 if test -n "$no_target_directory"; then 272 if test -n "$no_target_directory"; then
383 # or it failed possibly due to a race condition. Create the 390 # or it failed possibly due to a race condition. Create the
384 # directory the slow way, step by step, checking for races as we go. 391 # directory the slow way, step by step, checking for races as we go.
385 392
386 case $dstdir in 393 case $dstdir in
387 /*) prefix='/';; 394 /*) prefix='/';;
388 -*) prefix='./';; 395 [-=\(\)!]*) prefix='./';;
389 *) prefix='';; 396 *) prefix='';;
390 esac 397 esac
391 398
392 eval "$initialize_posix_glob" 399 eval "$initialize_posix_glob"
393 400
401 408
402 prefixes= 409 prefixes=
403 410
404 for d 411 for d
405 do 412 do
406 test -z "$d" && continue 413 test X"$d" = X && continue
407 414
408 prefix=$prefix$d 415 prefix=$prefix$d
409 if test -d "$prefix"; then 416 if test -d "$prefix"; then
410 prefixes= 417 prefixes=
411 else 418 else