"Fossies" - the Fresh Open Source Software Archive

Member "nss-pam-ldapd-0.9.12/install-sh" (15 Nov 2021, 15358 Bytes) of package /linux/privat/nss-pam-ldapd-0.9.12.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 and code folding option. 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=2020-11-14.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 tab='   '
   45 nl='
   46 '
   47 IFS=" $tab$nl"
   48 
   49 # Set DOITPROG to "echo" to test this script.
   50 
   51 doit=${DOITPROG-}
   52 doit_exec=${doit:-exec}
   53 
   54 # Put in absolute file names if you don't have them in your path;
   55 # or use environment vars.
   56 
   57 chgrpprog=${CHGRPPROG-chgrp}
   58 chmodprog=${CHMODPROG-chmod}
   59 chownprog=${CHOWNPROG-chown}
   60 cmpprog=${CMPPROG-cmp}
   61 cpprog=${CPPROG-cp}
   62 mkdirprog=${MKDIRPROG-mkdir}
   63 mvprog=${MVPROG-mv}
   64 rmprog=${RMPROG-rm}
   65 stripprog=${STRIPPROG-strip}
   66 
   67 posix_mkdir=
   68 
   69 # Desired mode of installed file.
   70 mode=0755
   71 
   72 # Create dirs (including intermediate dirs) using mode 755.
   73 # This is like GNU 'install' as of coreutils 8.32 (2020).
   74 mkdir_umask=22
   75 
   76 backupsuffix=
   77 chgrpcmd=
   78 chmodcmd=$chmodprog
   79 chowncmd=
   80 mvcmd=$mvprog
   81 rmcmd="$rmprog -f"
   82 stripcmd=
   83 
   84 src=
   85 dst=
   86 dir_arg=
   87 dst_arg=
   88 
   89 copy_on_change=false
   90 is_target_a_directory=possibly
   91 
   92 usage="\
   93 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
   94    or: $0 [OPTION]... SRCFILES... DIRECTORY
   95    or: $0 [OPTION]... -t DIRECTORY SRCFILES...
   96    or: $0 [OPTION]... -d DIRECTORIES...
   97 
   98 In the 1st form, copy SRCFILE to DSTFILE.
   99 In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
  100 In the 4th, create DIRECTORIES.
  101 
  102 Options:
  103      --help     display this help and exit.
  104      --version  display version info and exit.
  105 
  106   -c            (ignored)
  107   -C            install only if different (preserve data modification time)
  108   -d            create directories instead of installing files.
  109   -g GROUP      $chgrpprog installed files to GROUP.
  110   -m MODE       $chmodprog installed files to MODE.
  111   -o USER       $chownprog installed files to USER.
  112   -p            pass -p to $cpprog.
  113   -s            $stripprog installed files.
  114   -S SUFFIX     attempt to back up existing files, with suffix SUFFIX.
  115   -t DIRECTORY  install into DIRECTORY.
  116   -T            report an error if DSTFILE is a directory.
  117 
  118 Environment variables override the default commands:
  119   CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
  120   RMPROG STRIPPROG
  121 
  122 By default, rm is invoked with -f; when overridden with RMPROG,
  123 it's up to you to specify -f if you want it.
  124 
  125 If -S is not specified, no backups are attempted.
  126 
  127 Email bug reports to bug-automake@gnu.org.
  128 Automake home page: https://www.gnu.org/software/automake/
  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           *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
  147             echo "$0: invalid mode: $mode" >&2
  148             exit 1;;
  149         esac
  150         shift;;
  151 
  152     -o) chowncmd="$chownprog $2"
  153         shift;;
  154 
  155     -p) cpprog="$cpprog -p";;
  156 
  157     -s) stripcmd=$stripprog;;
  158 
  159     -S) backupsuffix="$2"
  160         shift;;
  161 
  162     -t)
  163         is_target_a_directory=always
  164         dst_arg=$2
  165         # Protect names problematic for 'test' and other utilities.
  166         case $dst_arg in
  167           -* | [=\(\)!]) dst_arg=./$dst_arg;;
  168         esac
  169         shift;;
  170 
  171     -T) is_target_a_directory=never;;
  172 
  173     --version) echo "$0 $scriptversion"; exit $?;;
  174 
  175     --) shift
  176         break;;
  177 
  178     -*) echo "$0: invalid option: $1" >&2
  179         exit 1;;
  180 
  181     *)  break;;
  182   esac
  183   shift
  184 done
  185 
  186 # We allow the use of options -d and -T together, by making -d
  187 # take the precedence; this is for compatibility with GNU install.
  188 
  189 if test -n "$dir_arg"; then
  190   if test -n "$dst_arg"; then
  191     echo "$0: target directory not allowed when installing a directory." >&2
  192     exit 1
  193   fi
  194 fi
  195 
  196 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
  197   # When -d is used, all remaining arguments are directories to create.
  198   # When -t is used, the destination is already specified.
  199   # Otherwise, the last argument is the destination.  Remove it from $@.
  200   for arg
  201   do
  202     if test -n "$dst_arg"; then
  203       # $@ is not empty: it contains at least $arg.
  204       set fnord "$@" "$dst_arg"
  205       shift # fnord
  206     fi
  207     shift # arg
  208     dst_arg=$arg
  209     # Protect names problematic for 'test' and other utilities.
  210     case $dst_arg in
  211       -* | [=\(\)!]) dst_arg=./$dst_arg;;
  212     esac
  213   done
  214 fi
  215 
  216 if test $# -eq 0; then
  217   if test -z "$dir_arg"; then
  218     echo "$0: no input file specified." >&2
  219     exit 1
  220   fi
  221   # It's OK to call 'install-sh -d' without argument.
  222   # This can happen when creating conditional directories.
  223   exit 0
  224 fi
  225 
  226 if test -z "$dir_arg"; then
  227   if test $# -gt 1 || test "$is_target_a_directory" = always; then
  228     if test ! -d "$dst_arg"; then
  229       echo "$0: $dst_arg: Is not a directory." >&2
  230       exit 1
  231     fi
  232   fi
  233 fi
  234 
  235 if test -z "$dir_arg"; then
  236   do_exit='(exit $ret); exit $ret'
  237   trap "ret=129; $do_exit" 1
  238   trap "ret=130; $do_exit" 2
  239   trap "ret=141; $do_exit" 13
  240   trap "ret=143; $do_exit" 15
  241 
  242   # Set umask so as not to create temps with too-generous modes.
  243   # However, 'strip' requires both read and write access to temps.
  244   case $mode in
  245     # Optimize common cases.
  246     *644) cp_umask=133;;
  247     *755) cp_umask=22;;
  248 
  249     *[0-7])
  250       if test -z "$stripcmd"; then
  251         u_plus_rw=
  252       else
  253         u_plus_rw='% 200'
  254       fi
  255       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
  256     *)
  257       if test -z "$stripcmd"; then
  258         u_plus_rw=
  259       else
  260         u_plus_rw=,u+rw
  261       fi
  262       cp_umask=$mode$u_plus_rw;;
  263   esac
  264 fi
  265 
  266 for src
  267 do
  268   # Protect names problematic for 'test' and other utilities.
  269   case $src in
  270     -* | [=\(\)!]) src=./$src;;
  271   esac
  272 
  273   if test -n "$dir_arg"; then
  274     dst=$src
  275     dstdir=$dst
  276     test -d "$dstdir"
  277     dstdir_status=$?
  278     # Don't chown directories that already exist.
  279     if test $dstdir_status = 0; then
  280       chowncmd=""
  281     fi
  282   else
  283 
  284     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
  285     # might cause directories to be created, which would be especially bad
  286     # if $src (and thus $dsttmp) contains '*'.
  287     if test ! -f "$src" && test ! -d "$src"; then
  288       echo "$0: $src does not exist." >&2
  289       exit 1
  290     fi
  291 
  292     if test -z "$dst_arg"; then
  293       echo "$0: no destination specified." >&2
  294       exit 1
  295     fi
  296     dst=$dst_arg
  297 
  298     # If destination is a directory, append the input filename.
  299     if test -d "$dst"; then
  300       if test "$is_target_a_directory" = never; then
  301         echo "$0: $dst_arg: Is a directory" >&2
  302         exit 1
  303       fi
  304       dstdir=$dst
  305       dstbase=`basename "$src"`
  306       case $dst in
  307     */) dst=$dst$dstbase;;
  308     *)  dst=$dst/$dstbase;;
  309       esac
  310       dstdir_status=0
  311     else
  312       dstdir=`dirname "$dst"`
  313       test -d "$dstdir"
  314       dstdir_status=$?
  315     fi
  316   fi
  317 
  318   case $dstdir in
  319     */) dstdirslash=$dstdir;;
  320     *)  dstdirslash=$dstdir/;;
  321   esac
  322 
  323   obsolete_mkdir_used=false
  324 
  325   if test $dstdir_status != 0; then
  326     case $posix_mkdir in
  327       '')
  328         # With -d, create the new directory with the user-specified mode.
  329         # Otherwise, rely on $mkdir_umask.
  330         if test -n "$dir_arg"; then
  331           mkdir_mode=-m$mode
  332         else
  333           mkdir_mode=
  334         fi
  335 
  336         posix_mkdir=false
  337     # The $RANDOM variable is not portable (e.g., dash).  Use it
  338     # here however when possible just to lower collision chance.
  339     tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
  340 
  341     trap '
  342       ret=$?
  343       rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
  344       exit $ret
  345     ' 0
  346 
  347     # Because "mkdir -p" follows existing symlinks and we likely work
  348     # directly in world-writeable /tmp, make sure that the '$tmpdir'
  349     # directory is successfully created first before we actually test
  350     # 'mkdir -p'.
  351     if (umask $mkdir_umask &&
  352         $mkdirprog $mkdir_mode "$tmpdir" &&
  353         exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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-writable bit of parent directory when it shouldn't.
  359            # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
  360            test_tmpdir="$tmpdir/a"
  361            ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
  362            case $ls_ld_tmpdir in
  363          d????-?r-*) different_mode=700;;
  364          d????-?--*) different_mode=755;;
  365          *) false;;
  366            esac &&
  367            $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
  368          ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
  369          test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
  370            }
  371          }
  372       then posix_mkdir=:
  373       fi
  374       rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
  375     else
  376       # Remove any dirs left behind by ancient mkdir implementations.
  377       rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
  378     fi
  379     trap '' 0;;
  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       # 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       oIFS=$IFS
  401       IFS=/
  402       set -f
  403       set fnord $dstdir
  404       shift
  405       set +f
  406       IFS=$oIFS
  407 
  408       prefixes=
  409 
  410       for d
  411       do
  412         test X"$d" = X && continue
  413 
  414         prefix=$prefix$d
  415         if test -d "$prefix"; then
  416           prefixes=
  417         else
  418           if $posix_mkdir; then
  419             (umask $mkdir_umask &&
  420              $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
  421             # Don't fail if two instances are running concurrently.
  422             test -d "$prefix" || exit 1
  423           else
  424             case $prefix in
  425               *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
  426               *) qprefix=$prefix;;
  427             esac
  428             prefixes="$prefixes '$qprefix'"
  429           fi
  430         fi
  431         prefix=$prefix/
  432       done
  433 
  434       if test -n "$prefixes"; then
  435         # Don't fail if two instances are running concurrently.
  436         (umask $mkdir_umask &&
  437          eval "\$doit_exec \$mkdirprog $prefixes") ||
  438           test -d "$dstdir" || exit 1
  439         obsolete_mkdir_used=true
  440       fi
  441     fi
  442   fi
  443 
  444   if test -n "$dir_arg"; then
  445     { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
  446     { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
  447     { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
  448       test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
  449   else
  450 
  451     # Make a couple of temp file names in the proper directory.
  452     dsttmp=${dstdirslash}_inst.$$_
  453     rmtmp=${dstdirslash}_rm.$$_
  454 
  455     # Trap to clean up those temp files at exit.
  456     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
  457 
  458     # Copy the file name to the temp name.
  459     (umask $cp_umask &&
  460      { test -z "$stripcmd" || {
  461      # Create $dsttmp read-write so that cp doesn't create it read-only,
  462      # which would cause strip to fail.
  463      if test -z "$doit"; then
  464        : >"$dsttmp" # No need to fork-exec 'touch'.
  465      else
  466        $doit touch "$dsttmp"
  467      fi
  468        }
  469      } &&
  470      $doit_exec $cpprog "$src" "$dsttmp") &&
  471 
  472     # and set any options; do chmod last to preserve setuid bits.
  473     #
  474     # If any of these fail, we abort the whole thing.  If we want to
  475     # ignore errors from any of these, just make sure not to ignore
  476     # errors from the above "$doit $cpprog $src $dsttmp" command.
  477     #
  478     { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
  479     { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
  480     { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
  481     { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
  482 
  483     # If -C, don't bother to copy if it wouldn't change the file.
  484     if $copy_on_change &&
  485        old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
  486        new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
  487        set -f &&
  488        set X $old && old=:$2:$4:$5:$6 &&
  489        set X $new && new=:$2:$4:$5:$6 &&
  490        set +f &&
  491        test "$old" = "$new" &&
  492        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
  493     then
  494       rm -f "$dsttmp"
  495     else
  496       # If $backupsuffix is set, and the file being installed
  497       # already exists, attempt a backup.  Don't worry if it fails,
  498       # e.g., if mv doesn't support -f.
  499       if test -n "$backupsuffix" && test -f "$dst"; then
  500         $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
  501       fi
  502 
  503       # Rename the file to the real destination.
  504       $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
  505 
  506       # The rename failed, perhaps because mv can't rename something else
  507       # to itself, or perhaps because mv is so ancient that it does not
  508       # support -f.
  509       {
  510         # Now remove or move aside any old file at destination location.
  511         # We try this two ways since rm can't unlink itself on some
  512         # systems and the destination file might be busy for other
  513         # reasons.  In this case, the final cleanup might fail but the new
  514         # file should still install successfully.
  515         {
  516           test ! -f "$dst" ||
  517           $doit $rmcmd "$dst" 2>/dev/null ||
  518           { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
  519             { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
  520           } ||
  521           { echo "$0: cannot unlink or rename $dst" >&2
  522             (exit 1); exit 1
  523           }
  524         } &&
  525 
  526         # Now rename the file to the real destination.
  527         $doit $mvcmd "$dsttmp" "$dst"
  528       }
  529     fi || exit 1
  530 
  531     trap '' 0
  532   fi
  533 done
  534 
  535 # Local variables:
  536 # eval: (add-hook 'before-save-hook 'time-stamp)
  537 # time-stamp-start: "scriptversion="
  538 # time-stamp-format: "%:y-%02m-%02d.%02H"
  539 # time-stamp-time-zone: "UTC0"
  540 # time-stamp-end: "; # UTC"
  541 # End: