|
|
1.1 root 1: #!/bin/sh
2: #
3: # install - install a program, script, or datafile
4: # This comes from X11R5; it is not part of GNU.
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: defaultIFS='
150: '
151: IFS="${IFS-${defaultIFS}}"
152:
153: oIFS="${IFS}"
154: # Some sh's can't handle IFS=/ for some reason.
155: IFS='%'
156: set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
157: IFS="${oIFS}"
158:
159: pathcomp=''
160:
161: while [ $# -ne 0 ] ; do
162: pathcomp="${pathcomp}${1}"
163: shift
164:
165: if [ ! -d "${pathcomp}" ] ;
166: then
167: $mkdirprog "${pathcomp}"
168: else
169: true
170: fi
171:
172: pathcomp="${pathcomp}/"
173: done
174:
175: if [ x"$dir_arg" != x ]
176: then
177: $doit $instcmd $dst &&
178:
179: if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
180: if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
181: if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
182: if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
183: else
184:
185: # If we're going to rename the final executable, determine the name now.
186:
187: if [ x"$transformarg" = x ]
188: then
189: dstfile=`basename $dst`
190: else
191: dstfile=`basename $dst $transformbasename |
192: sed $transformarg`$transformbasename
193: fi
194:
195: # don't allow the sed command to completely eliminate the filename
196:
197: if [ x"$dstfile" = x ]
198: then
199: dstfile=`basename $dst`
200: else
201: true
202: fi
203:
204: # Make a temp file name in the proper directory.
205:
206: dsttmp=$dstdir/#inst.$$#
207:
208: # Move or copy the file name to the temp name
209:
210: $doit $instcmd $src $dsttmp &&
211:
212: trap "rm -f ${dsttmp}" 0 &&
213:
214: # and set any options; do chmod last to preserve setuid bits
215:
216: # If any of these fail, we abort the whole thing. If we want to
217: # ignore errors from any of these, just make sure not to ignore
218: # errors from the above "$doit $instcmd $src $dsttmp" command.
219:
220: if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
221: if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
222: if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
223: if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
224:
225: # Now rename the file to the real destination.
226:
227: $doit $rmcmd -f $dstdir/$dstfile &&
228: $doit $mvcmd $dsttmp $dstdir/$dstfile
229:
230: fi &&
231:
232:
233: exit 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.