Commit | Line | Data |
---|---|---|
959f3c4c JH |
1 | ?RCS: $Id: Loc.U,v 3.0.1.10 1997/02/28 15:04:16 ram Exp $ |
2 | ?RCS: | |
3 | ?RCS: Copyright (c) 1991-1993, Raphael Manfredi | |
4 | ?RCS: | |
5 | ?RCS: You may redistribute only under the terms of the Artistic Licence, | |
6 | ?RCS: as specified in the README file that comes with the distribution. | |
7 | ?RCS: You may reuse parts of this distribution only within the terms of | |
8 | ?RCS: that same Artistic Licence; a copy of which may be found at the root | |
9 | ?RCS: of the source tree for dist 3.0. | |
10 | ?RCS: | |
11 | ?RCS: $Log: Loc.U,v $ | |
12 | ?RCS: Revision 3.0.1.10 1997/02/28 15:04:16 ram | |
13 | ?RCS: patch61: allow users to specify paths on the command line | |
14 | ?RCS: patch61: will now substitute cp for ln if not supported | |
15 | ?RCS: | |
16 | ?RCS: Revision 3.0.1.9 1995/09/25 09:11:24 ram | |
17 | ?RCS: patch59: commented the purpose of the #un-def directive | |
18 | ?RCS: patch59: abort Configure run when mandatory command is missing | |
19 | ?RCS: | |
20 | ?RCS: Revision 3.0.1.8 1995/07/25 13:40:40 ram | |
21 | ?RCS: patch56: now knows about OS/2 platforms | |
22 | ?RCS: | |
23 | ?RCS: Revision 3.0.1.7 1995/01/11 15:13:37 ram | |
24 | ?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI | |
25 | ?RCS: patch45: added path lookup for the 'comm' program | |
26 | ?RCS: | |
27 | ?RCS: Revision 3.0.1.6 1994/10/29 15:56:14 ram | |
28 | ?RCS: patch36: added ?F: line for metalint file checking | |
29 | ?RCS: patch36: be careful and guard against wildcard searching (ADO) | |
30 | ?RCS: | |
31 | ?RCS: Revision 3.0.1.5 1994/06/20 06:54:55 ram | |
32 | ?RCS: patch30: now locates find | |
33 | ?RCS: | |
34 | ?RCS: Revision 3.0.1.4 1994/05/13 15:18:15 ram | |
35 | ?RCS: patch27: added byacc to the trylist (ADO) | |
36 | ?RCS: patch27: lint lines reformatted (ADO) | |
37 | ?RCS: | |
38 | ?RCS: Revision 3.0.1.3 1994/01/24 14:01:44 ram | |
39 | ?RCS: patch16: added metalint hint on changed PATH variable | |
40 | ?RCS: | |
41 | ?RCS: Revision 3.0.1.2 1993/12/15 08:16:52 ram | |
42 | ?RCS: patch15: now set _test variable when test is built-in | |
43 | ?RCS: patch15: fixed rare cases where echo is not needed | |
44 | ?RCS: | |
45 | ?RCS: Revision 3.0.1.1 1993/09/13 15:47:13 ram | |
46 | ?RCS: patch10: test program not always in /bin/test (WAD) | |
47 | ?RCS: | |
48 | ?RCS: Revision 3.0 1993/08/18 12:05:05 ram | |
49 | ?RCS: Baseline for dist 3.0 netwide release. | |
50 | ?RCS: | |
51 | ?X: | |
52 | ?X: This unit produces a shell script "loc" which can be used to find out | |
53 | ?X: where in a list of directories something is. It then uses loc to | |
54 | ?X: determine the location of commonly used programs. It leaves loc sitting | |
55 | ?X: around for other Configure units to use, but arranges for its demise | |
56 | ?X: at the end of Configure. | |
57 | ?X: | |
58 | ?X: To add a new program to find, add it both to the ?MAKE: line and to either | |
59 | ?X: the loclist or trylist variable. | |
60 | ?X: | |
61 | ?X: I put startsh at the end of the dependency list, in order to avoid the | |
62 | ?X: loading of the spitshell unit before the instructions. | |
63 | ?X: | |
64 | ?MAKE:Loc Mcc awk ar bash bison byacc cat chgrp chmod chown \ | |
65 | comm compress cp cpio cpp csh date echo egrep emacs expr find flex \ | |
1ef69357 | 66 | gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \ |
959f3c4c JH |
67 | make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ |
68 | shar sleep smail sort submit tail tar tbl tee test touch tr troff \ | |
69 | uname uniq uuname vi zcat zip: eunicefix n c Instruct Myread \ | |
df0bcc5d | 70 | startsh |
959f3c4c JH |
71 | ?MAKE: -pick weed $@ %< |
72 | ?LINT:describe Loc Mcc awk ar bash bison byacc cat chgrp chmod chown \ | |
73 | comm compress cp cpio cpp csh date echo egrep emacs expr find flex \ | |
1ef69357 | 74 | gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \ |
959f3c4c JH |
75 | make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ |
76 | shar sleep smail sort submit tail tar tbl tee test touch tr troff \ | |
77 | uname uniq uuname vi zcat zip | |
c98a3161 | 78 | ?LINT:extern _exe |
959f3c4c | 79 | ?V::pth loclist trylist |
12e20a24 | 80 | ?F:./loc test_h |
959f3c4c JH |
81 | ?T:thisthing thing xxx dir file say _test DJGPP |
82 | ?LINT:change PATH | |
83 | : find out where common programs are | |
84 | echo " " | |
85 | echo "Locating common programs..." >&4 | |
86 | cat <<EOSC >loc | |
87 | $startsh | |
88 | case \$# in | |
89 | 0) exit 1;; | |
90 | esac | |
91 | thing=\$1 | |
92 | shift | |
93 | dflt=\$1 | |
94 | shift | |
95 | for dir in \$*; do | |
96 | case "\$thing" in | |
97 | .) | |
98 | if test -d \$dir/\$thing; then | |
99 | echo \$dir | |
100 | exit 0 | |
101 | fi | |
102 | ;; | |
103 | *) | |
104 | ?X: Be careful in case thing includes wildcards that might expand to multiple | |
105 | ?X: files. Choose the last one. This happens when searching for shared | |
106 | ?X: libraries with version numbers. How to choose which one we want is | |
107 | ?X: probably an insoluble problem, in general. | |
108 | ?X: Some folks leave things like libc.so.orig around w/o read | |
109 | ?X: permission. A -r test would handle that, but since ./loc is | |
110 | ?X: also used to find executables (which are installed w/o read | |
111 | ?X: permission on SCO ODT 3.0, we can't include the -r test. | |
c98a3161 JH |
112 | ?X: If you need to use _exe (different from .exe) |
113 | ?X: you need to set it on comand line: -D_exe=... | |
959f3c4c JH |
114 | for thisthing in \$dir/\$thing; do |
115 | : just loop through to pick last item | |
116 | done | |
117 | if test -f \$thisthing; then | |
118 | echo \$thisthing | |
119 | exit 0 | |
c98a3161 JH |
120 | elif test "X$_exe" != X -a -f \$thisthing$_exe; then |
121 | echo \$thisthing | |
122 | exit 0 | |
959f3c4c JH |
123 | elif test -f \$dir/\$thing.exe; then |
124 | if test -n "$DJGPP"; then | |
125 | echo \$dir/\$thing.exe | |
126 | else | |
127 | : on Eunice apparently | |
128 | echo \$dir/\$thing | |
129 | fi | |
130 | exit 0 | |
131 | fi | |
132 | ;; | |
133 | esac | |
134 | done | |
135 | echo \$dflt | |
136 | exit 1 | |
137 | EOSC | |
138 | chmod +x loc | |
139 | $eunicefix loc | |
140 | loclist=" | |
141 | ?awk:awk | |
142 | ?cat:cat | |
143 | ?chgrp:chgrp | |
144 | ?chmod:chmod | |
145 | ?chown:chown | |
146 | ?comm:comm | |
147 | ?cp:cp | |
148 | ?echo:echo | |
149 | ?expr:expr | |
150 | ?find:find | |
151 | ?grep:grep | |
152 | ?ls:ls | |
959f3c4c JH |
153 | ?mkdir:mkdir |
154 | ?mv:mv | |
155 | ?rm:rm | |
156 | ?sed:sed | |
157 | ?sleep:sleep | |
158 | ?sort:sort | |
159 | ?tail:tail | |
160 | ?touch:touch | |
161 | ?tr:tr | |
162 | ?uniq:uniq | |
163 | " | |
164 | trylist=" | |
165 | ?Mcc:Mcc | |
166 | ?ar:ar | |
167 | ?bash:bash | |
168 | ?bison:bison | |
169 | ?byacc:byacc | |
170 | ?compress:compress | |
171 | ?cpio:cpio | |
172 | ?cpp:cpp | |
173 | ?csh:csh | |
174 | ?date:date | |
175 | ?egrep:egrep | |
176 | ?emacs:emacs | |
177 | ?flex:flex | |
1ef69357 | 178 | ?gmake:gmake |
959f3c4c JH |
179 | ?gzip:gzip |
180 | ?inews:inews | |
181 | ?ksh:ksh | |
182 | ?less:less | |
183 | ?line:line | |
184 | ?lint:lint | |
185 | ?ln:ln | |
186 | ?lp:lp | |
187 | ?lpr:lpr | |
188 | ?mail:mail | |
1ef69357 | 189 | ?make:make |
959f3c4c JH |
190 | ?mailx:mailx |
191 | ?more:more | |
192 | ?nm:nm | |
193 | ?nroff:nroff | |
194 | ?perl:perl | |
195 | ?pg:pg | |
196 | ?pmake:pmake | |
197 | ?pr:pr | |
198 | ?rmail:rmail | |
199 | ?sendmail:sendmail | |
200 | ?shar:shar | |
201 | ?smail:smail | |
202 | ?submit:submit | |
203 | ?tar:tar | |
204 | ?tbl:tbl | |
205 | ?tee:tee | |
206 | ?test:test | |
207 | ?troff:troff | |
208 | ?uname:uname | |
209 | ?uuname:uuname | |
210 | ?vi:vi | |
211 | ?zcat:zcat | |
212 | ?zip:zip | |
213 | " | |
214 | ?LINT:set Loc Mcc awk ar bash bison byacc cat chgrp chmod chown \ | |
215 | comm compress cp cpio cpp csh date echo egrep emacs expr find flex \ | |
1ef69357 | 216 | gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \ |
959f3c4c JH |
217 | make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \ |
218 | shar sleep smail sort submit tail tar tbl tee test touch tr troff \ | |
219 | uname uniq uuname vi zcat zip | |
220 | pth=`echo $PATH | sed -e "s/$p_/ /g"` | |
221 | pth="$pth /lib /usr/lib" | |
222 | for file in $loclist; do | |
223 | ?X: | |
224 | ?X: Allow them to -Dmake=pmake on the command line for instance... | |
225 | ?X: If the file is not fully qualified, as in -Dmake=pmake, then we | |
226 | ?X: look the for the specified command (pmake here). If they say | |
227 | ?X: -Dmake=/sbin/make for instance, then we make sure the file | |
228 | ?X: exists, or we die... | |
229 | ?X: | |
230 | eval xxx=\$$file | |
231 | case "$xxx" in | |
232 | /*|?:[\\/]*) | |
233 | if test -f "$xxx"; then | |
234 | : ok | |
235 | else | |
236 | echo "WARNING: no $xxx -- ignoring your setting for $file." >&4 | |
237 | xxx=`./loc $file $file $pth` | |
238 | fi | |
239 | ;; | |
240 | '') xxx=`./loc $file $file $pth`;; | |
241 | *) xxx=`./loc $xxx $xxx $pth`;; | |
242 | esac | |
c98a3161 | 243 | eval $file=$xxx$_exe |
959f3c4c JH |
244 | eval _$file=$xxx |
245 | case "$xxx" in | |
246 | /*) | |
247 | echo $file is in $xxx. | |
248 | ;; | |
249 | ?X: Under OS/2, we have PC-like paths | |
250 | ?:[\\/]*) | |
251 | echo $file is in $xxx. | |
252 | ;; | |
253 | *) | |
254 | echo "I don't know where '$file' is, and my life depends on it." >&4 | |
255 | echo "Go find a public domain implementation or fix your PATH setting!" >&4 | |
256 | exit 1 | |
257 | ;; | |
258 | esac | |
259 | done | |
260 | echo " " | |
261 | echo "Don't worry if any of the following aren't found..." | |
262 | say=offhand | |
263 | for file in $trylist; do | |
264 | ?X: Allow them to -Dmake=pmake on the command line for instance (see above) | |
265 | eval xxx=\$$file | |
266 | case "$xxx" in | |
267 | /*|?:[\\/]*) | |
268 | if test -f "$xxx"; then | |
269 | : ok | |
270 | else | |
271 | echo "WARNING: no $xxx -- ignoring your setting for $file." >&4 | |
272 | xxx=`./loc $file $file $pth` | |
273 | fi | |
274 | ;; | |
275 | '') xxx=`./loc $file $file $pth`;; | |
276 | *) xxx=`./loc $xxx $xxx $pth`;; | |
277 | esac | |
278 | eval $file=$xxx | |
279 | eval _$file=$xxx | |
280 | case "$xxx" in | |
281 | /*) | |
282 | echo $file is in $xxx. | |
283 | ;; | |
284 | ?X: Under OS/2, we have PC-like paths | |
285 | ?:[\\/]*) | |
286 | echo $file is in $xxx. | |
287 | ;; | |
288 | *) | |
289 | echo "I don't see $file out there, $say." | |
290 | say=either | |
291 | ;; | |
292 | esac | |
293 | done | |
294 | case "$egrep" in | |
c98a3161 | 295 | *egrep*) |
959f3c4c JH |
296 | echo "Substituting grep for egrep." |
297 | egrep=$grep | |
298 | ;; | |
299 | esac | |
300 | @if ln | |
301 | case "$ln" in | |
c98a3161 | 302 | *ln*) |
959f3c4c JH |
303 | echo "Substituting cp for ln." |
304 | ln=$cp | |
305 | ;; | |
306 | esac | |
39eb4e6d | 307 | case "$make$gmake" in |
c98a3161 JH |
308 | *make*) |
309 | ;; | |
310 | *) | |
311 | echo "I can't find make or gmake, and my life depends on it." >&4 | |
312 | echo "Go find a public domain implementation or fix your PATH setting!" >&4 | |
313 | exit 1 | |
314 | ;; | |
315 | esac | |
959f3c4c JH |
316 | @end |
317 | case "$test" in | |
318 | test) | |
319 | echo "Hopefully test is built into your sh." | |
320 | ;; | |
321 | *) | |
df0bcc5d | 322 | if `sh -c "PATH= test true" >/dev/null 2>&1`; then |
959f3c4c JH |
323 | echo "Using the test built into your sh." |
324 | ?X: | |
325 | ?X: We need to set both test and _test, since Oldconfig.U will use the _test | |
326 | ?X: value to systematically restore computed paths, which may be wrong if | |
327 | ?X: we choose to load an old config.sh generated on another platform. | |
328 | ?X: | |
329 | test=test | |
330 | _test=test | |
331 | fi | |
332 | ;; | |
333 | esac | |
334 | ?LINT:change n c | |
335 | case "$echo" in | |
336 | echo) | |
337 | echo "Hopefully echo is built into your sh." | |
338 | ;; | |
339 | ?X: For those rare cases where we don't need $echo... | |
340 | '') ;; | |
341 | *) | |
342 | echo " " | |
343 | echo "Checking compatibility between $echo and builtin echo (if any)..." >&4 | |
344 | $echo $n "hi there$c" >foo1 | |
345 | echo $n "hi there$c" >foo2 | |
346 | if cmp foo1 foo2 >/dev/null 2>&1; then | |
347 | echo "They are compatible. In fact, they may be identical." | |
348 | else | |
349 | case "$n" in | |
350 | '-n') n='' c='\c';; | |
351 | *) n='-n' c='';; | |
352 | esac | |
353 | cat <<FOO | |
354 | They are not compatible! You are probably running ksh on a non-USG system. | |
355 | I'll have to use $echo instead of the builtin, since Bourne shell doesn't | |
356 | have echo built in and we may have to run some Bourne shell scripts. That | |
357 | means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous. | |
358 | ||
359 | FOO | |
360 | $echo $n "The star should be here-->$c" | |
361 | $echo "*" | |
362 | fi | |
363 | $rm -f foo1 foo2 | |
364 | ;; | |
365 | esac | |
366 |