]>
Commit | Line | Data |
---|---|---|
f6a20170 | 1 | #! /bin/bash |
fc49813f | 2 | # |
0d3e0b37 | 3 | # Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. |
fc49813f NS |
4 | # |
5 | # This script emulates bsd install and also recognises | |
6 | # two environment variables, with the following semantics :- | |
7 | # | |
8 | # $DIST_MANIFEST - if set, the name of the file to append manifest | |
9 | # information in the following format: | |
10 | # File : f mode owner group src target | |
11 | # Directory: d mode owner group target | |
12 | # Symlink : l linkval target | |
13 | # | |
14 | # $DIST_ROOT - if set, prepend to target | |
15 | # | |
16 | # The sematics of all combinations of these two variables | |
17 | # are as follows: | |
18 | # | |
19 | # $DIST_MANIFEST? $DIST_ROOT? | Copy? Append Manifest? | |
20 | # -----------------------------+-------------------------- | |
21 | # not set not set | yes no | |
22 | # not set set | yes no | |
23 | # set not set | no yes | |
24 | # set set | yes yes | |
da23017d | 25 | # |
fc49813f NS |
26 | _usage() { |
27 | echo "Usage: $prog [-o owner] [-g group] [-m mode] -d directory" | |
28 | echo "or $prog [-D] [-o owner] [-g group] [-m mode] file directory/file" | |
29 | echo "or $prog [-o owner] [-g group] [-m mode] file [file ...] directory" | |
30 | echo "or $prog -S file target (creates \"target\" symlink)" | |
c3a5f8f8 | 31 | echo "or $prog -T lt_arg [-o owner] [-g group] [-m mode] libtool.lai directory" |
fc49813f NS |
32 | echo "" |
33 | echo "The \$DIST_MANIFEST and \$DIST_ROOT environment variables affect the" | |
34 | echo "behaviour of this command - see comments in the script." | |
35 | echo "The -D flag is only available for the second usage, and causes" | |
36 | echo "the target directory to be created before installing the file." | |
37 | echo "" | |
38 | exit 1 | |
39 | } | |
40 | ||
41 | _chown () | |
42 | { | |
43 | _st=255 | |
44 | if [ $# -eq 3 ] ; then | |
45 | chown $1:$2 $3 | |
46 | _st=$? | |
47 | if [ $_st -ne 0 ] ; then | |
48 | if [ $REAL_UID != '0' ] ; then | |
c3a5f8f8 | 49 | if [ ! -f $DIST_ROOT/.chown.quiet ] ; then |
fc49813f NS |
50 | echo '===============================================' |
51 | echo Ownership of files under ${DIST_ROOT:-/} | |
52 | echo cannot be changed | |
53 | echo '===============================================' | |
54 | if [ -n "$DIST_ROOT" ] ; then | |
c3a5f8f8 | 55 | touch $DIST_ROOT/.chown.quiet |
fc49813f NS |
56 | fi |
57 | fi | |
58 | _st=0 | |
f8149110 | 59 | fi |
fc49813f NS |
60 | fi |
61 | fi | |
62 | ||
63 | return $_st | |
64 | } | |
65 | ||
66 | ||
67 | _manifest () | |
f8149110 | 68 | { |
fc49813f NS |
69 | echo $* | sed -e 's/\/\//\//g' >>${DIST_MANIFEST:-/dev/null} |
70 | } | |
71 | ||
72 | prog=`basename $0` | |
73 | HERE=`pwd` | |
74 | dflag=false | |
75 | Dflag=false | |
76 | Sflag=false | |
c3a5f8f8 | 77 | Tflag=false |
fc49813f NS |
78 | DIRMODE=755 |
79 | FILEMODE=644 | |
80 | OWNER=`id -u` | |
81 | GROUP=`id -g` | |
82 | REAL_UID=$OWNER | |
83 | ||
84 | # default is to install and don't append manifest | |
85 | INSTALL=true | |
86 | MANIFEST=: | |
87 | ||
6e6aa9c2 MF |
88 | : ${DIST_ROOT:=${DESTDIR}} |
89 | ||
fc49813f NS |
90 | [ -n "$DIST_MANIFEST" -a -z "$DIST_ROOT" ] && INSTALL=false |
91 | [ -n "$DIST_MANIFEST" ] && MANIFEST="_manifest" | |
92 | ||
93 | [ $# -eq 0 ] && _usage | |
94 | ||
95 | if $INSTALL | |
96 | then | |
97 | CP=cp; LN=ln; MKDIR=mkdir; CHMOD=chmod; CHOWN=_chown | |
98 | else | |
99 | CP=true; LN=true; MKDIR=true; CHMOD=true; CHOWN=true | |
100 | fi | |
101 | ||
102 | [ -n "$DIST_ROOT" -a $REAL_UID -ne 0 ] && CHOWN=true | |
103 | ||
c3a5f8f8 | 104 | while getopts "Dcm:d:S:o:g:T:" c $* |
fc49813f NS |
105 | do |
106 | case $c in | |
107 | c) | |
108 | ;; | |
109 | g) | |
110 | GROUP=$OPTARG | |
111 | ;; | |
112 | o) | |
113 | OWNER=$OPTARG | |
114 | ;; | |
115 | m) | |
116 | DIRMODE=`expr $OPTARG` | |
117 | FILEMODE=$DIRMODE | |
118 | ;; | |
f8149110 | 119 | D) |
fc49813f NS |
120 | Dflag=true |
121 | ;; | |
f8149110 | 122 | S) |
fc49813f NS |
123 | symlink=$OPTARG |
124 | Sflag=true | |
125 | ;; | |
f8149110 | 126 | d) |
fc49813f NS |
127 | dir=$DIST_ROOT/$OPTARG |
128 | dflag=true | |
129 | ;; | |
c3a5f8f8 NS |
130 | T) |
131 | lt_install=$OPTARG | |
132 | Tflag=true | |
133 | ;; | |
fc49813f NS |
134 | *) |
135 | _usage | |
136 | ;; | |
137 | esac | |
138 | done | |
139 | ||
140 | shift `expr $OPTIND - 1` | |
141 | ||
142 | status=0 | |
143 | if $dflag | |
144 | then | |
145 | # | |
146 | # first usage | |
147 | # | |
f8149110 | 148 | $MKDIR -p $dir |
fc49813f NS |
149 | status=$? |
150 | if [ $status -eq 0 ] | |
151 | then | |
152 | $CHMOD $DIRMODE $dir | |
153 | status=$? | |
154 | fi | |
155 | if [ $status -eq 0 ] | |
156 | then | |
157 | $CHOWN $OWNER $GROUP $dir | |
158 | status=$? | |
159 | fi | |
160 | $MANIFEST d $DIRMODE $OWNER $GROUP ${dir#$DIST_ROOT} | |
161 | elif $Sflag | |
162 | then | |
163 | # | |
164 | # fourth usage (symlink) | |
165 | # | |
166 | if [ $# -ne 1 ] | |
167 | then | |
c3a5f8f8 | 168 | _usage |
fc49813f | 169 | else |
c3a5f8f8 | 170 | target=$DIST_ROOT/$1 |
fc49813f NS |
171 | fi |
172 | $LN -s -f $symlink $target | |
173 | status=$? | |
f8149110 | 174 | $MANIFEST l $symlink ${target#$DIST_ROOT} |
c3a5f8f8 NS |
175 | elif $Tflag |
176 | then | |
177 | # | |
178 | # -T (install libs built by libtool) | |
179 | # | |
180 | if [ $# -ne 2 ] | |
181 | then | |
182 | _usage | |
183 | else | |
184 | libtool_lai=$1 | |
185 | # source the libtool variables | |
186 | if [ ! -f $libtool_lai ] | |
187 | then | |
188 | echo "$prog: Unable to find libtool library file $libtool_lai" | |
189 | exit 2 | |
190 | fi | |
76d78074 | 191 | . ./$libtool_lai |
c3a5f8f8 NS |
192 | target=$DIST_ROOT/$2 |
193 | fi | |
194 | case $lt_install in | |
195 | so_dot_version) | |
196 | # Loop until we find libfoo.so.x.y.z, then break out. | |
197 | for solib in $library_names | |
198 | do | |
199 | # does it have enough parts? libfoo.so.x.y.z == 5 | |
200 | cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` | |
201 | if [ $cnt -eq 5 ] | |
202 | then | |
203 | install_name=$target/$solib | |
204 | $CP $solib $install_name | |
205 | status=$? | |
206 | $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$solib ${install_name#$DIST_ROOT} | |
207 | break | |
208 | fi | |
209 | done | |
210 | ;; | |
211 | ||
212 | so_*) | |
213 | case $lt_install in | |
214 | so_dot_current) | |
215 | # ln -s libfoo.so.x.y.z to libfoo.so.x | |
216 | from_parts=5 # libfoo.so.x.y.z | |
217 | to_parts=3 # libfoo.so.x | |
218 | ;; | |
219 | so_base) | |
220 | # ln -s libfoo.so.x to libfoo.so | |
221 | from_parts=3 # libfoo.so.x | |
222 | to_parts=2 # libfoo.so | |
223 | ;; | |
224 | *) | |
225 | echo "$prog: -T $lt_install invalid" | |
226 | exit 2 | |
227 | ;; | |
228 | esac | |
229 | ||
230 | # Loop until we find the names, then break out. | |
231 | for solib in $library_names | |
232 | do | |
233 | # does it have enough parts? | |
234 | cnt=`echo "$solib" | sed -e 's/\./ /g' | wc -w` | |
235 | if [ $cnt -eq $from_parts ] | |
236 | then | |
237 | from_name=$solib | |
238 | elif [ $cnt -eq $to_parts ] | |
239 | then | |
240 | to_name=$solib | |
241 | fi | |
242 | ||
243 | if [ -n "$from_name" ] && [ -n "$to_name" ] | |
244 | then | |
245 | install_name=$target/$to_name | |
246 | $LN -s -f $from_name $install_name | |
247 | status=$? | |
248 | $MANIFEST l $from_name ${install_name#$DIST_ROOT} | |
249 | break | |
250 | fi | |
251 | done | |
252 | ;; | |
253 | old_lib) | |
254 | install_name=$target/$old_library | |
255 | $CP $old_library $install_name | |
256 | status=$? | |
257 | $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$old_library ${install_name#$DIST_ROOT} | |
258 | ;; | |
259 | *) | |
260 | echo "$prog: -T $lt_install invalid" | |
261 | exit 2 | |
262 | ;; | |
263 | esac | |
264 | ||
265 | case $lt_install in | |
266 | old_lib|so_dot_version) | |
267 | if [ $status -eq 0 ] | |
268 | then | |
269 | $CHMOD $FILEMODE $install_name | |
270 | $CHOWN $OWNER $GROUP $install_name | |
271 | fi | |
272 | ;; | |
273 | esac | |
274 | ||
fc49813f NS |
275 | else |
276 | list="" | |
277 | dir="" | |
278 | if [ $# -eq 2 ] | |
279 | then | |
280 | # | |
281 | # second usage | |
282 | # | |
283 | f=$1 | |
284 | dir=$DIST_ROOT/$2 | |
285 | if $Dflag | |
286 | then | |
287 | mkdir -p `dirname $dir` | |
288 | fi | |
289 | $CP $f $dir | |
290 | status=$? | |
291 | if [ $status -eq 0 ] | |
f8149110 | 292 | then |
fc49813f NS |
293 | if [ -f $dir/$f ] |
294 | then | |
295 | $CHMOD $FILEMODE $dir/$f | |
296 | status=$? | |
297 | if [ $status -eq 0 ] | |
298 | then | |
299 | $CHOWN $OWNER $GROUP $dir/$f | |
300 | status=$? | |
301 | fi | |
302 | $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f | |
c3a5f8f8 | 303 | else |
fc49813f NS |
304 | $CHMOD $FILEMODE $dir |
305 | status=$? | |
306 | if [ $status -eq 0 ] | |
307 | then | |
308 | $CHOWN $OWNER $GROUP $dir | |
309 | status=$? | |
310 | fi | |
311 | $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$dir ${dir#$DIST_ROOT} | |
312 | fi | |
313 | fi | |
314 | else | |
315 | # | |
316 | # third usage | |
317 | # | |
318 | n=1 | |
319 | while [ $# -gt 0 ] | |
320 | do | |
321 | if [ $# -gt 1 ] | |
322 | then | |
323 | list="$list $1" | |
324 | else | |
325 | dir=$DIST_ROOT/$1 | |
326 | fi | |
327 | shift | |
328 | done | |
329 | ||
330 | # echo DIR=$dir list=\"$list\" | |
331 | for f in $list | |
332 | do | |
333 | $CP $f $dir | |
334 | status=$? | |
335 | if [ $status -eq 0 ] | |
336 | then | |
337 | $CHMOD $FILEMODE $dir/$f | |
338 | status=$? | |
339 | if [ $status -eq 0 ] | |
340 | then | |
341 | $CHOWN $OWNER $GROUP $dir/$f | |
342 | status=$? | |
343 | fi | |
344 | $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f | |
345 | fi | |
346 | [ $status -ne 0 ] && break | |
347 | done | |
348 | fi | |
349 | fi | |
350 | ||
351 | exit $status |