Annotation of embedaddon/sudo/install-sh, revision 1.1
1.1 ! misho 1: #! /bin/sh
! 2:
! 3: ## (From INN-1.4, written by Rich Salz)
! 4: ## $Revision$
! 5: ## A script to install files and directories.
! 6:
! 7: PROGNAME=`basename $0`
! 8:
! 9: ## Paths to programs. CHOWN, STRIP and WHOAMI are checked below.
! 10: CHOWN=chown
! 11: CHGRP=chgrp
! 12: CHMOD=chmod
! 13: CP=cp
! 14: LN=ln
! 15: MKDIR=mkdir
! 16: MV=mv
! 17: RM=rm
! 18: STRIP=strip
! 19: WHOAMI="echo root"
! 20:
! 21: ## Some systems don't support -x, so we have to use -f.
! 22: for d in /sbin /etc /usr/sbin /usr/etc; do
! 23: if [ -f $d/chown ]; then
! 24: CHOWN=${d}/chown
! 25: break
! 26: fi
! 27: done
! 28:
! 29: for d in /usr/bin /bin /usr/ucb /usr/bsd; do
! 30: if [ -f $d/whoami ]; then
! 31: WHOAMI=${d}/whoami
! 32: break
! 33: elif [ -f $d/id ]; then
! 34: WHOAMI=${d}/id | sed -n 's/^[^(]*(\([^)]*\)).*/\1/p'
! 35: fi
! 36: done
! 37:
! 38: for d in /usr/ccs/bin /usr/bin /bin; do
! 39: if [ -f $d/strip ]; then
! 40: STRIP=${d}/strip
! 41: break
! 42: fi
! 43: done
! 44:
! 45: ## Defaults.
! 46: CHOWNIT=false
! 47: CHGROUPIT=false
! 48: CHMODIT=false
! 49: STRIPIT=false
! 50: BACKIT=false
! 51: TOUCHIT=true
! 52: DIRMODE=false
! 53:
! 54: case `${WHOAMI}` in
! 55: root)
! 56: ROOT=true
! 57: ;;
! 58: *)
! 59: ROOT=false
! 60: ;;
! 61: esac
! 62:
! 63: ## Process JCL.
! 64: MORETODO=true
! 65: while ${MORETODO} ; do
! 66: case X"$1" in
! 67: X-b)
! 68: BACKIT=true
! 69: BACKUP="$2"
! 70: shift
! 71: ;;
! 72: X-b*)
! 73: BACKIT=true
! 74: BACKUP="`echo \"$1\" | sed 's/^..//'`"
! 75: ;;
! 76: X-c)
! 77: # backwards compatibility
! 78: ;;
! 79: X-d)
! 80: DIRMODE=true
! 81: ;;
! 82: X-g)
! 83: GROUP="$2"
! 84: CHGROUPIT=true
! 85: shift
! 86: ;;
! 87: X-g*)
! 88: GROUP="`echo \"$1\" | sed 's/^..//'`"
! 89: CHGROUPIT=true
! 90: ;;
! 91: X-G)
! 92: GROUP="$2"
! 93: shift
! 94: ${ROOT} && CHGROUPIT=true
! 95: ;;
! 96: X-G*)
! 97: if ${ROOT} ; then
! 98: GROUP="`echo \"$1\" | sed 's/^..//'`"
! 99: CHGROUPIT=true
! 100: fi
! 101: ;;
! 102: X-m)
! 103: MODE="$2"
! 104: CHMODIT=true
! 105: shift
! 106: ;;
! 107: X-m*)
! 108: MODE="`echo \"$1\" | sed 's/^..//'`"
! 109: CHMODIT=true
! 110: ;;
! 111: X-M)
! 112: MODE="$2"
! 113: ${ROOT} && CHMODIT=true
! 114: shift
! 115: ;;
! 116: X-M*)
! 117: MODE="`echo \"$1\" | sed 's/^..//'`"
! 118: ${ROOT} && CHMODIT=true
! 119: ;;
! 120: X-n)
! 121: TOUCHIT=false
! 122: ;;
! 123: X-o)
! 124: OWNER="$2"
! 125: CHOWNIT=true
! 126: shift
! 127: ;;
! 128: X-o*)
! 129: OWNER="`echo \"$1\" | sed 's/^..//'`"
! 130: CHOWNIT=true
! 131: ;;
! 132: X-O)
! 133: OWNER="$2"
! 134: shift
! 135: ${ROOT} && CHOWNIT=true
! 136: ;;
! 137: X-O*)
! 138: if ${ROOT} ; then
! 139: OWNER="`echo \"$1\" | sed 's/^..//'`"
! 140: CHOWNIT=true
! 141: fi
! 142: ;;
! 143: X-s)
! 144: STRIPIT=true
! 145: ;;
! 146: X--)
! 147: shift
! 148: MORETODO=false
! 149: ;;
! 150: X-*)
! 151: echo "${PROGNAME}: Unknown flag $1" 1>&2
! 152: exit 1
! 153: ;;
! 154: *)
! 155: MORETODO=false
! 156: ;;
! 157: esac
! 158: ${MORETODO} && shift
! 159: done
! 160:
! 161: ## Making a directory?
! 162: if ${DIRMODE} ; then
! 163: while test $# != 0; do
! 164: DEST="$1"
! 165: if [ ! -d "${DEST}" ] ; then
! 166: ${MKDIR} "${DEST}" || exit 1
! 167: fi
! 168: if ${CHOWNIT} ; then
! 169: ${CHOWN} "${OWNER}" "${DEST}" || exit 1
! 170: fi
! 171: if ${CHGROUPIT} ; then
! 172: ${CHGRP} "${GROUP}" "${DEST}" || exit 1
! 173: fi
! 174: if ${CHMODIT} ; then
! 175: ${CHMOD} "${MODE}" "${DEST}" || exit 1
! 176: fi
! 177: shift;
! 178: done
! 179: exit 0
! 180: fi
! 181:
! 182: ## Process arguments.
! 183: if [ $# -ne 2 ] ; then
! 184: echo "Usage: ${PROGNAME} [flags] source destination"
! 185: exit 1
! 186: fi
! 187:
! 188: ## Get the destination and a temp file in the destination diretory.
! 189: if [ -d "$2" ] ; then
! 190: DEST="$2/`basename $1`"
! 191: TEMP="$2/$$.tmp"
! 192: else
! 193: DEST="$2"
! 194: TEMP="`expr "$2" : '\(.*\)/.*'`/$$.tmp"
! 195: fi
! 196:
! 197: ## If not given the same name, we must try to copy.
! 198: if [ X"$1" != X"$2" ] ; then
! 199: if cmp -s "$1" "${DEST}" ; then
! 200: ## Files are same; touch or not.
! 201: ${TOUCHIT} && touch "${DEST}"
! 202: else
! 203: ## If destination exists and we wish to backup, link to backup.
! 204: if [ -f "${DEST}" ] ; then
! 205: if ${BACKIT} ; then
! 206: ${RM} -f "${DEST}${BACKUP}"
! 207: ${LN} "${DEST}" "${DEST}${BACKUP}"
! 208: fi
! 209: fi
! 210: ## Copy source to the right dir, then move to right spot.
! 211: ## Done in two parts so we can hope for atomicity.
! 212: ## We need to rm DEST due to bugs in "mv -f" on some systems.
! 213: ${RM} -f "${TEMP}" || exit 1
! 214: ${CP} "$1" "${TEMP}" || exit 1
! 215: ${RM} -f "${DEST}" || exit 1
! 216: ${MV} -f "${TEMP}" "${DEST}" || exit 1
! 217: fi
! 218: fi
! 219:
! 220: ## Strip and set the modes.
! 221: if ${STRIPIT} ; then
! 222: ${STRIP} "${DEST}" || exit 1
! 223: fi
! 224: if ${CHOWNIT} ; then
! 225: ${CHOWN} "${OWNER}" "${DEST}" || exit 1
! 226: fi
! 227: if ${CHGROUPIT} ; then
! 228: ${CHGRP} "${GROUP}" "${DEST}" || exit 1
! 229: fi
! 230: if ${CHMODIT} ; then
! 231: ${CHMOD} "${MODE}" "${DEST}" || exit 1
! 232: fi
! 233: exit 0
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>