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