Ignore:
Timestamp:
Jul 28, 2017, 2:26:14 PM (6 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
79dbb79
Parents:
a2e0687
Message:

automake directory must copy files, use --copy

File:
1 edited

Legend:

Unmodified
Added
Removed
  • automake/install-sh

    ra2e0687 r59310bf  
    22# install - install a program, script, or datafile
    33
    4 scriptversion=2011-01-19.21; # UTC
     4scriptversion=2014-09-12.12; # UTC
    55
    66# This originates from X11R5 (mit/util/scripts/install.sh), which was
     
    3636#
    3737# Calling this script install-sh is preferred over install.sh, to prevent
    38 # `make' implicit rules from creating a file called install from it
     38# 'make' implicit rules from creating a file called install from it
    3939# when there is no Makefile.
    4040#
     
    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
     
    191187    shift # arg
    192188    dst_arg=$arg
    193     # Protect names problematic for `test' and other utilities.
     189    # Protect names problematic for 'test' and other utilities.
    194190    case $dst_arg in
    195191      -* | [=\(\)!]) dst_arg=./$dst_arg;;
     
    203199    exit 1
    204200  fi
    205   # It's OK to call `install-sh -d' without argument.
     201  # It's OK to call 'install-sh -d' without argument.
    206202  # This can happen when creating conditional directories.
    207203  exit 0
     204fi
     205
     206if 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
    208213fi
    209214
     
    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;;
     
    241246for src
    242247do
    243   # Protect names problematic for `test' and other utilities.
     248  # Protect names problematic for 'test' and other utilities.
    244249  case $src in
    245250    -* | [=\(\)!]) src=./$src;;
     
    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-writeable 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            # $RANDOM is not portable (e.g. dash);  use it when possible to
     328            # lower collision chance
     329            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
     330            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
     331
     332            # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
     333            # create the $tmpdir first (and fail if unsuccessful) to make sure
     334            # that nobody tries to guess the $tmpdir name.
     335            if (umask $mkdir_umask &&
     336                $mkdirprog $mkdir_mode "$tmpdir" &&
     337                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
     338            then
     339              if test -z "$dir_arg" || {
     340                   # Check for POSIX incompatibilities with -m.
     341                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
     342                   # other-writable bit of parent directory when it shouldn't.
     343                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
     344                   test_tmpdir="$tmpdir/a"
     345                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
     346                   case $ls_ld_tmpdir in
     347                     d????-?r-*) different_mode=700;;
     348                     d????-?--*) different_mode=755;;
     349                     *) false;;
     350                   esac &&
     351                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
     352                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
     353                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
     354                   }
     355                 }
     356              then posix_mkdir=:
     357              fi
     358              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
     359            else
     360              # Remove any dirs left behind by ancient mkdir implementations.
     361              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
     362            fi
     363            trap '' 0;;
     364        esac;;
    379365    esac
    380366
    381367    if
    382368      $posix_mkdir && (
    383         umask $mkdir_umask &&
    384         $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
     369        umask $mkdir_umask &&
     370        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
    385371      )
    386372    then :
     
    392378
    393379      case $dstdir in
    394         /*) prefix='/';;
    395         [-=\(\)!]*) prefix='./';;
    396         *)  prefix='';;
     380        /*) prefix='/';;
     381        [-=\(\)!]*) prefix='./';;
     382        *)  prefix='';;
    397383      esac
    398 
    399       eval "$initialize_posix_glob"
    400384
    401385      oIFS=$IFS
    402386      IFS=/
    403       $posix_glob set -f
     387      set -f
    404388      set fnord $dstdir
    405389      shift
    406       $posix_glob set +f
     390      set +f
    407391      IFS=$oIFS
    408392
     
    411395      for d
    412396      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/
     397        test X"$d" = X && continue
     398
     399        prefix=$prefix$d
     400        if test -d "$prefix"; then
     401          prefixes=
     402        else
     403          if $posix_mkdir; then
     404            (umask=$mkdir_umask &&
     405             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
     406            # Don't fail if two instances are running concurrently.
     407            test -d "$prefix" || exit 1
     408          else
     409            case $prefix in
     410              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
     411              *) qprefix=$prefix;;
     412            esac
     413            prefixes="$prefixes '$qprefix'"
     414          fi
     415        fi
     416        prefix=$prefix/
    433417      done
    434418
    435419      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
     420        # Don't fail if two instances are running concurrently.
     421        (umask $mkdir_umask &&
     422        eval "\$doit_exec \$mkdirprog $prefixes") ||
     423          test -d "$dstdir" || exit 1
     424        obsolete_mkdir_used=true
    441425      fi
    442426    fi
     
    473457    # If -C, don't bother to copy if it wouldn't change the file.
    474458    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 &&
     459       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
     460       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
     461       set -f &&
    480462       set X $old && old=:$2:$4:$5:$6 &&
    481463       set X $new && new=:$2:$4:$5:$6 &&
    482        $posix_glob set +f &&
    483 
     464       set +f &&
    484465       test "$old" = "$new" &&
    485466       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     
    494475      # support -f.
    495476      {
    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"
     477        # Now remove or move aside any old file at destination location.
     478        # We try this two ways since rm can't unlink itself on some
     479        # systems and the destination file might be busy for other
     480        # reasons.  In this case, the final cleanup might fail but the new
     481        # file should still install successfully.
     482        {
     483          test ! -f "$dst" ||
     484          $doit $rmcmd -f "$dst" 2>/dev/null ||
     485          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
     486            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
     487          } ||
     488          { echo "$0: cannot unlink or rename $dst" >&2
     489            (exit 1); exit 1
     490          }
     491        } &&
     492
     493        # Now rename the file to the real destination.
     494        $doit $mvcmd "$dsttmp" "$dst"
    514495      }
    515496    fi || exit 1
Note: See TracChangeset for help on using the changeset viewer.