/[PAMELA software]/yoda/install-sh
ViewVC logotype

Annotation of /yoda/install-sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.0 - (hide annotations) (download)
Fri Mar 4 15:54:11 2005 UTC (19 years, 9 months ago) by kusanagi
Branch: MAIN
Changes since 2.1: +0 -0 lines
Error proof version.
Implemented all detectors packets plus all the main telemetries packets.
Missing all the Init and Alarm packets.
Disabled CRC control on VarDump, ArrDump, TabDump for CPU debugging needs
(the data formats seems correct even if CRC get wrong)

1 kusanagi 1.1 #!/bin/sh
2 kusanagi 1.2 #
3 kusanagi 1.1 # install - install a program, script, or datafile
4     #
5 kusanagi 2.1 # This originates from X11R5 (mit/util/scripts/install.sh), which was
6     # later released in X11R6 (xc/config/util/install.sh) with the
7     # following copyright and license.
8 kusanagi 1.1 #
9 kusanagi 2.1 # Copyright (C) 1994 X Consortium
10     #
11     # Permission is hereby granted, free of charge, to any person obtaining a copy
12     # of this software and associated documentation files (the "Software"), to
13     # deal in the Software without restriction, including without limitation the
14     # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
15     # sell copies of the Software, and to permit persons to whom the Software is
16     # furnished to do so, subject to the following conditions:
17     #
18     # The above copyright notice and this permission notice shall be included in
19     # all copies or substantial portions of the Software.
20     #
21     # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22     # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23     # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24     # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
25     # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
26     # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27     #
28     # Except as contained in this notice, the name of the X Consortium shall not
29     # be used in advertising or otherwise to promote the sale, use or other deal-
30     # ings in this Software without prior written authorization from the X Consor-
31     # tium.
32     #
33     #
34     # FSF changes to this file are in the public domain.
35 kusanagi 1.1 #
36     # Calling this script install-sh is preferred over install.sh, to prevent
37     # `make' implicit rules from creating a file called install from it
38     # when there is no Makefile.
39     #
40     # This script is compatible with the BSD install script, but was written
41     # from scratch. It can only install one file at a time, a restriction
42     # shared with many OS's install programs.
43    
44 kusanagi 1.2
45 kusanagi 1.1 # set DOITPROG to echo to test this script
46    
47     # Don't use :- since 4.3BSD and earlier shells don't like it.
48     doit="${DOITPROG-}"
49    
50 kusanagi 1.2
51 kusanagi 1.1 # put in absolute paths if you don't have them in your path; or use env. vars.
52    
53     mvprog="${MVPROG-mv}"
54     cpprog="${CPPROG-cp}"
55     chmodprog="${CHMODPROG-chmod}"
56     chownprog="${CHOWNPROG-chown}"
57     chgrpprog="${CHGRPPROG-chgrp}"
58     stripprog="${STRIPPROG-strip}"
59     rmprog="${RMPROG-rm}"
60     mkdirprog="${MKDIRPROG-mkdir}"
61    
62 kusanagi 1.2 transformbasename=""
63     transform_arg=""
64 kusanagi 1.1 instcmd="$mvprog"
65     chmodcmd="$chmodprog 0755"
66 kusanagi 1.2 chowncmd=""
67     chgrpcmd=""
68     stripcmd=""
69 kusanagi 1.1 rmcmd="$rmprog -f"
70     mvcmd="$mvprog"
71 kusanagi 1.2 src=""
72     dst=""
73     dir_arg=""
74    
75     while [ x"$1" != x ]; do
76     case $1 in
77 kusanagi 2.1 -c) instcmd=$cpprog
78 kusanagi 1.2 shift
79     continue;;
80    
81     -d) dir_arg=true
82     shift
83     continue;;
84    
85     -m) chmodcmd="$chmodprog $2"
86     shift
87     shift
88     continue;;
89    
90     -o) chowncmd="$chownprog $2"
91     shift
92     shift
93     continue;;
94    
95     -g) chgrpcmd="$chgrpprog $2"
96     shift
97     shift
98     continue;;
99    
100 kusanagi 2.1 -s) stripcmd=$stripprog
101 kusanagi 1.2 shift
102     continue;;
103    
104     -t=*) transformarg=`echo $1 | sed 's/-t=//'`
105     shift
106     continue;;
107    
108     -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
109     shift
110     continue;;
111    
112     *) if [ x"$src" = x ]
113     then
114     src=$1
115     else
116     # this colon is to work around a 386BSD /bin/sh bug
117     :
118     dst=$1
119     fi
120     shift
121     continue;;
122     esac
123 kusanagi 1.1 done
124    
125 kusanagi 1.2 if [ x"$src" = x ]
126     then
127 kusanagi 2.1 echo "$0: no input file specified" >&2
128 kusanagi 1.2 exit 1
129     else
130 kusanagi 2.1 :
131 kusanagi 1.1 fi
132    
133 kusanagi 1.2 if [ x"$dir_arg" != x ]; then
134     dst=$src
135     src=""
136 kusanagi 2.1
137     if [ -d "$dst" ]; then
138 kusanagi 1.2 instcmd=:
139     chmodcmd=""
140     else
141 kusanagi 2.1 instcmd=$mkdirprog
142 kusanagi 1.2 fi
143     else
144    
145     # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
146 kusanagi 2.1 # might cause directories to be created, which would be especially bad
147 kusanagi 1.2 # if $src (and thus $dsttmp) contains '*'.
148    
149 kusanagi 2.1 if [ -f "$src" ] || [ -d "$src" ]
150 kusanagi 1.2 then
151 kusanagi 2.1 :
152 kusanagi 1.2 else
153 kusanagi 2.1 echo "$0: $src does not exist" >&2
154 kusanagi 1.2 exit 1
155     fi
156 kusanagi 2.1
157 kusanagi 1.2 if [ x"$dst" = x ]
158     then
159 kusanagi 2.1 echo "$0: no destination specified" >&2
160 kusanagi 1.2 exit 1
161     else
162 kusanagi 2.1 :
163 kusanagi 1.2 fi
164    
165     # If destination is a directory, append the input filename; if your system
166     # does not like double slashes in filenames, you may need to add some logic
167    
168 kusanagi 2.1 if [ -d "$dst" ]
169 kusanagi 1.2 then
170 kusanagi 2.1 dst=$dst/`basename "$src"`
171 kusanagi 1.2 else
172 kusanagi 2.1 :
173 kusanagi 1.2 fi
174     fi
175    
176     ## this sed command emulates the dirname command
177 kusanagi 2.1 dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
178 kusanagi 1.2
179     # Make sure that the destination directory exists.
180     # this part is taken from Noah Friedman's mkinstalldirs script
181    
182     # Skip lots of stat calls in the usual case.
183     if [ ! -d "$dstdir" ]; then
184 kusanagi 2.1 defaultIFS='
185     '
186     IFS="${IFS-$defaultIFS}"
187 kusanagi 1.2
188 kusanagi 2.1 oIFS=$IFS
189 kusanagi 1.2 # Some sh's can't handle IFS=/ for some reason.
190     IFS='%'
191 kusanagi 2.1 set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
192     IFS=$oIFS
193 kusanagi 1.2
194     pathcomp=''
195    
196     while [ $# -ne 0 ] ; do
197 kusanagi 2.1 pathcomp=$pathcomp$1
198 kusanagi 1.2 shift
199    
200 kusanagi 2.1 if [ ! -d "$pathcomp" ] ;
201 kusanagi 1.2 then
202 kusanagi 2.1 $mkdirprog "$pathcomp"
203 kusanagi 1.2 else
204 kusanagi 2.1 :
205 kusanagi 1.2 fi
206 kusanagi 1.1
207 kusanagi 2.1 pathcomp=$pathcomp/
208 kusanagi 1.1 done
209 kusanagi 1.2 fi
210    
211     if [ x"$dir_arg" != x ]
212     then
213 kusanagi 2.1 $doit $instcmd "$dst" &&
214 kusanagi 1.2
215 kusanagi 2.1 if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
216     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
217     if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
218     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
219 kusanagi 1.2 else
220    
221     # If we're going to rename the final executable, determine the name now.
222    
223 kusanagi 2.1 if [ x"$transformarg" = x ]
224 kusanagi 1.2 then
225 kusanagi 2.1 dstfile=`basename "$dst"`
226 kusanagi 1.2 else
227 kusanagi 2.1 dstfile=`basename "$dst" $transformbasename |
228 kusanagi 1.2 sed $transformarg`$transformbasename
229     fi
230    
231     # don't allow the sed command to completely eliminate the filename
232    
233 kusanagi 2.1 if [ x"$dstfile" = x ]
234 kusanagi 1.2 then
235 kusanagi 2.1 dstfile=`basename "$dst"`
236 kusanagi 1.2 else
237 kusanagi 2.1 :
238 kusanagi 1.2 fi
239    
240 kusanagi 2.1 # Make a couple of temp file names in the proper directory.
241    
242     dsttmp=$dstdir/_inst.$$_
243     rmtmp=$dstdir/_rm.$$_
244 kusanagi 1.2
245 kusanagi 2.1 # Trap to clean up temp files at exit.
246    
247     trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
248     trap '(exit $?); exit' 1 2 13 15
249 kusanagi 1.2
250     # Move or copy the file name to the temp name
251    
252 kusanagi 2.1 $doit $instcmd "$src" "$dsttmp" &&
253 kusanagi 1.2
254     # and set any options; do chmod last to preserve setuid bits
255    
256     # If any of these fail, we abort the whole thing. If we want to
257     # ignore errors from any of these, just make sure not to ignore
258     # errors from the above "$doit $instcmd $src $dsttmp" command.
259    
260 kusanagi 2.1 if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
261     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
262     if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
263     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
264    
265     # Now remove or move aside any old file at destination location. We try this
266     # two ways since rm can't unlink itself on some systems and the destination
267     # file might be busy for other reasons. In this case, the final cleanup
268     # might fail but the new file should still install successfully.
269    
270     {
271     if [ -f "$dstdir/$dstfile" ]
272     then
273     $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
274     $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
275     {
276     echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
277     (exit 1); exit
278     }
279     else
280     :
281     fi
282     } &&
283 kusanagi 1.2
284     # Now rename the file to the real destination.
285    
286 kusanagi 2.1 $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
287 kusanagi 1.2
288     fi &&
289    
290 kusanagi 2.1 # The final little trick to "correctly" pass the exit status to the exit trap.
291 kusanagi 1.1
292 kusanagi 2.1 {
293     (exit 0); exit
294     }

  ViewVC Help
Powered by ViewVC 1.1.23