File:  [gforth] / gforth / install-sh
Revision 1.1: download - view: text, annotated - select for diffs
Mon Dec 12 17:10:40 1994 UTC (26 years, 6 months ago) by anton
Branches: MAIN
CVS tags: v0-5-0, v0-4-0, v0-3-0, v0-2-1, v0-2-0, gforth-0_1beta, HEAD
Reorganized configuration: configure is now created by autoconf from
configure.in; I still left it in the CVS repository because not
everyone has autoconf. decstation.h renamed to mips.h and apollo68k to
m68k. Added general 32bit.h description, which the other machine
descriptions use. Created/copied replacement files install-sh memcmp.c
memmove.c select.c (carved out from ecvt.c) strtol.c
strtoul.c. Bytesex is now handled by configure.

Deciding the threading method is now done in machine.h, this should
also be done for USE_TOS and USE_FTOS.

    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: tranformbasename=""
   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>