/[ascend]/trunk/base/autotools/config/install-sh
ViewVC logotype

Annotation of /trunk/base/autotools/config/install-sh

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22