Lines Matching +full:protect +full:- +full:exec
2 # install - install a program, script, or datafile
4 scriptversion=2009-04-28.21; # UTC
26 # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
30 # be used in advertising or otherwise to promote the sale, use or other deal-
31 # ings in this Software without prior written authorization from the X Consor-
37 # Calling this script install-sh is preferred over install.sh, to prevent
50 # Don't use :- since 4.3BSD and earlier shells don't like it.
51 doit=${DOITPROG-}
52 if test -z "$doit"; then
53 doit_exec=exec
61 chgrpprog=${CHGRPPROG-chgrp}
62 chmodprog=${CHMODPROG-chmod}
63 chownprog=${CHOWNPROG-chown}
64 cmpprog=${CMPPROG-cmp}
65 cpprog=${CPPROG-cp}
66 mkdirprog=${MKDIRPROG-mkdir}
67 mvprog=${MVPROG-mv}
68 rmprog=${RMPROG-rm}
69 stripprog=${STRIPPROG-strip}
74 if (set -f) 2>/dev/null; then
91 rmcmd="$rmprog -f"
103 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
105 or: $0 [OPTION]... -t DIRECTORY SRCFILES...
106 or: $0 [OPTION]... -d DIRECTORIES...
113 --help display this help and exit.
114 --version display version info and exit.
116 -c (ignored)
117 -C install only if different (preserve the last data modification time)
118 -d create directories instead of installing files.
119 -g GROUP $chgrpprog installed files to GROUP.
120 -m MODE $chmodprog installed files to MODE.
121 -o USER $chownprog installed files to USER.
122 -s $stripprog installed files.
123 -t DIRECTORY install into DIRECTORY.
124 -T report an error if DSTFILE is a directory.
131 while test $# -ne 0; do
133 -c) ;;
135 -C) copy_on_change=true;;
137 -d) dir_arg=true;;
139 -g) chgrpcmd="$chgrpprog $2"
142 --help) echo "$usage"; exit $?;;
144 -m) mode=$2
153 -o) chowncmd="$chownprog $2"
156 -s) stripcmd=$stripprog;;
158 -t) dst_arg=$2
161 -T) no_target_directory=true;;
163 --version) echo "$0 $scriptversion"; exit $?;;
165 --) shift
168 -*) echo "$0: invalid option: $1" >&2
176 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
177 # When -d is used, all remaining arguments are directories to create.
178 # When -t is used, the destination is already specified.
182 if test -n "$dst_arg"; then
192 if test $# -eq 0; then
193 if test -z "$dir_arg"; then
197 # It's OK to call `install-sh -d' without argument.
202 if test -z "$dir_arg"; then
205 # Set umask so as not to create temps with too-generous modes.
212 *[0-7])
213 if test -z "$stripcmd"; then
218 cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
220 if test -z "$stripcmd"; then
231 # Protect names starting with `-'.
233 -*) src=./$src;;
236 if test -n "$dir_arg"; then
239 test -d "$dstdir"
246 if test ! -f "$src" && test ! -d "$src"; then
251 if test -z "$dst_arg"; then
257 # Protect names starting with `-'.
259 -*) dst=./$dst;;
264 if test -d "$dst"; then
265 if test -n "$no_target_directory"; then
300 test -d "$dstdir"
311 # This is like FreeBSD 'install' as of 1997-10-28.
318 *[0-7])
320 - $umask % 100 % 40 + $umask % 20 \
321 - $umask % 10 % 4 + $umask % 2
323 *) mkdir_umask=$umask,go-w;;
326 # With -d, create the new directory with the user-specified mode.
328 if test -n "$dir_arg"; then
329 mkdir_mode=-m$mode
336 *[123567][0-7][0-7])
337 # POSIX mkdir -p sets u+wx bits regardless of umask, which
341 tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
345 exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
347 if test -z "$dir_arg" || {
348 # Check for POSIX incompatibilities with -m.
349 # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
350 # other-writeable bit of parent directory when it shouldn't.
351 # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
352 ls_ld_tmpdir=`ls -ld "$tmpdir"`
354 d????-?r-*) different_mode=700;;
355 d????-?--*) different_mode=755;;
358 $mkdirprog -m$different_mode -p -- "$tmpdir" && {
359 ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
368 rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
377 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
388 -*) prefix='./';;
396 $posix_glob set -f
406 test -z "$d" && continue
409 if test -d "$prefix"; then
414 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
416 test -d "$prefix" || exit 1
428 if test -n "$prefixes"; then
432 test -d "$dstdir" || exit 1
438 if test -n "$dir_arg"; then
439 { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
440 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
442 test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
450 trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
461 { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
462 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
463 { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
464 { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
466 # If -C, don't bother to copy if it wouldn't change the file.
468 old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
469 new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
472 $posix_glob set -f &&
480 rm -f "$dsttmp"
483 $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
487 # support -f.
495 test ! -f "$dst" ||
496 $doit $rmcmd -f "$dst" 2>/dev/null ||
497 { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
498 { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
515 # eval: (add-hook 'write-file-hooks 'time-stamp)
516 # time-stamp-start: "scriptversion="
517 # time-stamp-format: "%:y-%02m-%02d.%02H"
518 # time-stamp-time-zone: "UTC"
519 # time-stamp-end: "; # UTC"