ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/ac-tools/install-sh
(Generate patch)

Comparing:
trunk/ac-tools/install-sh (file contents), Revision 2 by gezelter, Fri Sep 24 04:16:43 2004 UTC vs.
branches/development/ac-tools/install-sh (file contents), Revision 1465 by chuckv, Fri Jul 9 23:08:25 2010 UTC

# Line 1 | Line 1
1 < #This dummy file here because AC_CONFIG_AUX_DIR looks for it.
1 > #!/bin/sh
2 > # install - install a program, script, or datafile
3 >
4 > scriptversion=2009-04-28.21; # UTC
5 >
6 > # This originates from X11R5 (mit/util/scripts/install.sh), which was
7 > # later released in X11R6 (xc/config/util/install.sh) with the
8 > # following copyright and license.
9 > #
10 > # Copyright (C) 1994 X Consortium
11 > #
12 > # Permission is hereby granted, free of charge, to any person obtaining a copy
13 > # of this software and associated documentation files (the "Software"), to
14 > # deal in the Software without restriction, including without limitation the
15 > # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 > # sell copies of the Software, and to permit persons to whom the Software is
17 > # furnished to do so, subject to the following conditions:
18 > #
19 > # The above copyright notice and this permission notice shall be included in
20 > # all copies or substantial portions of the Software.
21 > #
22 > # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 > # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 > # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
25 > # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26 > # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27 > # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 > #
29 > # Except as contained in this notice, the name of the X Consortium shall not
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-
32 > # tium.
33 > #
34 > #
35 > # FSF changes to this file are in the public domain.
36 > #
37 > # Calling this script install-sh is preferred over install.sh, to prevent
38 > # `make' implicit rules from creating a file called install from it
39 > # when there is no Makefile.
40 > #
41 > # This script is compatible with the BSD install script, but was written
42 > # from scratch.
43 >
44 > nl='
45 > '
46 > IFS=" ""        $nl"
47 >
48 > # set DOITPROG to echo to test this script
49 >
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
54 > else
55 >  doit_exec=$doit
56 > fi
57 >
58 > # Put in absolute file names if you don't have them in your path;
59 > # or use environment vars.
60 >
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}
70 >
71 > posix_glob='?'
72 > initialize_posix_glob='
73 >  test "$posix_glob" != "?" || {
74 >    if (set -f) 2>/dev/null; then
75 >      posix_glob=
76 >    else
77 >      posix_glob=:
78 >    fi
79 >  }
80 > '
81 >
82 > posix_mkdir=
83 >
84 > # Desired mode of installed file.
85 > mode=0755
86 >
87 > chgrpcmd=
88 > chmodcmd=$chmodprog
89 > chowncmd=
90 > mvcmd=$mvprog
91 > rmcmd="$rmprog -f"
92 > stripcmd=
93 >
94 > src=
95 > dst=
96 > dir_arg=
97 > dst_arg=
98 >
99 > copy_on_change=false
100 > no_target_directory=
101 >
102 > usage="\
103 > Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
104 >   or: $0 [OPTION]... SRCFILES... DIRECTORY
105 >   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
106 >   or: $0 [OPTION]... -d DIRECTORIES...
107 >
108 > In the 1st form, copy SRCFILE to DSTFILE.
109 > In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
110 > In the 4th, create DIRECTORIES.
111 >
112 > Options:
113 >     --help     display this help and exit.
114 >     --version  display version info and exit.
115 >
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.
125 >
126 > Environment variables override the default commands:
127 >  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
128 >  RMPROG STRIPPROG
129 > "
130 >
131 > while test $# -ne 0; do
132 >  case $1 in
133 >    -c) ;;
134 >
135 >    -C) copy_on_change=true;;
136 >
137 >    -d) dir_arg=true;;
138 >
139 >    -g) chgrpcmd="$chgrpprog $2"
140 >        shift;;
141 >
142 >    --help) echo "$usage"; exit $?;;
143 >
144 >    -m) mode=$2
145 >        case $mode in
146 >          *' '* | *'    '* | *'
147 > '*        | *'*'* | *'?'* | *'['*)
148 >            echo "$0: invalid mode: $mode" >&2
149 >            exit 1;;
150 >        esac
151 >        shift;;
152 >
153 >    -o) chowncmd="$chownprog $2"
154 >        shift;;
155 >
156 >    -s) stripcmd=$stripprog;;
157 >
158 >    -t) dst_arg=$2
159 >        shift;;
160 >
161 >    -T) no_target_directory=true;;
162 >
163 >    --version) echo "$0 $scriptversion"; exit $?;;
164 >
165 >    --) shift
166 >        break;;
167 >
168 >    -*) echo "$0: invalid option: $1" >&2
169 >        exit 1;;
170 >
171 >    *)  break;;
172 >  esac
173 >  shift
174 > done
175 >
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.
179 >  # Otherwise, the last argument is the destination.  Remove it from $@.
180 >  for arg
181 >  do
182 >    if test -n "$dst_arg"; then
183 >      # $@ is not empty: it contains at least $arg.
184 >      set fnord "$@" "$dst_arg"
185 >      shift # fnord
186 >    fi
187 >    shift # arg
188 >    dst_arg=$arg
189 >  done
190 > fi
191 >
192 > if test $# -eq 0; then
193 >  if test -z "$dir_arg"; then
194 >    echo "$0: no input file specified." >&2
195 >    exit 1
196 >  fi
197 >  # It's OK to call `install-sh -d' without argument.
198 >  # This can happen when creating conditional directories.
199 >  exit 0
200 > fi
201 >
202 > if test -z "$dir_arg"; then
203 >  trap '(exit $?); exit' 1 2 13 15
204 >
205 >  # Set umask so as not to create temps with too-generous modes.
206 >  # However, 'strip' requires both read and write access to temps.
207 >  case $mode in
208 >    # Optimize common cases.
209 >    *644) cp_umask=133;;
210 >    *755) cp_umask=22;;
211 >
212 >    *[0-7])
213 >      if test -z "$stripcmd"; then
214 >        u_plus_rw=
215 >      else
216 >        u_plus_rw='% 200'
217 >      fi
218 >      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
219 >    *)
220 >      if test -z "$stripcmd"; then
221 >        u_plus_rw=
222 >      else
223 >        u_plus_rw=,u+rw
224 >      fi
225 >      cp_umask=$mode$u_plus_rw;;
226 >  esac
227 > fi
228 >
229 > for src
230 > do
231 >  # Protect names starting with `-'.
232 >  case $src in
233 >    -*) src=./$src;;
234 >  esac
235 >
236 >  if test -n "$dir_arg"; then
237 >    dst=$src
238 >    dstdir=$dst
239 >    test -d "$dstdir"
240 >    dstdir_status=$?
241 >  else
242 >
243 >    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
244 >    # might cause directories to be created, which would be especially bad
245 >    # if $src (and thus $dsttmp) contains '*'.
246 >    if test ! -f "$src" && test ! -d "$src"; then
247 >      echo "$0: $src does not exist." >&2
248 >      exit 1
249 >    fi
250 >
251 >    if test -z "$dst_arg"; then
252 >      echo "$0: no destination specified." >&2
253 >      exit 1
254 >    fi
255 >
256 >    dst=$dst_arg
257 >    # Protect names starting with `-'.
258 >    case $dst in
259 >      -*) dst=./$dst;;
260 >    esac
261 >
262 >    # If destination is a directory, append the input filename; won't work
263 >    # if double slashes aren't ignored.
264 >    if test -d "$dst"; then
265 >      if test -n "$no_target_directory"; then
266 >        echo "$0: $dst_arg: Is a directory" >&2
267 >        exit 1
268 >      fi
269 >      dstdir=$dst
270 >      dst=$dstdir/`basename "$src"`
271 >      dstdir_status=0
272 >    else
273 >      # Prefer dirname, but fall back on a substitute if dirname fails.
274 >      dstdir=`
275 >        (dirname "$dst") 2>/dev/null ||
276 >        expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
277 >             X"$dst" : 'X\(//\)[^/]' \| \
278 >             X"$dst" : 'X\(//\)$' \| \
279 >             X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
280 >        echo X"$dst" |
281 >            sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
282 >                   s//\1/
283 >                   q
284 >                 }
285 >                 /^X\(\/\/\)[^/].*/{
286 >                   s//\1/
287 >                   q
288 >                 }
289 >                 /^X\(\/\/\)$/{
290 >                   s//\1/
291 >                   q
292 >                 }
293 >                 /^X\(\/\).*/{
294 >                   s//\1/
295 >                   q
296 >                 }
297 >                 s/.*/./; q'
298 >      `
299 >
300 >      test -d "$dstdir"
301 >      dstdir_status=$?
302 >    fi
303 >  fi
304 >
305 >  obsolete_mkdir_used=false
306 >
307 >  if test $dstdir_status != 0; then
308 >    case $posix_mkdir in
309 >      '')
310 >        # Create intermediate dirs using mode 755 as modified by the umask.
311 >        # This is like FreeBSD 'install' as of 1997-10-28.
312 >        umask=`umask`
313 >        case $stripcmd.$umask in
314 >          # Optimize common cases.
315 >          *[2367][2367]) mkdir_umask=$umask;;
316 >          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
317 >
318 >          *[0-7])
319 >            mkdir_umask=`expr $umask + 22 \
320 >              - $umask % 100 % 40 + $umask % 20 \
321 >              - $umask % 10 % 4 + $umask % 2
322 >            `;;
323 >          *) mkdir_umask=$umask,go-w;;
324 >        esac
325 >
326 >        # With -d, create the new directory with the user-specified mode.
327 >        # Otherwise, rely on $mkdir_umask.
328 >        if test -n "$dir_arg"; then
329 >          mkdir_mode=-m$mode
330 >        else
331 >          mkdir_mode=
332 >        fi
333 >
334 >        posix_mkdir=false
335 >        case $umask in
336 >          *[123567][0-7][0-7])
337 >            # POSIX mkdir -p sets u+wx bits regardless of umask, which
338 >            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
339 >            ;;
340 >          *)
341 >            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
342 >            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
343 >
344 >            if (umask $mkdir_umask &&
345 >                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
346 >            then
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"`
353 >                   case $ls_ld_tmpdir in
354 >                     d????-?r-*) different_mode=700;;
355 >                     d????-?--*) different_mode=755;;
356 >                     *) false;;
357 >                   esac &&
358 >                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
359 >                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
360 >                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
361 >                   }
362 >                 }
363 >              then posix_mkdir=:
364 >              fi
365 >              rmdir "$tmpdir/d" "$tmpdir"
366 >            else
367 >              # Remove any dirs left behind by ancient mkdir implementations.
368 >              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
369 >            fi
370 >            trap '' 0;;
371 >        esac;;
372 >    esac
373 >
374 >    if
375 >      $posix_mkdir && (
376 >        umask $mkdir_umask &&
377 >        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
378 >      )
379 >    then :
380 >    else
381 >
382 >      # The umask is ridiculous, or mkdir does not conform to POSIX,
383 >      # 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.
385 >
386 >      case $dstdir in
387 >        /*) prefix='/';;
388 >        -*) prefix='./';;
389 >        *)  prefix='';;
390 >      esac
391 >
392 >      eval "$initialize_posix_glob"
393 >
394 >      oIFS=$IFS
395 >      IFS=/
396 >      $posix_glob set -f
397 >      set fnord $dstdir
398 >      shift
399 >      $posix_glob set +f
400 >      IFS=$oIFS
401 >
402 >      prefixes=
403 >
404 >      for d
405 >      do
406 >        test -z "$d" && continue
407 >
408 >        prefix=$prefix$d
409 >        if test -d "$prefix"; then
410 >          prefixes=
411 >        else
412 >          if $posix_mkdir; then
413 >            (umask=$mkdir_umask &&
414 >             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
415 >            # Don't fail if two instances are running concurrently.
416 >            test -d "$prefix" || exit 1
417 >          else
418 >            case $prefix in
419 >              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
420 >              *) qprefix=$prefix;;
421 >            esac
422 >            prefixes="$prefixes '$qprefix'"
423 >          fi
424 >        fi
425 >        prefix=$prefix/
426 >      done
427 >
428 >      if test -n "$prefixes"; then
429 >        # Don't fail if two instances are running concurrently.
430 >        (umask $mkdir_umask &&
431 >         eval "\$doit_exec \$mkdirprog $prefixes") ||
432 >          test -d "$dstdir" || exit 1
433 >        obsolete_mkdir_used=true
434 >      fi
435 >    fi
436 >  fi
437 >
438 >  if test -n "$dir_arg"; then
439 >    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
440 >    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
441 >    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
442 >      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
443 >  else
444 >
445 >    # Make a couple of temp file names in the proper directory.
446 >    dsttmp=$dstdir/_inst.$$_
447 >    rmtmp=$dstdir/_rm.$$_
448 >
449 >    # Trap to clean up those temp files at exit.
450 >    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
451 >
452 >    # Copy the file name to the temp name.
453 >    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
454 >
455 >    # and set any options; do chmod last to preserve setuid bits.
456 >    #
457 >    # If any of these fail, we abort the whole thing.  If we want to
458 >    # ignore errors from any of these, just make sure not to ignore
459 >    # errors from the above "$doit $cpprog $src $dsttmp" command.
460 >    #
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"; } &&
465 >
466 >    # If -C, don't bother to copy if it wouldn't change the file.
467 >    if $copy_on_change &&
468 >       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
469 >       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
470 >
471 >       eval "$initialize_posix_glob" &&
472 >       $posix_glob set -f &&
473 >       set X $old && old=:$2:$4:$5:$6 &&
474 >       set X $new && new=:$2:$4:$5:$6 &&
475 >       $posix_glob set +f &&
476 >
477 >       test "$old" = "$new" &&
478 >       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
479 >    then
480 >      rm -f "$dsttmp"
481 >    else
482 >      # Rename the file to the real destination.
483 >      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
484 >
485 >      # The rename failed, perhaps because mv can't rename something else
486 >      # to itself, or perhaps because mv is so ancient that it does not
487 >      # support -f.
488 >      {
489 >        # Now remove or move aside any old file at destination location.
490 >        # We try this two ways since rm can't unlink itself on some
491 >        # systems and the destination file might be busy for other
492 >        # reasons.  In this case, the final cleanup might fail but the new
493 >        # file should still install successfully.
494 >        {
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; :; }
499 >          } ||
500 >          { echo "$0: cannot unlink or rename $dst" >&2
501 >            (exit 1); exit 1
502 >          }
503 >        } &&
504 >
505 >        # Now rename the file to the real destination.
506 >        $doit $mvcmd "$dsttmp" "$dst"
507 >      }
508 >    fi || exit 1
509 >
510 >    trap '' 0
511 >  fi
512 > done
513 >
514 > # Local variables:
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"
520 > # End:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines