(file) Return to install-sh CVS log (file) (dir) Up to [RizwankCVS] / testProject

  1 rizwank 1.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 rizwank 1.1 
 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 rizwank 1.1 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 rizwank 1.1 
 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 rizwank 1.1 	    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 rizwank 1.1 	
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 rizwank 1.1 	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 rizwank 1.1 # 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 rizwank 1.1 	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 rizwank 1.1 # 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 rizwank 1.1 	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 rizwank 1.1 	$doit $rmcmd -f $dstdir/$dstfile &&
233             	$doit $mvcmd $dsttmp $dstdir/$dstfile 
234             
235             fi &&
236             
237             
238             exit 0

Rizwan Kassim
Powered by
ViewCVS 0.9.2