"Fossies" - the Fresh Open Source Software Archive

Member "sqlite-autoconf-3320300/tea/tclconfig/install-sh" (18 Jun 2020, 13868 Bytes) of package /linux/misc/sqlite-autoconf-3320300.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/bin/sh
    2 # install - install a program, script, or datafile
    3 
    4 scriptversion=2011-04-20.01; # 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   -S            $stripprog installed files.
  124   -t DIRECTORY  install into DIRECTORY.
  125   -T            report an error if DSTFILE is a directory.
  126 
  127 Environment variables override the default commands:
  128   CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
  129   RMPROG STRIPPROG
  130 "
  131 
  132 while test $# -ne 0; do
  133   case $1 in
  134     -c) ;;
  135 
  136     -C) copy_on_change=true;;
  137 
  138     -d) dir_arg=true;;
  139 
  140     -g) chgrpcmd="$chgrpprog $2"
  141     shift;;
  142 
  143     --help) echo "$usage"; exit $?;;
  144 
  145     -m) mode=$2
  146     case $mode in
  147       *' '* | *'    '* | *'
  148 '*    | *'*'* | *'?'* | *'['*)
  149         echo "$0: invalid mode: $mode" >&2
  150         exit 1;;
  151     esac
  152     shift;;
  153 
  154     -o) chowncmd="$chownprog $2"
  155     shift;;
  156 
  157     -s) stripcmd=$stripprog;;
  158 
  159     -S) stripcmd="$stripprog $2"
  160     shift;;
  161 
  162     -t) dst_arg=$2
  163     shift;;
  164 
  165     -T) no_target_directory=true;;
  166 
  167     --version) echo "$0 $scriptversion"; exit $?;;
  168 
  169     --) shift
  170     break;;
  171 
  172     -*) echo "$0: invalid option: $1" >&2
  173     exit 1;;
  174 
  175     *)  break;;
  176   esac
  177   shift
  178 done
  179 
  180 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
  181   # When -d is used, all remaining arguments are directories to create.
  182   # When -t is used, the destination is already specified.
  183   # Otherwise, the last argument is the destination.  Remove it from $@.
  184   for arg
  185   do
  186     if test -n "$dst_arg"; then
  187       # $@ is not empty: it contains at least $arg.
  188       set fnord "$@" "$dst_arg"
  189       shift # fnord
  190     fi
  191     shift # arg
  192     dst_arg=$arg
  193   done
  194 fi
  195 
  196 if test $# -eq 0; then
  197   if test -z "$dir_arg"; then
  198     echo "$0: no input file specified." >&2
  199     exit 1
  200   fi
  201   # It's OK to call `install-sh -d' without argument.
  202   # This can happen when creating conditional directories.
  203   exit 0
  204 fi
  205 
  206 if test -z "$dir_arg"; then
  207   do_exit='(exit $ret); exit $ret'
  208   trap "ret=129; $do_exit" 1
  209   trap "ret=130; $do_exit" 2
  210   trap "ret=141; $do_exit" 13
  211   trap "ret=143; $do_exit" 15
  212 
  213   # Set umask so as not to create temps with too-generous modes.
  214   # However, 'strip' requires both read and write access to temps.
  215   case $mode in
  216     # Optimize common cases.
  217     *644) cp_umask=133;;
  218     *755) cp_umask=22;;
  219 
  220     *[0-7])
  221       if test -z "$stripcmd"; then
  222     u_plus_rw=
  223       else
  224     u_plus_rw='% 200'
  225       fi
  226       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
  227     *)
  228       if test -z "$stripcmd"; then
  229     u_plus_rw=
  230       else
  231     u_plus_rw=,u+rw
  232       fi
  233       cp_umask=$mode$u_plus_rw;;
  234   esac
  235 fi
  236 
  237 for src
  238 do
  239   # Protect names starting with `-'.
  240   case $src in
  241     -*) src=./$src;;
  242   esac
  243 
  244   if test -n "$dir_arg"; then
  245     dst=$src
  246     dstdir=$dst
  247     test -d "$dstdir"
  248     dstdir_status=$?
  249   else
  250 
  251     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
  252     # might cause directories to be created, which would be especially bad
  253     # if $src (and thus $dsttmp) contains '*'.
  254     if test ! -f "$src" && test ! -d "$src"; then
  255       echo "$0: $src does not exist." >&2
  256       exit 1
  257     fi
  258 
  259     if test -z "$dst_arg"; then
  260       echo "$0: no destination specified." >&2
  261       exit 1
  262     fi
  263 
  264     dst=$dst_arg
  265     # Protect names starting with `-'.
  266     case $dst in
  267       -*) dst=./$dst;;
  268     esac
  269 
  270     # If destination is a directory, append the input filename; won't work
  271     # if double slashes aren't ignored.
  272     if test -d "$dst"; then
  273       if test -n "$no_target_directory"; then
  274     echo "$0: $dst_arg: Is a directory" >&2
  275     exit 1
  276       fi
  277       dstdir=$dst
  278       dst=$dstdir/`basename "$src"`
  279       dstdir_status=0
  280     else
  281       # Prefer dirname, but fall back on a substitute if dirname fails.
  282       dstdir=`
  283     (dirname "$dst") 2>/dev/null ||
  284     expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  285          X"$dst" : 'X\(//\)[^/]' \| \
  286          X"$dst" : 'X\(//\)$' \| \
  287          X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
  288     echo X"$dst" |
  289         sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
  290            s//\1/
  291            q
  292          }
  293          /^X\(\/\/\)[^/].*/{
  294            s//\1/
  295            q
  296          }
  297          /^X\(\/\/\)$/{
  298            s//\1/
  299            q
  300          }
  301          /^X\(\/\).*/{
  302            s//\1/
  303            q
  304          }
  305          s/.*/./; q'
  306       `
  307 
  308       test -d "$dstdir"
  309       dstdir_status=$?
  310     fi
  311   fi
  312 
  313   obsolete_mkdir_used=false
  314 
  315   if test $dstdir_status != 0; then
  316     case $posix_mkdir in
  317       '')
  318     # Create intermediate dirs using mode 755 as modified by the umask.
  319     # This is like FreeBSD 'install' as of 1997-10-28.
  320     umask=`umask`
  321     case $stripcmd.$umask in
  322       # Optimize common cases.
  323       *[2367][2367]) mkdir_umask=$umask;;
  324       .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
  325 
  326       *[0-7])
  327         mkdir_umask=`expr $umask + 22 \
  328           - $umask % 100 % 40 + $umask % 20 \
  329           - $umask % 10 % 4 + $umask % 2
  330         `;;
  331       *) mkdir_umask=$umask,go-w;;
  332     esac
  333 
  334     # With -d, create the new directory with the user-specified mode.
  335     # Otherwise, rely on $mkdir_umask.
  336     if test -n "$dir_arg"; then
  337       mkdir_mode=-m$mode
  338     else
  339       mkdir_mode=
  340     fi
  341 
  342     posix_mkdir=false
  343     case $umask in
  344       *[123567][0-7][0-7])
  345         # POSIX mkdir -p sets u+wx bits regardless of umask, which
  346         # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
  347         ;;
  348       *)
  349         tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
  350         trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
  351 
  352         if (umask $mkdir_umask &&
  353         exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
  354         then
  355           if test -z "$dir_arg" || {
  356            # Check for POSIX incompatibilities with -m.
  357            # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
  358            # other-writeable bit of parent directory when it shouldn't.
  359            # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
  360            ls_ld_tmpdir=`ls -ld "$tmpdir"`
  361            case $ls_ld_tmpdir in
  362              d????-?r-*) different_mode=700;;
  363              d????-?--*) different_mode=755;;
  364              *) false;;
  365            esac &&
  366            $mkdirprog -m$different_mode -p -- "$tmpdir" && {
  367              ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
  368              test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
  369            }
  370          }
  371           then posix_mkdir=:
  372           fi
  373           rmdir "$tmpdir/d" "$tmpdir"
  374         else
  375           # Remove any dirs left behind by ancient mkdir implementations.
  376           rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
  377         fi
  378         trap '' 0;;
  379     esac;;
  380     esac
  381 
  382     if
  383       $posix_mkdir && (
  384     umask $mkdir_umask &&
  385     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
  386       )
  387     then :
  388     else
  389 
  390       # The umask is ridiculous, or mkdir does not conform to POSIX,
  391       # or it failed possibly due to a race condition.  Create the
  392       # directory the slow way, step by step, checking for races as we go.
  393 
  394       case $dstdir in
  395     /*) prefix='/';;
  396     -*) prefix='./';;
  397     *)  prefix='';;
  398       esac
  399 
  400       eval "$initialize_posix_glob"
  401 
  402       oIFS=$IFS
  403       IFS=/
  404       $posix_glob set -f
  405       set fnord $dstdir
  406       shift
  407       $posix_glob set +f
  408       IFS=$oIFS
  409 
  410       prefixes=
  411 
  412       for d
  413       do
  414     test -z "$d" && continue
  415 
  416     prefix=$prefix$d
  417     if test -d "$prefix"; then
  418       prefixes=
  419     else
  420       if $posix_mkdir; then
  421         (umask=$mkdir_umask &&
  422          $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
  423         # Don't fail if two instances are running concurrently.
  424         test -d "$prefix" || exit 1
  425       else
  426         case $prefix in
  427           *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
  428           *) qprefix=$prefix;;
  429         esac
  430         prefixes="$prefixes '$qprefix'"
  431       fi
  432     fi
  433     prefix=$prefix/
  434       done
  435 
  436       if test -n "$prefixes"; then
  437     # Don't fail if two instances are running concurrently.
  438     (umask $mkdir_umask &&
  439      eval "\$doit_exec \$mkdirprog $prefixes") ||
  440       test -d "$dstdir" || exit 1
  441     obsolete_mkdir_used=true
  442       fi
  443     fi
  444   fi
  445 
  446   if test -n "$dir_arg"; then
  447     { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
  448     { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
  449     { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
  450       test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
  451   else
  452 
  453     # Make a couple of temp file names in the proper directory.
  454     dsttmp=$dstdir/_inst.$$_
  455     rmtmp=$dstdir/_rm.$$_
  456 
  457     # Trap to clean up those temp files at exit.
  458     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
  459 
  460     # Copy the file name to the temp name.
  461     (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
  462 
  463     # and set any options; do chmod last to preserve setuid bits.
  464     #
  465     # If any of these fail, we abort the whole thing.  If we want to
  466     # ignore errors from any of these, just make sure not to ignore
  467     # errors from the above "$doit $cpprog $src $dsttmp" command.
  468     #
  469     { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
  470     { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
  471     { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
  472     { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
  473 
  474     # If -C, don't bother to copy if it wouldn't change the file.
  475     if $copy_on_change &&
  476        old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
  477        new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
  478 
  479        eval "$initialize_posix_glob" &&
  480        $posix_glob set -f &&
  481        set X $old && old=:$2:$4:$5:$6 &&
  482        set X $new && new=:$2:$4:$5:$6 &&
  483        $posix_glob set +f &&
  484 
  485        test "$old" = "$new" &&
  486        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
  487     then
  488       rm -f "$dsttmp"
  489     else
  490       # Rename the file to the real destination.
  491       $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
  492 
  493       # The rename failed, perhaps because mv can't rename something else
  494       # to itself, or perhaps because mv is so ancient that it does not
  495       # support -f.
  496       {
  497     # Now remove or move aside any old file at destination location.
  498     # We try this two ways since rm can't unlink itself on some
  499     # systems and the destination file might be busy for other
  500     # reasons.  In this case, the final cleanup might fail but the new
  501     # file should still install successfully.
  502     {
  503       test ! -f "$dst" ||
  504       $doit $rmcmd -f "$dst" 2>/dev/null ||
  505       { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
  506         { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
  507       } ||
  508       { echo "$0: cannot unlink or rename $dst" >&2
  509         (exit 1); exit 1
  510       }
  511     } &&
  512 
  513     # Now rename the file to the real destination.
  514     $doit $mvcmd "$dsttmp" "$dst"
  515       }
  516     fi || exit 1
  517 
  518     trap '' 0
  519   fi
  520 done
  521 
  522 # Local variables:
  523 # eval: (add-hook 'write-file-hooks 'time-stamp)
  524 # time-stamp-start: "scriptversion="
  525 # time-stamp-format: "%:y-%02m-%02d.%02H"
  526 # time-stamp-time-zone: "UTC"
  527 # time-stamp-end: "; # UTC"
  528 # End: