Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5479 in orxonox.OLD for trunk/install-sh


Ignore:
Timestamp:
Nov 3, 2005, 8:50:51 PM (18 years ago)
Author:
bensch
Message:

orxonox/trunk: updated to new autoconf, moved resourcemanager to util/loading

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/install-sh

    r1956 r5479  
    11#!/bin/sh
    2 #
    32# install - install a program, script, or datafile
    4 #
     3
     4scriptversion=2005-05-14.22
     5
    56# This originates from X11R5 (mit/util/scripts/install.sh), which was
    67# later released in X11R6 (xc/config/util/install.sh) with the
     
    4243# shared with many OS's install programs.
    4344
    44 
    4545# set DOITPROG to echo to test this script
    4646
    4747# Don't use :- since 4.3BSD and earlier shells don't like it.
    4848doit="${DOITPROG-}"
    49 
    5049
    5150# put in absolute paths if you don't have them in your path; or use env. vars.
     
    6059mkdirprog="${MKDIRPROG-mkdir}"
    6160
    62 transformbasename=""
    63 transform_arg=""
    64 instcmd="$mvprog"
    6561chmodcmd="$chmodprog 0755"
    66 chowncmd=""
    67 chgrpcmd=""
    68 stripcmd=""
     62chowncmd=
     63chgrpcmd=
     64stripcmd=
    6965rmcmd="$rmprog -f"
    7066mvcmd="$mvprog"
    71 src=""
    72 dst=""
    73 dir_arg=""
    74 
    75 while [ x"$1" != x ]; do
    76     case $1 in
    77         -c) instcmd=$cpprog
    78             shift
    79             continue;;
    80 
    81         -d) dir_arg=true
    82             shift
    83             continue;;
    84 
    85         -m) chmodcmd="$chmodprog $2"
    86             shift
    87             shift
    88             continue;;
    89 
    90         -o) chowncmd="$chownprog $2"
    91             shift
    92             shift
    93             continue;;
    94 
    95         -g) chgrpcmd="$chgrpprog $2"
    96             shift
    97             shift
    98             continue;;
    99 
    100         -s) stripcmd=$stripprog
    101             shift
    102             continue;;
    103 
    104         -t=*) transformarg=`echo $1 | sed 's/-t=//'`
    105             shift
    106             continue;;
    107 
    108         -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
    109             shift
    110             continue;;
    111 
    112         *)  if [ x"$src" = x ]
    113             then
    114                 src=$1
    115             else
    116                 # this colon is to work around a 386BSD /bin/sh bug
    117                 :
    118                 dst=$1
    119             fi
    120             shift
    121             continue;;
     67src=
     68dst=
     69dir_arg=
     70dstarg=
     71no_target_directory=
     72
     73usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
     74   or: $0 [OPTION]... SRCFILES... DIRECTORY
     75   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
     76   or: $0 [OPTION]... -d DIRECTORIES...
     77
     78In the 1st form, copy SRCFILE to DSTFILE.
     79In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
     80In the 4th, create DIRECTORIES.
     81
     82Options:
     83-c         (ignored)
     84-d         create directories instead of installing files.
     85-g GROUP   $chgrpprog installed files to GROUP.
     86-m MODE    $chmodprog installed files to MODE.
     87-o USER    $chownprog installed files to USER.
     88-s         $stripprog installed files.
     89-t DIRECTORY  install into DIRECTORY.
     90-T         report an error if DSTFILE is a directory.
     91--help     display this help and exit.
     92--version  display version info and exit.
     93
     94Environment variables override the default commands:
     95  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
     96"
     97
     98while test -n "$1"; do
     99  case $1 in
     100    -c) shift
     101        continue;;
     102
     103    -d) dir_arg=true
     104        shift
     105        continue;;
     106
     107    -g) chgrpcmd="$chgrpprog $2"
     108        shift
     109        shift
     110        continue;;
     111
     112    --help) echo "$usage"; exit $?;;
     113
     114    -m) chmodcmd="$chmodprog $2"
     115        shift
     116        shift
     117        continue;;
     118
     119    -o) chowncmd="$chownprog $2"
     120        shift
     121        shift
     122        continue;;
     123
     124    -s) stripcmd=$stripprog
     125        shift
     126        continue;;
     127
     128    -t) dstarg=$2
     129        shift
     130        shift
     131        continue;;
     132
     133    -T) no_target_directory=true
     134        shift
     135        continue;;
     136
     137    --version) echo "$0 $scriptversion"; exit $?;;
     138
     139    *)  # When -d is used, all remaining arguments are directories to create.
     140        # When -t is used, the destination is already specified.
     141        test -n "$dir_arg$dstarg" && break
     142        # Otherwise, the last argument is the destination.  Remove it from $@.
     143        for arg
     144        do
     145          if test -n "$dstarg"; then
     146            # $@ is not empty: it contains at least $arg.
     147            set fnord "$@" "$dstarg"
     148            shift # fnord
     149          fi
     150          shift # arg
     151          dstarg=$arg
     152        done
     153        break;;
     154  esac
     155done
     156
     157if test -z "$1"; then
     158  if test -z "$dir_arg"; then
     159    echo "$0: no input file specified." >&2
     160    exit 1
     161  fi
     162  # It's OK to call `install-sh -d' without argument.
     163  # This can happen when creating conditional directories.
     164  exit 0
     165fi
     166
     167for src
     168do
     169  # Protect names starting with `-'.
     170  case $src in
     171    -*) src=./$src ;;
     172  esac
     173
     174  if test -n "$dir_arg"; then
     175    dst=$src
     176    src=
     177
     178    if test -d "$dst"; then
     179      mkdircmd=:
     180      chmodcmd=
     181    else
     182      mkdircmd=$mkdirprog
     183    fi
     184  else
     185    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
     186    # might cause directories to be created, which would be especially bad
     187    # if $src (and thus $dsttmp) contains '*'.
     188    if test ! -f "$src" && test ! -d "$src"; then
     189      echo "$0: $src does not exist." >&2
     190      exit 1
     191    fi
     192
     193    if test -z "$dstarg"; then
     194      echo "$0: no destination specified." >&2
     195      exit 1
     196    fi
     197
     198    dst=$dstarg
     199    # Protect names starting with `-'.
     200    case $dst in
     201      -*) dst=./$dst ;;
    122202    esac
     203
     204    # If destination is a directory, append the input filename; won't work
     205    # if double slashes aren't ignored.
     206    if test -d "$dst"; then
     207      if test -n "$no_target_directory"; then
     208        echo "$0: $dstarg: Is a directory" >&2
     209        exit 1
     210      fi
     211      dst=$dst/`basename "$src"`
     212    fi
     213  fi
     214
     215  # This sed command emulates the dirname command.
     216  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
     217
     218  # Make sure that the destination directory exists.
     219
     220  # Skip lots of stat calls in the usual case.
     221  if test ! -d "$dstdir"; then
     222    defaultIFS='
     223         '
     224    IFS="${IFS-$defaultIFS}"
     225
     226    oIFS=$IFS
     227    # Some sh's can't handle IFS=/ for some reason.
     228    IFS='%'
     229    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
     230    shift
     231    IFS=$oIFS
     232
     233    pathcomp=
     234
     235    while test $# -ne 0 ; do
     236      pathcomp=$pathcomp$1
     237      shift
     238      if test ! -d "$pathcomp"; then
     239        $mkdirprog "$pathcomp"
     240        # mkdir can fail with a `File exist' error in case several
     241        # install-sh are creating the directory concurrently.  This
     242        # is OK.
     243        test -d "$pathcomp" || exit
     244      fi
     245      pathcomp=$pathcomp/
     246    done
     247  fi
     248
     249  if test -n "$dir_arg"; then
     250    $doit $mkdircmd "$dst" \
     251      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
     252      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
     253      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
     254      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
     255
     256  else
     257    dstfile=`basename "$dst"`
     258
     259    # Make a couple of temp file names in the proper directory.
     260    dsttmp=$dstdir/_inst.$$_
     261    rmtmp=$dstdir/_rm.$$_
     262
     263    # Trap to clean up those temp files at exit.
     264    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
     265    trap '(exit $?); exit' 1 2 13 15
     266
     267    # Copy the file name to the temp name.
     268    $doit $cpprog "$src" "$dsttmp" &&
     269
     270    # and set any options; do chmod last to preserve setuid bits.
     271    #
     272    # If any of these fail, we abort the whole thing.  If we want to
     273    # ignore errors from any of these, just make sure not to ignore
     274    # errors from the above "$doit $cpprog $src $dsttmp" command.
     275    #
     276    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
     277      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
     278      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
     279      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
     280
     281    # Now rename the file to the real destination.
     282    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
     283      || {
     284           # The rename failed, perhaps because mv can't rename something else
     285           # to itself, or perhaps because mv is so ancient that it does not
     286           # support -f.
     287
     288           # Now remove or move aside any old file at destination location.
     289           # We try this two ways since rm can't unlink itself on some
     290           # systems and the destination file might be busy for other
     291           # reasons.  In this case, the final cleanup might fail but the new
     292           # file should still install successfully.
     293           {
     294             if test -f "$dstdir/$dstfile"; then
     295               $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
     296               || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
     297               || {
     298                 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
     299                 (exit 1); exit 1
     300               }
     301             else
     302               :
     303             fi
     304           } &&
     305
     306           # Now rename the file to the real destination.
     307           $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
     308         }
     309    }
     310  fi || { (exit 1); exit 1; }
    123311done
    124312
    125 if [ x"$src" = x ]
    126 then
    127         echo "$0: no input file specified" >&2
    128         exit 1
    129 else
    130         :
    131 fi
    132 
    133 if [ x"$dir_arg" != x ]; then
    134         dst=$src
    135         src=""
    136 
    137         if [ -d "$dst" ]; then
    138                 instcmd=:
    139                 chmodcmd=""
    140         else
    141                 instcmd=$mkdirprog
    142         fi
    143 else
    144 
    145 # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
    146 # might cause directories to be created, which would be especially bad
    147 # if $src (and thus $dsttmp) contains '*'.
    148 
    149         if [ -f "$src" ] || [ -d "$src" ]
    150         then
    151                 :
    152         else
    153                 echo "$0: $src does not exist" >&2
    154                 exit 1
    155         fi
    156 
    157         if [ x"$dst" = x ]
    158         then
    159                 echo "$0: no destination specified" >&2
    160                 exit 1
    161         else
    162                 :
    163         fi
    164 
    165 # If destination is a directory, append the input filename; if your system
    166 # does not like double slashes in filenames, you may need to add some logic
    167 
    168         if [ -d "$dst" ]
    169         then
    170                 dst=$dst/`basename "$src"`
    171         else
    172                 :
    173         fi
    174 fi
    175 
    176 ## this sed command emulates the dirname command
    177 dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
    178 
    179 # Make sure that the destination directory exists.
    180 #  this part is taken from Noah Friedman's mkinstalldirs script
    181 
    182 # Skip lots of stat calls in the usual case.
    183 if [ ! -d "$dstdir" ]; then
    184 defaultIFS='
    185         '
    186 IFS="${IFS-$defaultIFS}"
    187 
    188 oIFS=$IFS
    189 # Some sh's can't handle IFS=/ for some reason.
    190 IFS='%'
    191 set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
    192 IFS=$oIFS
    193 
    194 pathcomp=''
    195 
    196 while [ $# -ne 0 ] ; do
    197         pathcomp=$pathcomp$1
    198         shift
    199 
    200         if [ ! -d "$pathcomp" ] ;
    201         then
    202                 $mkdirprog "$pathcomp"
    203         else
    204                 :
    205         fi
    206 
    207         pathcomp=$pathcomp/
    208 done
    209 fi
    210 
    211 if [ x"$dir_arg" != x ]
    212 then
    213         $doit $instcmd "$dst" &&
    214 
    215         if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
    216         if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
    217         if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
    218         if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
    219 else
    220 
    221 # If we're going to rename the final executable, determine the name now.
    222 
    223         if [ x"$transformarg" = x ]
    224         then
    225                 dstfile=`basename "$dst"`
    226         else
    227                 dstfile=`basename "$dst" $transformbasename |
    228                         sed $transformarg`$transformbasename
    229         fi
    230 
    231 # don't allow the sed command to completely eliminate the filename
    232 
    233         if [ x"$dstfile" = x ]
    234         then
    235                 dstfile=`basename "$dst"`
    236         else
    237                 :
    238         fi
    239 
    240 # Make a couple of temp file names in the proper directory.
    241 
    242         dsttmp=$dstdir/_inst.$$_
    243         rmtmp=$dstdir/_rm.$$_
    244 
    245 # Trap to clean up temp files at exit.
    246 
    247         trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
    248         trap '(exit $?); exit' 1 2 13 15
    249 
    250 # Move or copy the file name to the temp name
    251 
    252         $doit $instcmd "$src" "$dsttmp" &&
    253 
    254 # and set any options; do chmod last to preserve setuid bits
    255 
    256 # If any of these fail, we abort the whole thing.  If we want to
    257 # ignore errors from any of these, just make sure not to ignore
    258 # errors from the above "$doit $instcmd $src $dsttmp" command.
    259 
    260         if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
    261         if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
    262         if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
    263         if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
    264 
    265 # Now remove or move aside any old file at destination location.  We try this
    266 # two ways since rm can't unlink itself on some systems and the destination
    267 # file might be busy for other reasons.  In this case, the final cleanup
    268 # might fail but the new file should still install successfully.
    269 
     313# The final little trick to "correctly" pass the exit status to the exit trap.
    270314{
    271         if [ -f "$dstdir/$dstfile" ]
    272         then
    273                 $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
    274                 $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
    275                 {
    276                   echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
    277                   (exit 1); exit
    278                 }
    279         else
    280                 :
    281         fi
    282 } &&
    283 
    284 # Now rename the file to the real destination.
    285 
    286         $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
    287 
    288 fi &&
    289 
    290 # The final little trick to "correctly" pass the exit status to the exit trap.
    291 
    292 {
    293         (exit 0); exit
     315  (exit 0); exit 0
    294316}
     317
     318# Local variables:
     319# eval: (add-hook 'write-file-hooks 'time-stamp)
     320# time-stamp-start: "scriptversion="
     321# time-stamp-format: "%:y-%02m-%02d.%02H"
     322# time-stamp-end: "$"
     323# End:
Note: See TracChangeset for help on using the changeset viewer.