Changeset 02c8e54 in mod_gnutls for config/install-sh


Ignore:
Timestamp:
Nov 22, 2015, 1:43:48 PM (4 years ago)
Author:
Daniel Kahn Gillmor <dkg@…>
Branches:
debian/master, debian/stretch-backports, jessie-backports, upstream
Children:
63468af, 8a264b0, bcbcf5d
Parents:
89f863f (diff), 07cc51f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Imported Upstream version 0.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • config/install-sh

    r89f863f r02c8e54  
    22# install - install a program, script, or datafile
    33
    4 scriptversion=2011-11-20.07; # UTC
     4scriptversion=2013-12-25.23; # UTC
    55
    66# This originates from X11R5 (mit/util/scripts/install.sh), which was
     
    4242# from scratch.
    4343
     44tab='   '
    4445nl='
    4546'
    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.
     47IFS=" $tab$nl"
     48
     49# Set DOITPROG to "echo" to test this script.
     50
    5151doit=${DOITPROG-}
    52 if test -z "$doit"; then
    53   doit_exec=exec
    54 else
    55   doit_exec=$doit
    56 fi
     52doit_exec=${doit:-exec}
    5753
    5854# Put in absolute file names if you don't have them in your path;
     
    6965stripprog=${STRIPPROG-strip}
    7066
    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 
    8267posix_mkdir=
    8368
     
    9883
    9984copy_on_change=false
    100 no_target_directory=
     85is_target_a_directory=possibly
    10186
    10287usage="\
     
    138123
    139124    -g) chgrpcmd="$chgrpprog $2"
    140         shift;;
     125        shift;;
    141126
    142127    --help) echo "$usage"; exit $?;;
    143128
    144129    -m) mode=$2
    145         case $mode in
    146           *' '* | *'    '* | *'
    147 '*        | *'*'* | *'?'* | *'['*)
    148             echo "$0: invalid mode: $mode" >&2
    149             exit 1;;
    150         esac
    151         shift;;
     130        case $mode in
     131          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
     132            echo "$0: invalid mode: $mode" >&2
     133            exit 1;;
     134        esac
     135        shift;;
    152136
    153137    -o) chowncmd="$chownprog $2"
    154         shift;;
     138        shift;;
    155139
    156140    -s) stripcmd=$stripprog;;
    157141
    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
    163         shift;;
    164 
    165     -T) no_target_directory=true;;
     142    -t)
     143        is_target_a_directory=always
     144        dst_arg=$2
     145        # Protect names problematic for 'test' and other utilities.
     146        case $dst_arg in
     147          -* | [=\(\)!]) dst_arg=./$dst_arg;;
     148        esac
     149        shift;;
     150
     151    -T) is_target_a_directory=never;;
    166152
    167153    --version) echo "$0 $scriptversion"; exit $?;;
    168154
    169     --) shift
    170         break;;
    171 
    172     -*) echo "$0: invalid option: $1" >&2
    173         exit 1;;
     155    --) shift
     156        break;;
     157
     158    -*) echo "$0: invalid option: $1" >&2
     159        exit 1;;
    174160
    175161    *)  break;;
     
    177163  shift
    178164done
     165
     166# We allow the use of options -d and -T together, by making -d
     167# take the precedence; this is for compatibility with GNU install.
     168
     169if test -n "$dir_arg"; then
     170  if test -n "$dst_arg"; then
     171    echo "$0: target directory not allowed when installing a directory." >&2
     172    exit 1
     173  fi
     174fi
    179175
    180176if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     
    209205
    210206if test -z "$dir_arg"; then
     207  if test $# -gt 1 || test "$is_target_a_directory" = always; then
     208    if test ! -d "$dst_arg"; then
     209      echo "$0: $dst_arg: Is not a directory." >&2
     210      exit 1
     211    fi
     212  fi
     213fi
     214
     215if test -z "$dir_arg"; then
    211216  do_exit='(exit $ret); exit $ret'
    212217  trap "ret=129; $do_exit" 1
     
    224229    *[0-7])
    225230      if test -z "$stripcmd"; then
    226         u_plus_rw=
     231        u_plus_rw=
    227232      else
    228         u_plus_rw='% 200'
     233        u_plus_rw='% 200'
    229234      fi
    230235      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
    231236    *)
    232237      if test -z "$stripcmd"; then
    233         u_plus_rw=
     238        u_plus_rw=
    234239      else
    235         u_plus_rw=,u+rw
     240        u_plus_rw=,u+rw
    236241      fi
    237242      cp_umask=$mode$u_plus_rw;;
     
    270275    # if double slashes aren't ignored.
    271276    if test -d "$dst"; then
    272       if test -n "$no_target_directory"; then
    273         echo "$0: $dst_arg: Is a directory" >&2
    274         exit 1
     277      if test "$is_target_a_directory" = never; then
     278        echo "$0: $dst_arg: Is a directory" >&2
     279        exit 1
    275280      fi
    276281      dstdir=$dst
     
    278283      dstdir_status=0
    279284    else
    280       # Prefer dirname, but fall back on a substitute if dirname fails.
    281       dstdir=`
    282         (dirname "$dst") 2>/dev/null ||
    283         expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
    284              X"$dst" : 'X\(//\)[^/]' \| \
    285              X"$dst" : 'X\(//\)$' \| \
    286              X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
    287         echo X"$dst" |
    288             sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
    289                    s//\1/
    290                    q
    291                  }
    292                  /^X\(\/\/\)[^/].*/{
    293                    s//\1/
    294                    q
    295                  }
    296                  /^X\(\/\/\)$/{
    297                    s//\1/
    298                    q
    299                  }
    300                  /^X\(\/\).*/{
    301                    s//\1/
    302                    q
    303                  }
    304                  s/.*/./; q'
    305       `
    306 
     285      dstdir=`dirname "$dst"`
    307286      test -d "$dstdir"
    308287      dstdir_status=$?
     
    315294    case $posix_mkdir in
    316295      '')
    317         # Create intermediate dirs using mode 755 as modified by the umask.
    318         # This is like FreeBSD 'install' as of 1997-10-28.
    319         umask=`umask`
    320         case $stripcmd.$umask in
    321           # Optimize common cases.
    322           *[2367][2367]) mkdir_umask=$umask;;
    323           .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
    324 
    325           *[0-7])
    326             mkdir_umask=`expr $umask + 22 \
    327               - $umask % 100 % 40 + $umask % 20 \
    328               - $umask % 10 % 4 + $umask % 2
    329             `;;
    330           *) mkdir_umask=$umask,go-w;;
    331         esac
    332 
    333         # With -d, create the new directory with the user-specified mode.
    334         # Otherwise, rely on $mkdir_umask.
    335         if test -n "$dir_arg"; then
    336           mkdir_mode=-m$mode
    337         else
    338           mkdir_mode=
    339         fi
    340 
    341         posix_mkdir=false
    342         case $umask in
    343           *[123567][0-7][0-7])
    344             # POSIX mkdir -p sets u+wx bits regardless of umask, which
    345             # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
    346             ;;
    347           *)
    348             tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
    349             trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
    350 
    351             if (umask $mkdir_umask &&
    352                 exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
    353             then
    354               if test -z "$dir_arg" || {
    355                    # Check for POSIX incompatibilities with -m.
    356                    # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
    357                    # other-writable bit of parent directory when it shouldn't.
    358                    # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
    359                    ls_ld_tmpdir=`ls -ld "$tmpdir"`
    360                    case $ls_ld_tmpdir in
    361                      d????-?r-*) different_mode=700;;
    362                      d????-?--*) different_mode=755;;
    363                      *) false;;
    364                    esac &&
    365                    $mkdirprog -m$different_mode -p -- "$tmpdir" && {
    366                      ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
    367                      test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
    368                    }
    369                 }
    370               then posix_mkdir=:
    371               fi
    372               rmdir "$tmpdir/d" "$tmpdir"
    373             else
    374               # Remove any dirs left behind by ancient mkdir implementations.
    375               rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
    376             fi
    377             trap '' 0;;
    378         esac;;
     296        # Create intermediate dirs using mode 755 as modified by the umask.
     297        # This is like FreeBSD 'install' as of 1997-10-28.
     298        umask=`umask`
     299        case $stripcmd.$umask in
     300          # Optimize common cases.
     301          *[2367][2367]) mkdir_umask=$umask;;
     302          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
     303
     304          *[0-7])
     305            mkdir_umask=`expr $umask + 22 \
     306              - $umask % 100 % 40 + $umask % 20 \
     307              - $umask % 10 % 4 + $umask % 2
     308            `;;
     309          *) mkdir_umask=$umask,go-w;;
     310        esac
     311
     312        # With -d, create the new directory with the user-specified mode.
     313        # Otherwise, rely on $mkdir_umask.
     314        if test -n "$dir_arg"; then
     315          mkdir_mode=-m$mode
     316        else
     317          mkdir_mode=
     318        fi
     319
     320        posix_mkdir=false
     321        case $umask in
     322          *[123567][0-7][0-7])
     323            # POSIX mkdir -p sets u+wx bits regardless of umask, which
     324            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
     325            ;;
     326          *)
     327            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
     328            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
     329
     330            if (umask $mkdir_umask &&
     331                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
     332            then
     333              if test -z "$dir_arg" || {
     334                   # Check for POSIX incompatibilities with -m.
     335                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
     336                   # other-writable bit of parent directory when it shouldn't.
     337                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
     338                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
     339                   case $ls_ld_tmpdir in
     340                     d????-?r-*) different_mode=700;;
     341                     d????-?--*) different_mode=755;;
     342                     *) false;;
     343                   esac &&
     344                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
     345                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
     346                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
     347                   }
     348                }
     349              then posix_mkdir=:
     350              fi
     351              rmdir "$tmpdir/d" "$tmpdir"
     352            else
     353              # Remove any dirs left behind by ancient mkdir implementations.
     354              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
     355            fi
     356            trap '' 0;;
     357        esac;;
    379358    esac
    380359
    381360    if
    382361      $posix_mkdir && (
    383         umask $mkdir_umask &&
    384         $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
     362        umask $mkdir_umask &&
     363        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
    385364      )
    386365    then :
     
    392371
    393372      case $dstdir in
    394         /*) prefix='/';;
    395         [-=\(\)!]*) prefix='./';;
    396         *)  prefix='';;
     373        /*) prefix='/';;
     374        [-=\(\)!]*) prefix='./';;
     375        *)  prefix='';;
    397376      esac
    398 
    399       eval "$initialize_posix_glob"
    400377
    401378      oIFS=$IFS
    402379      IFS=/
    403       $posix_glob set -f
     380      set -f
    404381      set fnord $dstdir
    405382      shift
    406       $posix_glob set +f
     383      set +f
    407384      IFS=$oIFS
    408385
     
    411388      for d
    412389      do
    413         test X"$d" = X && continue
    414 
    415         prefix=$prefix$d
    416         if test -d "$prefix"; then
    417           prefixes=
    418         else
    419           if $posix_mkdir; then
    420             (umask=$mkdir_umask &&
    421              $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
    422             # Don't fail if two instances are running concurrently.
    423             test -d "$prefix" || exit 1
    424           else
    425             case $prefix in
    426               *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
    427               *) qprefix=$prefix;;
    428             esac
    429             prefixes="$prefixes '$qprefix'"
    430           fi
    431         fi
    432         prefix=$prefix/
     390        test X"$d" = X && continue
     391
     392        prefix=$prefix$d
     393        if test -d "$prefix"; then
     394          prefixes=
     395        else
     396          if $posix_mkdir; then
     397            (umask=$mkdir_umask &&
     398             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
     399            # Don't fail if two instances are running concurrently.
     400            test -d "$prefix" || exit 1
     401          else
     402            case $prefix in
     403              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
     404              *) qprefix=$prefix;;
     405            esac
     406            prefixes="$prefixes '$qprefix'"
     407          fi
     408        fi
     409        prefix=$prefix/
    433410      done
    434411
    435412      if test -n "$prefixes"; then
    436         # Don't fail if two instances are running concurrently.
    437         (umask $mkdir_umask &&
    438         eval "\$doit_exec \$mkdirprog $prefixes") ||
    439           test -d "$dstdir" || exit 1
    440         obsolete_mkdir_used=true
     413        # Don't fail if two instances are running concurrently.
     414        (umask $mkdir_umask &&
     415        eval "\$doit_exec \$mkdirprog $prefixes") ||
     416          test -d "$dstdir" || exit 1
     417        obsolete_mkdir_used=true
    441418      fi
    442419    fi
     
    473450    # If -C, don't bother to copy if it wouldn't change the file.
    474451    if $copy_on_change &&
    475        old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
    476        new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
    477 
    478        eval "$initialize_posix_glob" &&
    479        $posix_glob set -f &&
     452       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
     453       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
     454       set -f &&
    480455       set X $old && old=:$2:$4:$5:$6 &&
    481456       set X $new && new=:$2:$4:$5:$6 &&
    482        $posix_glob set +f &&
    483 
     457       set +f &&
    484458       test "$old" = "$new" &&
    485459       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     
    494468      # support -f.
    495469      {
    496         # Now remove or move aside any old file at destination location.
    497         # We try this two ways since rm can't unlink itself on some
    498         # systems and the destination file might be busy for other
    499         # reasons.  In this case, the final cleanup might fail but the new
    500         # file should still install successfully.
    501         {
    502           test ! -f "$dst" ||
    503           $doit $rmcmd -f "$dst" 2>/dev/null ||
    504           { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
    505             { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
    506           } ||
    507           { echo "$0: cannot unlink or rename $dst" >&2
    508             (exit 1); exit 1
    509           }
    510         } &&
    511 
    512         # Now rename the file to the real destination.
    513         $doit $mvcmd "$dsttmp" "$dst"
     470        # Now remove or move aside any old file at destination location.
     471        # We try this two ways since rm can't unlink itself on some
     472        # systems and the destination file might be busy for other
     473        # reasons.  In this case, the final cleanup might fail but the new
     474        # file should still install successfully.
     475        {
     476          test ! -f "$dst" ||
     477          $doit $rmcmd -f "$dst" 2>/dev/null ||
     478          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
     479            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
     480          } ||
     481          { echo "$0: cannot unlink or rename $dst" >&2
     482            (exit 1); exit 1
     483          }
     484        } &&
     485
     486        # Now rename the file to the real destination.
     487        $doit $mvcmd "$dsttmp" "$dst"
    514488      }
    515489    fi || exit 1
Note: See TracChangeset for help on using the changeset viewer.