This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Metaconfig unit changes for #8459.
[metaconfig.git] / U / modified / Loc.U
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 \
70         startsh
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
79 ?F:./loc test_h
80 ?T:thisthing thing xxx dir file say _test DJGPP
81 ?LINT:change PATH
82 : find out where common programs are
83 echo " "
84 echo "Locating common programs..." >&4
85 cat <<EOSC >loc
86 $startsh
87 case \$# in
88 0) exit 1;;
89 esac
90 thing=\$1
91 shift
92 dflt=\$1
93 shift
94 for 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
128 done
129 echo \$dflt
130 exit 1
131 EOSC
132 chmod +x loc
133 $eunicefix loc
134 loclist="
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 "
159 trylist="
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
213 pth=`echo $PATH | sed -e "s/$p_/ /g"`
214 pth="$pth /lib /usr/lib"
215 for 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
252 done
253 echo " "
254 echo "Don't worry if any of the following aren't found..."
255 say=offhand
256 for 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
286 done
287 case "$egrep" in
288 egrep)
289         echo "Substituting grep for egrep."
290         egrep=$grep
291         ;;
292 esac
293 @if ln
294 case "$ln" in
295 ln)
296         echo "Substituting cp for ln."
297         ln=$cp
298         ;;
299 esac
300 @end
301 case "$test" in
302 test)
303         echo "Hopefully test is built into your sh."
304         ;;
305 *)
306         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
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:
313                 test=test
314                 _test=test
315         fi
316         ;;
317 esac
318 ?LINT:change n c
319 case "$echo" in
320 echo)
321         echo "Hopefully echo is built into your sh."
322         ;;
323 ?X: For those rare cases where we don't need $echo...
324 '') ;;
325 *)
326         echo " "
327 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
328         $echo $n "hi there$c" >foo1
329         echo $n "hi there$c" >foo2
330         if cmp foo1 foo2 >/dev/null 2>&1; then
331                 echo "They are compatible.  In fact, they may be identical."
332         else
333                 case "$n" in
334                 '-n') n='' c='\c';;
335                 *) n='-n' c='';;
336                 esac
337                 cat <<FOO
338 They are not compatible!  You are probably running ksh on a non-USG system.
339 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
340 have echo built in and we may have to run some Bourne shell scripts.  That
341 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
342
343 FOO
344                 $echo $n "The star should be here-->$c"
345                 $echo "*"
346         fi
347         $rm -f foo1 foo2
348         ;;
349 esac
350