[gforth] / gforth / install-sh  

gforth: gforth/install-sh


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

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help