![]() ![]() | ![]() |
add autoconfig files and autoconfig support
1: #!/bin/sh 2: # 3: # install - install a program, script, or datafile 4: # This comes from X11R5 (mit/util/scripts/install.sh). 5: # 6: # Copyright 1991 by the Massachusetts Institute of Technology 7: # 8: # Permission to use, copy, modify, distribute, and sell this software and its 9: # documentation for any purpose is hereby granted without fee, provided that 10: # the above copyright notice appear in all copies and that both that 11: # copyright notice and this permission notice appear in supporting 12: # documentation, and that the name of M.I.T. not be used in advertising or 13: # publicity pertaining to distribution of the software without specific, 14: # written prior permission. M.I.T. makes no representations about the 15: # suitability of this software for any purpose. It is provided "as is" 16: # without express or implied warranty. 17: # 18: # Calling this script install-sh is preferred over install.sh, to prevent 19: # `make' implicit rules from creating a file called install from it 20: # when there is no Makefile. 21: # 22: # This script is compatible with the BSD install script, but was written 23: # from scratch. It can only install one file at a time, a restriction 24: # shared with many OS's install programs. 25: 26: 27: # set DOITPROG to echo to test this script 28: 29: # Don't use :- since 4.3BSD and earlier shells don't like it. 30: doit="${DOITPROG-}" 31: 32: 33: # put in absolute paths if you don't have them in your path; or use env. vars. 34: 35: mvprog="${MVPROG-mv}" 36: cpprog="${CPPROG-cp}" 37: chmodprog="${CHMODPROG-chmod}" 38: chownprog="${CHOWNPROG-chown}" 39: chgrpprog="${CHGRPPROG-chgrp}" 40: stripprog="${STRIPPROG-strip}" 41: rmprog="${RMPROG-rm}" 42: mkdirprog="${MKDIRPROG-mkdir}" 43: 44: transformbasename="" 45: transform_arg="" 46: instcmd="$mvprog" 47: chmodcmd="$chmodprog 0755" 48: chowncmd="" 49: chgrpcmd="" 50: stripcmd="" 51: rmcmd="$rmprog -f" 52: mvcmd="$mvprog" 53: src="" 54: dst="" 55: dir_arg="" 56: 57: while [ x"$1" != x ]; do 58: case $1 in 59: -c) instcmd="$cpprog" 60: shift 61: continue;; 62: 63: -d) dir_arg=true 64: shift 65: continue;; 66: 67: -m) chmodcmd="$chmodprog $2" 68: shift 69: shift 70: continue;; 71: 72: -o) chowncmd="$chownprog $2" 73: shift 74: shift 75: continue;; 76: 77: -g) chgrpcmd="$chgrpprog $2" 78: shift 79: shift 80: continue;; 81: 82: -s) stripcmd="$stripprog" 83: shift 84: continue;; 85: 86: -t=*) transformarg=`echo $1 | sed 's/-t=//'` 87: shift 88: continue;; 89: 90: -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 91: shift 92: continue;; 93: 94: *) if [ x"$src" = x ] 95: then 96: src=$1 97: else 98: # this colon is to work around a 386BSD /bin/sh bug 99: : 100: dst=$1 101: fi 102: shift 103: continue;; 104: esac 105: done 106: 107: if [ x"$src" = x ] 108: then 109: echo "install: no input file specified" 110: exit 1 111: else 112: true 113: fi 114: 115: if [ x"$dir_arg" != x ]; then 116: dst=$src 117: src="" 118: 119: if [ -d $dst ]; then 120: instcmd=: 121: chmodcmd="" 122: else 123: instcmd=mkdir 124: fi 125: else 126: 127: # Waiting for this to be detected by the "$instcmd $src $dsttmp" command 128: # might cause directories to be created, which would be especially bad 129: # if $src (and thus $dsttmp) contains '*'. 130: 131: if [ -f $src -o -d $src ] 132: then 133: true 134: else 135: echo "install: $src does not exist" 136: exit 1 137: fi 138: 139: if [ x"$dst" = x ] 140: then 141: echo "install: no destination specified" 142: exit 1 143: else 144: true 145: fi 146: 147: # If destination is a directory, append the input filename; if your system 148: # does not like double slashes in filenames, you may need to add some logic 149: 150: if [ -d $dst ] 151: then 152: dst="$dst"/`basename $src` 153: else 154: true 155: fi 156: fi 157: 158: ## this sed command emulates the dirname command 159: dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 160: 161: # Make sure that the destination directory exists. 162: # this part is taken from Noah Friedman's mkinstalldirs script 163: 164: # Skip lots of stat calls in the usual case. 165: if [ ! -d "$dstdir" ]; then 166: defaultIFS=' 167: ' 168: IFS="${IFS-${defaultIFS}}" 169: 170: oIFS="${IFS}" 171: # Some sh's can't handle IFS=/ for some reason. 172: IFS='%' 173: set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 174: IFS="${oIFS}" 175: 176: pathcomp='' 177: 178: while [ $# -ne 0 ] ; do 179: pathcomp="${pathcomp}${1}" 180: shift 181: 182: if [ ! -d "${pathcomp}" ] ; 183: then 184: $mkdirprog "${pathcomp}" 185: else 186: true 187: fi 188: 189: pathcomp="${pathcomp}/" 190: done 191: fi 192: 193: if [ x"$dir_arg" != x ] 194: then 195: $doit $instcmd $dst && 196: 197: if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 198: if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 199: if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 200: if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 201: else 202: 203: # If we're going to rename the final executable, determine the name now. 204: 205: if [ x"$transformarg" = x ] 206: then 207: dstfile=`basename $dst` 208: else 209: dstfile=`basename $dst $transformbasename | 210: sed $transformarg`$transformbasename 211: fi 212: 213: # don't allow the sed command to completely eliminate the filename 214: 215: if [ x"$dstfile" = x ] 216: then 217: dstfile=`basename $dst` 218: else 219: true 220: fi 221: 222: # Make a temp file name in the proper directory. 223: 224: dsttmp=$dstdir/#inst.$$# 225: 226: # Move or copy the file name to the temp name 227: 228: $doit $instcmd $src $dsttmp && 229: 230: trap "rm -f ${dsttmp}" 0 && 231: 232: # and set any options; do chmod last to preserve setuid bits 233: 234: # If any of these fail, we abort the whole thing. If we want to 235: # ignore errors from any of these, just make sure not to ignore 236: # errors from the above "$doit $instcmd $src $dsttmp" command. 237: 238: if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 239: if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 240: if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 241: if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 242: 243: # Now rename the file to the real destination. 244: 245: $doit $rmcmd -f $dstdir/$dstfile && 246: $doit $mvcmd $dsttmp $dstdir/$dstfile 247: 248: fi && 249: 250: 251: exit 0