File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / install-sh
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Feb 17 15:09:30 2012 UTC (12 years, 4 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_2_3, v3_1_2p5, rsync3_0_9p0, RSYNC3_1_0, RSYNC3_0_9, HEAD
rsync

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>