This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
AIX builtin test -h is broken, changes based on
[metaconfig.git] / U / modified / Loc.U
CommitLineData
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 \
66 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 \
12e20a24 70 startsh sh_c
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 \
74 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
12e20a24 79?F:./loc test_h
959f3c4c
JH
80?T:thisthing thing xxx dir file say _test DJGPP
81?LINT:change PATH
82: find out where common programs are
83echo " "
84echo "Locating common programs..." >&4
85cat <<EOSC >loc
86$startsh
87case \$# in
880) exit 1;;
89esac
90thing=\$1
91shift
92dflt=\$1
93shift
94for dir in \$*; do
95 case "\$thing" in
96 .)
97 if test -d \$dir/\$thing; then
98 echo \$dir
99 exit 0
100 fi
101 ;;
102 *)
103?X: Be careful in case thing includes wildcards that might expand to multiple
104?X: files. Choose the last one. This happens when searching for shared
105?X: libraries with version numbers. How to choose which one we want is
106?X: probably an insoluble problem, in general.
107?X: Some folks leave things like libc.so.orig around w/o read
108?X: permission. A -r test would handle that, but since ./loc is
109?X: also used to find executables (which are installed w/o read
110?X: permission on SCO ODT 3.0, we can't include the -r test.
111 for thisthing in \$dir/\$thing; do
112 : just loop through to pick last item
113 done
114 if test -f \$thisthing; then
115 echo \$thisthing
116 exit 0
117 elif test -f \$dir/\$thing.exe; then
118 if test -n "$DJGPP"; then
119 echo \$dir/\$thing.exe
120 else
121 : on Eunice apparently
122 echo \$dir/\$thing
123 fi
124 exit 0
125 fi
126 ;;
127 esac
128done
129echo \$dflt
130exit 1
131EOSC
132chmod +x loc
133$eunicefix loc
134loclist="
135?awk:awk
136?cat:cat
137?chgrp:chgrp
138?chmod:chmod
139?chown:chown
140?comm:comm
141?cp:cp
142?echo:echo
143?expr:expr
144?find:find
145?grep:grep
146?ls:ls
147?make:make
148?mkdir:mkdir
149?mv:mv
150?rm:rm
151?sed:sed
152?sleep:sleep
153?sort:sort
154?tail:tail
155?touch:touch
156?tr:tr
157?uniq:uniq
158"
159trylist="
160?Mcc:Mcc
161?ar:ar
162?bash:bash
163?bison:bison
164?byacc:byacc
165?compress:compress
166?cpio:cpio
167?cpp:cpp
168?csh:csh
169?date:date
170?egrep:egrep
171?emacs:emacs
172?flex:flex
173?gzip:gzip
174?inews:inews
175?ksh:ksh
176?less:less
177?line:line
178?lint:lint
179?ln:ln
180?lp:lp
181?lpr:lpr
182?mail:mail
183?mailx:mailx
184?more:more
185?nm:nm
186?nroff:nroff
187?perl:perl
188?pg:pg
189?pmake:pmake
190?pr:pr
191?rmail:rmail
192?sendmail:sendmail
193?shar:shar
194?smail:smail
195?submit:submit
196?tar:tar
197?tbl:tbl
198?tee:tee
199?test:test
200?troff:troff
201?uname:uname
202?uuname:uuname
203?vi:vi
204?zcat:zcat
205?zip:zip
206"
207?LINT:set Loc Mcc awk ar bash bison byacc cat chgrp chmod chown \
208 comm compress cp cpio cpp csh date echo egrep emacs expr find flex \
209 gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
210 make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \
211 shar sleep smail sort submit tail tar tbl tee test touch tr troff \
212 uname uniq uuname vi zcat zip
213pth=`echo $PATH | sed -e "s/$p_/ /g"`
214pth="$pth /lib /usr/lib"
215for file in $loclist; do
216?X:
217?X: Allow them to -Dmake=pmake on the command line for instance...
218?X: If the file is not fully qualified, as in -Dmake=pmake, then we
219?X: look the for the specified command (pmake here). If they say
220?X: -Dmake=/sbin/make for instance, then we make sure the file
221?X: exists, or we die...
222?X:
223 eval xxx=\$$file
224 case "$xxx" in
225 /*|?:[\\/]*)
226 if test -f "$xxx"; then
227 : ok
228 else
229 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
230 xxx=`./loc $file $file $pth`
231 fi
232 ;;
233 '') xxx=`./loc $file $file $pth`;;
234 *) xxx=`./loc $xxx $xxx $pth`;;
235 esac
236 eval $file=$xxx
237 eval _$file=$xxx
238 case "$xxx" in
239 /*)
240 echo $file is in $xxx.
241 ;;
242?X: Under OS/2, we have PC-like paths
243 ?:[\\/]*)
244 echo $file is in $xxx.
245 ;;
246 *)
247 echo "I don't know where '$file' is, and my life depends on it." >&4
248 echo "Go find a public domain implementation or fix your PATH setting!" >&4
249 exit 1
250 ;;
251 esac
252done
253echo " "
254echo "Don't worry if any of the following aren't found..."
255say=offhand
256for file in $trylist; do
257?X: Allow them to -Dmake=pmake on the command line for instance (see above)
258 eval xxx=\$$file
259 case "$xxx" in
260 /*|?:[\\/]*)
261 if test -f "$xxx"; then
262 : ok
263 else
264 echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
265 xxx=`./loc $file $file $pth`
266 fi
267 ;;
268 '') xxx=`./loc $file $file $pth`;;
269 *) xxx=`./loc $xxx $xxx $pth`;;
270 esac
271 eval $file=$xxx
272 eval _$file=$xxx
273 case "$xxx" in
274 /*)
275 echo $file is in $xxx.
276 ;;
277?X: Under OS/2, we have PC-like paths
278 ?:[\\/]*)
279 echo $file is in $xxx.
280 ;;
281 *)
282 echo "I don't see $file out there, $say."
283 say=either
284 ;;
285 esac
286done
287case "$egrep" in
288egrep)
289 echo "Substituting grep for egrep."
290 egrep=$grep
291 ;;
292esac
293@if ln
294case "$ln" in
295ln)
296 echo "Substituting cp for ln."
297 ln=$cp
298 ;;
299esac
300@end
301case "$test" in
302test)
303 echo "Hopefully test is built into your sh."
304 ;;
305*)
12e20a24 306 if `$sh_c "PATH= test true" >/dev/null 2>&1`; then
959f3c4c
JH
307 echo "Using the test built into your sh."
308?X:
309?X: We need to set both test and _test, since Oldconfig.U will use the _test
310?X: value to systematically restore computed paths, which may be wrong if
311?X: we choose to load an old config.sh generated on another platform.
312?X:
12e20a24 313 echo "Using the test built into your sh."
959f3c4c
JH
314 test=test
315 _test=test
316 fi
317 ;;
318esac
319?LINT:change n c
320case "$echo" in
321echo)
322 echo "Hopefully echo is built into your sh."
323 ;;
324?X: For those rare cases where we don't need $echo...
325'') ;;
326*)
327 echo " "
328echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
329 $echo $n "hi there$c" >foo1
330 echo $n "hi there$c" >foo2
331 if cmp foo1 foo2 >/dev/null 2>&1; then
332 echo "They are compatible. In fact, they may be identical."
333 else
334 case "$n" in
335 '-n') n='' c='\c';;
336 *) n='-n' c='';;
337 esac
338 cat <<FOO
339They are not compatible! You are probably running ksh on a non-USG system.
340I'll have to use $echo instead of the builtin, since Bourne shell doesn't
341have echo built in and we may have to run some Bourne shell scripts. That
342means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
343
344FOO
345 $echo $n "The star should be here-->$c"
346 $echo "*"
347 fi
348 $rm -f foo1 foo2
349 ;;
350esac
351