1 ?RCS: $Id: Loc.U,v 3.0.1.10 1997/02/28 15:04:16 ram Exp $
3 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
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.
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
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
20 ?RCS: Revision 3.0.1.8 1995/07/25 13:40:40 ram
21 ?RCS: patch56: now knows about OS/2 platforms
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
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)
31 ?RCS: Revision 3.0.1.5 1994/06/20 06:54:55 ram
32 ?RCS: patch30: now locates find
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)
38 ?RCS: Revision 3.0.1.3 1994/01/24 14:01:44 ram
39 ?RCS: patch16: added metalint hint on changed PATH variable
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
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)
48 ?RCS: Revision 3.0 1993/08/18 12:05:05 ram
49 ?RCS: Baseline for dist 3.0 netwide release.
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.
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.
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.
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 \
66 gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
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 \
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 \
74 gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
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
78 ?V::pth loclist trylist
80 ?T:thisthing thing xxx dir file say _test DJGPP
86 : find out where common programs are
88 echo "Locating common programs..." >&4
101 if test -d \$dir/\$thing; then
107 ?X: Be careful in case thing includes wildcards that might expand to multiple
108 ?X: files. Choose the last one. This happens when searching for shared
109 ?X: libraries with version numbers. How to choose which one we want is
110 ?X: probably an insoluble problem, in general.
111 ?X: Some folks leave things like libc.so.orig around w/o read
112 ?X: permission. A -r test would handle that, but since ./loc is
113 ?X: also used to find executables (which are installed w/o read
114 ?X: permission on SCO ODT 3.0, we can't include the -r test.
115 ?X: If you need to use an _exe that is different from .exe
116 ?X: you need to set it in Head.U.
117 for thisthing in \$dir/\$thing; do
118 : just loop through to pick last item
120 if test -f \$thisthing; then
123 elif test "X$_exe" != X -a -f \$thisthing$_exe; then
126 elif test -f \$dir/\$thing.exe; then
127 if test -n "$DJGPP"; then
128 echo \$dir/\$thing.exe
129 elif test "$eunicefix" != ":"; then
130 : on Eunice apparently
218 ?LINT:set Loc Mcc awk ar bash bison byacc cat chgrp chmod chown \
219 comm compress cp cpio cpp csh date echo egrep emacs expr find flex \
220 gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
221 make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \
222 shar sleep smail sort submit tail tar tbl tee test touch tr troff \
223 uname uniq uuname vi zcat zip
224 pth=`echo $PATH | sed -e "s/$p_/ /g"`
225 pth="$pth /lib /usr/lib"
226 for file in $loclist; do
228 ?X: Allow them to -Dmake=pmake on the command line for instance...
229 ?X: If the file is not fully qualified, as in -Dmake=pmake, then we
230 ?X: look the for the specified command (pmake here). If they say
231 ?X: -Dmake=/sbin/make for instance, then we make sure the file
232 ?X: exists, or we die...
237 if test -f "$xxx"; then
240 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
241 xxx=`./loc $file $file $pth`
244 '') xxx=`./loc $file $file $pth`;;
245 *) xxx=`./loc $xxx $xxx $pth`;;
251 echo $file is in $xxx.
253 ?X: Under OS/2, we have PC-like paths
255 echo $file is in $xxx.
258 echo "I don't know where '$file' is, and my life depends on it." >&4
259 echo "Go find a public domain implementation or fix your PATH setting!" >&4
265 echo "Don't worry if any of the following aren't found..."
267 for file in $trylist; do
268 ?X: Allow them to -Dmake=pmake on the command line for instance (see above)
272 if test -f "$xxx"; then
275 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
276 xxx=`./loc $file $file $pth`
279 '') xxx=`./loc $file $file $pth`;;
280 *) xxx=`./loc $xxx $xxx $pth`;;
286 echo $file is in $xxx.
288 ?X: Under OS/2, we have PC-like paths
290 echo $file is in $xxx.
293 echo "I don't see $file out there, $say."
300 echo "Substituting grep for egrep."
308 echo "Substituting cp for ln."
318 echo "I can't find make or gmake, and my life depends on it." >&4
319 echo "Go find a public domain implementation or fix your PATH setting!" >&4
327 *) # We can't have osname yet.
328 if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
329 # Assume that gmake, if found, is definitely GNU make
330 # and prefer it over the system make.
331 echo "Substituting gmake for make."
339 echo "Hopefully test is built into your sh."
342 if `sh -c "PATH= test true" >/dev/null 2>&1`; then
343 echo "Using the test built into your sh."
345 ?X: We need to set both test and _test, since Oldconfig.U will use the _test
346 ?X: value to systematically restore computed paths, which may be wrong if
347 ?X: we choose to load an old config.sh generated on another platform.
357 echo "Hopefully echo is built into your sh."
359 ?X: For those rare cases where we don't need $echo...
363 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
364 $echo $n "hi there$c" >foo1
365 echo $n "hi there$c" >foo2
366 if cmp foo1 foo2 >/dev/null 2>&1; then
367 echo "They are compatible. In fact, they may be identical."
374 They are not compatible! You are probably running ksh on a non-USG system.
375 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
376 have echo built in and we may have to run some Bourne shell scripts. That
377 means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
380 $echo $n "The star should be here-->$c"