|
|
1.1 ! root 1: #!/bin/sh ! 2: # ! 3: # install - install a program, script, or datafile ! 4: # This comes from X11R5; it is not part of GNU. ! 5: # ! 6: # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ ! 7: # ! 8: # This script is compatible with the BSD install script, but was written ! 9: # from scratch. ! 10: # ! 11: ! 12: ! 13: # set DOITPROG to echo to test this script ! 14: ! 15: # Don't use :- since 4.3BSD and earlier shells don't like it. ! 16: doit="${DOITPROG-}" ! 17: ! 18: ! 19: # put in absolute paths if you don't have them in your path; or use env. vars. ! 20: ! 21: mvprog="${MVPROG-mv}" ! 22: cpprog="${CPPROG-cp}" ! 23: chmodprog="${CHMODPROG-chmod}" ! 24: chownprog="${CHOWNPROG-chown}" ! 25: chgrpprog="${CHGRPPROG-chgrp}" ! 26: stripprog="${STRIPPROG-strip}" ! 27: rmprog="${RMPROG-rm}" ! 28: mkdirprog="${MKDIRPROG-mkdir}" ! 29: ! 30: tranformbasename="" ! 31: transform_arg="" ! 32: instcmd="$mvprog" ! 33: chmodcmd="$chmodprog 0755" ! 34: chowncmd="" ! 35: chgrpcmd="" ! 36: stripcmd="" ! 37: rmcmd="$rmprog -f" ! 38: mvcmd="$mvprog" ! 39: src="" ! 40: dst="" ! 41: dir_arg="" ! 42: ! 43: while [ x"$1" != x ]; do ! 44: case $1 in ! 45: -c) instcmd="$cpprog" ! 46: shift ! 47: continue;; ! 48: ! 49: -d) dir_arg=true ! 50: shift ! 51: continue;; ! 52: ! 53: -m) chmodcmd="$chmodprog $2" ! 54: shift ! 55: shift ! 56: continue;; ! 57: ! 58: -o) chowncmd="$chownprog $2" ! 59: shift ! 60: shift ! 61: continue;; ! 62: ! 63: -g) chgrpcmd="$chgrpprog $2" ! 64: shift ! 65: shift ! 66: continue;; ! 67: ! 68: -s) stripcmd="$stripprog" ! 69: shift ! 70: continue;; ! 71: ! 72: -t=*) transformarg=`echo $1 | sed 's/-t=//'` ! 73: shift ! 74: continue;; ! 75: ! 76: -b=*) transformbasename=`echo $1 | sed 's/-b=//'` ! 77: shift ! 78: continue;; ! 79: ! 80: *) if [ x"$src" = x ] ! 81: then ! 82: src=$1 ! 83: else ! 84: # this colon is to work around a 386BSD /bin/sh bug ! 85: : ! 86: dst=$1 ! 87: fi ! 88: shift ! 89: continue;; ! 90: esac ! 91: done ! 92: ! 93: if [ x"$src" = x ] ! 94: then ! 95: echo "install: no input file specified" ! 96: exit 1 ! 97: else ! 98: true ! 99: fi ! 100: ! 101: if [ x"$dir_arg" != x ]; then ! 102: dst=$src ! 103: src="" ! 104: ! 105: if [ -d $dst ]; then ! 106: instcmd=: ! 107: else ! 108: instcmd=mkdir ! 109: fi ! 110: else ! 111: ! 112: # Waiting for this to be detected by the "$instcmd $src $dsttmp" command ! 113: # might cause directories to be created, which would be especially bad ! 114: # if $src (and thus $dsttmp) contains '*'. ! 115: ! 116: if [ -f $src -o -d $src ] ! 117: then ! 118: true ! 119: else ! 120: echo "install: $src does not exist" ! 121: exit 1 ! 122: fi ! 123: ! 124: if [ x"$dst" = x ] ! 125: then ! 126: echo "install: no destination specified" ! 127: exit 1 ! 128: else ! 129: true ! 130: fi ! 131: ! 132: # If destination is a directory, append the input filename; if your system ! 133: # does not like double slashes in filenames, you may need to add some logic ! 134: ! 135: if [ -d $dst ] ! 136: then ! 137: dst="$dst"/`basename $src` ! 138: else ! 139: true ! 140: fi ! 141: fi ! 142: ! 143: ## this sed command emulates the dirname command ! 144: dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` ! 145: ! 146: # Make sure that the destination directory exists. ! 147: # this part is taken from Noah Friedman's mkinstalldirs script ! 148: ! 149: defaultIFS=' ! 150: ' ! 151: IFS="${IFS-${defaultIFS}}" ! 152: ! 153: oIFS="${IFS}" ! 154: # Some sh's can't handle IFS=/ for some reason. ! 155: IFS='%' ! 156: set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` ! 157: IFS="${oIFS}" ! 158: ! 159: pathcomp='' ! 160: ! 161: while [ $# -ne 0 ] ; do ! 162: pathcomp="${pathcomp}${1}" ! 163: shift ! 164: ! 165: if [ ! -d "${pathcomp}" ] ; ! 166: then ! 167: $mkdirprog "${pathcomp}" ! 168: else ! 169: true ! 170: fi ! 171: ! 172: pathcomp="${pathcomp}/" ! 173: done ! 174: ! 175: if [ x"$dir_arg" != x ] ! 176: then ! 177: $doit $instcmd $dst && ! 178: ! 179: if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && ! 180: if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && ! 181: if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && ! 182: if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi ! 183: else ! 184: ! 185: # If we're going to rename the final executable, determine the name now. ! 186: ! 187: if [ x"$transformarg" = x ] ! 188: then ! 189: dstfile=`basename $dst` ! 190: else ! 191: dstfile=`basename $dst $transformbasename | ! 192: sed $transformarg`$transformbasename ! 193: fi ! 194: ! 195: # don't allow the sed command to completely eliminate the filename ! 196: ! 197: if [ x"$dstfile" = x ] ! 198: then ! 199: dstfile=`basename $dst` ! 200: else ! 201: true ! 202: fi ! 203: ! 204: # Make a temp file name in the proper directory. ! 205: ! 206: dsttmp=$dstdir/#inst.$$# ! 207: ! 208: # Move or copy the file name to the temp name ! 209: ! 210: $doit $instcmd $src $dsttmp && ! 211: ! 212: trap "rm -f ${dsttmp}" 0 && ! 213: ! 214: # and set any options; do chmod last to preserve setuid bits ! 215: ! 216: # If any of these fail, we abort the whole thing. If we want to ! 217: # ignore errors from any of these, just make sure not to ignore ! 218: # errors from the above "$doit $instcmd $src $dsttmp" command. ! 219: ! 220: if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && ! 221: if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && ! 222: if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && ! 223: if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && ! 224: ! 225: # Now rename the file to the real destination. ! 226: ! 227: $doit $rmcmd -f $dstdir/$dstfile && ! 228: $doit $mvcmd $dsttmp $dstdir/$dstfile ! 229: ! 230: fi && ! 231: ! 232: ! 233: exit 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.