This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add IP probe for ip_mreq
[metaconfig.git] / U / modified / Loc.U
1 ?RCS: $Id: Loc.U 14 2006-08-28 16:51:14Z rmanfredi $
2 ?RCS:
3 ?RCS: Copyright (c) 1991-1997, 2004-2006, 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 4.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 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 startsh Instruct
70 ?MAKE:  -pick weed $@ %<
71 ?LINT:describe awk ar bash bison byacc cat chgrp chmod chown \
72         comm compress cp cpio cpp csh date echo egrep emacs expr find flex \
73         gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
74         make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \
75         shar sleep smail sort submit tail tar tbl tee test touch tr troff \
76         uname uniq uuname vi zcat zip
77 ?V::pth loclist trylist
78 ?F:./loc test_h
79 ?T:thisthing thing xxx dir file say _test DJGPP
80 ?LINT:change PATH _egrep _ln _make _less
81 ?LINT:extern _exe
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 ?X: If you need to use an _exe that is different from .exe
112 ?X: you need to set it in Head.U.
113         for thisthing in \$dir/\$thing; do
114                 : just loop through to pick last item
115         done
116         if test -f \$thisthing; then
117                 echo \$thisthing
118                 exit 0
119         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
120                 echo \$thisthing
121                 exit 0
122         elif test -f \$dir/\$thing.exe; then
123                 if test -n "$DJGPP"; then
124                         echo \$dir/\$thing.exe
125                 elif test "$eunicefix" != ":"; then
126                         : on Eunice apparently
127                         echo \$dir/\$thing
128                 fi
129                 exit 0
130         fi
131         ;;
132         esac
133 done
134 echo \$dflt
135 exit 1
136 EOSC
137 chmod +x loc
138 $eunicefix loc
139 loclist="
140 ?awk:awk
141 ?cat:cat
142 ?chgrp:chgrp
143 ?chmod:chmod
144 ?chown:chown
145 ?comm:comm
146 ?cp:cp
147 ?echo:echo
148 ?expr:expr
149 ?find:find
150 ?grep:grep
151 ?ls:ls
152 ?mkdir:mkdir
153 ?mv:mv
154 ?rm:rm
155 ?sed:sed
156 ?sleep:sleep
157 ?sort:sort
158 ?tail:tail
159 ?touch:touch
160 ?tr:tr
161 ?uniq:uniq
162 "
163 trylist="
164 ?Mcc:Mcc
165 ?ar:ar
166 ?bash:bash
167 ?bison:bison
168 ?byacc:byacc
169 ?compress:compress
170 ?cpio:cpio
171 ?cpp:cpp
172 ?csh:csh
173 ?date:date
174 ?egrep:egrep
175 ?emacs:emacs
176 ?flex:flex
177 ?gmake:gmake
178 ?gzip:gzip
179 ?inews:inews
180 ?ksh:ksh
181 ?less:less
182 ?line:line
183 ?lint:lint
184 ?ln:ln
185 ?lp:lp
186 ?lpr:lpr
187 ?mail:mail
188 ?mailx:mailx
189 ?make:make
190 ?more:more
191 ?nm:nm
192 ?nroff:nroff
193 ?perl:perl
194 ?pg:pg
195 ?pmake:pmake
196 ?pr:pr
197 ?rmail:rmail
198 ?sendmail:sendmail
199 ?shar:shar
200 ?smail:smail
201 ?submit:submit
202 ?tar:tar
203 ?tbl:tbl
204 ?tee:tee
205 ?test:test
206 ?troff:troff
207 ?uname:uname
208 ?uuname:uuname
209 ?vi:vi
210 ?zcat:zcat
211 ?zip:zip
212 "
213 ?LINT:set awk ar bash bison byacc cat chgrp chmod chown \
214         comm compress cp cpio cpp csh date echo emacs expr find flex \
215         gmake gzip grep inews ksh less line lint lp lpr ls mail mailx \
216         mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \
217         shar sleep smail sort submit tail tar tbl tee touch tr troff \
218         uname uniq uuname vi zcat zip
219 pth=`echo $PATH | sed -e "s/$p_/ /g"`
220 pth="$pth /lib /usr/lib"
221 for file in $loclist; do
222 ?X:
223 ?X: Allow them to -Dmake=pmake on the command line for instance...
224 ?X: If the file is not fully qualified, as in -Dmake=pmake, then we
225 ?X: look the for the specified command (pmake here). If they say
226 ?X: -Dmake=/sbin/make for instance, then we make sure the file
227 ?X: exists, or we die...
228 ?X:
229         eval xxx=\$$file
230         case "$xxx" in
231         /*|?:[\\/]*)
232                 if test -f "$xxx"; then
233                         : ok
234                 else
235                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
236                         xxx=`./loc $file $file $pth`
237                 fi
238                 ;;
239         '') xxx=`./loc $file $file $pth`;;
240         *) xxx=`./loc $xxx $xxx $pth`;;
241         esac
242         eval $file=$xxx$_exe
243         eval _$file=$xxx
244         case "$xxx" in
245         /*)
246                 echo $file is in $xxx.
247                 ;;
248 ?X: Under OS/2, we have PC-like paths
249         ?:[\\/]*)
250                 echo $file is in $xxx.
251                 ;;
252         *)
253                 echo "I don't know where '$file' is, and my life depends on it." >&4
254                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
255                 exit 1
256                 ;;
257         esac
258 done
259 echo " "
260 echo "Don't worry if any of the following aren't found..."
261 say=offhand
262 for file in $trylist; do
263 ?X: Allow them to -Dmake=pmake on the command line for instance (see above)
264         eval xxx=\$$file
265         case "$xxx" in
266         /*|?:[\\/]*)
267                 if test -f "$xxx"; then
268                         : ok
269                 else
270                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
271                         xxx=`./loc $file $file $pth`
272                 fi
273                 ;;
274         '') xxx=`./loc $file $file $pth`;;
275         *) xxx=`./loc $xxx $xxx $pth`;;
276         esac
277         eval $file=$xxx$_exe
278         eval _$file=$xxx
279         case "$xxx" in
280         /*)
281                 echo $file is in $xxx.
282                 ;;
283 ?X: Under OS/2, we have PC-like paths
284         ?:[\\/]*)
285                 echo $file is in $xxx.
286                 ;;
287         *)
288                 echo "I don't see $file out there, $say."
289                 say=either
290                 ;;
291         esac
292 done
293 case "$egrep" in
294 egrep)
295         echo "Substituting grep for egrep."
296         egrep=$grep
297         _egrep=$grep
298         ;;
299 esac
300 @if less
301 case "$less" in
302 '')     ;;
303 *)      if $less -R </dev/null >/dev/null; then
304                echo "Substituting less -R for less."
305                less="$less -R"
306                _less=$less
307         fi
308         ;;
309 esac
310 @end
311 @if ln
312 case "$ln" in
313 ln)
314         echo "Substituting cp for ln."
315         ln=$cp
316         _ln=$cp
317         ;;
318 esac
319 @end
320 @if make || gmake
321 case "$make" in
322 make)
323         case "$gmake" in
324         gmake)
325         echo "I can't find make or gmake, and my life depends on it." >&4
326         echo "Go find a public domain implementation or fix your PATH setting!" >&4
327         exit 1
328         ;;
329         esac
330         ;;
331 esac
332 case "$gmake" in
333 gmake)  ;;
334 *)      # We can't have osname yet.
335         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
336                 # Assume that gmake, if found, is definitely GNU make
337                 # and prefer it over the system make.
338                 echo "Substituting gmake for make."
339                 make=$gmake
340                 _make=$gmake
341         fi
342         ;;
343 esac
344 @end
345 case "$test" in
346 test)
347         echo "Hopefully test is built into your sh."
348         ;;
349 *)
350         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
351                 echo "Using the test built into your sh."
352 ?X:
353 ?X: We need to set both test and _test, since Oldconfig.U will use the _test
354 ?X: value to systematically restore computed paths, which may be wrong if
355 ?X: we choose to load an old config.sh generated on another platform.
356 ?X:
357                 test=test
358                 _test=test
359         fi
360         ;;
361 esac
362 ?LINT:change n c
363 case "$echo" in
364 echo)
365         echo "Hopefully echo is built into your sh."
366         ;;
367 ?X: For those rare cases where we don't need $echo...
368 '') ;;
369 *)
370         echo " "
371 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
372         $echo $n "hi there$c" >foo1
373         echo $n "hi there$c" >foo2
374         if cmp foo1 foo2 >/dev/null 2>&1; then
375                 echo "They are compatible.  In fact, they may be identical."
376         else
377                 case "$n" in
378                 '-n') n='' c='\c';;
379                 *) n='-n' c='';;
380                 esac
381                 cat <<FOO
382 They are not compatible!  You are probably running ksh on a non-USG system.
383 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
384 have echo built in and we may have to run some Bourne shell scripts.  That
385 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
386
387 FOO
388                 $echo $n "The star should be here-->$c"
389                 $echo "*"
390         fi
391         $rm -f foo1 foo2
392         ;;
393 esac
394
395 ?X: The next part is irrelevant to the real process
396 # This question was auctioned at YAPC::Europe-2007 in Vienna
397 # I never promised you could answer it. I only auctioned the question.
398 cat <<FOO
399 The following message is sponsored by
400
401   Dresden.pm<--The stars should be here.
402
403 Dear Perl user, system administrator or package
404 maintainer, the Perl community sends greetings to
405 you. Do you (emblematical) greet back [Y/n]? n
406
407 FOO
408