This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
amigaos4: Amiga extensions maintenance
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # Note: this Configure script was generated automatically by the tool
15 # called "metaconfig". Rather than working with this copy of Configure,
16 # you may wish to get metaconfig. Perl uses a modified version of this
17 # tool, available in the "dist" folder in the checkout of the git repo
18 #    $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
19 # The original dist package (including metaconfig) is available via SVN:
20 #    $ svn co https://svn.code.sf.net/p/dist/code/trunk/dist
21 #
22 # Though this script was generated by metaconfig from metaunits, it is
23 # OK to send patches against Configure itself. It's up to the Configure
24 # pumpkin to backport the patch to the metaunits if it is accepted.
25 # For more information on patching Configure, see pod/perlhack.pod
26 #
27 # The metaunits are also available from the public git repository:
28 #     http://perl5.git.perl.org/metaconfig.git/ or
29 #     $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig
30 #
31 # See Porting/pumpkin.pod for more information on metaconfig.
32
33 # Generated using [metaconfig 3.5 PL0]
34 # (with additional metaconfig patches by perlbug@perl.org)
35
36 cat >c1$$ <<EOF
37 ARGGGHHHH!!!!!
38
39 SCO csh still thinks true is false.  Write to SCO today and tell them that next
40 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
41
42 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
43 we'd have to do is go in and swap the && and || tokens, wherever they are.)
44
45 [End of diatribe. We now return you to your regularly scheduled programming...]
46 EOF
47 cat >c2$$ <<EOF
48
49 OOPS!  You naughty creature!  You didn't run Configure with sh!
50 I will attempt to remedy the situation by running sh for you...
51 EOF
52
53 true || cat c1$$ c2$$
54 true || exec sh $0 $argv:q
55
56 (exit $?0) || cat c2$$
57 (exit $?0) || exec sh $0 $argv:q
58 rm -f c1$$ c2$$
59
60 if test -f /dev/cputype -a -f /dev/drivers -a -f /dev/osversion; then
61         cat <<EOF
62 ***
63 *** I'm sorry but this system looks like Plan 9 and Plan 9 doesn't do
64 *** Configure that well.  (Plan 9 is close to UNIX but not close enough.)
65 *** Please read the README.plan9 for further instructions.
66 *** Cannot continue, aborting.
67 ***
68 EOF
69         exit 1
70 fi
71
72 if test -f /sys/utilities/MultiView ; then
73         # AmigaOS, test -c for /dev/null is not useful
74         :
75 elif test ! -c /dev/null ; then
76         cat <<EOF
77 ***
78 *** I'm sorry, but /dev/null appears to be a file rather than a device.
79 *** Please consult your operating sytem's notes for making a device
80 *** in /dev.
81 *** Cannot continue, aborting.
82 ***
83 EOF
84         exit 1
85 fi
86
87 : compute my invocation name
88 me=$0
89 case "$0" in
90 */*)
91         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
92         test "$me" || me=$0
93         ;;
94 esac
95
96 : Proper separator for the PATH environment variable
97 p_=:
98 : On OS/2 this directory should exist if this is not floppy only system ":-]"
99 if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' 2>&1 ) 2>&1 >/dev/null ; then
100         if test -n "$OS2_SHELL"; then
101                 p_=\;
102                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
103                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
104                 is_os2=yes
105         elif test -n "$DJGPP"; then
106                 case "X${MACHTYPE:-nonesuchmach}" in
107                 *cygwin|*msys) ;;
108                 *) p_=\; ;;
109                 esac
110         fi
111 fi
112
113 : Proper PATH setting
114 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
115 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
116 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
117 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
118 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
119 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin"
120 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
121 paths="$paths /sbin /usr/sbin /usr/libexec"
122 paths="$paths /system/gnu_library/bin"
123
124 for p in $paths
125 do
126         case "$p_$PATH$p_" in
127         *$p_$p$p_*) ;;
128         *) test -d $p && PATH=$PATH$p_$p ;;
129         esac
130 done
131
132 PATH=.$p_$PATH
133 export PATH
134
135 : shall we be using ksh?
136 inksh=''
137 needksh=''
138 avoidksh=''
139 newsh=/bin/ksh
140 changesh=''
141 if (PATH=.; alias -x) >/dev/null 2>&1; then
142                 inksh=true
143 fi
144 if test -f /hp-ux -a -f /bin/ksh; then
145         needksh='to avoid sh bug in "here document" expansion'
146 fi
147 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
148         if test X`/usr/bin/uname -v` = X4; then
149                 avoidksh="to avoid AIX 4's /bin/sh"
150                 newsh=/usr/bin/bsh
151         fi
152 fi
153 if test -f /osf_boot -a -f /usr/sbin/setld; then
154         if test X`/usr/bin/uname -s` = XOSF1; then
155                 avoidksh="to avoid Digital UNIX' ksh"
156                 newsh=/bin/sh
157                 unset BIN_SH
158         fi
159 fi
160 case "$inksh/$needksh" in
161 /[a-z]*)
162                 ENV=''
163                 changesh=true
164                 reason="$needksh"
165         ;;
166 esac
167 case "$inksh/$avoidksh" in
168 true/[a-z]*)
169         changesh=true
170         reason="$avoidksh"
171         ;;
172 esac
173 case "$inksh/$needksh-$avoidksh-" in
174 true/--)
175                 cat <<EOM
176 (I see you are using the Korn shell.  Some ksh's blow up on $me,
177 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
178 EOM
179         ;;
180 esac
181 case "$changesh" in
182 true)
183         export newsh
184         echo "(Feeding myself to $newsh $reason.)"
185         case "$0" in
186         Configure|*/Configure) exec $newsh $0 "$@";;
187         *) exec $newsh Configure "$@";;
188         esac
189         ;;
190 esac
191 test -x "${newsh}" || unset newsh
192
193 : if needed, set CDPATH to a harmless value that is not chatty
194 : avoid bash 2.02 problems with empty CDPATH.
195 case "$CDPATH" in
196 '')     ;;
197 *)      case "$SHELL" in
198         *bash*) CDPATH='.' ;;
199         *) CDPATH='' ;;
200         esac
201         ;;
202 esac
203
204 : Configure runs within the UU subdirectory
205 test -d UU || mkdir UU
206 cd UU && rm -f ./*
207
208 ccname=''
209 ccversion=''
210 ccsymbols=''
211 cppccsymbols=''
212 cppsymbols=''
213 from=''
214 hostgenerate=''
215 hostosname=''
216 hostperl=''
217 run=''
218 targetarch=''
219 targetdir=''
220 targetenv=''
221 targethost=''
222 targetmkdir=''
223 targetport=''
224 to=''
225 usecrosscompile=''
226 extern_C=''
227 mistrustnm=''
228 usedevel=''
229 perllibs=''
230 dynamic_ext=''
231 extensions=''
232 known_extensions=''
233 nonxs_ext=''
234 static_ext=''
235 useopcode=''
236 useposix=''
237 extras=''
238 d_bsd=''
239 d_eunice=''
240 d_xenix=''
241 eunicefix=''
242 ar=''
243 awk=''
244 bash=''
245 bison=''
246 byacc=''
247 cat=''
248 chgrp=''
249 chmod=''
250 chown=''
251 comm=''
252 compress=''
253 cp=''
254 cpio=''
255 cpp=''
256 csh=''
257 date=''
258 echo=''
259 egrep=''
260 emacs=''
261 expr=''
262 find=''
263 flex=''
264 gmake=''
265 grep=''
266 gzip=''
267 inews=''
268 ksh=''
269 less=''
270 line=''
271 lint=''
272 ln=''
273 lp=''
274 lpr=''
275 ls=''
276 mail=''
277 mailx=''
278 make=''
279 mkdir=''
280 more=''
281 mv=''
282 nm=''
283 nroff=''
284 perl=''
285 pg=''
286 pmake=''
287 pr=''
288 rm=''
289 rmail=''
290 sed=''
291 sendmail=''
292 shar=''
293 sleep=''
294 smail=''
295 sort=''
296 submit=''
297 tail=''
298 tar=''
299 tbl=''
300 tee=''
301 test=''
302 touch=''
303 tr=''
304 troff=''
305 uname=''
306 uniq=''
307 uuname=''
308 vi=''
309 zcat=''
310 zip=''
311 full_ar=''
312 full_sed=''
313 libswanted=''
314 hint=''
315 myuname=''
316 osname=''
317 osvers=''
318 Author=''
319 Date=''
320 Header=''
321 Id=''
322 Locker=''
323 Log=''
324 RCSfile=''
325 Revision=''
326 Source=''
327 State=''
328 sysroot=''
329 _a=''
330 _exe=''
331 _o=''
332 archobjs=''
333 exe_ext=''
334 firstmakefile=''
335 lib_ext=''
336 obj_ext=''
337 path_sep=''
338 rm_try=''
339 afs=''
340 afsroot=''
341 alignbytes=''
342 ansi2knr=''
343 archlib=''
344 archlibexp=''
345 d_archlib=''
346 installarchlib=''
347 archname=''
348 myarchname=''
349 useversionedarchname=''
350 d_atolf=''
351 d_atoll=''
352 baserev=''
353 bin=''
354 binexp=''
355 initialinstalllocation=''
356 installbin=''
357 userelocatableinc=''
358 byteorder=''
359 cc=''
360 ccflags=''
361 cppflags=''
362 ldflags=''
363 lkflags=''
364 locincpth=''
365 optimize=''
366 cf_email=''
367 cf_by=''
368 cf_time=''
369 charbits=''
370 charsize=''
371 contains=''
372 cpp_stuff=''
373 cpplast=''
374 cppminus=''
375 cpprun=''
376 cppstdin=''
377 d__fwalk=''
378 d_access=''
379 d_accessx=''
380 d_acosh=''
381 d_aintl=''
382 d_alarm=''
383 asctime_r_proto=''
384 d_asctime_r=''
385 d_asinh=''
386 d_atanh=''
387 d_attribute_deprecated=''
388 d_attribute_format=''
389 d_attribute_malloc=''
390 d_attribute_nonnull=''
391 d_attribute_noreturn=''
392 d_attribute_pure=''
393 d_attribute_unused=''
394 d_attribute_warn_unused_result=''
395 d_printf_format_null=''
396 d_backtrace=''
397 d_bcmp=''
398 d_bcopy=''
399 d_builtin_choose_expr=''
400 d_builtin_expect=''
401 d_bzero=''
402 d_c99_variadic_macros=''
403 d_casti32=''
404 castflags=''
405 d_castneg=''
406 d_cbrt=''
407 d_chown=''
408 d_chroot=''
409 d_chsize=''
410 d_class=''
411 d_clearenv=''
412 d_closedir=''
413 d_void_closedir=''
414 d_cmsghdr_s=''
415 d_const=''
416 d_copysign=''
417 d_copysignl=''
418 d_cplusplus=''
419 cryptlib=''
420 d_crypt=''
421 crypt_r_proto=''
422 d_crypt_r=''
423 d_csh=''
424 full_csh=''
425 d_ctermid=''
426 ctermid_r_proto=''
427 d_ctermid_r=''
428 ctime_r_proto=''
429 d_ctime_r=''
430 d_cuserid=''
431 d_dbl_dig=''
432 d_dbminitproto=''
433 d_difftime=''
434 d_dir_dd_fd=''
435 d_dirfd=''
436 d_dladdr=''
437 d_dlerror=''
438 d_dlopen=''
439 d_dlsymun=''
440 d_dosuid=''
441 d_suidsafe=''
442 d_drand48_r=''
443 drand48_r_proto=''
444 d_drand48proto=''
445 d_dup2=''
446 d_eaccess=''
447 d_endgrent=''
448 d_endgrent_r=''
449 endgrent_r_proto=''
450 d_endhent=''
451 d_endhostent_r=''
452 endhostent_r_proto=''
453 d_endnent=''
454 d_endnetent_r=''
455 endnetent_r_proto=''
456 d_endpent=''
457 d_endprotoent_r=''
458 endprotoent_r_proto=''
459 d_endpwent=''
460 d_endpwent_r=''
461 endpwent_r_proto=''
462 d_endsent=''
463 d_endservent_r=''
464 endservent_r_proto=''
465 d_erf=''
466 d_erfc=''
467 d_exp2=''
468 d_expm1=''
469 d_faststdio=''
470 d_fchdir=''
471 d_fchmod=''
472 d_fchown=''
473 d_fcntl=''
474 d_fcntl_can_lock=''
475 d_fd_macros=''
476 d_fd_set=''
477 d_fds_bits=''
478 d_fdim=''
479 d_fegetround=''
480 d_fgetpos=''
481 d_finite=''
482 d_finitel=''
483 d_flexfnam=''
484 d_flock=''
485 d_flockproto=''
486 d_fma=''
487 d_fmax=''
488 d_fmin=''
489 d_fork=''
490 d_fp_class=''
491 d_fp_classl=''
492 d_fpclass=''
493 d_fp_classify=''
494 d_fpclassify=''
495 d_fpclassl=''
496 d_fpgetround=''
497 d_fpos64_t=''
498 d_frexpl=''
499 d_fs_data_s=''
500 d_fseeko=''
501 d_fsetpos=''
502 d_fstatfs=''
503 d_fsync=''
504 d_ftello=''
505 d_ftime=''
506 d_gettimeod=''
507 d_futimes=''
508 d_Gconvert=''
509 d_getaddrinfo=''
510 d_getcwd=''
511 d_getespwnam=''
512 d_getfsstat=''
513 d_getgrent=''
514 d_getgrent_r=''
515 getgrent_r_proto=''
516 d_getgrgid_r=''
517 getgrgid_r_proto=''
518 d_getgrnam_r=''
519 getgrnam_r_proto=''
520 d_getgrps=''
521 d_gethbyaddr=''
522 d_gethbyname=''
523 d_gethent=''
524 aphostname=''
525 d_gethname=''
526 d_phostname=''
527 d_uname=''
528 d_gethostbyaddr_r=''
529 gethostbyaddr_r_proto=''
530 d_gethostbyname_r=''
531 gethostbyname_r_proto=''
532 d_gethostent_r=''
533 gethostent_r_proto=''
534 d_gethostprotos=''
535 d_getitimer=''
536 d_getlogin=''
537 d_getlogin_r=''
538 getlogin_r_proto=''
539 d_getmnt=''
540 d_getmntent=''
541 d_getnameinfo=''
542 d_getnbyaddr=''
543 d_getnbyname=''
544 d_getnent=''
545 d_getnetbyaddr_r=''
546 getnetbyaddr_r_proto=''
547 d_getnetbyname_r=''
548 getnetbyname_r_proto=''
549 d_getnetent_r=''
550 getnetent_r_proto=''
551 d_getnetprotos=''
552 d_getpagsz=''
553 d_getpent=''
554 d_getpgid=''
555 d_getpgrp2=''
556 d_bsdgetpgrp=''
557 d_getpgrp=''
558 d_getppid=''
559 d_getprior=''
560 d_getpbyname=''
561 d_getpbynumber=''
562 d_getprotobyname_r=''
563 getprotobyname_r_proto=''
564 d_getprotobynumber_r=''
565 getprotobynumber_r_proto=''
566 d_getprotoent_r=''
567 getprotoent_r_proto=''
568 d_getprotoprotos=''
569 d_getprpwnam=''
570 d_getpwent=''
571 d_getpwent_r=''
572 getpwent_r_proto=''
573 d_getpwnam_r=''
574 getpwnam_r_proto=''
575 d_getpwuid_r=''
576 getpwuid_r_proto=''
577 d_getsent=''
578 d_getservbyname_r=''
579 getservbyname_r_proto=''
580 d_getservbyport_r=''
581 getservbyport_r_proto=''
582 d_getservent_r=''
583 getservent_r_proto=''
584 d_getservprotos=''
585 d_getspnam=''
586 d_getspnam_r=''
587 getspnam_r_proto=''
588 d_getsbyname=''
589 d_getsbyport=''
590 d_gmtime_r=''
591 gmtime_r_proto=''
592 d_gnulibc=''
593 gnulibc_version=''
594 d_hasmntopt=''
595 d_htonl=''
596 d_hypot=''
597 d_ilogb=''
598 d_ilogbl=''
599 d_inetaton=''
600 d_inetntop=''
601 d_inetpton=''
602 d_int64_t=''
603 d_isascii=''
604 d_isblank=''
605 d_isfinite=''
606 d_isfinitel=''
607 d_isinf=''
608 d_isinfl=''
609 d_isless=''
610 d_isnan=''
611 d_isnanl=''
612 d_isnormal=''
613 d_j0=''
614 d_j0l=''
615 d_killpg=''
616 d_lc_monetary_2008=''
617 d_lchown=''
618 d_ldbl_dig=''
619 d_lgamma=''
620 d_lgamma_r=''
621 d_libm_lib_version=''
622 d_link=''
623 d_llrint=''
624 d_llrintl=''
625 d_llround=''
626 d_llroundl=''
627 d_localtime_r=''
628 d_localtime_r_needs_tzset=''
629 localtime_r_proto=''
630 d_locconv=''
631 d_lockf=''
632 d_log1p=''
633 d_log2=''
634 d_logb=''
635 d_ldexpl=''
636 d_longdbl=''
637 longdblkind=''
638 longdblsize=''
639 d_longlong=''
640 longlongsize=''
641 d_lrint=''
642 d_lrintl=''
643 d_lround=''
644 d_lroundl=''
645 d_lseekproto=''
646 d_lstat=''
647 d_madvise=''
648 d_malloc_good_size=''
649 d_malloc_size=''
650 d_mblen=''
651 d_mbstowcs=''
652 d_mbtowc=''
653 d_memchr=''
654 d_memcmp=''
655 d_memcpy=''
656 d_memmove=''
657 d_memset=''
658 d_mkdir=''
659 d_mkdtemp=''
660 d_mkfifo=''
661 d_mkstemp=''
662 d_mkstemps=''
663 d_mktime=''
664 d_mmap=''
665 mmaptype=''
666 d_modfl=''
667 d_modfl_pow32_bug=''
668 d_modflproto=''
669 d_mprotect=''
670 d_msg=''
671 d_msgctl=''
672 d_msgget=''
673 d_msghdr_s=''
674 d_msgrcv=''
675 d_msgsnd=''
676 d_msync=''
677 d_munmap=''
678 d_nan=''
679 d_nearbyint=''
680 d_nextafter=''
681 d_nexttoward=''
682 d_nice=''
683 d_nl_langinfo=''
684 d_off64_t=''
685 d_open3=''
686 d_fpathconf=''
687 d_pathconf=''
688 d_pause=''
689 d_pipe=''
690 d_poll=''
691 d_portable=''
692 d_prctl=''
693 d_prctl_set_name=''
694 d_procselfexe=''
695 procselfexe=''
696 d_old_pthread_create_joinable=''
697 old_pthread_create_joinable=''
698 d_pthread_atfork=''
699 d_pthread_attr_setscope=''
700 d_pthread_yield=''
701 d_sched_yield=''
702 sched_yield=''
703 d_ptrdiff_t=''
704 d_qgcvt=''
705 d_random_r=''
706 random_r_proto=''
707 d_readdir64_r=''
708 readdir64_r_proto=''
709 d_readdir=''
710 d_rewinddir=''
711 d_seekdir=''
712 d_telldir=''
713 d_readdir_r=''
714 readdir_r_proto=''
715 d_readlink=''
716 d_readv=''
717 d_recvmsg=''
718 d_re_comp=''
719 d_regcmp=''
720 d_regcomp=''
721 d_remainder=''
722 d_remquo=''
723 d_rename=''
724 d_rint=''
725 d_rmdir=''
726 d_round=''
727 d_safebcpy=''
728 d_safemcpy=''
729 d_sanemcmp=''
730 d_sbrkproto=''
731 d_scalbn=''
732 d_scalbnl=''
733 d_select=''
734 d_sem=''
735 d_semctl=''
736 d_semget=''
737 d_semop=''
738 d_sendmsg=''
739 d_setegid=''
740 d_seteuid=''
741 d_setgrent=''
742 d_setgrent_r=''
743 setgrent_r_proto=''
744 d_setgrps=''
745 d_sethent=''
746 d_sethostent_r=''
747 sethostent_r_proto=''
748 d_setitimer=''
749 d_setlinebuf=''
750 d_setlocale=''
751 d_setlocale_r=''
752 setlocale_r_proto=''
753 d_setnent=''
754 d_setnetent_r=''
755 setnetent_r_proto=''
756 d_setpent=''
757 d_setpgid=''
758 d_setpgrp2=''
759 d_bsdsetpgrp=''
760 d_setpgrp=''
761 d_setprior=''
762 d_setproctitle=''
763 d_setprotoent_r=''
764 setprotoent_r_proto=''
765 d_setpwent=''
766 d_setpwent_r=''
767 setpwent_r_proto=''
768 d_setregid=''
769 d_setresgid=''
770 d_setresuid=''
771 d_setreuid=''
772 d_setrgid=''
773 d_setruid=''
774 d_setsent=''
775 d_setservent_r=''
776 setservent_r_proto=''
777 d_setsid=''
778 d_setvbuf=''
779 d_shm=''
780 d_shmat=''
781 d_shmatprototype=''
782 shmattype=''
783 d_shmctl=''
784 d_shmdt=''
785 d_shmget=''
786 d_sigaction=''
787 d_signbit=''
788 d_sigprocmask=''
789 d_sigsetjmp=''
790 usesitecustomize=''
791 d_snprintf=''
792 d_vsnprintf=''
793 d_sockatmark=''
794 d_sockatmarkproto=''
795 d_ip_mreq=''
796 d_ip_mreq_source=''
797 d_ipv6_mreq=''
798 d_ipv6_mreq_source=''
799 d_msg_ctrunc=''
800 d_msg_dontroute=''
801 d_msg_oob=''
802 d_msg_peek=''
803 d_msg_proxy=''
804 d_oldsock=''
805 d_scm_rights=''
806 d_sin6_scope_id=''
807 d_sockaddr_in6=''
808 d_sockaddr_sa_len=''
809 d_socket=''
810 d_sockpair=''
811 sockethdr=''
812 socketlib=''
813 d_socklen_t=''
814 d_socks5_init=''
815 d_sprintf_returns_strlen=''
816 d_sqrtl=''
817 d_srand48_r=''
818 srand48_r_proto=''
819 d_srandom_r=''
820 srandom_r_proto=''
821 d_sresgproto=''
822 d_sresuproto=''
823 d_stat=''
824 d_statblks=''
825 d_statfs_f_flags=''
826 d_statfs_s=''
827 d_static_inline=''
828 perl_static_inline=''
829 d_fstatvfs=''
830 d_statvfs=''
831 d_stdio_cnt_lval=''
832 d_stdio_ptr_lval=''
833 d_stdio_ptr_lval_nochange_cnt=''
834 d_stdio_ptr_lval_sets_cnt=''
835 d_stdiobase=''
836 d_stdstdio=''
837 stdio_base=''
838 stdio_bufsiz=''
839 stdio_cnt=''
840 stdio_filbuf=''
841 stdio_ptr=''
842 d_index=''
843 d_strchr=''
844 d_strcoll=''
845 d_strctcpy=''
846 d_strerrm=''
847 d_strerror=''
848 d_sysernlst=''
849 d_syserrlst=''
850 d_strerror_r=''
851 strerror_r_proto=''
852 d_strftime=''
853 d_strlcat=''
854 d_strlcpy=''
855 d_strtod=''
856 d_strtol=''
857 d_strtold=''
858 d_strtoll=''
859 d_strtoq=''
860 d_strtoul=''
861 d_strtoull=''
862 d_strtouq=''
863 d_strxfrm=''
864 d_symlink=''
865 d_syscall=''
866 d_syscallproto=''
867 d_sysconf=''
868 d_system=''
869 d_tcgetpgrp=''
870 d_tcsetpgrp=''
871 d_telldirproto=''
872 d_tgamma=''
873 d_time=''
874 timetype=''
875 d_asctime64=''
876 d_ctime64=''
877 d_difftime64=''
878 d_gmtime64=''
879 d_localtime64=''
880 d_mktime64=''
881 d_timegm=''
882 clocktype=''
883 d_times=''
884 d_tmpnam_r=''
885 tmpnam_r_proto=''
886 d_trunc=''
887 d_truncate=''
888 d_truncl=''
889 d_ttyname_r=''
890 ttyname_r_proto=''
891 d_tzname=''
892 d_u32align=''
893 d_ualarm=''
894 d_umask=''
895 d_semctl_semid_ds=''
896 d_semctl_semun=''
897 d_union_semun=''
898 d_unordered=''
899 d_unsetenv=''
900 d_usleep=''
901 d_usleepproto=''
902 d_ustat=''
903 d_pseudofork=''
904 d_vfork=''
905 usevfork=''
906 d_voidsig=''
907 signal_t=''
908 d_volatile=''
909 d_charvspr=''
910 d_vprintf=''
911 d_wait4=''
912 d_waitpid=''
913 d_wcscmp=''
914 d_wcstombs=''
915 d_wcsxfrm=''
916 d_wctomb=''
917 d_writev=''
918 dlext=''
919 bin_ELF=''
920 cccdlflags=''
921 ccdlflags=''
922 dlsrc=''
923 ld=''
924 ld_can_script=''
925 lddlflags=''
926 usedl=''
927 doublesize=''
928 ebcdic=''
929 fflushNULL=''
930 fflushall=''
931 fpossize=''
932 fpostype=''
933 gccansipedantic=''
934 gccosandvers=''
935 gccversion=''
936 gidformat=''
937 gidsign=''
938 gidsize=''
939 gidtype=''
940 groupstype=''
941 h_fcntl=''
942 h_sysfile=''
943 html1dir=''
944 html1direxp=''
945 installhtml1dir=''
946 html3dir=''
947 html3direxp=''
948 installhtml3dir=''
949 i_arpainet=''
950 i_assert=''
951 i_bfd=''
952 i_crypt=''
953 db_hashtype=''
954 db_prefixtype=''
955 db_version_major=''
956 db_version_minor=''
957 db_version_patch=''
958 i_db=''
959 i_dbm=''
960 i_rpcsvcdbm=''
961 d_dirnamlen=''
962 direntrytype=''
963 i_dirent=''
964 i_dlfcn=''
965 i_execinfo=''
966 i_fcntl=''
967 i_fenv=''
968 i_float=''
969 i_fp=''
970 i_fp_class=''
971 i_gdbm=''
972 d_grpasswd=''
973 i_grp=''
974 i_ieeefp=''
975 i_inttypes=''
976 i_langinfo=''
977 i_libutil=''
978 i_limits=''
979 i_locale=''
980 i_machcthr=''
981 i_malloc=''
982 i_mallocmalloc=''
983 i_math=''
984 i_memory=''
985 i_mntent=''
986 d_gdbm_ndbm_h_uses_prototypes=''
987 d_gdbmndbm_h_uses_prototypes=''
988 d_ndbm=''
989 d_ndbm_h_uses_prototypes=''
990 i_gdbm_ndbm=''
991 i_gdbmndbm=''
992 i_ndbm=''
993 i_netdb=''
994 i_neterrno=''
995 i_netinettcp=''
996 i_niin=''
997 i_sysin=''
998 i_poll=''
999 i_prot=''
1000 i_pthread=''
1001 d_pwage=''
1002 d_pwchange=''
1003 d_pwclass=''
1004 d_pwcomment=''
1005 d_pwexpire=''
1006 d_pwgecos=''
1007 d_pwpasswd=''
1008 d_pwquota=''
1009 i_pwd=''
1010 i_quadmath=''
1011 i_shadow=''
1012 i_socks=''
1013 i_stdbool=''
1014 i_stddef=''
1015 i_stdint=''
1016 i_stdlib=''
1017 i_string=''
1018 strings=''
1019 i_sunmath=''
1020 i_sysaccess=''
1021 i_sysdir=''
1022 i_sysfile=''
1023 d_voidtty=''
1024 i_bsdioctl=''
1025 i_sysfilio=''
1026 i_sysioctl=''
1027 i_syssockio=''
1028 i_syslog=''
1029 i_sysmman=''
1030 i_sysmode=''
1031 i_sysmount=''
1032 i_sysndir=''
1033 i_sysparam=''
1034 i_syspoll=''
1035 i_sysresrc=''
1036 i_syssecrt=''
1037 i_sysselct=''
1038 i_sysstat=''
1039 i_sysstatfs=''
1040 i_sysstatvfs=''
1041 i_systimes=''
1042 i_systypes=''
1043 i_sysuio=''
1044 i_sysun=''
1045 i_sysutsname=''
1046 i_sysvfs=''
1047 i_syswait=''
1048 i_sgtty=''
1049 i_termio=''
1050 i_termios=''
1051 d_tm_tm_gmtoff=''
1052 d_tm_tm_zone=''
1053 i_systime=''
1054 i_systimek=''
1055 i_time=''
1056 timeincl=''
1057 i_unistd=''
1058 i_ustat=''
1059 i_utime=''
1060 i_values=''
1061 i_stdarg=''
1062 i_varargs=''
1063 i_varhdr=''
1064 i_vfork=''
1065 d_inc_version_list=''
1066 inc_version_list=''
1067 inc_version_list_init=''
1068 doubleinfbytes=''
1069 doublenanbytes=''
1070 longdblinfbytes=''
1071 longdblnanbytes=''
1072 installprefix=''
1073 installprefixexp=''
1074 installstyle=''
1075 installusrbinperl=''
1076 intsize=''
1077 longsize=''
1078 shortsize=''
1079 issymlink=''
1080 libc=''
1081 ldlibpthname=''
1082 libperl=''
1083 shrpenv=''
1084 useshrplib=''
1085 glibpth=''
1086 incpth=''
1087 libpth=''
1088 loclibpth=''
1089 plibpth=''
1090 xlibpth=''
1091 ignore_versioned_solibs=''
1092 libs=''
1093 libsdirs=''
1094 libsfiles=''
1095 libsfound=''
1096 libspath=''
1097 lns=''
1098 d_PRIEUldbl=''
1099 d_PRIFUldbl=''
1100 d_PRIGUldbl=''
1101 d_PRIeldbl=''
1102 d_PRIfldbl=''
1103 d_PRIgldbl=''
1104 d_SCNfldbl=''
1105 doublekind=''
1106 sPRIEUldbl=''
1107 sPRIFUldbl=''
1108 sPRIGUldbl=''
1109 sPRIeldbl=''
1110 sPRIfldbl=''
1111 sPRIgldbl=''
1112 sSCNfldbl=''
1113 lseeksize=''
1114 lseektype=''
1115 make_set_make=''
1116 d_mymalloc=''
1117 freetype=''
1118 mallocobj=''
1119 mallocsrc=''
1120 malloctype=''
1121 usemallocwrap=''
1122 usemymalloc=''
1123 installman1dir=''
1124 man1dir=''
1125 man1direxp=''
1126 man1ext=''
1127 installman3dir=''
1128 man3dir=''
1129 man3direxp=''
1130 man3ext=''
1131 doublemantbits=''
1132 longdblmantbits=''
1133 nvmantbits=''
1134 modetype=''
1135 multiarch=''
1136 mydomain=''
1137 myhostname=''
1138 phostname=''
1139 c=''
1140 n=''
1141 d_eofnblk=''
1142 eagain=''
1143 o_nonblock=''
1144 rd_nodata=''
1145 need_va_copy=''
1146 netdb_hlen_type=''
1147 netdb_host_type=''
1148 netdb_name_type=''
1149 netdb_net_type=''
1150 groupcat=''
1151 hostcat=''
1152 passcat=''
1153 orderlib=''
1154 ranlib=''
1155 d_perl_otherlibdirs=''
1156 otherlibdirs=''
1157 package=''
1158 spackage=''
1159 pager=''
1160 api_revision=''
1161 api_subversion=''
1162 api_version=''
1163 api_versionstring=''
1164 patchlevel=''
1165 perl_patchlevel=''
1166 revision=''
1167 subversion=''
1168 version=''
1169 version_patchlevel_string=''
1170 perl5=''
1171 perladmin=''
1172 perlpath=''
1173 d_nv_preserves_uv=''
1174 d_nv_zero_is_allbits_zero=''
1175 i16size=''
1176 i16type=''
1177 i32size=''
1178 i32type=''
1179 i64size=''
1180 i64type=''
1181 i8size=''
1182 i8type=''
1183 ivsize=''
1184 ivtype=''
1185 nv_overflows_integers_at=''
1186 nv_preserves_uv_bits=''
1187 nvsize=''
1188 nvtype=''
1189 u16size=''
1190 u16type=''
1191 u32size=''
1192 u32type=''
1193 u64size=''
1194 u64type=''
1195 u8size=''
1196 u8type=''
1197 uvsize=''
1198 uvtype=''
1199 ivdformat=''
1200 nvEUformat=''
1201 nvFUformat=''
1202 nvGUformat=''
1203 nveformat=''
1204 nvfformat=''
1205 nvgformat=''
1206 uvXUformat=''
1207 uvoformat=''
1208 uvuformat=''
1209 uvxformat=''
1210 pidtype=''
1211 prefix=''
1212 prefixexp=''
1213 installprivlib=''
1214 privlib=''
1215 privlibexp=''
1216 prototype=''
1217 ptrsize=''
1218 d_PRIXU64=''
1219 d_PRId64=''
1220 d_PRIi64=''
1221 d_PRIo64=''
1222 d_PRIu64=''
1223 d_PRIx64=''
1224 sPRIXU64=''
1225 sPRId64=''
1226 sPRIi64=''
1227 sPRIo64=''
1228 sPRIu64=''
1229 sPRIx64=''
1230 d_quad=''
1231 quadkind=''
1232 quadtype=''
1233 uquadtype=''
1234 drand01=''
1235 randbits=''
1236 randfunc=''
1237 randseedtype=''
1238 seedfunc=''
1239 installscript=''
1240 scriptdir=''
1241 scriptdirexp=''
1242 selectminbits=''
1243 selecttype=''
1244 sh=''
1245 targetsh=''
1246 sig_count=''
1247 sig_name=''
1248 sig_name_init=''
1249 sig_num=''
1250 sig_num_init=''
1251 sig_size=''
1252 d_sitearch=''
1253 installsitearch=''
1254 sitearch=''
1255 sitearchexp=''
1256 installsitebin=''
1257 sitebin=''
1258 sitebinexp=''
1259 installsitehtml1dir=''
1260 sitehtml1dir=''
1261 sitehtml1direxp=''
1262 installsitehtml3dir=''
1263 sitehtml3dir=''
1264 sitehtml3direxp=''
1265 installsitelib=''
1266 sitelib=''
1267 sitelib_stem=''
1268 sitelibexp=''
1269 installsiteman1dir=''
1270 siteman1dir=''
1271 siteman1direxp=''
1272 installsiteman3dir=''
1273 siteman3dir=''
1274 siteman3direxp=''
1275 siteprefix=''
1276 siteprefixexp=''
1277 installsitescript=''
1278 sitescript=''
1279 sitescriptexp=''
1280 sizesize=''
1281 sizetype=''
1282 d_libname_unique=''
1283 so=''
1284 socksizetype=''
1285 sharpbang=''
1286 shsharp=''
1287 spitshell=''
1288 src=''
1289 ssizetype=''
1290 st_ino_sign=''
1291 st_ino_size=''
1292 startperl=''
1293 startsh=''
1294 stdchar=''
1295 d_stdio_stream_array=''
1296 stdio_stream_array=''
1297 sysman=''
1298 sGMTIME_max=''
1299 sGMTIME_min=''
1300 sLOCALTIME_max=''
1301 sLOCALTIME_min=''
1302 trnl=''
1303 uidformat=''
1304 uidsign=''
1305 uidsize=''
1306 uidtype=''
1307 archname64=''
1308 use64bitall=''
1309 use64bitint=''
1310 usecbacktrace=''
1311 dtrace=''
1312 usedtrace=''
1313 usefaststdio=''
1314 usekernprocpathname=''
1315 ccflags_uselargefiles=''
1316 ldflags_uselargefiles=''
1317 libswanted_uselargefiles=''
1318 uselargefiles=''
1319 uselongdouble=''
1320 usemorebits=''
1321 usemultiplicity=''
1322 nm_opt=''
1323 nm_so_opt=''
1324 runnm=''
1325 usenm=''
1326 usensgetexecutablepath=''
1327 useperlio=''
1328 usequadmath=''
1329 usesocks=''
1330 d_oldpthreads=''
1331 use5005threads=''
1332 useithreads=''
1333 usereentrant=''
1334 usethreads=''
1335 incpath=''
1336 mips_type=''
1337 usrinc=''
1338 vaproto=''
1339 d_vendorarch=''
1340 installvendorarch=''
1341 vendorarch=''
1342 vendorarchexp=''
1343 d_vendorbin=''
1344 installvendorbin=''
1345 vendorbin=''
1346 vendorbinexp=''
1347 installvendorhtml1dir=''
1348 vendorhtml1dir=''
1349 vendorhtml1direxp=''
1350 installvendorhtml3dir=''
1351 vendorhtml3dir=''
1352 vendorhtml3direxp=''
1353 d_vendorlib=''
1354 installvendorlib=''
1355 vendorlib=''
1356 vendorlib_stem=''
1357 vendorlibexp=''
1358 installvendorman1dir=''
1359 vendorman1dir=''
1360 vendorman1direxp=''
1361 installvendorman3dir=''
1362 vendorman3dir=''
1363 vendorman3direxp=''
1364 usevendorprefix=''
1365 vendorprefix=''
1366 vendorprefixexp=''
1367 d_vendorscript=''
1368 installvendorscript=''
1369 vendorscript=''
1370 vendorscriptexp=''
1371 versiononly=''
1372 yacc=''
1373 yaccflags=''
1374 CONFIG=''
1375
1376 : Detect odd OSs
1377 define='define'
1378 undef='undef'
1379 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1380 rmlist=''
1381
1382 : We must find out about Eunice early
1383 eunicefix=':'
1384 if test -f /etc/unixtovms; then
1385         eunicefix=/etc/unixtovms
1386 fi
1387 if test -f /etc/unixtovms.exe; then
1388         eunicefix=/etc/unixtovms.exe
1389 fi
1390
1391 : Set executable suffix now -- needed before hints available
1392 if test -f "/libs/version.library"; then
1393 : Amiga OS
1394     _exe=""
1395 elif test -f "/system/gnu_library/bin/ar.pm"; then
1396 : Stratus VOS
1397     _exe=".pm"
1398 elif test -n "$DJGPP"; then
1399 : DOS DJGPP
1400     _exe=".exe"
1401 elif test -f /kern/cookiejar; then
1402 : MiNT
1403     _exe=""
1404 elif test -d c:/. -o -n "$is_os2" ; then
1405 : OS/2 or cygwin
1406     _exe=".exe"
1407 fi
1408
1409 groupstype=''
1410 i_whoami=''
1411 : Trailing extension.  Override this in a hint file, if needed.
1412 : Extra object files, if any, needed on this platform.
1413 archobjs=''
1414 archname=''
1415 : Possible local include directories to search.
1416 : Set locincpth to "" in a hint file to defeat local include searches.
1417 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1418 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1419 :
1420 : no include file wanted by default
1421 inclwanted=''
1422
1423 : Enable -DEBUGGING and -DDEBUGGING from the command line
1424 EBUGGING=''
1425 DEBUGGING=''
1426
1427 libnames=''
1428 : change the next line if compiling for Xenix/286 on Xenix/386
1429 xlibpth='/usr/lib/386 /lib/386'
1430 : Possible local library directories to search.
1431 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1432 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1433
1434 : general looking path for locating libraries
1435 glibpth="/lib /usr/lib $xlibpth"
1436 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1437 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1438 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1439 test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
1440
1441 : Private path used by Configure to find libraries.  Its value
1442 : is prepended to libpth. This variable takes care of special
1443 : machines, like the mips.  Usually, it should be empty.
1444 plibpth=''
1445
1446 : default library list
1447 libswanted=''
1448 : some systems want to use only the non-versioned libso:s
1449 ignore_versioned_solibs=''
1450 : set usethreads on the Configure command line to enable threads.
1451 usereentrant='undef'
1452 ccname=''
1453 ccversion=''
1454 perllibs=''
1455 : set useposix=false in your hint file to disable the POSIX extension.
1456 useposix=true
1457 : set useopcode=false in your hint file to disable the Opcode extension.
1458 useopcode=true
1459 archname64=''
1460 ccflags_uselargefiles=''
1461 ldflags_uselargefiles=''
1462 libswanted_uselargefiles=''
1463 : set usemultiplicity on the Configure command line to enable multiplicity.
1464 : set usesocks on the Configure command line to enable socks.
1465 : List of libraries we want.
1466 : If anyone needs extra -lxxx, put those in a hint file.
1467 libswanted="cl pthread socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld"
1468 libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
1469 : We probably want to search /usr/shlib before most other libraries.
1470 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1471 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1472 glibpth="/usr/shlib $glibpth"
1473 : Do not use vfork unless overridden by a hint file.
1474 usevfork=false
1475
1476 : Find the basic shell for Bourne shell scripts
1477 case "$sh" in
1478 '')
1479         case "$SYSTYPE" in
1480         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1481         *) xxx='/bin/sh';;
1482         esac
1483         if test -f "$xxx"; then
1484                 sh="$xxx"
1485         else
1486                 : Build up a list and do a single loop so we can 'break' out.
1487                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1488                 for xxx in sh bash ksh pdksh ash; do
1489                         for p in $pth; do
1490                                 try="$try ${p}/${xxx}"
1491                         done
1492                 done
1493                 for xxx in $try; do
1494                         if test -f "$xxx"; then
1495                                 sh="$xxx";
1496                                 break
1497                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1498                                 sh="$xxx";
1499                                 break
1500                         elif test -f "$xxx.exe"; then
1501                                 sh="$xxx";
1502                                 break
1503                         fi
1504                 done
1505         fi
1506         ;;
1507 esac
1508
1509 case "$sh" in
1510 '')     cat >&2 <<EOM
1511 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.
1512
1513 Usually it's in /bin/sh.  How did you even get this far?
1514 Please contact me (Perl Maintainers) at perlbug@perl.org and
1515 we'll try to straighten this all out.
1516 EOM
1517         exit 1
1518         ;;
1519 esac
1520
1521 : When cross-compiling we need to separate the sh-to-run-Configure-with from the sh-to-use-in-Perl
1522 : default both to the same thing, cross-compilers can then set targetsh differently if they like
1523 targetsh=$sh
1524
1525 : see if sh knows # comments
1526 if `$sh -c '#' >/dev/null 2>&1`; then
1527         shsharp=true
1528         spitshell=cat
1529         xcat=/bin/cat
1530         test -f $xcat$_exe || xcat=/usr/bin/cat
1531         if test ! -f $xcat$_exe; then
1532                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1533                         if test -f $p/cat$_exe; then
1534                                 xcat=$p/cat
1535                                 break
1536                         fi
1537                 done
1538                 if test ! -f $xcat$_exe; then
1539                         echo "Can't find cat anywhere!"
1540                         exit 1
1541                 fi
1542         fi
1543         echo "#!$xcat" >sharp
1544         $eunicefix sharp
1545         chmod +x sharp
1546         ./sharp > today 2>/dev/null
1547         if test -s today; then
1548                 sharpbang='#!'
1549         else
1550                 echo "#! $xcat" > sharp
1551                 $eunicefix sharp
1552                 chmod +x sharp
1553                 ./sharp > today 2>/dev/null
1554                 if test -s today; then
1555                         sharpbang='#! '
1556                 else
1557                         sharpbang=': use '
1558                 fi
1559         fi
1560 else
1561         echo " "
1562         echo "Your $sh doesn't grok # comments--I will strip them later on."
1563         shsharp=false
1564         cd ..
1565         echo "exec grep -v '^[  ]*#'" >spitshell
1566         chmod +x spitshell
1567         $eunicefix spitshell
1568         spitshell=`pwd`/spitshell
1569         cd UU
1570         echo "I presume that if # doesn't work, #! won't work either!"
1571         sharpbang=': use '
1572 fi
1573 rm -f sharp today
1574
1575 : figure out how to guarantee sh startup
1576 case "$startsh" in
1577 '') startsh=${sharpbang}${sh} ;;
1578 *)
1579 esac
1580 cat >sharp <<EOSS
1581 $startsh
1582 set abc
1583 test "$?abc" != 1
1584 EOSS
1585
1586 chmod +x sharp
1587 $eunicefix sharp
1588 if ./sharp; then
1589         : echo "Yup, it does."
1590 else
1591         echo "Hmm... '$startsh' does not guarantee sh startup..."
1592         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1593 fi
1594 rm -f sharp
1595
1596 : Save command line options in file UU/cmdline.opt for later use in
1597 : generating config.sh.
1598 cat > cmdline.opt <<EOSH
1599 : Configure command line arguments.
1600 config_arg0='$0'
1601 config_args='$*'
1602 config_argc=$#
1603 EOSH
1604 argn=1
1605 args_exp=''
1606 args_sep=''
1607 for arg in "$@"; do
1608         cat >>cmdline.opt <<EOSH
1609 config_arg$argn='$arg'
1610 EOSH
1611         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1612 $arg
1613 EOC
1614         arg_exp=`cat cmdl.opt`
1615         args_exp="$args_exp$args_sep'$arg_exp'"
1616         argn=`expr $argn + 1`
1617         args_sep=' '
1618 done
1619 rm -f cmdl.opt
1620
1621 : produce awk script to parse command line options
1622 cat >options.awk <<'EOF'
1623 BEGIN {
1624         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1625
1626         len = length(optstr);
1627         for (i = 1; i <= len; i++) {
1628                 c = substr(optstr, i, 1);
1629                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1630                 if (a == ":") {
1631                         arg[c] = 1;
1632                         i++;
1633                 }
1634                 opt[c] = 1;
1635         }
1636 }
1637 {
1638         expect = 0;
1639         str = $0;
1640         if (substr(str, 1, 1) != "-") {
1641                 printf("'%s'\n", str);
1642                 next;
1643         }
1644         len = length($0);
1645         for (i = 2; i <= len; i++) {
1646                 c = substr(str, i, 1);
1647                 if (!opt[c]) {
1648                         printf("-%s\n", substr(str, i));
1649                         next;
1650                 }
1651                 printf("-%s\n", c);
1652                 if (arg[c]) {
1653                         if (i < len)
1654                                 printf("'%s'\n", substr(str, i + 1));
1655                         else
1656                                 expect = 1;
1657                         next;
1658                 }
1659         }
1660 }
1661 END {
1662         if (expect)
1663                 print "?";
1664 }
1665 EOF
1666
1667 : process the command line options
1668 set X `for arg in "$@"; do echo "X$arg"; done |
1669         sed -e s/X// | awk -f options.awk`
1670 eval "set $*"
1671 shift
1672 rm -f options.awk
1673
1674 : set up default values
1675 fastread=''
1676 reuseval=false
1677 config_sh=''
1678 alldone=''
1679 error=''
1680 silent=''
1681 extractsh=''
1682 override=''
1683 knowitall=''
1684 rm -f optdef.sh posthint.sh
1685 cat >optdef.sh <<EOS
1686 $startsh
1687 EOS
1688
1689
1690 : option parsing
1691 while test $# -gt 0; do
1692         case "$1" in
1693         -d) shift; fastread=yes;;
1694         -e) shift; alldone=cont;;
1695         -f)
1696                 shift
1697                 cd ..
1698                 if test -r "$1"; then
1699                         config_sh="$1"
1700                 else
1701                         echo "$me: cannot read config file $1." >&2
1702                         error=true
1703                 fi
1704                 cd UU
1705                 shift;;
1706         --help|\
1707         -h) shift; error=true;;
1708         -r) shift; reuseval=true;;
1709         -s) shift; silent=true; realsilent=true;;
1710         -E) shift; alldone=exit;;
1711         -K) shift; knowitall=true;;
1712         -O) shift; override=true;;
1713         -S) shift; silent=true; extractsh=true;;
1714         -D)
1715                 shift
1716                 case "$1" in
1717                 *=)
1718                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1719                         echo "$me: ignoring -D $1" >&2
1720                         ;;
1721                 *=*) echo "$1" | \
1722                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1723                 *) echo "$1='define'" >> optdef.sh;;
1724                 esac
1725                 shift
1726                 ;;
1727         -U)
1728                 shift
1729                 case "$1" in
1730                 *=) echo "$1" >> optdef.sh;;
1731                 *=*)
1732                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1733                         echo "$me: ignoring -U $1" >&2
1734                         ;;
1735                 *) echo "$1='undef'" >> optdef.sh;;
1736                 esac
1737                 shift
1738                 ;;
1739         -A)
1740             shift
1741             xxx=''
1742             yyy="$1"
1743             zzz=''
1744             uuu=undef
1745             case "$yyy" in
1746             *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
1747                  case "$zzz" in
1748                  *:*) zzz='' ;;
1749                  *)   xxx=append
1750                       zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
1751                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1752                  esac
1753                  ;;
1754             esac
1755             case "$xxx" in
1756             '')  case "$yyy" in
1757                  *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
1758                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
1759                       zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
1760                       yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
1761                  *)   xxx=`echo "$yyy"|sed 's!:.*!!'`
1762                       yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
1763                  esac
1764                  ;;
1765             esac
1766             case "$xxx" in
1767             append)
1768                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1769             clear)
1770                 echo "$yyy=''"                  >> posthint.sh ;;
1771             define)
1772                 case "$zzz" in
1773                 '') zzz=define ;;
1774                 esac
1775                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1776             eval)
1777                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1778             prepend)
1779                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1780             undef)
1781                 case "$zzz" in
1782                 '') zzz="$uuu" ;;
1783                 esac
1784                 echo "$yyy=$zzz"                >> posthint.sh ;;
1785             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1786             esac
1787             shift
1788             ;;
1789         -V) echo "$me generated by metaconfig 3.5 PL0." >&2
1790             exit 0;;
1791         --) break;;
1792         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1793         *) break;;
1794         esac
1795 done
1796
1797 case "$error" in
1798 true)
1799         cat >&2 <<EOM
1800 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1801                  [-U symbol] [-U symbol=] [-A command:symbol...]
1802   -d : use defaults for all answers.
1803   -e : go on without questioning past the production of config.sh.
1804   -f : specify an alternate default configuration file.
1805   -h : print this help message and exit (with an error status).
1806   -r : reuse C symbols value if possible (skips costly nm extraction).
1807   -s : silent mode, only echoes questions and essential information.
1808   -D : define symbol to have some value:
1809          -D symbol         symbol gets the value 'define'
1810          -D symbol=value   symbol gets the value 'value'
1811        common used examples (see INSTALL for more info):
1812          -Duse64bitint            use 64bit integers
1813          -Duse64bitall            use 64bit integers and pointers
1814          -Dusethreads             use thread support
1815          -Dinc_version_list=none  do not include older perl trees in @INC
1816          -DEBUGGING=none          DEBUGGING options
1817          -Dcc=gcc                 choose your compiler
1818          -Dprefix=/opt/perl5      choose your destination
1819   -E : stop at the end of questions, after having produced config.sh.
1820   -K : do not use unless you know what you are doing.
1821   -O : let -D and -U override definitions from loaded configuration file.
1822   -S : perform variable substitutions on all .SH files (can mix with -f)
1823   -U : undefine symbol:
1824          -U symbol    symbol gets the value 'undef'
1825          -U symbol=   symbol gets completely empty
1826        e.g.:  -Uversiononly
1827   -A : manipulate symbol after the platform specific hints have been applied:
1828          -A append:symbol=value   append value to symbol
1829          -A symbol=value          like append:, but with a separating space
1830          -A define:symbol=value   define symbol to have value
1831          -A clear:symbol          define symbol to be ''
1832          -A define:symbol         define symbol to be 'define'
1833          -A eval:symbol=value     define symbol to be eval of value
1834          -A prepend:symbol=value  prepend value to symbol
1835          -A undef:symbol          define symbol to be 'undef'
1836          -A undef:symbol=         define symbol to be ''
1837        e.g.:  -A prepend:libswanted='cl pthread '
1838               -A ccflags=-DSOME_MACRO
1839   -V : print version number and exit (with a zero status).
1840 EOM
1841         exit 1
1842         ;;
1843 esac
1844
1845 : Sanity checks
1846 case "$fastread$alldone" in
1847 yescont|yesexit) ;;
1848 *)
1849         case "$extractsh" in
1850         true) ;;
1851         *)
1852                 if test ! -t 0; then
1853                         echo "Say 'sh Configure', not 'sh <Configure'"
1854                         exit 1
1855                 fi
1856                 ;;
1857         esac
1858         ;;
1859 esac
1860
1861 exec 4>&1
1862 case "$silent" in
1863 true) exec 1>/dev/null;;
1864 esac
1865
1866 : run the defines and the undefines, if any, but leave the file out there...
1867 touch optdef.sh
1868 grep -q '\\' optdef.sh
1869 if test $? = 0; then
1870     echo "Configure does not support \\ in -D arguments"
1871     exit 1
1872 fi
1873 . ./optdef.sh
1874 : create the posthint manipulation script and leave the file out there...
1875 touch posthint.sh
1876
1877 : set package name
1878 package='perl5'
1879 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1880 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1881 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
1882 ABYZ-abyz) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1883 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1884 esac
1885
1886 : Some greps do not return status, grrr.
1887 echo "grimblepritz" >grimble
1888 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1889         contains=contains
1890 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1891         contains=grep
1892 else
1893         contains=contains
1894 fi
1895 rm -f grimble
1896 : the following should work in any shell
1897 case "$contains" in
1898 contains*)
1899         echo " "
1900         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1901         cat >contains <<'EOSS'
1902 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1903 EOSS
1904 chmod +x contains
1905 esac
1906
1907 : Find the path to the source tree
1908 case "$src" in
1909 '') case "$0" in
1910     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1911          case "$src" in
1912          /*)    ;;
1913          .)     ;;
1914          *)     src=`cd ../$src && pwd` ;;
1915          esac
1916          ;;
1917     *)   src='.';;
1918     esac;;
1919 esac
1920 case "$src" in
1921 '')     src=/
1922         rsrc=/
1923         ;;
1924 /*)     rsrc="$src";;
1925 *)      rsrc="../$src";;
1926 esac
1927 if test -f $rsrc/Configure && \
1928         $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
1929 then
1930    : found it, so we are ok.
1931 else
1932         rsrc=''
1933         for src in . .. ../.. ../../.. ../../../..; do
1934                 if test -f ../$src/Configure && \
1935                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1936                 then
1937                         rsrc=../$src
1938                         break
1939                 fi
1940         done
1941 fi
1942 case "$rsrc" in
1943 '')
1944         cat <<EOM >&4
1945
1946 Sorry, I can't seem to locate the source dir for $package.  Please start
1947 Configure with an explicit path -- i.e. /some/path/Configure.
1948
1949 EOM
1950         exit 1
1951         ;;
1952 ../.)   rsrc='..';;
1953 *)
1954         echo " "
1955         echo "Sources for $package found in \"$src\"." >&4
1956         ;;
1957 esac
1958
1959 : script used to extract .SH files with variable substitutions
1960 cat >extract <<'EOS'
1961 PERL_CONFIG_SH=true
1962 echo "Doing variable substitutions on .SH files..."
1963 if test -f MANIFEST; then
1964         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1965 else
1966         echo "(Looking for .SH files under the source directory.)"
1967         set x `(cd "$src"; find . -name "*.SH" -print)`
1968 fi
1969 shift
1970 case $# in
1971 0) set x `(cd "$src"; echo *.SH)`; shift;;
1972 esac
1973 if test ! -f "$src/$1"; then
1974         shift
1975 fi
1976 mkdir_p='
1977 name=$1;
1978 create="";
1979 while test $name; do
1980         if test ! -d "$name"; then
1981                 create="$name $create";
1982                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1983                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1984         else
1985                 name="";
1986         fi;
1987 done;
1988 for file in $create; do
1989         mkdir $file;
1990 done
1991 '
1992 for file in $*; do
1993         case "$src" in
1994         ".")
1995                 case "$file" in
1996                 */*)
1997                         dir=`expr X$file : 'X\(.*\)/'`
1998                         file=`expr X$file : 'X.*/\(.*\)'`
1999                         (cd "$dir" && . ./$file)
2000                         ;;
2001                 *)
2002                         . ./$file
2003                         ;;
2004                 esac
2005                 ;;
2006         *)
2007                 case "$file" in
2008                 */*)
2009                         dir=`expr X$file : 'X\(.*\)/'`
2010                         file=`expr X$file : 'X.*/\(.*\)'`
2011                         (set x $dir; shift; eval $mkdir_p)
2012                         sh <"$src/$dir/$file"
2013                         ;;
2014                 *)
2015                         sh <"$src/$file"
2016                         ;;
2017                 esac
2018                 ;;
2019         esac
2020 done
2021 if test -f "$src/config_h.SH"; then
2022         if test ! -f config.h; then
2023         : oops, they left it out of MANIFEST, probably, so do it anyway.
2024         . "$src/config_h.SH"
2025         fi
2026 fi
2027 EOS
2028
2029 : extract files and exit if asked to do so
2030 case "$extractsh" in
2031 true)
2032         case "$realsilent" in
2033         true) ;;
2034         *) exec 1>&4;;
2035         esac
2036         case "$config_sh" in
2037         '') config_sh='config.sh';;
2038         esac
2039         echo " "
2040         echo "Fetching answers from $config_sh..."
2041         cd ..
2042         . $config_sh
2043         test "$override" && . ./optdef.sh
2044         echo " "
2045         . UU/extract
2046         rm -rf UU
2047         echo "Extraction done."
2048         exit 0
2049         ;;
2050 esac
2051
2052 : Eunice requires " " instead of "", can you believe it
2053 echo " "
2054 : Here we go...
2055 echo "Beginning of configuration questions for $package."
2056
2057 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
2058
2059 : first determine how to suppress newline on echo command
2060 echo " "
2061 echo "Checking echo to see how to suppress newlines..."
2062 (echo "hi there\c" ; echo " ") >.echotmp
2063 if $contains c .echotmp >/dev/null 2>&1 ; then
2064         echo "...using -n."
2065         n='-n'
2066         c=''
2067 else
2068         cat <<'EOM'
2069 ...using \c
2070 EOM
2071         n=''
2072         c='\c'
2073 fi
2074 echo $n "The star should be here-->$c"
2075 echo '*'
2076 rm -f .echotmp
2077
2078 : Now test for existence of everything in MANIFEST
2079 echo " "
2080 if test -f "$rsrc/MANIFEST"; then
2081         echo "First let's make sure your kit is complete.  Checking..." >&4
2082         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
2083                 (split -l 50 2>/dev/null || split -50)
2084         rm -f missing
2085         tmppwd=`pwd`
2086         for filelist in x??; do
2087                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
2088                         >/dev/null 2>>"$tmppwd/missing")
2089         done
2090         if test -s missing; then
2091                 cat missing >&4
2092                 cat >&4 <<'EOM'
2093
2094 THIS PACKAGE SEEMS TO BE INCOMPLETE.
2095
2096 You have the option of continuing the configuration process, despite the
2097 distinct possibility that your kit is damaged, by typing 'y'es.  If you
2098 do, don't blame me if something goes wrong.  I advise you to type 'n'o
2099 and contact the author (perlbug@perl.org).
2100
2101 EOM
2102                 echo $n "Continue? [n] $c" >&4
2103                 read ans
2104                 case "$ans" in
2105                 y*)
2106                         echo "Continuing..." >&4
2107                         rm -f missing
2108                         ;;
2109                 *)
2110                         echo "ABORTING..." >&4
2111                         kill $$
2112                         ;;
2113                 esac
2114         else
2115                 echo "Looks good..."
2116         fi
2117 else
2118         echo "There is no MANIFEST file.  I hope your kit is complete !"
2119 fi
2120 rm -f missing x??
2121
2122 : Find the appropriate value for a newline for tr
2123 echo " "
2124 if test -n "$DJGPP"; then
2125        trnl='\012'
2126 fi
2127 if test X"$trnl" = X; then
2128         case "`echo foo|tr '\n' x 2>/dev/null`" in
2129         foox) trnl='\n' ;;
2130         esac
2131 fi
2132 if test X"$trnl" = X; then
2133         case "`echo foo|tr '\012' x 2>/dev/null`" in
2134         foox) trnl='\012' ;;
2135         esac
2136 fi
2137 if test X"$trnl" = X; then
2138        case "`echo foo|tr '\r\n' xy 2>/dev/null`" in
2139        fooxy) trnl='\n\r' ;;
2140        esac
2141 fi
2142 if test X"$trnl" = X; then
2143         cat <<EOM >&2
2144
2145 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
2146
2147 EOM
2148         exit 1
2149 fi
2150
2151 : compute the number of columns on the terminal for proper question formatting
2152 case "$COLUMNS" in
2153 '') COLUMNS='80';;
2154 esac
2155
2156 : set up the echo used in my read
2157 myecho="case \"\$xxxm\" in
2158 '') echo $n \"\$rp $c\" >&4;;
2159 *) case \"\$rp\" in
2160         '') echo $n \"[\$xxxm] $c\";;
2161         *)
2162                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
2163                         echo \"\$rp\" >&4
2164                         echo $n \"[\$xxxm] $c\" >&4
2165                 else
2166                         echo $n \"\$rp [\$xxxm] $c\" >&4
2167                 fi
2168                 ;;
2169         esac;;
2170 esac"
2171
2172 : now set up to do reads with possible shell escape and default assignment
2173 cat <<EOSC >myread
2174 $startsh
2175 xxxm=\$dflt
2176 $myecho
2177 ans='!'
2178 case "\$fastread" in
2179 yes) case "\$dflt" in
2180         '') ;;
2181         *) ans='';
2182                 case "\$silent-\$rp" in
2183                 true-) ;;
2184                 *) echo " " >&4;;
2185                 esac;;
2186         esac;;
2187 *) case "\$silent" in
2188         true) case "\$rp" in
2189                 '') ans='';;
2190                 esac;;
2191         esac;;
2192 esac
2193 while expr "X\$ans" : "X!" >/dev/null; do
2194         read answ
2195         set x \$xxxm
2196         shift
2197         aok=''; eval "ans=\\"\$answ\\"" && aok=y
2198         case  "\$answ" in
2199         "!")
2200                 sh 1>&4
2201                 echo " "
2202                 $myecho
2203                 ;;
2204         !*)
2205                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
2206                 shift
2207                 sh 1>&4 -c "\$*"
2208                 echo " "
2209                 $myecho
2210                 ;;
2211         "\$ans")
2212                 case "\$ans" in
2213                 \\&*)
2214                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
2215                         shift
2216                         case "\$1" in
2217                         -d)
2218                                 fastread=yes
2219                                 echo "(OK, I'll run with -d after this question.)" >&4
2220                                 ;;
2221                         -*)
2222                                 echo "*** Sorry, \$1 not supported yet." >&4
2223                                 ;;
2224                         esac
2225                         $myecho
2226                         ans=!
2227                         ;;
2228                 esac;;
2229         *)
2230                 case "\$aok" in
2231                 y)
2232                         echo "*** Substitution done -- please confirm."
2233                         xxxm="\$ans"
2234                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
2235                         xxxm="\$ans"
2236                         ans=!
2237                         ;;
2238                 *)
2239                         echo "*** Error -- try again."
2240                         ans=!
2241                         ;;
2242                 esac
2243                 $myecho
2244                 ;;
2245         esac
2246         case "\$ans\$xxxm\$nostick" in
2247         '')
2248                 ans=!
2249                 $myecho
2250                 ;;
2251         esac
2252 done
2253 case "\$ans" in
2254 '') ans="\$xxxm";;
2255 esac
2256 EOSC
2257
2258 : create .config dir to save info across Configure sessions
2259 test -d ../.config || mkdir ../.config
2260 cat >../.config/README <<EOF
2261 This directory created by Configure to save information that should
2262 persist across sessions for $package.
2263
2264 You may safely delete it if you wish.
2265 EOF
2266
2267 : See if we are using a devel version and want that
2268 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
2269 case "$usedevel" in
2270 $define|true|[yY]*)
2271     usedevel="$define" ;;
2272 *) case "$xversion" in
2273    *[13579])
2274         cat >&4 <<EOH
2275 *** WHOA THERE!!! ***
2276
2277     This is an UNSTABLE DEVELOPMENT release.
2278     The version of this $package distribution is $xversion, that is, odd,
2279     (as opposed to even) and that signifies a development release.
2280     If you want a maintenance release, you want an even-numbered version.
2281
2282     Do ***NOT*** install this into production use.
2283     Data corruption and crashes are possible.
2284
2285     It is most seriously suggested that you do not continue any further
2286     unless you want to help in developing and debugging Perl.
2287
2288     If you *still* want to build perl, you can answer 'y' now,
2289     or pass -Dusedevel to Configure.
2290
2291 EOH
2292         rp='Do you really want to continue?'
2293         dflt='n'
2294         . ./myread
2295         case "$ans" in
2296         [yY]) echo >&4 "Okay, continuing."
2297               usedevel="$define" ;;
2298         *) echo >&4 "Okay, bye."
2299            exit 1
2300            ;;
2301         esac
2302         ;;
2303     esac
2304     usedevel="$undef"
2305     ;;
2306 esac
2307 case "$usedevel" in
2308 $define|true|[yY]*)
2309         case "$versiononly" in
2310         '') versiononly="$define" ;;
2311         esac
2312         case "$installusrbinperl" in
2313         '') installusrbinperl="$undef" ;;
2314         esac
2315         ;;
2316 esac
2317
2318 : general instructions
2319 needman=true
2320 firsttime=true
2321 user=`(logname) 2>/dev/null`
2322 case "$user" in
2323 '') user=`whoami 2>&1`;;
2324 esac
2325 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
2326         firsttime=false
2327         echo " "
2328         rp='Would you like to see the instructions?'
2329         dflt=n
2330         . ./myread
2331         case "$ans" in
2332         [yY]*) ;;
2333         *) needman=false;;
2334         esac
2335 fi
2336 if $needman; then
2337         cat <<EOH
2338
2339 This installation shell script will examine your system and ask you questions
2340 to determine how the perl5 package should be installed. If you get
2341 stuck on a question, you may use a ! shell escape to start a subshell or
2342 execute a command.  Many of the questions will have default answers in square
2343 brackets; typing carriage return will give you the default.
2344
2345 On some of the questions which ask for file or directory names you are allowed
2346 to use the ~name construct to specify the login directory belonging to "name",
2347 even if you don't have a shell which knows about that.  Questions where this is
2348 allowed will be marked "(~name ok)".
2349
2350 EOH
2351         rp=''
2352         dflt='Type carriage return to continue'
2353         . ./myread
2354         cat <<'EOH'
2355
2356 The prompter used in this script allows you to use shell variables and
2357 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
2358 in the default answer, as if the default line was a set of arguments given to a
2359 script shell.  This means you may also use $* to repeat the whole default line,
2360 so you do not have to re-type everything to add something to the default.
2361
2362 Every time there is a substitution, you will have to confirm.  If there is an
2363 error (e.g. an unmatched backtick), the default answer will remain unchanged
2364 and you will be prompted again.
2365
2366 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
2367 the questions and use the computed defaults (or the previous answers if there
2368 was already a config.sh file). Type 'Configure -h' for a list of options.
2369 You may also start interactively and then answer '& -d' at any prompt to turn
2370 on the non-interactive behaviour for the remainder of the execution.
2371
2372 EOH
2373         . ./myread
2374         cat <<EOH
2375
2376 Much effort has been expended to ensure that this shell script will run on any
2377 Unix system.  If despite that it blows up on yours, your best bet is to edit
2378 Configure and run it again.  If you can't run Configure for some reason,
2379 you'll have to generate a config.sh file by hand.  Whatever problems you
2380 have, let me (perlbug@perl.org) know how I blew it.
2381
2382 This installation script affects things in two ways:
2383
2384 1) it may do direct variable substitutions on some of the files included
2385    in this kit.
2386 2) it builds a config.h file for inclusion in C programs.  You may edit
2387    any of these files as the need arises after running this script.
2388
2389 If you make a mistake on a question, there is no easy way to back up to it
2390 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2391 files.  Configure will offer to let you do this before it runs the SH files.
2392
2393 EOH
2394         dflt='Type carriage return to continue'
2395         . ./myread
2396         case "$firsttime" in
2397         true) echo $user >>../.config/instruct;;
2398         esac
2399 fi
2400
2401 : Set 'sysroot' to change the logical root directory to your headers and libraries see man gcc
2402 : This is primarily meant for cross-compile environments, and may fail to be useful in other cases
2403 if test "X$sysroot" = X; then
2404     sysroot=""
2405 else
2406     case "$cc" in
2407         *gcc*|*g++*)
2408             echo "Using $sysroot to find your headers and libraries, adding to ccflags"
2409             # _sysroot is used in places where we need --sysroot=foo
2410             # but using the rest of the flags could cause issues.
2411             _sysroot="--sysroot=$sysroot";
2412             case "$ccflags" in
2413                 *sysroot*) ;;
2414                 'undef'|*)
2415                 ccflags="$ccflags $_sysroot"
2416             esac
2417             case "$ldflags" in
2418                 *sysroot*) ;;
2419                 'undef'|*)
2420                 ldflags="$ldflags $_sysroot"
2421             esac
2422             case "$cppflags" in
2423                 *sysroot*) ;;
2424                 'undef'|*)
2425                 cppflags="$cppflags $_sysroot"
2426             esac
2427             # lddlflags updated below in lddlflags section;
2428             # same with cccdlflags
2429             ;;
2430     esac
2431
2432     # Adjust some defaults to also use $sysroot
2433     for var in xlibpth loclibpth locincpth glibpth; do
2434         eval xxx=\$$var
2435         eval $var=''
2436         for path in $xxx; do
2437             eval $var=\"\$$var $sysroot$path\"
2438         done
2439     done
2440
2441 fi
2442
2443 : find out where common programs are
2444 echo " "
2445 echo "Locating common programs..." >&4
2446 cat <<EOSC >loc
2447 $startsh
2448 case \$# in
2449 0) exit 1;;
2450 esac
2451 thing=\$1
2452 shift
2453 dflt=\$1
2454 shift
2455 for dir in \$*; do
2456         case "\$thing" in
2457         .)
2458         if test -d \$dir/\$thing; then
2459                 echo \$dir
2460                 exit 0
2461         fi
2462         ;;
2463         *)
2464         for thisthing in \$dir/\$thing; do
2465                 : just loop through to pick last item
2466         done
2467         if test -f \$thisthing; then
2468                 echo \$thisthing
2469                 exit 0
2470         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2471                 echo \$thisthing
2472                 exit 0
2473         elif test -f \$dir/\$thing.exe; then
2474                 if test -n "$DJGPP"; then
2475                         echo \$dir/\$thing.exe
2476                 elif test "$eunicefix" != ":"; then
2477                         : on Eunice apparently
2478                         echo \$dir/\$thing
2479                 fi
2480                 exit 0
2481         fi
2482         ;;
2483         esac
2484 done
2485 echo \$dflt
2486 exit 1
2487 EOSC
2488 chmod +x loc
2489 $eunicefix loc
2490 loclist="
2491 awk
2492 cat
2493 chmod
2494 comm
2495 cp
2496 echo
2497 expr
2498 grep
2499 ls
2500 mkdir
2501 rm
2502 sed
2503 sort
2504 touch
2505 tr
2506 uniq
2507 "
2508 trylist="
2509 ar
2510 bison
2511 byacc
2512 cpp
2513 csh
2514 date
2515 egrep
2516 gmake
2517 gzip
2518 less
2519 ln
2520 make
2521 more
2522 nm
2523 nroff
2524 perl
2525 pg
2526 test
2527 uname
2528 zip
2529 "
2530 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2531 pth="$pth $sysroot/lib $sysroot/usr/lib"
2532 for file in $loclist; do
2533         eval xxx=\$$file
2534         case "$xxx" in
2535         /*|?:[\\/]*)
2536                 if test -f "$xxx"; then
2537                         : ok
2538                 else
2539                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2540                         xxx=`./loc $file $file $pth`
2541                 fi
2542                 ;;
2543         '') xxx=`./loc $file $file $pth`;;
2544         *) xxx=`./loc $xxx $xxx $pth`;;
2545         esac
2546         eval $file=$xxx$_exe
2547         eval _$file=$xxx
2548         case "$xxx" in
2549         /*)
2550                 echo $file is in $xxx.
2551                 ;;
2552         ?:[\\/]*)
2553                 echo $file is in $xxx.
2554                 ;;
2555         *)
2556                 echo "I don't know where '$file' is, and my life depends on it." >&4
2557                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2558                 exit 1
2559                 ;;
2560         esac
2561 done
2562 echo " "
2563 echo "Don't worry if any of the following aren't found..."
2564 say=offhand
2565 for file in $trylist; do
2566         eval xxx=\$$file
2567         case "$xxx" in
2568         /*|?:[\\/]*)
2569                 if test -f "$xxx"; then
2570                         : ok
2571                 else
2572                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2573                         xxx=`./loc $file $file $pth`
2574                 fi
2575                 ;;
2576         '') xxx=`./loc $file $file $pth`;;
2577         *) xxx=`./loc $xxx $xxx $pth`;;
2578         esac
2579         eval $file=$xxx$_exe
2580         eval _$file=$xxx
2581         case "$xxx" in
2582         /*)
2583                 echo $file is in $xxx.
2584                 ;;
2585         ?:[\\/]*)
2586                 echo $file is in $xxx.
2587                 ;;
2588         *)
2589                 echo "I don't see $file out there, $say."
2590                 say=either
2591                 ;;
2592         esac
2593 done
2594 case "$egrep" in
2595 egrep)
2596         echo "Substituting grep for egrep."
2597         egrep=$grep
2598         _egrep=$grep
2599         ;;
2600 esac
2601 case "$less" in
2602 '')     ;;
2603 *)      if $less -R </dev/null >/dev/null 2>&1; then
2604                echo "Substituting less -R for less."
2605                less="$less -R"
2606                _less=$less
2607         fi
2608         ;;
2609 esac
2610 case "$ln" in
2611 ln)
2612         echo "Substituting cp for ln."
2613         ln=$cp
2614         _ln=$cp
2615         ;;
2616 esac
2617 case "$make" in
2618 make)
2619         case "$gmake" in
2620         gmake)
2621         echo "I can't find make or gmake, and my life depends on it." >&4
2622         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2623         exit 1
2624         ;;
2625         esac
2626         ;;
2627 esac
2628 case "$gmake" in
2629 gmake)  ;;
2630 *)      # We can't have osname yet.
2631         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2632                 # Assume that gmake, if found, is definitely GNU make
2633                 # and prefer it over the system make.
2634                 echo "Substituting gmake for make."
2635                 make=$gmake
2636                 _make=$gmake
2637         fi
2638         ;;
2639 esac
2640 case "$test" in
2641 test)
2642         echo "Hopefully test is built into your sh."
2643         ;;
2644 *)
2645         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2646                 echo "Using the test built into your sh."
2647                 test=test
2648                 _test=test
2649         fi
2650         ;;
2651 esac
2652 case "$echo" in
2653 echo)
2654         echo "Hopefully echo is built into your sh."
2655         ;;
2656 '') ;;
2657 *)
2658         echo " "
2659 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2660         $echo $n "hi there$c" >foo1
2661         echo $n "hi there$c" >foo2
2662         if cmp foo1 foo2 >/dev/null 2>&1; then
2663                 echo "They are compatible.  In fact, they may be identical."
2664         else
2665                 case "$n" in
2666                 '-n') n='' c='\c';;
2667                 *) n='-n' c='';;
2668                 esac
2669                 cat <<FOO
2670 They are not compatible!  You are probably running ksh on a non-USG system.
2671 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2672 have echo built in and we may have to run some Bourne shell scripts.  That
2673 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2674
2675 FOO
2676                 $echo $n "The star should be here-->$c"
2677                 $echo "*"
2678         fi
2679         $rm -f foo1 foo2
2680         ;;
2681 esac
2682
2683 # This question was auctioned at YAPC::Europe-2007 in Vienna
2684 # I never promised you could answer it. I only auctioned the question.
2685 cat <<FOO
2686 The following message is sponsored by
2687
2688   Dresden.pm<--The stars should be here.
2689
2690 Dear Perl user, system administrator or package
2691 maintainer, the Perl community sends greetings to
2692 you. Do you (emblematical) greet back [Y/n]? n
2693
2694 FOO
2695
2696 : Check what type of C compiler we use
2697 cat <<EOS >trygcc
2698 $startsh
2699 EOS
2700 cat <<'EOSC' >>trygcc
2701 case "$cc" in
2702 '') ;;
2703 *)  $rm -f try try.*
2704     $cat >try.c <<EOM
2705 int main(int argc, char *argv[]) {
2706   return 0;
2707 }
2708 EOM
2709     if $cc -o try $ccflags $ldflags try.c; then
2710        :
2711     else
2712         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2713         despair=yes
2714         trygcc=yes
2715         case "$cc" in
2716         *gcc*) trygcc=no ;;
2717         esac
2718         # Skip this test because it gives a false match on output like:
2719         #    ./trygcc: line 23: cc: command not found
2720         # case "`$cc -v -c try.c 2>&1`" in
2721         # *gcc*) trygcc=no ;;
2722         # esac
2723         if $test X"$trygcc" = Xyes; then
2724             if gcc -o try -c try.c; then
2725                 echo " "
2726                 echo "You seem to have a working gcc, though." >&4
2727                 # Switching compilers may undo the work of hints files.
2728                 # The most common problem is -D_REENTRANT for threads.
2729                 # This heuristic catches that case, but gets false positives
2730                 # if -Dusethreads was not actually specified.  Better to
2731                 # bail out here with a useful message than fail
2732                 # mysteriously later. Should we perhaps just try to
2733                 # re-invoke Configure -Dcc=gcc config_args ?
2734                 if $test -f usethreads.cbu; then
2735                         $cat >&4 <<EOM
2736
2737 *** However, any setting of the C compiler flags (e.g. for thread support)
2738 *** will be lost.  It may be necessary for you to restart Configure and
2739 *** add -Dcc=gcc to your Configure command line.
2740
2741 EOM
2742                         rp="Would you like to go ahead and try gcc anyway?"
2743                         dflt=n
2744                 else
2745                         rp="Would you like to use it?"
2746                         dflt=y
2747                 fi
2748                 if $test -f myread; then
2749                     . ./myread
2750                 else
2751                     if $test -f UU/myread; then
2752                         . ./UU/myread
2753                     else
2754                         echo "Cannot find myread, sorry.  Aborting." >&2
2755                         exit 1
2756                     fi
2757                 fi
2758                 case "$ans" in
2759                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
2760                 esac
2761             fi
2762         fi
2763     fi
2764     $rm -f try try.*
2765     ;;
2766 esac
2767 EOSC
2768
2769 cat <<EOS >checkcc
2770 $startsh
2771 EOS
2772 cat <<'EOSC' >>checkcc
2773 case "$cc" in
2774 '') ;;
2775 *)  $rm -f try try.*
2776     $cat >try.c <<EOM
2777 int main(int argc, char *argv[]) {
2778   return 0;
2779 }
2780 EOM
2781     if $cc -o try $ccflags $ldflags try.c; then
2782        :
2783     else
2784         if $test X"$despair" = Xyes; then
2785            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2786         fi
2787         $cat >&4 <<EOM
2788 You need to find a working C compiler.
2789 Either (purchase and) install the C compiler supplied by your OS vendor,
2790 or for a free C compiler try http://gcc.gnu.org/
2791 I cannot continue any further, aborting.
2792 EOM
2793         exit 1
2794     fi
2795     $rm -f try try.*
2796     ;;
2797 esac
2798 EOSC
2799
2800 : determine whether symbolic links are supported
2801 echo " "
2802 $touch blurfl
2803 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2804         echo "Symbolic links are supported." >&4
2805         lns="$ln -s"
2806 else
2807         echo "Symbolic links are NOT supported." >&4
2808         lns="$ln"
2809 fi
2810 $rm -f blurfl sym
2811
2812 : determine whether symbolic links are supported
2813 echo " "
2814 case "$lns" in
2815 *"ln"*" -s")
2816         echo "Checking how to test for symbolic links..." >&4
2817         $lns blurfl sym
2818         if $test "X$issymlink" = X; then
2819                 case "$newsh" in
2820                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2821                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2822                 esac
2823                 if test $? = 0; then
2824                         issymlink="test -h"
2825                 else
2826                         echo "Your builtin 'test -h' may be broken." >&4
2827                         case "$test" in
2828                         /*)     ;;
2829                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2830                                 for p in $pth
2831                                 do
2832                                         if test -f "$p/$test"; then
2833                                                 test="$p/$test"
2834                                                 break
2835                                         fi
2836                                 done
2837                                 ;;
2838                         esac
2839                         case "$test" in
2840                         /*)
2841                                 echo "Trying external '$test -h'." >&4
2842                                 issymlink="$test -h"
2843                                 if $test ! -h sym >/dev/null 2>&1; then
2844                                         echo "External '$test -h' is broken, too." >&4
2845                                         issymlink=''
2846                                 fi
2847                                 ;;
2848                         *)      issymlink='' ;;
2849                         esac
2850                 fi
2851         fi
2852         if $test "X$issymlink" = X; then
2853                 if $test -L sym 2>/dev/null; then
2854                         issymlink="$test -L"
2855                         echo "The builtin '$test -L' worked." >&4
2856                 fi
2857         fi
2858         if $test "X$issymlink" != X; then
2859                 echo "You can test for symbolic links with '$issymlink'." >&4
2860         else
2861                 echo "I do not know how you can test for symbolic links." >&4
2862         fi
2863         $rm -f blurfl sym
2864         ;;
2865 *)      echo "No symbolic links, so not testing for their testing..." >&4
2866         ;;
2867 esac
2868 echo " "
2869
2870 : Make symlinks util
2871 case "$mksymlinks" in
2872 $define|true|[yY]*)
2873         case "$src" in
2874         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2875                 exit 1
2876                 ;;
2877         *)      case "$lns:$issymlink" in
2878                 *"ln"*" -s:"*"test -"?)
2879                         echo "Creating the symbolic links..." >&4
2880                         cd ..
2881                         awk '{print $1}' $src/MANIFEST | sed -e 's:/\([^/]*\)$: \1:' |
2882                         awk 'NF == 1 {
2883                                 dir=".";
2884                                 file=$1 "";
2885                              }
2886                              NF == 2 {
2887                                 dir=$1 "";
2888                                 file=$2 "";
2889                              }
2890                              {
2891                                  print "# dir = ", dir, "file = ", file
2892                                  mf[dir] = mf[dir]" "source"/"dir"/"file;
2893                              } END {
2894                                  for (d in mf) {
2895                                      if (d != ".") { print("mkdir -p "d) }
2896                                      print("ln -sf "mf[d]" "d);
2897                                  }
2898                              }' source="$src" > UU/mksymlinks.$$
2899                         sh UU/mksymlinks.$$
2900                         rm UU/mksymlinks.$$
2901                         # Sanity check 1.
2902                         if test ! -d t/base; then
2903                                 echo "Failed to create the subdirectories.  Aborting." >&4
2904                                 exit 1
2905                         fi
2906                         # Sanity check 2.
2907                         if test ! -f t/base/lex.t; then
2908                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2909                                 exit 1
2910                         fi
2911                         if test ! -f win32/win32.c; then
2912                                 echo "Failed to create the symlinks (win32/win32.c missing).  Aborting." >&4
2913                                 exit 1
2914                         fi
2915                         cd UU
2916                         ;;
2917                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2918                         ;;
2919                 esac
2920                 ;;
2921         esac
2922         ;;
2923 esac
2924
2925 : Check for Cross-Compilation
2926 if $test "X$targethost" = "X"; then
2927     targethost=""
2928 fi
2929 if $test "X$targetenv" = "X"; then
2930     targetenv=""
2931 fi
2932 case "$usecrosscompile" in
2933 $define|true|[yY]*)
2934         $echo "Cross-compiling..."
2935         croak=''
2936         case "$cc" in
2937         *-gcc*|*-g++*) # A cross-compiling gcc, probably.
2938             # arm-linux-androideabi-gcc  -> arm-linux-androideabi
2939             # x86_64-w64-mingw32-gcc.exe -> x86_64-w64-mingw32
2940             targetarch=`$echo $cc|$sed 's/-g[c\+][c\+].*$//'`
2941             ar=`$echo $cc|$sed 's/-g[c\+][c\+]/-ar/'`
2942             # leave out ld, choosing it is more complex
2943             nm=`$echo $cc|$sed 's/-g[c\+][c\+]/-nm/'`
2944             ranlib=`$echo $cc|$sed 's/-g[c\+][c\+]/-ranlib/'`
2945             # We are in a weird spot. Just before us, some values
2946             # were 'saved', to be restored after the hints are
2947             # run.  This means that the changes we made to ar,
2948             # nm and ranlib will get reverted.
2949             # To avoid that, we hijack the saving mechanism and
2950             # have it save our new values.
2951             for file in ar nm ranlib; do
2952                 eval xxx=\$$file
2953                 eval $file=$xxx$_exe
2954                 eval _$file=$xxx
2955             done
2956         ;;
2957         esac
2958         case "$targetarch" in
2959         '') echo "Targetarch not defined." >&4; croak=y ;;
2960         *)  echo "Using targetarch $targetarch." >&4 ;;
2961         esac
2962         case "$targethost" in
2963         '') echo "Targethost not defined." >&4; croak=y ;;
2964         *)  echo "Using targethost $targethost." >&4
2965         esac
2966         locincpth=' '
2967         loclibpth=' '
2968         case "$croak" in
2969         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2970         esac
2971     : compile a host miniperl and generate_uudmap, unless we got passed them
2972     if $test "X$hostperl" = X; then
2973       echo "Building host miniperl and generate_uudmap binaries" >&4
2974       before_host=`pwd`
2975       cd ..
2976       cd $src
2977       src=`pwd`
2978       rm -rf $src/host
2979       mkdir $src/host
2980       cd $src/host
2981       $src/Configure -des -Dusedevel -Dmksymlinks
2982       $make miniperl
2983       case "$hostgenerate" in
2984       '') $make generate_uudmap
2985           hostgenerate=$src/host/generate_uudmap
2986           ;;
2987        "$undef") hostgenerate=''
2988           ;;
2989       esac
2990       hostperl=$src/host/miniperl
2991       cd $before_host
2992     fi
2993     hostosname=`$hostperl -le 'print $^O'`
2994     ;;
2995 *)
2996     usecrosscompile="$undef"
2997     ;;
2998 esac
2999
3000 : Define -Dtargethost=somecomputer to run compiled tests on another machine
3001 case "$targethost" in
3002     '') echo "Checking for cross-compile" >&4
3003     case "$usecrosscompile$multiarch" in
3004        *$define*) echo "Skipping the try tests in the rest of Configure as no targethost was defined when cross-compiling" >&4
3005          if [ -f Makefile ]; then
3006            echo " "
3007            echo "Now you must ensure config.sh, config.h and the generated headers exist and run a $make."
3008          else
3009            echo "Configure done."
3010          fi
3011        exit 0
3012        ;;
3013      *) echo "No targethost for running compiler tests against defined, running locally" >&4
3014         run=''
3015         to=:
3016         from=:
3017         ;;
3018     esac
3019     ;;
3020     *) echo "Using targethost $targethost." >&4
3021         case "$src" in
3022         /*) run=$src/Cross/run
3023             targetmkdir=$src/Cross/mkdir
3024             to=$src/Cross/to
3025             from=$src/Cross/from
3026             ;;
3027         *)  pwd=`$test -f ../Configure & cd ..; pwd`
3028             run=$pwd/Cross/run
3029             targetmkdir=$pwd/Cross/mkdir
3030             to=$pwd/Cross/to
3031             from=$pwd/Cross/from
3032             ;;
3033         esac
3034         case "$targetrun" in
3035         '') targetrun=ssh ;;
3036         esac
3037         case "$targetto" in
3038         '') targetto=scp ;;
3039         esac
3040         case "$targetfrom" in
3041         '') targetfrom=scp ;;
3042         esac
3043         run=$run-$targetrun
3044         to=$to-$targetto
3045         from=$from-$targetfrom
3046         case "$targetdir" in
3047         '')  targetdir=/tmp
3048              echo "Guessing targetdir $targetdir." >&4
3049              ;;
3050         esac
3051         case "$targetuser" in
3052         '')  targetuser=root
3053              echo "Guessing targetuser $targetuser." >&4
3054              ;;
3055         esac
3056         case "$targetport" in
3057         '')  targetport=22
3058              echo "Guessing targetport $targetport." >&4
3059              ;;
3060         esac
3061         case "$targetfrom" in
3062         scp)    q=-q ;;
3063         *)      q='' ;;
3064         esac
3065         case "$targetrun" in
3066         ssh|rsh)
3067             cat >$run <<EOF
3068 #!/bin/sh
3069 env=''
3070 case "\$1" in
3071 -cwd)
3072   shift
3073   cwd=\$1
3074   shift
3075   ;;
3076 esac
3077 case "\$1" in
3078 -env)
3079   shift
3080   env=\$1
3081   shift
3082   ;;
3083 esac
3084 case "\$cwd" in
3085 '') cwd=$targetdir ;;
3086 esac
3087 exe=\$1
3088 shift
3089 $to \$exe
3090 $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@"
3091 EOF
3092             ;;
3093         adb)
3094             $touch $run
3095             ;;
3096         *)  echo "Unknown targetrun '$targetrun'" >&4
3097             exit 1
3098             ;;
3099         esac
3100         case "$targetmkdir" in
3101         */Cross/mkdir)
3102             cat >$targetmkdir <<EOF
3103 #!/bin/sh
3104 $targetrun -p $targetport -l $targetuser $targethost "mkdir -p \$@"
3105 EOF
3106             $chmod a+rx $targetmkdir
3107             ;;
3108         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
3109             exit 1
3110             ;;
3111         esac
3112         case "$targetto" in
3113         scp|rcp)
3114             cat >$to <<EOF
3115 #!/bin/sh
3116 for f in \$@
3117 do
3118   case "\$f" in
3119   /*)
3120     $targetmkdir \`dirname \$f\`
3121     $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f           2>/dev/null  || exit 1
3122     ;;
3123   *)
3124     $targetmkdir $targetdir/\`dirname \$f\`
3125     $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1
3126     ;;
3127   esac
3128 done
3129 exit 0
3130 EOF
3131             ;;
3132         cp) cat >$to <<EOF
3133 #!/bin/sh
3134 for f in \$@
3135 do
3136   case "\$f" in
3137   /*)
3138     $mkdir -p $targetdir/\`dirname \$f\`
3139     $cp \$f $targetdir/\$f || exit 1
3140     ;;
3141   *)
3142     $targetmkdir $targetdir/\`dirname \$f\`
3143     $cp \$f $targetdir/\$f || exit 1
3144     ;;
3145   esac
3146 done
3147 exit 0
3148 EOF
3149             ;;
3150         *)  echo "Unknown targetto '$targetto'" >&4
3151             exit 1
3152             ;;
3153         esac
3154         case "$targetfrom" in
3155         scp|rcp)
3156           cat >$from <<EOF
3157 #!/bin/sh
3158 for f in \$@
3159 do
3160   $rm -f \$f
3161   $targetfrom -P $targetport $q $targetuser@$targethost:$targetdir/\$f . || exit 1
3162 done
3163 exit 0
3164 EOF
3165             ;;
3166         cp) cat >$from <<EOF
3167 #!/bin/sh
3168 for f in \$@
3169 do
3170   $rm -f \$f
3171   cp $targetdir/\$f . || exit 1
3172 done
3173 exit 0
3174 EOF
3175             ;;
3176         *)  echo "Unknown targetfrom '$targetfrom'" >&4
3177             exit 1
3178             ;;
3179         esac
3180         if $test ! -f $run; then
3181             echo "Target 'run' script '$run' not found." >&4
3182         else
3183             $chmod a+rx $run
3184         fi
3185         if $test ! -f $to; then
3186             echo "Target 'to' script '$to' not found." >&4
3187         else
3188             $chmod a+rx $to
3189         fi
3190         if $test ! -f $from; then
3191             echo "Target 'from' script '$from' not found." >&4
3192         else
3193             $chmod a+rx $from
3194         fi
3195         if $test ! -f $run -o ! -f $to -o ! -f $from; then
3196             exit 1
3197         fi
3198         cat >&4 <<EOF
3199 Using '$run' for remote execution,
3200 and '$from' and '$to'
3201 for remote file transfer.
3202 EOF
3203         ;;
3204 *)      run=''
3205         to=:
3206         from=:
3207         usecrosscompile="$undef"
3208         targetarch=''
3209         ;;
3210 esac
3211
3212 : see whether [:lower:] and [:upper:] are supported character classes
3213 echo " "
3214 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | $tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
3215 ABYZ-abyz)
3216         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
3217         up='[:upper:]'
3218         low='[:lower:]'
3219         ;;
3220 *)      # There is a discontinuity in EBCDIC between 'R' and 'S'
3221         # (0xd9 and 0xe2), therefore that is a nice testing point.
3222         if test "X$up" = X -o "X$low" = X; then
3223             case "`echo RS | $tr '[R-S]' '[r-s]' 2>/dev/null`" in
3224             rs) up='[A-Z]'
3225                 low='[a-z]'
3226                 ;;
3227             esac
3228         fi
3229         if test "X$up" = X -o "X$low" = X; then
3230             case "`echo RS | $tr R-S r-s 2>/dev/null`" in
3231             rs) up='A-Z'
3232                 low='a-z'
3233                 ;;
3234             esac
3235         fi
3236         if test "X$up" = X -o "X$low" = X; then
3237             case "`echo RS | od -x 2>/dev/null`" in
3238             *D9E2*|*d9e2*)
3239                 echo "Hey, this might be EBCDIC." >&4
3240                 if test "X$up" = X -o "X$low" = X; then
3241                     case "`echo RS | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
3242                     rs) up='[A-IJ-RS-Z]'
3243                         low='[a-ij-rs-z]'
3244                         ;;
3245                     esac
3246                 fi
3247                 if test "X$up" = X -o "X$low" = X; then
3248                     case "`echo RS | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
3249                     rs) up='A-IJ-RS-Z'
3250                         low='a-ij-rs-z'
3251                         ;;
3252                     esac
3253                 fi
3254                 ;;
3255             esac
3256         fi
3257 esac
3258 case "`echo RS | $tr \"$up\" \"$low\" 2>/dev/null`" in
3259 rs)
3260     echo "Using $up and $low to convert case." >&4
3261     ;;
3262 *)
3263     echo "I don't know how to translate letters from upper to lower case." >&4
3264     echo "Your tr is not acting any way I know of." >&4
3265     exit 1
3266     ;;
3267 esac
3268 : set up the translation script tr, must be called with ./tr of course
3269 cat >tr <<EOSC
3270 $startsh
3271 case "\$1\$2" in
3272 '[A-Z][a-z]') exec $tr '$up' '$low';;
3273 '[a-z][A-Z]') exec $tr '$low' '$up';;
3274 esac
3275 exec $tr "\$@"
3276 EOSC
3277 chmod +x tr
3278 $eunicefix tr
3279
3280 : Try to determine whether config.sh was made on this system
3281 case "$config_sh" in
3282 '')
3283 myuname=`$uname -a 2>/dev/null`
3284 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
3285 # Downcase everything to avoid ambiguity.
3286 # Remove slashes and single quotes so we can use parts of this in
3287 # directory and file names.
3288 # Remove newlines so myuname is sane to use elsewhere.
3289 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
3290 # because the A-Z/a-z are not consecutive.
3291 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
3292         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
3293 newmyuname="$myuname"
3294 dflt=n
3295 case "$knowitall" in
3296 '')
3297         if test -f ../config.sh; then
3298                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
3299                         eval "`grep myuname= ../config.sh`"
3300                 fi
3301                 if test "X$myuname" = "X$newmyuname"; then
3302                         dflt=y
3303                 fi
3304         fi
3305         ;;
3306 *) dflt=y;;
3307 esac
3308
3309 : Get old answers from old config file if Configure was run on the
3310 : same system, otherwise use the hints.
3311 hint=default
3312 cd ..
3313 if test -f config.sh; then
3314         echo " "
3315         rp="I see a config.sh file.  Shall I use it to set the defaults?"
3316         . UU/myread
3317         case "$ans" in
3318         n*|N*) echo "OK, I'll ignore it."
3319                 mv config.sh config.sh.old
3320                 myuname="$newmyuname"
3321                 ;;
3322         *)  echo "Fetching default answers from your old config.sh file..." >&4
3323                 tmp_n="$n"
3324                 tmp_c="$c"
3325                 tmp_sh="$sh"
3326                 . ./config.sh
3327                 cp config.sh UU
3328                 n="$tmp_n"
3329                 c="$tmp_c"
3330                 : Older versions did not always set $sh.  Catch re-use of such
3331                 : an old config.sh.
3332                 case "$sh" in
3333                 '') sh="$tmp_sh" ;;
3334                 esac
3335                 hint=previous
3336                 ;;
3337         esac
3338 fi
3339 . ./UU/checkcc
3340 if test ! -f config.sh; then
3341         $cat <<EOM
3342
3343 First time through, eh?  I have some defaults handy for some systems
3344 that need some extra help getting the Configure answers right:
3345
3346 EOM
3347         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
3348         dflt=''
3349         : Half the following guesses are probably wrong... If you have better
3350         : tests or hints, please send them to perlbug@perl.org
3351         : The metaconfig authors would also appreciate a copy...
3352         $test -f /irix && osname=irix
3353         $test -f /xenix && osname=sco_xenix
3354         $test -f /dynix && osname=dynix
3355         $test -f /dnix && osname=dnix
3356         $test -f /lynx.os && osname=lynxos
3357         $test -f /unicos && osname=unicos && osvers=`$uname -r`
3358         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
3359         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
3360         $test -f /bin/mips && /bin/mips && osname=mips
3361         $test -d /usr/apollo/bin && osname=apollo
3362         $test -f /etc/saf/_sactab && osname=svr4
3363         $test -d /usr/include/minix && osname=minix && osvers=`$uname -r`
3364         $test -f /system/gnu_library/bin/ar.pm && osname=vos
3365         $test -f /sys/utilities/MultiView && osname=amigaos
3366         if $test -d /MachTen -o -d /MachTen_Folder; then
3367                 osname=machten
3368                 if $test -x /sbin/version; then
3369                         osvers=`/sbin/version | $awk '{print $2}' |
3370                         $sed -e 's/[A-Za-z]$//'`
3371                 elif $test -x /usr/etc/version; then
3372                         osvers=`/usr/etc/version | $awk '{print $2}' |
3373                         $sed -e 's/[A-Za-z]$//'`
3374                 else
3375                         osvers="$2.$3"
3376                 fi
3377         fi
3378
3379         $test -f /sys/posix.dll &&
3380                 $test -f /usr/bin/what &&
3381                 set X `/usr/bin/what /sys/posix.dll` &&
3382                 $test "$3" = UWIN &&
3383                 osname=uwin &&
3384                 osvers="$5"
3385
3386         if $test -f $uname; then
3387                 set X $myuname
3388                 shift
3389
3390                 case "$5" in
3391                 fps*) osname=fps ;;
3392                 mips*)
3393                         case "$4" in
3394                         umips) osname=umips ;;
3395                         *) osname=mips ;;
3396                         esac;;
3397                 [23]100) osname=mips ;;
3398                 i386*)
3399                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
3400                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
3401                                 osname='sco'
3402                                 osvers=$tmp
3403                         elif $test -f /etc/kconfig; then
3404                                 osname=isc
3405                                 if test "$lns" = "$ln -s"; then
3406                                         osvers=4
3407                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
3408                                         osvers=3
3409                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
3410                                         osvers=2
3411                                 fi
3412                         fi
3413                         tmp=''
3414                         ;;
3415                 pc*)
3416                         if test -n "$DJGPP"; then
3417                                 osname=dos
3418                                 osvers=djgpp
3419                         fi
3420                         ;;
3421                 esac
3422
3423                 case "$1" in
3424                 aix) osname=aix
3425                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
3426                         case "$tmp" in
3427                         # oslevel can fail with:
3428                         # oslevel: Unable to acquire lock.
3429                         *not\ found) osvers="$4"."$3" ;;
3430                         '<3240'|'<>3240') osvers=3.2.0 ;;
3431                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
3432                         '=3250'|'>3250') osvers=3.2.5 ;;
3433                         *) osvers=$tmp;;
3434                         esac
3435                         ;;
3436                 bitrig) osname=bitrig
3437                         osvers="$3"
3438                         ;;
3439                 bsd386) osname=bsd386
3440                         osvers=`$uname -r`
3441                         ;;
3442                 cygwin*) osname=cygwin
3443                         osvers="$3"
3444                         ;;
3445                 *dc.osx) osname=dcosx
3446                         osvers="$3"
3447                         ;;
3448                 dnix) osname=dnix
3449                         osvers="$3"
3450                         ;;
3451                 domainos) osname=apollo
3452                         osvers="$3"
3453                         ;;
3454                 dgux)   osname=dgux
3455                         osvers="$3"
3456                         ;;
3457                 dragonfly) osname=dragonfly
3458                         osvers="$3"
3459                         ;;
3460                 dynixptx*) osname=dynixptx
3461                         osvers=`echo "$4"|sed 's/^v//'`
3462                         ;;
3463                 freebsd) osname=freebsd
3464                         osvers="$3" ;;
3465                 genix)  osname=genix ;;
3466                 gnu)    osname=gnu
3467                         osvers="$3" ;;
3468                 hp*)    osname=hpux
3469                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
3470                         ;;
3471                 irix*)  osname=irix
3472                         case "$3" in
3473                         4*) osvers=4 ;;
3474                         5*) osvers=5 ;;
3475                         *)      osvers="$3" ;;
3476                         esac
3477                         ;;
3478                 linux)  osname=linux
3479                         case "$3" in
3480                         *)      osvers="$3" ;;
3481                         esac
3482                         $test -f /system/lib/libandroid.so && osname=linux-android
3483                         ;;
3484                 MiNT)   osname=mint
3485                         ;;
3486                 netbsd*) osname=netbsd
3487                         osvers="$3"
3488                         ;;
3489                 news-os) osvers="$3"
3490                         case "$3" in
3491                         4*) osname=newsos4 ;;
3492                         *) osname=newsos ;;
3493                         esac
3494                         ;;
3495                 nonstop-ux) osname=nonstopux ;;
3496                 openbsd) osname=openbsd
3497                         osvers="$3"
3498                         ;;
3499                 os2)    osname=os2
3500                         osvers="$4"
3501                         ;;
3502                 POSIX-BC | posix-bc ) osname=posix-bc
3503                         osvers="$3"
3504                         ;;
3505                 powerux | power_ux | powermax_os | powermaxos | \
3506                 powerunix | power_unix) osname=powerux
3507                         osvers="$3"
3508                         ;;
3509                 qnx) osname=qnx
3510                         osvers="$4"
3511                         ;;
3512                 solaris) osname=solaris
3513                         case "$3" in
3514                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3515                         *)      osvers="$3" ;;
3516                         esac
3517                         ;;
3518                 sunos) osname=sunos
3519                         case "$3" in
3520                         5*) osname=solaris
3521                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3522                         *)      osvers="$3" ;;
3523                         esac
3524                         ;;
3525                 titanos) osname=titanos
3526                         case "$3" in
3527                         1*) osvers=1 ;;
3528                         2*) osvers=2 ;;
3529                         3*) osvers=3 ;;
3530                         4*) osvers=4 ;;
3531                         *)      osvers="$3" ;;
3532                         esac
3533                         ;;
3534                 ultrix) osname=ultrix
3535                         osvers="$3"
3536                         ;;
3537                 osf1|mls+)      case "$5" in
3538                                 alpha)
3539                                         osname=dec_osf
3540                                         osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3541                                         case "$osvers" in
3542                                         [1-9].[0-9]*) ;;
3543                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3544                                         esac
3545                                         ;;
3546                         hp*)    osname=hp_osf1  ;;
3547                         mips)   osname=mips_osf1 ;;
3548                         esac
3549                         ;;
3550                 # UnixWare 7.1.2 is known as Open UNIX 8
3551                 openunix|unixware) osname=svr5
3552                         osvers="$4"
3553                         ;;
3554                 uts)    osname=uts
3555                         osvers="$3"
3556                         ;;
3557                 vos) osvers="$3"
3558                         ;;
3559                 $2) case "$osname" in
3560                         *isc*) ;;
3561                         *freebsd*) ;;
3562                         svr*)
3563                                 : svr4.x or possibly later
3564                                 case "svr$3" in
3565                                 ${osname}*)
3566                                         osname=svr$3
3567                                         osvers=$4
3568                                         ;;
3569                                 esac
3570                                 case "$osname" in
3571                                 svr4.0)
3572                                         : Check for ESIX
3573                                         if test -f /stand/boot ; then
3574                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3575                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3576                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3577                                                         if test -n "$isesix"; then
3578                                                                 osname=esix4
3579                                                         fi
3580                                                 fi
3581                                         fi
3582                                         ;;
3583                                 esac
3584                                 ;;
3585                         *)      if test -f /etc/systemid; then
3586                                         osname=sco
3587                                         set `echo $3 | $sed 's/\./ /g'` $4
3588                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3589                                                 osvers=$1.$2.$3
3590                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3591                                                 osvers=$1.$2
3592                                         elif $test -f $src/hints/sco_$1.sh; then
3593                                                 osvers=$1
3594                                         fi
3595                                 else
3596                                         case "$osname" in
3597                                         '') : Still unknown.  Probably a generic Sys V.
3598                                                 osname="sysv"
3599                                                 osvers="$3"
3600                                                 ;;
3601                                         esac
3602                                 fi
3603                                 ;;
3604                         esac
3605                         ;;
3606                 *)      case "$osname" in
3607                         '') : Still unknown.  Probably a generic BSD.
3608                                 osname="$1"
3609                                 osvers="$3"
3610                                 ;;
3611                         esac
3612                         ;;
3613                 esac
3614         else
3615                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3616                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3617                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3618                                 osname=news_os
3619                         fi
3620                         $rm -f UU/kernel.what
3621                 elif test -d c:/. -o -n "$is_os2" ; then
3622                         set X $myuname
3623                         osname=os2
3624                         osvers="$5"
3625                 fi
3626         fi
3627
3628         case "$targetarch" in
3629         '') ;;
3630         *)  hostarch=$osname
3631             case "$targetarch" in
3632                 nto*|*-nto-*)
3633                     # Will load qnx.sh, which should change osname to nto
3634                     osname=qnx
3635                     osvers=''
3636                     ;;
3637                 *linux-android*)
3638                     # Catch arm-linux-androideabi, mipsel-linux-android,
3639                     # and i686-linux-android
3640                     osname=linux-android
3641                     osvers=''
3642                     ;;
3643                 *linux*)
3644                     # Something like arm-linux-gnueabihf is really just
3645                     # plain linux.
3646                     osname=linux
3647                     osvers=''
3648                     ;;
3649                 *solaris*|*sunos*)
3650                     osname=solaris
3651                     # XXX perhaps we should just assume
3652                     # osvers to be 2, or maybe take the value
3653                     # from targetarch. Using $run before the
3654                     # hints are run is somewhat icky.
3655                     set X `$run $uname -a 2>/dev/null`
3656                     shift
3657                     case "$3" in
3658                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
3659                         *)  osvers="$3" ;;
3660                     esac
3661                     ;;
3662                 *)
3663                     osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3664                     osvers=''
3665                 ;;
3666             esac
3667             ;;
3668         esac
3669
3670         : Now look for a hint file osname_osvers, unless one has been
3671         : specified already.
3672         case "$hintfile" in
3673         ''|' ')
3674                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3675                 : Also try without trailing minor version numbers.
3676                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3677                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3678                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3679                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3680                 case "$file" in
3681                 '') dflt=none ;;
3682                 *)  case "$osvers" in
3683                         '') dflt=$file
3684                                 ;;
3685                         *)  if $test -f $src/hints/$file.sh ; then
3686                                         dflt=$file
3687                                 elif $test -f $src/hints/$xfile.sh ; then
3688                                         dflt=$xfile
3689                                 elif $test -f $src/hints/$xxfile.sh ; then
3690                                         dflt=$xxfile
3691                                 elif $test -f $src/hints/$xxxfile.sh ; then
3692                                         dflt=$xxxfile
3693                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3694                                         dflt=$xxxxfile
3695                                 elif $test -f "$src/hints/${osname}.sh" ; then
3696                                         dflt="${osname}"
3697                                 else
3698                                         dflt=none
3699                                 fi
3700                                 ;;
3701                         esac
3702                         ;;
3703                 esac
3704                 if $test -f Policy.sh ; then
3705                         case "$dflt" in
3706                         *Policy*) ;;
3707                         none) dflt="Policy" ;;
3708                         *) dflt="Policy $dflt" ;;
3709                         esac
3710                 fi
3711                 ;;
3712         *)
3713                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3714                 ;;
3715         esac
3716
3717         if $test -f Policy.sh ; then
3718                 $cat <<EOM
3719
3720 There's also a Policy hint file available, which should make the
3721 site-specific (policy) questions easier to answer.
3722 EOM
3723
3724         fi
3725
3726         $cat <<EOM
3727
3728 You may give one or more space-separated answers, or "none" if appropriate.
3729 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
3730 previous run of Configure, you may specify it as well as or instead of
3731 OS-specific hints.  If hints are provided for your OS, you should use them:
3732 although Perl can probably be built without hints on many platforms, using
3733 hints often improve performance and may enable features that Configure can't
3734 set up on its own. If there are no hints that match your OS, specify "none";
3735 DO NOT give a wrong version or a wrong OS.
3736
3737 EOM
3738
3739         rp="Which of these apply, if any?"
3740         . UU/myread
3741         tans=$ans
3742         for file in $tans; do
3743                 if $test X$file = XPolicy -a -f Policy.sh; then
3744                         . Policy.sh
3745                         $cat Policy.sh >> UU/config.sh
3746                 elif $test -f $src/hints/$file.sh; then
3747                         . $src/hints/$file.sh
3748                         $cat $src/hints/$file.sh >> UU/config.sh
3749                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3750                         : nothing
3751                 else
3752                         : Give one chance to correct a possible typo.
3753                         echo "$file.sh does not exist"
3754                         dflt=$file
3755                         rp="hint to use instead?"
3756                         . UU/myread
3757                         for file in $ans; do
3758                                 if $test -f "$src/hints/$file.sh"; then
3759                                         . $src/hints/$file.sh
3760                                         $cat $src/hints/$file.sh >> UU/config.sh
3761                                 elif $test X$ans = X -o X$ans = Xnone ; then
3762                                         : nothing
3763                                 else
3764                                         echo "$file.sh does not exist -- ignored."
3765                                 fi
3766                         done
3767                 fi
3768         done
3769
3770         hint=recommended
3771         : Remember our hint file for later.
3772         if $test -f "$src/hints/$file.sh" ; then
3773                 hintfile="$file"
3774         else
3775                 hintfile=''
3776         fi
3777 fi
3778 cd UU
3779 ;;
3780 *)
3781         echo " "
3782         echo "Fetching default answers from $config_sh..." >&4
3783         tmp_n="$n"
3784         tmp_c="$c"
3785         cd ..
3786         cp $config_sh config.sh 2>/dev/null
3787         chmod +w config.sh
3788         . ./config.sh
3789         cd UU
3790         cp ../config.sh .
3791         n="$tmp_n"
3792         c="$tmp_c"
3793         hint=previous
3794         ;;
3795 esac
3796 test "$override" && . ./optdef.sh
3797
3798 : Restore computed paths
3799 for file in $loclist $trylist; do
3800         eval $file="\$_$file"
3801 done
3802
3803 cat << EOM
3804
3805 Configure uses the operating system name and version to set some defaults.
3806 The default value is probably right if the name rings a bell. Otherwise,
3807 since spelling matters for me, either accept the default or answer "none"
3808 to leave it blank.
3809
3810 EOM
3811 case "$osname" in
3812         ''|' ')
3813                 case "$hintfile" in
3814                 ''|' '|none) dflt=none ;;
3815                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3816                 esac
3817                 ;;
3818         *) dflt="$osname" ;;
3819 esac
3820 rp="Operating system name?"
3821 . ./myread
3822 case "$ans" in
3823 none)  osname='' ;;
3824 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3825 esac
3826 echo " "
3827 case "$osvers" in
3828         ''|' ')
3829                 case "$hintfile" in
3830                 ''|' '|none) dflt=none ;;
3831                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3832                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3833                         case "$dflt" in
3834                         ''|' ') dflt=none ;;
3835                         esac
3836                         ;;
3837                 esac
3838                 ;;
3839         *) dflt="$osvers" ;;
3840 esac
3841 rp="Operating system version?"
3842 . ./myread
3843 case "$ans" in
3844 none)  osvers='' ;;
3845 *) osvers="$ans" ;;
3846 esac
3847
3848
3849 . ./posthint.sh
3850
3851 : who configured the system
3852 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3853 case "$cf_by" in
3854 "")
3855         cf_by=`(logname) 2>/dev/null`
3856         case "$cf_by" in
3857         "")
3858                 cf_by=`(whoami) 2>/dev/null`
3859                 case "$cf_by" in
3860                 "") cf_by=unknown ;;
3861                 esac ;;
3862         esac ;;
3863 esac
3864
3865 : decide how portable to be.  Allow command line overrides.
3866 case "$d_portable" in
3867 "$undef") ;;
3868 *)      d_portable="$define" ;;
3869 esac
3870
3871 : set up shell script to do ~ expansion
3872 cat >filexp <<EOSS
3873 $startsh
3874 : expand filename
3875 case "\$1" in
3876  \~/*|\~)
3877         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3878         ;;
3879  \~*)
3880         if $test -f /bin/csh; then
3881                 /bin/csh -f -c "glob \$1"
3882                 failed=\$?
3883                 echo ""
3884                 exit \$failed
3885         else
3886                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3887                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3888                 if $test ! -d "\$dir"; then
3889                         me=\`basename \$0\`
3890                         echo "\$me: can't locate home directory for: \$name" >&2
3891                         exit 1
3892                 fi
3893                 case "\$1" in
3894                 */*)
3895                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3896                         ;;
3897                 *)
3898                         echo \$dir
3899                         ;;
3900                 esac
3901         fi
3902         ;;
3903 *)
3904         echo \$1
3905         ;;
3906 esac
3907 EOSS
3908 chmod +x filexp
3909 $eunicefix filexp
3910
3911 : now set up to get a file name
3912 cat <<EOS >getfile
3913 $startsh
3914 EOS
3915 cat <<'EOSC' >>getfile
3916 tilde=''
3917 fullpath=''
3918 already=''
3919 skip=''
3920 none_ok=''
3921 exp_file=''
3922 nopath_ok=''
3923 orig_rp="$rp"
3924 orig_dflt="$dflt"
3925 case "$gfpth" in
3926 '') gfpth='.' ;;
3927 esac
3928
3929 case "$fn" in
3930 *\(*)
3931         : getfile will accept an answer from the comma-separated list
3932         : enclosed in parentheses even if it does not meet other criteria.
3933         expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3934         fn=`echo $fn | sed 's/(.*)//'`
3935         ;;
3936 esac
3937
3938 case "$fn" in
3939 *:*)
3940         loc_file=`expr $fn : '.*:\(.*\)'`
3941         fn=`expr $fn : '\(.*\):.*'`
3942         ;;
3943 esac
3944
3945 case "$fn" in
3946 *~*) tilde=true;;
3947 esac
3948 case "$fn" in
3949 */*) fullpath=true;;
3950 esac
3951 case "$fn" in
3952 *+*) skip=true;;
3953 esac
3954 case "$fn" in
3955 *n*) none_ok=true;;
3956 esac
3957 case "$fn" in
3958 *e*) exp_file=true;;
3959 esac
3960 case "$fn" in
3961 *p*) nopath_ok=true;;
3962 esac
3963
3964 case "$fn" in
3965 *f*) type='File';;
3966 *d*) type='Directory';;
3967 *l*) type='Locate';;
3968 esac
3969
3970 what="$type"
3971 case "$what" in
3972 Locate) what='File';;
3973 esac
3974
3975 case "$exp_file" in
3976 '')
3977         case "$d_portable" in
3978         "$define") ;;
3979         *) exp_file=true;;
3980         esac
3981         ;;
3982 esac
3983
3984 cd ..
3985 while test "$type"; do
3986         redo=''
3987         rp="$orig_rp"
3988         dflt="$orig_dflt"
3989         case "$tilde" in
3990         true) rp="$rp (~name ok)";;
3991         esac
3992         . UU/myread
3993         if test -f UU/getfile.ok && \
3994                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3995         then
3996                 value="$ans"
3997                 ansexp="$ans"
3998                 break
3999         fi
4000         case "$ans" in
4001         none)
4002                 value=''
4003                 ansexp=''
4004                 case "$none_ok" in
4005                 true) type='';;
4006                 esac
4007                 ;;
4008         *)
4009                 case "$tilde" in
4010                 '') value="$ans"
4011                         ansexp="$ans";;
4012                 *)
4013                         value=`UU/filexp $ans`
4014                         case $? in
4015                         0)
4016                                 if test "$ans" != "$value"; then
4017                                         echo "(That expands to $value on this system.)"
4018                                 fi
4019                                 ;;
4020                         *) value="$ans";;
4021                         esac
4022                         ansexp="$value"
4023                         case "$exp_file" in
4024                         '') value="$ans";;
4025                         esac
4026                         ;;
4027                 esac
4028                 case "$fullpath" in
4029                 true)
4030                         case "$ansexp" in
4031                         /*) value="$ansexp" ;;
4032                         [a-zA-Z]:/*) value="$ansexp" ;;
4033                         *)
4034                                 redo=true
4035                                 case "$already" in
4036                                 true)
4037                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
4038                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
4039                                         ;;
4040                                 *)
4041                                 echo "Please give a full path name, starting with slash." >&4
4042                                         case "$tilde" in
4043                                         true)
4044                                 echo "Note that using ~name is ok provided it expands well." >&4
4045                                                 already=true
4046                                                 ;;
4047                                         esac
4048                                 esac
4049                                 ;;
4050                         esac
4051                         ;;
4052                 esac
4053                 case "$redo" in
4054                 '')
4055                         case "$type" in
4056                         File)
4057                                 for fp in $gfpth; do
4058                                         if test "X$fp" = X.; then
4059                                             pf="$ansexp"
4060                                         else    
4061                                             pf="$fp/$ansexp"
4062                                         fi
4063                                         if test -f "$pf"; then
4064                                                 type=''
4065                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
4066                                         then
4067                                                 echo "($value is not a plain file, but that's ok.)"
4068                                                 type=''
4069                                         fi
4070                                         if test X"$type" = X; then
4071                                             value="$pf"
4072                                             break
4073                                         fi
4074                                 done
4075                                 ;;
4076                         Directory)
4077                                 for fp in $gfpth; do
4078                                         if test "X$fp" = X.; then
4079                                             dir="$ans"
4080                                             direxp="$ansexp"
4081                                         else    
4082                                             dir="$fp/$ansexp"
4083                                             direxp="$fp/$ansexp"
4084                                         fi
4085                                         if test -d "$direxp"; then
4086                                                 type=''
4087                                                 value="$dir"
4088                                                 break
4089                                         fi
4090                                 done
4091                                 ;;
4092                         Locate)
4093                                 if test -d "$ansexp"; then
4094                                         echo "(Looking for $loc_file in directory $value.)"
4095                                         value="$value/$loc_file"
4096                                         ansexp="$ansexp/$loc_file"
4097                                 fi
4098                                 if test -f "$ansexp"; then
4099                                         type=''
4100                                 fi
4101                                 case "$nopath_ok" in
4102                                 true)   case "$value" in
4103                                         */*) ;;
4104                                         *)      echo "Assuming $value will be in people's path."
4105                                                 type=''
4106                                                 ;;
4107                                         esac
4108                                         ;;
4109                                 esac
4110                                 ;;
4111                         esac
4112
4113                         case "$skip" in
4114                         true) type='';
4115                         esac
4116
4117                         case "$type" in
4118                         '') ;;
4119                         *)
4120                                 if test "$fastread" = yes; then
4121                                         dflt=y
4122                                 else
4123                                         dflt=n
4124                                 fi
4125                                 rp="$what $value doesn't exist.  Use that name anyway?"
4126                                 . UU/myread
4127                                 dflt=''
4128                                 case "$ans" in
4129                                 y*) type='';;
4130                                 *) echo " ";;
4131                                 esac
4132                                 ;;
4133                         esac
4134                         ;;
4135                 esac
4136                 ;;
4137         esac
4138 done
4139 cd UU
4140 ans="$value"
4141 rp="$orig_rp"
4142 dflt="$orig_dflt"
4143 rm -f getfile.ok
4144 test "X$gfpthkeep" != Xy && gfpth=""
4145 EOSC
4146
4147 : determine root of directory hierarchy where package will be installed.
4148 case "$prefix" in
4149 '')
4150         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4151         ;;
4152 *?/)
4153         dflt=`echo "$prefix" | sed 's/.$//'`
4154         ;;
4155 *)
4156         dflt="$prefix"
4157         ;;
4158 esac
4159 $cat <<EOM
4160
4161 By default, $package will be installed in $dflt/bin, manual pages
4162 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4163 installation directories. Typically this is something like /usr/local.
4164 If you wish to have binaries under /usr/bin but other parts of the
4165 installation under /usr/local, that's ok: you will be prompted
4166 separately for each of the installation directories, the prefix being
4167 only used to set the defaults.
4168
4169 EOM
4170 fn=d~
4171 rp='Installation prefix to use?'
4172 . ./getfile
4173 oldprefix=''
4174 case "$prefix" in
4175 '') ;;
4176 *)
4177         case "$ans" in
4178         "$prefix") ;;
4179         *) oldprefix="$prefix";;
4180         esac
4181         ;;
4182 esac
4183 prefix="$ans"
4184 prefixexp="$ansexp"
4185
4186 : allow them to override the AFS root
4187 case "$afsroot" in
4188 '')     afsroot=/afs ;;
4189 *)      afsroot=$afsroot ;;
4190 esac
4191
4192 : is AFS running?
4193 echo " "
4194 case "$afs" in
4195 $define|true)   afs=true ;;
4196 $undef|false)   afs=false ;;
4197 *)      if $test -d $afsroot; then
4198                 afs=true
4199         else
4200                 afs=false
4201         fi
4202         ;;
4203 esac
4204 if $afs; then
4205         echo "AFS may be running... I'll be extra cautious then..." >&4
4206 else
4207         echo "AFS does not seem to be running..." >&4
4208 fi
4209
4210 : determine installation prefix for where package is to be installed.
4211 if $afs; then
4212 $cat <<EOM
4213
4214 Since you are running AFS, I need to distinguish the directory in which
4215 files will reside from the directory in which they are installed (and from
4216 which they are presumably copied to the former directory by occult means).
4217
4218 EOM
4219         case "$installprefix" in
4220         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4221         *) dflt="$installprefix";;
4222         esac
4223 else
4224 $cat <<EOM
4225
4226 In some special cases, particularly when building $package for distribution,
4227 it is convenient to distinguish the directory in which files should be
4228 installed from the directory ($prefix) in which they will
4229 eventually reside.  For most users, these two directories are the same.
4230
4231 EOM
4232         case "$installprefix" in
4233         '') dflt=$prefix ;;
4234         *) dflt=$installprefix;;
4235         esac
4236 fi
4237 fn=d~
4238 rp='What installation prefix should I use for installing files?'
4239 . ./getfile
4240 installprefix="$ans"
4241 installprefixexp="$ansexp"
4242
4243 : Perform the prefixexp/installprefixexp correction if necessary
4244 cat <<EOS >installprefix
4245 $startsh
4246 EOS
4247 cat <<'EOSC' >>installprefix
4248 : Change installation prefix, if necessary.
4249 if $test X"$prefix" != X"$installprefix"; then
4250     eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`"
4251 else
4252     eval "install${prefixvar}=\"\$${prefixvar}exp\""
4253 fi
4254 EOSC
4255 chmod +x installprefix
4256 $eunicefix installprefix
4257
4258 : Set variables such as privlib and privlibexp from the output of ./getfile
4259 : performing the prefixexp/installprefixexp correction if necessary.
4260 cat <<EOS >setprefixvar
4261 $startsh
4262 EOS
4263 cat <<'EOSC' >>setprefixvar
4264 eval "${prefixvar}=\"\$ans\""
4265 eval "${prefixvar}exp=\"\$ansexp\""
4266 . ./installprefix
4267 EOSC
4268 chmod +x setprefixvar
4269 $eunicefix setprefixvar
4270
4271 : set up the script used to warn in case of inconsistency
4272 cat <<EOS >whoa
4273 $startsh
4274 EOS
4275 cat <<'EOSC' >>whoa
4276 dflt=y
4277 case "$hint" in
4278     recommended)
4279         case "$hintfile" in
4280         '')     echo "The $hint value for \$$var on this machine was \"$was\"!" >&4
4281                 ;;
4282         *)      echo "Hmm.  Based on the hints in hints/$hintfile.sh, " >&4
4283                 echo "the $hint value for \$$var on this machine was \"$was\"!" >&4
4284                 ;;
4285         esac
4286         ;;
4287     *)  echo " "
4288         echo "*** WHOA THERE!!! ***" >&4
4289         echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
4290         ;;
4291 esac
4292 rp="    Keep the $hint value?"
4293 . ./myread
4294 case "$ans" in
4295 y) td=$was; tu=$was;;
4296 esac
4297 EOSC
4298
4299 : function used to set '$1' to '$val'
4300 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
4301 case "$val$was" in
4302 $define$undef) . ./whoa; eval "$var=\$td";;
4303 $undef$define) . ./whoa; eval "$var=\$tu";;
4304 *) eval "$var=$val";;
4305 esac'
4306
4307 : get the patchlevel
4308 echo " "
4309 echo "Getting the current patchlevel..." >&4
4310 if $test -r $rsrc/patchlevel.h;then
4311         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4312         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4313         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4314         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4315         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4316         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4317         perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'`
4318 else
4319         revision=0
4320         patchlevel=0
4321         subversion=0
4322         api_revision=0
4323         api_version=0
4324         api_subversion=0
4325         perl_patchlevel=0
4326         $echo "(You do not have patchlevel.h.  Eek.)"
4327 fi
4328 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
4329 version_patchlevel_string="version $patchlevel subversion $subversion"
4330 case "$perl_patchlevel" in
4331 0|'') ;;
4332 *)  perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'`
4333     version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel"
4334     ;;
4335 esac
4336
4337 $echo "(You have $package $version_patchlevel_string.)"
4338
4339 case "$osname" in
4340 dos|vms)
4341         : XXX Should be a Configure test for double-dots in filenames.
4342         version=`echo $revision $patchlevel $subversion | \
4343                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4344         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4345                  $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
4346         ;;
4347 *)
4348         version=`echo $revision $patchlevel $subversion | \
4349                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4350         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4351                  $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
4352         ;;
4353 esac
4354 : Special case the 5.005_xx maintenance series, which used 5.005
4355 : without any subversion label as a subdirectory in $sitelib
4356 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4357         api_versionstring='5.005'
4358 fi
4359
4360 : Do we want threads support and if so, what type
4361 case "$usethreads" in
4362 $define|true|[yY]*)     dflt='y';;
4363 *)     # Catch case where user specified ithreads or 5005threads but
4364        # forgot -Dusethreads (A.D. 4/2002)
4365        case "$useithreads$use5005threads" in
4366        *$define*)       dflt='y';;
4367        *)               dflt='n';;
4368        esac
4369        ;;
4370 esac
4371 cat <<EOM
4372
4373 Perl can be built to offer a form of threading support on some systems
4374 To do so, Configure can be run with -Dusethreads.
4375
4376 Note that Perl built with threading support runs slightly slower
4377 and uses slightly more memory than plain Perl.
4378
4379 If this doesn't make any sense to you, just accept the default '$dflt'.
4380 EOM
4381 rp='Build a threading Perl?'
4382 . ./myread
4383 case "$ans" in
4384 y|Y)    val="$define" ;;
4385 *)      val="$undef" ;;
4386 esac
4387 set usethreads
4388 eval $setvar
4389
4390 if $test $patchlevel -lt 9; then
4391     case "$usethreads" in
4392     $define)
4393         : Default to ithreads unless overridden on command line or with
4394         : old config.sh
4395         dflt='y'
4396         case "$use5005threads" in
4397                 $define|true|[yY]*)
4398                         echo "5.005 threads are no longer supported"
4399                         exit 1
4400                 ;;
4401         esac
4402         case "$useithreads" in
4403                 $undef|false|[nN]*) dflt='n';;
4404         esac
4405         rp='Use the newer interpreter-based ithreads?'
4406         . ./myread
4407         case "$ans" in
4408         y|Y)    val="$define" ;;
4409         *)      val="$undef" ;;
4410         esac
4411         set useithreads
4412         eval $setvar
4413         : Now set use5005threads to the opposite value.
4414         case "$useithreads" in
4415         $define) val="$undef" ;;
4416         *) val="$define" ;;
4417         esac
4418         set use5005threads
4419         eval $setvar
4420         ;;
4421     *)
4422         useithreads="$undef"
4423         use5005threads="$undef"
4424         ;;
4425     esac
4426
4427     case "$useithreads$use5005threads" in
4428     "$define$define")
4429         $cat >&4 <<EOM
4430
4431 You cannot have both the ithreads and the 5.005 threads enabled
4432 at the same time.  Disabling the 5.005 threads since they are
4433 much less stable than the ithreads.
4434
4435 EOM
4436         use5005threads="$undef"
4437         ;;
4438     esac
4439
4440 else
4441 : perl-5.9.x and later
4442
4443     if test X"$usethreads" = "X$define"; then
4444         case "$use5005threads" in
4445             $define|true|[yY]*)
4446                 $cat >&4 <<EOM
4447
4448 5.005 threads has been removed for 5.10.  Perl will be built using ithreads.
4449
4450 EOM
4451             ;;
4452         esac
4453     fi
4454
4455     use5005threads="$undef"
4456     useithreads="$usethreads"
4457 fi
4458
4459 case "$d_oldpthreads" in
4460 '')     : Configure tests would be welcome here.  For now, assume undef.
4461         val="$undef" ;;
4462 *)      val="$d_oldpthreads" ;;
4463 esac
4464 set d_oldpthreads
4465 eval $setvar
4466
4467
4468 : Look for a hint-file generated 'call-back-unit'.  If the
4469 : user has specified that a threading perl is to be built,
4470 : we may need to set or change some other defaults.
4471 if $test -f usethreads.cbu; then
4472     echo "Your platform has some specific hints regarding threaded builds, using them..."
4473     . ./usethreads.cbu
4474 else
4475     case "$usethreads" in
4476         "$define"|true|[yY]*)
4477                 $cat <<EOM
4478 (Your platform does not have any specific hints for threaded builds.
4479  Assuming POSIX threads, then.)
4480 EOM
4481         ;;
4482     esac
4483 fi
4484
4485 : Check if multiplicity is required
4486 cat <<EOM
4487
4488 Perl can be built so that multiple Perl interpreters can coexist
4489 within the same Perl executable.
4490 EOM
4491
4492 case "$useithreads" in
4493 $define)
4494         cat <<EOM
4495 This multiple interpreter support is required for interpreter-based threads.
4496 EOM
4497         val="$define"
4498         ;;
4499 *)      case "$usemultiplicity" in
4500         $define|true|[yY]*)     dflt='y';;
4501         *) dflt='n';;
4502         esac
4503         echo " "
4504         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
4505         rp='Build Perl for multiplicity?'
4506         . ./myread
4507         case "$ans" in
4508         y|Y)    val="$define" ;;
4509         *)      val="$undef" ;;
4510         esac
4511         ;;
4512 esac
4513 set usemultiplicity
4514 eval $setvar
4515
4516 : Check if morebits is requested
4517 case "$usemorebits" in
4518 "$define"|true|[yY]*)
4519         use64bitint="$define"
4520         uselongdouble="$define"
4521         usemorebits="$define"
4522         ;;
4523 *)      usemorebits="$undef"
4524         ;;
4525 esac
4526
4527 : Determine the C compiler to be used
4528 echo " "
4529 case "$cc" in
4530 '') dflt=cc;;
4531 *) dflt="$cc";;
4532 esac
4533 rp="Use which C compiler?"
4534 . ./myread
4535 cc="$ans"
4536
4537 : See whether they have no cc but they do have gcc
4538 . ./trygcc
4539 if $test -f cc.cbu; then
4540     . ./cc.cbu
4541 fi
4542 . ./checkcc
4543
4544 : make some quick guesses about what we are up against
4545 echo " "
4546 $echo $n "Hmm...  $c"
4547 echo exit 1 >bsd
4548 echo exit 1 >usg
4549 echo exit 1 >v7
4550 echo exit 1 >osf1
4551 echo exit 1 >eunice
4552 echo exit 1 >xenix
4553 echo exit 1 >venix
4554 echo exit 1 >os2
4555 d_bsd="$undef"
4556 $cat $sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h >foo 2>/dev/null
4557 if test -f /osf_boot || $contains 'OSF/1' $sysroot/usr/include/ctype.h >/dev/null 2>&1
4558 then
4559         echo "Looks kind of like an OSF/1 system, but we'll see..."
4560         echo exit 0 >osf1
4561 elif test `echo abc | $tr a-z A-Z` = Abc ; then
4562         xxx=`./loc addbib blurfl $pth`
4563         if $test -f $xxx; then
4564         echo "Looks kind of like a USG system with BSD features, but we'll see..."
4565                 echo exit 0 >bsd
4566                 echo exit 0 >usg
4567         else
4568                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
4569                         echo "Looks kind of like an extended USG system, but we'll see..."
4570                 else
4571                         echo "Looks kind of like a USG system, but we'll see..."
4572                 fi
4573                 echo exit 0 >usg
4574         fi
4575 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
4576         echo "Looks kind of like a BSD system, but we'll see..."
4577         d_bsd="$define"
4578         echo exit 0 >bsd
4579 else
4580         echo "Looks kind of like a Version 7 system, but we'll see..."
4581         echo exit 0 >v7
4582 fi
4583 case "$eunicefix" in
4584 *unixtovms*)
4585         $cat <<'EOI'
4586 There is, however, a strange, musty smell in the air that reminds me of
4587 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
4588 EOI
4589         echo exit 0 >eunice
4590         d_eunice="$define"
4591 : it so happens the Eunice I know will not run shell scripts in Unix format
4592         ;;
4593 *)
4594         echo " "
4595         echo "Congratulations.  You aren't running Eunice."
4596         d_eunice="$undef"
4597         ;;
4598 esac
4599 : Detect OS2.  The p_ variable is set above in the Head.U unit.
4600 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
4601 : semicolon as a patch separator
4602 case "$p_" in
4603 :) ;;
4604 *)
4605         $cat <<'EOI'
4606 I have the feeling something is not exactly right, however...don't tell me...
4607 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
4608 (Or you may be running DOS with DJGPP.)
4609 EOI
4610         echo exit 0 >os2
4611         ;;
4612 esac
4613 if test -f /xenix; then
4614         echo "Actually, this looks more like a XENIX system..."
4615         echo exit 0 >xenix
4616         d_xenix="$define"
4617 else
4618         echo " "
4619         echo "It's not Xenix..."
4620         d_xenix="$undef"
4621 fi
4622 chmod +x xenix
4623 $eunicefix xenix
4624 if test -f /venix; then
4625         echo "Actually, this looks more like a VENIX system..."
4626         echo exit 0 >venix
4627 else
4628         echo " "
4629         if ./xenix; then
4630                 : null
4631         else
4632                 echo "Nor is it Venix..."
4633         fi
4634 fi
4635 chmod +x bsd usg v7 osf1 eunice xenix venix os2
4636 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
4637 $rm -f foo
4638
4639 : Check if we are using GNU gcc and what its version is
4640 echo " "
4641 echo "Checking for GNU cc in disguise and/or its version number..." >&4
4642 $cat >try.c <<EOM
4643 #include <stdio.h>
4644 int main() {
4645 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
4646 #ifdef __VERSION__
4647         printf("%s\n", __VERSION__);
4648 #else
4649         printf("%s\n", "1");
4650 #endif
4651 #endif
4652         return(0);
4653 }
4654 EOM
4655 if $cc -o try $ccflags $ldflags try.c; then
4656         gccversion=`$run ./try`
4657         case "$gccversion" in
4658         '') echo "You are not using GNU cc." ;;
4659         *)  echo "You are using GNU cc $gccversion."
4660             ccname=gcc
4661             ;;
4662         esac
4663 else
4664         echo " "
4665         echo "*** WHOA THERE!!! ***" >&4
4666         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
4667         case "$knowitall" in
4668         '')
4669         echo "    You'd better start hunting for one and let me know about it." >&4
4670                 exit 1
4671                 ;;
4672         esac
4673 fi
4674 $rm -f try try.*
4675 case "$gccversion" in
4676 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
4677 esac
4678 case "$gccversion" in
4679 '') gccosandvers='' ;;
4680 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
4681    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
4682    gccshortvers=''
4683    case "$gccosandvers" in
4684    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
4685    $osname$osvers) ;; # looking good
4686    $osname*) cat <<EOM >&4
4687
4688 *** WHOA THERE!!! ***
4689
4690     Your gcc has not been compiled for the exact release of
4691     your operating system ($gccosandvers versus $osname$osvers).
4692
4693     In general it is a good idea to keep gcc synchronized with
4694     the operating system because otherwise serious problems
4695     may ensue when trying to compile software, like Perl.
4696
4697     I'm trying to be optimistic here, though, and will continue.
4698     If later during the configuration and build icky compilation
4699     problems appear (headerfile conflicts being the most common
4700     manifestation), I suggest reinstalling the gcc to match
4701     your operating system release.
4702
4703 EOM
4704       ;;
4705    *) gccosandvers='' ;; # failed to parse, better be silent
4706    esac
4707    ;;
4708 esac
4709 case "$ccname" in
4710 '') ccname="$cc" ;;
4711 esac
4712
4713 # gcc 3.* complain about adding -Idirectories that they already know about,
4714 # so we will take those off from locincpth.
4715 case "$gccversion" in
4716 3*)
4717     echo "main(){}">try.c
4718     for incdir in $locincpth; do
4719        warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
4720              grep '^c[cp]p*[01]: warning: changing search order '`
4721        if test "X$warn" != X; then
4722            locincpth=`echo " $locincpth " | sed "s! $incdir ! !"`
4723        fi
4724     done
4725     $rm -f try try.*
4726 esac
4727
4728 # gcc 4.9 by default does some optimizations that break perl.
4729 # see ticket 121505.
4730 #
4731 # The -fwrapv disables those optimizations (and probably others,) so
4732 # for gcc 4.9 (and later, since the optimizations probably won't go
4733 # away), add -fwrapv unless the user requests -fno-wrapv, which
4734 # disables -fwrapv, or if the user requests -fsanitize=undefined,
4735 # which turns the overflows -fwrapv ignores into runtime errors.
4736 case "$gccversion" in
4737 4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*)
4738     case "$ccflags" in
4739     *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;;
4740     *) ccflags="$ccflags -fwrapv" ;;
4741     esac
4742 esac
4743
4744 : What should the include directory be ?
4745 : Use sysroot if set, so findhdr looks in the right place.
4746 echo " "
4747 $echo $n "Hmm...  $c"
4748 dflt="$sysroot/usr/include"
4749 incpath=''
4750 mips_type=''
4751 if $test -f /bin/mips && /bin/mips; then
4752         echo "Looks like a MIPS system..."
4753         $cat >usr.c <<'EOCP'
4754 #ifdef SYSTYPE_BSD43
4755 /bsd43
4756 #endif
4757 EOCP
4758         if $cc $cppflags -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
4759                 dflt='/bsd43/usr/include'
4760                 incpath='/bsd43'
4761                 mips_type='BSD 4.3'
4762         else
4763                 mips_type='System V'
4764         fi
4765         $rm -f usr.c usr.out
4766         echo "and you're compiling with the $mips_type compiler and libraries."
4767         xxx_prompt=y
4768         echo "exit 0" >mips
4769 else
4770         echo "Doesn't look like a MIPS system."
4771         xxx_prompt=n
4772         echo "exit 1" >mips
4773 fi
4774 chmod +x mips
4775 $eunicefix mips
4776 case "$usrinc" in
4777 '') ;;
4778 *) dflt="$usrinc";;
4779 esac
4780 case "$xxx_prompt" in
4781 y)      fn=d/
4782         echo " "
4783         rp='Where are the include files you want to use?'
4784         . ./getfile
4785         usrinc="$ans"
4786         ;;
4787 *)      usrinc="$dflt"
4788         ;;
4789 esac
4790
4791 : see how we invoke the C preprocessor
4792 echo " "
4793 echo "Now, how can we feed standard input to your C preprocessor..." >&4
4794 cat <<'EOT' >testcpp.c
4795 #define ABC abc
4796 #define XYZ xyz
4797 ABC.XYZ
4798 EOT
4799 cd ..
4800 if test ! -f cppstdin; then
4801         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
4802                 # AIX cc -E doesn't show the absolute headerfile
4803                 # locations but we'll cheat by using the -M flag.
4804                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
4805         else
4806                 echo 'cat >.$$.c; '"$cc $cppflags"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
4807         fi
4808 else
4809         echo "Keeping your $hint cppstdin wrapper."
4810 fi
4811 chmod 755 cppstdin
4812 wrapper=`pwd`/cppstdin
4813 ok='false'
4814 cd UU
4815
4816 if $test "X$cppstdin" != "X" && \
4817         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4818         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4819 then
4820         echo "You used to use $cppstdin $cppminus so we'll use that again."
4821         case "$cpprun" in
4822         '') echo "But let's see if we can live without a wrapper..." ;;
4823         *)
4824                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4825                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4826                 then
4827                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4828                         ok='true'
4829                 else
4830                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4831                 fi
4832                 ;;
4833         esac
4834 else
4835         case "$cppstdin" in
4836         '') ;;
4837         *)
4838                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4839                 ;;
4840         esac
4841 fi
4842
4843 if $ok; then
4844         : nothing
4845 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4846         $cc -E <testcpp.c >testcpp.out 2>&1; \
4847         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4848         echo "Yup, it does."
4849         x_cpp="$cc $cppflags -E"
4850         x_minus='';
4851 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4852         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4853         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4854         echo "Yup, it does."
4855         x_cpp="$cc $cppflags -E"
4856         x_minus='-';
4857 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4858         $cc -P <testcpp.c >testcpp.out 2>&1; \
4859         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4860         echo "Yipee, that works!"
4861         x_cpp="$cc $cppflags -P"
4862         x_minus='';
4863 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4864         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4865         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4866         echo "At long last!"
4867         x_cpp="$cc $cppflags -P"
4868         x_minus='-';
4869 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4870         $cpp <testcpp.c >testcpp.out 2>&1; \
4871         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4872         echo "It works!"
4873         x_cpp="$cpp $cppflags"
4874         x_minus='';
4875 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4876         $cpp - <testcpp.c >testcpp.out 2>&1; \
4877         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4878         echo "Hooray, it works!  I was beginning to wonder."
4879         x_cpp="$cpp $cppflags"
4880         x_minus='-';
4881 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4882         $wrapper <testcpp.c >testcpp.out 2>&1; \
4883         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4884         x_cpp="$wrapper"
4885         x_minus=''
4886         echo "Eureka!"
4887 else
4888         dflt=''
4889         rp="No dice.  I can't find a C preprocessor.  Name one:"
4890         . ./myread
4891         x_cpp="$ans"
4892         x_minus=''
4893         $x_cpp <testcpp.c >testcpp.out 2>&1
4894         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4895                 echo "OK, that will do." >&4
4896         else
4897 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4898                 exit 1
4899         fi
4900 fi
4901
4902 case "$ok" in
4903 false)
4904         cppstdin="$x_cpp"
4905         cppminus="$x_minus"
4906         cpprun="$x_cpp"
4907         cpplast="$x_minus"
4908         set X $x_cpp
4909         shift
4910         case "$1" in
4911         "$cpp")
4912                 echo "Perhaps can we force $cc -E using a wrapper..."
4913                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4914                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4915                 then
4916                         echo "Yup, we can."
4917                         cppstdin="$wrapper"
4918                         cppminus='';
4919                 else
4920                         echo "Nope, we'll have to live without it..."
4921                 fi
4922                 ;;
4923         esac
4924         case "$cpprun" in
4925         "$wrapper")
4926                 cpprun=''
4927                 cpplast=''
4928                 ;;
4929         esac
4930         ;;
4931 esac
4932
4933 case "$cppstdin" in
4934 "$wrapper"|'cppstdin') ;;
4935 *) $rm -f $wrapper;;
4936 esac
4937 $rm -f testcpp.c testcpp.out
4938
4939 : Adjust cppfilter for path component separator
4940 case "$osname" in
4941 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4942 os2) cppfilter="sed -e 's|\\\\\\\\|/|g' |" ;; # path component separator is \
4943 *)   cppfilter='' ;;
4944 esac
4945
4946 : Use gcc to determine libpth and incpth
4947 # If using gcc or clang, we can get better values for libpth, incpth
4948 # and usrinc directly from the compiler.
4949 # Note that ccname for clang is also gcc.
4950 case "$ccname" in
4951     gcc)
4952         $echo 'extern int foo;' > try.c
4953         set X `$cppstdin -v try.c 2>&1 | $awk '/^#include </,/^End of search /'|$cppfilter $grep '/include'`
4954         shift
4955         if $test $# -gt 0; then
4956             incpth="$incpth $*"
4957             incpth="`$echo $incpth|$sed 's/^ //'`"
4958             for i in $*; do
4959                 j="`$echo $i|$sed 's,/include$,/lib,'`"
4960                 if $test -d $j; then
4961                     libpth="$libpth $j"
4962                 fi
4963             done
4964             libpth="`$echo $libpth|$sed 's/^ //'`"
4965             for xxx in $libpth $loclibpth $plibpth $glibpth; do
4966                 if $test -d $xxx; then
4967                     case " $libpth " in
4968                     *" $xxx "*) ;;
4969                     *) libpth="$libpth $xxx";;
4970                     esac
4971                 fi
4972             done
4973         fi
4974         $rm -f try.c
4975         case "$usrinc" in
4976         '') for i in $incpth; do
4977                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
4978                     usrinc="$i"
4979                     break
4980                 fi
4981             done
4982             ;;
4983         esac
4984
4985         case "$usecrosscompile" in
4986         $define|true|[yY]*)
4987             case "$incpth" in
4988                 '') echo "Incpth not defined." >&4; croak=y ;;
4989                 *)  echo "Using incpth '$incpth'." >&4 ;;
4990             esac
4991             case "$libpth" in
4992                 '') echo "Libpth not defined." >&4; croak=y ;;
4993                 *)  echo "Using libpth '$libpth'." >&4 ;;
4994             esac
4995             case "$usrinc" in
4996                 '') echo "Usrinc not defined." >&4; croak=y ;;
4997                 *)  echo "Using usrinc $usrinc." >&4 ;;
4998             esac
4999             case "$croak" in
5000                 y)
5001                 if test "X$sysroot" = X; then
5002                     echo "Cannot continue, aborting." >&4; exit 1
5003                 else
5004                     echo "Cross-compiling using sysroot $sysroot, failing to guess inc/lib paths is not fatal" >&4
5005                 fi
5006                 ;;
5007             esac
5008             ;;
5009         esac
5010     ;;
5011 esac
5012
5013 : Default value for incpth is just usrinc
5014 case "$incpth" in
5015 '') incpth="$usrinc";;
5016 esac
5017
5018 : Set private lib path
5019 case "$plibpth" in
5020 '') if ./mips; then
5021         plibpth="$incpath/usr/lib $sysroot/usr/local/lib $sysroot/usr/ccs/lib"
5022     fi;;
5023 esac
5024 case "$libpth" in
5025 ' ') dlist='';;
5026 '') dlist="$loclibpth $plibpth $glibpth";;
5027 *) dlist="$libpth";;
5028 esac
5029
5030 : Now check and see which directories actually exist, avoiding duplicates
5031 for xxx in $dlist
5032 do
5033     if $test -d $xxx; then
5034                 case " $libpth " in
5035                 *" $xxx "*) ;;
5036                 *) libpth="$libpth $xxx";;
5037                 esac
5038     fi
5039 done
5040 $cat <<'EOM'
5041
5042 Some systems have incompatible or broken versions of libraries.  Among
5043 the directories listed in the question below, please remove any you
5044 know not to be holding relevant libraries, and add any that are needed.
5045 Say "none" for none.
5046
5047 EOM
5048
5049 if test "X$sysroot" != X; then
5050     $cat <<EOM
5051 You have set sysroot to $sysroot, please supply the directories excluding sysroot
5052
5053 EOM
5054 fi
5055
5056 case "$libpth" in
5057 '') dflt='none';;
5058 *)
5059         set X $libpth
5060         shift
5061         dflt=${1+"$@"}
5062         ;;
5063 esac
5064 rp="Directories to use for library searches?"
5065 . ./myread
5066 case "$ans" in
5067 none) libpth=' ';;
5068 *) libpth="$ans";;
5069 esac
5070
5071 : compute shared library extension
5072 case "$so" in
5073 '')
5074         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
5075                 dflt='sl'
5076         else
5077                 dflt='so'
5078         fi
5079         ;;
5080 *) dflt="$so";;
5081 esac
5082 $cat <<EOM
5083
5084 On some systems, shared libraries may be available.  Answer 'none' if
5085 you want to suppress searching of shared libraries for the remainder
5086 of this configuration.
5087
5088 EOM
5089 rp='What is the file extension used for shared libraries?'
5090 . ./myread
5091 so="$ans"
5092
5093 : Does target system insist that shared library basenames are unique
5094 $cat << EOM
5095
5096 Some dynamic loaders assume that the *basename* of shared library filenames
5097 are globally unique.  We'll default this to undef as we assume your system
5098 is not this weird. Set to defined if you're on one of them.
5099
5100 EOM
5101
5102 dflt='n'
5103 rp='Make shared library basenames unique?'
5104 . ./myread
5105 case "$ans" in
5106 y|Y) val="$define" ;;
5107 *)   val="$undef"  ;;
5108 esac
5109 set d_libname_unique
5110 eval $setvar
5111
5112 : Define several unixisms.
5113 : Hints files or command line option can be used to override them.
5114 : The convoluted testing is in case hints files set either the old
5115 : or the new name.
5116 case "$_exe" in
5117 '')     case "$exe_ext" in
5118         '')     ;;
5119         *)      _exe="$exe_ext" ;;
5120         esac
5121         ;;
5122 esac
5123 case "$_a" in
5124 '')     case "$lib_ext" in
5125     '') _a='.a';;
5126         *)      _a="$lib_ext" ;;
5127         esac
5128         ;;
5129 esac
5130 case "$_o" in
5131 '') case "$obj_ext" in
5132         '')     _o='.o';;
5133         *)      _o="$obj_ext";;
5134         esac
5135         ;;
5136 esac
5137 case "$p_" in
5138 '') case "$path_sep" in
5139         '')     p_=':';;
5140         *)      p_="$path_sep";;
5141         esac
5142         ;;
5143 esac
5144 exe_ext=$_exe
5145 lib_ext=$_a
5146 obj_ext=$_o
5147 path_sep=$p_
5148
5149 rm_try="$rm -f try try$_exe a.out .out try.[cho] try.$_o core core.try* try.core*"
5150
5151 : Which makefile gets called first.  This is used by make depend.
5152 case "$firstmakefile" in
5153 '') firstmakefile='makefile';;
5154 esac
5155
5156 : Check is we will use socks
5157 case "$usesocks" in
5158 $define|true|[yY]*)     dflt='y';;
5159 *) dflt='n';;
5160 esac
5161 cat <<EOM
5162
5163 Perl can be built to use the SOCKS proxy protocol library.  To do so,
5164 Configure must be run with -Dusesocks.  If you use SOCKS you also need
5165 to use the PerlIO abstraction layer, this will be implicitly selected.
5166
5167 If this doesn't make any sense to you, just accept the default '$dflt'.
5168 EOM
5169 rp='Build Perl for SOCKS?'
5170 . ./myread
5171 case "$ans" in
5172 y|Y)    val="$define" ;;
5173 *)      val="$undef" ;;
5174 esac
5175 set usesocks
5176 eval $setvar
5177
5178 : Check for uselongdouble support
5179 case "$ccflags" in
5180 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5181 esac
5182
5183 case "$uselongdouble" in
5184 $define|true|[yY]*)     dflt='y';;
5185 *) dflt='n';;
5186 esac
5187 cat <<EOM
5188
5189 Perl can be built to take advantage of long doubles which
5190 (if available) may give more accuracy and range for floating point numbers.
5191
5192 If this doesn't make any sense to you, just accept the default '$dflt'.
5193 EOM
5194 rp='Try to use long doubles if available?'
5195 . ./myread
5196 case "$ans" in
5197 y|Y)    val="$define"   ;;
5198 *)      val="$undef"    ;;
5199 esac
5200 set uselongdouble
5201 eval $setvar
5202
5203 case "$uselongdouble" in
5204 true|[yY]*) uselongdouble="$define" ;;
5205 esac
5206
5207 : Look for a hint-file generated 'call-back-unit'.  If the
5208 : user has specified that long doubles should be used,
5209 : we may need to set or change some other defaults.
5210 if $test -f uselongdouble.cbu; then
5211     echo "Your platform has some specific hints regarding long doubles, using them..."
5212     . ./uselongdouble.cbu
5213 else
5214     case "$uselongdouble" in
5215         $define)
5216                 $cat <<EOM
5217 (Your platform does not have any specific hints for long doubles.)
5218 EOM
5219         ;;
5220     esac
5221 fi
5222
5223 : Check if quadmath is requested
5224 case "$usequadmath" in
5225 "$define"|true|[yY]*) usequadmath="$define" ;;
5226 *)                    usequadmath="$undef"  ;;
5227 esac
5228
5229 : Looking for optional libraries
5230 echo " "
5231 echo "Checking for optional libraries..." >&4
5232 case "$libs" in
5233 ' '|'') dflt='';;
5234 *) dflt="$libs";;
5235 esac
5236 case "$libswanted" in
5237 '') libswanted='c_s';;
5238 esac
5239 case "$usesocks" in
5240 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
5241 esac
5242 case "$usecbacktrace" in
5243 "$define") libswanted="$libswanted bfd" ;;
5244 esac
5245 case "$usequadmath" in
5246 "$define") libswanted="$libswanted quadmath" ;;
5247 esac
5248 libsfound=''
5249 libsfiles=''
5250 libsdirs=''
5251 libspath=''
5252 for thisdir in $libpth $xlibpth; do
5253   test -d $thisdir && libspath="$libspath $thisdir"
5254 done
5255 for thislib in $libswanted; do
5256         for thisdir in $libspath; do
5257             xxx=''
5258             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
5259                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
5260                 $test -f "$xxx" && eval $libscheck
5261                 $test -f "$xxx" && libstyle=shared
5262                 xxx=`ls $thisdir/lib$thislib.[0-9].$so 2>/dev/null|sed -n '$p'`
5263                 $test -f "$xxx" && eval $libscheck
5264                 $test -f "$xxx" && libstyle=shared
5265             fi
5266             if test ! -f "$xxx"; then
5267                 xxx=$thisdir/lib$thislib.$so
5268                 $test -f "$xxx" && eval $libscheck
5269                 $test -f "$xxx" && libstyle=shared
5270             fi
5271             if test ! -f "$xxx"; then
5272                 xxx=$thisdir/lib$thislib$_a
5273                 $test -f "$xxx" && eval $libscheck
5274                 $test -f "$xxx" && libstyle=static
5275             fi
5276             if test ! -f "$xxx"; then
5277                 xxx=$thisdir/$thislib$_a
5278                 $test -f "$xxx" && eval $libscheck
5279                 $test -f "$xxx" && libstyle=static
5280             fi
5281             if test ! -f "$xxx"; then
5282                 xxx=$thisdir/lib${thislib}_s$_a
5283                 $test -f "$xxx" && eval $libscheck
5284                 $test -f "$xxx" && libstyle=static
5285                 $test -f "$xxx" && thislib=${thislib}_s
5286             fi
5287             if test ! -f "$xxx"; then
5288                 xxx=$thisdir/Slib$thislib$_a
5289                 $test -f "$xxx" && eval $libscheck
5290                 $test -f "$xxx" && libstyle=static
5291             fi
5292             if $test -f "$xxx"; then
5293                 case "$libstyle" in
5294                 shared) echo "Found -l$thislib (shared)." ;;
5295                 static) echo "Found -l$thislib." ;;
5296                 *)      echo "Found -l$thislib ($libstyle)." ;;
5297                 esac
5298                 case " $dflt " in
5299                 *"-l$thislib "*);;
5300                 *) dflt="$dflt -l$thislib"
5301                    libsfound="$libsfound $xxx"
5302                    yyy=`basename $xxx`
5303                    libsfiles="$libsfiles $yyy"
5304                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
5305                    case " $libsdirs " in
5306                    *" $yyy "*) ;;
5307                    *) libsdirs="$libsdirs $yyy" ;;
5308                    esac
5309                    ;;
5310                 esac
5311                 break
5312             fi
5313         done
5314         if $test ! -f "$xxx"; then
5315             echo "No -l$thislib."
5316         fi
5317 done
5318 set X $dflt
5319 shift
5320 dflt="$*"
5321 case "$libs" in
5322 '') dflt="$dflt";;
5323 *) dflt="$libs";;
5324 esac
5325 case "$dflt" in
5326 ' '|'') dflt='none';;
5327 esac
5328
5329 $cat <<EOM
5330
5331 In order to compile $package on your machine, a number of libraries
5332 are usually needed.  Include any other special libraries here as well.
5333 Say "none" for none.  The default list is almost always right.
5334 EOM
5335
5336 echo " "
5337 rp="What libraries to use?"
5338 . ./myread
5339 case "$ans" in
5340 none) libs=' ';;
5341 *) libs="$ans";;
5342 esac
5343
5344 : determine optimization, if desired, or use for debug flag also
5345 case "$optimize" in
5346 ' '|$undef) dflt='none';;
5347 '') dflt='-O';;
5348 *) dflt="$optimize";;
5349 esac
5350 $cat <<EOH
5351
5352 By default, $package compiles with the -O flag to use the optimizer.
5353 Alternately, you might want to use the symbolic debugger, which uses
5354 the -g flag (on traditional Unix systems).  Either flag can be
5355 specified here.  To use neither flag, specify the word "none".
5356
5357 EOH
5358 rp="What optimizer/debugger flag should be used?"
5359 . ./myread
5360 optimize="$ans"
5361 case "$optimize" in
5362 'none') optimize=" ";;
5363 esac
5364
5365 : Check what DEBUGGING is required from the command line
5366 : -DEBUGGING      or -DDEBUGGING or
5367 : -DEBUGGING=both                       = -g + -DDEBUGGING
5368 : -DEBUGGING=-g   or -Doptimize=-g      = -g
5369 : -DEBUGGING=none or -UDEBUGGING        =
5370 : -DEBUGGING=old  or -DEBUGGING=default = ? $optimize
5371 case "$EBUGGING" in
5372 '')     ;;
5373 *)      DEBUGGING=$EBUGGING ;;
5374 esac
5375
5376 case "$DEBUGGING" in
5377 -g|both|$define)
5378     case "$optimize" in
5379         *-g*) ;;
5380         *)    optimize="$optimize -g" ;;
5381     esac ;;
5382 none|$undef)
5383     case "$optimize" in
5384         *-g*)   set `echo "X $optimize " | sed 's/ -g / /'`
5385                 shift
5386                 optimize="$*"
5387                 ;;
5388     esac ;;
5389 esac
5390
5391 dflt=''
5392 case "$DEBUGGING" in
5393 both|$define) dflt='-DDEBUGGING'
5394 esac
5395
5396 : argument order is deliberate, as the flag will start with - which set could
5397 : think is an option
5398 checkccflag='check=$1; flag=$2; callback=$3;
5399 echo " ";
5400 echo "Checking if your compiler accepts $flag" 2>&1;
5401 [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot";
5402 echo "int main(void) { return 0; }" > gcctest.c;
5403 if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then
5404     echo "Yes, it does." 2>&1;
5405     if $test -s gcctest.out ; then
5406         echo "But your platform does not like it:";
5407         cat gcctest.out;
5408     else
5409         case "$ccflags" in
5410         *$check*)
5411             echo "Leaving current flags $ccflags alone." 2>&1
5412             ;;
5413         *) dflt="$dflt $flag";
5414             eval $callback
5415             ;;
5416         esac
5417     fi
5418 else
5419     echo "Nope, it does not, but that is ok." 2>&1;
5420 fi
5421 '
5422
5423 : We will not override a previous value, but we might want to
5424 : augment a hint file
5425 case "$hint" in
5426 default|recommended)
5427         case "$gccversion" in
5428         1*) dflt="$dflt -fpcc-struct-return" ;;
5429         esac
5430         case "$optimize:$DEBUGGING" in
5431         *-g*:old) dflt="$dflt -DDEBUGGING";;
5432         esac
5433         case "$gccversion" in
5434         2*) if $test -d /etc/conf/kconfig.d &&
5435                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
5436                 then
5437                         # Interactive Systems (ISC) POSIX mode.
5438                         dflt="$dflt -posix"
5439                 fi
5440                 ;;
5441         esac
5442         case "$gccversion" in
5443         1*) ;;
5444         2.[0-8]*) ;;
5445         ?*)     set strict-aliasing -fno-strict-aliasing
5446                 eval $checkccflag
5447                 ;;
5448         esac
5449         # For gcc, adding -pipe speeds up compilations for some, but apparently
5450         # some assemblers can't read from stdin.  (It also slows down compilations
5451         # in other cases, but those are apparently rarer these days.)  AD 5/2004.
5452         case "$gccversion" in
5453         ?*)     set pipe -pipe
5454                 eval $checkccflag
5455                 ;;
5456         esac
5457
5458         # on x86_64 (at least) we require an extra library (libssp) in the
5459         # link command line. This library is not named, so I infer that it is
5460         # an implementation detail that may change. Hence the safest approach
5461         # is to add the flag to the flags passed to the compiler at link time,
5462         # as that way the compiler can do the right implementation dependant
5463         # thing. (NWC)
5464         case "$osname" in
5465         amigaos) ;; # -fstack-protector builds but doesn't work
5466         *)      case "$gccversion" in
5467                 ?*)     set stack-protector-strong -fstack-protector-strong
5468                         eval $checkccflag
5469                         case "$dflt" in
5470                         *-fstack-protector-strong*) ;; # It got added.
5471                         *) # Try the plain/older -fstack-protector.
5472                            set stack-protector -fstack-protector
5473                            eval $checkccflag
5474                            ;;
5475                         esac
5476                         ;;
5477                 esac
5478                 ;;
5479         esac
5480         ;;
5481 esac
5482
5483 case "$mips_type" in
5484 *BSD*|'') inclwanted="$locincpth $usrinc";;
5485 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
5486 esac
5487 for thisincl in $inclwanted; do
5488         if $test -d $thisincl; then
5489                 if $test x$thisincl != x$usrinc; then
5490                         case "$dflt" in
5491                         *" -I$thisincl "*);;
5492                         *) dflt="$dflt -I$thisincl ";;
5493                         esac
5494                 fi
5495         fi
5496 done
5497
5498 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
5499         xxx=true;
5500 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
5501         xxx=true;
5502 else
5503         xxx=false;
5504 fi;
5505 if $xxx; then
5506         case "$dflt" in
5507         *$2*);;
5508         *) dflt="$dflt -D$2";;
5509         esac;
5510 fi'
5511
5512 set signal.h LANGUAGE_C; eval $inctest
5513
5514 case "$usesocks" in
5515 $define)
5516         ccflags="$ccflags -DSOCKS"
5517         ;;
5518 esac
5519
5520 case "$hint" in
5521 default|recommended) dflt="$ccflags $dflt" ;;
5522 *) dflt="$ccflags";;
5523 esac
5524
5525 case "$dflt" in
5526 ''|' ') dflt=none;;
5527 esac
5528
5529 $cat <<EOH
5530
5531 Your C compiler may want other flags.  For this question you should include
5532 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
5533 but you should NOT include libraries or ld flags like -lwhatever.  If you
5534 want $package to honor its debug switch, you should include -DDEBUGGING here.
5535 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
5536
5537 To use no flags, specify the word "none".
5538
5539 EOH
5540 set X $dflt
5541 shift
5542 dflt=${1+"$@"}
5543 rp="Any additional cc flags?"
5544 . ./myread
5545 case "$ans" in
5546 none) ccflags='';;
5547 *) ccflags="$ans";;
5548 esac
5549
5550 : the following weeds options from ccflags that are of no interest to cpp
5551 case "$cppflags" in
5552 '') cppflags="$ccflags" ;;
5553 *)  cppflags="$cppflags $ccflags" ;;
5554 esac
5555 case "$gccversion" in
5556 1*) cppflags="$cppflags -D__GNUC__"
5557 esac
5558 case "$mips_type" in
5559 '');;
5560 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
5561 esac
5562 case "$cppflags" in
5563 '');;
5564 *)
5565         echo " "
5566         echo "Let me guess what the preprocessor flags are..." >&4
5567         set X $cppflags
5568         shift
5569         cppflags=''
5570         $cat >cpp.c <<'EOM'
5571 #define BLURFL foo
5572
5573 BLURFL xx LFRULB
5574 EOM
5575         previous=''
5576         for flag in $*
5577         do
5578                 case "$flag" in
5579                 -*) ftry="$flag";;
5580                 *) ftry="$previous $flag";;
5581                 esac
5582                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
5583                         >cpp1.out 2>/dev/null && \
5584                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
5585                         >cpp2.out 2>/dev/null && \
5586                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
5587                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
5588                 then
5589                         cppflags="$cppflags $ftry"
5590                         previous=''
5591                 else
5592                         previous="$flag"
5593                 fi
5594         done
5595         set X $cppflags
5596         shift
5597         cppflags=${1+"$@"}
5598         case "$cppflags" in
5599         *-*)  echo "They appear to be: $cppflags";;
5600         esac
5601         $rm -f cpp.c cpp?.out
5602         ;;
5603 esac
5604
5605 : flags used in final linking phase
5606 case "$ldflags" in
5607 '') if ./venix; then
5608                 dflt='-i -z'
5609         else
5610                 dflt=''
5611         fi
5612         case "$ccflags" in
5613         *-posix*) dflt="$dflt -posix" ;;
5614         esac
5615         ;;
5616 *) dflt="$ldflags";;
5617 esac
5618 # See note above about -fstack-protector
5619 case "$ccflags" in
5620 *-fstack-protector-strong*)
5621         case "$dflt" in
5622         *-fstack-protector-strong*) ;; # Don't add it again
5623         *) dflt="$dflt -fstack-protector-strong" ;;
5624         esac
5625         ;;
5626 *-fstack-protector*)
5627         case "$dflt" in
5628         *-fstack-protector*) ;; # Don't add it again
5629         *) dflt="$dflt -fstack-protector" ;;
5630         esac
5631         ;;
5632 esac
5633
5634 : Try to guess additional flags to pick up local libraries.
5635 for thislibdir in $libpth; do
5636         case " $loclibpth " in
5637         *" $thislibdir "*)
5638                 case "$dflt " in
5639                 *"-L$thislibdir "*) ;;
5640                 *)  dflt="$dflt -L$thislibdir" ;;
5641                 esac
5642                 ;;
5643         esac
5644 done
5645
5646 case "$dflt" in
5647 '') dflt='none' ;;
5648 esac
5649
5650 $cat <<EOH
5651
5652 Your C linker may need flags.  For this question you should
5653 include -L/whatever and any other flags used by the C linker, but you
5654 should NOT include libraries like -lwhatever.
5655
5656 Make sure you include the appropriate -L/path flags if your C linker
5657 does not normally search all of the directories you specified above,
5658 namely
5659         $libpth
5660 To use no flags, specify the word "none".
5661
5662 EOH
5663
5664 rp="Any additional ld flags (NOT including libraries)?"
5665 . ./myread
5666 case "$ans" in
5667 none) ldflags='';;
5668 *) ldflags="$ans";;
5669 esac
5670 rmlist="$rmlist pdp11"
5671
5672 : coherency check
5673 echo " "
5674 echo "Checking your choice of C compiler and flags for coherency..." >&4
5675 $cat > try.c <<'EOF'
5676 #include <stdio.h>
5677 int main() { printf("Ok\n"); return(0); }
5678 EOF
5679 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
5680 shift
5681 $cat >try.msg <<'EOM'
5682 I've tried to compile and run the following simple program:
5683
5684 EOM
5685 $cat try.c >> try.msg
5686
5687 $cat >> try.msg <<EOM
5688
5689 I used the command:
5690
5691         $*
5692         $run ./try
5693
5694 and I got the following output:
5695
5696 EOM
5697 dflt=y
5698 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
5699         if $sh -c "$run ./try " >>try.msg 2>&1; then
5700                 xxx=`$run ./try`
5701                 case "$xxx" in
5702                 "Ok") dflt=n ;;
5703                 *)    echo 'The program compiled OK, but produced no output.' >> try.msg ;;
5704                 esac
5705         else
5706                 echo "The program compiled OK, but exited with status $?." >>try.msg
5707                 rp="You have a problem.  Shall I abort Configure"
5708                 dflt=y
5709         fi
5710 else
5711         echo "I can't compile the test program." >>try.msg
5712         rp="You have a BIG problem.  Shall I abort Configure"
5713         dflt=y
5714 fi
5715 case "$dflt" in
5716 y)
5717         $cat try.msg >&4
5718         case "$knowitall" in
5719         '')
5720                 echo "(The supplied flags or libraries might be incorrect.)"
5721                 ;;
5722         *) dflt=n;;
5723         esac
5724         echo " "
5725         . ./myread
5726         case "$ans" in
5727         n*|N*) ;;
5728         *)      echo "Ok.  Stopping Configure." >&4
5729                 exit 1
5730                 ;;
5731         esac
5732         ;;
5733 n) echo "OK, that should do.";;
5734 esac
5735 $rm_try gcctest gcctest.out
5736
5737 : define a shorthand compile call
5738 compile='
5739 mc_file=$1;
5740 shift;
5741 case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then
5742 echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4;
5743 exit 1;
5744 fi;
5745 esac;
5746 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
5747 : define a shorthand compile call for compilations that should be ok.
5748 compile_ok='
5749 mc_file=$1;
5750 shift;
5751 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
5752
5753 : determine filename position in cpp output
5754 echo " "
5755 echo "Computing filename position in cpp output for #include directives..." >&4
5756 case "$osname" in
5757 amigaos) fieldn=3 ;;  # Workaround for a bug in abc (pdksh).
5758 esac
5759 case "$fieldn" in
5760 '')
5761 case "$osname" in
5762 vos) testaccess=-e ;;
5763 *)   testaccess=-r ;;
5764 esac
5765 echo '#include <stdio.h>' > foo.c
5766 $cat >fieldn <<EOF
5767 $startsh
5768 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5769 $grep '^[       ]*#.*stdio\.h' | \
5770 while read cline; do
5771         pos=1
5772         set \$cline
5773         while $test \$# -gt 0; do
5774                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
5775                         echo "\$pos"
5776                         exit 0
5777                 fi
5778                 shift
5779                 pos=\`expr \$pos + 1\`
5780         done
5781 done
5782 EOF
5783 chmod +x fieldn
5784 fieldn=`./fieldn`
5785 $rm -f foo.c fieldn
5786 ;;
5787 esac
5788 case $fieldn in
5789 '') pos='???';;
5790 1) pos=first;;
5791 2) pos=second;;
5792 3) pos=third;;
5793 *) pos="${fieldn}th";;
5794 esac
5795 echo "Your cpp writes the filename in the $pos field of the line."
5796
5797 : locate header file
5798 $cat >findhdr <<EOF
5799 $startsh
5800 wanted=\$1
5801 name=''
5802 for usrincdir in $incpth
5803 do
5804         if test -f \$usrincdir/\$wanted; then
5805                 echo "\$usrincdir/\$wanted"
5806                 exit 0
5807         fi
5808 done
5809 awkprg='{ print \$$fieldn }'
5810 echo "#include <\$wanted>" > foo\$\$.c
5811 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5812 $cppfilter $grep "^[    ]*#.*\$wanted" | \
5813 while read cline; do
5814         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5815         case "\$name" in
5816         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5817         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5818         *) exit 2;;
5819         esac;
5820 done;
5821 #
5822 # status = 0: grep returned 0 lines, case statement not executed
5823 # status = 1: headerfile found
5824 # status = 2: while loop executed, no headerfile found
5825 #
5826 status=\$?
5827 $rm -f foo\$\$.c;
5828 if test \$status -eq 1; then
5829         exit 0;
5830 fi
5831 exit 1
5832 EOF
5833 chmod +x findhdr
5834
5835 : define an alternate in-header-list? function
5836 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5837 cont=true; xxf="echo \"<\$1> found.\" >&4";
5838 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5839 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5840 esac;
5841 case $# in 4) instead=instead;; *) instead="at last";; esac;
5842 while $test "$cont"; do
5843         xxx=`./findhdr $1`
5844         var=$2; eval "was=\$$2";
5845         if $test "$xxx" && $test -r "$xxx";
5846         then eval $xxf;
5847         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5848                 cont="";
5849         else eval $xxnf;
5850         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5851         set $yyy; shift; shift; yyy=$@;
5852         case $# in 0) cont="";;
5853         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5854                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5855         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5856                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5857         esac;
5858 done;
5859 while $test "$yyy";
5860 do set $yyy; var=$2; eval "was=\$$2";
5861         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5862         set $yyy; shift; shift; yyy=$@;
5863 done'
5864
5865 : see if stdlib is available
5866 set stdlib.h i_stdlib
5867 eval $inhdr
5868
5869 : check for lengths of integral types
5870 echo " "
5871 case "$intsize" in
5872 '')
5873         echo "Checking to see how big your integers are..." >&4
5874         $cat >try.c <<EOCP
5875 #include <stdio.h>
5876 #$i_stdlib I_STDLIB
5877 #ifdef I_STDLIB
5878 #include <stdlib.h>
5879 #endif
5880 int main()
5881 {
5882         printf("intsize=%d;\n", (int)sizeof(int));
5883         printf("longsize=%d;\n", (int)sizeof(long));
5884         printf("shortsize=%d;\n", (int)sizeof(short));
5885         exit(0);
5886 }
5887 EOCP
5888         set try
5889         if eval $compile_ok && $run ./try > /dev/null; then
5890                 eval `$run ./try`
5891                 echo "Your integers are $intsize bytes long."
5892                 echo "Your long integers are $longsize bytes long."
5893                 echo "Your short integers are $shortsize bytes long."
5894         else
5895                 $cat >&4 <<EOM
5896 !
5897 Help! I can't compile and run the intsize test program: please enlighten me!
5898 (This is probably a misconfiguration in your system or libraries, and
5899 you really ought to fix it.  Still, I'll try anyway.)
5900 !
5901 EOM
5902                 dflt=4
5903                 rp="What is the size of an integer (in bytes)?"
5904                 . ./myread
5905                 intsize="$ans"
5906                 dflt=$intsize
5907                 rp="What is the size of a long integer (in bytes)?"
5908                 . ./myread
5909                 longsize="$ans"
5910                 dflt=2
5911                 rp="What is the size of a short integer (in bytes)?"
5912                 . ./myread
5913                 shortsize="$ans"
5914         fi
5915         ;;
5916 esac
5917 $rm_try
5918
5919 : check for long long
5920 echo " "
5921 echo "Checking to see if you have long long..." >&4
5922 echo 'int main() { long long x = 7; return 0; }' > try.c
5923 set try
5924 if eval $compile; then
5925         val="$define"
5926         echo "You have long long."
5927 else
5928         val="$undef"
5929         echo "You do not have long long."
5930 fi
5931 $rm_try
5932 set d_longlong
5933 eval $setvar
5934
5935 : check for length of long long
5936 case "${d_longlong}${longlongsize}" in
5937 $define)
5938         echo " "
5939         echo "Checking to see how big your long longs are..." >&4
5940         $cat >try.c <<'EOCP'
5941 #include <stdio.h>
5942 int main()
5943 {
5944     printf("%d\n", (int)sizeof(long long));
5945     return(0);
5946 }
5947 EOCP
5948         set try
5949         if eval $compile_ok; then
5950                 longlongsize=`$run ./try`
5951                 echo "Your long longs are $longlongsize bytes long."
5952         else
5953                 dflt='8'
5954                 echo " "
5955                 echo "(I can't seem to compile the test program.  Guessing...)"
5956                 rp="What is the size of a long long (in bytes)?"
5957                 . ./myread
5958                 longlongsize="$ans"
5959         fi
5960         if $test "X$longsize" = "X$longlongsize"; then
5961                 echo "(That isn't any different from an ordinary long.)"
5962         fi
5963         ;;
5964 esac
5965 $rm_try
5966
5967 : see if inttypes.h is available
5968 : we want a real compile instead of Inhdr because some systems
5969 : have an inttypes.h which includes non-existent headers
5970 echo " "
5971 $cat >try.c <<EOCP
5972 #include <inttypes.h>
5973 int main() {
5974         static int32_t foo32 = 0x12345678;
5975 }
5976 EOCP
5977 set try
5978 if eval $compile; then
5979         echo "<inttypes.h> found." >&4
5980         val="$define"
5981 else
5982         echo "<inttypes.h> NOT found." >&4
5983         val="$undef"
5984 fi
5985 $rm_try
5986 set i_inttypes
5987 eval $setvar
5988
5989 : check for int64_t
5990 echo " "
5991 echo "Checking to see if you have int64_t..." >&4
5992 $cat >try.c <<EOCP
5993 #include <sys/types.h>
5994 #$i_inttypes I_INTTYPES
5995 #ifdef I_INTTYPES
5996 #include <inttypes.h>
5997 #endif
5998 int main() { int64_t x = 7; }
5999 EOCP
6000 set try
6001 if eval $compile; then
6002         val="$define"
6003         echo "You have int64_t."
6004 else
6005         val="$undef"
6006         echo "You do not have int64_t."
6007 fi
6008 $rm_try
6009 set d_int64_t
6010 eval $setvar
6011
6012 : Check if 64bit ints have a quad type
6013 echo " "
6014 echo "Checking which 64-bit integer type we could use..." >&4
6015
6016 case "$intsize" in
6017 8) val=int
6018    set quadtype
6019    eval $setvar
6020    val='"unsigned int"'
6021    set uquadtype
6022    eval $setvar
6023    quadkind=1
6024    ;;
6025 *) case "$longsize" in
6026    8) val=long
6027       set quadtype
6028       eval $setvar
6029       val='"unsigned long"'
6030       set uquadtype
6031       eval $setvar
6032       quadkind=2
6033       ;;
6034    *) case "$d_longlong:$longlongsize" in
6035       define:8)
6036         val='"long long"'
6037         set quadtype
6038         eval $setvar
6039         val='"unsigned long long"'
6040         set uquadtype
6041         eval $setvar
6042         quadkind=3
6043         ;;
6044       *) case "$d_int64_t" in
6045          define)
6046            val=int64_t
6047            set quadtype
6048            eval $setvar
6049            val=uint64_t
6050            set uquadtype
6051            eval $setvar
6052            quadkind=4
6053            ;;
6054          esac
6055          ;;
6056       esac
6057       ;;
6058    esac
6059    ;;
6060 esac
6061
6062 case "$quadtype" in
6063 '')     echo "Alas, no 64-bit integer types in sight." >&4
6064         d_quad="$undef"
6065         ;;
6066 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
6067         d_quad="$define"
6068         ;;
6069 esac
6070
6071 : Do we want 64bit support
6072 case "$uselonglong" in
6073 "$define"|true|[yY]*)
6074         cat <<EOM >&4
6075
6076 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
6077 EOM
6078         use64bitint="$define"
6079         ;;
6080 esac
6081 case "$use64bits" in
6082 "$define"|true|[yY]*)
6083         cat <<EOM >&4
6084
6085 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
6086 EOM
6087         use64bitint="$define"
6088         ;;
6089 esac
6090 case "$use64bitints" in
6091 "$define"|true|[yY]*)
6092         cat <<EOM >&4
6093
6094 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
6095 EOM
6096         use64bitint="$define"
6097         ;;
6098 esac
6099 case "$use64bitsint" in
6100 "$define"|true|[yY]*)
6101         cat <<EOM >&4
6102
6103 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
6104 EOM
6105         use64bitint="$define"
6106         ;;
6107 esac
6108 case "$uselonglongs" in
6109 "$define"|true|[yY]*)
6110         cat <<EOM >&4
6111
6112 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
6113 EOM
6114         use64bitint="$define"
6115         ;;
6116 esac
6117 case "$use64bitsall" in
6118 "$define"|true|[yY]*)
6119         cat <<EOM >&4
6120
6121 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
6122 EOM
6123         use64bitall="$define"
6124         ;;
6125 esac
6126
6127 case "$ccflags" in
6128 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
6129 esac
6130 case "$use64bitall" in
6131 "$define"|true|[yY]*) use64bitint="$define" ;;
6132 esac
6133
6134 case "$longsize" in
6135 8) cat <<EOM
6136
6137 You have natively 64-bit long integers.
6138 EOM
6139    val="$define"
6140    ;;
6141 *) case "$use64bitint" in
6142    "$define"|true|[yY]*) dflt='y';;
6143    *) dflt='n';;
6144    esac
6145    case "$d_quad" in
6146    "$define") ;;
6147    *) dflt='n' ;;
6148    esac
6149    cat <<EOM
6150
6151 Perl can be built to take advantage of 64-bit integer types
6152 on some systems.  To do so, Configure can be run with -Duse64bitint.
6153 Choosing this option will most probably introduce binary incompatibilities.
6154
6155 If this doesn't make any sense to you, just accept the default '$dflt'.
6156 (The default has been chosen based on your configuration.)
6157 EOM
6158    rp='Try to use 64-bit integers, if available?'
6159    . ./myread
6160    case "$ans" in
6161    [yY]*) val="$define" ;;
6162    *)     val="$undef"  ;;
6163    esac
6164    ;;
6165 esac
6166 set use64bitint
6167 eval $setvar
6168
6169 case "$use64bitall" in
6170 "$define"|true|[yY]*) dflt='y' ;;
6171 *) case "$longsize" in
6172    8) dflt='y' ;;
6173    *) dflt='n' ;;
6174    esac
6175    ;;
6176 esac
6177 cat <<EOM
6178
6179 You may also choose to try maximal 64-bitness.  It means using as much
6180 64-bitness as possible on the platform.  This in turn means even more
6181 binary incompatibilities.  On the other hand, your platform may not
6182 have any more 64-bitness available than what you already have chosen.
6183
6184 If this doesn't make any sense to you, just accept the default '$dflt'.
6185 (The default has been chosen based on your configuration.)
6186 EOM
6187 rp='Try to use maximal 64-bit support, if available?'
6188 . ./myread
6189 case "$ans" in
6190 [yY]*) val="$define" ;;
6191 *)     val="$undef"  ;;
6192 esac
6193 set use64bitall
6194 eval $setvar
6195 case "$use64bitall" in
6196 "$define")
6197         case "$use64bitint" in
6198         "$undef")
6199                 cat <<EOM
6200
6201 Since you have chosen a maximally 64-bit build, I'm also turning on
6202 the use of 64-bit integers.
6203 EOM
6204                 use64bitint="$define" ;;
6205         esac
6206         ;;
6207 esac
6208
6209 : Look for a hint-file generated 'call-back-unit'.  If the
6210 : user has specified that a 64-bit perl is to be built,
6211 : we may need to set or change some other defaults.
6212 if $test -f use64bitint.cbu; then
6213         echo "Your platform has some specific hints regarding 64-bit integers, using them..."
6214         . ./use64bitint.cbu
6215 fi
6216 case "$use64bitint" in
6217 "$define"|true|[yY]*)
6218         : This test was common to all the OpenBSD forks, and seems harmless for
6219         : other platforms:
6220         echo " "
6221         echo "Checking if your C library has broken 64-bit functions..." >&4
6222         cat >try.c <<EOCP
6223 #include <stdio.h>
6224 typedef $uquadtype myULL;
6225 int main (void)
6226 {
6227     struct {
6228         double d;
6229         myULL  u;
6230     } *p, test[] = {
6231         {4294967303.15, 4294967303ULL},
6232         {4294967294.2,  4294967294ULL},
6233         {4294967295.7,  4294967295ULL},
6234         {0.0, 0ULL}
6235     };
6236     for (p = test; p->u; p++) {
6237         myULL x = (myULL)p->d;
6238         if (x != p->u) {
6239             printf("buggy\n");
6240             return 0;
6241         }
6242     }
6243     printf("ok\n");
6244     return 0;
6245 }
6246 EOCP
6247         set try
6248         if eval $compile_ok; then
6249             libcquad=`$run ./try`
6250             echo "Your C library's 64-bit functions are $libcquad."
6251         else
6252             echo "(I can't seem to compile the test program.)"
6253             echo "Assuming that your C library's 64-bit functions are ok."
6254             libcquad="ok"
6255         fi
6256         $rm_try
6257
6258         case "$libcquad" in
6259             buggy*)
6260                 cat >&4 <<EOM
6261
6262 *** You have a C library with broken 64-bit functions.
6263 *** 64-bit support does not work reliably in this configuration.
6264 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6265 *** Cannot continue, aborting.
6266
6267 EOM
6268                 exit 1
6269                 ;;
6270         esac
6271         case "$longsize" in
6272         4) case "$archname64" in
6273            '') archname64=64int ;;
6274            esac
6275            ;;
6276         esac
6277         ;;
6278 esac
6279
6280 : Look for a hint-file generated 'call-back-unit'.  If the
6281 : user has specified that a maximally 64-bit perl is to be built,
6282 : we may need to set or change some other defaults.
6283 if $test -f use64bitall.cbu; then
6284         echo "Your platform has some specific hints regarding 64-bit builds, using them..."
6285         . ./use64bitall.cbu
6286 fi
6287 case "$use64bitall" in
6288 "$define"|true|[yY]*)
6289         case "$longsize" in
6290         4) case "$archname64" in
6291            ''|64int) archname64=64all ;;
6292            esac
6293            ;;
6294         esac
6295         ;;
6296 esac
6297
6298 case "$d_quad:$use64bitint" in
6299 $undef:$define)
6300         cat >&4 <<EOF
6301
6302 *** You have chosen to use 64-bit integers,
6303 *** but none can be found.
6304 *** Please rerun Configure without -Duse64bitint and/or -Dusemorebits.
6305 *** Cannot continue, aborting.
6306
6307 EOF
6308         exit 1
6309         ;;
6310 esac
6311
6312 : Check if we are using the GNU C library
6313 echo " "
6314 echo "Checking for GNU C Library..." >&4
6315 cat >try.c <<'EOCP'
6316 /* Find out version of GNU C library.  __GLIBC__ and __GLIBC_MINOR__
6317    alone are insufficient to distinguish different versions, such as
6318    2.0.6 and 2.0.7.  The function gnu_get_libc_version() appeared in
6319    libc version 2.1.0.      A. Dougherty,  June 3, 2002.
6320 */
6321 #include <stdio.h>
6322 int main(void)
6323 {
6324 #ifdef __GLIBC__
6325 #   ifdef __GLIBC_MINOR__
6326 #       if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 && !defined(__cplusplus)
6327 #           include <gnu/libc-version.h>
6328             printf("%s\n",  gnu_get_libc_version());
6329 #       else
6330             printf("%d.%d\n",  __GLIBC__, __GLIBC_MINOR__);
6331 #       endif
6332 #   else
6333         printf("%d\n",  __GLIBC__);
6334 #   endif
6335     return 0;
6336 #else
6337     return 1;
6338 #endif
6339 }
6340 EOCP
6341 set try
6342 if eval $compile_ok && $run ./try > glibc.ver; then
6343         val="$define"
6344         gnulibc_version=`$cat glibc.ver`
6345         echo "You are using the GNU C Library version $gnulibc_version"
6346 else
6347         val="$undef"
6348         gnulibc_version=''
6349         echo "You are not using the GNU C Library"
6350 fi
6351 $rm_try glibc.ver
6352 set d_gnulibc
6353 eval $setvar
6354
6355 : see if nm is to be used to determine whether a symbol is defined or not
6356 case "$usenm" in
6357 '')
6358         dflt=''
6359         case "$d_gnulibc" in
6360         "$define")
6361                 echo " "
6362                 echo "nm probably won't work on the GNU C Library." >&4
6363                 dflt=n
6364                 ;;
6365         esac
6366         case "$dflt" in
6367         '')
6368                 if $test "$osname" = aix -a "X$PASE" != "Xdefine" -a ! -f /lib/syscalls.exp; then
6369                         echo " "
6370                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
6371                         echo "'nm' won't be sufficient on this system." >&4
6372                         dflt=n
6373                 fi
6374                 ;;
6375         esac
6376         case "$dflt" in
6377         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
6378                 if $test $dflt -gt 20; then
6379                         dflt=y
6380                 else
6381                         dflt=n
6382                 fi
6383                 ;;
6384         esac
6385         ;;
6386 *)
6387         case "$usenm" in
6388         true|$define) dflt=y;;
6389         *) dflt=n;;
6390         esac
6391         ;;
6392 esac
6393 $cat <<EOM
6394
6395 I can use $nm to extract the symbols from your C libraries. This
6396 is a time consuming task which may generate huge output on the disk (up
6397 to 3 megabytes) but that should make the symbols extraction faster. The
6398 alternative is to skip the 'nm' extraction part and to compile a small
6399 test program instead to determine whether each symbol is present. If
6400 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
6401 this may be the best solution.
6402
6403 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
6404
6405 EOM
6406 rp="Shall I use $nm to extract C symbols from the libraries?"
6407 . ./myread
6408 case "$ans" in
6409 [Nn]*) usenm=false;;
6410 *) usenm=true;;
6411 esac
6412
6413 runnm=$usenm
6414 case "$reuseval" in
6415 true) runnm=false;;
6416 esac
6417
6418 : nm options which may be necessary
6419 case "$nm_opt" in
6420 '') if $test -f /mach_boot; then
6421                 nm_opt=''       # Mach
6422         elif $test -d /usr/ccs/lib; then
6423                 nm_opt='-p'     # Solaris (and SunOS?)
6424         elif $test -f /dgux; then
6425                 nm_opt='-p'     # DG-UX
6426         elif $test -f /lib64/rld; then
6427                 nm_opt='-p'     # 64-bit Irix
6428         else
6429                 nm_opt=''
6430         fi;;
6431 esac
6432
6433 : nm options which may be necessary for shared libraries but illegal
6434 : for archive libraries.  Thank you, Linux.
6435 case "$nm_so_opt" in
6436 '')     case "$myuname" in
6437         *linux*|gnu*)
6438                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
6439                         nm_so_opt='--dynamic'
6440                 fi
6441                 ;;
6442         esac
6443         ;;
6444 esac
6445
6446 : Figure out where the libc is located
6447 case "$runnm" in
6448 true)
6449 : get list of predefined functions in a handy place
6450 echo " "
6451 case "$libc" in
6452 '') libc=unknown
6453         case "$libs" in
6454         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
6455         esac
6456         ;;
6457 esac
6458 case "$libs" in
6459 '') ;;
6460 *)  for thislib in $libs; do
6461         case "$thislib" in
6462         -lc|-lc_s)
6463                 : Handle C library specially below.
6464                 ;;
6465         -l*)
6466                 thislib=`echo $thislib | $sed -e 's/^-l//'`
6467                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
6468                         :
6469                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
6470                         :
6471                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
6472                         :
6473                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
6474                         :
6475                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
6476                         :
6477                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
6478                         :
6479                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
6480                         :
6481                 else
6482                         try=''
6483                 fi
6484                 libnames="$libnames $try"
6485                 ;;
6486         *) libnames="$libnames $thislib" ;;
6487         esac
6488         done
6489         ;;
6490 esac
6491 xxx=normal
6492 case "$libc" in
6493 unknown)
6494         set /lib/libc.$so
6495         for xxx in $libpth; do
6496                 $test -r $1 || set $xxx/libc.$so
6497                 : The messy sed command sorts on library version numbers.
6498                 $test -r $1 || \
6499                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
6500                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
6501                                 h
6502                                 s/[0-9][0-9]*/0000&/g
6503                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
6504                                 G
6505                                 s/\n/ /' | \
6506                          $sort | $sed -e 's/^.* //'`
6507                 eval set \$$#
6508         done
6509         $test -r $1 || set $sysroot/usr/ccs/lib/libc.$so
6510         $test -r $1 || set $sysroot/lib/libsys_s$_a
6511         ;;
6512 *)
6513         set blurfl
6514         ;;
6515 esac
6516 if $test -r "$1"; then
6517         echo "Your (shared) C library seems to be in $1."
6518         libc="$1"
6519 elif $test -r /lib/libc && $test -r /lib/clib; then
6520         echo "Your C library seems to be in both /lib/clib and /lib/libc."
6521         xxx=apollo
6522         libc='/lib/clib /lib/libc'
6523         if $test -r /lib/syslib; then
6524                 echo "(Your math library is in /lib/syslib.)"
6525                 libc="$libc /lib/syslib"
6526         fi
6527 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6528         echo "Your C library seems to be in $libc, as you said before."
6529 elif $test -r $incpath/usr/lib/libc$_a; then
6530         libc=$incpath/usr/lib/libc$_a;
6531         echo "Your C library seems to be in $libc.  That's fine."
6532 elif $test -r /lib/libc$_a; then
6533         libc=/lib/libc$_a;
6534         echo "Your C library seems to be in $libc.  You're normal."
6535 else
6536         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
6537                 :
6538         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
6539                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
6540         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
6541                 :
6542         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6543                 :
6544         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6545                 :
6546         else
6547                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
6548         fi
6549         if $test -r "$tans"; then
6550                 echo "Your C library seems to be in $tans, of all places."
6551                 libc=$tans
6552         else
6553                 libc='blurfl'
6554         fi
6555 fi
6556 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6557         dflt="$libc"
6558         cat <<EOM
6559
6560 If the guess above is wrong (which it might be if you're using a strange
6561 compiler, or your machine supports multiple models), you can override it here.
6562
6563 EOM
6564 else
6565         dflt=''
6566         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
6567         cat >&4 <<EOM
6568 I can't seem to find your C library.  I've looked in the following places:
6569
6570 EOM
6571         $sed 's/^/      /' libpath
6572         cat <<EOM
6573
6574 None of these seems to contain your C library. I need to get its name...
6575
6576 EOM
6577 fi
6578 fn=f
6579 rp='Where is your C library?'
6580 . ./getfile
6581 libc="$ans"
6582
6583 echo " "
6584 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
6585 set X `cat libnames`
6586 shift
6587 xxx=files
6588 case $# in 1) xxx=file; esac
6589 echo "Extracting names from the following $xxx for later perusal:" >&4
6590 echo " "
6591 $sed 's/^/      /' libnames >&4
6592 echo " "
6593 $echo $n "This may take a while...$c" >&4
6594
6595 for file in $*; do
6596         case $file in
6597         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
6598         *) $nm $nm_opt $file 2>/dev/null;;
6599         esac
6600 done >libc.tmp
6601
6602 $echo $n ".$c"
6603 $grep fprintf libc.tmp > libc.ptf
6604 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
6605 xrun='eval "<libc.tmp $com >libc.list"; echo "done." >&4'
6606 xxx='[ADTSIWi]'
6607 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *//p'";\
6608         eval $xscan;\
6609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6610                 eval $xrun
6611 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
6612         eval $xscan;\
6613         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6614                 eval $xrun
6615 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
6616         eval $xscan;\
6617         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6618                 eval $xrun
6619 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
6620         eval $xscan;\
6621         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6622                 eval $xrun
6623 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
6624         eval $xscan;\
6625         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6626                 eval $xrun
6627 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
6628         eval $xscan;\
6629         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6630                 eval $xrun
6631 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
6632                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
6633         eval $xscan;\
6634         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6635                 eval $xrun
6636 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
6637         eval $xscan;\
6638         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6639                 eval $xrun
6640 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
6641         eval $xscan;\
6642         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6643                 eval $xrun
6644 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
6645         eval $xscan;\
6646         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6647                 eval $xrun
6648 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
6649         eval $xscan;\
6650         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6651                 eval $xrun
6652 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
6653         eval $xscan;\
6654         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6655                 eval $xrun
6656 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
6657         eval $xscan;\
6658         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6659                 eval $xrun
6660 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
6661         eval $xscan;\
6662         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6663                 eval $xrun
6664 else
6665         $nm -p $* 2>/dev/null >libc.tmp
6666         $grep fprintf libc.tmp > libc.ptf
6667         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
6668                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
6669         then
6670                 nm_opt='-p'
6671                 eval $xrun
6672         else
6673                 echo " "
6674                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
6675                 com=''
6676                 if $ar t $libc > libc.tmp && \
6677                         $contains '^fprintf$' libc.tmp >/dev/null 2>&1
6678                 then
6679                         for thisname in $libnames $libc; do
6680                                 $ar t $thisname >>libc.tmp
6681                         done
6682                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
6683                         echo "Ok." >&4
6684                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
6685                         for thisname in $libnames $libc; do
6686                                 $ar tv $thisname >>libc.tmp
6687                                 emximp -o tmp.imp $thisname \
6688                                     2>/dev/null && \
6689                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
6690                                     < tmp.imp >>libc.tmp
6691                                 $rm -f tmp.imp
6692                         done
6693                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6694                         echo "Ok." >&4
6695                 else
6696                         echo "$ar didn't seem to work right." >&4
6697                         echo "Maybe this is a Cray...trying bld instead..." >&4
6698                         if  bld t $libc | \
6699                                 $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list &&
6700                                 $test -s libc.list
6701                         then
6702                                 for thisname in $libnames; do
6703                                         bld t $libnames | \
6704                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6705                                         $ar t $thisname >>libc.tmp
6706                                 done
6707                                 echo "Ok." >&4
6708                         else
6709                                 echo "That didn't work either.  Giving up." >&4
6710                                 exit 1
6711                         fi
6712                 fi
6713         fi
6714 fi
6715 nm_extract="$com"
6716 case "$PASE" in
6717 define)
6718     echo " "
6719     echo "Since you are compiling for PASE, extracting more symbols from libc.a ...">&4
6720     dump -Tv /lib/libc.a | awk '$7 == "/unix" {print $5 " " $8}' | grep "^SV" | awk '{print $2}' >> libc.list
6721     ;;
6722 *)  if $test -f /lib/syscalls.exp; then
6723         echo " "
6724         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6725         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' \
6726                 /lib/syscalls.exp >>libc.list
6727     fi
6728     ;;
6729 esac
6730 ;;
6731 esac
6732 $rm -f libnames libpath
6733
6734 : Check if we are using C++
6735 echo " "
6736 echo "Checking for C++..." >&4
6737 $cat >try.c <<'EOCP'
6738 #include <stdio.h>
6739 int main(void)
6740 {
6741 #ifdef __cplusplus
6742     return 0;
6743 #else
6744     return 1;
6745 #endif
6746 }
6747 EOCP
6748 set try
6749 if eval $compile_ok && $run ./try; then
6750         val="$define"
6751         echo "You are using a C++ compiler."
6752 else
6753         val="$undef"
6754         echo "You are not using a C++ compiler."
6755 fi
6756 $rm_try cplusplus$$
6757 set d_cplusplus
6758 eval $setvar
6759
6760 : is a C symbol defined?
6761 csym='tlook=$1;
6762 case "$3" in
6763 -v) tf=libc.tmp; tdc="";;
6764 -a) tf=libc.tmp; tdc="[]";;
6765 *) tlook="^$1\$"; tf=libc.list; tdc="()";;
6766 esac;
6767 case "$d_cplusplus" in
6768     $define)    extern_C="extern \"C\"" ;;
6769     *)          extern_C="extern"       ;;
6770 esac;
6771 tx=yes;
6772 case "$reuseval-$4" in
6773 true-) ;;
6774 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6775 esac;
6776 case "$tx" in
6777 yes)
6778         tval=false;
6779         if $test "$runnm" = true; then
6780                 if $contains $tlook $tf >/dev/null 2>&1; then
6781                         tval=true;
6782                 elif $test "$mistrustnm" = compile -o "$mistrustnm" = run; then
6783                         echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p() && p() != (void *)main) return(0); else return(1); }"> try.c;
6784                         $cc -o try $optimize $ccflags $ldflags try.c >/dev/null 2>&1 $libs && tval=true;
6785                         $test "$mistrustnm" = run -a -x try && { $run ./try$_exe >/dev/null 2>&1 || tval=false; };
6786                         $rm_try;
6787                 fi;
6788         else
6789                 echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p() && p() != (void *)main) return(0); else return(1); }"> try.c;
6790                 $cc -o try $optimize $ccflags $ldflags try.c $libs >/dev/null 2>&1 && tval=true;
6791                 $rm_try;
6792         fi;
6793         ;;
6794 *)
6795         case "$tval" in
6796         $define) tval=true;;
6797         *) tval=false;;
6798         esac;
6799         ;;
6800 esac;
6801 eval "$2=$tval"'
6802
6803 : define an is-in-libc? function
6804 inlibc='echo " "; td=$define; tu=$undef;
6805 sym=$1; var=$2; eval "was=\$$2";
6806 tx=yes;
6807 case "$reuseval$was" in
6808 true) ;;
6809 true*) tx=no;;
6810 esac;
6811 case "$tx" in
6812 yes)
6813         set $sym tres -f;
6814         eval $csym;
6815         case "$tres" in
6816         true)
6817                 echo "$sym() found." >&4;
6818                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6819         *)
6820                 echo "$sym() NOT found." >&4;
6821                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6822         esac;;
6823 *)
6824         case "$was" in
6825         $define) echo "$sym() found." >&4;;
6826         *) echo "$sym() NOT found." >&4;;
6827         esac;;
6828 esac'
6829
6830 : check for length of double
6831 echo " "
6832 case "$doublesize" in
6833 '')
6834         echo "Checking to see how big your double precision numbers are..." >&4
6835         $cat >try.c <<EOCP
6836 #include <stdio.h>
6837 #$i_stdlib I_STDLIB
6838 #ifdef I_STDLIB
6839 #include <stdlib.h>
6840 #endif
6841 int main()
6842 {
6843     printf("%d\n", (int)sizeof(double));
6844     exit(0);
6845 }
6846 EOCP
6847         set try
6848         if eval $compile_ok; then
6849                 doublesize=`$run ./try`
6850                 echo "Your double is $doublesize bytes long."
6851         else
6852                 dflt='8'
6853                 echo "(I can't seem to compile the test program.  Guessing...)"
6854                 rp="What is the size of a double precision number (in bytes)?"
6855                 . ./myread
6856                 doublesize="$ans"
6857         fi
6858         ;;
6859 esac
6860 $rm_try
6861
6862 : see if this is a float.h system
6863 set float.h i_float
6864 eval $inhdr
6865
6866 : check for long doubles
6867 echo " "
6868 echo "Checking to see if you have long double..." >&4
6869 echo 'int main() { long double x = 7.0; }' > try.c
6870 set try
6871 if eval $compile; then
6872         val="$define"
6873         echo "You have long double."
6874 else
6875         val="$undef"
6876         echo "You do not have long double."
6877 fi
6878 $rm_try
6879 set d_longdbl
6880 eval $setvar
6881
6882 : see if ldexpl exists
6883 set ldexpl d_ldexpl
6884 eval $inlibc
6885
6886 : check for length of long double
6887 case "${d_longdbl}${longdblsize}" in
6888 $define)
6889         echo " "
6890         echo "Checking to see how big your long doubles are..." >&4
6891         $cat >try.c <<'EOCP'
6892 #include <stdio.h>
6893 int main()
6894 {
6895         printf("%d\n", sizeof(long double));
6896 }
6897 EOCP
6898         set try
6899         set try
6900         if eval $compile; then
6901                 longdblsize=`$run ./try`
6902                 echo "Your long doubles are $longdblsize bytes long."
6903         else
6904                 dflt='8'
6905                 echo " "
6906                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6907                 rp="What is the size of a long double (in bytes)?"
6908                 . ./myread
6909                 longdblsize="$ans"
6910         fi
6911         if $test "X$doublesize" = "X$longdblsize"; then
6912                 echo "That isn't any different from an ordinary double."
6913                 echo "I'll keep your setting anyway, but you may see some"
6914                 echo "harmless compilation warnings."
6915         fi
6916         ;;
6917 esac
6918 $rm_try
6919
6920 $echo "Checking the kind of long doubles you have..." >&4
6921 case "$d_longdbl" in
6922 define)
6923 $cat <<EOP >try.c
6924 #$i_float I_FLOAT
6925 #$i_stdlib I_STDLIB
6926 #define LONGDBLSIZE $longdblsize
6927 #define DOUBLESIZE $doublesize
6928 #ifdef I_FLOAT
6929 #include <float.h>
6930 #endif
6931 #ifdef I_STDLIB
6932 #include <stdlib.h>
6933 #endif
6934 #include <stdio.h>
6935 static const long double d = -0.1L;
6936 int main() {
6937   unsigned const char* b = (unsigned const char*)(&d);
6938 #if DOUBLESIZE == LONGDBLSIZE
6939   printf("0\n"); /* if it floats like double */
6940   exit(0);
6941 #endif
6942 #if (LDBL_MANT_DIG == 113 || FLT128_MANT_DIG == 113) && LONGDBLSIZE == 16
6943   if (b[0] == 0x9A && b[1] == 0x99 && b[15] == 0xBF) {
6944     /* IEEE 754 128-bit little-endian */
6945     printf("1\n");
6946     exit(0);
6947   }
6948   if (b[0] == 0xBF && b[14] == 0x99 && b[15] == 0x9A) {
6949     /* IEEE 128-bit big-endian, e.g. solaris sparc */
6950     printf("2\n");
6951     exit(0);
6952   }
6953 #endif
6954 /* For alignment 32-bit platforms have the 80 bits in 12 bytes,
6955  * while 64-bits platforms have it in 16 bytes. */
6956 #if LDBL_MANT_DIG == 64 && (LONGDBLSIZE == 16 || LONGDBLSIZE == 12)
6957   if (b[0] == 0xCD && b[9] == 0xBF && b[10] == 0x00) {
6958     /* x86 80-bit little-endian, sizeof 12 (ILP32, Solaris x86)
6959      * or 16 (LP64, Linux and OS X), 4 or 6 bytes of padding.
6960      * Also known as "extended precision". */
6961     printf("3\n");
6962     exit(0);
6963   }
6964   if (b[0] == 0xBF && b[9] == 0xCD && b[10] == 0x00) {
6965     /* is there ever big-endian 80-bit, really? */
6966     printf("4\n");
6967     exit(0);
6968   }
6969 #endif
6970 #if (LDBL_MANT_DIG == 106 || LDBL_MANT_DIG == 107) && LONGDBLSIZE == 16
6971   /* software "double double", the 106 is 53+53.
6972    * but irix thinks it is 107. */
6973   if (b[0] == 0x9A && b[7] == 0x3C && b[8] == 0x9A && b[15] == 0xBF) {
6974     /* double double 128-bit little-endian,
6975      * 9a 99 99 99 99 99 59 3c 9a 99 99 99 99 99 b9 bf */
6976     printf("5\n");
6977     exit(0);
6978   }
6979   if (b[0] == 0xBF && b[7] == 0x9A && b[8] == 0x3C && b[15] == 0x9A) {
6980     /* double double 128-bit big-endian, e.g. PPC/Power and MIPS:
6981      * bf b9 99 99 99 99 99 9a 3c 59 99 99 99 99 99 9a */
6982     printf("6\n");
6983     exit(0);
6984   }
6985 #endif
6986   printf("-1\n"); /* unknown */
6987   exit(0);
6988 }
6989 EOP
6990 set try
6991 if eval $compile; then
6992     longdblkind=`$run ./try`
6993 else
6994     longdblkind=-1
6995 fi
6996 ;;
6997 *) longdblkind=0 ;;
6998 esac
6999 case "$longdblkind" in
7000 0) echo "Your long doubles are doubles." >&4 ;;
7001 1) echo "You have IEEE 754 128-bit little endian long doubles." >&4 ;;
7002 2) echo "You have IEEE 754 128-bit big endian long doubles." >&4 ;;
7003 3) echo "You have x86 80-bit little endian long doubles." >& 4 ;;
7004 4) echo "You have x86 80-bit big endian long doubles." >& 4 ;;
7005 5) echo "You have 128-bit little-endian double-double long doubles." >& 4 ;;
7006 6) echo "You have 128-bit big-endian double-double long doubles." >& 4 ;;
7007 *) echo "Cannot figure out your long double." >&4 ;;
7008 esac
7009 $rm_try
7010
7011 : determine the architecture name
7012 echo " "
7013 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
7014         tarch=`arch`"-$osname"
7015 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
7016         if uname -m > tmparch 2>&1 ; then
7017                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
7018                         -e 's/$/'"-$osname/" tmparch`
7019         else
7020                 tarch="$osname"
7021         fi
7022         $rm -f tmparch
7023 else
7024         tarch="$osname"
7025 fi
7026 case "$myarchname" in
7027 ''|"$tarch") ;;
7028 *)
7029         echo "(Your architecture name used to be $myarchname.)"
7030         archname=''
7031         ;;
7032 esac
7033 case "$targetarch" in
7034 '') ;;
7035 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
7036 esac
7037 myarchname="$tarch"
7038 case "$archname" in
7039 '') dflt="$tarch";;
7040 *) dflt="$archname";;
7041 esac
7042 rp='What is your architecture name'
7043 . ./myread
7044 archname="$ans"
7045
7046 : optionally add API version to the architecture for versioned archlibs
7047 case "$useversionedarchname" in
7048 $define|true|[yY]*) dflt='y';;
7049 *)                  dflt='n';;
7050 esac
7051 rp='Add the Perl API version to your archname?'
7052 . ./myread
7053 case "$ans" in
7054 y|Y)    useversionedarchname="$define" ;;
7055 *)      useversionedarchname="$undef" ;;
7056 esac
7057 case "$useversionedarchname" in
7058 $define)
7059         case "$archname" in
7060         *-$api_versionstring)
7061                 echo "...and architecture name already has -$api_versionstring" >&4
7062                 ;;
7063         *)
7064                 archname="$archname-$api_versionstring"
7065                 echo "...setting architecture name to $archname." >&4
7066                 ;;
7067         esac
7068         ;;
7069 esac
7070
7071 case "$usethreads" in
7072 $define)
7073         echo "Threads selected." >&4
7074         case "$archname" in
7075         *-thread*) echo "...and architecture name already has -thread." >&4
7076                 ;;
7077         *)      archname="$archname-thread"
7078                 echo "...setting architecture name to $archname." >&4
7079                 ;;
7080         esac
7081         ;;
7082 esac
7083 case "$usemultiplicity" in
7084 $define)
7085         echo "Multiplicity selected." >&4
7086         case "$archname" in
7087         *-multi*) echo "...and architecture name already has -multi." >&4
7088                 ;;
7089         *)      archname="$archname-multi"
7090                 echo "...setting architecture name to $archname." >&4
7091                 ;;
7092         esac
7093         ;;
7094 esac
7095 case "$use64bitint$use64bitall" in
7096 *"$define"*)
7097         case "$archname64" in
7098         '')
7099                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
7100                 ;;
7101         *)
7102                 case "$use64bitint" in
7103                 "$define") echo "64 bit integers selected." >&4 ;;
7104                 esac
7105                 case "$use64bitall" in
7106                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
7107                 esac
7108                 case "$archname" in
7109                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
7110                         ;;
7111                 *)      archname="$archname-$archname64"
7112                         echo "...setting architecture name to $archname." >&4
7113                         ;;
7114                 esac
7115                 ;;
7116         esac
7117 esac
7118 case "$uselongdouble" in
7119 $define)
7120         echo "Long doubles selected." >&4
7121         case "$longdblsize" in
7122         $doublesize)
7123                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
7124                 ;;
7125         *)
7126                 case "$archname" in
7127                 *-ld*) echo "...and architecture name already has -ld." >&4
7128                         ;;
7129                 *)      archname="$archname-ld"
7130                         echo "...setting architecture name to $archname." >&4
7131                         ;;
7132                 esac
7133                 ;;
7134         esac
7135         ;;
7136 esac
7137 case "$usequadmath" in
7138 $define)
7139         echo "quadmath selected." >&4
7140         case "$archname" in
7141         *-ld*) echo "...and architecture name already has -quadmath." >&4
7142                 ;;
7143         *)      archname="$archname-quadmath"
7144                 echo "...setting architecture name to $archname." >&4
7145                 ;;
7146         esac
7147         ;;
7148 esac
7149 if $test -f archname.cbu; then
7150         echo "Your platform has some specific hints for architecture name, using them..."
7151         . ./archname.cbu
7152 fi
7153
7154 : set the prefixit variable, to compute a suitable default value
7155 prefixit='case "$3" in
7156 ""|none)
7157         case "$oldprefix" in
7158         "") eval "$1=\"\$$2\"";;
7159         *)
7160                 case "$3" in
7161                 "") eval "$1=";;
7162                 none)
7163                         eval "tp=\"\$$2\"";
7164                         case "$tp" in
7165                         ""|" ") eval "$1=\"\$$2\"";;
7166                         *) eval "$1=";;
7167                         esac;;
7168                 esac;;
7169         esac;;
7170 *)
7171         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
7172         case "$tp" in
7173         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
7174         /*-$oldprefix/*|\~*-$oldprefix/*)
7175                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
7176         *) eval "$1=\"\$$2\"";;
7177         esac;;
7178 esac'
7179
7180 : determine installation style
7181 : For now, try to deduce it from prefix unless it is already set.
7182 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
7183 case "$installstyle" in
7184 '')     case "$prefix" in
7185                 *perl*) dflt='lib';;
7186                 *) dflt='lib/perl5' ;;
7187         esac
7188         ;;
7189 *)      dflt="$installstyle" ;;
7190 esac
7191 : Probably not worth prompting for this since we prompt for all
7192 : the directories individually, and the prompt would be too long and
7193 : confusing anyway.
7194 installstyle=$dflt
7195
7196 : determine where public executables go
7197 echo " "
7198 set dflt bin bin
7199 eval $prefixit
7200 fn=d~
7201 rp='Pathname where the public executables will reside?'
7202 . ./getfile
7203 if $test "X$ansexp" != "X$binexp"; then
7204         installbin=''
7205 fi
7206 prefixvar=bin
7207 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7208 : XXX If this is fixed, also fix the "start perl" hunk below, which relies on
7209 :     this via initialinstalllocation
7210 . ./setprefixvar
7211
7212 case "$userelocatableinc" in
7213 $define|true|[yY]*)     dflt='y' ;;
7214 *)                      dflt='n' ;;
7215 esac
7216 cat <<EOM
7217
7218 Would you like to build Perl so that the installation is relocatable, so that
7219 library paths in @INC are determined relative to the path of the perl binary?
7220 This is not advised for system Perl installs, or if you need to run setid
7221 scripts or scripts under taint mode.
7222
7223 If this doesn't make any sense to you, just accept the default '$dflt'.
7224 EOM
7225 rp='Use relocatable @INC?'
7226 . ./myread
7227 case "$ans" in
7228 y|Y)    val="$define" ;;
7229 *)      val="$undef"  ;;
7230 esac
7231 set userelocatableinc
7232 eval $setvar
7233
7234 initialinstalllocation="$binexp"
7235 : Default prefix is now "up one level from where the binaries are"
7236 case "$userelocatableinc" in
7237 $define|true|[yY]*)
7238     bin=".../"
7239     binexp=".../"
7240     prefix=".../.."
7241     prefixexp=".../.."
7242     installprefixexp=".../.."
7243     ;;
7244 esac
7245
7246 : determine where private library files go
7247 : Usual default is /usr/local/lib/perl5/$version.
7248 : Also allow things like /opt/perl/lib/$version, since
7249 : /opt/perl/lib/perl5... would be redundant.
7250 : The default "style" setting is made in installstyle.U
7251 case "$installstyle" in
7252 *lib/perl5*) set dflt privlib lib/$package/$version ;;
7253 *)       set dflt privlib lib/$version ;;
7254 esac
7255 eval $prefixit
7256 $cat <<EOM
7257
7258 There are some auxiliary files for $package that need to be put into a
7259 private library directory that is accessible by everyone.
7260
7261 EOM
7262 fn=$binexp
7263 fn=d~+
7264 rp='Pathname where the private library files will reside?'
7265 . ./getfile
7266 prefixvar=privlib
7267 . ./setprefixvar
7268
7269 : set the prefixup variable, to restore leading tilda escape
7270 prefixup='case "$prefixexp" in
7271 "$prefix") ;;
7272 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
7273 esac'
7274
7275 : determine where public architecture dependent libraries go
7276 set archlib archlib
7277 eval $prefixit
7278 : privlib default is /usr/local/lib/$package/$version
7279 : archlib default is /usr/local/lib/$package/$version/$archname
7280 : privlib may have an optional trailing /share.
7281 tdflt=`echo $privlib | $sed 's,/share$,,'`
7282 tdflt=$tdflt/$archname
7283 case "$archlib" in
7284 '')     dflt=$tdflt
7285         ;;
7286 *)      dflt="$archlib"
7287     ;;
7288 esac
7289 $cat <<EOM
7290
7291 $spackage contains architecture-dependent library files.  If you are
7292 sharing libraries in a heterogeneous environment, you might store
7293 these files in a separate location.  Otherwise, you can just include
7294 them with the rest of the public library files.
7295
7296 EOM
7297 fn=$binexp
7298 fn=d+~
7299 rp='Where do you want to put the public architecture-dependent libraries?'
7300 . ./getfile
7301 prefixvar=archlib
7302 . ./setprefixvar
7303 if $test X"$archlib" = X"$privlib"; then
7304         d_archlib="$undef"
7305 else
7306         d_archlib="$define"
7307 fi
7308
7309 : see if setuid scripts can be secure
7310 $cat <<EOM
7311
7312 Some kernels have a bug that prevents setuid #! scripts from being
7313 secure.  Some sites have disabled setuid #! scripts because of this.
7314
7315 First let's decide if your kernel supports secure setuid #! scripts.
7316 (If setuid #! scripts would be secure but have been disabled anyway,
7317 don't say that they are secure if asked.)
7318
7319 EOM
7320
7321 val="$undef"
7322 if $test -d /dev/fd; then
7323         echo "#!$ls" >reflect
7324         chmod +x,u+s reflect
7325         ./reflect >flect 2>&1
7326         if $contains "/dev/fd" flect >/dev/null; then
7327                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
7328                 val="$define"
7329         else
7330                 $cat <<EOM
7331 If you are not sure if they are secure, I can check but I'll need a
7332 username and password different from the one you are using right now.
7333 If you don't have such a username or don't want me to test, simply
7334 enter 'none'.
7335
7336 EOM
7337                 rp='Other username to test security of setuid scripts with?'
7338                 dflt='none'
7339                 . ./myread
7340                 case "$ans" in
7341                 n|none)
7342                         case "$d_suidsafe" in
7343                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
7344                                 dflt=n;;
7345                         "$undef")
7346                                 echo "Well, the $hint value is *not* secure." >&4
7347                                 dflt=n;;
7348                         *)      echo "Well, the $hint value *is* secure." >&4
7349                                 dflt=y;;
7350                         esac
7351                         ;;
7352                 *)
7353                         $rm -f reflect flect
7354                         echo "#!$ls" >reflect
7355                         chmod +x,u+s reflect
7356                         echo >flect
7357                         chmod a+w flect
7358                         echo '"su" will (probably) prompt you for '"$ans's password."
7359                         su $ans -c './reflect >flect'
7360                         if $contains "/dev/fd" flect >/dev/null; then
7361                                 echo "Okay, it looks like setuid scripts are secure." >&4
7362                                 dflt=y
7363                         else
7364                                 echo "I don't think setuid scripts are secure." >&4
7365                                 dflt=n
7366                         fi
7367                         ;;
7368                 esac
7369                 rp='Does your kernel have *secure* setuid scripts?'
7370                 . ./myread
7371                 case "$ans" in
7372                 [yY]*)  val="$define";;
7373                 *)      val="$undef";;
7374                 esac
7375         fi
7376 else
7377         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
7378         echo "(That's for file descriptors, not floppy disks.)"
7379         val="$undef"
7380 fi
7381 set d_suidsafe
7382 eval $setvar
7383
7384 $rm -f reflect flect
7385
7386 : now see if they want to do setuid emulation
7387 if $test $patchlevel -lt 11; then
7388 echo " "
7389 val="$undef"
7390 case "$d_suidsafe" in
7391 "$define")
7392         val="$undef"
7393         echo "No need to emulate SUID scripts since they are secure here." >&4
7394         ;;
7395 *)
7396         $cat <<EOM
7397 Some systems have disabled setuid scripts, especially systems where
7398 setuid scripts cannot be secure.  On systems where setuid scripts have
7399 been disabled, the setuid/setgid bits on scripts are currently
7400 useless.  It is possible for $package to detect those bits and emulate
7401 setuid/setgid in a secure fashion.  This emulation will only work if
7402 setuid scripts have been disabled in your kernel.
7403
7404 EOM
7405         case "$d_dosuid" in
7406         "$define") dflt=y ;;
7407         *) dflt=n ;;
7408         esac
7409         rp="Do you want to do setuid/setgid emulation?"
7410         . ./myread
7411         case "$ans" in
7412         [yY]*)  val="$define";;
7413         *)      val="$undef";;
7414         esac
7415         ;;
7416 esac
7417 set d_dosuid
7418 eval $setvar
7419 else
7420     case "$d_dosuid" in
7421         "$define")
7422         cat >&4 <<EOH
7423
7424 SUID emulation has been removed for 5.12
7425 Please re-run Configure without -Dd_dosuid
7426
7427 EOH
7428         exit 1;
7429         ;;
7430     esac
7431     d_dosuid=undef
7432 fi
7433
7434 : Find perl5.005 or later.
7435 echo "Looking for a previously installed perl5.005 or later... "
7436 case "$perl5" in
7437 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7438                 : Check if this perl is recent and can load a simple module
7439                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7440                         perl5=$tdir/perl
7441                         break;
7442                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7443                         perl5=$tdir/perl5
7444                         break;
7445                 fi
7446         done
7447         ;;
7448 *)      perl5="$perl5"
7449         ;;
7450 esac
7451 case "$perl5" in
7452 '')     echo "None found.  That's ok.";;
7453 *)      echo "Using $perl5." ;;
7454 esac
7455
7456 : Set the siteprefix variables
7457 $cat <<EOM
7458
7459 After $package is installed, you may wish to install various
7460 add-on modules and utilities.  Typically, these add-ons will
7461 be installed under $prefix with the rest
7462 of this package.  However, you may wish to install such add-ons
7463 elsewhere under a different prefix.
7464
7465 If you do not wish to put everything under a single prefix, that's
7466 ok.  You will be prompted for the individual locations; this siteprefix
7467 is only used to suggest the defaults.
7468
7469 The default should be fine for most people.
7470
7471 EOM
7472 fn=d~+
7473 rp='Installation prefix to use for add-on modules and utilities?'
7474 : XXX Here might be another good place for an installstyle setting.
7475 case "$siteprefix" in
7476 '') dflt=$prefix ;;
7477 *)  dflt=$siteprefix ;;
7478 esac
7479 . ./getfile
7480 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
7481 oldsiteprefix=''
7482 case "$siteprefix" in
7483 '') ;;
7484 *)      case "$ans" in
7485         "$prefix") ;;
7486         *) oldsiteprefix="$prefix";;
7487         esac
7488         ;;
7489 esac
7490 siteprefix="$ans"
7491 siteprefixexp="$ansexp"
7492
7493 : determine where site specific libraries go.
7494 : Usual default is /usr/local/lib/perl5/site_perl/$version
7495 : The default "style" setting is made in installstyle.U
7496 : XXX No longer works with Prefixit stuff.
7497 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7498 case "$sitelib" in
7499 '') case "$installstyle" in
7500         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
7501         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
7502         esac
7503         ;;
7504 *)      dflt="$sitelib"
7505         ;;
7506 esac
7507 $cat <<EOM
7508
7509 The installation process will create a directory for
7510 site-specific extensions and modules.  Most users find it convenient
7511 to place all site-specific files in this directory rather than in the
7512 main distribution directory.
7513
7514 EOM
7515 fn=d~+
7516 rp='Pathname for the site-specific library files?'
7517 . ./getfile
7518 prefixvar=sitelib
7519 . ./setprefixvar
7520 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
7521
7522 : Determine list of previous versions to include in @INC
7523 $cat > getverlist <<EOPL
7524 #!$perl5 -w
7525 use File::Basename;
7526 \$api_versionstring = "$api_versionstring";
7527 \$version = "$version";
7528 \$stem = "$sitelib_stem";
7529 \$archname = "$archname";
7530 EOPL
7531         $cat >> getverlist <<'EOPL'
7532 # The list found is store twice for each entry: the original name, and
7533 # the binary broken down version as pack "sss", so sorting is easy and
7534 # unambiguous. This will work for all versions that have a maximum of
7535 # three digit groups, separate by '.'s or '_'s. Names are extended with
7536 # ".0.0" to ensure at least three elements for the pack.
7537 #                                       -- H.Merijn Brand (m)'06 23-10-2006
7538
7539 # Can't have leading @ because metaconfig interprets it as a command!
7540 ;@inc_version_list=();
7541 # XXX Redo to do opendir/readdir?
7542 if (-d $stem) {
7543     chdir($stem);
7544     ;@candidates = map {
7545         [ $_, pack "sss", split m/[._]/, "$_.0.0" ] } glob("5.*");
7546     ;@candidates = sort { $a->[1] cmp $b->[1]} @candidates;
7547 }
7548 else {
7549     ;@candidates = ();
7550 }
7551
7552 ($pversion, $aversion, $vsn5005) = map {
7553     pack "sss", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005";
7554 foreach $d (@candidates) {
7555     if ($d->[1] lt $pversion) {
7556         if ($d->[1] ge $aversion) {
7557             unshift(@inc_version_list, grep { -d } $d->[0]."/$archname", $d->[0]);
7558         }
7559         elsif ($d->[1] ge $vsn5005) {
7560             unshift(@inc_version_list, grep { -d } $d->[0]);
7561         }
7562     }
7563     else {
7564         # Skip newer version.  I.e. don't look in
7565         # 5.7.0 if we're installing 5.6.1.
7566     }
7567 }
7568
7569 if (@inc_version_list) {
7570     print join(' ', @inc_version_list);
7571 }
7572 else {
7573     # Blank space to preserve value for next Configure run.
7574     print " ";
7575 }
7576 EOPL
7577 chmod +x getverlist
7578 case "$inc_version_list" in
7579 '')     if test -x "$perl5$exe_ext"; then
7580                 dflt=`$perl5 getverlist`
7581         else
7582                 dflt='none'
7583         fi
7584         ;;
7585 $undef) dflt='none' ;;
7586 *)  eval dflt=\"$inc_version_list\" ;;
7587 esac
7588 case "$dflt" in
7589 ''|' ') dflt=none ;;
7590 esac
7591 case "$dflt" in
7592 5.005) dflt=none ;;
7593 esac
7594 $cat <<EOM
7595
7596 In order to ease the process of upgrading, this version of perl
7597 can be configured to use modules built and installed with earlier
7598 versions of perl that were installed under $prefix.  Specify here
7599 the list of earlier versions that this version of perl should check.
7600 If Configure detected no earlier versions of perl installed under
7601 $prefix, then the list will be empty.  Answer 'none' to tell perl
7602 to not search earlier versions.
7603
7604 The default should almost always be sensible, so if you're not sure,
7605 just accept the default.
7606 EOM
7607
7608 rp='List of earlier versions to include in @INC?'
7609 . ./myread
7610 case "$ans" in
7611 [Nn]one|''|' '|$undef) inc_version_list=' ' ;;
7612 *) inc_version_list="$ans" ;;
7613 esac
7614 case "$inc_version_list" in
7615 ''|' ')
7616         inc_version_list_init='0'
7617         d_inc_version_list="$undef"
7618         ;;
7619 *)      inc_version_list_init=`echo $inc_version_list |
7620                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7621         d_inc_version_list="$define"
7622         ;;
7623 esac
7624 $rm -f getverlist
7625
7626 : see if malloc/malloc.h has to be included
7627 set malloc/malloc.h i_mallocmalloc
7628 eval $inhdr
7629
7630 : see if this is a malloc.h system
7631 : we want a real compile instead of Inhdr because some systems have a
7632 : malloc.h that just gives a compile error saying to use stdlib.h instead
7633 echo " "
7634 $cat >try.c <<EOCP
7635 #include <stdlib.h>
7636 #include <malloc.h>
7637 #$i_mallocmalloc I_MALLOCMALLOC
7638 #ifdef I_MALLOCMALLOC
7639 # include <malloc/malloc.h>
7640 #endif
7641
7642 int main () { return 0; }
7643 EOCP
7644 set try
7645 if eval $compile; then
7646     echo "<malloc.h> found." >&4
7647     val="$define"
7648 else
7649     echo "<malloc.h> NOT found." >&4
7650     val="$undef"
7651 fi
7652 $rm_try
7653 set i_malloc
7654 eval $setvar
7655
7656 : check for length of pointer
7657 echo " "
7658 case "$ptrsize" in
7659 '')
7660         echo "Checking to see how big your pointers are..." >&4
7661         $cat >try.c <<EOCP
7662 #include <stdio.h>
7663 #$i_stdlib I_STDLIB
7664 #ifdef I_STDLIB
7665 #include <stdlib.h>
7666 #endif
7667 int main()
7668 {
7669     printf("%d\n", (int)sizeof(void *));
7670     exit(0);
7671 }
7672 EOCP
7673         set try
7674         if eval $compile_ok; then
7675                 ptrsize=`$run ./try`
7676                 echo "Your pointers are $ptrsize bytes long."
7677         else
7678                 dflt='4'
7679                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7680                 rp="What is the size of a pointer (in bytes)?"
7681                 . ./myread
7682                 ptrsize="$ans"
7683         fi
7684         ;;
7685 esac
7686 $rm_try
7687 case "$use64bitall" in
7688 "$define"|true|[yY]*)
7689         case "$ptrsize" in
7690         4)      cat <<EOM >&4
7691
7692 *** You have chosen a maximally 64-bit build,
7693 *** but your pointers are only 4 bytes wide.
7694 *** Please rerun Configure without -Duse64bitall.
7695 EOM
7696                 case "$d_quad" in
7697                 define)
7698                         cat <<EOM >&4
7699 *** Since you have quads, you could possibly try with -Duse64bitint.
7700 EOM
7701                         ;;
7702                 esac
7703                 cat <<EOM >&4
7704 *** Cannot continue, aborting.
7705
7706 EOM
7707
7708                 exit 1
7709                 ;;
7710         esac
7711         ;;
7712 esac
7713
7714
7715 : determine whether to use malloc wrapping
7716 echo " "
7717 case "$usemallocwrap" in
7718 [yY]*|true|$define)     dflt='y' ;;
7719 [nN]*|false|$undef)     dflt='n' ;;
7720 *)      case "$usedevel" in
7721         [yY]*|true|$define)     dflt='y' ;;
7722         *) dflt='n' ;;
7723         esac
7724         ;;
7725 esac
7726 rp="Do you wish to wrap malloc calls to protect against potential overflows?"
7727 . ./myread
7728 usemallocwrap="$ans"
7729 case "$ans" in
7730 y*|true)
7731         usemallocwrap="$define" ;;
7732 *)
7733         usemallocwrap="$undef" ;;
7734 esac
7735
7736 : determine which malloc to compile in
7737 echo " "
7738 case "$usemymalloc" in
7739 [yY]*|true|$define)     dflt='y' ;;
7740 [nN]*|false|$undef)     dflt='n' ;;
7741 *)      case "$ptrsize" in
7742         4) dflt='y' ;;
7743         *) dflt='n' ;;
7744         esac
7745         if test "$useithreads" = "$define"; then dflt='n'; fi
7746         ;;
7747 esac
7748 rp="Do you wish to attempt to use the malloc that comes with $package?"
7749 . ./myread
7750 usemymalloc="$ans"
7751 case "$ans" in
7752 y*|true)
7753         usemymalloc='y'
7754         mallocsrc='malloc.c'
7755         mallocobj="malloc$_o"
7756         d_mymalloc="$define"
7757         case "$libs" in
7758         *-lmalloc*)
7759                 : Remove malloc from list of libraries to use
7760                 echo "Removing unneeded -lmalloc from library list" >&4
7761                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
7762                 shift
7763                 libs="$*"
7764                 echo "libs = $libs" >&4
7765                 ;;
7766         esac
7767         ;;
7768 *)
7769         usemymalloc='n'
7770         mallocsrc=''
7771         mallocobj=''
7772         d_mymalloc="$undef"
7773         ;;
7774 esac
7775
7776 : compute the return types of malloc and free
7777 echo " "
7778 $cat >malloc.c <<END
7779 #$i_malloc I_MALLOC
7780 #$i_stdlib I_STDLIB
7781 #include <stdio.h>
7782 #include <sys/types.h>
7783 #ifdef I_MALLOC
7784 #include <malloc.h>
7785 #endif
7786 #ifdef I_STDLIB
7787 #include <stdlib.h>
7788 #endif
7789 #ifdef TRY_MALLOC
7790 void *malloc();
7791 #endif
7792 #ifdef TRY_FREE
7793 void free();
7794 #endif
7795 END
7796 case "$malloctype" in
7797 '')
7798         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
7799                 malloctype='void *'
7800         else
7801                 malloctype='char *'
7802         fi
7803         ;;
7804 esac
7805 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
7806
7807 case "$freetype" in
7808 '')
7809         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
7810                 freetype='void'
7811         else
7812                 freetype='int'
7813         fi
7814         ;;
7815 esac
7816 echo "Your system uses $freetype free(), it would seem." >&4
7817 $rm -f malloc.[co]
7818 : determine where site specific architecture-dependent libraries go.
7819 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
7820 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
7821 : sitelib may have an optional trailing /share.
7822 case "$sitearch" in
7823 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
7824         dflt="$dflt/$archname"
7825         ;;
7826 *)      dflt="$sitearch"
7827         ;;
7828 esac
7829 set sitearch sitearch none
7830 eval $prefixit
7831 $cat <<EOM
7832
7833 The installation process will also create a directory for
7834 architecture-dependent site-specific extensions and modules.
7835
7836 EOM
7837 fn=d~+
7838 rp='Pathname for the site-specific architecture-dependent library files?'
7839 . ./getfile
7840 prefixvar=sitearch
7841 . ./setprefixvar
7842 if $test X"$sitearch" = X"$sitelib"; then
7843         d_sitearch="$undef"
7844 else
7845         d_sitearch="$define"
7846 fi
7847
7848 : Set the vendorprefix variables
7849 $cat <<EOM
7850
7851 The installation process will also create a directory for
7852 vendor-supplied add-ons.  Vendors who supply perl with their system
7853 may find it convenient to place all vendor-supplied files in this
7854 directory rather than in the main distribution directory.  This will
7855 ease upgrades between binary-compatible maintenance versions of perl.
7856
7857 Of course you may also use these directories in whatever way you see
7858 fit.  For example, you might use them to access modules shared over a
7859 company-wide network.
7860
7861 The default answer should be fine for most people.
7862 This causes further questions about vendor add-ons to be skipped
7863 and no vendor-specific directories will be configured for perl.
7864
7865 EOM
7866 rp='Do you want to configure vendor-specific add-on directories?'
7867 case "$usevendorprefix" in
7868 define|true|[yY]*) dflt=y ;;
7869 *)      : User may have set vendorprefix directly on Configure command line.
7870         case "$vendorprefix" in
7871         ''|' ') dflt=n ;;
7872         *)      dflt=y ;;
7873         esac
7874         ;;
7875 esac
7876 . ./myread
7877 case "$ans" in
7878 [yY]*)  fn=d~+
7879         rp='Installation prefix to use for vendor-supplied add-ons?'
7880         case "$vendorprefix" in
7881         '') dflt="$prefix" ;;
7882         *)  dflt=$vendorprefix ;;
7883         esac
7884         . ./getfile
7885         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
7886         oldvendorprefix=''
7887         case "$vendorprefix" in
7888         '') ;;
7889         *)      case "$ans" in
7890                 "$prefix") ;;
7891                 *) oldvendorprefix="$prefix";;
7892                 esac
7893                 ;;
7894         esac
7895         usevendorprefix="$define"
7896         vendorprefix="$ans"
7897         vendorprefixexp="$ansexp"
7898         ;;
7899 *)      usevendorprefix="$undef"
7900         vendorprefix=''
7901         vendorprefixexp=''
7902         ;;
7903 esac
7904
7905 : Set the vendorlib variables
7906 case "$vendorprefix" in
7907 '')     d_vendorlib="$undef"
7908         vendorlib=''
7909         vendorlibexp=''
7910         ;;
7911 *)      d_vendorlib="$define"
7912         : determine where vendor-supplied modules go.
7913         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
7914         case "$vendorlib" in
7915         '')
7916                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7917                 case "$installstyle" in
7918                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
7919                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
7920                 esac
7921                 ;;
7922         *)      dflt="$vendorlib"
7923                 ;;
7924         esac
7925         fn=d~+
7926         rp='Pathname for the vendor-supplied library files?'
7927         . ./getfile
7928         vendorlib="$ans"
7929         vendorlibexp="$ansexp"
7930         ;;
7931 esac
7932 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
7933 prefixvar=vendorlib
7934 . ./installprefix
7935
7936 : Set the vendorarch variables
7937 case "$vendorprefix" in
7938 '')     d_vendorarch="$undef"
7939         vendorarch=''
7940         vendorarchexp=''
7941         ;;
7942 *)      d_vendorarch="$define"
7943         : determine where vendor-supplied architecture-dependent libraries go.
7944         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
7945         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
7946         : vendorlib may have an optional trailing /share.
7947         case "$vendorarch" in
7948         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
7949                 dflt="$dflt/$archname"
7950                 ;;
7951         *)      dflt="$vendorarch" ;;
7952         esac
7953         fn=d~+
7954         rp='Pathname for vendor-supplied architecture-dependent files?'
7955         . ./getfile
7956         vendorarch="$ans"
7957         vendorarchexp="$ansexp"
7958         ;;
7959 esac
7960 prefixvar=vendorarch
7961 . ./installprefix
7962 if $test X"$vendorarch" = X"$vendorlib"; then
7963         d_vendorarch="$undef"
7964 else
7965         d_vendorarch="$define"
7966 fi
7967
7968 : Final catch-all directories to search
7969 $cat <<EOM
7970
7971 Lastly, you can have perl look in other directories for extensions and
7972 modules in addition to those already specified.
7973 These directories will be searched after
7974         $sitearch
7975         $sitelib
7976 EOM
7977 test X"$vendorlib" != "X" && echo '     ' $vendorlib
7978 test X"$vendorarch" != "X" && echo '    ' $vendorarch
7979 echo ' '
7980 case "$otherlibdirs" in
7981 ''|' ') dflt='none' ;;
7982 *)      dflt="$otherlibdirs" ;;
7983 esac
7984 $cat <<EOM
7985 Enter a colon-separated set of extra paths to include in perl's @INC
7986 search path, or enter 'none' for no extra paths.
7987
7988 EOM
7989
7990 rp='Colon-separated list of additional directories for perl to search?'
7991 . ./myread
7992 case "$ans" in
7993 ' '|''|none)    otherlibdirs=' ' ;;
7994 *)      otherlibdirs="$ans" ;;
7995 esac
7996 case "$otherlibdirs" in
7997 ' ') val=$undef ;;
7998 *)      val=$define ;;
7999 esac
8000 set d_perl_otherlibdirs
8001 eval $setvar
8002
8003 : Cruising for prototypes
8004 echo " "
8005 echo "Checking out function prototypes..." >&4
8006 $cat >prototype.c <<EOCP
8007 #$i_stdlib I_STDLIB
8008 #ifdef I_STDLIB
8009 #include <stdlib.h>
8010 #endif
8011 int main(int argc, char *argv[]) {
8012         exit(0);}
8013 EOCP
8014 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
8015         echo "Your C compiler appears to support function prototypes."
8016         val="$define"
8017 else
8018         echo "Your C compiler doesn't seem to understand function prototypes."
8019         val="$undef"
8020 fi
8021 set prototype
8022 eval $setvar
8023 $rm -f prototype*
8024
8025 : Check if ansi2knr is required
8026 case "$prototype" in
8027 "$define") ;;
8028 *)      ansi2knr='ansi2knr'
8029         echo " "
8030         cat <<EOM >&4
8031
8032 $me:  FATAL ERROR:
8033 This version of $package can only be compiled by a compiler that
8034 understands function prototypes.  Unfortunately, your C compiler
8035         $cc $ccflags
8036 doesn't seem to understand them.  Sorry about that.
8037
8038 If GNU cc is available for your system, perhaps you could try that instead.
8039
8040 Eventually, we hope to support building Perl with pre-ANSI compilers.
8041 If you would like to help in that effort, please contact <perlbug@perl.org>.
8042
8043 Aborting Configure now.
8044 EOM
8045         exit 2
8046         ;;
8047 esac
8048
8049 : DTrace support
8050 dflt_dtrace='/usr/sbin/dtrace'
8051 $test -x /usr/bin/dtrace && dflt_dtrace='/usr/bin/dtrace'
8052
8053 cat <<EOM
8054
8055 Perl can be built to support DTrace on platforms that support it.
8056 DTrace is a diagnosis and performance analysis tool from Sun.
8057
8058 If this doesn't make any sense to you, just accept the default.
8059 EOM
8060
8061 while $test 1 ; do
8062         case "$usedtrace" in
8063         $define|true|[yY]*)
8064                 dflt='y'
8065                 ;;
8066         ?*)
8067                 dflt='y'
8068                 dflt_dtrace=$usedtrace
8069                 ;;
8070         *)
8071                 dflt='n'
8072                 ;;
8073         esac
8074
8075         rp='Support DTrace if available?'
8076         . ./myread
8077         case "$ans" in
8078         y|Y)    val="$define" ;;
8079         *)      val="$undef" ;;
8080         esac
8081         set usedtrace
8082         eval $setvar
8083
8084         test "X$usedtrace" != "X$define" && break
8085
8086         echo " "
8087         rp='Where is the dtrace executable?'
8088         dflt=$dflt_dtrace
8089         . ./getfile
8090         val="$ans"
8091         set dtrace
8092         eval $setvar
8093
8094         if $test -f $dtrace
8095         then
8096                 if $dtrace -h -s ../perldtrace.d \
8097                         -o perldtrace.tmp >/dev/null 2>&1 \
8098                         && rm -f perldtrace.tmp
8099                 then
8100                         echo " "
8101                         echo "Good: your $dtrace knows about the -h flag."
8102                 else
8103                         cat >&2 <<EOM
8104
8105 *** $me:  Fatal Error:  $dtrace doesn't support -h flag
8106 ***
8107 *** Your installed dtrace doesn't support the -h switch to compile a D
8108 *** program into a C header. Can't continue.
8109
8110 EOM
8111                         exit 1
8112                 fi
8113                 break;
8114         fi
8115
8116         case "$fastread" in
8117         yes)
8118                 cat >&2 <<EOM
8119
8120 *** $me:  Fatal Error:  $dtrace not found.
8121 *** Can't continue.
8122
8123 EOM
8124                 exit 1
8125                 ;;
8126         *)
8127                 echo "*** $dtrace was not found."
8128                 echo " "
8129                 ;;
8130         esac
8131 done
8132
8133 : See if we want extra modules installed
8134 echo " "
8135 case "$extras" in
8136 '') dflt='n';;
8137 *) dflt='y';;
8138 esac
8139 cat <<EOM
8140 Perl can be built with extra modules or bundles of modules which
8141 will be fetched from the CPAN and installed alongside Perl.
8142
8143 Notice that you will need access to the CPAN; either via the Internet,
8144 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
8145 be asked later to configure the CPAN.pm module which will in turn do
8146 the installation of the rest of the extra modules or bundles.)
8147
8148 Notice also that if the modules require any external software such as
8149 libraries and headers (the libz library and the zlib.h header for the
8150 Compress::Zlib module, for example) you MUST have any such software
8151 already installed, this configuration process will NOT install such
8152 things for you.
8153
8154 If this doesn't make any sense to you, just accept the default '$dflt'.
8155 EOM
8156 rp='Install any extra modules (y or n)?'
8157 . ./myread
8158 case "$ans" in
8159 y|Y)
8160         cat <<EOM
8161
8162 Please list any extra modules or bundles to be installed from CPAN,
8163 with spaces between the names.  The names can be in any format the
8164 'install' command of CPAN.pm will understand.  (Answer 'none',
8165 without the quotes, to install no extra modules or bundles.)
8166 EOM
8167         rp='Extras?'
8168         dflt="$extras"
8169         . ./myread
8170         extras="$ans"
8171 esac
8172 case "$extras" in
8173 ''|'none')
8174         val=''
8175         $rm -f ../extras.lst
8176         ;;
8177 *)      echo "(Saving the list of extras for later...)"
8178         echo "$extras" > ../extras.lst
8179         val="'$extras'"
8180         ;;
8181 esac
8182 set extras
8183 eval $setvar
8184 echo " "
8185
8186 : determine where html pages for programs go
8187 set html1dir html1dir none
8188 eval $prefixit
8189 $cat <<EOM
8190
8191 If you wish to install html files for programs in $spackage, indicate
8192 the appropriate directory here.  To skip installing html files,
8193 answer "none".
8194 EOM
8195 case "$html1dir" in
8196 ''|none|$undef|' ') dflt=none ;;
8197 *) dflt=$html1dir ;;
8198 esac
8199 fn=dn+~
8200 rp="Directory for the main $spackage html pages?"
8201 . ./getfile
8202 prefixvar=html1dir
8203 . ./setprefixvar
8204 : Use ' ' for none so value is preserved next time through Configure
8205 $test X"$html1dir" = "X" && html1dir=' '
8206
8207 : determine where html pages for libraries and modules go
8208 set html3dir html3dir none
8209 eval $prefixit
8210 $cat <<EOM
8211
8212 If you wish to install html files for modules associated with $spackage,
8213 indicate the appropriate directory here.  To skip installing html files,
8214 answer "none".
8215 EOM
8216 : There is no obvious default.  If they have specified html1dir, then
8217 : try to key off that, possibly changing .../html1 into .../html3.
8218 case "$html3dir" in
8219 '') html3dir=`echo "$html1dir" | $sed 's/1$/3$/'` ;;
8220 *) dflt=$html3dir ;;
8221 esac
8222 fn=dn+~
8223 rp="Directory for the $spackage module html pages?"
8224 . ./getfile
8225 prefixvar=html3dir
8226 . ./setprefixvar
8227 : Use ' ' for none so value is preserved next time through Configure
8228 $test X"$html3dir" = "X" && html3dir=' '
8229
8230 : determine whether to install perl also as /usr/bin/perl
8231
8232 echo " "
8233 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
8234         $cat <<EOM
8235 Many scripts expect perl to be installed as /usr/bin/perl.
8236
8237 If you want to, I can install the perl you are about to compile
8238 as /usr/bin/perl (in addition to $bin/perl).
8239 EOM
8240         if test -f /usr/bin/perl; then
8241             $cat <<EOM
8242
8243 However, please note that because you already have a /usr/bin/perl,
8244 overwriting that with a new Perl would very probably cause problems.
8245 Therefore I'm assuming you don't want to do that (unless you insist).
8246
8247 EOM
8248             case "$installusrbinperl" in
8249             "$define"|[yY]*)    dflt='y';;
8250             *)                  dflt='n';;
8251             esac
8252         else
8253             $cat <<EOM
8254
8255 Since you don't have a /usr/bin/perl I'm assuming creating one is okay.
8256
8257 EOM
8258             case "$installusrbinperl" in
8259             "$undef"|[nN]*)     dflt='n';;
8260             *)                  dflt='y';;
8261             esac
8262         fi
8263         rp="Do you want to install perl as /usr/bin/perl?"
8264         . ./myread
8265         case "$ans" in
8266         [yY]*)  val="$define";;
8267         *)      val="$undef" ;;
8268         esac
8269 else
8270         val="$undef"
8271 fi
8272 set installusrbinperl
8273 eval $setvar
8274
8275 : see if dlopen exists
8276 xxx_runnm="$runnm"
8277 xxx_ccflags="$ccflags"
8278 runnm=false
8279 : with g++ one needs -shared to get is-in-libc to work for dlopen
8280 case "$gccversion" in
8281 '')     ;;
8282 *)      case "$d_cplusplus" in
8283         "$define") ccflags="$ccflags -shared" ;;
8284         esac
8285         ;;
8286 esac
8287 set dlopen d_dlopen
8288 eval $inlibc
8289 runnm="$xxx_runnm"
8290 ccflags="$xxx_ccflags"
8291
8292 : see if this is a unistd.h system
8293 set unistd.h i_unistd
8294 eval $inhdr
8295
8296 : determine which dynamic loading, if any, to compile in
8297 echo " "
8298 dldir="ext/DynaLoader"
8299 case "$usedl" in
8300     $define|y|true)
8301         dflt='y'
8302         usedl="$define"
8303         ;;
8304     $undef|n|false)
8305         dflt='n'
8306         usedl="$undef"
8307         ;;
8308     *)
8309         dflt='n'
8310         case "$d_dlopen" in
8311             $define) dflt='y' ;;
8312         esac
8313         : Does a dl_xxx.xs file exist for this operating system
8314         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
8315         ;;
8316 esac
8317 rp="Do you wish to use dynamic loading?"
8318 . ./myread
8319 usedl="$ans"
8320 bin_ELF="$undef"
8321 case "$ans" in
8322     y*) usedl="$define"
8323         case "$dlsrc" in
8324             '') if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
8325                     dflt="$dldir/dl_${osname}.xs"
8326                 elif $test "$d_dlopen" = "$define" ; then
8327                     dflt="$dldir/dl_dlopen.xs"
8328                 else
8329                     dflt=''
8330                 fi
8331                 ;;
8332             *)  dflt="$dldir/$dlsrc"
8333                 ;;
8334         esac
8335         echo "The following dynamic loading files are available:"
8336         : Can not go over to $dldir because getfile has path hard-coded in.
8337         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
8338         rp="Source file to use for dynamic loading"
8339         fn="fne"
8340         gfpth="$src"
8341         . ./getfile
8342         usedl="$define"
8343         : emulate basename
8344         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
8345
8346         $cat << EOM
8347
8348 Some systems may require passing special flags to $cc -c to
8349 compile modules that will be used to create a shared library.
8350 To use no flags, say "none".
8351
8352 EOM
8353         case "$cccdlflags" in
8354             '') case "$gccversion" in
8355                 '') case "$osname" in
8356                         hpux)   dflt='+z' ;;
8357                         irix*)  dflt='-KPIC' ;;
8358                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
8359                         sunos)  dflt='-pic' ;;
8360                         *)      dflt='none' ;;
8361                     esac
8362                     ;;
8363                 *)  case "$osname" in
8364                         darwin) dflt='none' ;;
8365                         *linux*|svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
8366                         *)      dflt='-fpic' ;;
8367                     esac ;;
8368                 esac ;;
8369             ' ') dflt='none' ;;
8370             *)   dflt="$cccdlflags" ;;
8371         esac
8372
8373         case "$dflt" in
8374             none) dflt='' ;;
8375         esac
8376
8377         # If -Dsysroot was specified, now's the time to add it
8378         # to cccdlflags
8379         if test "X$sysroot" != X; then
8380             case "$gccversion" in
8381                 '') ;;
8382                 *)  case "$dflt" in
8383                         *sysroot*) ;;
8384                         'undef'|*)
8385                             dflt="$dflt --sysroot=$sysroot" ;;
8386                     esac
8387                     ;;
8388             esac
8389         fi
8390
8391         case "$dflt" in
8392             '') dflt='none';;
8393         esac
8394
8395         rp="Any special flags to pass to $cc -c to compile shared library modules?"
8396         . ./myread
8397         case "$ans" in
8398             none) cccdlflags=' ' ;;
8399             *)    cccdlflags="$ans" ;;
8400         esac
8401
8402         cat << EOM
8403
8404 Some systems use ld to create libraries that can be dynamically loaded,
8405 while other systems (such as those using ELF) use $cc.
8406
8407 EOM
8408
8409 : Determine if this is ELF
8410         $cat >try.c <<EOM
8411 /* Test for whether ELF binaries are produced */
8412 #include <fcntl.h>
8413 #$i_stdlib I_STDLIB
8414 #ifdef I_STDLIB
8415 #include <stdlib.h>
8416 #endif
8417 #$i_unistd I_UNISTD
8418 #ifdef I_UNISTD
8419 #include <unistd.h>
8420 #endif
8421 int main() {
8422     char b[4];
8423     int i = open("a.out",O_RDONLY);
8424     if(i == -1)
8425         exit(1); /* fail */
8426     if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
8427         exit(0); /* succeed (yes, it is ELF) */
8428     exit(1); /* fail */
8429 }
8430 EOM
8431         if $cc $ccflags $ldflags -o a.out try.c >/dev/null 2>&1 && $run ./a.out; then
8432             bin_ELF="$define"
8433         fi
8434         $rm_try
8435
8436         case "$ld" in
8437             '') if $test $bin_ELF = "$define"; then
8438                     cat <<EOM
8439 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
8440 EOM
8441                     dflt="$cc"
8442                 else
8443                     echo "I'll use ld to build dynamic libraries."
8444                     dflt='ld'
8445                 fi
8446                 ;;
8447             *)  dflt="$ld"
8448                 ;;
8449         esac
8450
8451         rp="What command should be used to create dynamic libraries?"
8452         . ./myread
8453         ld="$ans"
8454
8455         cat << EOM
8456
8457 Some systems may require passing special flags to $ld to create a
8458 library that can be dynamically loaded.  If your ld flags include
8459 -L/other/path options to locate libraries outside your loader's normal
8460 search path, you may need to specify those -L options here as well.  To
8461 use no flags, say "none".
8462
8463 EOM
8464         case "$lddlflags" in
8465             '') case "$osname" in
8466                     haiku) dflt='-shared' ;;
8467                     hpux) dflt='-b';
8468                           case "$gccversion" in
8469                               '') dflt="$dflt +vnocompatwarnings" ;;
8470                           esac
8471                           ;;
8472                     *linux*|irix*|gnu*)  dflt="-shared $optimize" ;;
8473                     solaris) # See [perl #66604].
8474                             # On Solaris 11, gcc -m64 on amd64
8475                             # appears not to understand -G.  gcc versions at
8476                             # least as old as 3.4.3 support -shared, so just
8477                             # use that with Solaris 11 and later, but keep
8478                             # the old behavior for older Solaris versions.
8479                             case "$gccversion" in
8480                                 '') dflt='-G' ;;
8481                                 *)  case "$osvers" in
8482                                         2.?|2.10) dflt='-G' ;;
8483                                         *) dflt='-shared' ;;
8484                                     esac
8485                                     ;;
8486                             esac
8487                             ;;
8488                     sunos) dflt='-assert nodefinitions' ;;
8489                     svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
8490                     *)     dflt='none' ;;
8491                 esac
8492                 ;;
8493             *) dflt="$lddlflags" ;;
8494         esac
8495
8496         : Only do this for gcc, since, for example, qcc has no concept
8497         : of --sysroot.
8498         if $test "X$sysroot" != X; then
8499             case "$gccversion" in
8500                 '') ;;
8501                 *)  dflt="$dflt --sysroot $sysroot" ;;
8502             esac
8503         fi
8504
8505         : Try to guess additional flags to pick up local libraries.
8506         : Be careful not to append to a plain 'none'
8507         case "$dflt" in
8508             none) dflt='' ;;
8509         esac
8510         for thisflag in $ldflags; do
8511             case "$thisflag" in
8512                 -L*|-R*|-Wl,-R*)
8513                     case " $dflt " in
8514                         *" $thisflag "*) ;;
8515                         *) dflt="$dflt $thisflag" ;;
8516                     esac
8517                     ;;
8518             esac
8519         done
8520
8521         case "$dflt" in
8522             ''|' ') dflt='none' ;;
8523         esac
8524
8525         case "$ldflags" in
8526             *-fstack-protector-strong*)
8527                 case "$dflt" in
8528                     *-fstack-protector-strong*) ;; # Don't add it again
8529                     *) dflt="$dflt -fstack-protector-strong" ;;
8530                 esac
8531                 ;;
8532             *-fstack-protector*)
8533                 case "$dflt" in
8534                     *-fstack-protector*) ;; # Don't add it again
8535                     *) dflt="$dflt -fstack-protector" ;;
8536                 esac
8537                 ;;
8538         esac
8539
8540         rp="Any special flags to pass to $ld to create a dynamically loaded library?"
8541         . ./myread
8542         case "$ans" in
8543             none) lddlflags=' ' ;;
8544             *) lddlflags="$ans" ;;
8545         esac
8546
8547         cat <<EOM
8548
8549 Some systems may require passing special flags to $cc to indicate that
8550 the resulting executable will use dynamic linking.  To use no flags,
8551 say "none".
8552
8553 EOM
8554         case "$ccdlflags" in
8555             '') case "$osname" in
8556                     *linux*|hpux|gnu*) dflt='-Wl,-E' ;;
8557                     sunos)             dflt='none'   ;;
8558                     *)                 dflt='none'   ;;
8559                 esac ;;
8560             ' ') dflt='none' ;;
8561             *)   dflt="$ccdlflags" ;;
8562         esac
8563         rp="Any special flags to pass to $cc to use dynamic linking?"
8564         . ./myread
8565         case "$ans" in
8566             none) ccdlflags=' ' ;;
8567             *)    ccdlflags="$ans" ;;
8568         esac
8569         ;;
8570
8571     *)  usedl="$undef"
8572         ld='ld'
8573         dlsrc='dl_none.xs'
8574         lddlflags=''
8575         ccdlflags=''
8576         ;;
8577 esac
8578
8579 ld_can_script="$undef"
8580 case "$bin_ELF$usedl" in
8581     $define$define)
8582         # Abuse try.h and a.out names for neat cleanup
8583         $cat >try.c <<EOM
8584 void foo() {}
8585 void bar() {}
8586 EOM
8587         $cat >try.h <<EOM
8588 LIBTEST_42 {
8589  global:
8590   foo;
8591  local: *;
8592  };
8593 EOM
8594         if $cc $cccdlflags $ccdlflags $ccflags \
8595                $ldflags $lddlflags -o a.out try.c \
8596                -Wl,--version-script=try.h >/dev/null 2>&1 \
8597            &&  $test -s a.out ; then
8598             echo "ld supports scripting" >&4
8599             ld_can_script="$define"
8600         else
8601             echo "ld does not support scripting" >&4
8602         fi
8603         $rm_try
8604         ;;
8605 esac
8606
8607 : Do we want a shared libperl?
8608 also=''
8609 case "$usedl" in
8610 $undef)
8611         # No dynamic loading being used, so don't bother even to prompt.
8612         useshrplib='false'
8613         ;;
8614 *)      case "$useshrplib" in
8615         '')     case "$osname" in
8616                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|haiku|cygwin*)
8617                         dflt=y
8618                         also='Building a shared libperl is required for dynamic loading to work on your system.'
8619                         ;;
8620                 *)      dflt=n
8621                         ;;
8622                 esac
8623                 ;;
8624         $define|true|[Yy]*)
8625                 dflt=y
8626                 ;;
8627         *)      dflt=n
8628                 ;;
8629         esac
8630         $cat << EOM
8631
8632 The perl executable is normally obtained by linking perlmain.c with
8633 libperl${_a}, any static extensions (usually just DynaLoader), and
8634 any other libraries needed on this system (such as -lm, etc.).  Since
8635 your system supports dynamic loading, it is probably possible to build
8636 a shared libperl.$so.  If you will have more than one executable linked
8637 to libperl.$so, this will significantly reduce the size of each
8638 executable, but it may have a noticeable effect on performance.  The
8639 default is probably sensible for your system.
8640 $also
8641
8642 EOM
8643         rp="Build a shared libperl.$so (y/n)"
8644         . ./myread
8645         case "$ans" in
8646         true|$define|[Yy]*)
8647                 useshrplib='true'  ;;
8648         *)      useshrplib='false' ;;
8649         esac
8650         ;;
8651 esac
8652
8653 case "$useshrplib" in
8654 true)
8655         case "$userelocatableinc" in
8656         true|define)
8657                 echo "Cannot build with both -Duserelocatableinc and -Duseshrplib" >&4
8658                 echo "See INSTALL for an explanation why that won't work." >&4
8659                 exit 4
8660                 ;;
8661         esac
8662         case "$libperl" in
8663         '')
8664                 # Figure out a good name for libperl.so.  Since it gets stored in
8665                 # a version-specific architecture-dependent library, the version
8666                 # number isn't really that important, except for making cc/ld happy.
8667                 #
8668                 # A name such as libperl.so.10.1
8669                 majmin="libperl.$so.$patchlevel.$subversion"
8670                 # A name such as libperl.so.100
8671                 majonly=`echo $patchlevel $subversion |
8672                         $awk '{printf "%d%02d", $1, $2}'`
8673                 majonly=libperl.$so.$majonly
8674                 # I'd prefer to keep the os-specific stuff here to a minimum, and
8675                 # rely on figuring it out from the naming of libc.
8676                 case "${osname}${osvers}" in
8677                 *linux*|gnu*)  # ld won't link with a bare -lperl otherwise.
8678                         dflt=libperl.$so
8679                         ;;
8680                 cygwin*) # ld links now against the dll directly
8681                         majmin="cygperl5_${patchlevel}_${subversion}.${so}"
8682                         majonly=`echo $patchlevel $subversion |
8683                                 $awk '{printf "%03d%03d", $1, $2}'`
8684                         majonly=cygperl5.$majonly.$so
8685                         dflt=$majmin
8686                         ;;
8687                 *)      # Try to guess based on whether libc has major.minor.
8688                         case "$libc" in
8689                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
8690                         *libc.$so.[0-9]*) dflt=$majonly ;;
8691                         *)      dflt=libperl.$so ;;
8692                         esac
8693                         ;;
8694                 esac
8695                 ;;
8696         *)      dflt=$libperl
8697                 ;;
8698         esac
8699         cat << EOM
8700
8701 I need to select a good name for the shared libperl.  If your system uses
8702 library names with major and minor numbers, then you might want something
8703 like $majmin.  Alternatively, if your system uses a single version
8704 number for shared libraries, then you might want to use $majonly.
8705 Or, your system might be quite happy with a simple libperl.$so.
8706
8707 Since the shared libperl will get installed into a version-specific
8708 architecture-dependent directory, the version number of the shared perl
8709 library probably isn't important, so the default should be o.k.
8710
8711 EOM
8712         rp='What name do you want to give to the shared libperl?'
8713         . ./myread
8714         libperl=$ans
8715         echo "Ok, I'll use $libperl"
8716         ;;
8717 *)
8718         libperl="libperl${_a}"
8719         ;;
8720 esac
8721
8722 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
8723 case "$shrpdir" in
8724 '') ;;
8725 *)      $cat >&4 <<EOM
8726 WARNING:  Use of the shrpdir variable for the installation location of
8727 the shared $libperl is not supported.  It was never documented and
8728 will not work in this version.  Let me (perlbug@perl.org)
8729 know of any problems this may cause.
8730
8731 EOM
8732         case "$shrpdir" in
8733         "$archlibexp/CORE")
8734                 $cat >&4 <<EOM
8735 But your current setting of $shrpdir is
8736 the default anyway, so it's harmless.
8737 EOM
8738                 ;;
8739         *)
8740                 $cat >&4 <<EOM
8741 Further, your current attempted setting of $shrpdir
8742 conflicts with the value of $archlibexp/CORE
8743 that installperl will use.
8744 EOM
8745                 ;;
8746         esac
8747         ;;
8748 esac
8749
8750 # How will the perl executable find the installed shared $libperl?
8751 # Add $xxx to ccdlflags.
8752 # If we can't figure out a command-line option, use $shrpenv to
8753 # set env LD_RUN_PATH.  The main perl makefile uses this.
8754 shrpdir=$archlibexp/CORE
8755 xxx=''
8756 tmp_shrpenv=''
8757 if "$useshrplib"; then
8758     case "$osname" in
8759         aix)
8760                 # We'll set it in Makefile.SH...
8761                 ;;
8762         solaris)
8763                 xxx="-R $shrpdir"
8764                 ;;
8765         freebsd|mirbsd|netbsd|openbsd|interix|dragonfly|bitrig)
8766                 xxx="-Wl,-R$shrpdir"
8767                 ;;
8768         bsdos|linux|irix*|dec_osf|gnu*|haiku)
8769                 xxx="-Wl,-rpath,$shrpdir"
8770                 ;;
8771         hpux*)
8772                 # hpux doesn't like the default, either.
8773                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
8774                 ;;
8775         cygwin)
8776                 # cygwin needs only ldlibpth
8777                 ;;
8778         *)
8779                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
8780                 ;;
8781         esac
8782         case "$xxx" in
8783         '') ;;
8784         *)
8785                 # Only add $xxx if it isn't already in ccdlflags.
8786                 case " $ccdlflags " in
8787                 *" $xxx "*)     ;;
8788                 *)      ccdlflags="$ccdlflags $xxx"
8789                         cat <<EOM >&4
8790
8791 Adding $xxx to the flags
8792 passed to $ld so that the perl executable will find the
8793 installed shared $libperl.
8794
8795 EOM
8796                         ;;
8797                 esac
8798                 ;;
8799         esac
8800 fi
8801 # Fix ccdlflags in AIX for building external extensions.
8802 # (For building Perl itself bare -bE:perl.exp is needed,
8803 #  Makefile.SH takes care of this.)
8804 case "$osname" in
8805 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
8806 esac
8807 # Respect a hint or command-line value.
8808 case "$shrpenv" in
8809 '') shrpenv="$tmp_shrpenv" ;;
8810 esac
8811 case "$ldlibpthname" in
8812 '')     ldlibpthname=LD_LIBRARY_PATH ;;
8813 none)   ldlibpthname='' ;;
8814 esac
8815
8816 : determine where manual pages are on this system
8817 echo " "
8818 case "$sysman" in
8819 '')
8820         syspath='/usr/share/man/man1 /usr/man/man1'
8821         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
8822         syspath="$syspath /usr/man/u_man/man1"
8823         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
8824         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
8825         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
8826         sysman=`./loc . /usr/man/man1 $syspath`
8827         ;;
8828 esac
8829 if $test -d "$sysman"; then
8830         echo "System manual is in $sysman." >&4
8831 else
8832         echo "Could not find manual pages in source form." >&4
8833 fi
8834
8835 : determine where manual pages go
8836 set man1dir man1dir none
8837 eval $prefixit
8838 $cat <<EOM
8839
8840 $spackage has manual pages available in source form.
8841 EOM
8842 case "$nroff" in
8843 nroff)
8844         echo "However, you don't have nroff, so they're probably useless to you."
8845         case "$man1dir" in
8846         '') man1dir="none";;
8847         esac;;
8848 esac
8849 echo "If you don't want the manual sources installed, answer 'none'."
8850 case "$man1dir" in
8851 ' ') dflt=none
8852         ;;
8853 '')
8854         lookpath="$prefixexp/share/man/man1"
8855         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
8856         lookpath="$lookpath $prefixexp/man/p_man/man1"
8857         lookpath="$lookpath $prefixexp/man/u_man/man1"
8858         lookpath="$lookpath $prefixexp/man/man.1"
8859         case "$sysman" in
8860         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
8861         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
8862         esac
8863         set dflt
8864         eval $prefixup
8865         ;;
8866 *)  dflt="$man1dir"
8867         ;;
8868 esac
8869 echo " "
8870 fn=dn+~
8871 rp="Where do the main $spackage manual pages (source) go?"
8872 . ./getfile
8873 if $test "X$man1direxp" != "X$ansexp"; then
8874         installman1dir=''
8875 fi
8876 prefixvar=man1dir
8877 . ./setprefixvar
8878
8879 case "$man1dir" in
8880 '')     man1dir=' '
8881         installman1dir='';;
8882 esac
8883
8884 : What suffix to use on installed man pages
8885
8886 case "$man1dir" in
8887 ' ')
8888         man1ext='0'
8889         ;;
8890 *)
8891         rp="What suffix should be used for the main $spackage man pages?"
8892         case "$man1ext" in
8893         '')     case "$man1dir" in
8894                 *1)  dflt=1 ;;
8895                 *1p) dflt=1p ;;
8896                 *1pm) dflt=1pm ;;
8897                 *l) dflt=l;;
8898                 *n) dflt=n;;
8899                 *o) dflt=o;;
8900                 *p) dflt=p;;
8901                 *C) dflt=C;;
8902                 *L) dflt=L;;
8903                 *L1) dflt=L1;;
8904                 *) dflt=1;;
8905                 esac
8906                 ;;
8907         *)      dflt="$man1ext";;
8908         esac
8909         . ./myread
8910         man1ext="$ans"
8911         ;;
8912 esac
8913
8914 : see if we can have long filenames
8915 echo " "
8916 first=123456789abcdef
8917 $rm -f $first
8918 if (echo hi >$first) 2>/dev/null; then
8919         if $test -f 123456789abcde; then
8920                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
8921                 val="$undef"
8922         else
8923                 echo 'You can have filenames longer than 14 characters.'>&4
8924                 val="$define"
8925         fi
8926 else
8927         $cat <<'EOM'
8928 You can't have filenames longer than 14 chars.
8929 You can't even think about them!
8930 EOM
8931         val="$undef"
8932 fi
8933 set d_flexfnam
8934 eval $setvar
8935 $rm -rf 123456789abcde*
8936
8937 : determine where library module manual pages go
8938 set man3dir man3dir none
8939 eval $prefixit
8940 $cat <<EOM
8941
8942 $spackage has manual pages for many of the library modules.
8943 EOM
8944
8945 case "$nroff" in
8946 nroff)
8947         $cat <<'EOM'
8948 However, you don't have nroff, so they're probably useless to you.
8949 EOM
8950         case "$man3dir" in
8951         '') man3dir="none";;
8952         esac;;
8953 esac
8954
8955 case "$d_flexfnam" in
8956 undef)
8957         $cat <<'EOM'
8958 However, your system can't handle the long file names like File::Basename.3.
8959 EOM
8960         case "$man3dir" in
8961         '') man3dir="none";;
8962         esac;;
8963 esac
8964
8965 echo "If you don't want the manual sources installed, answer 'none'."
8966 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
8967 case "$man3dir" in
8968 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
8969         if $test -d "$privlib/man/man3"; then
8970                 cat <<EOM >&4
8971
8972 WARNING:  Previous versions of perl installed man3 pages into
8973 $privlib/man/man3.  This version will suggest a
8974 new default of $dflt.
8975 EOM
8976                 tdflt=$dflt
8977                 dflt='n'
8978                 rp='Do you wish to preserve the old behavior?(y/n)'
8979                 . ./myread
8980                 case "$ans" in
8981                 y*) dflt="$privlib/man/man3" ;;
8982                 *)  dflt=$tdflt ;;
8983                 esac
8984     fi
8985         ;;
8986 *)      dflt="$man3dir" ;;
8987 esac
8988 case "$dflt" in
8989 ' ') dflt=none ;;
8990 esac
8991 echo " "
8992 fn=dn+~
8993 rp="Where do the $package library man pages (source) go?"
8994 . ./getfile
8995 prefixvar=man3dir
8996 . ./setprefixvar
8997
8998 case "$man3dir" in
8999 '')     man3dir=' '
9000         installman3dir='';;
9001 esac
9002
9003 : What suffix to use on installed man pages
9004 case "$man3dir" in
9005 ' ')
9006         man3ext='0'
9007         ;;
9008 *)
9009         rp="What suffix should be used for the $package library man pages?"
9010         case "$man3ext" in
9011         '')     case "$man3dir" in
9012                 *3)  dflt=3 ;;
9013                 *3p) dflt=3p ;;
9014                 *3pm) dflt=3pm ;;
9015                 *l) dflt=l;;
9016                 *n) dflt=n;;
9017                 *o) dflt=o;;
9018                 *p) dflt=p;;
9019                 *C) dflt=C;;
9020                 *L) dflt=L;;
9021                 *L3) dflt=L3;;
9022                 *) dflt=3;;
9023                 esac
9024                 ;;
9025         *)      dflt="$man3ext";;
9026         esac
9027         . ./myread
9028         man3ext="$ans"
9029         ;;
9030 esac
9031
9032 : see if we have to deal with yellow pages, now NIS.
9033 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
9034         case "$hostcat" in
9035         nidump*) ;;
9036         *)
9037                 case "$hostcat" in
9038                 *ypcat*) dflt=y;;
9039                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
9040                                 dflt=y
9041                         else
9042                                 dflt=n
9043                         fi;;
9044                 *) dflt=n;;
9045                 esac
9046                 echo " "
9047                 rp='Are you getting the hosts file via yellow pages?'
9048                 . ./myread
9049                 case "$ans" in
9050                 y*) hostcat='ypcat hosts';;
9051                 *) hostcat='cat /etc/hosts';;
9052                 esac
9053                 ;;
9054         esac
9055 fi
9056 case "$hostcat" in
9057 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
9058 esac
9059 case "$groupcat" in
9060 '') test -f /etc/group && groupcat='cat /etc/group';;
9061 esac
9062 case "$passcat" in
9063 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
9064 esac
9065
9066 : now get the host name
9067 echo " "
9068 echo "Figuring out host name..." >&4
9069 case "$myhostname" in
9070 '') cont=true
9071         echo 'Maybe "hostname" will work...'
9072         if tans=`sh -c hostname 2>&1` ; then
9073                 myhostname=$tans
9074                 phostname=hostname
9075                 cont=''
9076         fi
9077         ;;
9078 *) cont='';;
9079 esac
9080 if $test "$cont"; then
9081         if ./xenix; then
9082                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
9083                 if tans=`cat /etc/systemid 2>&1` ; then
9084                         myhostname=$tans
9085                         phostname='cat /etc/systemid'
9086                         echo "Whadyaknow.  Xenix always was a bit strange..."
9087                         cont=''
9088                 fi
9089         elif $test -r /etc/systemid; then
9090                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
9091         fi
9092 fi
9093 if $test "$cont"; then
9094         echo 'No, maybe "uuname -l" will work...'
9095         if tans=`sh -c 'uuname -l' 2>&1` ; then
9096                 myhostname=$tans
9097                 phostname='uuname -l'
9098         else
9099                 echo 'Strange.  Maybe "uname -n" will work...'
9100                 if tans=`sh -c 'uname -n' 2>&1` ; then
9101                         myhostname=$tans
9102                         phostname='uname -n'
9103                 else
9104                         echo 'Oh well, maybe I can mine it out of whoami.h...'
9105                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
9106                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
9107                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
9108                         else
9109                                 case "$myhostname" in
9110                                 '') echo "Does this machine have an identity crisis or something?"
9111                                         phostname='';;
9112                                 *)
9113                                         echo "Well, you said $myhostname before..."
9114                                         phostname='echo $myhostname';;
9115                                 esac
9116                         fi
9117                 fi
9118         fi
9119 fi
9120 case "$myhostname" in
9121 '') myhostname=noname ;;
9122 esac
9123 : you do not want to know about this
9124 set $myhostname
9125 myhostname=$1
9126
9127 : verify guess
9128 if $test "$myhostname" ; then
9129         dflt=y
9130         rp='Your host name appears to be "'$myhostname'".'" Right?"
9131         . ./myread
9132         case "$ans" in
9133         y*) ;;
9134         *) myhostname='';;
9135         esac
9136 fi
9137
9138 : bad guess or no guess
9139 while $test "X$myhostname" = X ; do
9140         dflt=''
9141         rp="Please type the (one word) name of your host:"
9142         . ./myread
9143         myhostname="$ans"
9144 done
9145
9146 : translate upper to lower if necessary
9147 case "$myhostname" in
9148 *[A-Z]*)
9149         echo "(Normalizing case in your host name)"
9150         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
9151         ;;
9152 esac
9153
9154 case "$myhostname" in
9155 *.*)
9156         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
9157         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
9158         echo "(Trimming domain name from host name--host name is now $myhostname)"
9159         ;;
9160 *) case "$mydomain" in
9161         '')
9162                 {
9163                         test "X$hostcat" = "Xypcat hosts" &&
9164                         ypmatch "$myhostname" hosts 2>/dev/null |\
9165                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
9166                         $test -s hosts
9167                 } || {
9168                         test "X$hostcat" != "X" &&
9169                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
9170                                         /[       ]$myhostname[  . ]/p" > hosts
9171                 }
9172                 tmp_re="[       . ]"
9173                 if $test -f hosts; then
9174                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
9175                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
9176                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
9177                                 hosts | $sort | $uniq | \
9178                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
9179                         case `$echo X$dflt` in
9180                         X*\ *)  echo "(Several hosts in the database matched hostname)"
9181                                 dflt=.
9182                                 ;;
9183                         X.) echo "(You do not have fully-qualified names in the hosts database)"
9184                                 ;;
9185                         esac
9186                 else
9187                         echo "(I cannot locate a hosts database anywhere)"
9188                         dflt=.
9189                 fi
9190                 case "$dflt" in
9191                 .)
9192                         tans=`./loc resolv.conf X /etc /usr/etc`
9193                         if $test -f "$tans"; then
9194                                 echo "(Attempting domain name extraction from $tans)"
9195                                 dflt=.`$sed -n -e 's/   / /g' \
9196                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
9197                                   -e 1q 2>/dev/null`
9198                                 case "$dflt" in
9199                                 .) dflt=.`$sed -n -e 's/        / /g' \
9200                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
9201                                      -e 1q 2>/dev/null`
9202                                         ;;
9203                                 esac
9204                         fi
9205                         ;;
9206                 esac
9207                 case "$dflt" in
9208                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
9209                         dflt=.`sh -c domainname 2>/dev/null`
9210                         case "$dflt" in
9211                         '') dflt='.';;
9212                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
9213                         esac
9214                         ;;
9215                 esac
9216                 case "$dflt$osname" in
9217                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
9218                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
9219                         ;;
9220                 esac
9221                 case "$dflt" in
9222                 .) echo "(Lost all hope -- silly guess then)"
9223                         dflt='.nonet'
9224                         ;;
9225                 esac
9226                 $rm -f hosts
9227                 ;;
9228         *) dflt="$mydomain";;
9229         esac;;
9230 esac
9231 echo " "
9232 rp="What is your domain name?"
9233 . ./myread
9234 tans="$ans"
9235 case "$ans" in
9236 '') ;;
9237 .*) ;;
9238 *) tans=".$tans";;
9239 esac
9240 mydomain="$tans"
9241
9242 : translate upper to lower if necessary
9243 case "$mydomain" in
9244 *[A-Z]*)
9245         echo "(Normalizing case in your domain name)"
9246         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
9247         ;;
9248 esac
9249
9250 : a little sanity check here
9251 case "$phostname" in
9252 '') ;;
9253 *)
9254         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
9255         $myhostname$mydomain|$myhostname) ;;
9256         *)
9257                 case "$phostname" in
9258                 sed*)
9259                         echo "(That doesn't agree with your whoami.h file, by the way.)"
9260                         ;;
9261                 *)
9262                         echo "(That doesn't agree with your $phostname command, by the way.)"
9263                         ;;
9264                 esac
9265         ;;
9266         esac
9267         ;;
9268 esac
9269
9270 : determine the e-mail address of the user who is running us
9271 $cat <<EOM
9272
9273 I need to get your e-mail address in Internet format if possible, i.e.
9274 something like user@host.domain. Please answer accurately since I have
9275 no easy means to double check it. The default value provided below
9276 is most probably close to reality but may not be valid from outside
9277 your organization...
9278
9279 EOM
9280 cont=x
9281 while test "$cont"; do
9282         case "$MAILDOMAIN" in
9283         '')
9284                 if $test -s /etc/mailname; then
9285                         maildomain=`$cat /etc/mailname`
9286                 else
9287                         maildomain="$myhostname$mydomain"
9288                 fi
9289                 ;;
9290         *)  maildomain="$MAILDOMAIN";;
9291         esac
9292         case "$cf_email" in
9293         '') dflt="$cf_by@$maildomain";;
9294         *)  dflt="$cf_email";;
9295         esac
9296         rp='What is your e-mail address?'
9297         . ./myread
9298         cf_email="$ans"
9299         case "$cf_email" in
9300         *@*.*) cont='' ;;
9301         *)
9302                 rp='Address does not look like an Internet one.  Use it anyway?'
9303                 case "$fastread" in
9304                 yes) dflt=y ;;
9305                 *) dflt=n ;;
9306                 esac
9307                 . ./myread
9308                 case "$ans" in
9309                 y*) cont='' ;;
9310                 *) echo " " ;;
9311                 esac
9312                 ;;
9313         esac
9314 done
9315
9316 : Ask e-mail of administrator
9317 $cat <<EOM
9318
9319 If you or somebody else will be maintaining perl at your site, please
9320 fill in the correct e-mail address here so that they may be contacted
9321 if necessary. Currently, the "perlbug" program included with perl
9322 will send mail to this address in addition to perlbug@perl.org. You may
9323 enter "none" for no administrator.
9324
9325 EOM
9326 case "$perladmin" in
9327 '') dflt="$cf_email";;
9328 *) dflt="$perladmin";;
9329 esac
9330 rp='Perl administrator e-mail address'
9331 . ./myread
9332 perladmin="$ans"
9333
9334 : determine whether to only install version-specific parts.
9335 echo " "
9336 $cat <<EOM
9337 Do you want to install only the version-specific parts of the perl
9338 distribution?  Usually you do *not* want to do this.
9339 EOM
9340 case "$versiononly" in
9341 "$define"|[Yy]*|true) dflt='y' ;;
9342 *) dflt='n';
9343 esac
9344 rp="Do you want to install only the version-specific parts of perl?"
9345 . ./myread
9346 case "$ans" in
9347 [yY]*)  val="$define";;
9348 *)      val="$undef" ;;
9349 esac
9350 set versiononly
9351 eval $setvar
9352
9353 case "$versiononly" in
9354 "$define") inc_version_list=''
9355            inc_version_list_init=0
9356            ;;
9357 esac
9358
9359 : figure out how to guarantee perl startup
9360 : XXX Note that this currently takes advantage of the bug that binexp ignores
9361 :     the Configure -Dinstallprefix setting, which in turn means that under
9362 :     relocatable @INC, initialinstalllocation is what binexp started as.
9363 case "$startperl" in
9364 '')
9365         case "$sharpbang" in
9366         *!)
9367                 $cat <<EOH
9368
9369 I can use the #! construct to start perl on your system. This will
9370 make startup of perl scripts faster, but may cause problems if you
9371 want to share those scripts and perl is not in a standard place
9372 ($initialinstalllocation/perl) on all your platforms. The alternative
9373 is to force a shell by starting the script with a single ':' character.
9374
9375 EOH
9376                 case "$versiononly" in
9377                 "$define")      dflt="$initialinstalllocation/perl$version";;
9378                 *)              dflt="$initialinstalllocation/perl";;
9379                 esac
9380                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
9381                 . ./myread
9382                 case "$ans" in
9383                 none)   startperl=": # use perl";;
9384                 *)      startperl="#!$ans"
9385                         if $test 30 -lt `echo "$ans" | wc -c`; then
9386                                 $cat >&4 <<EOM
9387
9388 WARNING:  Some systems limit the #! command to 32 characters.
9389 If you experience difficulty running Perl scripts with #!, try
9390 installing Perl in a directory with a shorter pathname.
9391
9392 EOM
9393                         fi ;;
9394                 esac
9395                 ;;
9396         *) startperl=": # use perl"
9397                 ;;
9398         esac
9399         ;;
9400 esac
9401 echo "I'll use $startperl to start perl scripts."
9402
9403 : figure best path for perl in scripts
9404 case "$perlpath" in
9405 '')
9406         case "$versiononly" in
9407         "$define")      perlpath="$initialinstalllocation/perl$version";;
9408         *)              perlpath="$initialinstalllocation/perl";;
9409         esac
9410         case "$startperl" in
9411         *!*) ;;
9412         *)
9413                 $cat <<EOH
9414
9415 I will use the "eval 'exec'" idiom to start Perl on your system.
9416 I can use the full path of your Perl binary for this purpose, but
9417 doing so may cause problems if you want to share those scripts and
9418 Perl is not always in a standard place ($initialinstalllocation/perl).
9419
9420 EOH
9421                 dflt="$initialinstalllocation/perl"
9422                 rp="What path shall I use in \"eval 'exec'\"?"
9423                 . ./myread
9424                 perlpath="$ans"
9425                 ;;
9426         esac
9427         ;;
9428 esac
9429 case "$startperl" in
9430 *!*)    ;;
9431 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
9432 esac
9433
9434 : determine where public executable scripts go
9435 set scriptdir scriptdir
9436 eval $prefixit
9437 case "$scriptdir" in
9438 '')
9439         dflt="$bin"
9440         : guess some guesses
9441         $test -d /usr/share/scripts && dflt=/usr/share/scripts
9442         $test -d /usr/share/bin     && dflt=/usr/share/bin
9443         $test -d /usr/local/script  && dflt=/usr/local/script
9444         $test -d /usr/local/scripts && dflt=/usr/local/scripts
9445         $test -d $prefixexp/script  && dflt=$prefixexp/script
9446         set dflt
9447         eval $prefixup
9448         ;;
9449 *)  dflt="$scriptdir"
9450         ;;
9451 esac
9452 $cat <<EOM
9453
9454 Some installations have a separate directory just for executable scripts so
9455 that they can mount it across multiple architectures but keep the scripts in
9456 one spot.  You might, for example, have a subdirectory of /usr/share for this.
9457 Or you might just lump your scripts in with all your other executables.
9458
9459 EOM
9460 fn=d~
9461 rp='Where do you keep publicly executable scripts?'
9462 . ./getfile
9463 if $test "X$ansexp" != "X$scriptdirexp"; then
9464         installscript=''
9465 fi
9466 installscriptdir=''
9467 prefixvar=scriptdir
9468 . ./setprefixvar
9469 : A little fix up for an irregularly named variable.
9470 installscript="$installscriptdir"
9471
9472 : determine where add-on public executables go
9473 case "$sitebin" in
9474 '')     dflt=$siteprefix/bin ;;
9475 *)      dflt=$sitebin ;;
9476 esac
9477 fn=d~
9478 rp='Pathname where the add-on public executables should be installed?'
9479 . ./getfile
9480 prefixvar=sitebin
9481 . ./setprefixvar
9482
9483 : determine where add-on html pages go
9484 : There is no standard location, so try to copy the previously-selected
9485 : directory structure for the core html pages.
9486 case "$sitehtml1dir" in
9487 '')    dflt=`echo "$html1dir" | $sed "s#^$prefix#$siteprefix#"` ;;
9488 *)     dflt=$sitehtml1dir ;;
9489 esac
9490 case "$dflt" in
9491 ''|' ') dflt=none ;;
9492 esac
9493 fn=dn+~
9494 rp='Pathname where the site-specific html pages should be installed?'
9495 . ./getfile
9496 prefixvar=sitehtml1dir
9497 . ./setprefixvar
9498
9499 : determine where add-on library html pages go
9500 : There is no standard location, so try to copy the previously-selected
9501 : directory structure for the core html pages.
9502 case "$sitehtml3dir" in
9503 '')    dflt=`echo "$html3dir" | $sed "s#^$prefix#$siteprefix#"` ;;
9504 *)     dflt=$sitehtml3dir ;;
9505 esac
9506 case "$dflt" in
9507 ''|' ') dflt=none ;;
9508 esac
9509 fn=dn+~
9510 rp='Pathname where the site-specific library html pages should be installed?'
9511 . ./getfile
9512 prefixvar=sitehtml3dir
9513 . ./setprefixvar
9514
9515 : determine where add-on manual pages go
9516 case "$siteman1dir" in
9517 '')     dflt=`echo $man1dir | $sed "s#^$prefix#$siteprefix#"` ;;
9518 *)      dflt=$siteman1dir ;;
9519 esac
9520 case "$dflt" in
9521 ''|' ') dflt=none ;;
9522 esac
9523 fn=dn+~
9524 rp='Pathname where the site-specific manual pages should be installed?'
9525 . ./getfile
9526 prefixvar=siteman1dir
9527 . ./setprefixvar
9528
9529 : determine where add-on library man pages go
9530 case "$siteman3dir" in
9531 '')     dflt=`echo $man3dir | $sed "s#^$prefix#$siteprefix#"` ;;
9532 *)      dflt=$siteman3dir ;;
9533 esac
9534 case "$dflt" in
9535 ''|' ') dflt=none ;;
9536 esac
9537 fn=dn+~
9538 rp='Pathname where the site-specific library manual pages should be installed?'
9539 . ./getfile
9540 prefixvar=siteman3dir
9541 . ./setprefixvar
9542
9543 : determine where add-on public executable scripts go
9544 case "$sitescript" in
9545 '')     dflt=$siteprefix/script
9546         $test -d $dflt || dflt=$sitebin ;;
9547 *)  dflt="$sitescript" ;;
9548 esac
9549 fn=d~+
9550 rp='Pathname where add-on public executable scripts should be installed?'
9551 . ./getfile
9552 prefixvar=sitescript
9553 . ./setprefixvar
9554
9555 : see if backtrace exists
9556 set backtrace d_backtrace
9557 eval $inlibc
9558
9559 : add flags if using c backtrace
9560 case "$usecbacktrace" in
9561   "") usecbacktrace=$undef ;;
9562   [yY]*|true|$define)
9563     case "$d_backtrace" in
9564       [yY]*|true|$define)
9565         case " $ccflags " in
9566           *" -DUSE_C_BACKTRACE "*) ;; # Already there.
9567           *) ccflags="$ccflags -DUSE_C_BACKTRACE -g" ;;
9568           esac
9569         ;;
9570       *)
9571         echo "This system does not support backtrace" >&4
9572         usecbacktrace=$undef
9573         ;;
9574       esac
9575     ;;
9576   esac
9577
9578 : Check if faststdio is requested and available
9579 case "$usefaststdio" in
9580 $define|true|[yY]*|'')
9581         xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
9582         case "$xversion" in
9583         [68])   dflt='y' ;;
9584         *)      dflt='n' ;;
9585         esac
9586         ;;
9587 *) dflt='n';;
9588 esac
9589 cat <<EOM
9590
9591 Perl can be built to use 'fast stdio', which means using the stdio
9592 library but also directly manipulating the stdio buffers to enable
9593 faster I/O.  Using stdio is better for backward compatibility (especially
9594 for Perl extensions), but on the other hand since Perl 5.8 the 'perlio'
9595 interface has been preferred instead of stdio.
9596
9597 If this doesn't make any sense to you, just accept the default '$dflt'.
9598 EOM
9599 rp='Use the "fast stdio" if available?'
9600 . ./myread
9601 case "$ans" in
9602 y|Y)    val="$define" ;;
9603 *)      val="$undef" ;;
9604 esac
9605 set usefaststdio
9606 eval $setvar
9607
9608
9609 : define an is-a-typedef? function
9610 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9611 case "$inclist" in
9612 "") inclist="sys/types.h";;
9613 esac;
9614 eval "varval=\$$var";
9615 case "$varval" in
9616 "")
9617         $rm -f temp.c;
9618         for inc in $inclist; do
9619                 echo "#include <$inc>" >>temp.c;
9620         done;
9621         echo "#ifdef $type" >> temp.c;
9622         echo "printf(\"We have $type\");" >> temp.c;
9623         echo "#endif" >> temp.c;
9624         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9625         if $contains $type temp.E >/dev/null 2>&1; then
9626                 eval "$var=\$type";
9627         else
9628                 eval "$var=\$def";
9629         fi;
9630         $rm -f temp.?;;
9631 *) eval "$var=\$varval";;
9632 esac'
9633
9634 : define an is-a-typedef? function that prompts if the type is not available.
9635 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
9636 case "$inclist" in
9637 "") inclist="sys/types.h";;
9638 esac;
9639 eval "varval=\$$var";
9640 case "$varval" in
9641 "")
9642         $rm -f temp.c;
9643         for inc in $inclist; do
9644                 echo "#include <$inc>" >>temp.c;
9645         done;
9646         echo "#ifdef $type" >> temp.c;
9647         echo "printf(\"We have $type\");" >> temp.c;
9648         echo "#endif" >> temp.c;
9649         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
9650         echo " " ;
9651         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
9652         if $contains $type temp.E >/dev/null 2>&1; then
9653                 echo "$type found." >&4;
9654                 eval "$var=\$type";
9655         else
9656                 echo "$type NOT found." >&4;
9657                 dflt="$def";
9658                 . ./myread ;
9659                 eval "$var=\$ans";
9660         fi;
9661         $rm -f temp.?;;
9662 *) eval "$var=\$varval";;
9663 esac'
9664
9665 : see what type lseek is declared as in the kernel
9666 rp="What is the type used for lseek's offset on this system?"
9667 set off_t lseektype long stdio.h sys/types.h
9668 eval $typedef_ask
9669
9670 echo " "
9671 echo "Checking to see how big your file offsets are..." >&4
9672 $cat >try.c <<EOCP
9673 #include <sys/types.h>
9674 #include <stdio.h>
9675 int main()
9676 {
9677     printf("%d\n", (int)sizeof($lseektype));
9678     return(0);
9679 }
9680 EOCP
9681 set try
9682 if eval $compile_ok; then
9683         lseeksize=`$run ./try`
9684         echo "Your file offsets are $lseeksize bytes long."
9685 else
9686         dflt=$longsize
9687         echo " "
9688         echo "(I can't seem to compile the test program.  Guessing...)"
9689         rp="What is the size of your file offsets (in bytes)?"
9690         . ./myread
9691         lseeksize="$ans"
9692 fi
9693 $rm_try
9694
9695 : see what type file positions are declared as in the library
9696 rp="What is the type for file position used by fsetpos()?"
9697 set fpos_t fpostype long stdio.h sys/types.h
9698 eval $typedef_ask
9699
9700 : Check size for Fpos_t
9701 echo " "
9702 case "$fpostype" in
9703 *_t) zzz="$fpostype"    ;;
9704 *)   zzz="fpos_t"       ;;
9705 esac
9706 echo "Checking the size of $zzz..." >&4
9707 cat > try.c <<EOCP
9708 #include <sys/types.h>
9709 #include <stdio.h>
9710 #$i_stdlib I_STDLIB
9711 #ifdef I_STDLIB
9712 #include <stdlib.h>
9713 #endif
9714 int main() {
9715     printf("%d\n", (int)sizeof($fpostype));
9716     exit(0);
9717 }
9718 EOCP
9719 set try
9720 if eval $compile_ok; then
9721         yyy=`$run ./try`
9722         case "$yyy" in
9723         '')     fpossize=4
9724                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
9725                 ;;
9726         *)      fpossize=$yyy
9727                 echo "Your $zzz is $fpossize bytes long."
9728                 ;;
9729         esac
9730 else
9731         dflt="$longsize"
9732         echo " " >&4
9733         echo "(I can't compile the test program.  Guessing...)" >&4
9734         rp="What is the size of your file positions (in bytes)?"
9735         . ./myread
9736         fpossize="$ans"
9737 fi
9738
9739 : Check for large file support
9740 # Backward compatibility (uselfs is deprecated).
9741 case "$uselfs" in
9742 "$define"|true|[yY]*)
9743         cat <<EOM >&4
9744
9745 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
9746 EOM
9747         uselargefiles="$define"
9748         ;;
9749 esac
9750
9751 case "$lseeksize:$fpossize" in
9752 8:8) cat <<EOM
9753
9754 You can have files larger than 2 gigabytes.
9755 EOM
9756    val="$define" ;;
9757 *)    case "$uselargefiles" in
9758    "$undef"|false|[nN]*) dflt='n' ;;
9759    *)   dflt='y' ;;
9760    esac
9761    cat <<EOM
9762
9763 Perl can be built to understand large files (files larger than 2 gigabytes)
9764 on some systems.  To do so, Configure can be run with -Duselargefiles.
9765
9766 If this doesn't make any sense to you, just accept the default '$dflt'.
9767 EOM
9768    rp='Try to understand large files, if available?'
9769    . ./myread
9770    case "$ans" in
9771    y|Y)         val="$define" ;;
9772    *)           val="$undef"  ;;
9773    esac
9774    ;;
9775 esac
9776 set uselargefiles
9777 eval $setvar
9778 : Look for a hint-file generated 'call-back-unit'.  If the
9779 : user has specified that a large files perl is to be built,
9780 : we may need to set or change some other defaults.
9781 if $test -f uselargefiles.cbu; then
9782         echo "Your platform has some specific hints regarding large file builds, using them..."
9783         . ./uselargefiles.cbu
9784 fi
9785 case "$uselargefiles" in
9786 "$define")
9787         if $test -f uselargefiles.cbu; then
9788                 echo " "
9789                 echo "Rechecking to see how big your file offsets are..." >&4
9790                 $cat >try.c <<EOCP
9791 #include <sys/types.h>
9792 #include <stdio.h>
9793 int main()
9794 {
9795     printf("%d\n", (int)sizeof($lseektype));
9796     return(0);
9797 }
9798 EOCP
9799                 set try
9800                 if eval $compile_ok; then
9801                         lseeksize=`$run ./try`
9802                         $echo "Your file offsets are now $lseeksize bytes long."
9803                 else
9804                         dflt="$lseeksize"
9805                         echo " "
9806                         echo "(I can't seem to compile the test program.  Guessing...)"
9807                         rp="What is the size of your file offsets (in bytes)?"
9808                         . ./myread
9809                         lseeksize="$ans"
9810                 fi
9811                 case "$fpostype" in
9812                 *_t) zzz="$fpostype"    ;;
9813                 *)   zzz="fpos_t"       ;;
9814                 esac
9815                 $echo $n "Rechecking the size of $zzz...$c" >&4
9816                 $cat > try.c <<EOCP
9817 #include <sys/types.h>
9818 #include <stdio.h>
9819 #$i_stdlib I_STDLIB
9820 #ifdef I_STDLIB
9821 #include <stdlib.h>
9822 #endif
9823 int main() {
9824     printf("%d\n", (int)sizeof($fpostype));
9825     return(0);
9826 }
9827 EOCP
9828                 set try
9829                 if eval $compile_ok; then
9830                         yyy=`$run ./try`
9831                         dflt="$lseeksize"
9832                         case "$yyy" in
9833                         '')     echo " "
9834                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
9835                                 ;;
9836                         *)      fpossize=$yyy
9837                                 echo " $fpossize bytes." >&4
9838                                 ;;
9839                         esac
9840                 else
9841                         dflt="$fpossize"
9842                         echo " "
9843                         echo "(I can't compile the test program.  Guessing...)" >&4
9844                         rp="What is the size of your file positions (in bytes)?"
9845                         . ./myread
9846                         fpossize="$ans"
9847                 fi
9848                 $rm_try
9849         fi
9850         ;;
9851 esac
9852
9853 : Check if we want perlio
9854 useperlio="$define"
9855
9856 : Set the vendorbin variables
9857 case "$vendorprefix" in
9858 '')     d_vendorbin="$undef"
9859         vendorbin=''
9860         vendorbinexp=''
9861         ;;
9862 *)      d_vendorbin="$define"
9863         : determine where vendor-supplied executables go.
9864         case "$vendorbin" in
9865         '') dflt=$vendorprefix/bin ;;
9866         *)      dflt="$vendorbin" ;;
9867         esac
9868         fn=d~+
9869         rp='Pathname for the vendor-supplied executables directory?'
9870         . ./getfile
9871         vendorbin="$ans"
9872         vendorbinexp="$ansexp"
9873         ;;
9874 esac
9875 prefixvar=vendorbin
9876 . ./installprefix
9877
9878 : Set the vendorhtml1dir variables
9879 case "$vendorprefix" in
9880 '')     vendorhtml1dir=''
9881         vendorhtml1direxp=''
9882         ;;
9883 *)      : determine where vendor-supplied html pages go.
9884         : There is no standard location, so try to copy the previously-selected
9885         : directory structure for the core html pages.
9886         : XXX Better default suggestions would be welcome.
9887         case "$vendorhtml1dir" in
9888         '')     dflt=`echo "$html1dir" | $sed "s#^$prefix#$vendorprefix#"` ;;
9889         *)      dflt=$vendorhtml1dir ;;
9890         esac
9891         case "$dflt" in
9892         ''|' ') dflt=none ;;
9893         esac
9894         fn=dn+~
9895         rp='Pathname for the vendor-supplied html pages?'
9896         . ./getfile
9897         vendorhtml1dir="$ans"
9898         vendorhtml1direxp="$ansexp"
9899         ;;
9900 esac
9901 : Use ' ' for none so value is preserved next time through Configure
9902 $test X"$vendorhtml1dir" = "X" && vendorhtml1dir=' '
9903 prefixvar=vendorhtml1dir
9904 . ./installprefix
9905
9906 : Set the vendorhtml3dir variables
9907 case "$vendorprefix" in
9908 '')     vendorhtml3dir=''
9909         vendorhtml3direxp=''
9910         ;;
9911 *)      : determine where vendor-supplied module html pages go.
9912         : There is no standard location, so try to copy the previously-selected
9913         : directory structure for the core html pages.
9914         : XXX Better default suggestions would be welcome.
9915         case "$vendorhtml3dir" in
9916         '')     dflt=`echo "$html3dir" | $sed "s#^$prefix#$vendorprefix#"` ;;
9917         *)      dflt=$vendorhtml3dir ;;
9918         esac
9919         case "$dflt" in
9920         ''|' ') dflt=none ;;
9921         esac
9922         fn=dn+~
9923         rp='Pathname for the vendor-supplied html pages?'
9924         . ./getfile
9925         vendorhtml3dir="$ans"
9926         vendorhtml3direxp="$ansexp"
9927         ;;
9928 esac
9929 : Use ' ' for none so value is preserved next time through Configure
9930 $test X"$vendorhtml3dir" = "X" && vendorhtml3dir=' '
9931 prefixvar=vendorhtml3dir
9932 . ./installprefix
9933
9934 : Set the vendorman1dir variables
9935 case "$vendorprefix" in
9936 '')     vendorman1dir=''
9937         vendorman1direxp=''
9938         ;;
9939 *)      : determine where vendor-supplied manual pages go.
9940         case "$vendorman1dir" in
9941         '') dflt=`echo "$man1dir" | $sed "s#^$prefix#$vendorprefix#"` ;;
9942         *)      dflt=$vendorman1dir ;;
9943         esac
9944         case "$dflt" in
9945         ''|' ') dflt=none ;;
9946         esac
9947         fn=nd~+
9948         rp='Pathname for the vendor-supplied manual section 1 pages?'
9949         . ./getfile
9950         vendorman1dir="$ans"
9951         vendorman1direxp="$ansexp"
9952         ;;
9953 esac
9954 : Use ' ' for none so value is preserved next time through Configure
9955 $test X"$vendorman1dir" = "X" && vendorman1dir=' '
9956 prefixvar=vendorman1dir
9957 . ./installprefix
9958
9959 : Set the vendorman3dir variables
9960 case "$vendorprefix" in
9961 '')     vendorman3dir=''
9962         vendorman3direxp=''
9963         ;;
9964 *)      : determine where vendor-supplied module manual pages go.
9965         case "$vendorman3dir" in
9966         '') dflt=`echo "$man3dir" | $sed "s#^$prefix#$vendorprefix#"` ;;
9967         *)      dflt=$vendorman3dir ;;
9968         esac
9969         case "$dflt" in
9970         ''|' ') dflt=none ;;
9971         esac
9972         fn=nd~+
9973         rp='Pathname for the vendor-supplied manual section 3 pages?'
9974         . ./getfile
9975         vendorman3dir="$ans"
9976         vendorman3direxp="$ansexp"
9977         ;;
9978 esac
9979 : Use ' ' for none so value is preserved next time through Configure
9980 $test X"$vendorman3dir" = "X" && vendorman3dir=' '
9981 prefixvar=vendorman3dir
9982 . ./installprefix
9983
9984 : Set the vendorscript variables
9985 case "$vendorprefix" in
9986 '')     d_vendorscript="$undef"
9987         vendorscript=''
9988         vendorscriptexp=''
9989         ;;
9990 *)      d_vendorscript="$define"
9991         : determine where vendor-supplied scripts go.
9992         case "$vendorscript" in
9993         '')     dflt=$vendorprefix/script
9994                 $test -d $dflt || dflt=$vendorbin ;;
9995         *)  dflt="$vendorscript" ;;
9996         esac
9997         $cat <<EOM
9998
9999 The installation process will create a directory for
10000 vendor-supplied scripts.
10001
10002 EOM
10003         fn=d~+
10004         rp='Pathname for the vendor-supplied scripts directory?'
10005         . ./getfile
10006         vendorscript="$ans"
10007         vendorscriptexp="$ansexp"
10008         ;;
10009 esac
10010 prefixvar=vendorscript
10011 . ./installprefix
10012
10013 : script used to emit important warnings
10014 cat >warn <<EOS
10015 $startsh
10016 if test \$# -gt 0; then
10017         echo "\$@" >msg
10018 else
10019         cat >msg
10020 fi
10021 echo "*** WARNING:" >&4
10022 sed -e 's/^/*** /' <msg >&4
10023 echo "*** " >&4
10024 cat msg >>config.msg
10025 echo " " >>config.msg
10026 rm -f msg
10027 EOS
10028 chmod +x warn
10029 $eunicefix warn
10030
10031 : see which of string.h or strings.h is needed
10032 echo " "
10033 strings=`./findhdr string.h`
10034 if $test "$strings" && $test -r "$strings"; then
10035         echo "Using <string.h> instead of <strings.h>." >&4
10036         val="$define"
10037 else
10038         val="$undef"
10039         strings=`./findhdr strings.h`
10040         if $test "$strings" && $test -r "$strings"; then
10041                 echo "Using <strings.h> instead of <string.h>." >&4
10042         else
10043                 ./warn "No string header found -- You'll surely have problems."
10044         fi
10045 fi
10046 set i_string
10047 eval $setvar
10048 case "$i_string" in
10049 "$undef") strings=`./findhdr strings.h`;;
10050 *)        strings=`./findhdr string.h`;;
10051 esac
10052
10053 : see if qgcvt exists
10054 set qgcvt d_qgcvt
10055 eval $inlibc
10056
10057 : Check what kind of doubles your system has
10058 $echo "Checking the kind of doubles you have..." >&4
10059 $cat >try.c <<EOP
10060 #$i_stdlib I_STDLIB
10061 #define DOUBLESIZE $doublesize
10062 #ifdef I_STDLIB
10063 #include <stdlib.h>
10064 #endif
10065 #include <stdio.h>
10066 static const double d = -0.1;
10067 int main() {
10068   unsigned const char* b = (unsigned const char*)(&d);
10069 #if DOUBLESIZE == 4
10070   if (b[0] == 0xCD && b[3] == 0xBD) {
10071     /* IEEE 754 32-bit little-endian */
10072     printf("1\n");
10073     exit(0);
10074   }
10075   if (b[0] == 0xBD && b[3] == 0xCD) {
10076     /* IEEE 754 32-bit big-endian */
10077     printf("2\n");
10078     exit(0);
10079   }
10080 #endif
10081 #if DOUBLESIZE == 8
10082   if (b[0] == 0x9A && b[7] == 0xBF) {
10083     /* IEEE 754 64-bit little-endian */
10084     printf("3\n");
10085     exit(0);
10086   }
10087   if (b[0] == 0xBF && b[7] == 0x9A) {
10088     /* IEEE 754 64-bit big-endian */
10089     printf("4\n");
10090     exit(0);
10091   }
10092   if (b[0] == 0x99 && b[3] == 0xBF && b[4] == 0x9A && b[7] == 0x99) {
10093    /* ARM mixed endian: two little-endian 32-bit floats, in big endian order:
10094     * 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0)
10095     * 99 99 b9 bf 9a 99 99 99 */
10096     printf("7\n");
10097     exit(0);
10098   }
10099   if (b[0] == 0x99 && b[3] == 0x9A && b[4] == 0xBF && b[7] == 0x99) {
10100    /* The opposite of case 7, mixed endian: two big-endian 32-bit floats,
10101     * in little endian order: 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0)
10102     * 99 99 99 9a bf b9 99 99 */
10103     printf("8\n");
10104     exit(0);
10105   }
10106 #endif
10107 #if DOUBLESIZE == 16
10108   if (b[0] == 0x9A && b[15] == 0xBF) {
10109     /* IEEE 754 128-bit little-endian */
10110     printf("5\n");
10111     exit(0);
10112   }
10113   if (b[0] == 0xBF && b[15] == 0x9A) {
10114     /* IEEE 754 128-bit big-endian */
10115     printf("6\n");
10116     exit(0);
10117   }
10118 #endif
10119   /* Then there are old mainframe/miniframe formats like VAX, IBM, and CRAY.
10120    * Whether those environments can still build Perl is debatable. */
10121   printf("-1\n"); /* unknown */
10122   exit(0);
10123 }
10124 EOP
10125 set try
10126 if eval $compile; then
10127     doublekind=`$run ./try`
10128 else
10129     doublekind=-1
10130 fi
10131 case "$doublekind" in
10132 1) echo "You have IEEE 754 32-bit little endian doubles." >&4 ;;
10133 2) echo "You have IEEE 754 32-bit big endian doubles." >&4 ;;
10134 3) echo "You have IEEE 754 64-bit little endian doubles." >&4 ;;
10135 4) echo "You have IEEE 754 64-bit big endian doubles." >&4 ;;
10136 5) echo "You have IEEE 754 128-bit little endian doubles." >&4 ;;
10137 6) echo "You have IEEE 754 128-bit big endian doubles." >&4 ;;
10138 7) echo "You have IEEE 754 64-bit mixed endian doubles (32-bit LEs in BE)." >&4 ;;
10139 8) echo "You have IEEE 754 64-bit mixed endian doubles (32-bit BEs in LE)." >&4 ;;
10140 *) echo "Cannot figure out your double.  You VAX, or something?" >&4 ;;
10141 esac
10142 $rm_try
10143
10144 : Check print/scan long double stuff
10145 echo " "
10146
10147 if $test X"$d_longdbl" = X"$define"; then
10148
10149 echo "Checking how to print long doubles..." >&4
10150
10151 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
10152         $cat >try.c <<'EOCP'
10153 #include <sys/types.h>
10154 #include <stdio.h>
10155 int main() {
10156   double d = 123.456;
10157   printf("%.3f\n", d);
10158 }
10159 EOCP
10160         set try
10161         if eval $compile; then
10162                 yyy=`$run ./try`
10163                 case "$yyy" in
10164                 123.456)
10165                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
10166                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
10167                         echo "We will use %f."
10168                         ;;
10169                 esac
10170         fi
10171 fi
10172
10173 if $test X"$sPRIfldbl" = X; then
10174         $cat >try.c <<'EOCP'
10175 #include <sys/types.h>
10176 #include <stdio.h>
10177 int main() {
10178   long double d = 123.456;
10179   printf("%.3Lf\n", d);
10180 }
10181 EOCP
10182         set try
10183         if eval $compile; then
10184                 yyy=`$run ./try`
10185                 case "$yyy" in
10186                 123.456)
10187                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
10188                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
10189                         echo "We will use %Lf."
10190                         ;;
10191                 esac
10192         fi
10193 fi
10194
10195 if $test X"$sPRIfldbl" = X; then
10196         $cat >try.c <<'EOCP'
10197 #include <sys/types.h>
10198 #include <stdio.h>
10199 int main() {
10200   long double d = 123.456;
10201   printf("%.3llf\n", d);
10202 }
10203 EOCP
10204         set try
10205         if eval $compile; then
10206                 yyy=`$run ./try`
10207                 case "$yyy" in
10208                 123.456)
10209                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
10210                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
10211                         echo "We will use %llf."
10212                         ;;
10213                 esac
10214         fi
10215 fi
10216
10217 if $test X"$sPRIfldbl" = X; then
10218         $cat >try.c <<'EOCP'
10219 #include <sys/types.h>
10220 #include <stdio.h>
10221 int main() {
10222   long double d = 123.456;
10223   printf("%.3lf\n", d);
10224 }
10225 EOCP
10226         set try
10227         if eval $compile; then
10228                 yyy=`$run ./try`
10229                 case "$yyy" in
10230                 123.456)
10231                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
10232                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
10233                         echo "We will use %lf."
10234                         ;;
10235                 esac
10236         fi
10237 fi
10238
10239 if $test X"$sPRIfldbl" = X; then
10240         echo "Cannot figure out how to print long doubles." >&4
10241 else
10242         sSCNfldbl=$sPRIfldbl    # expect consistency
10243 fi
10244
10245 $rm_try
10246
10247 fi # d_longdbl
10248
10249 case "$sPRIfldbl" in
10250 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
10251         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef";
10252         d_SCNfldbl="$undef";
10253         ;;
10254 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
10255         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define";
10256         d_SCNfldbl="$define";
10257         ;;
10258 esac
10259
10260 : Before committing on uselongdouble, see whether that looks sane.
10261 if $test "$uselongdouble" = "$define"; then
10262     message=""
10263     echo " "
10264     echo "Checking if your long double math functions work right..." >&4
10265     $cat > try.c <<EOF
10266 #include <math.h>
10267 #include <stdio.h>
10268 int main() {
10269   printf("%"$sPRIgldbl"\n", sqrtl(logl(expl(cosl(sinl(0.0L))))+powl(2.0L, 3.0L)));
10270 }
10271 EOF
10272     case "$osname:$gccversion" in
10273     aix:)       saveccflags="$ccflags"
10274                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10275     esac
10276     set try
10277     if eval $compile_ok; then
10278       yyy=`$run ./try`
10279     fi
10280     case "$yyy" in
10281     3) echo "Your long double math functions are working correctly." >&4 ;;
10282     *) echo "Your long double math functions are broken, not using long doubles." >&4
10283        uselongdouble=$undef
10284        ;;
10285     esac
10286     $rm_try
10287     case "$osname:$gccversion" in
10288     aix:)       ccflags="$saveccflags" ;; # restore
10289     esac
10290 fi
10291
10292 : Check how to convert floats to strings.
10293
10294 if test "X$d_Gconvert" = X; then
10295
10296 echo " "
10297 echo "Checking for an efficient way to convert floats to strings."
10298 echo " " > try.c
10299 case "$uselongdouble" in
10300 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
10301 esac
10302 case "$d_longdbl" in
10303 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
10304 esac
10305 case "$d_PRIgldbl" in
10306 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
10307 esac
10308 $cat >>try.c <<EOP
10309 #ifdef TRY_gconvert
10310 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
10311 char *myname = "gconvert";
10312 #endif
10313 #ifdef TRY_gcvt
10314 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
10315 char *myname = "gcvt";
10316 #endif
10317 #ifdef TRY_qgcvt
10318 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
10319 char *myname = "qgcvt";
10320 #define DOUBLETYPE long double
10321 #endif
10322 #ifdef TRY_sprintf
10323 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
10324 #ifdef HAS_PRIgldbl
10325 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
10326 #else
10327 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(double)(x))
10328 #endif
10329 #else
10330 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
10331 #endif
10332 char *myname = "sprintf";
10333 #endif
10334
10335 #ifndef DOUBLETYPE
10336 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
10337 #define DOUBLETYPE long double
10338 #else
10339 #define DOUBLETYPE double
10340 #endif
10341 #endif
10342
10343 #include <stdio.h>
10344
10345 #$i_stdlib I_STDLIB
10346 #ifdef I_STDLIB
10347 #include <stdlib.h>
10348 #endif
10349 #$i_string I_STRING
10350 #ifdef I_STRING
10351 #  include <string.h>
10352 #else
10353 #  include <strings.h>
10354 #endif
10355
10356 int checkit(char *expect, char *got)
10357 {
10358     if (strcmp(expect, got)) {
10359                 printf("%s oddity:  Expected %s, got %s\n",
10360                         myname, expect, got);
10361                 exit(1);
10362         }
10363 }
10364
10365 int main()
10366 {
10367         char buf[64];
10368         buf[63] = '\0';
10369
10370         /* This must be 1st test on (which?) platform */
10371         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
10372         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
10373         checkit("0.1", buf);
10374
10375         Gconvert((DOUBLETYPE)0.01, 8, 0, buf);
10376         checkit("0.01", buf);
10377
10378         Gconvert((DOUBLETYPE)0.001, 8, 0, buf);
10379         checkit("0.001", buf);
10380
10381         Gconvert((DOUBLETYPE)0.0001, 8, 0, buf);
10382         checkit("0.0001", buf);
10383
10384         Gconvert((DOUBLETYPE)0.00009, 8, 0, buf);
10385         if (strlen(buf) > 5)
10386             checkit("9e-005", buf); /* for Microsoft ?? */
10387         else
10388             checkit("9e-05", buf);
10389
10390         Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
10391         checkit("1", buf);
10392
10393         Gconvert((DOUBLETYPE)1.1, 8, 0, buf);
10394         checkit("1.1", buf);
10395
10396         Gconvert((DOUBLETYPE)1.01, 8, 0, buf);
10397         checkit("1.01", buf);
10398
10399         Gconvert((DOUBLETYPE)1.001, 8, 0, buf);
10400         checkit("1.001", buf);
10401
10402         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf);
10403         checkit("1.0001", buf);
10404
10405         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf);
10406         checkit("1.00001", buf);
10407
10408         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf);
10409         checkit("1.000001", buf);
10410
10411         Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
10412         checkit("0", buf);
10413
10414         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
10415         checkit("-1", buf);
10416
10417         /* Some Linux gcvt's give 1.e+5 here. */
10418         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
10419         checkit("100000", buf);
10420
10421         /* Some Linux gcvt's give -1.e+5 here. */
10422         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
10423         checkit("-100000", buf);
10424
10425         Gconvert((DOUBLETYPE)123.456, 8, 0, buf);
10426         checkit("123.456", buf);
10427
10428         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
10429         Gconvert((DOUBLETYPE)1e34, 8, 0, buf);
10430         /* 34 should be enough to scare even long double
10431          * places into using the e notation. */
10432         if (strlen(buf) > 5)
10433             checkit("1e+034", buf); /* for Microsoft */
10434         else
10435             checkit("1e+34", buf);
10436
10437         /* For Perl, if you add additional tests here, also add them to
10438          * t/base/num.t for benefit of platforms not using Configure or
10439          * overriding d_Gconvert */
10440
10441         exit(0);
10442 }
10443 EOP
10444 : first add preferred functions to our list
10445 xxx_list=""
10446 for xxx_convert in $gconvert_preference; do
10447     case $xxx_convert in
10448     gcvt|gconvert|sprintf) xxx_list="$xxx_list $xxx_convert" ;;
10449     *) echo "Discarding unrecognized gconvert_preference $xxx_convert" >&4 ;;
10450     esac
10451 done
10452 : then add any others
10453 for xxx_convert in gconvert gcvt sprintf; do
10454     case "$xxx_list" in
10455     *$xxx_convert*) ;;
10456     *) xxx_list="$xxx_list $xxx_convert" ;;
10457     esac
10458 done
10459
10460 case "$d_longdbl$uselongdouble" in
10461 "$define$define")
10462     : again, add preferred functions to our list first
10463     xxx_ld_list=""
10464     for xxx_convert in $gconvert_ld_preference; do
10465         case $xxx_convert in
10466         qgcvt|gcvt|gconvert|sprintf) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
10467         *) echo "Discarding unrecognized gconvert_ld_preference $xxx_convert" ;;
10468         esac
10469     done
10470     : then add qgcvt, sprintf--then, in xxx_list order, gconvert and gcvt
10471     for xxx_convert in qgcvt sprintf $xxx_list; do
10472         case "$xxx_ld_list" in
10473         $xxx_convert*|*" $xxx_convert"*) ;;
10474         *) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
10475         esac
10476     done
10477     : if sprintf cannot do long doubles, move it to the end
10478     if test "$d_PRIgldbl" != "$define"; then
10479         xxx_ld_list="`echo $xxx_ld_list|sed s/sprintf//` sprintf"
10480     fi
10481     : if no qgcvt, remove it
10482     if test "$d_qgcvt" != "$define"; then
10483         xxx_ld_list="`echo $xxx_ld_list|sed s/qgcvt//`"
10484     fi
10485     : use the ld_list
10486     xxx_list="$xxx_ld_list"
10487     ;;
10488 esac
10489
10490 for xxx_convert in $xxx_list; do
10491         echo "Trying $xxx_convert..."
10492         $rm -f try try$_o core
10493         set try -DTRY_$xxx_convert
10494         if eval $compile; then
10495                 echo "$xxx_convert() found." >&4
10496                 if $run ./try; then
10497                         echo "I'll use $xxx_convert to convert floats into a string." >&4
10498                         break;
10499                 else
10500                         echo "...But $xxx_convert didn't work as I expected."
10501                         xxx_convert=''
10502                 fi
10503         else
10504                 echo "$xxx_convert NOT found." >&4
10505         fi
10506 done
10507
10508 if test X$xxx_convert = X; then
10509     echo "*** WHOA THERE!!! ***" >&4
10510     echo "None of ($xxx_list)  seemed to work properly.  I'll use sprintf." >&4
10511     xxx_convert=sprintf
10512 fi
10513
10514 case "$xxx_convert" in
10515 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
10516 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
10517 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
10518 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
10519    "$define$define$define")
10520       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
10521    "$define$define$undef")
10522       d_Gconvert='sprintf((b),"%.*g",(n),(double)(x))' ;;
10523    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
10524    esac
10525    ;;
10526 esac
10527
10528 fi
10529 $rm_try
10530
10531 : see if _fwalk exists
10532 set fwalk d__fwalk
10533 eval $inlibc
10534
10535 : Initialize h_fcntl
10536 h_fcntl=false
10537
10538 : Initialize h_sysfile
10539 h_sysfile=false
10540
10541 : access call always available on UNIX
10542 set access d_access
10543 eval $inlibc
10544
10545 : locate the flags for 'access()'
10546 case "$d_access" in
10547 "$define")
10548         echo " "
10549         $cat >access.c <<EOCP
10550 #include <sys/types.h>
10551 #ifdef I_FCNTL
10552 #include <fcntl.h>
10553 #endif
10554 #ifdef I_SYS_FILE
10555 #include <sys/file.h>
10556 #endif
10557 #ifdef I_UNISTD
10558 #include <unistd.h>
10559 #endif
10560 #$i_stdlib I_STDLIB
10561 #ifdef I_STDLIB
10562 #include <stdlib.h>
10563 #endif
10564 int main() {
10565         exit(R_OK);
10566 }
10567 EOCP
10568         : check sys/file.h first, no particular reason here
10569         if $test `./findhdr sys/file.h` && \
10570                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
10571                 h_sysfile=true;
10572                 echo "<sys/file.h> defines the *_OK access constants." >&4
10573         elif $test `./findhdr fcntl.h` && \
10574                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
10575                 h_fcntl=true;
10576                 echo "<fcntl.h> defines the *_OK access constants." >&4
10577         elif $test `./findhdr unistd.h` && \
10578                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
10579                 echo "<unistd.h> defines the *_OK access constants." >&4
10580         else
10581                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
10582         fi
10583         ;;
10584 esac
10585 $rm -f access*
10586
10587 : see if accessx exists
10588 set accessx d_accessx
10589 eval $inlibc
10590
10591 : see if acosh exists
10592 set acosh d_acosh
10593 eval $inlibc
10594
10595 : see if aintl exists
10596 set aintl d_aintl
10597 eval $inlibc
10598
10599 : see if alarm exists
10600 set alarm d_alarm
10601 eval $inlibc
10602
10603 : see if 64bit time functions exists
10604
10605 set ctime64 d_ctime64
10606 eval $inlibc
10607
10608 set localtime64 d_localtime64
10609 eval $inlibc
10610
10611 set gmtime64 d_gmtime64
10612 eval $inlibc
10613
10614 set mktime64 d_mktime64
10615 eval $inlibc
10616
10617 set difftime64 d_difftime64
10618 eval $inlibc
10619
10620 set asctime64 d_asctime64
10621 eval $inlibc
10622
10623 : see if POSIX threads are available
10624 set pthread.h i_pthread
10625 eval $inhdr
10626
10627 : define a function to check prototypes
10628 $cat > protochk <<EOSH
10629 $startsh
10630 cc="$cc"
10631 optimize="$optimize"
10632 ccflags="$ccflags"
10633 prototype="$prototype"
10634 define="$define"
10635 rm_try="$rm_try"
10636 usethreads=$usethreads
10637 i_pthread=$i_pthread
10638 pthread_h_first=$pthread_h_first
10639 EOSH
10640
10641 $cat >> protochk <<'EOSH'
10642
10643 $rm_try
10644 foo="$1"
10645 shift
10646 while test $# -ge 2; do
10647         case "$1" in
10648                 $define) echo "#include <$2>" >> try.c ;;
10649                 literal) echo "$2" >> try.c ;;
10650         esac
10651     # Extra magic for the benefit of systems that need pthread.h
10652     # to be included early to correctly detect threadsafe functions.
10653     # Such functions must guarantee themselves, though, that the usethreads
10654     # and i_pthread have been defined, before calling protochk.
10655     if test "$usethreads" = "$define" -a "$i_pthread" = "$define" -a "$pthread_h_first" = "$define" -a "$pthread_h_done" = ""; then
10656         echo "#include <pthread.h>" >> try.c
10657         pthread_h_done=yes
10658     fi
10659     shift 2
10660 done
10661 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
10662 cat >> try.c <<'EOCP'
10663 #ifdef CAN_PROTOTYPE
10664 #define _(args) args
10665 #else
10666 #define _(args) ()
10667 #endif
10668 EOCP
10669 echo "$foo" >> try.c
10670 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
10671 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
10672 status=$?
10673 $rm_try
10674 exit $status
10675 EOSH
10676 chmod +x protochk
10677 $eunicefix protochk
10678
10679 : Define hasproto macro for Configure internal use
10680 hasproto='varname=$1; func=$2; shift; shift;
10681 while $test $# -ge 2; do
10682         case "$1" in
10683         $define) echo "#include <$2>";;
10684         esac ;
10685     shift 2;
10686 done > try.c;
10687 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
10688 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
10689         echo "$func() prototype found.";
10690         val="$define";
10691 else
10692         echo "$func() prototype NOT found.";
10693         val="$undef";
10694 fi;
10695 set $varname;
10696 eval $setvar;
10697 $rm_try tryout.c'
10698
10699 : see if sys/types.h has to be included
10700 set sys/types.h i_systypes
10701 eval $inhdr
10702
10703 : see if sys/select.h has to be included
10704 set sys/select.h i_sysselct
10705 eval $inhdr
10706
10707 : Define hasfield macro for Configure internal use
10708 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
10709 while $test $# -ge 2; do
10710         case "$1" in
10711         $define) echo "#include <$2>";;
10712         esac ;
10713     shift 2;
10714 done > try.c;
10715 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
10716 set try;
10717 if eval $compile; then
10718         val="$define";
10719 else
10720         val="$undef";
10721 fi;
10722 set $varname;
10723 eval $setvar;
10724 $rm_try'
10725
10726 : see if we should include time.h, sys/time.h, or both
10727 echo " "
10728 if test "X$timeincl" = X; then
10729         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10730         $echo $n "I'm now running the test program...$c"
10731         $cat >try.c <<EOCP
10732 #include <sys/types.h>
10733 #ifdef I_TIME
10734 #include <time.h>
10735 #endif
10736 #ifdef I_SYSTIME
10737 #ifdef SYSTIMEKERNEL
10738 #define KERNEL
10739 #endif
10740 #include <sys/time.h>
10741 #endif
10742 #ifdef I_SYSSELECT
10743 #include <sys/select.h>
10744 #endif
10745 #$i_stdlib I_STDLIB
10746 #ifdef I_STDLIB
10747 #include <stdlib.h>
10748 #endif
10749 int main()
10750 {
10751         struct tm foo;
10752 #ifdef S_TIMEVAL
10753         struct timeval bar;
10754 #endif
10755 #ifdef S_TIMEZONE
10756         struct timezone tzp;
10757 #endif
10758         if (foo.tm_sec == foo.tm_sec)
10759                 exit(0);
10760 #ifdef S_TIMEVAL
10761         if (bar.tv_sec == bar.tv_sec)
10762                 exit(0);
10763 #endif
10764         exit(1);
10765 }
10766 EOCP
10767         flags=''
10768         for s_timezone in '-DS_TIMEZONE' ''; do
10769         sysselect=''
10770         for s_timeval in '-DS_TIMEVAL' ''; do
10771         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10772         for i_time in '' '-DI_TIME'; do
10773         for i_systime in '-DI_SYSTIME' ''; do
10774                 case "$flags" in
10775                 '') $echo $n ".$c"
10776                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10777                         if eval $compile; then
10778                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10779                                 shift
10780                                 flags="$*"
10781                                 echo " "
10782                                 $echo $n "Succeeded with $flags$c"
10783                         fi
10784                         ;;
10785                 esac
10786         done
10787         done
10788         done
10789         done
10790         done
10791         timeincl=''
10792         echo " "
10793         case "$flags" in
10794         *SYSTIMEKERNEL*) i_systimek="$define"
10795                 timeincl=`./findhdr sys/time.h`
10796                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10797         *) i_systimek="$undef";;
10798         esac
10799         case "$flags" in
10800         *I_TIME*) i_time="$define"
10801                 timeincl=`./findhdr time.h`" $timeincl"
10802                 echo "We'll include <time.h>." >&4;;
10803         *) i_time="$undef";;
10804         esac
10805         case "$flags" in
10806         *I_SYSTIME*) i_systime="$define"
10807                 timeincl=`./findhdr sys/time.h`" $timeincl"
10808                 echo "We'll include <sys/time.h>." >&4;;
10809         *) i_systime="$undef";;
10810         esac
10811         $rm_try
10812 fi
10813 : see if struct tm knows about tm_zone
10814 case "$i_systime$i_time" in
10815 *$define*)
10816         echo " "
10817         echo "Checking to see if your struct tm has tm_zone field..." >&4
10818         set d_tm_tm_zone tm tm_zone $i_systime sys/time.h $i_time time.h
10819         eval $hasfield
10820         ;;
10821 *)      val="$undef"
10822         set d_tm_tm_zone
10823         eval $setvar
10824         ;;
10825 esac
10826 case "$d_tm_tm_zone" in
10827 "$define")      echo "Yes, it does."   ;;
10828 *)              echo "No, it doesn't." ;;
10829 esac
10830 : see if struct tm knows about tm_gmtoff
10831 case "$i_systime$i_time" in
10832 *$define*)
10833         echo " "
10834         echo "Checking to see if your struct tm has tm_gmtoff field..." >&4
10835         set d_tm_tm_gmtoff tm tm_gmtoff $i_systime sys/time.h $i_time time.h
10836         eval $hasfield
10837         ;;
10838 *)      val="$undef"
10839         set d_tm_tm_gmtoff
10840         eval $setvar
10841         ;;
10842 esac
10843 case "$d_tm_tm_gmtoff" in
10844 "$define")      echo "Yes, it does."   ;;
10845 *)              echo "No, it doesn't." ;;
10846 esac
10847
10848 : see if asctime_r exists
10849 set asctime_r d_asctime_r
10850 eval $inlibc
10851 case "$d_asctime_r" in
10852 "$define")
10853         hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
10854         case "$d_asctime_r_proto:$usethreads" in
10855         ":define")      d_asctime_r_proto=define
10856                 set d_asctime_r_proto asctime_r $hdrs
10857                 eval $hasproto ;;
10858         *)      ;;
10859         esac
10860         case "$d_asctime_r_proto" in
10861         define)
10862         case "$asctime_r_proto" in
10863         ''|0) try='char* asctime_r(const struct tm*, char*);'
10864         ./protochk "$extern_C $try" $hdrs && asctime_r_proto=B_SB ;;
10865         esac
10866         case "$asctime_r_proto" in
10867         ''|0) try='char* asctime_r(const struct tm*, char*, int);'
10868         ./protochk "$extern_C $try" $hdrs && asctime_r_proto=B_SBI ;;
10869         esac
10870         case "$asctime_r_proto" in
10871         ''|0) try='int asctime_r(const struct tm*, char*);'
10872         ./protochk "$extern_C $try" $hdrs && asctime_r_proto=I_SB ;;
10873         esac
10874         case "$asctime_r_proto" in
10875         ''|0) try='int asctime_r(const struct tm*, char*, int);'
10876         ./protochk "$extern_C $try" $hdrs && asctime_r_proto=I_SBI ;;
10877         esac
10878         case "$asctime_r_proto" in
10879         ''|0)   d_asctime_r=undef
10880                 asctime_r_proto=0
10881                 echo "Disabling asctime_r, cannot determine prototype." >&4 ;;
10882         * )     case "$asctime_r_proto" in
10883                 REENTRANT_PROTO*) ;;
10884                 *) asctime_r_proto="REENTRANT_PROTO_$asctime_r_proto" ;;
10885                 esac
10886                 echo "Prototype: $try" ;;
10887         esac
10888         ;;
10889         *)      case "$usethreads" in
10890                 define) echo "asctime_r has no prototype, not using it." >&4 ;;
10891                 esac
10892                 d_asctime_r=undef
10893                 asctime_r_proto=0
10894                 ;;
10895         esac
10896         ;;
10897 *)      asctime_r_proto=0
10898         ;;
10899 esac
10900
10901 : see if asinh exists
10902 set asinh d_asinh
10903 eval $inlibc
10904
10905 : see if atanh exists
10906 set atanh d_atanh
10907 eval $inlibc
10908
10909 : see if atolf exists
10910 set atolf d_atolf
10911 eval $inlibc
10912
10913 : see if atoll exists
10914 set atoll d_atoll
10915 eval $inlibc
10916
10917 : Look for GCC-style attribute format
10918 case "$d_attribute_format" in
10919 '')
10920 echo " "
10921 echo "Checking whether your compiler can handle __attribute__((format)) ..." >&4
10922 $cat >attrib.c <<'EOCP'
10923 #include <stdio.h>
10924 void my_special_printf(char* pat,...) __attribute__((__format__(__printf__,1,2)));
10925 EOCP
10926 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
10927         if $contains 'warning' attrib.out >/dev/null 2>&1; then
10928                 echo "Your C compiler doesn't support __attribute__((format))."
10929                 val="$undef"
10930         else
10931                 echo "Your C compiler supports __attribute__((format))."
10932                 val="$define"
10933         fi
10934 else
10935         echo "Your C compiler doesn't seem to understand __attribute__ at all."
10936         val="$undef"
10937 fi
10938 ;;
10939 *) val="$d_attribute_format" ;;
10940 esac
10941 set d_attribute_format
10942 eval $setvar
10943 $rm -f attrib*
10944
10945 : Look for GCC-style attribute format with null format allowed
10946 case "$d_printf_format_null" in
10947 '') case "$d_attribute_format" in
10948     $define)
10949         echo " "
10950         echo "Checking whether your compiler allows __printf__ format to be null ..." >&4
10951 $cat >attrib.c <<EOCP
10952 #include <stdio.h>
10953 #$i_stdlib I_STDLIB
10954 #ifdef I_STDLIB
10955 #include <stdlib.h>
10956 #endif
10957 int null_printf (char* pat,...) __attribute__((__format__(__printf__,1,2)));
10958 int null_printf (char* pat,...) { return (int)pat; }
10959 int main () { exit(null_printf(NULL)); }
10960 EOCP
10961         if $cc $ccflags -o attrib attrib.c >attrib.out 2>&1 ; then
10962             : run the executable in case it produces a run-time warning
10963             if $run ./attrib >>attrib.out 2>&1; then
10964                 if $contains 'warning' attrib.out >/dev/null 2>&1; then
10965                     echo "Your C compiler doesn't allow __printf__ format to be null."
10966                     val="$undef"
10967                 else
10968                     echo "Your C compiler allows __printf__ format to be null."
10969                     val="$define"
10970                 fi
10971             else
10972             echo "Your C compiler executable failed with __printf__ format null."
10973             val="$undef"
10974         fi
10975     else
10976         echo "Your C compiler fails with __printf__ format null."
10977         val="$undef"
10978     fi
10979     ;;
10980     *)  val="$undef" ;;
10981     esac
10982 ;;
10983 *)  val="$d_printf_format_null" ;;
10984 esac
10985 set d_printf_format_null
10986 eval $setvar
10987 $rm -f attrib*
10988
10989 : Look for GCC-style attribute malloc
10990 case "$d_attribute_malloc" in
10991 '')
10992 echo " "
10993 echo "Checking whether your compiler can handle __attribute__((malloc)) ..." >&4
10994 $cat >attrib.c <<'EOCP'
10995 #include <stdio.h>
10996 char *go_get_some_memory( int how_many_bytes ) __attribute__((malloc));
10997 EOCP
10998 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
10999         if $contains 'warning' attrib.out >/dev/null 2>&1; then
11000                 echo "Your C compiler doesn't support __attribute__((malloc))."
11001                 val="$undef"
11002         else
11003                 echo "Your C compiler supports __attribute__((malloc))."
11004                 val="$define"
11005         fi
11006 else
11007         echo "Your C compiler doesn't seem to understand __attribute__ at all."
11008         val="$undef"
11009 fi
11010 ;;
11011 *) val="$d_attribute_malloc" ;;
11012 esac
11013 set d_attribute_malloc
11014 eval $setvar
11015 $rm -f attrib*
11016
11017 : Look for GCC-style attribute nonnull
11018 case "$d_attribute_nonnull" in
11019 '')
11020 echo " "
11021 echo "Checking whether your compiler can handle __attribute__((nonnull(1))) ..." >&4
11022 $cat >attrib.c <<'EOCP'
11023 #include <stdio.h>
11024 void do_something (char *some_pointer,...) __attribute__((nonnull(1)));
11025 EOCP
11026 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
11027         if $contains 'warning' attrib.out >/dev/null 2>&1; then
11028                 echo "Your C compiler doesn't support __attribute__((nonnull))."
11029                 val="$undef"
11030         else
11031                 echo "Your C compiler supports __attribute__((nonnull))."
11032                 val="$define"
11033         fi
11034 else
11035         echo "Your C compiler doesn't seem to understand __attribute__ at all."
11036         val="$undef"
11037 fi
11038 ;;
11039 *) val="$d_attribute_nonnull" ;;
11040 esac
11041 set d_attribute_nonnull
11042 eval $setvar
11043 $rm -f attrib*
11044
11045 : Look for GCC-style attribute noreturn
11046 case "$d_attribute_noreturn" in
11047 '')
11048 echo " "
11049 echo "Checking whether your compiler can handle __attribute__((noreturn)) ..." >&4
11050 $cat >attrib.c <<'EOCP'
11051 #include <stdio.h>
11052 void fall_over_dead( void ) __attribute__((noreturn));
11053 EOCP
11054 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
11055         if $contains 'warning' attrib.out >/dev/null 2>&1; then
11056                 echo "Your C compiler doesn't support __attribute__((noreturn))."
11057                 val="$undef"
11058         else
11059                 echo "Your C compiler supports __attribute__((noreturn))."
11060                 val="$define"
11061         fi
11062 else
11063         echo "Your C compiler doesn't seem to understand __attribute__ at all."
11064         val="$undef"
11065 fi
11066 ;;
11067 *) val="$d_attribute_noreturn" ;;
11068 esac
11069 set d_attribute_noreturn
11070 eval $setvar
11071 $rm -f attrib*
11072
11073 : Look for GCC-style attribute pure
11074 case "$d_attribute_pure" in
11075 '')
11076 echo " "
11077 echo "Checking whether your compiler can handle __attribute__((pure)) ..." >&4
11078 $cat >attrib.c <<'EOCP'
11079 #include <stdio.h>
11080 int square( int n ) __attribute__((pure));
11081 EOCP
11082 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
11083         if $contains 'warning' attrib.out >/dev/null 2>&1; then
11084                 echo "Your C compiler doesn't support __attribute__((pure))."
11085                 val="$undef"
11086         else
11087                 echo "Your C compiler supports __attribute__((pure))."
11088                 val="$define"
11089         fi
11090 else
11091         echo "Your C compiler doesn't seem to understand __attribute__ at all."
11092         val="$undef"
11093 fi
11094 ;;
11095 *) val="$d_attribute_pure" ;;
11096 esac
11097 set d_attribute_pure
11098 eval $setvar
11099 $rm -f attrib*
11100
11101 : Look for GCC-style attribute unused
11102 case "$d_attribute_unused" in
11103 '')
11104 echo " "
11105 echo "Checking whether your compiler can handle __attribute__((unused)) ..." >&4
11106 $cat >attrib.c <<'EOCP'
11107 #include <stdio.h>
11108 int do_something( int dummy __attribute__((unused)), int n );
11109 EOCP
11110 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
11111         if $contains 'warning' attrib.out >/dev/null 2>&1; then
11112                 echo "Your C compiler doesn't support __attribute__((unused))."
11113                 val="$undef"
11114         else
11115                 echo "Your C compiler supports __attribute__((unused))."
11116                 val="$define"
11117         fi
11118 else
11119         echo "Your C compiler doesn't seem to understand __attribute__ at all."
11120         val="$undef"
11121 fi
11122 ;;
11123 *) val="$d_attribute_unused" ;;
11124 esac
11125 set d_attribute_unused
11126 eval $setvar
11127 $rm -f attrib*
11128
11129 : Look for GCC-style attribute deprecated
11130 case "$d_attribute_deprecated" in
11131 '')
11132 echo " "
11133 echo "Checking whether your compiler can handle __attribute__((deprecated)) ..." >&4
11134 $cat >attrib.c <<'EOCP'
11135 #include <stdio.h>
11136 int I_am_deprecated(void) __attribute__((deprecated));
11137 EOCP
11138 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
11139         if $contains 'warning' attrib.out >/dev/null 2>&1; then
11140                 echo "Your C compiler doesn't support __attribute__((deprecated))."
11141                 val="$undef"
11142         else
11143                 echo "Your C compiler supports __attribute__((deprecated))."
11144                 val="$define"
11145         fi
11146 else
11147         echo "Your C compiler doesn't seem to understand __attribute__ at all."
11148         val="$undef"
11149 fi
11150 ;;
11151 *) val="$d_attribute_deprecated" ;;
11152 esac
11153 set d_attribute_deprecated
11154 eval $setvar
11155 $rm -f attrib*
11156
11157 : Look for GCC-style attribute warn_unused_result
11158 case "$d_attribute_warn_unused_result" in
11159 '')
11160 echo " "
11161 echo "Checking whether your compiler can handle __attribute__((warn_unused_result)) ..." >&4
11162 $cat >attrib.c <<'EOCP'
11163 #include <stdio.h>
11164 int I_will_not_be_ignored(void) __attribute__((warn_unused_result));
11165 EOCP
11166 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
11167         if $contains 'warning' attrib.out >/dev/null 2>&1; then
11168                 echo "Your C compiler doesn't support __attribute__((warn_unused_result))."
11169                 val="$undef"
11170         else
11171                 echo "Your C compiler supports __attribute__((warn_unused_result))."
11172                 val="$define"
11173         fi
11174 else
11175         echo "Your C compiler doesn't seem to understand __attribute__ at all."
11176         val="$undef"
11177 fi
11178 ;;
11179 *) val="$d_attribute_warn_unused_result" ;;
11180 esac
11181 set d_attribute_warn_unused_result
11182 eval $setvar
11183 $rm -f attrib*
11184
11185 : see if bcmp exists
11186 set bcmp d_bcmp
11187 eval $inlibc
11188
11189 : see if bcopy exists
11190 set bcopy d_bcopy
11191 eval $inlibc
11192
11193 : see if getpgrp exists
11194 set getpgrp d_getpgrp
11195 eval $inlibc
11196
11197 case "$d_getpgrp" in
11198 "$define")
11199         echo " "
11200         echo "Checking to see which flavor of getpgrp is in use..."
11201         $cat >try.c <<EOP
11202 #$i_unistd I_UNISTD
11203 #include <sys/types.h>
11204 #ifdef I_UNISTD
11205 #  include <unistd.h>
11206 #endif
11207 #$i_stdlib I_STDLIB
11208 #ifdef I_STDLIB
11209 #include <stdlib.h>
11210 #endif
11211 int main()
11212 {
11213         if (getuid() == 0) {
11214                 printf("(I see you are running Configure as super-user...)\n");
11215                 setuid(1);
11216         }
11217 #ifdef TRY_BSD_PGRP
11218         if (getpgrp(1) == 0)
11219                 exit(0);
11220 #else
11221         if (getpgrp() > 0)
11222                 exit(0);
11223 #endif
11224         exit(1);
11225 }
11226 EOP
11227         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
11228                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
11229                 val="$define"
11230         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
11231                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
11232                 val="$undef"
11233         else
11234                 echo "I can't seem to compile and run the test program."
11235                 if ./usg; then
11236                         xxx="a USG one, i.e. you use getpgrp()."
11237                 else
11238                         # SVR4 systems can appear rather BSD-ish.
11239                         case "$i_unistd" in
11240                         $undef)
11241                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
11242                                 val="$define"
11243                                 ;;
11244                         $define)
11245                                 xxx="probably a USG one, i.e. you use getpgrp()."
11246                                 val="$undef"
11247                                 ;;
11248                         esac
11249                 fi
11250                 echo "Assuming your getpgrp is $xxx" >&4
11251         fi
11252         ;;
11253 *) val="$undef";;
11254 esac
11255 set d_bsdgetpgrp
11256 eval $setvar
11257 $rm_try
11258
11259 : see if setpgrp exists
11260 set setpgrp d_setpgrp
11261 eval $inlibc
11262
11263 case "$d_setpgrp" in
11264 "$define")
11265         echo " "
11266         echo "Checking to see which flavor of setpgrp is in use..."
11267         $cat >try.c <<EOP
11268 #$i_unistd I_UNISTD
11269 #include <sys/types.h>
11270 #ifdef I_UNISTD
11271 #  include <unistd.h>
11272 #endif
11273 #$i_stdlib I_STDLIB
11274 #ifdef I_STDLIB
11275 #include <stdlib.h>
11276 #endif
11277 int main()
11278 {
11279         if (getuid() == 0) {
11280                 printf("(I see you are running Configure as super-user...)\n");
11281                 setuid(1);
11282         }
11283 #ifdef TRY_BSD_PGRP
11284         if (-1 == setpgrp(1, 1))
11285                 exit(0);
11286 #else
11287         if (setpgrp() != -1)
11288                 exit(0);
11289 #endif
11290         exit(1);
11291 }
11292 EOP
11293         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
11294                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
11295                 val="$define"
11296         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
11297                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
11298                 val="$undef"
11299         else
11300                 echo "(I can't seem to compile and run the test program.)"
11301                 if ./usg; then
11302                         xxx="a USG one, i.e. you use setpgrp()."
11303                 else
11304                         # SVR4 systems can appear rather BSD-ish.
11305                         case "$i_unistd" in
11306                         $undef)
11307                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
11308                                 val="$define"
11309                                 ;;
11310                         $define)
11311                                 xxx="probably a USG one, i.e. you use setpgrp()."
11312                                 val="$undef"
11313                                 ;;
11314                         esac
11315                 fi
11316                 echo "Assuming your setpgrp is $xxx" >&4
11317         fi
11318         ;;
11319 *) val="$undef";;
11320 esac
11321 set d_bsdsetpgrp
11322 eval $setvar
11323 $rm_try
11324
11325 : Look for GCC-style __builtin_choose_expr
11326 case "$d_builtin_choose_expr" in
11327 '')
11328     echo " "
11329     echo "Checking whether your compiler can handle __builtin_choose_expr ..." >&4
11330     $cat >try.c <<'EOCP'
11331 #include <assert.h>
11332 #include <stdlib.h>
11333 #include <stdio.h>
11334
11335 #define SYRINX(x) __builtin_choose_expr( x, (1056*2), (103*50) )
11336
11337 int main(void) {
11338     assert( SYRINX(1) == 2112 );
11339     assert( SYRINX(1) != 5150 );
11340     assert( SYRINX(0) == 5150 );
11341     assert( SYRINX(0) != 2112 );
11342     puts( "All good!" );
11343     exit(0);
11344 }
11345
11346 EOCP
11347     set try
11348     if eval $compile && $run ./try; then
11349         echo "Your C compiler supports __builtin_choose_expr."
11350         val="$define"
11351     else
11352         echo "Your C compiler doesn't seem to understand __builtin_choose_expr."
11353         val="$undef"
11354     fi
11355 ;;
11356 *) val="$d_builtin_choose_expr" ;;
11357 esac
11358
11359 set d_builtin_choose_expr
11360 eval $setvar
11361 $rm_try
11362
11363 : Look for GCC-style __builtin_expect
11364 case "$d_builtin_expect" in
11365 '')
11366     echo " "
11367     echo "Checking whether your compiler can handle __builtin_expect ..." >&4
11368     $cat >try.c <<'EOCP'
11369 int main(void) {
11370     int n = 50;
11371     if ( __builtin_expect(n, 0) ) n = 1;
11372     /* Remember shell exit code truth is 0, C truth is non-zero */
11373     return !(n == 1);
11374 }
11375 EOCP
11376     set try
11377     if eval $compile && $run ./try; then
11378         echo "Your C compiler supports __builtin_expect."
11379         val="$define"
11380     else
11381         echo "Your C compiler doesn't seem to understand __builtin_expect."
11382         val="$undef"
11383     fi
11384     ;;
11385 *) val="$d_builtin_expect" ;;
11386 esac
11387
11388 set d_builtin_expect
11389 eval $setvar
11390 $rm_try
11391
11392 : see if bzero exists
11393 set bzero d_bzero
11394 eval $inlibc
11395
11396 : see if stdarg is available
11397 echo " "
11398 if $test `./findhdr stdarg.h`; then
11399         echo "<stdarg.h> found." >&4
11400         valstd="$define"
11401 else
11402         echo "<stdarg.h> NOT found." >&4
11403         valstd="$undef"
11404 fi
11405
11406 : see if varargs is available
11407 echo " "
11408 if $test `./findhdr varargs.h`; then
11409         echo "<varargs.h> found." >&4
11410 else
11411         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
11412 fi
11413
11414 : set up the varargs testing programs
11415 $cat > varargs.c <<EOP
11416 #ifdef I_STDARG
11417 #include <stdarg.h>
11418 #endif
11419 #ifdef I_VARARGS
11420 #include <varargs.h>
11421 #endif
11422
11423 #ifdef I_STDARG
11424 int f(char *p, ...)
11425 #else
11426 int f(va_alist)
11427 va_dcl
11428 #endif
11429 {
11430         va_list ap;
11431 #ifndef I_STDARG
11432         char *p;
11433 #endif
11434 #ifdef I_STDARG
11435         va_start(ap,p);
11436 #else
11437         va_start(ap);
11438         p = va_arg(ap, char *);
11439 #endif
11440         va_end(ap);
11441         return 0;
11442 }
11443 EOP
11444 $cat > varargs <<EOP
11445 $startsh
11446 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
11447         echo "true"
11448 else
11449         echo "false"
11450 fi
11451 $rm -f varargs$_o
11452 EOP
11453 chmod +x varargs
11454
11455 : now check which varargs header should be included
11456 echo " "
11457 i_varhdr=''
11458 val=''
11459 case "$valstd" in
11460 "$define")
11461         if `./varargs I_STDARG`; then
11462                 val='stdarg.h'
11463         elif `./varargs I_VARARGS`; then
11464                 val='varargs.h'
11465         fi
11466         ;;
11467 *)
11468         if `./varargs I_VARARGS`; then
11469                 val='varargs.h'
11470         fi
11471         ;;
11472 esac
11473 case "$val" in
11474 '')
11475         echo " "
11476         echo "*** WHOA THERE!!! ***" >&4
11477         echo "    Your C compiler \"$cc\" doesn't seem to support stdarg or varargs!" >&4
11478         case "$knowitall" in
11479         '')
11480         echo "    I'm giving up; maybe you can try again with a different compiler?" >&4
11481                 exit 1
11482                 ;;
11483         esac
11484 echo "I could not find the definition for va_dcl... You have problems..." >&4
11485         val="$undef"; set i_stdarg; eval $setvar
11486         val="$undef"; set i_varargs; eval $setvar
11487         ;;
11488 *)
11489         set i_varhdr
11490         eval $setvar
11491         case "$i_varhdr" in
11492         stdarg.h)
11493                 val="$define"; set i_stdarg; eval $setvar
11494                 val="$undef"; set i_varargs; eval $setvar
11495                 ;;
11496         varargs.h)
11497                 val="$undef"; set i_stdarg; eval $setvar
11498                 val="$define"; set i_varargs; eval $setvar
11499                 ;;
11500         esac
11501         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
11502 esac
11503 $rm -f varargs*
11504
11505 : see if the Compiler supports C99 variadic macros
11506 case "$i_stdarg$i_stdlib" in
11507     "$define$define")
11508     echo "You have <stdarg.h> and <stdlib.h>, so checking for C99 variadic macros." >&4
11509     $cat >try.c <<EOCP
11510 #include <stdio.h>
11511 #include <stdarg.h>
11512
11513 #define foo(buffer, format, ...) sprintf(buffer, format, __VA_ARGS__)
11514
11515 int main() {
11516   char buf[20];
11517   foo(buf, "%d %g %.*s", 123, 456.0, (int)3, "789fail");
11518   puts(buf);
11519   return 0;
11520 }
11521 EOCP
11522     set try
11523     if eval $compile && $run ./try 2>&1 >/dev/null; then
11524         case "`$run ./try`" in
11525             "123 456 789")
11526             echo "You have C99 variadic macros." >&4
11527             d_c99_variadic_macros="$define"
11528             ;;
11529             *)
11530             echo "You don't have functional C99 variadic macros." >&4
11531             d_c99_variadic_macros="$undef"
11532             ;;
11533         esac
11534     else
11535         echo "I couldn't compile and run the test program, so I assume that you don't have functional C99 variadic macros." >&4
11536         d_c99_variadic_macros="$undef"
11537     fi
11538     $rm_try
11539     ;;
11540     *)
11541     echo "You don't have <stdarg.h> and <stdlib.h>, so not checking for C99 variadic macros." >&4
11542     d_c99_variadic_macros="$undef"
11543     ;;
11544 esac
11545
11546 : see if signal is declared as pointer to function returning int or void
11547 echo " "
11548 xxx=`./findhdr signal.h`
11549 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
11550 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
11551         echo "You have int (*signal())() instead of void." >&4
11552         val="$undef"
11553 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
11554         echo "You have void (*signal())()." >&4
11555         val="$define"
11556 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
11557         echo "You have int (*signal())() instead of void." >&4
11558         val="$undef"
11559 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
11560         echo "You have void (*signal())()." >&4
11561         val="$define"
11562 else
11563         case "$d_voidsig" in
11564         '')
11565         echo "I can't determine whether signal handler returns void or int..." >&4
11566                 dflt=void
11567                 rp="What type does your signal handler return?"
11568                 . ./myread
11569                 case "$ans" in
11570                 v*) val="$define";;
11571                 *) val="$undef";;
11572                 esac;;
11573         "$define")
11574                 echo "As you already told me, signal handler returns void." >&4
11575                 val="$define"
11576                 ;;
11577         *)      echo "As you already told me, signal handler returns int." >&4
11578                 val="$undef"
11579                 ;;
11580         esac
11581 fi
11582 set d_voidsig
11583 eval $setvar
11584 case "$d_voidsig" in
11585 "$define") signal_t="void";;
11586 *) signal_t="int";;
11587 esac
11588 $rm -f $$.tmp
11589
11590 : check for ability to cast large floats to 32-bit ints.
11591 echo " "
11592 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
11593 if $test "$intsize" -ge 4; then
11594         xxx=int
11595 else
11596         xxx=long
11597 fi
11598 $cat >try.c <<EOCP
11599 #include <stdio.h>
11600 #$i_stdlib I_STDLIB
11601 #ifdef I_STDLIB
11602 #include <stdlib.h>
11603 #endif
11604 #include <sys/types.h>
11605 #include <signal.h>
11606 $signal_t blech(int s) { exit(3); }
11607 int main()
11608 {
11609         $xxx i32;
11610         double f, g;
11611         int result = 0;
11612         char str[16];
11613         signal(SIGFPE, blech);
11614
11615         /* Don't let compiler optimize the test away.  Store the number
11616            in a writable string for gcc to pass to sscanf under HP-UX.
11617         */
11618         sprintf(str, "2147483647");
11619         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
11620         g = 10 * f;
11621         i32  = ($xxx) g;
11622
11623         /* x86 processors will probably give 0x8000 0000, which is a
11624            sign change.  We don't want that.  We want to mimic SPARC
11625            behavior here, which is to preserve the sign and give
11626            back 0x7fff ffff.
11627         */
11628         if (i32 != ($xxx) f)
11629                 result |= 1;
11630         exit(result);
11631 }
11632 EOCP
11633 set try
11634 if eval $compile_ok; then
11635         $run ./try 2>/dev/null
11636         yyy=$?
11637 else
11638         echo "(I can't seem to compile the test program--assuming it can't)"
11639         yyy=1
11640 fi
11641 case "$yyy" in
11642 0)      val="$define"
11643         echo "Yup, it can."
11644         ;;
11645 *)      val="$undef"
11646         echo "Nope, it can't."
11647         ;;
11648 esac
11649 set d_casti32
11650 eval $setvar
11651 $rm_try
11652
11653 : check for ability to cast negative floats to unsigned
11654 echo " "
11655 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
11656 $cat >try.c <<EOCP
11657 #include <stdio.h>
11658 #$i_stdlib I_STDLIB
11659 #ifdef I_STDLIB
11660 #include <stdlib.h>
11661 #endif
11662 #include <sys/types.h>
11663 #include <signal.h>
11664 $signal_t blech(int s) { exit(7); }
11665 $signal_t blech_in_list(int s) { exit(4); }
11666 unsigned long dummy_long(unsigned long p) { return p; }
11667 unsigned int dummy_int(unsigned int p) { return p; }
11668 unsigned short dummy_short(unsigned short p) { return p; }
11669 int main()
11670 {
11671         double f;
11672         unsigned long along;
11673         unsigned int aint;
11674         unsigned short ashort;
11675         int result = 0;
11676         char str[16];
11677
11678         /* Frustrate gcc-2.7.2's optimizer which failed this test with
11679            a direct f = -123. assignment.  gcc-2.8.0 reportedly
11680            optimized the whole file away
11681         */
11682         /* Store the number in a writable string for gcc to pass to
11683            sscanf under HP-UX.
11684         */
11685         sprintf(str, "-123");
11686         sscanf(str, "%lf", &f);  /* f = -123.; */
11687
11688         signal(SIGFPE, blech);
11689         along = (unsigned long)f;
11690         aint = (unsigned int)f;
11691         ashort = (unsigned short)f;
11692         if (along != (unsigned long)-123)
11693                 result |= 1;
11694         if (aint != (unsigned int)-123)
11695                 result |= 1;
11696         if (ashort != (unsigned short)-123)
11697                 result |= 1;
11698         sprintf(str, "1073741824.");
11699         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
11700         f = f + f;
11701         along = 0;
11702         along = (unsigned long)f;
11703         if (along != 0x80000000)
11704                 result |= 2;
11705         f -= 1.;
11706         along = 0;
11707         along = (unsigned long)f;
11708         if (along != 0x7fffffff)
11709                 result |= 1;
11710         f += 2.;
11711         along = 0;
11712         along = (unsigned long)f;
11713         if (along != 0x80000001)
11714                 result |= 2;
11715         if (result)
11716                 exit(result);
11717         signal(SIGFPE, blech_in_list);
11718         sprintf(str, "123.");
11719         sscanf(str, "%lf", &f);  /* f = 123.; */
11720         along = dummy_long((unsigned long)f);
11721         aint = dummy_int((unsigned int)f);
11722         ashort = dummy_short((unsigned short)f);
11723         if (along != (unsigned long)123)
11724                 result |= 4;
11725         if (aint != (unsigned int)123)
11726                 result |= 4;
11727         if (ashort != (unsigned short)123)
11728                 result |= 4;
11729         exit(result);
11730
11731 }
11732 EOCP
11733 set try
11734 if eval $compile_ok; then
11735         $run ./try 2>/dev/null
11736         castflags=$?
11737 else
11738         echo "(I can't seem to compile the test program--assuming it can't)"
11739         castflags=7
11740 fi
11741 case "$castflags" in
11742 0)      val="$define"
11743         echo "Yup, it can."
11744         ;;
11745 *)      val="$undef"
11746         echo "Nope, it can't."
11747         ;;
11748 esac
11749 set d_castneg
11750 eval $setvar
11751 $rm_try
11752
11753 : see if cbrt exists
11754 set cbrt d_cbrt
11755 eval $inlibc
11756
11757 : see if vprintf exists
11758 echo " "
11759 if set vprintf val -f d_vprintf; eval $csym; $val; then
11760         echo 'vprintf() found.' >&4
11761         val="$define"
11762         $cat >try.c <<EOF
11763 #$i_stdarg I_STDARG  /* Only one of these can be defined by i_varhrd */
11764 #$i_varargs I_VARARGS
11765
11766 #$i_stdlib I_STDLIB
11767 #$i_unistd I_UNISTD
11768
11769 #ifdef I_STDARG
11770 #  include <stdarg.h>
11771 #else /* I_VARARGS */
11772 #  include <varargs.h>
11773 #endif
11774
11775 #ifdef I_UNISTD
11776 #  include <unistd.h>
11777 #endif
11778
11779 #ifdef I_STDLIB
11780 #  include <stdlib.h>
11781 #endif
11782
11783 #include <stdio.h> /* vsprintf prototype */
11784
11785 #ifdef I_STDARG
11786 void xxx(int n, ...)
11787 {
11788     va_list args;
11789     char buf[10];
11790     va_start(args, n);
11791     exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
11792 }
11793 int main() { xxx(1, "foo"); }
11794
11795 #else /* I_VARARGS */
11796
11797 xxx(va_alist)
11798 va_dcl
11799 {
11800     va_list args;
11801     char buf[10];
11802     va_start(args);
11803     exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
11804 }
11805 int main() { xxx("foo"); }
11806
11807 #endif
11808
11809 EOF
11810         set try
11811         if eval $compile_ok; then
11812                 if $run ./try; then
11813                         echo "Your vsprintf() returns (int)." >&4
11814                         val2="$undef"
11815                 else
11816                         echo "Your vsprintf() returns (char*)." >&4
11817                         val2="$define"
11818                 fi
11819         else
11820                 echo 'I am unable to compile the vsprintf() test program.' >&4
11821                 # We shouldn't get here.  If we do, assume the standard signature,
11822                 # not the old BSD one.
11823                 echo 'Guessing that vsprintf() returns (int).' >&4
11824                 val2="$undef"
11825         fi
11826 else
11827         echo 'vprintf() NOT found.' >&4
11828         val="$undef"
11829         val2="$undef"
11830 fi
11831 $rm_try
11832 set d_vprintf
11833 eval $setvar
11834 val=$val2
11835 set d_charvspr
11836 eval $setvar
11837
11838 : see if chown exists
11839 set chown d_chown
11840 eval $inlibc
11841
11842 : see if chroot exists
11843 set chroot d_chroot
11844 eval $inlibc
11845
11846 : see if chsize exists
11847 set chsize d_chsize
11848 eval $inlibc
11849
11850 : see if class exists
11851 set class d_class
11852 eval $inlibc
11853
11854 : see if clearenv exists
11855 set clearenv d_clearenv
11856 eval $inlibc
11857
11858 : Define hasstruct macro for Configure internal use
11859 hasstruct='varname=$1; struct=$2; shift; shift;
11860 while $test $# -ge 2; do
11861         case "$1" in
11862         $define) echo "#include <$2>";;
11863         esac ;
11864     shift 2;
11865 done > try.c;
11866 echo "int main () { struct $struct foo; }" >> try.c;
11867 set try;
11868 if eval $compile; then
11869         val="$define";
11870 else
11871         val="$undef";
11872 fi;
11873 set $varname;
11874 eval $setvar;
11875 $rm_try'
11876
11877 : see whether socket exists
11878 socketlib=''
11879 sockethdr=''
11880 echo " "
11881 $echo $n "Hmm... $c" >&4
11882 if set socket val -f d_socket; eval $csym; $val; then
11883     echo "Looks like you have Berkeley networking support." >&4
11884     d_socket="$define"
11885     if set setsockopt val -f; eval $csym; $val; then
11886         d_oldsock="$undef"
11887     else
11888         echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
11889         d_oldsock="$define"
11890     fi
11891 else
11892     if $contains socklib libc.list >/dev/null 2>&1; then
11893         echo "Looks like you have Berkeley networking support." >&4
11894         d_socket="$define"
11895         : we will have to assume that it supports the 4.2 BSD interface
11896         d_oldsock="$undef"
11897     else
11898         echo "You don't have Berkeley networking in libc$_a..." >&4
11899         if test "X$d_socket" = "X$define"; then
11900             echo "...but you seem to believe that you have sockets." >&4
11901         else
11902             for net in net socket
11903             do
11904                 if test -f $sysroot/usr/lib/lib$net$_a; then
11905                     ( ($nm $nm_opt $sysroot/usr/lib/lib$net$_a | eval $nm_extract) ||  \
11906                     $ar t $sysroot/usr/lib/lib$net$_a) 2>/dev/null >> libc.list
11907                     if $contains socket libc.list >/dev/null 2>&1; then
11908                         d_socket="$define"
11909                         socketlib="-l$net"
11910                         case "$net" in
11911                         net)
11912                             echo "...but the Wollongong group seems to have hacked it in." >&4
11913                             sockethdr="-I$sysroot/usr/netinclude"
11914                             ;;
11915                         esac
11916                         echo "Found Berkeley sockets interface in lib$net." >&4
11917                         if $contains setsockopt libc.list >/dev/null 2>&1; then
11918                             d_oldsock="$undef"
11919                         else
11920                             echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
11921                             d_oldsock="$define"
11922                         fi
11923                         break
11924                     fi
11925                 fi
11926             done
11927             if test "X$d_socket" != "X$define"; then
11928                echo "or anywhere else I see." >&4
11929                d_socket="$undef"
11930                d_oldsock="$undef"
11931             fi
11932         fi
11933     fi
11934 fi
11935
11936 : see if socketpair exists
11937 set socketpair d_sockpair
11938 eval $inlibc
11939
11940
11941 echo " "
11942 echo "Checking the availability sa_len in the sock struct ..." >&4
11943 $cat >try.c <<EOF
11944 #include <sys/types.h>
11945 #include <sys/socket.h>
11946 int main() {
11947 struct sockaddr sa;
11948 return (sa.sa_len);
11949 }
11950 EOF
11951 val="$undef"
11952 set try; if eval $compile; then
11953     val="$define"
11954 fi
11955 set d_sockaddr_sa_len; eval $setvar
11956 $rm_try
11957
11958 echo " "
11959 echo "Checking the availability struct sockaddr_in6 ..." >&4
11960 $cat >try.c <<EOF
11961 #include <sys/types.h>
11962 #include <sys/socket.h>
11963 #include <netinet/in.h>
11964 int main() {
11965 struct sockaddr_in6 sin6;
11966 return (sin6.sin6_family);
11967 }
11968 EOF
11969 val="$undef"
11970 set try; if eval $compile; then
11971     val="$define"
11972 fi
11973 set d_sockaddr_in6; eval $setvar
11974 $rm_try
11975
11976 echo " "
11977 echo "Checking the availability sin6_scope_id in struct sockaddr_in6 ..." >&4
11978 $cat >try.c <<EOF
11979 #include <sys/types.h>
11980 #include <sys/socket.h>
11981 #include <netinet/in.h>
11982 int main() {
11983 struct sockaddr_in6 sin6;
11984 return (sin6.sin6_scope_id);
11985 }
11986 EOF
11987 val="$undef"
11988 set try; if eval $compile; then
11989     val="$define"
11990 fi
11991 set d_sin6_scope_id; eval $setvar
11992 $rm_try
11993
11994 echo " "
11995 echo "Checking the availability struct ip_mreq ..." >&4
11996 $cat >try.c <<EOF
11997 #include <sys/types.h>
11998 #include <sys/socket.h>
11999 #include <netinet/in.h>
12000 int main() {
12001 struct ip_mreq mreq;
12002 return (mreq.imr_multiaddr.s_addr);
12003 }
12004 EOF
12005 val="$undef"
12006 set try; if eval $compile; then
12007        val="$define"
12008 fi
12009 set d_ip_mreq; eval $setvar
12010 $rm_try
12011
12012 echo " "
12013 echo "Checking the availability struct ip_mreq_source ..." >&4
12014 $cat >try.c <<EOF
12015 #include <sys/types.h>
12016 #include <sys/socket.h>
12017 #include <netinet/in.h>
12018 int main() {
12019 struct ip_mreq_source mreq;
12020 return (mreq.imr_multiaddr.s_addr);
12021 }
12022 EOF
12023 val="$undef"
12024 set try; if eval $compile; then
12025        val="$define"
12026 fi
12027 set d_ip_mreq_source; eval $setvar
12028 $rm_try
12029
12030 echo " "
12031 echo "Checking the availability struct ipv6_mreq ..." >&4
12032 $cat >try.c <<EOF
12033 #include <sys/types.h>
12034 #include <sys/socket.h>
12035 #include <netinet/in.h>
12036 int main() {
12037 struct ipv6_mreq mreq;
12038 return (mreq.ipv6mr_interface);
12039 }
12040 EOF
12041 val="$undef"
12042 set try; if eval $compile; then
12043     val="$define"
12044 fi
12045 set d_ipv6_mreq; eval $setvar
12046 $rm_try
12047
12048 echo " "
12049 echo "Checking the availability struct ipv6_mreq_source ..." >&4
12050 $cat >try.c <<EOF
12051 #include <sys/types.h>
12052 #include <sys/socket.h>
12053 #include <netinet/in.h>
12054 int main() {
12055 struct ipv6_mreq_source mreq;
12056 return (mreq.imr_multiaddr.s_addr);
12057 }
12058 EOF
12059 val="$undef"
12060 set try; if eval $compile; then
12061        val="$define"
12062 fi
12063 set d_ipv6_mreq_source; eval $setvar
12064 $rm_try
12065
12066 echo " "
12067 echo "Checking the availability of certain socket constants..." >&4
12068 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
12069     enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
12070     $cat >try.c <<EOF
12071 #include <sys/types.h>
12072 #include <sys/socket.h>
12073 int main() {
12074     int i = $ENUM;
12075 }
12076 EOF
12077     val="$undef"
12078     set try; if eval $compile; then
12079         val="$define"
12080     fi
12081     set d_${enum}; eval $setvar
12082     $rm_try
12083 done
12084
12085 : see if this is a sys/uio.h system
12086 set sys/uio.h i_sysuio
12087 eval $inhdr
12088
12089 : Check for cmsghdr support
12090 echo " "
12091 echo "Checking to see if your system supports struct cmsghdr..." >&4
12092 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
12093 eval $hasstruct
12094 case "$d_cmsghdr_s" in
12095 "$define")      echo "Yes, it does."   ;;
12096 *)              echo "No, it doesn't." ;;
12097 esac
12098
12099
12100 : check for const keyword
12101 echo " "
12102 echo 'Checking to see if your C compiler knows about "const"...' >&4
12103 $cat >const.c <<'EOCP'
12104 typedef struct spug { int drokk; } spug;
12105 int main()
12106 {
12107         const char *foo;
12108         const spug y = { 0 };
12109 }
12110 EOCP
12111 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
12112         val="$define"
12113         echo "Yup, it does."
12114 else
12115         val="$undef"
12116         echo "Nope, it doesn't."
12117 fi
12118 set d_const
12119 eval $setvar
12120
12121 : see if copysign exists
12122 set copysign d_copysign
12123 eval $inlibc
12124
12125 : see if copysignl exists
12126 set copysignl d_copysignl
12127 eval $inlibc
12128
12129 : see if crypt exists
12130 echo " "
12131 set crypt d_crypt
12132 eval $inlibc
12133 case "$d_crypt" in
12134 $define) cryptlib='' ;;
12135 *)      if set crypt val -f d_crypt; eval $csym; $val; then
12136                 echo 'crypt() found.' >&4
12137                 val="$define"
12138                 cryptlib=''
12139         else
12140                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
12141                 if $test -z "$cryptlib"; then
12142                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
12143                 else
12144                         cryptlib=-lcrypt
12145                 fi
12146                 if $test -z "$cryptlib"; then
12147                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
12148                 else
12149                         cryptlib=-lcrypt
12150                 fi
12151                 if $test -z "$cryptlib"; then
12152                         cryptlib=`./loc libcrypt$_a "" $libpth`
12153                 else
12154                         cryptlib=-lcrypt
12155                 fi
12156                 if $test -z "$cryptlib"; then
12157                         echo 'crypt() NOT found.' >&4
12158                         val="$undef"
12159                 else
12160                         val="$define"
12161                 fi
12162         fi
12163         set d_crypt
12164         eval $setvar
12165         ;;
12166 esac
12167
12168 : see if this is a crypt.h system
12169 set crypt.h i_crypt
12170 eval $inhdr
12171
12172 : see if crypt_r exists
12173 set crypt_r d_crypt_r
12174 eval $inlibc
12175 case "$d_crypt_r" in
12176 "$define")
12177         hdrs="$i_systypes sys/types.h define stdio.h $i_crypt crypt.h"
12178         case "$d_crypt_r_proto:$usethreads" in
12179         ":define")      d_crypt_r_proto=define
12180                 set d_crypt_r_proto crypt_r $hdrs
12181                 eval $hasproto ;;
12182         *)      ;;
12183         esac
12184         case "$d_crypt_r_proto" in
12185         define)
12186         case "$crypt_r_proto" in
12187         ''|0) try='char* crypt_r(const char*, const char*, struct crypt_data*);'
12188         ./protochk "$extern_C $try" $hdrs && crypt_r_proto=B_CCS ;;
12189         esac
12190         case "$crypt_r_proto" in
12191         ''|0) try='char* crypt_r(const char*, const char*, CRYPTD*);'
12192         ./protochk "$extern_C $try" $hdrs && crypt_r_proto=B_CCD ;;
12193         esac
12194         case "$crypt_r_proto" in
12195         ''|0)   d_crypt_r=undef
12196                 crypt_r_proto=0
12197                 echo "Disabling crypt_r, cannot determine prototype." >&4 ;;
12198         * )     case "$crypt_r_proto" in
12199                 REENTRANT_PROTO*) ;;
12200                 *) crypt_r_proto="REENTRANT_PROTO_$crypt_r_proto" ;;
12201                 esac
12202                 echo "Prototype: $try" ;;
12203         esac
12204         ;;
12205         *)      case "$usethreads" in
12206                 define) echo "crypt_r has no prototype, not using it." >&4 ;;
12207                 esac
12208                 d_crypt_r=undef
12209                 crypt_r_proto=0
12210                 ;;
12211         esac
12212         ;;
12213 *)      crypt_r_proto=0
12214         ;;
12215 esac
12216
12217 : get csh whereabouts
12218 case "$csh" in
12219 'csh') val="$undef" ;;
12220 *) val="$define" ;;
12221 esac
12222 set d_csh
12223 eval $setvar
12224 : Respect a hint or command line value for full_csh.
12225 case "$full_csh" in
12226 '') full_csh=$csh ;;
12227 esac
12228
12229 : see if ctermid exists
12230 set ctermid d_ctermid
12231 eval $inlibc
12232
12233 : see if ctermid_r exists
12234 set ctermid_r d_ctermid_r
12235 eval $inlibc
12236 case "$d_ctermid_r" in
12237 "$define")
12238         hdrs="$i_systypes sys/types.h define stdio.h "
12239         case "$d_ctermid_r_proto:$usethreads" in
12240         ":define")      d_ctermid_r_proto=define
12241                 set d_ctermid_r_proto ctermid_r $hdrs
12242                 eval $hasproto ;;
12243         *)      ;;
12244         esac
12245         case "$d_ctermid_r_proto" in
12246         define)
12247         case "$ctermid_r_proto" in
12248         ''|0) try='char* ctermid_r(char*);'
12249         ./protochk "$extern_C $try" $hdrs && ctermid_r_proto=B_B ;;
12250         esac
12251         case "$ctermid_r_proto" in
12252         ''|0)   d_ctermid_r=undef
12253                 ctermid_r_proto=0
12254                 echo "Disabling ctermid_r, cannot determine prototype." >&4 ;;
12255         * )     case "$ctermid_r_proto" in
12256                 REENTRANT_PROTO*) ;;
12257                 *) ctermid_r_proto="REENTRANT_PROTO_$ctermid_r_proto" ;;
12258                 esac
12259                 echo "Prototype: $try" ;;
12260         esac
12261         ;;
12262         *)      case "$usethreads" in
12263                 define) echo "ctermid_r has no prototype, not using it." >&4 ;;
12264                 esac
12265                 d_ctermid_r=undef
12266                 ctermid_r_proto=0
12267                 ;;
12268         esac
12269         ;;
12270 *)      ctermid_r_proto=0
12271         ;;
12272 esac
12273
12274 : see if ctime_r exists
12275 set ctime_r d_ctime_r
12276 eval $inlibc
12277 case "$d_ctime_r" in
12278 "$define")
12279         hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
12280         case "$d_ctime_r_proto:$usethreads" in
12281         ":define")      d_ctime_r_proto=define
12282                 set d_ctime_r_proto ctime_r $hdrs
12283                 eval $hasproto ;;
12284         *)      ;;
12285         esac
12286         case "$d_ctime_r_proto" in
12287         define)
12288         case "$ctime_r_proto" in
12289         ''|0) try='char* ctime_r(const time_t*, char*);'
12290         ./protochk "$extern_C $try" $hdrs && ctime_r_proto=B_SB ;;
12291         esac
12292         case "$ctime_r_proto" in
12293         ''|0) try='char* ctime_r(const time_t*, char*, int);'
12294         ./protochk "$extern_C $try" $hdrs && ctime_r_proto=B_SBI ;;
12295         esac
12296         case "$ctime_r_proto" in
12297         ''|0) try='int ctime_r(const time_t*, char*);'
12298         ./protochk "$extern_C $try" $hdrs && ctime_r_proto=I_SB ;;
12299         esac
12300         case "$ctime_r_proto" in
12301         ''|0) try='int ctime_r(const time_t*, char*, int);'
12302         ./protochk "$extern_C $try" $hdrs && ctime_r_proto=I_SBI ;;
12303         esac
12304         case "$ctime_r_proto" in
12305         ''|0)   d_ctime_r=undef
12306                 ctime_r_proto=0
12307                 echo "Disabling ctime_r, cannot determine prototype." >&4 ;;
12308         * )     case "$ctime_r_proto" in
12309                 REENTRANT_PROTO*) ;;
12310                 *) ctime_r_proto="REENTRANT_PROTO_$ctime_r_proto" ;;
12311                 esac
12312                 echo "Prototype: $try" ;;
12313         esac
12314         ;;
12315         *)      case "$usethreads" in
12316                 define) echo "ctime_r has no prototype, not using it." >&4 ;;
12317                 esac
12318                 d_ctime_r=undef
12319                 ctime_r_proto=0
12320                 ;;
12321         esac
12322         ;;
12323 *)      ctime_r_proto=0
12324         ;;
12325 esac
12326
12327 : see if cuserid exists
12328 set cuserid d_cuserid
12329 eval $inlibc
12330
12331 : see if this is a limits.h system
12332 set limits.h i_limits
12333 eval $inhdr
12334
12335 : See if number of significant digits in a double precision number is known
12336 echo " "
12337 $cat >dbl_dig.c <<EOM
12338 #$i_limits I_LIMITS
12339 #$i_float I_FLOAT
12340 #ifdef I_LIMITS
12341 #include <limits.h>
12342 #endif
12343 #ifdef I_FLOAT
12344 #include <float.h>
12345 #endif
12346 #ifdef DBL_DIG
12347 printf("Contains DBL_DIG");
12348 #endif
12349 EOM
12350 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
12351 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
12352         echo "DBL_DIG found." >&4
12353         val="$define"
12354 else
12355         echo "DBL_DIG NOT found." >&4
12356         val="$undef"
12357 fi
12358 $rm -f dbl_dig.?
12359 set d_dbl_dig
12360 eval $setvar
12361
12362 : see if dbm.h is available
12363 : see if dbmclose exists
12364 set dbmclose d_dbmclose
12365 eval $inlibc
12366
12367 case "$d_dbmclose" in
12368 $define)
12369         set dbm.h i_dbm
12370         eval $inhdr
12371         case "$i_dbm" in
12372         $define)
12373                 val="$undef"
12374                 set i_rpcsvcdbm
12375                 eval $setvar
12376                 ;;
12377         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12378                 eval $inhdr
12379                 ;;
12380         esac
12381         ;;
12382 *)      echo "We won't be including <dbm.h>"
12383         val="$undef"
12384         set i_dbm
12385         eval $setvar
12386         val="$undef"
12387         set i_rpcsvcdbm
12388         eval $setvar
12389         ;;
12390 esac
12391
12392 : see if prototype for dbminit is available
12393 echo " "
12394 set d_dbminitproto dbminit $i_dbm dbm.h
12395 eval $hasproto
12396
12397 : see if difftime exists
12398 set difftime d_difftime
12399 eval $inlibc
12400
12401 : see if this is a dirent system
12402 echo " "
12403 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
12404         val="$define"
12405         echo "<dirent.h> found." >&4
12406 else
12407         val="$undef"
12408         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
12409                 echo "<sys/dir.h> found." >&4
12410                 echo " "
12411         else
12412                 xinc=`./findhdr sys/ndir.h`
12413         fi
12414         echo "<dirent.h> NOT found." >&4
12415 fi
12416 set i_dirent
12417 eval $setvar
12418
12419 : Look for type of directory structure.
12420 echo " "
12421 $cppstdin $cppflags $cppminus < "$xinc" > try.c
12422
12423 case "$direntrytype" in
12424 ''|' ')
12425         case "$i_dirent" in
12426         $define) guess1='struct dirent' ;;
12427         *) guess1='struct direct'  ;;
12428         esac
12429         ;;
12430 *)      guess1="$direntrytype"
12431         ;;
12432 esac
12433
12434 case "$guess1" in
12435 'struct dirent') guess2='struct direct' ;;
12436 *) guess2='struct dirent' ;;
12437 esac
12438
12439 if $contains "$guess1" try.c >/dev/null 2>&1; then
12440         direntrytype="$guess1"
12441         echo "Your directory entries are $direntrytype." >&4
12442 elif $contains "$guess2" try.c >/dev/null 2>&1; then
12443         direntrytype="$guess2"
12444         echo "Your directory entries seem to be $direntrytype." >&4
12445 else
12446         echo "I don't recognize your system's directory entries." >&4
12447         rp="What type is used for directory entries on this system?"
12448         dflt="$guess1"
12449         . ./myread
12450         direntrytype="$ans"
12451 fi
12452 $rm_try
12453
12454 : see if the directory entry stores field length
12455 echo " "
12456 $cppstdin $cppflags $cppminus < "$xinc" > try.c
12457 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
12458         echo "Good, your directory entry keeps length information in d_namlen." >&4
12459         val="$define"
12460 else
12461         echo "Your directory entry does not know about the d_namlen field." >&4
12462         val="$undef"
12463 fi
12464 set d_dirnamlen
12465 eval $setvar
12466 $rm_try
12467
12468 : Look for DIR.dd_fd
12469 case "$i_dirent" in
12470 "$define")
12471     echo "Checking to see if DIR has a dd_fd member variable" >&4
12472     $cat >try.c <<EOCP
12473 #$i_stdlib I_STDLIB
12474 #ifdef I_STDLIB
12475 #include <stdlib.h>
12476 #endif
12477 #include <dirent.h>
12478
12479 int main() {
12480     DIR dir;
12481     dir.dd_fd = 1;
12482     return 0;
12483 }
12484 EOCP
12485     val=$undef
12486     set try
12487     if eval $compile; then
12488         echo "Yes, it does."
12489         val="$define"
12490     else
12491         echo "No, it does not."
12492         val="$undef"
12493     fi
12494     ;;
12495 *)
12496     echo "You don't have a <dirent.h>, so not checking for dd_fd." >&4
12497     val="$undef"
12498     ;;
12499 esac
12500 set d_dir_dd_fd
12501 eval $setvar
12502 $rm_try
12503
12504 : see if this is an sysdir system
12505 set sys/dir.h i_sysdir
12506 eval $inhdr
12507
12508 : see if this is an sysndir system
12509 set sys/ndir.h i_sysndir
12510 eval $inhdr
12511
12512 : Look for dirfd
12513 echo " "
12514 $cat >dirfd.c <<EOM
12515 #include <stdio.h>
12516 #$i_stdlib I_STDLIB
12517 #ifdef I_STDLIB
12518 #include <stdlib.h>
12519 #endif
12520 #$i_dirent I_DIRENT             /**/
12521 #$i_sysdir I_SYS_DIR            /**/
12522 #$i_sysndir I_SYS_NDIR          /**/
12523 #$i_systypes I_SYS_TYPES        /**/
12524 #if defined(I_SYS_TYPES)
12525 #include <sys/types.h>
12526 #endif
12527 #if defined(I_DIRENT)
12528 #include <dirent.h>
12529 #else
12530 #ifdef I_SYS_NDIR
12531 #include <sys/ndir.h>
12532 #else
12533 #ifdef I_SYS_DIR
12534 #ifdef hp9000s500
12535 #include <ndir.h>       /* may be wrong in the future */
12536 #else
12537 #include <sys/dir.h>
12538 #endif
12539 #endif
12540 #endif
12541 #endif
12542 int main() {
12543         DIR *dirp = opendir(".");
12544         if (dirfd(dirp) >= 0)
12545                 exit(0);
12546         else
12547                 exit(1);
12548 }
12549 EOM
12550 val=$undef
12551 set dirfd
12552 if eval $compile; then
12553         val="$define"
12554 fi
12555 case "$val" in
12556 $define)        echo "dirfd() found." >&4       ;;
12557 *)              echo "dirfd() NOT found." >&4   ;;
12558 esac
12559 set d_dirfd
12560 eval $setvar
12561 $rm -f dirfd*
12562
12563 : see if dladdr exists
12564 set dladdr d_dladdr
12565 eval $inlibc
12566
12567 : see if dlerror exists
12568 xxx_runnm="$runnm"
12569 runnm=false
12570 set dlerror d_dlerror
12571 eval $inlibc
12572 runnm="$xxx_runnm"
12573
12574 : see if dlfcn is available
12575 set dlfcn.h i_dlfcn
12576 eval $inhdr
12577
12578 : Check what extension to use for shared libs
12579 case "$usedl" in
12580 $define|y|true)
12581         $cat << EOM
12582
12583 On a few systems, the dynamically loaded modules that perl generates and uses
12584 will need a different extension than shared libs. The default will probably
12585 be appropriate.
12586
12587 EOM
12588         case "$dlext" in
12589         '')     dflt="$so" ;;
12590         *)      dflt="$dlext" ;;
12591         esac
12592         rp='What is the extension of dynamically loaded modules'
12593         . ./myread
12594         dlext="$ans"
12595         ;;
12596 *)
12597         dlext="none"
12598         ;;
12599 esac
12600
12601 : Check if dlsym need a leading underscore
12602 echo " "
12603 val="$undef"
12604
12605 case "$dlsrc" in
12606 dl_dlopen.xs)
12607         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
12608         $cat >dyna.c <<'EOM'
12609 fred () { }
12610 EOM
12611
12612 $cat >fred.c<<EOM
12613
12614 #include <stdio.h>
12615 #$i_stdlib I_STDLIB
12616 #ifdef I_STDLIB
12617 #include <stdlib.h>
12618 #endif
12619 #$i_dlfcn I_DLFCN
12620 #ifdef I_DLFCN
12621 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
12622 #else
12623 #include <sys/types.h>
12624 #include <nlist.h>
12625 #include <link.h>
12626 #endif
12627
12628 extern int fred() ;
12629
12630 int main()
12631 {
12632     void * handle ;
12633     void * symbol ;
12634 #ifndef RTLD_LAZY
12635     int mode = 1 ;
12636 #else
12637     int mode = RTLD_LAZY ;
12638 #endif
12639     handle = dlopen("./dyna.$dlext", mode) ;
12640     if (handle == NULL) {
12641         printf ("1\n") ;
12642         fflush (stdout) ;
12643         exit(0);
12644     }
12645     symbol = dlsym(handle, "fred") ;
12646     if (symbol == NULL) {
12647         /* try putting a leading underscore */
12648         symbol = dlsym(handle, "_fred") ;
12649         if (symbol == NULL) {
12650             printf ("2\n") ;
12651             fflush (stdout) ;
12652             exit(0);
12653         }
12654         printf ("3\n") ;
12655     }
12656     else
12657         printf ("4\n") ;
12658     fflush (stdout) ;
12659     exit(0);
12660 }
12661 EOM
12662         : Call the object file tmp-dyna.o in case dlext=o.
12663         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
12664                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
12665                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 &&
12666                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
12667                 xxx=`$run ./fred`
12668                 case $xxx in
12669                 1)      echo "Test program failed using dlopen." >&4
12670                         echo "Perhaps you should not use dynamic loading." >&4;;
12671                 2)      echo "Test program failed using dlsym." >&4
12672                         echo "Perhaps you should not use dynamic loading." >&4;;
12673                 3)      echo "dlsym needs a leading underscore" >&4
12674                         val="$define" ;;
12675                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
12676                 esac
12677         else
12678                 echo "I can't compile and run the test program." >&4
12679                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
12680         fi
12681         ;;
12682 esac
12683
12684 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
12685
12686 set d_dlsymun
12687 eval $setvar
12688
12689 : see if drand48_r exists
12690 set drand48_r d_drand48_r
12691 eval $inlibc
12692 case "$d_drand48_r" in
12693 "$define")
12694         hdrs="$i_systypes sys/types.h define stdio.h $i_stdlib stdlib.h"
12695         case "$d_drand48_r_proto:$usethreads" in
12696         ":define")      d_drand48_r_proto=define
12697                 set d_drand48_r_proto drand48_r $hdrs
12698                 eval $hasproto ;;
12699         *)      ;;
12700         esac
12701         case "$d_drand48_r_proto" in
12702         define)
12703         case "$drand48_r_proto" in
12704         ''|0) try='int drand48_r(struct drand48_data*, double*);'
12705         ./protochk "$extern_C $try" $hdrs && drand48_r_proto=I_ST ;;
12706         esac
12707         case "$drand48_r_proto" in
12708         ''|0)   d_drand48_r=undef
12709                 drand48_r_proto=0
12710                 echo "Disabling drand48_r, cannot determine prototype." >&4 ;;
12711         * )     case "$drand48_r_proto" in
12712                 REENTRANT_PROTO*) ;;
12713                 *) drand48_r_proto="REENTRANT_PROTO_$drand48_r_proto" ;;
12714                 esac
12715                 echo "Prototype: $try" ;;
12716         esac
12717         ;;
12718         *)      case "$usethreads" in
12719                 define) echo "drand48_r has no prototype, not using it." >&4 ;;
12720                 esac
12721                 d_drand48_r=undef
12722                 drand48_r_proto=0
12723                 ;;
12724         esac
12725         ;;
12726 *)      drand48_r_proto=0
12727         ;;
12728 esac
12729
12730 : see if prototype for drand48 is available
12731 echo " "
12732 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
12733 eval $hasproto
12734
12735 : see if dup2 exists
12736 set dup2 d_dup2
12737 eval $inlibc
12738
12739 : see if eaccess exists
12740 set eaccess d_eaccess
12741 eval $inlibc
12742
12743 : see if endgrent exists
12744 set endgrent d_endgrent
12745 eval $inlibc
12746
12747 : see if this is an grp system
12748 set grp.h i_grp
12749 eval $inhdr
12750
12751 case "$i_grp" in
12752 $define)
12753         xxx=`./findhdr grp.h`
12754         $cppstdin $cppflags $cppminus < $xxx >$$.h
12755
12756         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
12757                 val="$define"
12758         else
12759                 val="$undef"
12760         fi
12761         set d_grpasswd
12762         eval $setvar
12763
12764         $rm -f $$.h
12765         ;;
12766 *)
12767         val="$undef";
12768         set d_grpasswd; eval $setvar
12769         ;;
12770 esac
12771
12772 : see if endgrent_r exists
12773 set endgrent_r d_endgrent_r
12774 eval $inlibc
12775 case "$d_endgrent_r" in
12776 "$define")
12777         hdrs="$i_systypes sys/types.h define stdio.h $i_grp grp.h"
12778         case "$d_endgrent_r_proto:$usethreads" in
12779         ":define")      d_endgrent_r_proto=define
12780                 set d_endgrent_r_proto endgrent_r $hdrs
12781                 eval $hasproto ;;
12782         *)      ;;
12783         esac
12784         case "$d_endgrent_r_proto" in
12785         define)
12786         case "$endgrent_r_proto" in
12787         ''|0) try='int endgrent_r(FILE**);'
12788         ./protochk "$extern_C $try" $hdrs && endgrent_r_proto=I_H ;;
12789         esac
12790         case "$endgrent_r_proto" in
12791         ''|0) try='void endgrent_r(FILE**);'
12792         ./protochk "$extern_C $try" $hdrs && endgrent_r_proto=V_H ;;
12793         esac
12794         case "$endgrent_r_proto" in
12795         ''|0)   d_endgrent_r=undef
12796                 endgrent_r_proto=0
12797                 echo "Disabling endgrent_r, cannot determine prototype." >&4 ;;
12798         * )     case "$endgrent_r_proto" in
12799                 REENTRANT_PROTO*) ;;
12800                 *) endgrent_r_proto="REENTRANT_PROTO_$endgrent_r_proto" ;;
12801                 esac
12802                 echo "Prototype: $try" ;;
12803         esac
12804         ;;
12805         *)      case "$usethreads" in
12806                 define) echo "endgrent_r has no prototype, not using it." >&4 ;;
12807                 esac
12808                 d_endgrent_r=undef
12809                 endgrent_r_proto=0
12810                 ;;
12811         esac
12812         ;;
12813 *)      endgrent_r_proto=0
12814         ;;
12815 esac
12816
12817 : see if endhostent exists
12818 set endhostent d_endhent
12819 eval $inlibc
12820
12821 : see if this is a netdb.h system
12822 set netdb.h i_netdb
12823 eval $inhdr
12824
12825 : see if endhostent_r exists
12826 set endhostent_r d_endhostent_r
12827 eval $inlibc
12828 case "$d_endhostent_r" in
12829 "$define")
12830         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
12831         case "$d_endhostent_r_proto:$usethreads" in
12832         ":define")      d_endhostent_r_proto=define
12833                 set d_endhostent_r_proto endhostent_r $hdrs
12834                 eval $hasproto ;;
12835         *)      ;;
12836         esac
12837         case "$d_endhostent_r_proto" in
12838         define)
12839         case "$endhostent_r_proto" in
12840         ''|0) try='int endhostent_r(struct hostent_data*);'
12841         ./protochk "$extern_C $try" $hdrs && endhostent_r_proto=I_D ;;
12842         esac
12843         case "$endhostent_r_proto" in
12844         ''|0) try='void endhostent_r(struct hostent_data*);'
12845         ./protochk "$extern_C $try" $hdrs && endhostent_r_proto=V_D ;;
12846         esac
12847         case "$endhostent_r_proto" in
12848         ''|0)   d_endhostent_r=undef
12849                 endhostent_r_proto=0
12850                 echo "Disabling endhostent_r, cannot determine prototype." >&4 ;;
12851         * )     case "$endhostent_r_proto" in
12852                 REENTRANT_PROTO*) ;;
12853                 *) endhostent_r_proto="REENTRANT_PROTO_$endhostent_r_proto" ;;
12854                 esac
12855                 echo "Prototype: $try" ;;
12856         esac
12857         ;;
12858         *)      case "$usethreads" in
12859                 define) echo "endhostent_r has no prototype, not using it." >&4 ;;
12860                 esac
12861                 d_endhostent_r=undef
12862                 endhostent_r_proto=0
12863                 ;;
12864         esac
12865         ;;
12866 *)      endhostent_r_proto=0
12867         ;;
12868 esac
12869
12870 : see if endnetent exists
12871 set endnetent d_endnent
12872 eval $inlibc
12873
12874 : see if endnetent_r exists
12875 set endnetent_r d_endnetent_r
12876 eval $inlibc
12877 case "$d_endnetent_r" in
12878 "$define")
12879         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
12880         case "$d_endnetent_r_proto:$usethreads" in
12881         ":define")      d_endnetent_r_proto=define
12882                 set d_endnetent_r_proto endnetent_r $hdrs
12883                 eval $hasproto ;;
12884         *)      ;;
12885         esac
12886         case "$d_endnetent_r_proto" in
12887         define)
12888         case "$endnetent_r_proto" in
12889         ''|0) try='int endnetent_r(struct netent_data*);'
12890         ./protochk "$extern_C $try" $hdrs && endnetent_r_proto=I_D ;;
12891         esac
12892         case "$endnetent_r_proto" in
12893         ''|0) try='void endnetent_r(struct netent_data*);'
12894         ./protochk "$extern_C $try" $hdrs && endnetent_r_proto=V_D ;;
12895         esac
12896         case "$endnetent_r_proto" in
12897         ''|0)   d_endnetent_r=undef
12898                 endnetent_r_proto=0
12899                 echo "Disabling endnetent_r, cannot determine prototype." >&4 ;;
12900         * )     case "$endnetent_r_proto" in
12901                 REENTRANT_PROTO*) ;;
12902                 *) endnetent_r_proto="REENTRANT_PROTO_$endnetent_r_proto" ;;
12903                 esac
12904                 echo "Prototype: $try" ;;
12905         esac
12906         ;;
12907         *)      case "$usethreads" in
12908                 define) echo "endnetent_r has no prototype, not using it." >&4 ;;
12909                 esac
12910                 d_endnetent_r=undef
12911                 endnetent_r_proto=0
12912                 ;;
12913         esac
12914         ;;
12915 *)      endnetent_r_proto=0
12916         ;;
12917 esac
12918
12919 : see if endprotoent exists
12920 set endprotoent d_endpent
12921 eval $inlibc
12922
12923 : see if endprotoent_r exists
12924 set endprotoent_r d_endprotoent_r
12925 eval $inlibc
12926 case "$d_endprotoent_r" in
12927 "$define")
12928         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
12929         case "$d_endprotoent_r_proto:$usethreads" in
12930         ":define")      d_endprotoent_r_proto=define
12931                 set d_endprotoent_r_proto endprotoent_r $hdrs
12932                 eval $hasproto ;;
12933         *)      ;;
12934         esac
12935         case "$d_endprotoent_r_proto" in
12936         define)
12937         case "$endprotoent_r_proto" in
12938         ''|0) try='int endprotoent_r(struct protoent_data*);'
12939         ./protochk "$extern_C $try" $hdrs && endprotoent_r_proto=I_D ;;
12940         esac
12941         case "$endprotoent_r_proto" in
12942         ''|0) try='void endprotoent_r(struct protoent_data*);'
12943         ./protochk "$extern_C $try" $hdrs && endprotoent_r_proto=V_D ;;
12944         esac
12945         case "$endprotoent_r_proto" in
12946         ''|0)   d_endprotoent_r=undef
12947                 endprotoent_r_proto=0
12948                 echo "Disabling endprotoent_r, cannot determine prototype." >&4 ;;
12949         * )     case "$endprotoent_r_proto" in
12950                 REENTRANT_PROTO*) ;;
12951                 *) endprotoent_r_proto="REENTRANT_PROTO_$endprotoent_r_proto" ;;
12952                 esac
12953                 echo "Prototype: $try" ;;
12954         esac
12955         ;;
12956         *)      case "$usethreads" in
12957                 define) echo "endprotoent_r has no prototype, not using it." >&4 ;;
12958                 esac
12959                 d_endprotoent_r=undef
12960                 endprotoent_r_proto=0
12961                 ;;
12962         esac
12963         ;;
12964 *)      endprotoent_r_proto=0
12965         ;;
12966 esac
12967
12968 : see if endpwent exists
12969 set endpwent d_endpwent
12970 eval $inlibc
12971
12972 : see if this is a pwd.h system
12973 set pwd.h i_pwd
12974 eval $inhdr
12975
12976 case "$i_pwd" in
12977 $define)
12978         xxx=`./findhdr pwd.h`
12979         $cppstdin $cppflags $cppminus < $xxx >$$.h
12980
12981         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
12982                 val="$define"
12983         else
12984                 val="$undef"
12985         fi
12986         set d_pwquota
12987         eval $setvar
12988
12989         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
12990                 val="$define"
12991         else
12992                 val="$undef"
12993         fi
12994         set d_pwage
12995         eval $setvar
12996
12997         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
12998                 val="$define"
12999         else
13000                 val="$undef"
13001         fi
13002         set d_pwchange
13003         eval $setvar
13004
13005         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
13006                 val="$define"
13007         else
13008                 val="$undef"
13009         fi
13010         set d_pwclass
13011         eval $setvar
13012
13013         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
13014                 val="$define"
13015         else
13016                 val="$undef"
13017         fi
13018         set d_pwexpire
13019         eval $setvar
13020
13021         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
13022                 val="$define"
13023         else
13024                 val="$undef"
13025         fi
13026         set d_pwcomment
13027         eval $setvar
13028
13029         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
13030                 val="$define"
13031         else
13032                 val="$undef"
13033         fi
13034         set d_pwgecos
13035         eval $setvar
13036
13037         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
13038                 val="$define"
13039         else
13040                 val="$undef"
13041         fi
13042         set d_pwpasswd
13043         eval $setvar
13044
13045         $rm -f $$.h
13046         ;;
13047 *)
13048         val="$undef";
13049         set d_pwquota; eval $setvar
13050         set d_pwage; eval $setvar
13051         set d_pwchange; eval $setvar
13052         set d_pwclass; eval $setvar
13053         set d_pwexpire; eval $setvar
13054         set d_pwcomment; eval $setvar
13055         set d_pwgecos; eval $setvar
13056         set d_pwpasswd; eval $setvar
13057         ;;
13058 esac
13059
13060 : see if endpwent_r exists
13061 set endpwent_r d_endpwent_r
13062 eval $inlibc
13063 case "$d_endpwent_r" in
13064 "$define")
13065         hdrs="$i_systypes sys/types.h define stdio.h $i_pwd pwd.h"
13066         case "$d_endpwent_r_proto:$usethreads" in
13067         ":define")      d_endpwent_r_proto=define
13068                 set d_endpwent_r_proto endpwent_r $hdrs
13069                 eval $hasproto ;;
13070         *)      ;;
13071         esac
13072         case "$d_endpwent_r_proto" in
13073         define)
13074         case "$endpwent_r_proto" in
13075         ''|0) try='int endpwent_r(FILE**);'
13076         ./protochk "$extern_C $try" $hdrs && endpwent_r_proto=I_H ;;
13077         esac
13078         case "$endpwent_r_proto" in
13079         ''|0) try='void endpwent_r(FILE**);'
13080         ./protochk "$extern_C $try" $hdrs && endpwent_r_proto=V_H ;;
13081         esac
13082         case "$endpwent_r_proto" in
13083         ''|0)   d_endpwent_r=undef
13084                 endpwent_r_proto=0
13085                 echo "Disabling endpwent_r, cannot determine prototype." >&4 ;;
13086         * )     case "$endpwent_r_proto" in
13087                 REENTRANT_PROTO*) ;;
13088                 *) endpwent_r_proto="REENTRANT_PROTO_$endpwent_r_proto" ;;
13089                 esac
13090                 echo "Prototype: $try" ;;
13091         esac
13092         ;;
13093         *)      case "$usethreads" in
13094                 define) echo "endpwent_r has no prototype, not using it." >&4 ;;
13095                 esac
13096                 d_endpwent_r=undef
13097                 endpwent_r_proto=0
13098                 ;;
13099         esac
13100         ;;
13101 *)      endpwent_r_proto=0
13102         ;;
13103 esac
13104
13105 : see if endservent exists
13106 set endservent d_endsent
13107 eval $inlibc
13108
13109 : see if endservent_r exists
13110 set endservent_r d_endservent_r
13111 eval $inlibc
13112 case "$d_endservent_r" in
13113 "$define")
13114         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
13115         case "$d_endservent_r_proto:$usethreads" in
13116         ":define")      d_endservent_r_proto=define
13117                 set d_endservent_r_proto endservent_r $hdrs
13118                 eval $hasproto ;;
13119         *)      ;;
13120         esac
13121         case "$d_endservent_r_proto" in
13122         define)
13123         case "$endservent_r_proto" in
13124         ''|0) try='int endservent_r(struct servent_data*);'
13125         ./protochk "$extern_C $try" $hdrs && endservent_r_proto=I_D ;;
13126         esac
13127         case "$endservent_r_proto" in
13128         ''|0) try='void endservent_r(struct servent_data*);'
13129         ./protochk "$extern_C $try" $hdrs && endservent_r_proto=V_D ;;
13130         esac
13131         case "$endservent_r_proto" in
13132         ''|0)   d_endservent_r=undef
13133                 endservent_r_proto=0
13134                 echo "Disabling endservent_r, cannot determine prototype." >&4 ;;
13135         * )     case "$endservent_r_proto" in
13136                 REENTRANT_PROTO*) ;;
13137                 *) endservent_r_proto="REENTRANT_PROTO_$endservent_r_proto" ;;
13138                 esac
13139                 echo "Prototype: $try" ;;
13140         esac
13141         ;;
13142         *)      case "$usethreads" in
13143                 define) echo "endservent_r has no prototype, not using it." >&4 ;;
13144                 esac
13145                 d_endservent_r=undef
13146                 endservent_r_proto=0
13147                 ;;
13148         esac
13149         ;;
13150 *)      endservent_r_proto=0
13151         ;;
13152 esac
13153
13154 : Locate the flags for 'open()'
13155 echo " "
13156 $cat >try.c <<EOCP
13157 #include <sys/types.h>
13158 #ifdef I_FCNTL
13159 #include <fcntl.h>
13160 #endif
13161 #ifdef I_SYS_FILE
13162 #include <sys/file.h>
13163 #endif
13164 #$i_stdlib I_STDLIB
13165 #ifdef I_STDLIB
13166 #include <stdlib.h>
13167 #endif
13168 int main() {
13169         if(O_RDONLY);
13170 #ifdef O_TRUNC
13171         exit(0);
13172 #else
13173         exit(1);
13174 #endif
13175 }
13176 EOCP
13177 : check sys/file.h first to get FREAD on Sun
13178 if $test `./findhdr sys/file.h` && \
13179                 set try -DI_SYS_FILE && eval $compile; then
13180         h_sysfile=true;
13181         echo "<sys/file.h> defines the O_* constants..." >&4
13182         if $run ./try; then
13183                 echo "and you have the 3 argument form of open()." >&4
13184                 val="$define"
13185         else
13186                 echo "but not the 3 argument form of open().  Oh, well." >&4
13187                 val="$undef"
13188         fi
13189 elif $test `./findhdr fcntl.h` && \
13190                 set try -DI_FCNTL && eval $compile; then
13191         h_fcntl=true;
13192         echo "<fcntl.h> defines the O_* constants..." >&4
13193         if $run ./try; then
13194                 echo "and you have the 3 argument form of open()." >&4
13195                 val="$define"
13196         else
13197                 echo "but not the 3 argument form of open().  Oh, well." >&4
13198                 val="$undef"
13199         fi
13200 else
13201         val="$undef"
13202         echo "I can't find the O_* constant definitions!  You got problems." >&4
13203 fi
13204 set d_open3
13205 eval $setvar
13206 $rm_try
13207
13208 : see if this is a sys/file.h system
13209 val=''
13210 set sys/file.h val
13211 eval $inhdr
13212
13213 : do we need to include sys/file.h ?
13214 case "$val" in
13215 "$define")
13216         echo " "
13217         if $h_sysfile; then
13218                 val="$define"
13219                 echo "We'll be including <sys/file.h>." >&4
13220         else
13221                 val="$undef"
13222                 echo "We won't be including <sys/file.h>." >&4
13223         fi
13224         ;;
13225 *)
13226         h_sysfile=false
13227         ;;
13228 esac
13229 set i_sysfile
13230 eval $setvar
13231
13232 : see if fcntl.h is there
13233 val=''
13234 set fcntl.h val
13235 eval $inhdr
13236
13237 : see if we can include fcntl.h
13238 case "$val" in
13239 "$define")
13240         echo " "
13241         if $h_fcntl; then
13242                 val="$define"
13243                 echo "We'll be including <fcntl.h>." >&4
13244         else
13245                 val="$undef"
13246                 if $h_sysfile; then
13247         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13248                 else
13249                         echo "We won't be including <fcntl.h>." >&4
13250                 fi
13251         fi
13252         ;;
13253 *)
13254         h_fcntl=false
13255         val="$undef"
13256         ;;
13257 esac
13258 set i_fcntl
13259 eval $setvar
13260
13261 : see if fork exists
13262 set fork d_fork
13263 eval $inlibc
13264
13265 : see if pipe exists
13266 set pipe d_pipe
13267 eval $inlibc
13268
13269 : check for non-blocking I/O stuff
13270 case "$h_sysfile" in
13271 true) echo "#include <sys/file.h>" > head.c;;
13272 *)
13273        case "$h_fcntl" in
13274        true) echo "#include <fcntl.h>" > head.c;;
13275        *) echo "#include <sys/fcntl.h>" > head.c;;
13276        esac
13277        ;;
13278 esac
13279 echo " "
13280 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
13281 case "$o_nonblock" in
13282 '')
13283         $cat head.c > try.c
13284         $cat >>try.c <<EOCP
13285 #include <stdio.h>
13286 #$i_stdlib I_STDLIB
13287 #ifdef I_STDLIB
13288 #include <stdlib.h>
13289 #endif
13290 #$i_fcntl I_FCNTL
13291 #ifdef I_FCNTL
13292 #include <fcntl.h>
13293 #endif
13294 int main() {
13295 #ifdef O_NONBLOCK
13296         printf("O_NONBLOCK\n");
13297         exit(0);
13298 #endif
13299 #ifdef O_NDELAY
13300         printf("O_NDELAY\n");
13301         exit(0);
13302 #endif
13303 #ifdef FNDELAY
13304         printf("FNDELAY\n");
13305         exit(0);
13306 #endif
13307         exit(0);
13308 }
13309 EOCP
13310         set try
13311         if eval $compile_ok; then
13312                 o_nonblock=`$run ./try`
13313                 case "$o_nonblock" in
13314                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
13315                 *) echo "Seems like we can use $o_nonblock.";;
13316                 esac
13317         else
13318                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
13319         fi
13320         ;;
13321 *) echo "Using $hint value $o_nonblock.";;
13322 esac
13323 $rm_try
13324
13325 echo " "
13326 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
13327 case "$eagain" in
13328 '')
13329         case "$d_fork:$d_pipe:$d_alarm" in
13330         define:define)
13331         $cat head.c > try.c
13332         $cat >>try.c <<EOCP
13333 #include <errno.h>
13334 #include <sys/types.h>
13335 #include <signal.h>
13336 #include <stdio.h>
13337 #$i_stdlib I_STDLIB
13338 #ifdef I_STDLIB
13339 #include <stdlib.h>
13340 #endif
13341 #$i_fcntl I_FCNTL
13342 #ifdef I_FCNTL
13343 #include <fcntl.h>
13344 #endif
13345 #define MY_O_NONBLOCK $o_nonblock
13346 #ifndef errno  /* XXX need better Configure test */
13347 extern int errno;
13348 #endif
13349 #$i_unistd I_UNISTD
13350 #ifdef I_UNISTD
13351 #include <unistd.h>
13352 #endif
13353 #$i_string I_STRING
13354 #ifdef I_STRING
13355 #include <string.h>
13356 #else
13357 #include <strings.h>
13358 #endif
13359 $signal_t blech(int x) { exit(3); }
13360 EOCP
13361         $cat >> try.c <<'EOCP'
13362 int main()
13363 {
13364         int pd[2];
13365         int pu[2];
13366         char buf[1];
13367         char string[100];
13368         int ret;
13369
13370         ret = pipe(pd); /* Down: child -> parent */
13371         if (ret != 0)
13372                 exit(3);
13373         ret = pipe(pu); /* Up: parent -> child */
13374         if (ret != 0)
13375                 exit(3);
13376         if (0 != fork()) {
13377                 close(pd[1]);   /* Parent reads from pd[0] */
13378                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
13379 #ifdef F_SETFL
13380                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
13381                         exit(1);
13382 #else
13383                 exit(4);
13384 #endif
13385                 signal(SIGALRM, blech);
13386                 alarm(5);
13387                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
13388                         exit(2);
13389                 sprintf(string, "%d\n", ret);
13390                 ret = write(2, string, strlen(string));
13391                 if (ret != strlen(string))
13392                         exit(3);
13393                 alarm(0);
13394 #ifdef EAGAIN
13395                 if (errno == EAGAIN) {
13396                         printf("EAGAIN\n");
13397                         goto ok;
13398                 }
13399 #endif
13400 #ifdef EWOULDBLOCK
13401                 if (errno == EWOULDBLOCK)
13402                         printf("EWOULDBLOCK\n");
13403 #endif
13404         ok:
13405                 ret = write(pu[1], buf, 1);     /* Unblocks child, tell it to close our pipe */
13406                 if (ret != 1)
13407                         exit(3);
13408                 sleep(2);                               /* Give it time to close our pipe */
13409                 alarm(5);
13410                 ret = read(pd[0], buf, 1);      /* Should read EOF */
13411                 alarm(0);
13412                 sprintf(string, "%d\n", ret);
13413                 ret = write(4, string, strlen(string));
13414                 if (ret != strlen(string))
13415                         exit(3);
13416                 exit(0);
13417         }
13418
13419         close(pd[0]);                   /* We write to pd[1] */
13420         close(pu[1]);                   /* We read from pu[0] */
13421         ret = read(pu[0], buf, 1);      /* Wait for parent to signal us we may continue */
13422         if (ret != 1)
13423                 exit(3);
13424         close(pd[1]);                   /* Pipe pd is now fully closed! */
13425         exit(0);                                /* Bye bye, thank you for playing! */
13426 }
13427 EOCP
13428         set try
13429         if eval $compile_ok; then
13430                 echo "$startsh" >mtry
13431                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
13432                 chmod +x mtry
13433                 $run ./mtry >/dev/null 2>&1
13434                 case $? in
13435                 0) eagain=`$cat try.out`;;
13436                 1) echo "Could not perform non-blocking setting!";;
13437                 2) echo "I did a successful read() for something that was not there!";;
13438                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
13439                 4) echo "Could not find F_SETFL!";;
13440                 *) echo "Something terribly wrong happened during testing.";;
13441                 esac
13442                 rd_nodata=`$cat try.ret`
13443                 echo "A read() system call with no data present returns $rd_nodata."
13444                 case "$rd_nodata" in
13445                 0|-1) ;;
13446                 *)
13447                         echo "(That's peculiar, fixing that to be -1.)"
13448                         rd_nodata=-1
13449                         ;;
13450                 esac
13451                 case "$eagain" in
13452                 '')
13453                         echo "Forcing errno EAGAIN on read() with no data available."
13454                         eagain=EAGAIN
13455                         ;;
13456                 *)
13457                         echo "Your read() sets errno to $eagain when no data is available."
13458                         ;;
13459                 esac
13460                 status=`$cat try.err`
13461                 case "$status" in
13462                 0) echo "And it correctly returns 0 to signal EOF.";;
13463                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
13464                 *) echo "However, your read() returns '$status' on EOF??";;
13465                 esac
13466                 val="$define"
13467                 if test "$status" = "$rd_nodata"; then
13468                         echo "WARNING: you can't distinguish between EOF and no data!"
13469                         val="$undef"
13470                 fi
13471         else
13472                 echo "I can't compile the test program--assuming errno EAGAIN will do."
13473                 eagain=EAGAIN
13474         fi
13475         ;;
13476         *)      echo "Can't figure out how to test this--assuming errno EAGAIN will do."
13477                 eagain=EAGAIN
13478                 val="$define"
13479                 ;;
13480         esac
13481         set d_eofnblk
13482         eval $setvar
13483         ;;
13484 *)
13485         echo "Using $hint value $eagain."
13486         echo "Your read() returns $rd_nodata when no data is present."
13487         case "$d_eofnblk" in
13488         "$define") echo "And you can see EOF because read() returns 0.";;
13489         "$undef") echo "But you can't see EOF status from read() returned value.";;
13490         *)
13491                 echo "(Assuming you can't see EOF status from read anyway.)"
13492                 d_eofnblk=$undef
13493                 ;;
13494         esac
13495         ;;
13496 esac
13497 $rm_try head.c mtry
13498
13499 : see if erf exists
13500 set erf d_erf
13501 eval $inlibc
13502
13503 : see if erfc exists
13504 set erfc d_erfc
13505 eval $inlibc
13506
13507 : see if exp2 exists
13508 set exp2 d_exp2
13509 eval $inlibc
13510
13511 : see if expm1 exists
13512 set expm1 d_expm1
13513 eval $inlibc
13514
13515 : see if _ptr and _cnt from stdio act std
13516 echo " "
13517
13518 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13519         echo "(Looks like you have stdio.h from BSD.)"
13520         case "$stdio_ptr" in
13521         '') stdio_ptr='((fp)->_p)'
13522                 ptr_lval=$define
13523                 ;;
13524         *)      ptr_lval=$d_stdio_ptr_lval;;
13525         esac
13526         case "$stdio_cnt" in
13527         '') stdio_cnt='((fp)->_r)'
13528                 cnt_lval=$define
13529                 ;;
13530         *)      cnt_lval=$d_stdio_cnt_lval;;
13531         esac
13532         case "$stdio_base" in
13533         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
13534         esac
13535         case "$stdio_bufsiz" in
13536         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
13537         esac
13538 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
13539         echo "(Looks like you have stdio.h from Linux.)"
13540         case "$stdio_ptr" in
13541         '') stdio_ptr='((fp)->_IO_read_ptr)'
13542                 ptr_lval=$define
13543                 ;;
13544         *)      ptr_lval=$d_stdio_ptr_lval;;
13545         esac
13546         case "$stdio_cnt" in
13547         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
13548                 cnt_lval=$undef
13549                 ;;
13550         *)      cnt_lval=$d_stdio_cnt_lval;;
13551         esac
13552         case "$stdio_base" in
13553         '') stdio_base='((fp)->_IO_read_base)';;
13554         esac
13555         case "$stdio_bufsiz" in
13556         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
13557         esac
13558 else
13559         case "$stdio_ptr" in
13560         '') stdio_ptr='((fp)->_ptr)'
13561                 ptr_lval=$define
13562                 ;;
13563         *)      ptr_lval=$d_stdio_ptr_lval;;
13564         esac
13565         case "$stdio_cnt" in
13566         '') stdio_cnt='((fp)->_cnt)'
13567                 cnt_lval=$define
13568                 ;;
13569         *)      cnt_lval=$d_stdio_cnt_lval;;
13570         esac
13571         case "$stdio_base" in
13572         '') stdio_base='((fp)->_base)';;
13573         esac
13574         case "$stdio_bufsiz" in
13575         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
13576         esac
13577 fi
13578
13579 : test whether _ptr and _cnt really work
13580 echo "Checking how std your stdio is..." >&4
13581 $cat >try.c <<EOP
13582 #include <stdio.h>
13583 #$i_stdlib I_STDLIB
13584 #ifdef I_STDLIB
13585 #include <stdlib.h>
13586 #endif
13587 #define FILE_ptr(fp)    $stdio_ptr
13588 #define FILE_cnt(fp)    $stdio_cnt
13589 int main() {
13590         FILE *fp = fopen("try.c", "r");
13591         char c = getc(fp);
13592         if (
13593                 18 <= FILE_cnt(fp) &&
13594                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
13595         )
13596                 exit(0);
13597         exit(1);
13598 }
13599 EOP
13600 val="$undef"
13601 set try
13602 if eval $compile && $to try.c; then
13603         if $run ./try; then
13604                 echo "Your stdio acts pretty std."
13605                 val="$define"
13606         else
13607                 echo "Your stdio isn't very std."
13608         fi
13609 else
13610         echo "Your stdio doesn't appear very std."
13611 fi
13612 $rm_try
13613
13614 # glibc 2.2.90 and above apparently change stdio streams so Perl's
13615 # direct buffer manipulation no longer works.  The Configure tests
13616 # should be changed to correctly detect this, but until then,
13617 # the following check should at least let perl compile and run.
13618 # (This quick fix should be updated before 5.8.1.)
13619 # To be defensive, reject all unknown versions, and all versions  > 2.2.9.
13620 # A. Dougherty, June 3, 2002.
13621 case "$d_gnulibc" in
13622 $define)
13623         case "$gnulibc_version" in
13624         2.[01]*)  ;;
13625         2.2) ;;
13626         2.2.[0-9]) ;;
13627         *)  echo "But I will not snoop inside glibc $gnulibc_version stdio buffers."
13628                 val="$undef"
13629                 ;;
13630         esac
13631         ;;
13632 esac
13633 set d_stdstdio
13634 eval $setvar
13635
13636 : Can _ptr be used as an lvalue?
13637 case "$d_stdstdio$ptr_lval" in
13638 $define$define) val=$define ;;
13639 *) val=$undef ;;
13640 esac
13641 set d_stdio_ptr_lval
13642 eval $setvar
13643
13644 : Can _cnt be used as an lvalue?
13645 case "$d_stdstdio$cnt_lval" in
13646 $define$define) val=$define ;;
13647 *) val=$undef ;;
13648 esac
13649 set d_stdio_cnt_lval
13650 eval $setvar
13651
13652
13653 : test whether setting _ptr sets _cnt as a side effect
13654 d_stdio_ptr_lval_sets_cnt="$undef"
13655 d_stdio_ptr_lval_nochange_cnt="$undef"
13656 case "$d_stdio_ptr_lval$d_stdstdio" in
13657 $define$define)
13658         echo "Checking to see what happens if we set the stdio ptr..." >&4
13659 $cat >try.c <<EOP
13660 #include <stdio.h>
13661 /* Can we scream? */
13662 /* Eat dust sed :-) */
13663 /* In the buffer space, no one can hear you scream. */
13664 #$i_stdlib I_STDLIB
13665 #ifdef I_STDLIB
13666 #include <stdlib.h>
13667 #endif
13668 #define FILE_ptr(fp)    $stdio_ptr
13669 #define FILE_cnt(fp)    $stdio_cnt
13670 #include <sys/types.h>
13671 int main() {
13672         FILE *fp = fopen("try.c", "r");
13673         int c;
13674         char *ptr;
13675         size_t cnt;
13676         if (!fp) {
13677             puts("Fail even to read");
13678             exit(1);
13679         }
13680         c = getc(fp); /* Read away the first # */
13681         if (c == EOF) {
13682             puts("Fail even to read");
13683             exit(1);
13684         }
13685         if (!(
13686                 18 <= FILE_cnt(fp) &&
13687                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
13688         )) {
13689                 puts("Fail even to read");
13690                 exit (1);
13691         }
13692         ptr = (char*) FILE_ptr(fp);
13693         cnt = (size_t)FILE_cnt(fp);
13694
13695         FILE_ptr(fp) += 42;
13696
13697         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
13698                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
13699                 exit (1);
13700         }
13701         if (FILE_cnt(fp) <= 20) {
13702                 printf ("Fail (<20 chars to test)");
13703                 exit (1);
13704         }
13705         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
13706                 puts("Fail compare");
13707                 exit (1);
13708         }
13709         if (cnt == FILE_cnt(fp)) {
13710                 puts("Pass_unchanged");
13711                 exit (0);
13712         }
13713         if (FILE_cnt(fp) == (cnt - 42)) {
13714                 puts("Pass_changed");
13715                 exit (0);
13716         }
13717         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
13718         return 1;
13719
13720 }
13721 EOP
13722         set try
13723         if eval $compile && $to try.c; then
13724                 case `$run ./try` in
13725                 Pass_changed)
13726                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
13727                         d_stdio_ptr_lval_sets_cnt="$define" ;;
13728                 Pass_unchanged)
13729                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
13730                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
13731                 Fail*)
13732                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
13733                 *)
13734                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
13735         esac
13736         else
13737                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
13738         fi
13739         $rm_try
13740         ;;
13741 esac
13742
13743 : see if _base is also standard
13744 val="$undef"
13745 case "$d_stdstdio" in
13746 $define)
13747         $cat >try.c <<EOP
13748 #include <stdio.h>
13749 #$i_stdlib I_STDLIB
13750 #ifdef I_STDLIB
13751 #include <stdlib.h>
13752 #endif
13753 #define FILE_base(fp)   $stdio_base
13754 #define FILE_bufsiz(fp) $stdio_bufsiz
13755 int main() {
13756         FILE *fp = fopen("try.c", "r");
13757         char c = getc(fp);
13758         if (
13759                 19 <= FILE_bufsiz(fp) &&
13760                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
13761         )
13762                 exit(0);
13763         exit(1);
13764 }
13765 EOP
13766         set try
13767         if eval $compile && $to try.c; then
13768                 if $run ./try; then
13769                         echo "And its _base field acts std."
13770                         val="$define"
13771                 else
13772                         echo "But its _base field isn't std."
13773                 fi
13774         else
13775                 echo "However, it seems to be lacking the _base field."
13776         fi
13777         $rm_try
13778         ;;
13779 esac
13780 set d_stdiobase
13781 eval $setvar
13782
13783 : see if fast_stdio exists
13784 val="$undef"
13785 case "$d_stdstdio:$d_stdio_ptr_lval" in
13786 "$define:$define")
13787         case "$d_stdio_cnt_lval$d_stdio_ptr_lval_sets_cnt" in
13788         *$define*)
13789                 echo "You seem to have 'fast stdio' to directly manipulate the stdio buffers." >& 4
13790                 val="$define"
13791                 ;;
13792         esac
13793         ;;
13794 esac
13795 set d_faststdio
13796 eval $setvar
13797
13798
13799
13800 : see if fchdir exists
13801 set fchdir d_fchdir
13802 eval $inlibc
13803
13804 : see if fchmod exists
13805 set fchmod d_fchmod
13806 eval $inlibc
13807
13808 : see if fchown exists
13809 set fchown d_fchown
13810 eval $inlibc
13811
13812 : see if this is an fcntl system
13813 set fcntl d_fcntl
13814 eval $inlibc
13815
13816 : See if fcntl-based locking works.
13817 echo " "
13818 $cat >try.c <<EOCP
13819 #$i_stdlib I_STDLIB
13820 #ifdef I_STDLIB
13821 #include <stdlib.h>
13822 #endif
13823 #include <unistd.h>
13824 #include <fcntl.h>
13825 #include <signal.h>
13826 $signal_t blech(int x) { exit(3); }
13827 int main() {
13828 #if defined(F_SETLK) && defined(F_SETLKW)
13829      struct flock flock;
13830      int retval, fd;
13831      fd = open("try.c", O_RDONLY);
13832      flock.l_type = F_RDLCK;
13833      flock.l_whence = SEEK_SET;
13834      flock.l_start = flock.l_len = 0;
13835      signal(SIGALRM, blech);
13836      alarm(10);
13837      retval = fcntl(fd, F_SETLK, &flock);
13838      close(fd);
13839      (retval < 0 ? exit(2) : exit(0));
13840 #else
13841      exit(2);
13842 #endif
13843 }
13844 EOCP
13845 echo "Checking if fcntl-based file locking works... "
13846 case "$d_fcntl" in
13847 "$define")
13848         set try
13849         if eval $compile_ok; then
13850                 if $run ./try; then
13851                         echo "Yes, it seems to work."
13852                         val="$define"
13853                 else
13854                         echo "Nope, it didn't work."
13855                         val="$undef"
13856                         case "$?" in
13857                         3) $cat >&4 <<EOM
13858 ***
13859 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
13860 *** This is (almost) impossible.
13861 *** If your NFS lock daemons are not feeling well, something like
13862 *** this may happen, please investigate.  Cannot continue, aborting.
13863 ***
13864 EOM
13865                                 exit 1
13866                                 ;;
13867                         esac
13868                 fi
13869         else
13870                 echo "I'm unable to compile the test program, so I'll assume not."
13871                 val="$undef"
13872         fi
13873         ;;
13874 *) val="$undef";
13875         echo "Nope, since you don't even have fcntl()."
13876         ;;
13877 esac
13878 set d_fcntl_can_lock
13879 eval $setvar
13880 $rm_try
13881
13882 : check for fd_set items
13883 $cat <<EOM
13884
13885 Checking to see how well your C compiler handles fd_set and friends ...
13886 EOM
13887 $cat >try.c <<EOCP
13888 #$i_stdlib I_STDLIB
13889 #ifdef I_STDLIB
13890 #include <stdlib.h>
13891 #endif
13892 #$i_systime I_SYS_TIME
13893 #$i_sysselct I_SYS_SELECT
13894 #$d_socket HAS_SOCKET
13895 #include <sys/types.h>
13896 #ifdef HAS_SOCKET
13897 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13898 #endif
13899 #ifdef I_SYS_TIME
13900 #include <sys/time.h>
13901 #endif
13902 #ifdef I_SYS_SELECT
13903 #include <sys/select.h>
13904 #endif
13905 int main() {
13906         fd_set fds;
13907
13908 #ifdef TRYBITS
13909         if(fds.fds_bits);
13910 #endif
13911
13912 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
13913         exit(0);
13914 #else
13915         exit(1);
13916 #endif
13917 }
13918 EOCP
13919 set try -DTRYBITS
13920 if eval $compile; then
13921         d_fds_bits="$define"
13922         d_fd_set="$define"
13923         echo "Well, your system knows about the normal fd_set typedef..." >&4
13924         if $run ./try; then
13925                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
13926                 d_fd_macros="$define"
13927         else
13928                 $cat >&4 <<'EOM'
13929 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
13930 EOM
13931                 d_fd_macros="$undef"
13932         fi
13933 else
13934         $cat <<'EOM'
13935 Hmm, your compiler has some difficulty with fd_set.  Checking further...
13936 EOM
13937         set try
13938         if eval $compile; then
13939                 d_fds_bits="$undef"
13940                 d_fd_set="$define"
13941                 echo "Well, your system has some sort of fd_set available..." >&4
13942                 if $run ./try; then
13943                         echo "and you have the normal fd_set macros." >&4
13944                         d_fd_macros="$define"
13945                 else
13946                         $cat <<'EOM'
13947 but not the normal fd_set macros!  Gross!  More work for me...
13948 EOM
13949                         d_fd_macros="$undef"
13950                 fi
13951         else
13952         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
13953                 d_fd_set="$undef"
13954                 d_fds_bits="$undef"
13955                 d_fd_macros="$undef"
13956         fi
13957 fi
13958 $rm_try
13959
13960 : see if fdim exists
13961 set fdim d_fdim
13962 eval $inlibc
13963
13964 : see if fegetround exists
13965 set fegetround d_fegetround
13966 eval $inlibc
13967
13968 : see if fgetpos exists
13969 set fgetpos d_fgetpos
13970 eval $inlibc
13971
13972 : see if finite exists
13973 set finite d_finite
13974 eval $inlibc
13975
13976 : see if finitel exists
13977 set finitel d_finitel
13978 eval $inlibc
13979
13980 : see if flock exists
13981 set flock d_flock
13982 eval $inlibc
13983
13984 : see if prototype for flock is available
13985 echo " "
13986 set d_flockproto flock $i_sysfile sys/file.h
13987 eval $hasproto
13988
13989 : see if fma exists
13990 set fma d_fma
13991 eval $inlibc
13992
13993 : see if fmax exists
13994 set fmax d_fmax
13995 eval $inlibc
13996
13997 : see if fmin exists
13998 set fmin d_fmin
13999 eval $inlibc
14000
14001 : see if fp_class exists
14002 set fp_class d_fp_class
14003 eval $inlibc
14004
14005 : see if this is a math.h system
14006 set math.h i_math
14007 eval $inhdr
14008
14009 : check for fpclassify
14010 echo "Checking to see if you have fpclassify..." >&4
14011 $cat >try.c <<EOCP
14012 #$i_math I_MATH
14013 #ifdef I_MATH
14014 #include <math.h>
14015 #endif
14016 int main() { return fpclassify(1.0) == FP_NORMAL ? 0 : 1; }
14017 EOCP
14018 set try
14019 if eval $compile; then
14020         val="$define"
14021         echo "You have fpclassify."
14022 else
14023         val="$undef"
14024         echo "You do not have fpclassify."
14025 fi
14026 $rm_try
14027 set d_fpclassify
14028 eval $setvar
14029
14030 : see if fp_classify exists
14031 set fp_classify d_fp_classify
14032 eval $inlibc
14033
14034 : see if fp_classl exists
14035 set fp_classl d_fp_classl
14036 eval $inlibc
14037
14038 : see if pathconf exists
14039 set pathconf d_pathconf
14040 eval $inlibc
14041
14042 : see if fpathconf exists
14043 set fpathconf d_fpathconf
14044 eval $inlibc
14045
14046 : see if fpclass exists
14047 set fpclass d_fpclass
14048 eval $inlibc
14049
14050 : see if fpclassl exists
14051 set fpclassl d_fpclassl
14052 eval $inlibc
14053
14054 : see if fpgetround exists
14055 set fpgetround d_fpgetround
14056 eval $inlibc
14057
14058 : check for fpos64_t
14059 echo " "
14060 echo "Checking to see if you have fpos64_t..." >&4
14061 $cat >try.c <<EOCP
14062 #include <stdio.h>
14063 int main() { fpos64_t x = 7; }
14064 EOCP
14065 set try
14066 if eval $compile; then
14067         val="$define"
14068         echo "You have fpos64_t."
14069 else
14070         val="$undef"
14071         echo "You do not have fpos64_t."
14072         case "$fpossize" in
14073         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
14074         esac
14075 fi
14076 $rm_try
14077 set d_fpos64_t
14078 eval $setvar
14079
14080 : see if frexpl exists
14081 set frexpl d_frexpl
14082 eval $inlibc
14083
14084 : see if this is a sys/param system
14085 set sys/param.h i_sysparam
14086 eval $inhdr
14087
14088 : see if this is a sys/mount.h system
14089 set sys/mount.h i_sysmount
14090 eval $inhdr
14091
14092 : Check for fs_data_s
14093 echo " "
14094 echo "Checking to see if your system supports struct fs_data..." >&4
14095 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
14096 eval $hasstruct
14097 case "$d_fs_data_s" in
14098 "$define")      echo "Yes, it does."   ;;
14099 *)              echo "No, it doesn't." ;;
14100 esac
14101
14102 : see if fseeko exists
14103 set fseeko d_fseeko
14104 eval $inlibc
14105 case "$longsize" in
14106 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
14107 esac
14108
14109 : see if fsetpos exists
14110 set fsetpos d_fsetpos
14111 eval $inlibc
14112
14113 : see if fstatfs exists
14114 set fstatfs d_fstatfs
14115 eval $inlibc
14116
14117 : see if statvfs exists
14118 set statvfs d_statvfs
14119 eval $inlibc
14120
14121 : see if fstatvfs exists
14122 set fstatvfs d_fstatvfs
14123 eval $inlibc
14124
14125
14126 : see if fsync exists
14127 set fsync d_fsync
14128 eval $inlibc
14129
14130 : see if ftello exists
14131 set ftello d_ftello
14132 eval $inlibc
14133 case "$longsize" in
14134 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
14135 esac
14136
14137 : check for a working futimes
14138 d_futimes="$undef"
14139 echo " "
14140 echo "Checking if you have a working futimes()" >&4
14141 $cat >try.c <<EOCP
14142 #include <stdio.h>
14143 #include <sys/time.h>
14144 #include <errno.h>
14145 #include <fcntl.h>
14146
14147 int main ()
14148 {
14149     int fd, rv;
14150     fd = open ("try.c", O_RDWR);
14151     if (-1 == fd) exit (1);
14152     rv = futimes (fd, NULL);
14153     exit (rv == -1 ? errno : 0);
14154 }
14155 EOCP
14156 set try
14157 if eval $compile; then
14158     `$run ./try`
14159     rc=$?
14160     case "$rc" in
14161         0)  echo "Yes, you have" >&4
14162             d_futimes="$define"
14163             ;;
14164         *)  echo "No, you have futimes, but it isn't working ($rc) (probably harmless)" >&4
14165             ;;
14166     esac
14167 else
14168     echo "No, it does not (probably harmless)" >&4
14169 fi
14170 $rm_try
14171
14172 : see if ndbm.h is available
14173 set ndbm.h i_ndbm
14174 eval $inhdr
14175 : Compatibility location for RedHat 7.1
14176 set gdbm/ndbm.h i_gdbmndbm
14177 eval $inhdr
14178 : Compatibility location for Debian 4.0
14179 set gdbm-ndbm.h i_gdbm_ndbm
14180 eval $inhdr
14181
14182 val="$undef"
14183 if $test "$i_ndbm" = "$define" -o "$i_gdbmndbm" = "$define" -o "$i_gdbm_ndbm" = "$define"; then
14184         : see if dbm_open exists
14185         set dbm_open d_dbm_open
14186         eval $inlibc
14187         case "$d_dbm_open" in
14188         $undef)
14189                 i_ndbm="$undef"
14190                 i_gdbmndbm="$undef"
14191                 i_gdbm_ndbm="$undef"
14192                 echo "We won't be including <ndbm.h>"
14193                 val="$undef"
14194                 ;;
14195         *) val="$define"
14196            ;;
14197         esac
14198 fi
14199 set d_ndbm
14200 eval $setvar
14201
14202 ndbm_hdr_protochk='name=$1; hdr=$2;
14203 eval "ihdr=\$""i_$name";
14204 val="$undef";
14205 if $test "$ihdr" = "$define"; then
14206         $echo "Checking if your <$hdr> uses prototypes..." >&4;
14207         case "$d_cplusplus" in
14208         $define) ./protochk "$extern_C void dbm_close(DBM *);" literal "extern \"C\" {" $ihdr $hdr literal "}" && val="$define" ;;
14209         *) ./protochk "$extern_C void dbm_close(int, int);" $ihdr $hdr || val="$define" ;;
14210         esac;
14211         case "$val" in
14212         $define) $echo "Your <$hdr> seems to have prototypes";;
14213         *) $echo "Your <$hdr> does not seem to have prototypes";;
14214         esac;
14215 fi;
14216 set "d_${name}_h_uses_prototypes";
14217 eval $setvar'
14218
14219 set ndbm ndbm.h
14220 eval $ndbm_hdr_protochk
14221 set gdbmndbm gdbm/ndbm.h
14222 eval $ndbm_hdr_protochk
14223 set gdbm_ndbm gdbm-ndbm.h
14224 eval $ndbm_hdr_protochk
14225
14226 : see if getaddrinfo exists
14227 set getaddrinfo d_getaddrinfo
14228 eval $inlibc
14229
14230 : see if getcwd exists
14231 set getcwd d_getcwd
14232 eval $inlibc
14233
14234 : see if getespwnam exists
14235 set getespwnam d_getespwnam
14236 eval $inlibc
14237
14238 : see if getfsstat exists
14239 set getfsstat d_getfsstat
14240 eval $inlibc
14241
14242 : see if getgrent exists
14243 set getgrent d_getgrent
14244 eval $inlibc
14245
14246 : see if getgrent_r exists
14247 set getgrent_r d_getgrent_r
14248 eval $inlibc
14249 case "$d_getgrent_r" in
14250 "$define")
14251         hdrs="$i_systypes sys/types.h define stdio.h $i_grp grp.h"
14252         case "$d_getgrent_r_proto:$usethreads" in
14253         ":define")      d_getgrent_r_proto=define
14254                 set d_getgrent_r_proto getgrent_r $hdrs
14255                 eval $hasproto ;;
14256         *)      ;;
14257         esac
14258         case "$d_getgrent_r_proto" in
14259         define)
14260         case "$getgrent_r_proto" in
14261         ''|0) try='int getgrent_r(struct group*, char*, size_t, struct group**);'
14262         ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBWR ;;
14263         esac
14264         case "$getgrent_r_proto" in
14265         ''|0) try='int getgrent_r(struct group*, char*, int, struct group**);'
14266         ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBIR ;;
14267         esac
14268         case "$getgrent_r_proto" in
14269         ''|0) try='struct group* getgrent_r(struct group*, char*, size_t);'
14270         ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=S_SBW ;;
14271         esac
14272         case "$getgrent_r_proto" in
14273         ''|0) try='struct group* getgrent_r(struct group*, char*, int);'
14274         ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=S_SBI ;;
14275         esac
14276         case "$getgrent_r_proto" in
14277         ''|0) try='int getgrent_r(struct group*, char*, int);'
14278         ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBI ;;
14279         esac
14280         case "$getgrent_r_proto" in
14281         ''|0) try='int getgrent_r(struct group*, char*, int, FILE**);'
14282         ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBIH ;;
14283         esac
14284         case "$getgrent_r_proto" in
14285         ''|0)   d_getgrent_r=undef
14286                 getgrent_r_proto=0
14287                 echo "Disabling getgrent_r, cannot determine prototype." >&4 ;;
14288         * )     case "$getgrent_r_proto" in
14289                 REENTRANT_PROTO*) ;;
14290                 *) getgrent_r_proto="REENTRANT_PROTO_$getgrent_r_proto" ;;
14291                 esac
14292                 echo "Prototype: $try" ;;
14293         esac
14294         ;;
14295         *)      case "$usethreads" in
14296                 define) echo "getgrent_r has no prototype, not using it." >&4 ;;
14297                 esac
14298                 d_getgrent_r=undef
14299                 getgrent_r_proto=0
14300                 ;;
14301         esac
14302         ;;
14303 *)      getgrent_r_proto=0
14304         ;;
14305 esac
14306
14307 : see if getgrgid_r exists
14308 set getgrgid_r d_getgrgid_r
14309 eval $inlibc
14310 case "$d_getgrgid_r" in
14311 "$define")
14312         hdrs="$i_systypes sys/types.h define stdio.h $i_grp grp.h"
14313         case "$d_getgrgid_r_proto:$usethreads" in
14314         ":define")      d_getgrgid_r_proto=define
14315                 set d_getgrgid_r_proto getgrgid_r $hdrs
14316                 eval $hasproto ;;
14317         *)      ;;
14318         esac
14319         case "$d_getgrgid_r_proto" in
14320         define)
14321         case "$getgrgid_r_proto" in
14322         ''|0) try='int getgrgid_r(gid_t, struct group*, char*, size_t, struct group**);'
14323         ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=I_TSBWR ;;
14324         esac
14325         case "$getgrgid_r_proto" in
14326         ''|0) try='int getgrgid_r(gid_t, struct group*, char*, int, struct group**);'
14327         ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=I_TSBIR ;;
14328         esac
14329         case "$getgrgid_r_proto" in
14330         ''|0) try='int getgrgid_r(gid_t, struct group*, char*, int);'
14331         ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=I_TSBI ;;
14332         esac
14333         case "$getgrgid_r_proto" in
14334         ''|0) try='struct group* getgrgid_r(gid_t, struct group*, char*, int);'
14335         ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=S_TSBI ;;
14336         esac
14337         case "$getgrgid_r_proto" in
14338         ''|0)   d_getgrgid_r=undef
14339                 getgrgid_r_proto=0
14340                 echo "Disabling getgrgid_r, cannot determine prototype." >&4 ;;
14341         * )     case "$getgrgid_r_proto" in
14342                 REENTRANT_PROTO*) ;;
14343                 *) getgrgid_r_proto="REENTRANT_PROTO_$getgrgid_r_proto" ;;
14344                 esac
14345                 echo "Prototype: $try" ;;
14346         esac
14347         ;;
14348         *)      case "$usethreads" in
14349                 define) echo "getgrgid_r has no prototype, not using it." >&4 ;;
14350                 esac
14351                 d_getgrgid_r=undef
14352                 getgrgid_r_proto=0
14353                 ;;
14354         esac
14355         ;;
14356 *)      getgrgid_r_proto=0
14357         ;;
14358 esac
14359
14360 : see if getgrnam_r exists
14361 set getgrnam_r d_getgrnam_r
14362 eval $inlibc
14363 case "$d_getgrnam_r" in
14364 "$define")
14365         hdrs="$i_systypes sys/types.h define stdio.h $i_grp grp.h"
14366         case "$d_getgrnam_r_proto:$usethreads" in
14367         ":define")      d_getgrnam_r_proto=define
14368                 set d_getgrnam_r_proto getgrnam_r $hdrs
14369                 eval $hasproto ;;
14370         *)      ;;
14371         esac
14372         case "$d_getgrnam_r_proto" in
14373         define)
14374         case "$getgrnam_r_proto" in
14375         ''|0) try='int getgrnam_r(const char*, struct group*, char*, size_t, struct group**);'
14376         ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=I_CSBWR ;;
14377         esac
14378         case "$getgrnam_r_proto" in
14379         ''|0) try='int getgrnam_r(const char*, struct group*, char*, int, struct group**);'
14380         ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=I_CSBIR ;;
14381         esac
14382         case "$getgrnam_r_proto" in
14383         ''|0) try='struct group* getgrnam_r(const char*, char*, int);'
14384         ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=S_CBI ;;
14385         esac
14386         case "$getgrnam_r_proto" in
14387         ''|0) try='int getgrnam_r(const char*, struct group*, char*, int);'
14388         ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=I_CSBI ;;
14389         esac
14390         case "$getgrnam_r_proto" in
14391         ''|0) try='struct group* getgrnam_r(const char*, struct group*, char*, int);'
14392         ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=S_CSBI ;;
14393         esac
14394         case "$getgrnam_r_proto" in
14395         ''|0)   d_getgrnam_r=undef
14396                 getgrnam_r_proto=0
14397                 echo "Disabling getgrnam_r, cannot determine prototype." >&4 ;;
14398         * )     case "$getgrnam_r_proto" in
14399                 REENTRANT_PROTO*) ;;
14400                 *) getgrnam_r_proto="REENTRANT_PROTO_$getgrnam_r_proto" ;;
14401                 esac
14402                 echo "Prototype: $try" ;;
14403         esac
14404         ;;
14405         *)      case "$usethreads" in
14406                 define) echo "getgrnam_r has no prototype, not using it." >&4 ;;
14407                 esac
14408                 d_getgrnam_r=undef
14409                 getgrnam_r_proto=0
14410                 ;;
14411         esac
14412         ;;
14413 *)      getgrnam_r_proto=0
14414         ;;
14415 esac
14416
14417 : see if gethostbyaddr exists
14418 set gethostbyaddr d_gethbyaddr
14419 eval $inlibc
14420
14421 : see if gethostbyname exists
14422 set gethostbyname d_gethbyname
14423 eval $inlibc
14424
14425 : see if gethostent exists
14426 set gethostent d_gethent
14427 eval $inlibc
14428
14429 : see how we will look up host name
14430 echo " "
14431 call=''
14432 if set gethostname val -f d_gethname; eval $csym; $val; then
14433         echo 'gethostname() found.' >&4
14434         d_gethname="$define"
14435         call=gethostname
14436 fi
14437 if set uname val -f d_uname; eval $csym; $val; then
14438         if ./xenix; then
14439                 $cat <<'EOM'
14440 uname() was found, but you're running xenix, and older versions of xenix
14441 have a broken uname(). If you don't really know whether your xenix is old
14442 enough to have a broken system call, use the default answer.
14443
14444 EOM
14445                 dflt=y
14446                 case "$d_uname" in
14447                 "$define") dflt=n;;
14448                 esac
14449                 rp='Is your uname() broken?'
14450                 . ./myread
14451                 case "$ans" in
14452                 n*) d_uname="$define"; call=uname;;
14453                 esac
14454         else
14455                 echo 'uname() found.' >&4
14456                 d_uname="$define"
14457                 case "$call" in
14458                 '') call=uname ;;
14459                 esac
14460         fi
14461 fi
14462 case "$d_gethname" in
14463 '') d_gethname="$undef";;
14464 esac
14465 case "$d_uname" in
14466 '') d_uname="$undef";;
14467 esac
14468 case "$d_uname$d_gethname" in
14469 *define*)
14470         dflt=n
14471         cat <<EOM
14472
14473 Every now and then someone has a $call() that lies about the hostname
14474 but can't be fixed for political or economic reasons.  If you wish, I can
14475 pretend $call() isn't there and maybe compute hostname at run-time
14476 thanks to the '$phostname' command.
14477
14478 EOM
14479         rp="Shall I ignore $call() from now on?"
14480         . ./myread
14481         case "$ans" in
14482         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
14483         esac;;
14484 esac
14485 case "$phostname" in
14486 '') aphostname='';;
14487 *) case "$aphostname" in
14488         /*) ;;
14489         *) set X $phostname
14490                 shift
14491                 file=$1
14492                 shift
14493                 file=`./loc $file $file $pth`
14494                 aphostname=`echo $file $*`
14495                 ;;
14496         esac
14497         ;;
14498 esac
14499 case "$d_uname$d_gethname" in
14500 *define*) ;;
14501 *)
14502         case "$phostname" in
14503         '')
14504                 echo "There will be no way for $package to get your hostname." >&4;;
14505         *)
14506         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
14507                 ;;
14508         esac;;
14509 esac
14510 case "$d_phostname" in
14511 '') d_phostname="$undef";;
14512 esac
14513
14514 : see if gethostbyaddr_r exists
14515 set gethostbyaddr_r d_gethostbyaddr_r
14516 eval $inlibc
14517 case "$d_gethostbyaddr_r" in
14518 "$define")
14519         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
14520         case "$d_gethostbyaddr_r_proto:$usethreads" in
14521         ":define")      d_gethostbyaddr_r_proto=define
14522                 set d_gethostbyaddr_r_proto gethostbyaddr_r $hdrs
14523                 eval $hasproto ;;
14524         *)      ;;
14525         esac
14526         case "$d_gethostbyaddr_r_proto" in
14527         define)
14528         case "$gethostbyaddr_r_proto" in
14529         ''|0) try='int gethostbyaddr_r(const char*, size_t, int, struct hostent*, char*, size_t, struct hostent**, int*);'
14530         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=I_CWISBWRE ;;
14531         esac
14532         case "$gethostbyaddr_r_proto" in
14533         ''|0) try='struct hostent* gethostbyaddr_r(const char*, size_t, int, struct hostent*, char*, size_t, int, int*);'
14534         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=S_CWISBWIE ;;
14535         esac
14536         case "$gethostbyaddr_r_proto" in
14537         ''|0) try='struct hostent* gethostbyaddr_r(const char*, size_t, int, struct hostent*, char*, int, int*);'
14538         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=S_CWISBIE ;;
14539         esac
14540         case "$gethostbyaddr_r_proto" in
14541         ''|0) try='struct hostent* gethostbyaddr_r(const void*, size_t, int, struct hostent*, char*, int, int*);'
14542         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=S_TWISBIE ;;
14543         esac
14544         case "$gethostbyaddr_r_proto" in
14545         ''|0) try='struct hostent* gethostbyaddr_r(const char*, int, int, struct hostent*, char*, int, int*);'
14546         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=S_CIISBIE ;;
14547         esac
14548         case "$gethostbyaddr_r_proto" in
14549         ''|0) try='struct hostent* gethostbyaddr_r(const char*, struct hostent*, char*, int, int*);'
14550         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=S_CSBIE ;;
14551         esac
14552         case "$gethostbyaddr_r_proto" in
14553         ''|0) try='struct hostent* gethostbyaddr_r(const void*, struct hostent*, char*, int, int*);'
14554         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=S_TSBIE ;;
14555         esac
14556         case "$gethostbyaddr_r_proto" in
14557         ''|0) try='int gethostbyaddr_r(const char*, size_t, int, struct hostent*, struct hostent_data*);'
14558         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=I_CWISD ;;
14559         esac
14560         case "$gethostbyaddr_r_proto" in
14561         ''|0) try='int gethostbyaddr_r(const char*, int, int, struct hostent*, struct hostent_data*);'
14562         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=I_CIISD ;;
14563         esac
14564         case "$gethostbyaddr_r_proto" in
14565         ''|0) try='int gethostbyaddr_r(const char*, int, int);'
14566         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=I_CII ;;
14567         esac
14568         case "$gethostbyaddr_r_proto" in
14569         ''|0) try='int gethostbyaddr_r(const void*, socklen_t, int, struct hostent*, char*, size_t, struct hostent**, int*);'
14570         ./protochk "$extern_C $try" $hdrs && gethostbyaddr_r_proto=I_TsISBWRE ;;
14571         esac
14572         case "$gethostbyaddr_r_proto" in
14573         ''|0)   d_gethostbyaddr_r=undef
14574                 gethostbyaddr_r_proto=0
14575                 echo "Disabling gethostbyaddr_r, cannot determine prototype." >&4 ;;
14576         * )     case "$gethostbyaddr_r_proto" in
14577                 REENTRANT_PROTO*) ;;
14578                 *) gethostbyaddr_r_proto="REENTRANT_PROTO_$gethostbyaddr_r_proto" ;;
14579                 esac
14580                 echo "Prototype: $try" ;;
14581         esac
14582         ;;
14583         *)      case "$usethreads" in
14584                 define) echo "gethostbyaddr_r has no prototype, not using it." >&4 ;;
14585                 esac
14586                 d_gethostbyaddr_r=undef
14587                 gethostbyaddr_r_proto=0
14588                 ;;
14589         esac
14590         ;;
14591 *)      gethostbyaddr_r_proto=0
14592         ;;
14593 esac
14594
14595 : see if gethostbyname_r exists
14596 set gethostbyname_r d_gethostbyname_r
14597 eval $inlibc
14598 case "$d_gethostbyname_r" in
14599 "$define")
14600         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
14601         case "$d_gethostbyname_r_proto:$usethreads" in
14602         ":define")      d_gethostbyname_r_proto=define
14603                 set d_gethostbyname_r_proto gethostbyname_r $hdrs
14604                 eval $hasproto ;;
14605         *)      ;;
14606         esac
14607         case "$d_gethostbyname_r_proto" in
14608         define)
14609         case "$gethostbyname_r_proto" in
14610         ''|0) try='int gethostbyname_r(const char*, struct hostent*, char*, size_t, struct hostent**, int*);'
14611         ./protochk "$extern_C $try" $hdrs && gethostbyname_r_proto=I_CSBWRE ;;
14612         esac
14613         case "$gethostbyname_r_proto" in
14614         ''|0) try='struct hostent* gethostbyname_r(const char*, struct hostent*, char*, int, int*);'
14615         ./protochk "$extern_C $try" $hdrs && gethostbyname_r_proto=S_CSBIE ;;
14616         esac
14617         case "$gethostbyname_r_proto" in
14618         ''|0) try='int gethostbyname_r(const char*, struct hostent*, struct hostent_data*);'
14619         ./protochk "$extern_C $try" $hdrs && gethostbyname_r_proto=I_CSD ;;
14620         esac
14621         case "$gethostbyname_r_proto" in
14622         ''|0)   d_gethostbyname_r=undef
14623                 gethostbyname_r_proto=0
14624                 echo "Disabling gethostbyname_r, cannot determine prototype." >&4 ;;
14625         * )     case "$gethostbyname_r_proto" in
14626                 REENTRANT_PROTO*) ;;
14627                 *) gethostbyname_r_proto="REENTRANT_PROTO_$gethostbyname_r_proto" ;;
14628                 esac
14629                 echo "Prototype: $try" ;;
14630         esac
14631         ;;
14632         *)      case "$usethreads" in
14633                 define) echo "gethostbyname_r has no prototype, not using it." >&4 ;;
14634                 esac
14635                 d_gethostbyname_r=undef
14636                 gethostbyname_r_proto=0
14637                 ;;
14638         esac
14639         ;;
14640 *)      gethostbyname_r_proto=0
14641         ;;
14642 esac
14643
14644 : see if gethostent_r exists
14645 set gethostent_r d_gethostent_r
14646 eval $inlibc
14647 case "$d_gethostent_r" in
14648 "$define")
14649         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
14650         case "$d_gethostent_r_proto:$usethreads" in
14651         ":define")      d_gethostent_r_proto=define
14652                 set d_gethostent_r_proto gethostent_r $hdrs
14653                 eval $hasproto ;;
14654         *)      ;;
14655         esac
14656         case "$d_gethostent_r_proto" in
14657         define)
14658         case "$gethostent_r_proto" in
14659         ''|0) try='int gethostent_r(struct hostent*, char*, size_t, struct hostent**, int*);'
14660         ./protochk "$extern_C $try" $hdrs && gethostent_r_proto=I_SBWRE ;;
14661         esac
14662         case "$gethostent_r_proto" in
14663         ''|0) try='int gethostent_r(struct hostent*, char*, int, int*);'
14664         ./protochk "$extern_C $try" $hdrs && gethostent_r_proto=I_SBIE ;;
14665         esac
14666         case "$gethostent_r_proto" in
14667         ''|0) try='struct hostent* gethostent_r(struct hostent*, char*, int, int*);'
14668         ./protochk "$extern_C $try" $hdrs && gethostent_r_proto=S_SBIE ;;
14669         esac
14670         case "$gethostent_r_proto" in
14671         ''|0) try='struct hostent* gethostent_r(struct hostent*, char*, int);'
14672         ./protochk "$extern_C $try" $hdrs && gethostent_r_proto=S_SBI ;;
14673         esac
14674         case "$gethostent_r_proto" in
14675         ''|0) try='int gethostent_r(struct hostent*, char*, int);'
14676         ./protochk "$extern_C $try" $hdrs && gethostent_r_proto=I_SBI ;;
14677         esac
14678         case "$gethostent_r_proto" in
14679         ''|0) try='int gethostent_r(struct hostent*, struct hostent_data*);'
14680         ./protochk "$extern_C $try" $hdrs && gethostent_r_proto=I_SD ;;
14681         esac
14682         case "$gethostent_r_proto" in
14683         ''|0)   d_gethostent_r=undef
14684                 gethostent_r_proto=0
14685                 echo "Disabling gethostent_r, cannot determine prototype." >&4 ;;
14686         * )     case "$gethostent_r_proto" in
14687                 REENTRANT_PROTO*) ;;
14688                 *) gethostent_r_proto="REENTRANT_PROTO_$gethostent_r_proto" ;;
14689                 esac
14690                 echo "Prototype: $try" ;;
14691         esac
14692         ;;
14693         *)      case "$usethreads" in
14694                 define) echo "gethostent_r has no prototype, not using it." >&4 ;;
14695                 esac
14696                 d_gethostent_r=undef
14697                 gethostent_r_proto=0
14698                 ;;
14699         esac
14700         ;;
14701 *)      gethostent_r_proto=0
14702         ;;
14703 esac
14704
14705 : see if prototypes for various gethostxxx netdb.h functions are available
14706 echo " "
14707 set d_gethostprotos gethostent $i_netdb netdb.h
14708 eval $hasproto
14709
14710 : see if getitimer exists
14711 set getitimer d_getitimer
14712 eval $inlibc
14713
14714 : see if getlogin exists
14715 set getlogin d_getlogin
14716 eval $inlibc
14717
14718 : see if getlogin_r exists
14719 set getlogin_r d_getlogin_r
14720 eval $inlibc
14721 case "$d_getlogin_r" in
14722 "$define")
14723         hdrs="$i_systypes sys/types.h define stdio.h $i_unistd unistd.h"
14724         case "$d_getlogin_r_proto:$usethreads" in
14725         ":define")      d_getlogin_r_proto=define
14726                 set d_getlogin_r_proto getlogin_r $hdrs
14727                 eval $hasproto ;;
14728         *)      ;;
14729         esac
14730         case "$d_getlogin_r_proto" in
14731         define)
14732         case "$getlogin_r_proto" in
14733         ''|0) try='int getlogin_r(char*, size_t);'
14734         ./protochk "$extern_C $try" $hdrs && getlogin_r_proto=I_BW ;;
14735         esac
14736         case "$getlogin_r_proto" in
14737         ''|0) try='int getlogin_r(char*, int);'
14738         ./protochk "$extern_C $try" $hdrs && getlogin_r_proto=I_BI ;;
14739         esac
14740         case "$getlogin_r_proto" in
14741         ''|0) try='char* getlogin_r(char*, size_t);'
14742         ./protochk "$extern_C $try" $hdrs && getlogin_r_proto=B_BW ;;
14743         esac
14744         case "$getlogin_r_proto" in
14745         ''|0) try='char* getlogin_r(char*, int);'
14746         ./protochk "$extern_C $try" $hdrs && getlogin_r_proto=B_BI ;;
14747         esac
14748         case "$getlogin_r_proto" in
14749         ''|0)   d_getlogin_r=undef
14750                 getlogin_r_proto=0
14751                 echo "Disabling getlogin_r, cannot determine prototype." >&4 ;;
14752         * )     case "$getlogin_r_proto" in
14753                 REENTRANT_PROTO*) ;;
14754                 *) getlogin_r_proto="REENTRANT_PROTO_$getlogin_r_proto" ;;
14755                 esac
14756                 echo "Prototype: $try" ;;
14757         esac
14758         ;;
14759         *)      case "$usethreads" in
14760                 define) echo "getlogin_r has no prototype, not using it." >&4 ;;
14761                 esac
14762                 d_getlogin_r=undef
14763                 getlogin_r_proto=0
14764                 ;;
14765         esac
14766         ;;
14767 *)      getlogin_r_proto=0
14768         ;;
14769 esac
14770
14771 : see if getmnt exists
14772 set getmnt d_getmnt
14773 eval $inlibc
14774
14775 : see if getmntent exists
14776 set getmntent d_getmntent
14777 eval $inlibc
14778
14779 : see if getnameinfo exists
14780 set getnameinfo d_getnameinfo
14781 eval $inlibc
14782
14783 : see if getnetbyaddr exists
14784 set getnetbyaddr d_getnbyaddr
14785 eval $inlibc
14786
14787 : see if getnetbyname exists
14788 set getnetbyname d_getnbyname
14789 eval $inlibc
14790
14791 : see if getnetent exists
14792 set getnetent d_getnent
14793 eval $inlibc
14794
14795 : see if getnetbyaddr_r exists
14796 set getnetbyaddr_r d_getnetbyaddr_r
14797 eval $inlibc
14798 case "$d_getnetbyaddr_r" in
14799 "$define")
14800         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
14801         case "$d_getnetbyaddr_r_proto:$usethreads" in
14802         ":define")      d_getnetbyaddr_r_proto=define
14803                 set d_getnetbyaddr_r_proto getnetbyaddr_r $hdrs
14804                 eval $hasproto ;;
14805         *)      ;;
14806         esac
14807         case "$d_getnetbyaddr_r_proto" in
14808         define)
14809         case "$getnetbyaddr_r_proto" in
14810         ''|0) try='int getnetbyaddr_r(unsigned long, int, struct netent*, char*, size_t, struct netent**, int*);'
14811         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=I_UISBWRE ;;
14812         esac
14813         case "$getnetbyaddr_r_proto" in
14814         ''|0) try='int getnetbyaddr_r(long, int, struct netent*, char*, int);'
14815         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=I_LISBI ;;
14816         esac
14817         case "$getnetbyaddr_r_proto" in
14818         ''|0) try='struct netent* getnetbyaddr_r(in_addr_t, int, struct netent*, char*, int);'
14819         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=S_TISBI ;;
14820         esac
14821         case "$getnetbyaddr_r_proto" in
14822         ''|0) try='struct netent* getnetbyaddr_r(long, int, struct netent*, char*, int);'
14823         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=S_LISBI ;;
14824         esac
14825         case "$getnetbyaddr_r_proto" in
14826         ''|0) try='int getnetbyaddr_r(in_addr_t, int, struct netent*, struct netent_data*);'
14827         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=I_TISD ;;
14828         esac
14829         case "$getnetbyaddr_r_proto" in
14830         ''|0) try='int getnetbyaddr_r(long, int, struct netent*, struct netent_data*);'
14831         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=I_LISD ;;
14832         esac
14833         case "$getnetbyaddr_r_proto" in
14834         ''|0) try='int getnetbyaddr_r(int, int, struct netent*, struct netent_data*);'
14835         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=I_IISD ;;
14836         esac
14837         case "$getnetbyaddr_r_proto" in
14838         ''|0) try='int getnetbyaddr_r(uint32_t, int, struct netent*, char*, size_t, struct netent**, int*);'
14839         ./protochk "$extern_C $try" $hdrs && getnetbyaddr_r_proto=I_uISBWRE ;;
14840         esac
14841         case "$getnetbyaddr_r_proto" in
14842         ''|0)   d_getnetbyaddr_r=undef
14843                 getnetbyaddr_r_proto=0
14844                 echo "Disabling getnetbyaddr_r, cannot determine prototype." >&4 ;;
14845         * )     case "$getnetbyaddr_r_proto" in
14846                 REENTRANT_PROTO*) ;;
14847                 *) getnetbyaddr_r_proto="REENTRANT_PROTO_$getnetbyaddr_r_proto" ;;
14848                 esac
14849                 echo "Prototype: $try" ;;
14850         esac
14851         ;;
14852         *)      case "$usethreads" in
14853                 define) echo "getnetbyaddr_r has no prototype, not using it." >&4 ;;
14854                 esac
14855                 d_getnetbyaddr_r=undef
14856                 getnetbyaddr_r_proto=0
14857                 ;;
14858         esac
14859         ;;
14860 *)      getnetbyaddr_r_proto=0
14861         ;;
14862 esac
14863
14864 : see if getnetbyname_r exists
14865 set getnetbyname_r d_getnetbyname_r
14866 eval $inlibc
14867 case "$d_getnetbyname_r" in
14868 "$define")
14869         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
14870         case "$d_getnetbyname_r_proto:$usethreads" in
14871         ":define")      d_getnetbyname_r_proto=define
14872                 set d_getnetbyname_r_proto getnetbyname_r $hdrs
14873                 eval $hasproto ;;
14874         *)      ;;
14875         esac
14876         case "$d_getnetbyname_r_proto" in
14877         define)
14878         case "$getnetbyname_r_proto" in
14879         ''|0) try='int getnetbyname_r(const char*, struct netent*, char*, size_t, struct netent**, int*);'
14880         ./protochk "$extern_C $try" $hdrs && getnetbyname_r_proto=I_CSBWRE ;;
14881         esac
14882         case "$getnetbyname_r_proto" in
14883         ''|0) try='int getnetbyname_r(const char*, struct netent*, char*, int);'
14884         ./protochk "$extern_C $try" $hdrs && getnetbyname_r_proto=I_CSBI ;;
14885         esac
14886         case "$getnetbyname_r_proto" in
14887         ''|0) try='struct netent* getnetbyname_r(const char*, struct netent*, char*, int);'
14888         ./protochk "$extern_C $try" $hdrs && getnetbyname_r_proto=S_CSBI ;;
14889         esac
14890         case "$getnetbyname_r_proto" in
14891         ''|0) try='int getnetbyname_r(const char*, struct netent*, struct netent_data*);'
14892         ./protochk "$extern_C $try" $hdrs && getnetbyname_r_proto=I_CSD ;;
14893         esac
14894         case "$getnetbyname_r_proto" in
14895         ''|0)   d_getnetbyname_r=undef
14896                 getnetbyname_r_proto=0
14897                 echo "Disabling getnetbyname_r, cannot determine prototype." >&4 ;;
14898         * )     case "$getnetbyname_r_proto" in
14899                 REENTRANT_PROTO*) ;;
14900                 *) getnetbyname_r_proto="REENTRANT_PROTO_$getnetbyname_r_proto" ;;
14901                 esac
14902                 echo "Prototype: $try" ;;
14903         esac
14904         ;;
14905         *)      case "$usethreads" in
14906                 define) echo "getnetbyname_r has no prototype, not using it." >&4 ;;
14907                 esac
14908                 d_getnetbyname_r=undef
14909                 getnetbyname_r_proto=0
14910                 ;;
14911         esac
14912         ;;
14913 *)      getnetbyname_r_proto=0
14914         ;;
14915 esac
14916
14917 : see if getnetent_r exists
14918 set getnetent_r d_getnetent_r
14919 eval $inlibc
14920 case "$d_getnetent_r" in
14921 "$define")
14922         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
14923         case "$d_getnetent_r_proto:$usethreads" in
14924         ":define")      d_getnetent_r_proto=define
14925                 set d_getnetent_r_proto getnetent_r $hdrs
14926                 eval $hasproto ;;
14927         *)      ;;
14928         esac
14929         case "$d_getnetent_r_proto" in
14930         define)
14931         case "$getnetent_r_proto" in
14932         ''|0) try='int getnetent_r(struct netent*, char*, size_t, struct netent**, int*);'
14933         ./protochk "$extern_C $try" $hdrs && getnetent_r_proto=I_SBWRE ;;
14934         esac
14935         case "$getnetent_r_proto" in
14936         ''|0) try='int getnetent_r(struct netent*, char*, int, int*);'
14937         ./protochk "$extern_C $try" $hdrs && getnetent_r_proto=I_SBIE ;;
14938         esac
14939         case "$getnetent_r_proto" in
14940         ''|0) try='struct netent* getnetent_r(struct netent*, char*, int, int*);'
14941         ./protochk "$extern_C $try" $hdrs && getnetent_r_proto=S_SBIE ;;
14942         esac
14943         case "$getnetent_r_proto" in
14944         ''|0) try='struct netent* getnetent_r(struct netent*, char*, int);'
14945         ./protochk "$extern_C $try" $hdrs && getnetent_r_proto=S_SBI ;;
14946         esac
14947         case "$getnetent_r_proto" in
14948         ''|0) try='int getnetent_r(struct netent*, char*, int);'
14949         ./protochk "$extern_C $try" $hdrs && getnetent_r_proto=I_SBI ;;
14950         esac
14951         case "$getnetent_r_proto" in
14952         ''|0) try='int getnetent_r(struct netent*, struct netent_data*);'
14953         ./protochk "$extern_C $try" $hdrs && getnetent_r_proto=I_SD ;;
14954         esac
14955         case "$getnetent_r_proto" in
14956         ''|0)   d_getnetent_r=undef
14957                 getnetent_r_proto=0
14958                 echo "Disabling getnetent_r, cannot determine prototype." >&4 ;;
14959         * )     case "$getnetent_r_proto" in
14960                 REENTRANT_PROTO*) ;;
14961                 *) getnetent_r_proto="REENTRANT_PROTO_$getnetent_r_proto" ;;
14962                 esac
14963                 echo "Prototype: $try" ;;
14964         esac
14965         ;;
14966         *)      case "$usethreads" in
14967                 define) echo "getnetent_r has no prototype, not using it." >&4 ;;
14968                 esac
14969                 d_getnetent_r=undef
14970                 getnetent_r_proto=0
14971                 ;;
14972         esac
14973         ;;
14974 *)      getnetent_r_proto=0
14975         ;;
14976 esac
14977
14978 : see if prototypes for various getnetxxx netdb.h functions are available
14979 echo " "
14980 set d_getnetprotos getnetent $i_netdb netdb.h
14981 eval $hasproto
14982
14983 : see if getpagesize exists
14984 set getpagesize d_getpagsz
14985 eval $inlibc
14986
14987 : Optional checks for getprotobyname and getprotobynumber
14988
14989 : see if getprotobyname exists
14990 set getprotobyname d_getpbyname
14991 eval $inlibc
14992
14993 : see if getprotobynumber exists
14994 set getprotobynumber d_getpbynumber
14995 eval $inlibc
14996
14997 : see if getprotoent exists
14998 set getprotoent d_getpent
14999 eval $inlibc
15000
15001 : see if getpgid exists
15002 set getpgid d_getpgid
15003 eval $inlibc
15004
15005 : see if getpgrp2 exists
15006 set getpgrp2 d_getpgrp2
15007 eval $inlibc
15008
15009 : see if getppid exists
15010 set getppid d_getppid
15011 eval $inlibc
15012
15013 : see if getpriority exists
15014 set getpriority d_getprior
15015 eval $inlibc
15016
15017 : see if getprotobyname_r exists
15018 set getprotobyname_r d_getprotobyname_r
15019 eval $inlibc
15020 case "$d_getprotobyname_r" in
15021 "$define")
15022         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
15023         case "$d_getprotobyname_r_proto:$usethreads" in
15024         ":define")      d_getprotobyname_r_proto=define
15025                 set d_getprotobyname_r_proto getprotobyname_r $hdrs
15026                 eval $hasproto ;;
15027         *)      ;;
15028         esac
15029         case "$d_getprotobyname_r_proto" in
15030         define)
15031         case "$getprotobyname_r_proto" in
15032         ''|0) try='int getprotobyname_r(const char*, struct protoent*, char*, size_t, struct protoent**);'
15033         ./protochk "$extern_C $try" $hdrs && getprotobyname_r_proto=I_CSBWR ;;
15034         esac
15035         case "$getprotobyname_r_proto" in
15036         ''|0) try='struct protoent* getprotobyname_r(const char*, struct protoent*, char*, int);'
15037         ./protochk "$extern_C $try" $hdrs && getprotobyname_r_proto=S_CSBI ;;
15038         esac
15039         case "$getprotobyname_r_proto" in
15040         ''|0) try='int getprotobyname_r(const char*, struct protoent*, struct protoent_data*);'
15041         ./protochk "$extern_C $try" $hdrs && getprotobyname_r_proto=I_CSD ;;
15042         esac
15043         case "$getprotobyname_r_proto" in
15044         ''|0)   d_getprotobyname_r=undef
15045                 getprotobyname_r_proto=0
15046                 echo "Disabling getprotobyname_r, cannot determine prototype." >&4 ;;
15047         * )     case "$getprotobyname_r_proto" in
15048                 REENTRANT_PROTO*) ;;
15049                 *) getprotobyname_r_proto="REENTRANT_PROTO_$getprotobyname_r_proto" ;;
15050                 esac
15051                 echo "Prototype: $try" ;;
15052         esac
15053         ;;
15054         *)      case "$usethreads" in
15055                 define) echo "getprotobyname_r has no prototype, not using it." >&4 ;;
15056                 esac
15057                 d_getprotobyname_r=undef
15058                 getprotobyname_r_proto=0
15059                 ;;
15060         esac
15061         ;;
15062 *)      getprotobyname_r_proto=0
15063         ;;
15064 esac
15065
15066 : see if getprotobynumber_r exists
15067 set getprotobynumber_r d_getprotobynumber_r
15068 eval $inlibc
15069 case "$d_getprotobynumber_r" in
15070 "$define")
15071         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
15072         case "$d_getprotobynumber_r_proto:$usethreads" in
15073         ":define")      d_getprotobynumber_r_proto=define
15074                 set d_getprotobynumber_r_proto getprotobynumber_r $hdrs
15075                 eval $hasproto ;;
15076         *)      ;;
15077         esac
15078         case "$d_getprotobynumber_r_proto" in
15079         define)
15080         case "$getprotobynumber_r_proto" in
15081         ''|0) try='int getprotobynumber_r(int, struct protoent*, char*, size_t, struct protoent**);'
15082         ./protochk "$extern_C $try" $hdrs && getprotobynumber_r_proto=I_ISBWR ;;
15083         esac
15084         case "$getprotobynumber_r_proto" in
15085         ''|0) try='struct protoent* getprotobynumber_r(int, struct protoent*, char*, int);'
15086         ./protochk "$extern_C $try" $hdrs && getprotobynumber_r_proto=S_ISBI ;;
15087         esac
15088         case "$getprotobynumber_r_proto" in
15089         ''|0) try='int getprotobynumber_r(int, struct protoent*, struct protoent_data*);'
15090         ./protochk "$extern_C $try" $hdrs && getprotobynumber_r_proto=I_ISD ;;
15091         esac
15092         case "$getprotobynumber_r_proto" in
15093         ''|0)   d_getprotobynumber_r=undef
15094                 getprotobynumber_r_proto=0
15095                 echo "Disabling getprotobynumber_r, cannot determine prototype." >&4 ;;
15096         * )     case "$getprotobynumber_r_proto" in
15097                 REENTRANT_PROTO*) ;;
15098                 *) getprotobynumber_r_proto="REENTRANT_PROTO_$getprotobynumber_r_proto" ;;
15099                 esac
15100                 echo "Prototype: $try" ;;
15101         esac
15102         ;;
15103         *)      case "$usethreads" in
15104                 define) echo "getprotobynumber_r has no prototype, not using it." >&4 ;;
15105                 esac
15106                 d_getprotobynumber_r=undef
15107                 getprotobynumber_r_proto=0
15108                 ;;
15109         esac
15110         ;;
15111 *)      getprotobynumber_r_proto=0
15112         ;;
15113 esac
15114
15115 : see if getprotoent_r exists
15116 set getprotoent_r d_getprotoent_r
15117 eval $inlibc
15118 case "$d_getprotoent_r" in
15119 "$define")
15120         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
15121         case "$d_getprotoent_r_proto:$usethreads" in
15122         ":define")      d_getprotoent_r_proto=define
15123                 set d_getprotoent_r_proto getprotoent_r $hdrs
15124                 eval $hasproto ;;
15125         *)      ;;
15126         esac
15127         case "$d_getprotoent_r_proto" in
15128         define)
15129         case "$getprotoent_r_proto" in
15130         ''|0) try='int getprotoent_r(struct protoent*, char*, size_t, struct protoent**);'
15131         ./protochk "$extern_C $try" $hdrs && getprotoent_r_proto=I_SBWR ;;
15132         esac
15133         case "$getprotoent_r_proto" in
15134         ''|0) try='int getprotoent_r(struct protoent*, char*, int);'
15135         ./protochk "$extern_C $try" $hdrs && getprotoent_r_proto=I_SBI ;;
15136         esac
15137         case "$getprotoent_r_proto" in
15138         ''|0) try='struct protoent* getprotoent_r(struct protoent*, char*, int);'
15139         ./protochk "$extern_C $try" $hdrs && getprotoent_r_proto=S_SBI ;;
15140         esac
15141         case "$getprotoent_r_proto" in
15142         ''|0) try='int getprotoent_r(struct protoent*, struct protoent_data*);'
15143         ./protochk "$extern_C $try" $hdrs && getprotoent_r_proto=I_SD ;;
15144         esac
15145         case "$getprotoent_r_proto" in
15146         ''|0)   d_getprotoent_r=undef
15147                 getprotoent_r_proto=0
15148                 echo "Disabling getprotoent_r, cannot determine prototype." >&4 ;;
15149         * )     case "$getprotoent_r_proto" in
15150                 REENTRANT_PROTO*) ;;
15151                 *) getprotoent_r_proto="REENTRANT_PROTO_$getprotoent_r_proto" ;;
15152                 esac
15153                 echo "Prototype: $try" ;;
15154         esac
15155         ;;
15156         *)      case "$usethreads" in
15157                 define) echo "getprotoent_r has no prototype, not using it." >&4 ;;
15158                 esac
15159                 d_getprotoent_r=undef
15160                 getprotoent_r_proto=0
15161                 ;;
15162         esac
15163         ;;
15164 *)      getprotoent_r_proto=0
15165         ;;
15166 esac
15167
15168 : see if prototypes for various getprotoxxx netdb.h functions are available
15169 echo " "
15170 set d_getprotoprotos getprotoent $i_netdb netdb.h
15171 eval $hasproto
15172
15173 : see if getprpwnam exists
15174 set getprpwnam d_getprpwnam
15175 eval $inlibc
15176
15177 : see if getpwent exists
15178 set getpwent d_getpwent
15179 eval $inlibc
15180
15181 : see if getpwent_r exists
15182 set getpwent_r d_getpwent_r
15183 eval $inlibc
15184 case "$d_getpwent_r" in
15185 "$define")
15186         hdrs="$i_systypes sys/types.h define stdio.h $i_pwd pwd.h"
15187         case "$d_getpwent_r_proto:$usethreads" in
15188         ":define")      d_getpwent_r_proto=define
15189                 set d_getpwent_r_proto getpwent_r $hdrs
15190                 eval $hasproto ;;
15191         *)      ;;
15192         esac
15193         case "$d_getpwent_r_proto" in
15194         define)
15195         case "$getpwent_r_proto" in
15196         ''|0) try='int getpwent_r(struct passwd*, char*, size_t, struct passwd**);'
15197         ./protochk "$extern_C $try" $hdrs && getpwent_r_proto=I_SBWR ;;
15198         esac
15199         case "$getpwent_r_proto" in
15200         ''|0) try='int getpwent_r(struct passwd*, char*, int, struct passwd**);'
15201         ./protochk "$extern_C $try" $hdrs && getpwent_r_proto=I_SBIR ;;
15202         esac
15203         case "$getpwent_r_proto" in
15204         ''|0) try='struct passwd* getpwent_r(struct passwd*, char*, size_t);'
15205         ./protochk "$extern_C $try" $hdrs && getpwent_r_proto=S_SBW ;;
15206         esac
15207         case "$getpwent_r_proto" in
15208         ''|0) try='struct passwd* getpwent_r(struct passwd*, char*, int);'
15209         ./protochk "$extern_C $try" $hdrs && getpwent_r_proto=S_SBI ;;
15210         esac
15211         case "$getpwent_r_proto" in
15212         ''|0) try='int getpwent_r(struct passwd*, char*, int);'
15213         ./protochk "$extern_C $try" $hdrs && getpwent_r_proto=I_SBI ;;
15214         esac
15215         case "$getpwent_r_proto" in
15216         ''|0) try='int getpwent_r(struct passwd*, char*, int, FILE**);'
15217         ./protochk "$extern_C $try" $hdrs && getpwent_r_proto=I_SBIH ;;
15218         esac
15219         case "$getpwent_r_proto" in
15220         ''|0)   d_getpwent_r=undef
15221                 getpwent_r_proto=0
15222                 echo "Disabling getpwent_r, cannot determine prototype." >&4 ;;
15223         * )     case "$getpwent_r_proto" in
15224                 REENTRANT_PROTO*) ;;
15225                 *) getpwent_r_proto="REENTRANT_PROTO_$getpwent_r_proto" ;;
15226                 esac
15227                 echo "Prototype: $try" ;;
15228         esac
15229         ;;
15230         *)      case "$usethreads" in
15231                 define) echo "getpwent_r has no prototype, not using it." >&4 ;;
15232                 esac
15233                 d_getpwent_r=undef
15234                 getpwent_r_proto=0
15235                 ;;
15236         esac
15237         ;;
15238 *)      getpwent_r_proto=0
15239         ;;
15240 esac
15241
15242 : see if getpwnam_r exists
15243 set getpwnam_r d_getpwnam_r
15244 eval $inlibc
15245 case "$d_getpwnam_r" in
15246 "$define")
15247         hdrs="$i_systypes sys/types.h define stdio.h $i_pwd pwd.h"
15248         case "$d_getpwnam_r_proto:$usethreads" in
15249         ":define")      d_getpwnam_r_proto=define
15250                 set d_getpwnam_r_proto getpwnam_r $hdrs
15251                 eval $hasproto ;;
15252         *)      ;;
15253         esac
15254         case "$d_getpwnam_r_proto" in
15255         define)
15256         case "$getpwnam_r_proto" in
15257         ''|0) try='int getpwnam_r(const char*, struct passwd*, char*, size_t, struct passwd**);'
15258         ./protochk "$extern_C $try" $hdrs && getpwnam_r_proto=I_CSBWR ;;
15259         esac
15260         case "$getpwnam_r_proto" in
15261         ''|0) try='int getpwnam_r(const char*, struct passwd*, char*, int, struct passwd**);'
15262         ./protochk "$extern_C $try" $hdrs && getpwnam_r_proto=I_CSBIR ;;
15263         esac
15264         case "$getpwnam_r_proto" in
15265         ''|0) try='struct passwd* getpwnam_r(const char*, struct passwd*, char*, int);'
15266         ./protochk "$extern_C $try" $hdrs && getpwnam_r_proto=S_CSBI ;;
15267         esac
15268         case "$getpwnam_r_proto" in
15269         ''|0) try='int getpwnam_r(const char*, struct passwd*, char*, int);'
15270         ./protochk "$extern_C $try" $hdrs && getpwnam_r_proto=I_CSBI ;;
15271         esac
15272         case "$getpwnam_r_proto" in
15273         ''|0)   d_getpwnam_r=undef
15274                 getpwnam_r_proto=0
15275                 echo "Disabling getpwnam_r, cannot determine prototype." >&4 ;;
15276         * )     case "$getpwnam_r_proto" in
15277                 REENTRANT_PROTO*) ;;
15278                 *) getpwnam_r_proto="REENTRANT_PROTO_$getpwnam_r_proto" ;;
15279                 esac
15280                 echo "Prototype: $try" ;;
15281         esac
15282         ;;
15283         *)      case "$usethreads" in
15284                 define) echo "getpwnam_r has no prototype, not using it." >&4 ;;
15285                 esac
15286                 d_getpwnam_r=undef
15287                 getpwnam_r_proto=0
15288                 ;;
15289         esac
15290         ;;
15291 *)      getpwnam_r_proto=0
15292         ;;
15293 esac
15294
15295 : see if getpwuid_r exists
15296 set getpwuid_r d_getpwuid_r
15297 eval $inlibc
15298 case "$d_getpwuid_r" in
15299 "$define")
15300         hdrs="$i_systypes sys/types.h define stdio.h $i_pwd pwd.h"
15301         case "$d_getpwuid_r_proto:$usethreads" in
15302         ":define")      d_getpwuid_r_proto=define
15303                 set d_getpwuid_r_proto getpwuid_r $hdrs
15304                 eval $hasproto ;;
15305         *)      ;;
15306         esac
15307         case "$d_getpwuid_r_proto" in
15308         define)
15309         case "$getpwuid_r_proto" in
15310         ''|0) try='int getpwuid_r(uid_t, struct passwd*, char*, size_t, struct passwd**);'
15311         ./protochk "$extern_C $try" $hdrs && getpwuid_r_proto=I_TSBWR ;;
15312         esac
15313         case "$getpwuid_r_proto" in
15314         ''|0) try='int getpwuid_r(uid_t, struct passwd*, char*, int, struct passwd**);'
15315         ./protochk "$extern_C $try" $hdrs && getpwuid_r_proto=I_TSBIR ;;
15316         esac
15317         case "$getpwuid_r_proto" in
15318         ''|0) try='int getpwuid_r(uid_t, struct passwd*, char*, int);'
15319         ./protochk "$extern_C $try" $hdrs && getpwuid_r_proto=I_TSBI ;;
15320         esac
15321         case "$getpwuid_r_proto" in
15322         ''|0) try='struct passwd* getpwuid_r(uid_t, struct passwd*, char*, int);'
15323         ./protochk "$extern_C $try" $hdrs && getpwuid_r_proto=S_TSBI ;;
15324         esac
15325         case "$getpwuid_r_proto" in
15326         ''|0)   d_getpwuid_r=undef
15327                 getpwuid_r_proto=0
15328                 echo "Disabling getpwuid_r, cannot determine prototype." >&4 ;;
15329         * )     case "$getpwuid_r_proto" in
15330                 REENTRANT_PROTO*) ;;
15331                 *) getpwuid_r_proto="REENTRANT_PROTO_$getpwuid_r_proto" ;;
15332                 esac
15333                 echo "Prototype: $try" ;;
15334         esac
15335         ;;
15336         *)      case "$usethreads" in
15337                 define) echo "getpwuid_r has no prototype, not using it." >&4 ;;
15338                 esac
15339                 d_getpwuid_r=undef
15340                 getpwuid_r_proto=0
15341                 ;;
15342         esac
15343         ;;
15344 *)      getpwuid_r_proto=0
15345         ;;
15346 esac
15347
15348 : Optional checks for getsbyname and getsbyport
15349
15350 : see if getservbyname exists
15351 set getservbyname d_getsbyname
15352 eval $inlibc
15353
15354 : see if getservbyport exists
15355 set getservbyport d_getsbyport
15356 eval $inlibc
15357
15358 : see if getservent exists
15359 set getservent d_getsent
15360 eval $inlibc
15361
15362 : see if getservbyname_r exists
15363 set getservbyname_r d_getservbyname_r
15364 eval $inlibc
15365 case "$d_getservbyname_r" in
15366 "$define")
15367         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
15368         case "$d_getservbyname_r_proto:$usethreads" in
15369         ":define")      d_getservbyname_r_proto=define
15370                 set d_getservbyname_r_proto getservbyname_r $hdrs
15371                 eval $hasproto ;;
15372         *)      ;;
15373         esac
15374         case "$d_getservbyname_r_proto" in
15375         define)
15376         case "$getservbyname_r_proto" in
15377         ''|0) try='int getservbyname_r(const char*, const char*, struct servent*, char*, size_t, struct servent**);'
15378         ./protochk "$extern_C $try" $hdrs && getservbyname_r_proto=I_CCSBWR ;;
15379         esac
15380         case "$getservbyname_r_proto" in
15381         ''|0) try='struct servent* getservbyname_r(const char*, const char*, struct servent*, char*, int);'
15382         ./protochk "$extern_C $try" $hdrs && getservbyname_r_proto=S_CCSBI ;;
15383         esac
15384         case "$getservbyname_r_proto" in
15385         ''|0) try='int getservbyname_r(const char*, const char*, struct servent*, struct servent_data*);'
15386         ./protochk "$extern_C $try" $hdrs && getservbyname_r_proto=I_CCSD ;;
15387         esac
15388         case "$getservbyname_r_proto" in
15389         ''|0)   d_getservbyname_r=undef
15390                 getservbyname_r_proto=0
15391                 echo "Disabling getservbyname_r, cannot determine prototype." >&4 ;;
15392         * )     case "$getservbyname_r_proto" in
15393                 REENTRANT_PROTO*) ;;
15394                 *) getservbyname_r_proto="REENTRANT_PROTO_$getservbyname_r_proto" ;;
15395                 esac
15396                 echo "Prototype: $try" ;;
15397         esac
15398         ;;
15399         *)      case "$usethreads" in
15400                 define) echo "getservbyname_r has no prototype, not using it." >&4 ;;
15401                 esac
15402                 d_getservbyname_r=undef
15403                 getservbyname_r_proto=0
15404                 ;;
15405         esac
15406         ;;
15407 *)      getservbyname_r_proto=0
15408         ;;
15409 esac
15410
15411 : see if getservbyport_r exists
15412 set getservbyport_r d_getservbyport_r
15413 eval $inlibc
15414 case "$d_getservbyport_r" in
15415 "$define")
15416         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
15417         case "$d_getservbyport_r_proto:$usethreads" in
15418         ":define")      d_getservbyport_r_proto=define
15419                 set d_getservbyport_r_proto getservbyport_r $hdrs
15420                 eval $hasproto ;;
15421         *)      ;;
15422         esac
15423         case "$d_getservbyport_r_proto" in
15424         define)
15425         case "$getservbyport_r_proto" in
15426         ''|0) try='int getservbyport_r(int, const char*, struct servent*, char*, size_t, struct servent**);'
15427         ./protochk "$extern_C $try" $hdrs && getservbyport_r_proto=I_ICSBWR ;;
15428         esac
15429         case "$getservbyport_r_proto" in
15430         ''|0) try='struct servent* getservbyport_r(int, const char*, struct servent*, char*, int);'
15431         ./protochk "$extern_C $try" $hdrs && getservbyport_r_proto=S_ICSBI ;;
15432         esac
15433         case "$getservbyport_r_proto" in
15434         ''|0) try='int getservbyport_r(int, const char*, struct servent*, struct servent_data*);'
15435         ./protochk "$extern_C $try" $hdrs && getservbyport_r_proto=I_ICSD ;;
15436         esac
15437         case "$getservbyport_r_proto" in
15438         ''|0)   d_getservbyport_r=undef
15439                 getservbyport_r_proto=0
15440                 echo "Disabling getservbyport_r, cannot determine prototype." >&4 ;;
15441         * )     case "$getservbyport_r_proto" in
15442                 REENTRANT_PROTO*) ;;
15443                 *) getservbyport_r_proto="REENTRANT_PROTO_$getservbyport_r_proto" ;;
15444                 esac
15445                 echo "Prototype: $try" ;;
15446         esac
15447         ;;
15448         *)      case "$usethreads" in
15449                 define) echo "getservbyport_r has no prototype, not using it." >&4 ;;
15450                 esac
15451                 d_getservbyport_r=undef
15452                 getservbyport_r_proto=0
15453                 ;;
15454         esac
15455         ;;
15456 *)      getservbyport_r_proto=0
15457         ;;
15458 esac
15459
15460 : see if getservent_r exists
15461 set getservent_r d_getservent_r
15462 eval $inlibc
15463 case "$d_getservent_r" in
15464 "$define")
15465         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
15466         case "$d_getservent_r_proto:$usethreads" in
15467         ":define")      d_getservent_r_proto=define
15468                 set d_getservent_r_proto getservent_r $hdrs
15469                 eval $hasproto ;;
15470         *)      ;;
15471         esac
15472         case "$d_getservent_r_proto" in
15473         define)
15474         case "$getservent_r_proto" in
15475         ''|0) try='int getservent_r(struct servent*, char*, size_t, struct servent**);'
15476         ./protochk "$extern_C $try" $hdrs && getservent_r_proto=I_SBWR ;;
15477         esac
15478         case "$getservent_r_proto" in
15479         ''|0) try='int getservent_r(struct servent*, char*, int);'
15480         ./protochk "$extern_C $try" $hdrs && getservent_r_proto=I_SBI ;;
15481         esac
15482         case "$getservent_r_proto" in
15483         ''|0) try='struct servent* getservent_r(struct servent*, char*, int);'
15484         ./protochk "$extern_C $try" $hdrs && getservent_r_proto=S_SBI ;;
15485         esac
15486         case "$getservent_r_proto" in
15487         ''|0) try='int getservent_r(struct servent*, struct servent_data*);'
15488         ./protochk "$extern_C $try" $hdrs && getservent_r_proto=I_SD ;;
15489         esac
15490         case "$getservent_r_proto" in
15491         ''|0)   d_getservent_r=undef
15492                 getservent_r_proto=0
15493                 echo "Disabling getservent_r, cannot determine prototype." >&4 ;;
15494         * )     case "$getservent_r_proto" in
15495                 REENTRANT_PROTO*) ;;
15496                 *) getservent_r_proto="REENTRANT_PROTO_$getservent_r_proto" ;;
15497                 esac
15498                 echo "Prototype: $try" ;;
15499         esac
15500         ;;
15501         *)      case "$usethreads" in
15502                 define) echo "getservent_r has no prototype, not using it." >&4 ;;
15503                 esac
15504                 d_getservent_r=undef
15505                 getservent_r_proto=0
15506                 ;;
15507         esac
15508         ;;
15509 *)      getservent_r_proto=0
15510         ;;
15511 esac
15512
15513 : see if prototypes for various getservxxx netdb.h functions are available
15514 echo " "
15515 set d_getservprotos getservent $i_netdb netdb.h
15516 eval $hasproto
15517
15518 : see if getspnam exists
15519 set getspnam d_getspnam
15520 eval $inlibc
15521
15522 : see if this is a shadow.h system
15523 set shadow.h i_shadow
15524 eval $inhdr
15525
15526 : see if getspnam_r exists
15527 set getspnam_r d_getspnam_r
15528 eval $inlibc
15529 case "$d_getspnam_r" in
15530 "$define")
15531         hdrs="$i_systypes sys/types.h define stdio.h $i_shadow shadow.h"
15532         case "$d_getspnam_r_proto:$usethreads" in
15533         ":define")      d_getspnam_r_proto=define
15534                 set d_getspnam_r_proto getspnam_r $hdrs
15535                 eval $hasproto ;;
15536         *)      ;;
15537         esac
15538         case "$d_getspnam_r_proto" in
15539         define)
15540         case "$getspnam_r_proto" in
15541         ''|0) try='int getspnam_r(const char*, struct spwd*, char*, size_t, struct spwd**);'
15542         ./protochk "$extern_C $try" $hdrs && getspnam_r_proto=I_CSBWR ;;
15543         esac
15544         case "$getspnam_r_proto" in
15545         ''|0) try='struct spwd* getspnam_r(const char*, struct spwd*, char*, int);'
15546         ./protochk "$extern_C $try" $hdrs && getspnam_r_proto=S_CSBI ;;
15547         esac
15548         case "$getspnam_r_proto" in
15549         ''|0)   d_getspnam_r=undef
15550                 getspnam_r_proto=0
15551                 echo "Disabling getspnam_r, cannot determine prototype." >&4 ;;
15552         * )     case "$getspnam_r_proto" in
15553                 REENTRANT_PROTO*) ;;
15554                 *) getspnam_r_proto="REENTRANT_PROTO_$getspnam_r_proto" ;;
15555                 esac
15556                 echo "Prototype: $try" ;;
15557         esac
15558         ;;
15559         *)      case "$usethreads" in
15560                 define) echo "getspnam_r has no prototype, not using it." >&4 ;;
15561                 esac
15562                 d_getspnam_r=undef
15563                 getspnam_r_proto=0
15564                 ;;
15565         esac
15566         ;;
15567 *)      getspnam_r_proto=0
15568         ;;
15569 esac
15570
15571 : see if gettimeofday or ftime exists
15572 set gettimeofday d_gettimeod
15573 eval $inlibc
15574 case "$d_gettimeod" in
15575 "$undef")
15576         set ftime d_ftime 
15577         eval $inlibc
15578         ;;
15579 *)
15580         val="$undef"; set d_ftime; eval $setvar
15581         ;;
15582 esac
15583 case "$d_gettimeod$d_ftime" in
15584 "$undef$undef")
15585         echo " "
15586         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
15587         ;;
15588 esac
15589
15590 : see if gmtime_r exists
15591 set gmtime_r d_gmtime_r
15592 eval $inlibc
15593 case "$d_gmtime_r" in
15594 "$define")
15595         hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
15596         case "$d_gmtime_r_proto:$usethreads" in
15597         ":define")      d_gmtime_r_proto=define
15598                 set d_gmtime_r_proto gmtime_r $hdrs
15599                 eval $hasproto ;;
15600         *)      ;;
15601         esac
15602         case "$d_gmtime_r_proto" in
15603         define)
15604         case "$gmtime_r_proto" in
15605         ''|0) try='struct tm* gmtime_r(const time_t*, struct tm*);'
15606         ./protochk "$extern_C $try" $hdrs && gmtime_r_proto=S_TS ;;
15607         esac
15608         case "$gmtime_r_proto" in
15609         ''|0) try='int gmtime_r(const time_t*, struct tm*);'
15610         ./protochk "$extern_C $try" $hdrs && gmtime_r_proto=I_TS ;;
15611         esac
15612         case "$gmtime_r_proto" in
15613         ''|0)   d_gmtime_r=undef
15614                 gmtime_r_proto=0
15615                 echo "Disabling gmtime_r, cannot determine prototype." >&4 ;;
15616         * )     case "$gmtime_r_proto" in
15617                 REENTRANT_PROTO*) ;;
15618                 *) gmtime_r_proto="REENTRANT_PROTO_$gmtime_r_proto" ;;
15619                 esac
15620                 echo "Prototype: $try" ;;
15621         esac
15622         ;;
15623         *)      case "$usethreads" in
15624                 define) echo "gmtime_r has no prototype, not using it." >&4 ;;
15625                 esac
15626                 d_gmtime_r=undef
15627                 gmtime_r_proto=0
15628                 ;;
15629         esac
15630         ;;
15631 *)      gmtime_r_proto=0
15632         ;;
15633 esac
15634
15635 : see if hasmntopt exists
15636 set hasmntopt d_hasmntopt
15637 eval $inlibc
15638
15639 : see if this is a netinet/in.h or sys/in.h system
15640 set netinet/in.h i_niin sys/in.h i_sysin
15641 eval $inhdr
15642
15643 : see if arpa/inet.h has to be included
15644 set arpa/inet.h i_arpainet
15645 eval $inhdr
15646
15647 : see if htonl --and friends-- exists
15648 val=''
15649 set htonl val
15650 eval $inlibc
15651
15652 : Maybe they are macros.
15653 case "$val" in
15654 $undef)
15655         $cat >htonl.c <<EOM
15656 #include <stdio.h>
15657 #include <sys/types.h>
15658 #$i_niin I_NETINET_IN
15659 #$i_sysin I_SYS_IN
15660 #$i_arpainet I_ARPA_INET
15661 #ifdef I_NETINET_IN
15662 #include <netinet/in.h>
15663 #endif
15664 #ifdef I_SYS_IN
15665 #include <sys/in.h>
15666 #endif
15667 #ifdef I_ARPA_INET
15668 #include <arpa/inet.h>
15669 #endif
15670 #ifdef htonl
15671 printf("Defined as a macro.");
15672 #endif
15673 EOM
15674         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
15675         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
15676                 val="$define"
15677                 echo "But it seems to be defined as a macro." >&4
15678         fi
15679         $rm -f htonl.?
15680         ;;
15681 esac
15682 set d_htonl
15683 eval $setvar
15684
15685 : see if hypot exists
15686 set hypot d_hypot
15687 eval $inlibc
15688
15689 : see if ilogb exists
15690 set ilogb d_ilogb
15691 eval $inlibc
15692
15693 : see if ilogbl exists
15694 set ilogbl d_ilogbl
15695 eval $inlibc
15696
15697 : index or strchr
15698 echo " "
15699 if set index val -f; eval $csym; $val; then
15700         if set strchr val -f d_strchr; eval $csym; $val; then
15701                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
15702                         val="$define"
15703                         vali="$undef"
15704                         echo "strchr() found." >&4
15705                 else
15706                         val="$undef"
15707                         vali="$define"
15708                         echo "index() found." >&4
15709                 fi
15710         else
15711                 val="$undef"
15712                 vali="$define"
15713                 echo "index() found." >&4
15714         fi
15715 else
15716         if set strchr val -f d_strchr; eval $csym; $val; then
15717                 val="$define"
15718                 vali="$undef"
15719                 echo "strchr() found." >&4
15720         else
15721                 echo "No index() or strchr() found!" >&4
15722                 val="$undef"
15723                 vali="$undef"
15724         fi
15725 fi
15726 set d_strchr; eval $setvar
15727 val="$vali"
15728 set d_index; eval $setvar
15729
15730 : check whether inet_aton exists
15731 set inet_aton d_inetaton
15732 eval $inlibc
15733
15734 : see if inet_ntop exists
15735 set inet_ntop d_inetntop
15736 eval $inlibc
15737
15738 : see if inet_pton exists
15739 set inet_pton d_inetpton
15740 eval $inlibc
15741
15742 : Look for isascii
15743 echo " "
15744 $cat >isascii.c <<EOCP
15745 #include <stdio.h>
15746 #include <ctype.h>
15747 #$i_stdlib I_STDLIB
15748 #ifdef I_STDLIB
15749 #include <stdlib.h>
15750 #endif
15751 int main() {
15752         int c = 'A';
15753         if (isascii(c))
15754                 exit(0);
15755         else
15756                 exit(1);
15757 }
15758 EOCP
15759 set isascii
15760 if eval $compile; then
15761         echo "isascii() found." >&4
15762         val="$define"
15763 else
15764         echo "isascii() NOT found." >&4
15765         val="$undef"
15766 fi
15767 set d_isascii
15768 eval $setvar
15769 $rm -f isascii*
15770
15771 : Look for isblank
15772 echo " "
15773 $cat >isblank.c <<'EOCP'
15774 #include <stdio.h>
15775 #include <ctype.h>
15776 int main() {
15777         int c = ' ';
15778         if (isblank(c))
15779                 return 0 ;
15780         else
15781                 return 1 ;
15782 }
15783 EOCP
15784 if $cc $ccflags $ldflags -o isblank isblank.c $libs >/dev/null 2>&1 ; then
15785         echo "isblank() found." >&4
15786         val="$define"
15787 else
15788         echo "isblank() NOT found." >&4
15789         val="$undef"
15790 fi
15791 set d_isblank
15792 eval $setvar
15793 $rm -f isblank*
15794
15795 : check for isfinite
15796 echo "Checking to see if you have isfinite..." >&4
15797 $cat >try.c <<EOCP
15798 #$i_math I_MATH
15799 #ifdef I_MATH
15800 #include <math.h>
15801 #endif
15802 int main() { return isfinite(0.0); }
15803 EOCP
15804 set try
15805 if eval $compile; then
15806         val="$define"
15807         echo "You have isfinite."
15808 else
15809         val="$undef"
15810         echo "You do not have isfinite."
15811 fi
15812 $rm_try
15813 set d_isfinite
15814 eval $setvar
15815
15816 : see if isfinitel exists
15817 set isfinitel d_isfinitel
15818 eval $inlibc
15819
15820 : check for isinf
15821 echo "Checking to see if you have isinf..." >&4
15822 $cat >try.c <<EOCP
15823 #$i_math I_MATH
15824 #ifdef I_MATH
15825 #include <math.h>
15826 #endif
15827 int main() { return isinf(0.0); }
15828 EOCP
15829 set try
15830 if eval $compile; then
15831         val="$define"
15832         echo "You have isinf."
15833 else
15834         val="$undef"
15835         echo "You do not have isinf."
15836 fi
15837 $rm_try
15838 set d_isinf
15839 eval $setvar
15840
15841 : see if isinfl exists
15842 set isinfl d_isinfl
15843 eval $inlibc
15844
15845 : check for isless
15846 echo "Checking to see if you have isless..." >&4
15847 $cat >try.c <<EOCP
15848 #$i_math I_MATH
15849 #ifdef I_MATH
15850 #include <math.h>
15851 #endif
15852 int main() { return isless(0.0); }
15853 EOCP
15854 set try
15855 if eval $compile; then
15856         val="$define"
15857         echo "You have isless."
15858 else
15859         val="$undef"
15860         echo "You do not have isless."
15861 fi
15862 $rm_try
15863 set d_isless
15864 eval $setvar
15865
15866 : check for isnan
15867 echo "Checking to see if you have isnan..." >&4
15868 $cat >try.c <<EOCP
15869 #$i_math I_MATH
15870 #ifdef I_MATH
15871 #include <math.h>
15872 #endif
15873 int main() { return isnan(0.0); }
15874 EOCP
15875 set try
15876 if eval $compile; then
15877         val="$define"
15878         echo "You have isnan."
15879 else
15880         val="$undef"
15881         echo "You do not have isnan."
15882 fi
15883 $rm_try
15884 set d_isnan
15885 eval $setvar
15886
15887 : see if isnanl exists
15888 set isnanl d_isnanl
15889 eval $inlibc
15890
15891 : check for isnormal
15892 echo "Checking to see if you have isnormal..." >&4
15893 $cat >try.c <<EOCP
15894 #$i_math I_MATH
15895 #ifdef I_MATH
15896 #include <math.h>
15897 #endif
15898 int main() { return isnormal(0.0); }
15899 EOCP
15900 set try
15901 if eval $compile; then
15902         val="$define"
15903         echo "You have isnormal."
15904 else
15905         val="$undef"
15906         echo "You do not have isnormal."
15907 fi
15908 $rm_try
15909 set d_isnormal
15910 eval $setvar
15911
15912 : see if j0 exists
15913 set j0 d_j0
15914 eval $inlibc
15915
15916 : see if j0l exists
15917 set j0l d_j0l
15918 eval $inlibc
15919
15920 : see if killpg exists
15921 set killpg d_killpg
15922 eval $inlibc
15923
15924 : see if localeconv exists
15925 set localeconv d_locconv
15926 eval $inlibc
15927
15928 : see if libc has the POSIX.1-2008 currency locale rules
15929 case "$d_locconv:$d_lc_monetary_2008" in
15930 $define:)
15931         $cat >try.c <<EOCP
15932 #include <locale.h>
15933 int main() {
15934         struct lconv *lc = localeconv();
15935         char int_p_cs_precedes = lc->int_p_cs_precedes;
15936         return 0;
15937 }
15938 EOCP
15939         set try
15940         if eval $compile; then
15941                 d_lc_monetary_2008="$define"
15942         else
15943                 d_lc_monetary_2008="$undef"
15944         fi;
15945         $rm_try
15946         ;;
15947 esac
15948
15949 : see if lchown exists
15950 echo " "
15951 $cat > try.c <<'EOCP'
15952 /* System header to define __stub macros and hopefully few prototypes,
15953     which can conflict with char lchown(); below.  */
15954 #include <assert.h>
15955 /* Override any gcc2 internal prototype to avoid an error.  */
15956 /* We use char because int might match the return type of a gcc2
15957    builtin and then its argument prototype would still apply.  */
15958 char lchown();
15959 int main() {
15960     /*  The GNU C library defines this for functions which it implements
15961         to always fail with ENOSYS.  Some functions are actually named
15962         something starting with __ and the normal name is an alias.  */
15963 #if defined (__stub_lchown) || defined (__stub___lchown)
15964 choke me
15965 #else
15966 lchown();
15967 #endif
15968 ; return 0; }
15969 EOCP
15970 set try
15971 if eval $compile; then
15972     $echo "lchown() found." >&4
15973     val="$define"
15974 else
15975     $echo "lchown() NOT found." >&4
15976     val="$undef"
15977 fi
15978 set d_lchown
15979 eval $setvar
15980
15981 : See if number of significant digits in a double precision number is known
15982 echo " "
15983 $cat >ldbl_dig.c <<EOM
15984 #$i_limits I_LIMITS
15985 #$i_float I_FLOAT
15986 #ifdef I_LIMITS
15987 #include <limits.h>
15988 #endif
15989 #ifdef I_FLOAT
15990 #include <float.h>
15991 #endif
15992 #ifdef LDBL_DIG
15993 printf("Contains LDBL_DIG");
15994 #endif
15995 EOM
15996 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
15997 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
15998         echo "LDBL_DIG found." >&4
15999         val="$define"
16000 else
16001         echo "LDBL_DIG NOT found." >&4
16002         val="$undef"
16003 fi
16004 $rm -f ldbl_dig.?
16005 set d_ldbl_dig
16006 eval $setvar
16007
16008 : see if lgamma exists
16009 set lgamma d_lgamma
16010 eval $inlibc
16011
16012 : see if lgamma_r exists
16013 set lgamma_r d_lgamma_r
16014 eval $inlibc
16015
16016 : check to see if math.h defines _LIB_VERSION
16017 d_libm_lib_version="$undef"
16018 case $i_math in
16019     $define)
16020         echo " "
16021         echo "Checking to see if your libm supports _LIB_VERSION..." >&4
16022         $cat >try.c <<EOCP
16023 #include <unistd.h>
16024 #include <math.h>
16025 int main (int argc, char *argv[])
16026 {
16027     printf ("%d\n", _LIB_VERSION);
16028     return (0);
16029     } /* main */
16030 EOCP
16031         set try
16032         if eval $compile; then
16033             foo=`$run ./try`
16034             echo "Yes, it does ($foo)" >&4
16035             d_libm_lib_version="$define"
16036         else
16037             echo "No, it does not (probably harmless)" >&4
16038             fi
16039         $rm_try
16040         ;;
16041
16042     esac
16043
16044 : see if link exists
16045 set link d_link
16046 eval $inlibc
16047
16048 : see if llrint exists
16049 set llrint d_llrint
16050 eval $inlibc
16051
16052 : see if llrintl exists
16053 set llrintl d_llrintl
16054 eval $inlibc
16055
16056 : see if llround exists
16057 set llround d_llround
16058 eval $inlibc
16059
16060 : see if llroundl exists
16061 set llroundl d_llroundl
16062 eval $inlibc
16063
16064 : see if localtime_r exists
16065 set localtime_r d_localtime_r
16066 eval $inlibc
16067 case "$d_localtime_r" in
16068 "$define")
16069         hdrs="$i_systypes sys/types.h define stdio.h $i_time time.h $i_systime sys/time.h"
16070         case "$d_localtime_r_proto:$usethreads" in
16071         ":define")      d_localtime_r_proto=define
16072                 set d_localtime_r_proto localtime_r $hdrs
16073                 eval $hasproto ;;
16074         *)      ;;
16075         esac
16076         case "$d_localtime_r_proto" in
16077         define)
16078         case "$localtime_r_proto" in
16079         ''|0) try='struct tm* localtime_r(const time_t*, struct tm*);'
16080         ./protochk "$extern_C $try" $hdrs && localtime_r_proto=S_TS ;;
16081         esac
16082         case "$localtime_r_proto" in
16083         ''|0) try='int localtime_r(const time_t*, struct tm*);'
16084         ./protochk "$extern_C $try" $hdrs && localtime_r_proto=I_TS ;;
16085         esac
16086         case "$localtime_r_proto" in
16087         ''|0)   d_localtime_r=undef
16088                 localtime_r_proto=0
16089                 echo "Disabling localtime_r, cannot determine prototype." >&4 ;;
16090         * )     case "$localtime_r_proto" in
16091                 REENTRANT_PROTO*) ;;
16092                 *) localtime_r_proto="REENTRANT_PROTO_$localtime_r_proto" ;;
16093                 esac
16094                 echo "Prototype: $try" ;;
16095         esac
16096         ;;
16097         *)      case "$usethreads" in
16098                 define) echo "localtime_r has no prototype, not using it." >&4 ;;
16099                 esac
16100                 d_localtime_r=undef
16101                 localtime_r_proto=0
16102                 ;;
16103         esac
16104         ;;
16105 *)      localtime_r_proto=0
16106         ;;
16107 esac
16108
16109 : see if localtime_r calls tzset
16110 case "$localtime_r_proto" in
16111 REENTRANT_PROTO*)
16112         $cat >try.c <<EOCP
16113 /*  Does our libc's localtime_r call tzset ?
16114  *  return 0 if so, 1 otherwise.
16115  */
16116 #$i_systypes    I_SYS_TYPES
16117 #$i_unistd      I_UNISTD
16118 #$i_time        I_TIME
16119 #$i_stdlib      I_STDLIB
16120 #$i_string      I_STRING
16121 #$i_malloc      I_MALLOC
16122 #ifdef I_SYS_TYPES
16123 #  include <sys/types.h>
16124 #endif
16125 #ifdef I_UNISTD
16126 #  include <unistd.h>
16127 #endif
16128 #ifdef I_TIME
16129 #  include <time.h>
16130 #endif
16131 #ifdef I_STDLIB
16132 #include <stdlib.h>
16133 #endif
16134 #ifdef I_STRING
16135 #  include <string.h>
16136 #else
16137 #  include <strings.h>
16138 #endif
16139 #ifdef I_MALLOC
16140 #  include <malloc.h>
16141 #endif
16142 int main()
16143 {
16144     time_t t = time(0L);
16145     char w_tz[]="TZ" "=GMT+5",
16146          e_tz[]="TZ" "=GMT-5",
16147         *tz_e = (char*)malloc(16),
16148         *tz_w = (char*)malloc(16);
16149     struct tm tm_e, tm_w;
16150     memset(&tm_e,'\0',sizeof(struct tm));
16151     memset(&tm_w,'\0',sizeof(struct tm));
16152     strcpy(tz_e,e_tz);
16153     strcpy(tz_w,w_tz);
16154
16155     putenv(tz_e);
16156     localtime_r(&t, &tm_e);
16157
16158     putenv(tz_w);
16159     localtime_r(&t, &tm_w);
16160
16161     if( memcmp(&tm_e, &tm_w, sizeof(struct tm)) == 0 )
16162         return 1;
16163     return 0;
16164 }
16165 EOCP
16166         set try
16167         if eval $compile; then
16168             if $run ./try; then
16169                 d_localtime_r_needs_tzset=undef;
16170             else
16171                 d_localtime_r_needs_tzset=define;
16172             fi;
16173         else
16174             d_localtime_r_needs_tzset=undef;
16175         fi;
16176      ;;
16177   *)
16178      d_localtime_r_needs_tzset=undef;
16179      ;;
16180 esac
16181 $rm_try
16182
16183 : see if lockf exists
16184 set lockf d_lockf
16185 eval $inlibc
16186
16187 : see if log1p exists
16188 set log1p d_log1p
16189 eval $inlibc
16190
16191 : see if log2 exists
16192 set log2 d_log2
16193 eval $inlibc
16194
16195 : see if logb exists
16196 set logb d_logb
16197 eval $inlibc
16198
16199 : see if lrint exists
16200 set lrint d_lrint
16201 eval $inlibc
16202
16203 : see if lrintl exists
16204 set lrintl d_lrintl
16205 eval $inlibc
16206
16207 : see if lround exists
16208 set lround d_lround
16209 eval $inlibc
16210
16211 : see if lroundl exists
16212 set lroundl d_lroundl
16213 eval $inlibc
16214
16215 : see if prototype for lseek is available
16216 echo " "
16217 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
16218 eval $hasproto
16219
16220 : see if lstat exists
16221 set lstat d_lstat
16222 eval $inlibc
16223
16224 : see if madvise exists
16225 set madvise d_madvise
16226 eval $inlibc
16227
16228 : see if malloc_size exists
16229 set malloc_size d_malloc_size
16230 eval $inlibc
16231
16232 : see if malloc_size_good exists
16233 set malloc_good_size d_malloc_good_size
16234 eval $inlibc
16235
16236 : see if mblen exists
16237 set mblen d_mblen
16238 eval $inlibc
16239
16240 : see if mbstowcs exists
16241 set mbstowcs d_mbstowcs
16242 eval $inlibc
16243
16244 : see if mbtowc exists
16245 set mbtowc d_mbtowc
16246 eval $inlibc
16247
16248 : see if memchr exists
16249 set memchr d_memchr
16250 eval $inlibc
16251
16252 : see if memcmp exists
16253 set memcmp d_memcmp
16254 eval $inlibc
16255
16256 : see if memcpy exists
16257 set memcpy d_memcpy
16258 eval $inlibc
16259
16260 : see if memmove exists
16261 set memmove d_memmove
16262 eval $inlibc
16263
16264 : see if memset exists
16265 set memset d_memset
16266 eval $inlibc
16267
16268 : see if mkdir exists
16269 set mkdir d_mkdir
16270 eval $inlibc
16271
16272 : see if mkdtemp exists
16273 set mkdtemp d_mkdtemp
16274 eval $inlibc
16275
16276 : see if mkfifo exists
16277 set mkfifo d_mkfifo
16278 eval $inlibc
16279
16280 : see if mkstemp exists
16281 set mkstemp d_mkstemp
16282 eval $inlibc
16283
16284 : see if mkstemps exists
16285 set mkstemps d_mkstemps
16286 eval $inlibc
16287
16288 : see if mktime exists
16289 set mktime d_mktime
16290 eval $inlibc
16291
16292 : see if this is a sys/mman.h system
16293 set sys/mman.h i_sysmman
16294 eval $inhdr
16295
16296 : see if mmap exists
16297 set mmap d_mmap
16298 eval $inlibc
16299 : see what shmat returns
16300 : default to something harmless
16301 mmaptype='void *'
16302 case "$i_sysmman$d_mmap" in
16303 "$define$define")
16304         $cat >mmap.c <<'END'
16305 #include <sys/mman.h>
16306 void *mmap();
16307 END
16308         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
16309                 mmaptype='void *'
16310         else
16311                 mmaptype='caddr_t'
16312         fi
16313         echo "and it returns ($mmaptype)." >&4
16314         ;;
16315 esac
16316
16317
16318
16319 : see if sqrtl exists
16320 set sqrtl d_sqrtl
16321 eval $inlibc
16322
16323 : see if scalbnl exists
16324 set scalbnl d_scalbnl
16325 eval $inlibc
16326
16327 : see if truncl exists
16328 set truncl d_truncl
16329 eval $inlibc
16330
16331 : see if modfl exists
16332 set modfl d_modfl
16333 eval $inlibc
16334
16335 : see if prototype for modfl is available
16336 echo " "
16337 set d_modflproto modfl $i_math math.h
16338 eval $hasproto
16339
16340 d_modfl_pow32_bug="$undef"
16341
16342 case "$d_longdbl$d_modfl" in
16343 $define$define)
16344         $cat <<EOM
16345 Checking to see whether your modfl() is okay for large values...
16346 EOM
16347 $cat >try.c <<EOCP
16348 #include <math.h>
16349 #include <stdio.h>
16350 EOCP
16351 if $test "X$d_modflproto" != "X$define"; then
16352         $cat >>try.c <<EOCP
16353 /* Sigh. many current glibcs provide the function, but do not prototype it. */
16354 long double modfl (long double, long double *);
16355 EOCP
16356 fi
16357 $cat >>try.c <<EOCP
16358 int main() {
16359     long double nv = 4294967303.15;
16360     long double v, w;
16361     v = modfl(nv, &w);
16362 #ifdef __GLIBC__
16363     printf("glibc");
16364 #endif
16365     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
16366     return 0;
16367 }
16368 EOCP
16369         case "$osname:$gccversion" in
16370         aix:)   saveccflags="$ccflags"
16371                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
16372         esac
16373         set try
16374         if eval $compile; then
16375                 foo=`$run ./try`
16376                 case "$foo" in
16377                 *" 4294967303.150000 1.150000 4294967302.000000")
16378                         echo >&4 "Your modfl() is broken for large values."
16379                         d_modfl_pow32_bug="$define"
16380                         case "$foo" in
16381                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
16382                         ;;
16383                         esac
16384                         ;;
16385                 *" 4294967303.150000 0.150000 4294967303.000000")
16386                         echo >&4 "Your modfl() seems okay for large values."
16387                         ;;
16388                 *)      echo >&4 "I don't understand your modfl() at all."
16389                         d_modfl="$undef"
16390                         ;;
16391                 esac
16392                 $rm_try
16393         else
16394                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
16395                 d_modfl="$undef"
16396         fi
16397         case "$osname:$gccversion" in
16398         aix:)   ccflags="$saveccflags" ;; # restore
16399         esac
16400         ;;
16401 esac
16402
16403 if $test "$uselongdouble" = "$define"; then
16404     message=""
16405     if $test "$d_sqrtl" != "$define"; then
16406         message="$message sqrtl"
16407     fi
16408     if $test "$d_modfl" != "$define"; then
16409         if $test "$d_truncl:$d_copysignl" = "$define:$define"; then
16410             echo "You have both truncl and copysignl, so I can emulate modfl."
16411         else
16412             if $test "$d_aintl:$d_copysignl" = "$define:$define"; then
16413                 echo "You have both aintl and copysignl, so I can emulate modfl."
16414             else
16415                 message="$message modfl"
16416             fi
16417         fi
16418     fi
16419     if $test "$d_frexpl" != "$define"; then
16420         if $test "$d_ilogbl:$d_scalbnl" = "$define:$define"; then
16421             echo "You have both ilogbl and scalbnl, so I can emulate frexpl."
16422         else
16423             message="$message frexpl"
16424         fi
16425     fi
16426     if $test "$d_ldexpl" != "$define"; then
16427         message="$message ldexpl"
16428     fi
16429
16430     if $test "$message" != ""; then
16431         $cat <<EOM >&4
16432
16433 *** You requested the use of long doubles but you do not seem to have
16434 *** the following mathematical functions needed for long double support:
16435 ***    $message
16436 *** Please rerun Configure without -Duselongdouble and/or -Dusemorebits.
16437 *** Cannot continue, aborting.
16438
16439 EOM
16440
16441         exit 1
16442     fi
16443 fi
16444
16445 : see if mprotect exists
16446 set mprotect d_mprotect
16447 eval $inlibc
16448
16449 : see if msgctl exists
16450 set msgctl d_msgctl
16451 eval $inlibc
16452
16453 : see if msgget exists
16454 set msgget d_msgget
16455 eval $inlibc
16456
16457 : see if msgsnd exists
16458 set msgsnd d_msgsnd
16459 eval $inlibc
16460
16461 : see if msgrcv exists
16462 set msgrcv d_msgrcv
16463 eval $inlibc
16464
16465 : see how much of the 'msg*(2)' library is present.
16466 h_msg=true
16467 echo " "
16468 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
16469 *"$undef"*) h_msg=false;;
16470 esac
16471 case "$osname" in
16472 freebsd)
16473     case "`ipcs 2>&1`" in
16474     "SVID messages"*"not configured"*)
16475         echo "Your $osname does not have the msg*(2) configured." >&4
16476         h_msg=false
16477         val="$undef"
16478         set msgctl d_msgctl
16479         eval $setvar
16480         set msgget d_msgget
16481         eval $setvar
16482         set msgsnd d_msgsnd
16483         eval $setvar
16484         set msgrcv d_msgrcv
16485         eval $setvar
16486         ;;
16487     esac
16488     ;;
16489 esac
16490 : we could also check for sys/ipc.h ...
16491 if $h_msg && $test `./findhdr sys/msg.h`; then
16492         echo "You have the full msg*(2) library." >&4
16493         val="$define"
16494 else
16495         echo "You don't have the full msg*(2) library." >&4
16496         val="$undef"
16497 fi
16498 set d_msg
16499 eval $setvar
16500
16501 : Check for msghdr_s
16502 echo " "
16503 echo "Checking to see if your system supports struct msghdr..." >&4
16504 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
16505 eval $hasstruct
16506 case "$d_msghdr_s" in
16507 "$define")      echo "Yes, it does."   ;;
16508 *)              echo "No, it doesn't." ;;
16509 esac
16510
16511
16512 : see if msync exists
16513 set msync d_msync
16514 eval $inlibc
16515
16516 : see if munmap exists
16517 set munmap d_munmap
16518 eval $inlibc
16519
16520 : see if nan exists
16521 set nan d_nan
16522 eval $inlibc
16523
16524 : see if nearbyint exists
16525 set nearbyint d_nearbyint
16526 eval $inlibc
16527
16528 : see if nextafter exists
16529 set nextafter d_nextafter
16530 eval $inlibc
16531
16532 : see if nexttoward exists
16533 set nexttoward d_nexttoward
16534 eval $inlibc
16535
16536 : see if nice exists
16537 set nice d_nice
16538 eval $inlibc
16539
16540 : see if this is a langinfo.h system
16541 set langinfo.h i_langinfo
16542 eval $inhdr
16543
16544 : see if nl_langinfo exists
16545 set nl_langinfo d_nl_langinfo
16546 eval $inlibc
16547
16548 : see if this is a quadmath.h system
16549 set quadmath.h i_quadmath
16550 eval $inhdr
16551
16552 : check for volatile keyword
16553 echo " "
16554 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
16555 $cat >try.c <<'EOCP'
16556 int main()
16557 {
16558         typedef struct _goo_struct goo_struct;
16559         goo_struct * volatile goo = ((goo_struct *)0);
16560         struct _goo_struct {
16561                 long long_int;
16562                 int reg_int;
16563                 char char_var;
16564         };
16565         typedef unsigned short foo_t;
16566         char *volatile foo;
16567         volatile int bar;
16568         volatile foo_t blech;
16569         foo = foo;
16570 }
16571 EOCP
16572 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
16573         val="$define"
16574         echo "Yup, it does."
16575 else
16576         val="$undef"
16577         echo "Nope, it doesn't."
16578 fi
16579 set d_volatile
16580 eval $setvar
16581 $rm_try
16582
16583 : Check basic sizes
16584 echo " "
16585 $echo "Choosing the C types to be used for Perl's internal types..." >&4
16586
16587 case "$use64bitint:$d_quad:$quadtype" in
16588 define:define:?*)
16589         ivtype="$quadtype"
16590         uvtype="$uquadtype"
16591         ivsize=8
16592         uvsize=8
16593         ;;
16594 *)      ivtype="long"
16595         uvtype="unsigned long"
16596         ivsize=$longsize
16597         uvsize=$longsize
16598         ;;
16599 esac
16600
16601 case "$uselongdouble:$d_longdbl" in
16602 define:define)
16603         nvtype="long double"
16604         nvsize=$longdblsize
16605         ;;
16606 *)      nvtype=double
16607         nvsize=$doublesize
16608         ;;
16609 esac
16610
16611 case "$usequadmath:$i_quadmath" in
16612 define:define)
16613   nvtype="__float128"
16614   nvsize=16
16615   case "$libs" in
16616   *quadmath*) ;;
16617   *) $cat <<EOM >&4
16618
16619 *** You requested the use of the quadmath library, but you
16620 *** do not seem to have the quadmath library installed.
16621 *** Cannot continue, aborting.
16622 EOM
16623     exit 1
16624     ;;
16625   esac
16626   ;;
16627 define:*) $cat <<EOM >&4
16628
16629 *** You requested the use of the quadmath library, but you
16630 *** do not seem to have the required header, <quadmath.h>.
16631 EOM
16632   case "$gccversion" in
16633   [23].*|4.[0-5]*)
16634    $cat <<EOM >&4
16635 *** Your gcc looks a bit old:
16636 *** $gccversion
16637 EOM
16638     ;;
16639   '')
16640    $cat <<EOM >&4
16641 *** You are not running a gcc.
16642 EOM
16643     ;;
16644   esac
16645   $cat <<EOM >&4
16646 *** For the quadmath library you need at least gcc 4.6.
16647 *** Cannot continue, aborting.
16648 EOM
16649   exit 1
16650   ;;
16651 esac
16652
16653 $echo "(IV will be "$ivtype", $ivsize bytes)"
16654 $echo "(UV will be "$uvtype", $uvsize bytes)"
16655 $echo "(NV will be "$nvtype", $nvsize bytes)"
16656
16657 $cat >try.c <<EOCP
16658 #$i_inttypes I_INTTYPES
16659 #ifdef I_INTTYPES
16660 #include <inttypes.h>
16661 #endif
16662 #include <stdio.h>
16663 int main() {
16664 #ifdef INT8
16665    int8_t i =  INT8_MAX;
16666   uint8_t u = UINT8_MAX;
16667   printf("int8_t\n");
16668 #endif
16669 #ifdef INT16
16670    int16_t i =  INT16_MAX;
16671   uint16_t u = UINT16_MAX;
16672   printf("int16_t\n");
16673 #endif
16674 #ifdef INT32
16675    int32_t i =  INT32_MAX;
16676   uint32_t u = UINT32_MAX;
16677   printf("int32_t\n");
16678 #endif
16679 }
16680 EOCP
16681
16682 i8type="signed char"
16683 u8type="unsigned char"
16684 i8size=1
16685 u8size=1
16686
16687 case "$i16type" in
16688 '')     case "$shortsize" in
16689         2)      i16type=short
16690                 u16type="unsigned short"
16691                 i16size=$shortsize
16692                 u16size=$shortsize
16693                 ;;
16694         esac
16695         ;;
16696 esac
16697 case "$i16type" in
16698 '')     set try -DINT16
16699         if eval $compile; then
16700                 case "`$run ./try`" in
16701                 int16_t)
16702                         i16type=int16_t
16703                         u16type=uint16_t
16704                         i16size=2
16705                         u16size=2
16706                         ;;
16707                 esac
16708         fi
16709         ;;
16710 esac
16711 case "$i16type" in
16712 '')     if $test $shortsize -ge 2; then
16713                 i16type=short
16714                 u16type="unsigned short"
16715                 i16size=$shortsize
16716                 u16size=$shortsize
16717         fi
16718         ;;
16719 esac
16720
16721 case "$i32type" in
16722 '')     case "$longsize" in
16723         4)      i32type=long
16724                 u32type="unsigned long"
16725                 i32size=$longsize
16726                 u32size=$longsize
16727                 ;;
16728         *)      case "$intsize" in
16729                 4)      i32type=int
16730                         u32type="unsigned int"
16731                         i32size=$intsize
16732                         u32size=$intsize
16733                         ;;
16734                 esac
16735                 ;;
16736         esac
16737         ;;
16738 esac
16739 case "$i32type" in
16740 '')     set try -DINT32
16741         if eval $compile; then
16742                 case "`$run ./try`" in
16743                 int32_t)
16744                         i32type=int32_t
16745                         u32type=uint32_t
16746                         i32size=4
16747                         u32size=4
16748                         ;;
16749                 esac
16750         fi
16751         ;;
16752 esac
16753 case "$i32type" in
16754 '')     if $test $intsize -ge 4; then
16755                 i32type=int
16756                 u32type="unsigned int"
16757                 i32size=$intsize
16758                 u32size=$intsize
16759         fi
16760         ;;
16761 esac
16762
16763 case "$i64type" in
16764 '')     case "$d_quad:$quadtype" in
16765         define:?*)
16766                 i64type="$quadtype"
16767                 u64type="$uquadtype"
16768                 i64size=8
16769                 u64size=8
16770                 ;;
16771         esac
16772         ;;
16773 esac
16774
16775 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
16776 : volatile so that the compiler has to store it out to memory.
16777 if test X"$d_volatile" = X"$define"; then
16778         volatile=volatile
16779 fi
16780 $cat <<EOP >try.c
16781 #include <stdio.h>
16782 #$i_stdlib I_STDLIB
16783 #ifdef I_STDLIB
16784 #include <stdlib.h>
16785 #endif
16786 #include <sys/types.h>
16787 #include <signal.h>
16788 #ifdef SIGFPE
16789 $volatile int bletched = 0;
16790 $signal_t blech(int s) { bletched = 1; }
16791 #endif
16792 int main() {
16793     $uvtype u = 0;
16794     $nvtype d;
16795     int     n = 8 * $uvsize;
16796     int     i;
16797 #ifdef SIGFPE
16798     signal(SIGFPE, blech);
16799 #endif
16800
16801     for (i = 0; i < n; i++) {
16802       u = u << 1 | ($uvtype)1;
16803       d = ($nvtype)u;
16804       if (($uvtype)d != u)
16805         break;
16806       if (d <= 0)
16807         break;
16808       d = ($nvtype)(u - 1);
16809       if (($uvtype)d != (u - 1))
16810         break;
16811 #ifdef SIGFPE
16812       if (bletched)
16813         break;
16814 #endif
16815     }
16816     printf("%d\n", ((i == n) ? -n : i));
16817     exit(0);
16818 }
16819 EOP
16820 set try
16821
16822 d_nv_preserves_uv="$undef"
16823 if eval $compile; then
16824         nv_preserves_uv_bits="`$run ./try`"
16825 fi
16826 case "$nv_preserves_uv_bits" in
16827 \-[1-9]*)
16828         nv_preserves_uv_bits=`expr 0 - $nv_preserves_uv_bits`
16829         $echo "Your NVs can preserve all $nv_preserves_uv_bits bits of your UVs."  2>&1
16830         d_nv_preserves_uv="$define"
16831         ;;
16832 [1-9]*) $echo "Your NVs can preserve only $nv_preserves_uv_bits bits of your UVs."  2>&1
16833         d_nv_preserves_uv="$undef" ;;
16834 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
16835         nv_preserves_uv_bits="0" ;;
16836 esac
16837 $rm_try
16838
16839 $echo "Checking to find the largest integer value your NVs can hold..." >&4
16840 : volatile so that the compiler has to store it out to memory.
16841 if test X"$d_volatile" = X"$define"; then
16842         volatile=volatile
16843 fi
16844 $cat <<EOP >try.c
16845 #include <stdio.h>
16846
16847 typedef $nvtype NV;
16848
16849 int
16850 main() {
16851   NV value = 2;
16852   int count = 1;
16853
16854   while(count < 256) {
16855     $volatile NV up = value + 1.0;
16856     $volatile NV negated = -value;
16857     $volatile NV down = negated - 1.0;
16858     $volatile NV got_up = up - value;
16859     int up_good = got_up == 1.0;
16860     int got_down = down - negated;
16861     int down_good = got_down == -1.0;
16862
16863     if (down_good != up_good) {
16864       fprintf(stderr,
16865               "Inconsistency - up %d %f; down %d %f; for 2**%d (%.20f)\n",
16866               up_good, (double) got_up, down_good, (double) got_down,
16867               count, (double) value);
16868       return 1;
16869     }
16870     if (!up_good) {
16871       while (1) {
16872         if (count > 8) {
16873           count -= 8;
16874           fputs("256.0", stdout);
16875         } else {
16876           count--;
16877           fputs("2.0", stdout);
16878         }
16879         if (!count) {
16880           puts("");
16881           return 0;
16882         }
16883         fputs("*", stdout);
16884       }
16885     }
16886     value *= 2;
16887     ++count;
16888   }
16889   fprintf(stderr, "Cannot overflow integer range, even at 2**%d (%.20f)\n",
16890           count, (double) value);
16891   return 1;
16892 }
16893 EOP
16894 set try
16895
16896 nv_overflows_integers_at='0'
16897 if eval $compile; then
16898     xxx="`$run ./try`"
16899     case "$?" in
16900         0)
16901             case "$xxx" in
16902                 2*)  cat >&4 <<EOM
16903 The largest integer your NVs can preserve is equal to $xxx
16904 EOM
16905                     nv_overflows_integers_at="$xxx"
16906                     ;;
16907                 *)  cat >&4 <<EOM
16908 Cannot determine the largest integer value your NVs can hold, unexpected output
16909 '$xxx'
16910 EOM
16911                     ;;
16912             esac
16913             ;;
16914         *)  cat >&4 <<EOM
16915 Cannot determine the largest integer value your NVs can hold
16916 EOM
16917             ;;
16918     esac
16919 fi
16920 $rm_try
16921
16922 $echo "Checking whether NV 0.0 is all bits zero in memory..." >&4
16923 : volatile so that the compiler has to store it out to memory.
16924 if test X"$d_volatile" = X"$define"; then
16925         volatile=volatile
16926 fi
16927 $cat <<EOP >try.c
16928 #include <stdio.h>
16929 #$i_stdlib I_STDLIB
16930 #ifdef I_STDLIB
16931 #include <stdlib.h>
16932 #endif
16933 #$i_string I_STRING
16934 #ifdef I_STRING
16935 #  include <string.h>
16936 #else
16937 #  include <strings.h>
16938 #endif
16939 #include <sys/types.h>
16940 #include <signal.h>
16941 #ifdef SIGFPE
16942 $volatile int bletched = 0;
16943 $signal_t blech(int s) { bletched = 1; }
16944 #endif
16945
16946 int checkit($nvtype d, char *where) {
16947     unsigned char *p = (char *)&d;
16948     unsigned char *end = p + sizeof(d);
16949     int fail = 0;
16950
16951     while (p < end)
16952         fail += *p++;
16953
16954     if (!fail)
16955         return 0;
16956
16957     p = (char *)&d;
16958     printf("No - %s: 0x", where);
16959     while (p < end)
16960         printf ("%02X", *p++);
16961     printf("\n");
16962     return 1;
16963 }
16964
16965 int main(int argc, char **argv) {
16966     $nvtype d = 0.0;
16967     int fail = 0;
16968     fail += checkit(d, "0.0");
16969
16970     /* The compiler shouldn't be assuming that bletched is 0  */
16971     d = bletched;
16972
16973     fail += checkit(d, "bleched");
16974
16975 #ifdef SIGFPE
16976     signal(SIGFPE, blech);
16977 #endif
16978
16979     /* Paranoia - the compiler should have no way of knowing that ANSI says
16980        that argv[argc] will always be NULL.  Actually, if it did assume this it
16981        would be buggy, as this is C and main() can be called from elsewhere in
16982        the program.  */
16983     d = argv[argc] ? 1 : 0;
16984
16985     if (d) {
16986         printf("Odd argv[argc]=%p, d=%g\n", argv[argc], d);
16987     }
16988
16989     fail += checkit(d, "ternary");
16990
16991     memset(&d, sizeof(d), argv[argc] ? 1 : 0);
16992
16993     if (d != 0.0) {
16994         printf("No - memset doesn't give 0.0\n");
16995         /* This might just blow up:  */
16996         printf("(gives %g)\n", d);
16997         return 1;
16998     }
16999
17000 #ifdef SIGFPE
17001     if (bletched) {
17002         printf("No - something bleched\n");
17003         return 1;
17004     }
17005 #endif
17006     if (fail) {
17007       printf("No - %d fail(s)\n", fail);
17008       return 1;
17009     }
17010     printf("Yes\n");
17011     return 0;
17012 }
17013 EOP
17014 set try
17015
17016 d_nv_zero_is_allbits_zero="$undef"
17017 if eval $compile; then
17018     xxx="`$run ./try`"
17019     case "$?" in
17020         0)
17021             case "$xxx" in
17022                 Yes)  cat >&4 <<EOM
17023 0.0 is represented as all bits zero in memory
17024 EOM
17025                     d_nv_zero_is_allbits_zero="$define"
17026                     ;;
17027                 *)  cat >&4 <<EOM
17028 0.0 is not represented as all bits zero in memory
17029 EOM
17030                     d_nv_zero_is_allbits_zero="$undef"
17031                     ;;
17032             esac
17033             ;;
17034         *)  cat >&4 <<EOM
17035 0.0 is not represented as all bits zero in memory
17036 EOM
17037             d_nv_zero_is_allbits_zero="$undef"
17038             ;;
17039     esac
17040 fi
17041 $rm_try
17042
17043 : check for off64_t
17044 echo " "
17045 echo "Checking to see if you have off64_t..." >&4
17046 $cat >try.c <<EOCP
17047 #include <sys/types.h>
17048 #include <unistd.h>
17049 int main() { off64_t x = 7; }
17050 EOCP
17051 set try
17052 if eval $compile; then
17053         val="$define"
17054         echo "You have off64_t."
17055 else
17056         val="$undef"
17057         echo "You do not have off64_t."
17058         case "$lseeksize" in
17059         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
17060         esac
17061 fi
17062 $rm_try
17063 set d_off64_t
17064 eval $setvar
17065
17066 : how to create joinable pthreads
17067 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
17068         echo " "
17069         echo "Checking what constant to use for creating joinable pthreads..." >&4
17070         $cat >try.c <<'EOCP'
17071 #include <pthread.h>
17072 int main() {
17073     int detachstate = JOINABLE;
17074 }
17075 EOCP
17076         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
17077         if eval $compile; then
17078                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
17079                 val="$undef" # Yes, undef.
17080                 set d_old_pthread_create_joinable
17081                 eval $setvar
17082                 val=""
17083                 set old_pthread_create_joinable
17084                 eval $setvar
17085         else
17086                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
17087                 if eval $compile; then
17088                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
17089                         val="$define"
17090                         set d_old_pthread_create_joinable
17091                         eval $setvar
17092                         val=PTHREAD_CREATE_UNDETACHED
17093                         set old_pthread_create_joinable
17094                         eval $setvar
17095                 else
17096                         set try -DJOINABLE=__UNDETACHED
17097                         if eval $compile; then
17098                                 echo "You seem to use __UNDETACHED." >&4
17099                                 val="$define"
17100                                 set d_old_pthread_create_joinable
17101                                 eval $setvar
17102                                 val=__UNDETACHED
17103                                 set old_pthread_create_joinable
17104                                 eval $setvar
17105                         else
17106                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
17107                                 val="$define"
17108                                 set d_old_pthread_create_joinable
17109                                 eval $setvar
17110                                 val=0
17111                                 set old_pthread_create_joinable
17112                                 eval $setvar
17113                         fi
17114                 fi
17115         fi
17116         $rm_try
17117 else
17118     d_old_pthread_create_joinable="$undef"
17119     old_pthread_create_joinable=""
17120 fi
17121
17122 : see if pause exists
17123 set pause d_pause
17124 eval $inlibc
17125
17126 : see if poll exists
17127 set poll d_poll
17128 eval $inlibc
17129
17130 : see if prctl exists
17131 set prctl d_prctl
17132 eval $inlibc
17133
17134 : see if prctl supports PR_SET_NAME
17135 d_prctl_set_name=$undef
17136 case $d_prctl in
17137     $define)
17138         $cat >try.c <<EOM
17139 #ifdef __ANDROID__
17140 #include <unistd.h>
17141 #endif
17142 #include <sys/prctl.h>
17143
17144 int main (int argc, char *argv[])
17145 {
17146     return (prctl (PR_SET_NAME, "Test"));
17147     } /* main */
17148 EOM
17149         set try
17150         if eval $compile_ok && $run ./try; then
17151             echo "Your prctl (PR_SET_NAME, ...) works"
17152             d_prctl_set_name=$define
17153             fi
17154         $rm_try
17155         ;;
17156     esac
17157
17158 : see if readlink exists
17159 set readlink d_readlink
17160 eval $inlibc
17161
17162 : Check if exe is symlink to abs path of executing program
17163 echo " "
17164 procselfexe=''
17165 val="$undef"
17166 case "$d_procselfexe" in
17167 '')
17168 case "$d_readlink" in
17169     "$define")
17170         : NetBSD first as /proc/self is a symlink to /proc/curproc, and it feels
17171         : more tidy to avoid an extra level of symlink
17172         set NetBSD /proc/curproc/exe Linux /proc/self/exe FreeBSD /proc/curproc/file Solaris /proc/self/path/a.out
17173         while test $# -gt 0; do
17174             type=$1; try=$2
17175             shift; shift
17176             if $issymlink $try; then
17177                 $ls -l $try > reflect
17178                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
17179                     echo "You have $type-like $try."
17180                     procselfexe='"'$try'"'
17181                     val="$define"
17182                     : This will break out of the loop
17183                     set X; shift
17184                 fi
17185             fi
17186         done
17187         ;;
17188 esac
17189 $rm -f reflect
17190 set d_procselfexe
17191 eval $setvar
17192 ;;
17193 esac
17194
17195 : backward compatibility for d_hvfork
17196 if test X$d_hvfork != X; then
17197         d_vfork="$d_hvfork"
17198         d_hvfork=''
17199 fi
17200 : see if there is a vfork
17201 val=''
17202 set vfork val
17203 eval $inlibc
17204
17205 d_pseudofork=$undef
17206
17207 : Ok, but do we want to use it. vfork is reportedly unreliable in
17208 : perl on Solaris 2.x, and probably elsewhere.
17209 case "$val" in
17210 $define)
17211         echo " "
17212         case "$usevfork" in
17213         false) dflt='n';;
17214         *) dflt='y';;
17215         esac
17216         cat <<'EOM'
17217
17218 Perl can only use a vfork() that doesn't suffer from strict
17219 restrictions on calling functions or modifying global data in
17220 the child.  For example, glibc-2.1 contains such a vfork()
17221 that is unsuitable.  If your system provides a proper fork()
17222 call, chances are that you do NOT want perl to use vfork().
17223
17224 EOM
17225         rp="Do you still want to use vfork()?"
17226         . ./myread
17227         case "$ans" in
17228         y|Y) ;;
17229         *)
17230                 echo "Ok, we won't use vfork()."
17231                 val="$undef"
17232                 ;;
17233         esac
17234         ;;
17235 esac
17236 set d_vfork
17237 eval $setvar
17238 case "$d_vfork" in
17239 $define) usevfork='true';;
17240 *) usevfork='false';;
17241 esac
17242
17243 : see whether the pthread_atfork exists
17244 $cat >try.c <<EOP
17245 #include <pthread.h>
17246 #include <stdio.h>
17247 int main() {
17248 #ifdef  PTHREAD_ATFORK
17249         pthread_atfork(NULL,NULL,NULL);
17250 #endif
17251 }
17252 EOP
17253
17254 : see if pthread_atfork exists
17255 set try -DPTHREAD_ATFORK
17256 if eval $compile; then
17257     val="$define"
17258 else
17259     val="$undef"
17260 fi
17261 case "$usethreads" in
17262 $define)
17263         case "$val" in
17264         $define) echo 'pthread_atfork found.' >&4        ;;
17265         *)       echo 'pthread_atfork NOT found.' >&4    ;;
17266         esac
17267 esac
17268 set d_pthread_atfork
17269 eval $setvar
17270
17271 : see if pthread_attr_setscope exists
17272 set pthread_attr_setscope d_pthread_attr_setscope
17273 eval $inlibc
17274
17275 : see whether the various POSIXish _yields exist
17276 $cat >try.c <<EOP
17277 #include <pthread.h>
17278 #include <stdio.h>
17279 int main() {
17280 #ifdef SCHED_YIELD
17281         sched_yield();
17282 #else
17283 #ifdef PTHREAD_YIELD
17284         pthread_yield();
17285 #else
17286 #ifdef PTHREAD_YIELD_NULL
17287         pthread_yield(NULL);
17288 #endif
17289 #endif
17290 #endif
17291 }
17292 EOP
17293 : see if sched_yield exists
17294 set try -DSCHED_YIELD
17295 if eval $compile; then
17296     val="$define"
17297     sched_yield='sched_yield()'
17298 else
17299     val="$undef"
17300 fi
17301 case "$usethreads" in
17302 $define)
17303         case "$val" in
17304         $define) echo 'sched_yield() found.' >&4        ;;
17305         *)       echo 'sched_yield() NOT found.' >&4    ;;
17306         esac
17307 esac
17308 set d_sched_yield
17309 eval $setvar
17310
17311 : see if pthread_yield exists
17312 set try -DPTHREAD_YIELD
17313 if eval $compile; then
17314     val="$define"
17315     case "$sched_yield" in
17316     '') sched_yield='pthread_yield()' ;;
17317     esac
17318 else
17319     set try -DPTHREAD_YIELD_NULL
17320     if eval $compile; then
17321         val="$define"
17322         case "$sched_yield" in
17323         '') sched_yield='pthread_yield(NULL)' ;;
17324         esac
17325     else
17326         val="$undef"
17327     fi
17328 fi
17329 case "$usethreads" in
17330 $define)
17331         case "$val" in
17332         $define) echo 'pthread_yield() found.' >&4      ;;
17333         *)       echo 'pthread_yield() NOT found.' >&4  ;;
17334         esac
17335         ;;
17336 esac
17337 set d_pthread_yield
17338 eval $setvar
17339 case "$sched_yield" in
17340 '') sched_yield=undef ;;
17341 esac
17342 $rm_try
17343
17344 : check for ptrdiff_t
17345 echo " "
17346 echo "Checking to see if you have ptrdiff_t..." >&4
17347 $cat >try.c <<EOCP
17348 #include <stddef.h>
17349 int main() { ptrdiff_t x = 7; }
17350 EOCP
17351 set try
17352 if eval $compile; then
17353         val="$define"
17354         echo "You have ptrdiff_t."
17355 else
17356         val="$undef"
17357         echo "You do not have ptrdiff_t."
17358 fi
17359 $rm_try
17360 set d_ptrdiff_t
17361 eval $setvar
17362
17363 : see if random_r exists
17364 set random_r d_random_r
17365 eval $inlibc
17366 case "$d_random_r" in
17367 "$define")
17368         hdrs="$i_systypes sys/types.h define stdio.h $i_stdlib stdlib.h"
17369         case "$d_random_r_proto:$usethreads" in
17370         ":define")      d_random_r_proto=define
17371                 set d_random_r_proto random_r $hdrs
17372                 eval $hasproto ;;
17373         *)      ;;
17374         esac
17375         case "$d_random_r_proto" in
17376         define)
17377         case "$random_r_proto" in
17378         ''|0) try='int random_r(int*, struct random_data*);'
17379         ./protochk "$extern_C $try" $hdrs && random_r_proto=I_iS ;;
17380         esac
17381         case "$random_r_proto" in
17382         ''|0) try='int random_r(long*, struct random_data*);'
17383         ./protochk "$extern_C $try" $hdrs && random_r_proto=I_lS ;;
17384         esac
17385         case "$random_r_proto" in
17386         ''|0) try='int random_r(struct random_data*, int32_t*);'
17387         ./protochk "$extern_C $try" $hdrs && random_r_proto=I_St ;;
17388         esac
17389         case "$random_r_proto" in
17390         ''|0)   d_random_r=undef
17391                 random_r_proto=0
17392                 echo "Disabling random_r, cannot determine prototype." >&4 ;;
17393         * )     case "$random_r_proto" in
17394                 REENTRANT_PROTO*) ;;
17395                 *) random_r_proto="REENTRANT_PROTO_$random_r_proto" ;;
17396                 esac
17397                 echo "Prototype: $try" ;;
17398         esac
17399         ;;
17400         *)      case "$usethreads" in
17401                 define) echo "random_r has no prototype, not using it." >&4 ;;
17402                 esac
17403                 d_random_r=undef
17404                 random_r_proto=0
17405                 ;;
17406         esac
17407         ;;
17408 *)      random_r_proto=0
17409         ;;
17410 esac
17411
17412 : see if readdir and friends exist
17413 set readdir d_readdir
17414 eval $inlibc
17415 set seekdir d_seekdir
17416 eval $inlibc
17417 set telldir d_telldir
17418 eval $inlibc
17419 set rewinddir d_rewinddir
17420 eval $inlibc
17421
17422 : see if readdir64_r exists
17423 set readdir64_r d_readdir64_r
17424 eval $inlibc
17425 case "$d_readdir64_r" in
17426 "$define")
17427         hdrs="$i_systypes sys/types.h define stdio.h $i_dirent dirent.h"
17428         case "$d_readdir64_r_proto:$usethreads" in
17429         ":define")      d_readdir64_r_proto=define
17430                 set d_readdir64_r_proto readdir64_r $hdrs
17431                 eval $hasproto ;;
17432         *)      ;;
17433         esac
17434         case "$d_readdir64_r_proto" in
17435         define)
17436         case "$readdir64_r_proto" in
17437         ''|0) try='int readdir64_r(DIR*, struct dirent64*, struct dirent64**);'
17438         ./protochk "$extern_C $try" $hdrs && readdir64_r_proto=I_TSR ;;
17439         esac
17440         case "$readdir64_r_proto" in
17441         ''|0) try='int readdir64_r(DIR*, struct dirent64*);'
17442         ./protochk "$extern_C $try" $hdrs && readdir64_r_proto=I_TS ;;
17443         esac
17444         case "$readdir64_r_proto" in
17445         ''|0)   d_readdir64_r=undef
17446                 readdir64_r_proto=0
17447                 echo "Disabling readdir64_r, cannot determine prototype." >&4 ;;
17448         * )     case "$readdir64_r_proto" in
17449                 REENTRANT_PROTO*) ;;
17450                 *) readdir64_r_proto="REENTRANT_PROTO_$readdir64_r_proto" ;;
17451                 esac
17452                 echo "Prototype: $try" ;;
17453         esac
17454         ;;
17455         *)      case "$usethreads" in
17456                 define) echo "readdir64_r has no prototype, not using it." >&4 ;;
17457                 esac
17458                 d_readdir64_r=undef
17459                 readdir64_r_proto=0
17460                 ;;
17461         esac
17462         ;;
17463 *)      readdir64_r_proto=0
17464         ;;
17465 esac
17466
17467 : see if readdir_r exists
17468 set readdir_r d_readdir_r
17469 eval $inlibc
17470 case "$d_readdir_r" in
17471 "$define")
17472         hdrs="$i_systypes sys/types.h define stdio.h $i_dirent dirent.h"
17473         case "$d_readdir_r_proto:$usethreads" in
17474         ":define")      d_readdir_r_proto=define
17475                 set d_readdir_r_proto readdir_r $hdrs
17476                 eval $hasproto ;;
17477         *)      ;;
17478         esac
17479         case "$d_readdir_r_proto" in
17480         define)
17481         case "$readdir_r_proto" in
17482         ''|0) try='int readdir_r(DIR*, struct dirent*, struct dirent**);'
17483         ./protochk "$extern_C $try" $hdrs && readdir_r_proto=I_TSR ;;
17484         esac
17485         case "$readdir_r_proto" in
17486         ''|0) try='int readdir_r(DIR*, struct dirent*);'
17487         ./protochk "$extern_C $try" $hdrs && readdir_r_proto=I_TS ;;
17488         esac
17489         case "$readdir_r_proto" in
17490         ''|0)   d_readdir_r=undef
17491                 readdir_r_proto=0
17492                 echo "Disabling readdir_r, cannot determine prototype." >&4 ;;
17493         * )     case "$readdir_r_proto" in
17494                 REENTRANT_PROTO*) ;;
17495                 *) readdir_r_proto="REENTRANT_PROTO_$readdir_r_proto" ;;
17496                 esac
17497                 echo "Prototype: $try" ;;
17498         esac
17499         ;;
17500         *)      case "$usethreads" in
17501                 define) echo "readdir_r has no prototype, not using it." >&4 ;;
17502                 esac
17503                 d_readdir_r=undef
17504                 readdir_r_proto=0
17505                 ;;
17506         esac
17507         ;;
17508 *)      readdir_r_proto=0
17509         ;;
17510 esac
17511
17512 : see if readv exists
17513 set readv d_readv
17514 eval $inlibc
17515
17516 : see if recvmsg exists
17517 set recvmsg d_recvmsg
17518 eval $inlibc
17519
17520 : see if regcomp, regcmp, or re_comp exist, for regular pattern matching
17521 echo " "
17522 if set regcomp val -f d_regcomp; eval $csym; $val; then
17523         echo 'regcomp() found.' >&4
17524         d_regcomp="$define"
17525         d_regcmp="$undef"
17526         d_re_comp="$undef"
17527 elif set regcmp val -f d_regcmp; eval $csym; $val; then
17528         echo 'regcmp() found.' >&4
17529         d_regcmp="$define"
17530         d_regcomp="$undef"
17531         d_re_comp="$undef"
17532 elif set re_comp val -f d_re_comp; eval $csym; $val; then
17533         echo 're_comp() found, assuming re_exec() also exists.' >&4
17534         d_re_comp="$define"
17535         d_regcomp="$undef"
17536         d_regcmp="$undef"
17537 else
17538         $cat >&4 <<EOM
17539 No regcomp(), regcmp() nor re_comp() found !! No regular pattern matching.
17540 EOM
17541         d_regcmp="$undef"
17542         d_re_comp="$undef"
17543         d_regcomp="$undef"
17544 fi
17545
17546 : see if remainder exists
17547 set remainder d_remainder
17548 eval $inlibc
17549
17550 : see if remquo exists
17551 set remquo d_remquo
17552 eval $inlibc
17553
17554 : see if rename exists
17555 set rename d_rename
17556 eval $inlibc
17557
17558 : see if rint exists
17559 set rint d_rint
17560 eval $inlibc
17561
17562 : see if rmdir exists
17563 set rmdir d_rmdir
17564 eval $inlibc
17565
17566 : see if round exists
17567 set round d_round
17568 eval $inlibc
17569
17570 : see if memory.h is available.
17571 val=''
17572 set memory.h val
17573 eval $inhdr
17574
17575 : See if it conflicts with string.h
17576 case "$val" in
17577 $define)
17578         case "$strings" in
17579         '') ;;
17580         *)
17581                 $cppstdin $cppflags $cppminus < $strings > mem.h
17582                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
17583                         echo " "
17584                         echo "We won't be including <memory.h>."
17585                         val="$undef"
17586                 fi
17587                 $rm -f mem.h
17588                 ;;
17589         esac
17590 esac
17591 set i_memory
17592 eval $setvar
17593
17594 : can bcopy handle overlapping blocks?
17595 echo " "
17596 val="$undef"
17597 case "$d_memmove" in
17598 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
17599 *)      case "$d_bcopy" in
17600         "$define")
17601                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
17602                 $cat >try.c <<EOCP
17603 #$i_memory I_MEMORY
17604 #$i_stdlib I_STDLIB
17605 #$i_string I_STRING
17606 #$i_unistd I_UNISTD
17607 EOCP
17608         $cat >>try.c <<'EOCP'
17609 #include <stdio.h>
17610 #ifdef I_MEMORY
17611 #  include <memory.h>
17612 #endif
17613 #ifdef I_STDLIB
17614 #  include <stdlib.h>
17615 #endif
17616 #ifdef I_STRING
17617 #  include <string.h>
17618 #else
17619 #  include <strings.h>
17620 #endif
17621 #ifdef I_UNISTD
17622 #  include <unistd.h>  /* Needed for NetBSD */
17623 #endif
17624 int main()
17625 {
17626 char buf[128], abc[128];
17627 char *b;
17628 int len;
17629 int off;
17630 int align;
17631
17632 /* Copy "abcde..." string to char abc[] so that gcc doesn't
17633    try to store the string in read-only memory. */
17634 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
17635
17636 for (align = 7; align >= 0; align--) {
17637         for (len = 36; len; len--) {
17638                 b = buf+align;
17639                 bcopy(abc, b, len);
17640                 for (off = 1; off <= len; off++) {
17641                         bcopy(b, b+off, len);
17642                         bcopy(b+off, b, len);
17643                         if (bcmp(b, abc, len))
17644                                 exit(1);
17645                 }
17646         }
17647 }
17648 exit(0);
17649 }
17650 EOCP
17651                 set try
17652                 if eval $compile_ok; then
17653                         if $run ./try 2>/dev/null; then
17654                                 echo "Yes, it can."
17655                                 val="$define"
17656                         else
17657                                 echo "It can't, sorry."
17658                         fi
17659                 else
17660                         echo "(I can't compile the test program, so we'll assume not...)"
17661                 fi
17662                 ;;
17663         esac
17664         $rm_try
17665         ;;
17666 esac
17667 set d_safebcpy
17668 eval $setvar
17669
17670 : can memcpy handle overlapping blocks?
17671 echo " "
17672 val="$undef"
17673 case "$d_memmove" in
17674 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
17675 *)      case "$d_memcpy" in
17676         "$define")
17677                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
17678                 $cat >try.c <<EOCP
17679 #$i_memory I_MEMORY
17680 #$i_stdlib I_STDLIB
17681 #$i_string I_STRING
17682 #$i_unistd I_UNISTD
17683 EOCP
17684         $cat >>try.c <<'EOCP'
17685 #include <stdio.h>
17686 #ifdef I_MEMORY
17687 #  include <memory.h>
17688 #endif
17689 #ifdef I_STDLIB
17690 #  include <stdlib.h>
17691 #endif
17692 #ifdef I_STRING
17693 #  include <string.h>
17694 #else
17695 #  include <strings.h>
17696 #endif
17697 #ifdef I_UNISTD
17698 #  include <unistd.h>  /* Needed for NetBSD */
17699 #endif
17700 int main()
17701 {
17702 char buf[128], abc[128];
17703 char *b;
17704 int len;
17705 int off;
17706 int align;
17707
17708 /* Copy "abcde..." string to char abc[] so that gcc doesn't
17709    try to store the string in read-only memory. */
17710 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
17711
17712 for (align = 7; align >= 0; align--) {
17713         for (len = 36; len; len--) {
17714                 b = buf+align;
17715                 memcpy(b, abc, len);
17716                 for (off = 1; off <= len; off++) {
17717                         memcpy(b+off, b, len);
17718                         memcpy(b, b+off, len);
17719                         if (memcmp(b, abc, len))
17720                                 exit(1);
17721                 }
17722         }
17723 }
17724 exit(0);
17725 }
17726 EOCP
17727                 set try
17728                 if eval $compile_ok; then
17729                         if $run ./try 2>/dev/null; then
17730                                 echo "Yes, it can."
17731                                 val="$define"
17732                         else
17733                                 echo "It can't, sorry."
17734                         fi
17735                 else
17736                         echo "(I can't compile the test program, so we'll assume not...)"
17737                 fi
17738                 ;;
17739         esac
17740         $rm_try
17741         ;;
17742 esac
17743 set d_safemcpy
17744 eval $setvar
17745
17746 : can memcmp be trusted to compare relative magnitude?
17747 val="$undef"
17748 case "$d_memcmp" in
17749 "$define")
17750         echo " "
17751         echo "Checking if your memcmp() can compare relative magnitude..." >&4
17752         $cat >try.c <<EOCP
17753 #$i_memory I_MEMORY
17754 #$i_stdlib I_STDLIB
17755 #$i_string I_STRING
17756 #$i_unistd I_UNISTD
17757 EOCP
17758         $cat >>try.c <<'EOCP'
17759 #include <stdio.h>
17760 #ifdef I_MEMORY
17761 #  include <memory.h>
17762 #endif
17763 #ifdef I_STDLIB
17764 #  include <stdlib.h>
17765 #endif
17766 #ifdef I_STRING
17767 #  include <string.h>
17768 #else
17769 #  include <strings.h>
17770 #endif
17771 #ifdef I_UNISTD
17772 #  include <unistd.h>  /* Needed for NetBSD */
17773 #endif
17774 int main()
17775 {
17776 char a = -1;
17777 char b = 0;
17778 if ((a < b) && memcmp(&a, &b, 1) < 0)
17779         exit(1);
17780 exit(0);
17781 }
17782 EOCP
17783         set try
17784         if eval $compile_ok; then
17785                 if $run ./try 2>/dev/null; then
17786                         echo "Yes, it can."
17787                         val="$define"
17788                 else
17789                         echo "No, it can't (it uses signed chars)."
17790                 fi
17791         else
17792                 echo "(I can't compile the test program, so we'll assume not...)"
17793         fi
17794         ;;
17795 esac
17796 $rm_try
17797 set d_sanemcmp
17798 eval $setvar
17799
17800 : see if prototype for sbrk is available
17801 echo " "
17802 set d_sbrkproto sbrk $i_unistd unistd.h
17803 eval $hasproto
17804
17805 : see if scalbn exists
17806 set scalbn d_scalbn
17807 eval $inlibc
17808
17809 : see if select exists
17810 set select d_select
17811 eval $inlibc
17812
17813 : see if semctl exists
17814 set semctl d_semctl
17815 eval $inlibc
17816
17817 : see if semget exists
17818 set semget d_semget
17819 eval $inlibc
17820
17821 : see if semop exists
17822 set semop d_semop
17823 eval $inlibc
17824
17825 : see how much of the 'sem*(2)' library is present.
17826 h_sem=true
17827 echo " "
17828 case "$d_semctl$d_semget$d_semop" in
17829 *"$undef"*) h_sem=false;;
17830 esac
17831 case "$osname" in
17832 freebsd)
17833     case "`ipcs 2>&1`" in
17834     "SVID messages"*"not configured"*)
17835         echo "Your $osname does not have the sem*(2) configured." >&4
17836         h_sem=false
17837         val="$undef"
17838         set semctl d_semctl
17839         eval $setvar
17840         set semget d_semget
17841         eval $setvar
17842         set semop d_semop
17843         eval $setvar
17844         ;;
17845     esac
17846     ;;
17847 esac
17848 : we could also check for sys/ipc.h ...
17849 if $h_sem && $test `./findhdr sys/sem.h`; then
17850         echo "You have the full sem*(2) library." >&4
17851         val="$define"
17852 else
17853         echo "You don't have the full sem*(2) library." >&4
17854         val="$undef"
17855 fi
17856 set d_sem
17857 eval $setvar
17858
17859 : see whether sys/sem.h defines union semun
17860 echo " "
17861 $cat > try.c <<'END'
17862 #include <sys/types.h>
17863 #include <sys/ipc.h>
17864 #include <sys/sem.h>
17865 int main () { union semun semun; semun.buf = 0; }
17866 END
17867 set try
17868 if eval $compile; then
17869     echo "You have union semun in <sys/sem.h>." >&4
17870     val="$define"
17871 else
17872     echo "You do not have union semun in <sys/sem.h>." >&4
17873     val="$undef"
17874 fi
17875 $rm_try
17876 set d_union_semun
17877 eval $setvar
17878
17879 : see how to do semctl IPC_STAT
17880 case "$d_sem" in
17881 $define)
17882     echo " "
17883     $cat > tryh.h <<END
17884 #ifndef S_IRUSR
17885 #   ifdef S_IREAD
17886 #       define S_IRUSR S_IREAD
17887 #       define S_IWUSR S_IWRITE
17888 #       define S_IXUSR S_IEXEC
17889 #   else
17890 #       define S_IRUSR 0400
17891 #       define S_IWUSR 0200
17892 #       define S_IXUSR 0100
17893 #   endif
17894 #   define S_IRGRP (S_IRUSR>>3)
17895 #   define S_IWGRP (S_IWUSR>>3)
17896 #   define S_IXGRP (S_IXUSR>>3)
17897 #   define S_IROTH (S_IRUSR>>6)
17898 #   define S_IWOTH (S_IWUSR>>6)
17899 #   define S_IXOTH (S_IXUSR>>6)
17900 #endif
17901 #ifndef S_IRWXU
17902 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
17903 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
17904 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
17905 #endif
17906 END
17907     : see whether semctl IPC_STAT can use union semun
17908     case "$d_semctl_semun" in
17909     '')
17910       val="$undef"
17911       $cat > try.c <<END
17912 #include <sys/types.h>
17913 #include <sys/ipc.h>
17914 #include <sys/sem.h>
17915 #include <sys/stat.h>
17916 #include <stdio.h>
17917 #include <errno.h>
17918 #include "tryh.h"
17919 #ifndef errno
17920 extern int errno;
17921 #endif
17922 #$d_union_semun HAS_UNION_SEMUN
17923 int main() {
17924     union semun
17925 #ifndef HAS_UNION_SEMUN
17926     {
17927         int val;
17928         struct semid_ds *buf;
17929         unsigned short *array;
17930     }
17931 #endif
17932     arg;
17933     int sem, st;
17934
17935 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
17936     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
17937     if (sem > -1) {
17938         struct semid_ds argbuf;
17939         arg.buf = &argbuf;
17940 #       ifdef IPC_STAT
17941         st = semctl(sem, 0, IPC_STAT, arg);
17942         if (st == 0)
17943             printf("semun\n");
17944         else
17945 #       endif /* IPC_STAT */
17946             printf("semctl IPC_STAT failed: errno = %d\n", errno);
17947 #       ifdef IPC_RMID
17948         if (semctl(sem, 0, IPC_RMID, arg) != 0)
17949 #       endif /* IPC_RMID */
17950             printf("semctl IPC_RMID failed: errno = %d\n", errno);
17951     } else
17952 #endif /* IPC_PRIVATE && ... */
17953         printf("semget failed: errno = %d\n", errno);
17954   return 0;
17955 }
17956 END
17957       set try
17958       if eval $compile; then
17959           xxx=`$run ./try`
17960           case "$xxx" in
17961           semun) val="$define" ;;
17962           esac
17963       fi
17964       $rm_try
17965       set d_semctl_semun
17966       eval $setvar
17967       ;;
17968     esac
17969     case "$d_semctl_semun" in
17970     $define)
17971         echo "You can use union semun for semctl IPC_STAT." >&4
17972         also='also'
17973         ;;
17974     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
17975         also=''
17976         ;;
17977     esac
17978
17979     : see whether semctl IPC_STAT can use struct semid_ds pointer
17980     case "$d_semctl_semid_ds" in
17981     '')
17982       val="$undef"
17983       $cat > try.c <<'END'
17984 #include <sys/types.h>
17985 #include <sys/ipc.h>
17986 #include <sys/sem.h>
17987 #include <sys/stat.h>
17988 #include "tryh.h"
17989 #include <stdio.h>
17990 #include <errno.h>
17991 #ifndef errno
17992 extern int errno;
17993 #endif
17994 int main() {
17995     struct semid_ds arg;
17996     int sem, st;
17997
17998 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
17999     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
18000     if (sem > -1) {
18001 #       ifdef IPC_STAT
18002         st = semctl(sem, 0, IPC_STAT, &arg);
18003         if (st == 0)
18004             printf("semid_ds\n");
18005         else
18006 #       endif /* IPC_STAT */
18007             printf("semctl IPC_STAT failed: errno = %d\n", errno);
18008 #       ifdef IPC_RMID
18009         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
18010 #       endif /* IPC_RMID */
18011             printf("semctl IPC_RMID failed: errno = %d\n", errno);
18012     } else
18013 #endif /* IPC_PRIVATE && ... */
18014         printf("semget failed: errno = %d\n", errno);
18015
18016     return 0;
18017 }
18018 END
18019       set try
18020       if eval $compile; then
18021           xxx=`$run ./try`
18022           case "$xxx" in
18023           semid_ds) val="$define" ;;
18024           esac
18025       fi
18026       $rm_try
18027       set d_semctl_semid_ds
18028       eval $setvar
18029       ;;
18030     esac
18031     case "$d_semctl_semid_ds" in
18032     $define)
18033         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
18034         ;;
18035     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
18036         ;;
18037     esac
18038     ;;
18039 *)  val="$undef"
18040
18041     # We do not have the full sem*(2) library, so assume we can not
18042     # use either.
18043
18044     set d_semctl_semun
18045     eval $setvar
18046
18047     set d_semctl_semid_ds
18048     eval $setvar
18049     ;;
18050 esac
18051 $rm_try tryh.h
18052
18053 : see if sendmsg exists
18054 set sendmsg d_sendmsg
18055 eval $inlibc
18056
18057 : see if setegid exists
18058 set setegid d_setegid
18059 eval $inlibc
18060
18061 : see if seteuid exists
18062 set seteuid d_seteuid
18063 eval $inlibc
18064
18065 : see if setgrent exists
18066 set setgrent d_setgrent
18067 eval $inlibc
18068
18069 : see if setgrent_r exists
18070 set setgrent_r d_setgrent_r
18071 eval $inlibc
18072 case "$d_setgrent_r" in
18073 "$define")
18074         hdrs="$i_systypes sys/types.h define stdio.h $i_grp grp.h"
18075         case "$d_setgrent_r_proto:$usethreads" in
18076         ":define")      d_setgrent_r_proto=define
18077                 set d_setgrent_r_proto setgrent_r $hdrs
18078                 eval $hasproto ;;
18079         *)      ;;
18080         esac
18081         case "$d_setgrent_r_proto" in
18082         define)
18083         case "$setgrent_r_proto" in
18084         ''|0) try='int setgrent_r(FILE**);'
18085         ./protochk "$extern_C $try" $hdrs && setgrent_r_proto=I_H ;;
18086         esac
18087         case "$setgrent_r_proto" in
18088         ''|0) try='void setgrent_r(FILE**);'
18089         ./protochk "$extern_C $try" $hdrs && setgrent_r_proto=V_H ;;
18090         esac
18091         case "$setgrent_r_proto" in
18092         ''|0)   d_setgrent_r=undef
18093                 setgrent_r_proto=0
18094                 echo "Disabling setgrent_r, cannot determine prototype." >&4 ;;
18095         * )     case "$setgrent_r_proto" in
18096                 REENTRANT_PROTO*) ;;
18097                 *) setgrent_r_proto="REENTRANT_PROTO_$setgrent_r_proto" ;;
18098                 esac
18099                 echo "Prototype: $try" ;;
18100         esac
18101         ;;
18102         *)      case "$usethreads" in
18103                 define) echo "setgrent_r has no prototype, not using it." >&4 ;;
18104                 esac
18105                 d_setgrent_r=undef
18106                 setgrent_r_proto=0
18107                 ;;
18108         esac
18109         ;;
18110 *)      setgrent_r_proto=0
18111         ;;
18112 esac
18113
18114 : see if sethostent exists
18115 set sethostent d_sethent
18116 eval $inlibc
18117
18118 : see if sethostent_r exists
18119 set sethostent_r d_sethostent_r
18120 eval $inlibc
18121 case "$d_sethostent_r" in
18122 "$define")
18123         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
18124         case "$d_sethostent_r_proto:$usethreads" in
18125         ":define")      d_sethostent_r_proto=define
18126                 set d_sethostent_r_proto sethostent_r $hdrs
18127                 eval $hasproto ;;
18128         *)      ;;
18129         esac
18130         case "$d_sethostent_r_proto" in
18131         define)
18132         case "$sethostent_r_proto" in
18133         ''|0) try='int sethostent_r(int, struct hostent_data*);'
18134         ./protochk "$extern_C $try" $hdrs && sethostent_r_proto=I_ID ;;
18135         esac
18136         case "$sethostent_r_proto" in
18137         ''|0) try='void sethostent_r(int, struct hostent_data*);'
18138         ./protochk "$extern_C $try" $hdrs && sethostent_r_proto=V_ID ;;
18139         esac
18140         case "$sethostent_r_proto" in
18141         ''|0)   d_sethostent_r=undef
18142                 sethostent_r_proto=0
18143                 echo "Disabling sethostent_r, cannot determine prototype." >&4 ;;
18144         * )     case "$sethostent_r_proto" in
18145                 REENTRANT_PROTO*) ;;
18146                 *) sethostent_r_proto="REENTRANT_PROTO_$sethostent_r_proto" ;;
18147                 esac
18148                 echo "Prototype: $try" ;;
18149         esac
18150         ;;
18151         *)      case "$usethreads" in
18152                 define) echo "sethostent_r has no prototype, not using it." >&4 ;;
18153                 esac
18154                 d_sethostent_r=undef
18155                 sethostent_r_proto=0
18156                 ;;
18157         esac
18158         ;;
18159 *)      sethostent_r_proto=0
18160         ;;
18161 esac
18162
18163 : see if setitimer exists
18164 set setitimer d_setitimer
18165 eval $inlibc
18166
18167 : see if setlinebuf exists
18168 set setlinebuf d_setlinebuf
18169 eval $inlibc
18170
18171 : see if setlocale exists
18172 set setlocale d_setlocale
18173 eval $inlibc
18174
18175 : see if locale.h is available
18176 set locale.h i_locale
18177 eval $inhdr
18178
18179 : see if setlocale_r exists
18180 set setlocale_r d_setlocale_r
18181 eval $inlibc
18182 case "$d_setlocale_r" in
18183 "$define")
18184         hdrs="$i_systypes sys/types.h define stdio.h $i_locale locale.h"
18185         case "$d_setlocale_r_proto:$usethreads" in
18186         ":define")      d_setlocale_r_proto=define
18187                 set d_setlocale_r_proto setlocale_r $hdrs
18188                 eval $hasproto ;;
18189         *)      ;;
18190         esac
18191         case "$d_setlocale_r_proto" in
18192         define)
18193         case "$setlocale_r_proto" in
18194         ''|0) try='int setlocale_r(int, const char*, char*, int);'
18195         ./protochk "$extern_C $try" $hdrs && setlocale_r_proto=I_ICBI ;;
18196         esac
18197         case "$setlocale_r_proto" in
18198         ''|0)   d_setlocale_r=undef
18199                 setlocale_r_proto=0
18200                 echo "Disabling setlocale_r, cannot determine prototype." >&4 ;;
18201         * )     case "$setlocale_r_proto" in
18202                 REENTRANT_PROTO*) ;;
18203                 *) setlocale_r_proto="REENTRANT_PROTO_$setlocale_r_proto" ;;
18204                 esac
18205                 echo "Prototype: $try" ;;
18206         esac
18207         ;;
18208         *)      case "$usethreads" in
18209                 define) echo "setlocale_r has no prototype, not using it." >&4 ;;
18210                 esac
18211                 d_setlocale_r=undef
18212                 setlocale_r_proto=0
18213                 ;;
18214         esac
18215         ;;
18216 *)      setlocale_r_proto=0
18217         ;;
18218 esac
18219
18220 : see if setnetent exists
18221 set setnetent d_setnent
18222 eval $inlibc
18223
18224 : see if setnetent_r exists
18225 set setnetent_r d_setnetent_r
18226 eval $inlibc
18227 case "$d_setnetent_r" in
18228 "$define")
18229         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
18230         case "$d_setnetent_r_proto:$usethreads" in
18231         ":define")      d_setnetent_r_proto=define
18232                 set d_setnetent_r_proto setnetent_r $hdrs
18233                 eval $hasproto ;;
18234         *)      ;;
18235         esac
18236         case "$d_setnetent_r_proto" in
18237         define)
18238         case "$setnetent_r_proto" in
18239         ''|0) try='int setnetent_r(int, struct netent_data*);'
18240         ./protochk "$extern_C $try" $hdrs && setnetent_r_proto=I_ID ;;
18241         esac
18242         case "$setnetent_r_proto" in
18243         ''|0) try='void setnetent_r(int, struct netent_data*);'
18244         ./protochk "$extern_C $try" $hdrs && setnetent_r_proto=V_ID ;;
18245         esac
18246         case "$setnetent_r_proto" in
18247         ''|0)   d_setnetent_r=undef
18248                 setnetent_r_proto=0
18249                 echo "Disabling setnetent_r, cannot determine prototype." >&4 ;;
18250         * )     case "$setnetent_r_proto" in
18251                 REENTRANT_PROTO*) ;;
18252                 *) setnetent_r_proto="REENTRANT_PROTO_$setnetent_r_proto" ;;
18253                 esac
18254                 echo "Prototype: $try" ;;
18255         esac
18256         ;;
18257         *)      case "$usethreads" in
18258                 define) echo "setnetent_r has no prototype, not using it." >&4 ;;
18259                 esac
18260                 d_setnetent_r=undef
18261                 setnetent_r_proto=0
18262                 ;;
18263         esac
18264         ;;
18265 *)      setnetent_r_proto=0
18266         ;;
18267 esac
18268
18269 : see if setprotoent exists
18270 set setprotoent d_setpent
18271 eval $inlibc
18272
18273 : see if setpgid exists
18274 set setpgid d_setpgid
18275 eval $inlibc
18276
18277 : see if setpgrp2 exists
18278 set setpgrp2 d_setpgrp2
18279 eval $inlibc
18280
18281 : see if setpriority exists
18282 set setpriority d_setprior
18283 eval $inlibc
18284
18285 : see if setproctitle exists
18286 set setproctitle d_setproctitle
18287 eval $inlibc
18288
18289 : see if setprotoent_r exists
18290 set setprotoent_r d_setprotoent_r
18291 eval $inlibc
18292 case "$d_setprotoent_r" in
18293 "$define")
18294         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
18295         case "$d_setprotoent_r_proto:$usethreads" in
18296         ":define")      d_setprotoent_r_proto=define
18297                 set d_setprotoent_r_proto setprotoent_r $hdrs
18298                 eval $hasproto ;;
18299         *)      ;;
18300         esac
18301         case "$d_setprotoent_r_proto" in
18302         define)
18303         case "$setprotoent_r_proto" in
18304         ''|0) try='int setprotoent_r(int, struct protoent_data*);'
18305         ./protochk "$extern_C $try" $hdrs && setprotoent_r_proto=I_ID ;;
18306         esac
18307         case "$setprotoent_r_proto" in
18308         ''|0) try='void setprotoent_r(int, struct protoent_data*);'
18309         ./protochk "$extern_C $try" $hdrs && setprotoent_r_proto=V_ID ;;
18310         esac
18311         case "$setprotoent_r_proto" in
18312         ''|0)   d_setprotoent_r=undef
18313                 setprotoent_r_proto=0
18314                 echo "Disabling setprotoent_r, cannot determine prototype." >&4 ;;
18315         * )     case "$setprotoent_r_proto" in
18316                 REENTRANT_PROTO*) ;;
18317                 *) setprotoent_r_proto="REENTRANT_PROTO_$setprotoent_r_proto" ;;
18318                 esac
18319                 echo "Prototype: $try" ;;
18320         esac
18321         ;;
18322         *)      case "$usethreads" in
18323                 define) echo "setprotoent_r has no prototype, not using it." >&4 ;;
18324                 esac
18325                 d_setprotoent_r=undef
18326                 setprotoent_r_proto=0
18327                 ;;
18328         esac
18329         ;;
18330 *)      setprotoent_r_proto=0
18331         ;;
18332 esac
18333
18334 : see if setpwent exists
18335 set setpwent d_setpwent
18336 eval $inlibc
18337
18338 : see if setpwent_r exists
18339 set setpwent_r d_setpwent_r
18340 eval $inlibc
18341 case "$d_setpwent_r" in
18342 "$define")
18343         hdrs="$i_systypes sys/types.h define stdio.h $i_pwd pwd.h"
18344         case "$d_setpwent_r_proto:$usethreads" in
18345         ":define")      d_setpwent_r_proto=define
18346                 set d_setpwent_r_proto setpwent_r $hdrs
18347                 eval $hasproto ;;
18348         *)      ;;
18349         esac
18350         case "$d_setpwent_r_proto" in
18351         define)
18352         case "$setpwent_r_proto" in
18353         ''|0) try='int setpwent_r(FILE**);'
18354         ./protochk "$extern_C $try" $hdrs && setpwent_r_proto=I_H ;;
18355         esac
18356         case "$setpwent_r_proto" in
18357         ''|0) try='void setpwent_r(FILE**);'
18358         ./protochk "$extern_C $try" $hdrs && setpwent_r_proto=V_H ;;
18359         esac
18360         case "$setpwent_r_proto" in
18361         ''|0)   d_setpwent_r=undef
18362                 setpwent_r_proto=0
18363                 echo "Disabling setpwent_r, cannot determine prototype." >&4 ;;
18364         * )     case "$setpwent_r_proto" in
18365                 REENTRANT_PROTO*) ;;
18366                 *) setpwent_r_proto="REENTRANT_PROTO_$setpwent_r_proto" ;;
18367                 esac
18368                 echo "Prototype: $try" ;;
18369         esac
18370         ;;
18371         *)      case "$usethreads" in
18372                 define) echo "setpwent_r has no prototype, not using it." >&4 ;;
18373                 esac
18374                 d_setpwent_r=undef
18375                 setpwent_r_proto=0
18376                 ;;
18377         esac
18378         ;;
18379 *)      setpwent_r_proto=0
18380         ;;
18381 esac
18382
18383 : see if setregid exists
18384 set setregid d_setregid
18385 eval $inlibc
18386 set setresgid d_setresgid
18387 eval $inlibc
18388
18389 : see if setreuid exists
18390 set setreuid d_setreuid
18391 eval $inlibc
18392 set setresuid d_setresuid
18393 eval $inlibc
18394
18395 : see if setrgid exists
18396 set setrgid d_setrgid
18397 eval $inlibc
18398
18399 : see if setruid exists
18400 set setruid d_setruid
18401 eval $inlibc
18402
18403 : see if setservent exists
18404 set setservent d_setsent
18405 eval $inlibc
18406
18407 : see if setservent_r exists
18408 set setservent_r d_setservent_r
18409 eval $inlibc
18410 case "$d_setservent_r" in
18411 "$define")
18412         hdrs="$i_systypes sys/types.h define stdio.h $i_netdb netdb.h"
18413         case "$d_setservent_r_proto:$usethreads" in
18414         ":define")      d_setservent_r_proto=define
18415                 set d_setservent_r_proto setservent_r $hdrs
18416                 eval $hasproto ;;
18417         *)      ;;
18418         esac
18419         case "$d_setservent_r_proto" in
18420         define)
18421         case "$setservent_r_proto" in
18422         ''|0) try='int setservent_r(int, struct servent_data*);'
18423         ./protochk "$extern_C $try" $hdrs && setservent_r_proto=I_ID ;;
18424         esac
18425         case "$setservent_r_proto" in
18426         ''|0) try='void setservent_r(int, struct servent_data*);'
18427         ./protochk "$extern_C $try" $hdrs && setservent_r_proto=V_ID ;;
18428         esac
18429         case "$setservent_r_proto" in
18430         ''|0)   d_setservent_r=undef
18431                 setservent_r_proto=0
18432                 echo "Disabling setservent_r, cannot determine prototype." >&4 ;;
18433         * )     case "$setservent_r_proto" in
18434                 REENTRANT_PROTO*) ;;
18435                 *) setservent_r_proto="REENTRANT_PROTO_$setservent_r_proto" ;;
18436                 esac
18437                 echo "Prototype: $try" ;;
18438         esac
18439         ;;
18440         *)      case "$usethreads" in
18441                 define) echo "setservent_r has no prototype, not using it." >&4 ;;
18442                 esac
18443                 d_setservent_r=undef
18444                 setservent_r_proto=0
18445                 ;;
18446         esac
18447         ;;
18448 *)      setservent_r_proto=0
18449         ;;
18450 esac
18451
18452 : see if setsid exists
18453 set setsid d_setsid
18454 eval $inlibc
18455
18456 : see if setvbuf exists
18457 set setvbuf d_setvbuf
18458 eval $inlibc
18459
18460 : see if shmctl exists
18461 set shmctl d_shmctl
18462 eval $inlibc
18463
18464 : see if shmget exists
18465 set shmget d_shmget
18466 eval $inlibc
18467
18468 : see if shmat exists
18469 set shmat d_shmat
18470 eval $inlibc
18471 : see what shmat returns
18472 case "$d_shmat" in
18473 "$define")
18474         $cat >shmat.c <<'END'
18475 #include <sys/shm.h>
18476 void *shmat();
18477 END
18478         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
18479                 shmattype='void *'
18480         else
18481                 shmattype='char *'
18482         fi
18483         echo "and it returns ($shmattype)." >&4
18484         : see if a prototype for shmat is available
18485         xxx=`./findhdr sys/shm.h`
18486         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
18487         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
18488                 val="$define"
18489         else
18490                 val="$undef"
18491         fi
18492         $rm -f shmat.[co]
18493         ;;
18494 *)
18495         val="$undef"
18496         ;;
18497 esac
18498 set d_shmatprototype
18499 eval $setvar
18500
18501 : see if shmdt exists
18502 set shmdt d_shmdt
18503 eval $inlibc
18504
18505 : see how much of the 'shm*(2)' library is present.
18506 h_shm=true
18507 echo " "
18508 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
18509 *"$undef"*) h_shm=false;;
18510 esac
18511 case "$osname" in
18512 freebsd)
18513     case "`ipcs 2>&1`" in
18514     "SVID shared memory"*"not configured"*)
18515         echo "Your $osname does not have the shm*(2) configured." >&4
18516         h_shm=false
18517         val="$undef"
18518         set shmctl d_shmctl
18519         eval $setvar
18520         set shmget d_shmget
18521         eval $setvar
18522         set shmat d_shmat
18523         eval $setvar
18524         set shmdt d_shmdt
18525         eval $setvar
18526         ;;
18527     esac
18528     ;;
18529 esac
18530 : we could also check for sys/ipc.h ...
18531 if $h_shm && $test `./findhdr sys/shm.h`; then
18532         echo "You have the full shm*(2) library." >&4
18533         val="$define"
18534 else
18535         echo "You don't have the full shm*(2) library." >&4
18536         val="$undef"
18537 fi
18538 set d_shm
18539 eval $setvar
18540
18541 : see if we have sigaction
18542 echo " "
18543 if set sigaction val -f d_sigaction; eval $csym; $val; then
18544         echo 'sigaction() found.' >&4
18545         $cat > try.c <<EOP
18546 #include <stdio.h>
18547 #include <sys/types.h>
18548 #include <signal.h>
18549 #$i_stdlib I_STDLIB
18550 #ifdef I_STDLIB
18551 #include <stdlib.h>
18552 #endif
18553 int main()
18554 {
18555     struct sigaction act, oact;
18556     act.sa_flags = 0;
18557     oact.sa_handler = 0;
18558     /* so that act and oact are used */
18559     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
18560 }
18561 EOP
18562         set try
18563         if eval $compile_ok; then
18564                 val="$define"
18565         else
18566                 echo "But you don't seem to have a usable struct sigaction." >&4
18567                 val="$undef"
18568         fi
18569 else
18570         echo 'sigaction NOT found.' >&4
18571         val="$undef"
18572 fi
18573 set d_sigaction; eval $setvar
18574 $rm_try
18575
18576 : see if this is a sunmath.h system
18577 set sunmath.h i_sunmath
18578 eval $inhdr
18579
18580 : see if signbit exists
18581 $echo $n "Checking to see if you have signbit() available to work on $nvtype... $c" >&4
18582 $cat >try.c <<EOCP
18583 #$i_math I_MATH
18584 #$i_sunmath I_SUNMATH
18585 #ifdef I_MATH
18586 #  include <math.h>
18587 #endif
18588 #ifdef I_SUNMATH  /* Solaris special math library */
18589 #  include <sunmath.h>
18590 #endif
18591 #define NV $nvtype
18592 int main(int argc, char **argv)
18593 {
18594     NV x = 0.0;
18595     NV y = -0.0;
18596     if ((signbit(x) == 0) && (signbit(y) != 0))
18597         return 0;
18598     else
18599         return 1;
18600 }
18601 EOCP
18602 val="$undef"
18603 set try
18604 if eval $compile; then
18605     if $run ./try; then
18606         $echo "Yes." >&4
18607         val="$define"
18608     else
18609         $echo "Signbit seems to be available, but doesn't work as I expected."
18610         $echo "I won't use it." >&4
18611         val="$undef"
18612     fi
18613 else
18614     $echo "Nope." >&4
18615     dflt="$undef"
18616 fi
18617 set d_signbit
18618 eval $setvar
18619 $rm_try
18620
18621 : see if sigprocmask exists
18622 set sigprocmask d_sigprocmask
18623 eval $inlibc
18624
18625 : see if sigsetjmp exists
18626 echo " "
18627 case "$d_sigsetjmp" in
18628 '')
18629         $cat >try.c <<EOP
18630 #include <setjmp.h>
18631 #$i_stdlib I_STDLIB
18632 #ifdef I_STDLIB
18633 #include <stdlib.h>
18634 #endif
18635 sigjmp_buf env;
18636 int set = 1;
18637 int main()
18638 {
18639         if (sigsetjmp(env,1))
18640                 exit(set);
18641         set = 0;
18642         siglongjmp(env, 1);
18643         exit(1);
18644 }
18645 EOP
18646         set try
18647         if eval $compile; then
18648                 if $run ./try >/dev/null 2>&1; then
18649                         echo "POSIX sigsetjmp found." >&4
18650                         val="$define"
18651                 else
18652                         $cat >&4 <<EOM
18653 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
18654 I'll ignore them.
18655 EOM
18656                         val="$undef"
18657                 fi
18658         else
18659                 echo "sigsetjmp not found." >&4
18660                 val="$undef"
18661         fi
18662         ;;
18663 *) val="$d_sigsetjmp"
18664         case "$d_sigsetjmp" in
18665         $define) echo "POSIX sigsetjmp found." >&4;;
18666         $undef) echo "sigsetjmp not found." >&4;;
18667         esac
18668         ;;
18669 esac
18670 set d_sigsetjmp
18671 eval $setvar
18672 $rm_try
18673
18674 : see if snprintf exists
18675 set snprintf d_snprintf
18676 eval $inlibc
18677
18678 : see if vsnprintf exists
18679 set vsnprintf d_vsnprintf
18680 eval $inlibc
18681
18682 case "$d_snprintf-$d_vsnprintf" in
18683 "$define-$define")
18684     $cat <<EOM
18685 Checking whether your snprintf() and vsnprintf() work okay...
18686 EOM
18687     $cat >try.c <<'EOCP'
18688 /* v?snprintf testing logic courtesy of Russ Allbery.
18689  * According to C99:
18690  * - if the buffer is too short it still must be \0-terminated
18691  * - if the buffer is too short the potentially required length
18692  *   must be returned and not -1
18693  * - if the buffer is NULL the potentially required length
18694  *   must be returned and not -1 or core dump
18695  */
18696 #include <stdio.h>
18697 #include <stdarg.h>
18698
18699 char buf[2];
18700
18701 int test (char *format, ...)
18702 {
18703     va_list args;
18704     int count;
18705
18706     va_start (args, format);
18707     count = vsnprintf (buf, sizeof buf, format, args);
18708     va_end (args);
18709     return count;
18710 }
18711
18712 int main ()
18713 {
18714     return ((test ("%s", "abcd") == 4 && buf[0] == 'a' && buf[1] == '\0'
18715              && snprintf (NULL, 0, "%s", "abcd") == 4) ? 0 : 1);
18716 }
18717 EOCP
18718     set try
18719     if eval $compile; then
18720         `$run ./try`
18721         case "$?" in
18722         0) echo "Your snprintf() and vsnprintf() seem to be working okay." ;;
18723         *) cat <<EOM >&4
18724 Your snprintf() and snprintf() don't seem to be working okay.
18725 EOM
18726            d_snprintf="$undef"
18727            d_vsnprintf="$undef"
18728            ;;
18729         esac
18730     else
18731         echo "(I can't seem to compile the test program--assuming they don't)"
18732         d_snprintf="$undef"
18733         d_vsnprintf="$undef"
18734     fi
18735     $rm_try
18736     ;;
18737 esac
18738
18739 : see if sockatmark exists
18740 set sockatmark d_sockatmark
18741 eval $inlibc
18742
18743 : see if prototype for sockatmark is available
18744 echo " "
18745 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
18746 eval $hasproto
18747
18748 : see if socks5_init exists
18749 set socks5_init d_socks5_init
18750 eval $inlibc
18751
18752 : see if sprintf returns the length of the string in the buffer as per ANSI
18753 $echo "Checking whether sprintf returns the length of the string..." >&4
18754 $cat <<EOP >try.c
18755 #include <stdio.h>
18756 #$i_stdlib I_STDLIB
18757 #ifdef I_STDLIB
18758 #include <stdlib.h>
18759 #endif
18760 #$i_string I_STRING
18761 #ifdef I_STRING
18762 #  include <string.h>
18763 #else
18764 #  include <strings.h>
18765 #endif
18766 #$i_math I_MATH
18767 #ifdef I_MATH
18768 #include <math.h>
18769 #endif
18770
18771 char buffer[256];
18772
18773 int check (size_t expect, int test) {
18774   size_t got = strlen(buffer);
18775   if (expect == got)
18776     return 0;
18777
18778   printf("expected %ld, got %ld in test %d '%s'\n", (long) expect, (long) got,
18779        test, buffer);
18780   exit (test);
18781 }
18782
18783 int main(int argc, char **argv) {
18784   int test = 0;
18785
18786   check(sprintf(buffer, ""), ++test);
18787   check(sprintf(buffer, "%s %s", "perl", "rules"), ++test);
18788   check(sprintf(buffer, "I like %g", atan2(0,-1)), ++test);
18789
18790   return 0;
18791 }
18792 EOP
18793 set try
18794
18795 if eval $compile; then
18796     xxx="`$run ./try`"
18797     case "$?" in
18798         0) cat >&4 <<EOM
18799 sprintf returns the length of the string (as ANSI says it should)
18800 EOM
18801         d_sprintf_returns_strlen="$define"
18802         ;;
18803         *) cat >&4 <<EOM
18804 sprintf does not return the length of the string (how old is this system?)
18805 EOM
18806         d_sprintf_returns_strlen="$undef"
18807         ;;
18808     esac
18809 else
18810     echo "(I can't seem to compile the test program--assuming it doesn't)" >&4
18811     d_sprintf_returns_strlen="$undef"
18812 fi
18813 $rm_try
18814
18815 : see if srand48_r exists
18816 set srand48_r d_srand48_r
18817 eval $inlibc
18818 case "$d_srand48_r" in
18819 "$define")
18820         hdrs="$i_systypes sys/types.h define stdio.h $i_stdlib stdlib.h"
18821         case "$d_srand48_r_proto:$usethreads" in
18822         ":define")      d_srand48_r_proto=define
18823                 set d_srand48_r_proto srand48_r $hdrs
18824                 eval $hasproto ;;
18825         *)      ;;
18826         esac
18827         case "$d_srand48_r_proto" in
18828         define)
18829         case "$srand48_r_proto" in
18830         ''|0) try='int srand48_r(long, struct drand48_data*);'
18831         ./protochk "$extern_C $try" $hdrs && srand48_r_proto=I_LS ;;
18832         esac
18833         case "$srand48_r_proto" in
18834         ''|0)   d_srand48_r=undef
18835                 srand48_r_proto=0
18836                 echo "Disabling srand48_r, cannot determine prototype." >&4 ;;
18837         * )     case "$srand48_r_proto" in
18838                 REENTRANT_PROTO*) ;;
18839                 *) srand48_r_proto="REENTRANT_PROTO_$srand48_r_proto" ;;
18840                 esac
18841                 echo "Prototype: $try" ;;
18842         esac
18843         ;;
18844         *)      case "$usethreads" in
18845                 define) echo "srand48_r has no prototype, not using it." >&4 ;;
18846                 esac
18847                 d_srand48_r=undef
18848                 srand48_r_proto=0
18849                 ;;
18850         esac
18851         ;;
18852 *)      srand48_r_proto=0
18853         ;;
18854 esac
18855
18856 : see if srandom_r exists
18857 set srandom_r d_srandom_r
18858 eval $inlibc
18859 case "$d_srandom_r" in
18860 "$define")
18861         hdrs="$i_systypes sys/types.h define stdio.h $i_stdlib stdlib.h"
18862         case "$d_srandom_r_proto:$usethreads" in
18863         ":define")      d_srandom_r_proto=define
18864                 set d_srandom_r_proto srandom_r $hdrs
18865                 eval $hasproto ;;
18866         *)      ;;
18867         esac
18868         case "$d_srandom_r_proto" in
18869         define)
18870         case "$srandom_r_proto" in
18871         ''|0) try='int srandom_r(unsigned int, struct random_data*);'
18872         ./protochk "$extern_C $try" $hdrs && srandom_r_proto=I_TS ;;
18873         esac
18874         case "$srandom_r_proto" in
18875         ''|0)   d_srandom_r=undef
18876                 srandom_r_proto=0
18877                 echo "Disabling srandom_r, cannot determine prototype." >&4 ;;
18878         * )     case "$srandom_r_proto" in
18879                 REENTRANT_PROTO*) ;;
18880                 *) srandom_r_proto="REENTRANT_PROTO_$srandom_r_proto" ;;
18881                 esac
18882                 echo "Prototype: $try" ;;
18883         esac
18884         ;;
18885         *)      case "$usethreads" in
18886                 define) echo "srandom_r has no prototype, not using it." >&4 ;;
18887                 esac
18888                 d_srandom_r=undef
18889                 srandom_r_proto=0
18890                 ;;
18891         esac
18892         ;;
18893 *)      srandom_r_proto=0
18894         ;;
18895 esac
18896
18897 : see if prototype for setresgid is available
18898 echo " "
18899 set d_sresgproto setresgid $i_unistd unistd.h
18900 eval $hasproto
18901
18902 : see if prototype for setresuid is available
18903 echo " "
18904 set d_sresuproto setresuid $i_unistd unistd.h
18905 eval $hasproto
18906
18907 : see if stat exists
18908 set stat d_stat
18909 eval $inlibc
18910
18911 : see if sys/stat.h is available
18912 set sys/stat.h i_sysstat
18913 eval $inhdr
18914
18915 : see if stat knows about block sizes
18916 echo " "
18917 echo "Checking to see if your struct stat has st_blocks field..." >&4
18918 set d_statblks stat st_blocks $i_sysstat sys/stat.h
18919 eval $hasfield
18920
18921 : see if this is a sys/vfs.h system
18922 set sys/vfs.h i_sysvfs
18923 eval $inhdr
18924
18925 : see if this is a sys/statfs.h system
18926 set sys/statfs.h i_sysstatfs
18927 eval $inhdr
18928
18929 : Check for statfs_s
18930 echo " "
18931 echo "Checking to see if your system supports struct statfs..." >&4
18932 set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
18933 eval $hasstruct
18934 case "$d_statfs_s" in
18935 "$define")      echo "Yes, it does."   ;;
18936 *)              echo "No, it doesn't." ;;
18937 esac
18938
18939
18940 : see if struct statfs knows about f_flags
18941 case "$d_statfs_s" in
18942 define)
18943         echo " "
18944         echo "Checking to see if your struct statfs has f_flags field..." >&4
18945         set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
18946         eval $hasfield
18947         ;;
18948 *)      val="$undef"
18949         set d_statfs_f_flags
18950         eval $setvar
18951         ;;
18952 esac
18953 case "$d_statfs_f_flags" in
18954 "$define")      echo "Yes, it does."   ;;
18955 *)              echo "No, it doesn't." ;;
18956 esac
18957
18958 : see what flavor, if any, of static inline is supported
18959 echo " "
18960 echo "Checking to see if your system supports static inline..."
18961 $cat > try.c <<'EOCP'
18962 #include <stdlib.h>
18963 extern int f_via_a(int x);
18964 extern int f_via_b(int x);
18965 int main(int argc, char **argv)
18966 {
18967     int y;
18968
18969     y = f_via_a(0);
18970 #ifdef USE_B
18971     y = f_via_b(0);
18972 #endif
18973     if (y == 42) {
18974         return EXIT_SUCCESS;
18975     }
18976     else {
18977         return EXIT_FAILURE;
18978     }
18979 }
18980 EOCP
18981 $cat > a.c <<'EOCP'
18982 static INLINE int f(int x) {
18983     int y;
18984     y = x + 42;
18985     return y;
18986 }
18987
18988 int f_via_a(int x)
18989 {
18990     return f(x);
18991 }
18992 EOCP
18993 $cat > b.c <<'EOCP'
18994 extern int f(int x);
18995
18996 int f_via_b(int x)
18997 {
18998     return f(x);
18999 }
19000 EOCP
19001
19002 # Respect a hint (or previous) value for perl_static_inline, if there is one.
19003 case "$perl_static_inline" in
19004 '')     # Check the various possibilities, and break out on success.
19005         # For gcc, prefer __inline__, which will still permit
19006         # cflags.SH to add in -ansi.
19007         case "$gccversion" in
19008                 '') xxx="inline __inline__ __inline _inline";;
19009                 *)  xxx="__inline__ inline __inline _inline";;
19010         esac
19011         for inline in $xxx; do
19012                 set try -DINLINE=$inline a.c
19013                 if eval $compile && $run ./try; then
19014                         # Now make sure there is no external linkage of static
19015                         # functions
19016                         set try -DINLINE=$inline -DUSE_B a.c b.c
19017                         if eval $compile && $run ./try; then
19018                                 $echo "Your compiler supports static $inline, " >&4
19019                                 $echo "but it also creates an external definition," >&4
19020                                 $echo "so I won't use it." >&4
19021                                 val=$undef
19022                         else
19023                                 $echo "Your compiler supports static $inline." >&4
19024                                 val=$define
19025                                 perl_static_inline="static $inline";
19026                                 break;
19027                         fi
19028                 else
19029                         $echo "Your compiler does NOT support static $inline." >&4
19030                         val="$undef"
19031                 fi
19032         done
19033         ;;
19034 *inline*) # Some variant of inline exists.
19035         echo "Keeping your $hint value of $perl_static_inline."
19036         val=$define
19037         ;;
19038 static)  # No inline capabilities
19039         echo "Keeping your $hint value of $perl_static_inline."
19040         val=$undef
19041         ;;
19042 *)  # Unrecognized previous value -- blindly trust the supplied
19043         # value and hope it makes sense.  Use old value for
19044         # d_static_inline, if there is one.
19045         echo "Keeping your $hint value of $perl_static_inline."
19046         case "$d_static_inline" in
19047                 '') val=$define ;;
19048                 *)  val=$d_static_inline ;;
19049         esac
19050         ;;
19051 esac
19052 # Fallback to plain 'static' if nothing worked.
19053 case "$perl_static_inline" in
19054 '')
19055         perl_static_inline="static"
19056         val=$undef
19057         ;;
19058 esac
19059 set d_static_inline
19060 eval $setvar
19061 $rm -f a.[co] b.[co]
19062 $rm_try
19063
19064 : Check stream access
19065 $cat >&4 <<EOM
19066 Checking how to access stdio streams by file descriptor number...
19067 EOM
19068 case "$stdio_stream_array" in
19069 '')     $cat >try.c <<EOCP
19070 #include <stdio.h>
19071 int main() {
19072   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
19073     printf("yes\n");
19074 }
19075 EOCP
19076         for s in _iob __iob __sF
19077         do
19078                 set try -DSTDIO_STREAM_ARRAY=$s
19079                 if eval $compile; then
19080                         case "`$run ./try`" in
19081                         yes)    stdio_stream_array=$s; break ;;
19082                         esac
19083                 fi
19084         done
19085         $rm_try
19086 esac
19087 case "$stdio_stream_array" in
19088 '')     $cat >&4 <<EOM
19089 I can't figure out how to access stdio streams by file descriptor number.
19090 EOM
19091         d_stdio_stream_array="$undef"
19092         ;;
19093 *)      $cat >&4 <<EOM
19094 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
19095 EOM
19096         d_stdio_stream_array="$define"
19097         ;;
19098 esac
19099
19100 : see if strcoll exists
19101 set strcoll d_strcoll
19102 eval $inlibc
19103
19104 : check for structure copying
19105 echo " "
19106 echo "Checking to see if your C compiler can copy structs..." >&4
19107 $cat >try.c <<'EOCP'
19108 int main()
19109 {
19110         struct blurfl {
19111                 int dyick;
19112         } foo, bar;
19113
19114         foo = bar;
19115 }
19116 EOCP
19117 if $cc -c try.c >/dev/null 2>&1 ; then
19118         val="$define"
19119         echo "Yup, it can."
19120 else
19121         val="$undef"
19122         echo "Nope, it can't."
19123 fi
19124 set d_strctcpy
19125 eval $setvar
19126 $rm_try
19127
19128 : see if strerror and/or sys_errlist[] exist
19129 echo " "
19130 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
19131     if set strerror val -f d_strerror; eval $csym; $val; then
19132                 echo 'strerror() found.' >&4
19133                 d_strerror="$define"
19134                 d_strerrm='strerror(e)'
19135                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
19136                         echo "(You also have sys_errlist[], so we could roll our own strerror.)"
19137                         d_syserrlst="$define"
19138                 else
19139                         echo "(Since you don't have sys_errlist[], strerror() is welcome.)"
19140                         d_syserrlst="$undef"
19141                 fi
19142     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
19143                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
19144                 echo 'strerror() found in string header.' >&4
19145                 d_strerror="$define"
19146                 d_strerrm='strerror(e)'
19147                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
19148                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
19149                                 d_syserrlst="$define"
19150                 else
19151                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
19152                         d_syserrlst="$undef"
19153                 fi
19154     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
19155                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
19156                 d_strerror="$undef"
19157                 d_syserrlst="$define"
19158                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
19159     else
19160                 echo 'strerror() and sys_errlist[] NOT found.' >&4
19161                 d_strerror="$undef"
19162                 d_syserrlst="$undef"
19163                 d_strerrm='"unknown"'
19164     fi
19165 fi
19166
19167 : see if strerror_r exists
19168 set strerror_r d_strerror_r
19169 eval $inlibc
19170 case "$d_strerror_r" in
19171 "$define")
19172         hdrs="$i_systypes sys/types.h define stdio.h $i_string string.h"
19173         case "$d_strerror_r_proto:$usethreads" in
19174         ":define")      d_strerror_r_proto=define
19175                 set d_strerror_r_proto strerror_r $hdrs
19176                 eval $hasproto ;;
19177         *)      ;;
19178         esac
19179         case "$d_strerror_r_proto" in
19180         define)
19181         case "$strerror_r_proto" in
19182         ''|0) try='int strerror_r(int, char*, size_t);'
19183         ./protochk "$extern_C $try" $hdrs && strerror_r_proto=I_IBW ;;
19184         esac
19185         case "$strerror_r_proto" in
19186         ''|0) try='int strerror_r(int, char*, int);'
19187         ./protochk "$extern_C $try" $hdrs && strerror_r_proto=I_IBI ;;
19188         esac
19189         case "$strerror_r_proto" in
19190         ''|0) try='char* strerror_r(int, char*, size_t);'
19191         ./protochk "$extern_C $try" $hdrs && strerror_r_proto=B_IBW ;;
19192         esac
19193         case "$strerror_r_proto" in
19194         ''|0)   d_strerror_r=undef
19195                 strerror_r_proto=0
19196                 echo "Disabling strerror_r, cannot determine prototype." >&4 ;;
19197         * )     case "$strerror_r_proto" in
19198                 REENTRANT_PROTO*) ;;
19199                 *) strerror_r_proto="REENTRANT_PROTO_$strerror_r_proto" ;;
19200                 esac
19201                 echo "Prototype: $try" ;;
19202         esac
19203         ;;
19204         *)      case "$usethreads" in
19205                 define) echo "strerror_r has no prototype, not using it." >&4 ;;
19206                 esac
19207                 d_strerror_r=undef
19208                 strerror_r_proto=0
19209                 ;;
19210         esac
19211         ;;
19212 *)      strerror_r_proto=0
19213         ;;
19214 esac
19215
19216 : see if strftime exists
19217 set strftime d_strftime
19218 eval $inlibc
19219
19220 : see if strlcat exists
19221 set strlcat d_strlcat
19222 eval $inlibc
19223
19224 : see if strlcpy exists
19225 set strlcpy d_strlcpy
19226 eval $inlibc
19227
19228 : see if strtod exists
19229 set strtod d_strtod
19230 eval $inlibc
19231
19232 : see if strtol exists
19233 set strtol d_strtol
19234 eval $inlibc
19235
19236 : see if strtold exists
19237 set strtold d_strtold
19238 eval $inlibc
19239
19240 : see if strtoll exists
19241 set strtoll d_strtoll
19242 eval $inlibc
19243
19244 case "$d_longlong-$d_strtoll" in
19245 "$define-$define")
19246         $cat <<EOM
19247 Checking whether your strtoll() works okay...
19248 EOM
19249         $cat >try.c <<'EOCP'
19250 #include <errno.h>
19251 #ifdef __hpux
19252 #define strtoll __strtoll
19253 #endif
19254 #ifdef __EMX__
19255 #define strtoll _strtoll
19256 #endif
19257 #include <stdio.h>
19258 extern long long int strtoll(char *s, char **, int);
19259 static int bad = 0;
19260 int check(char *s, long long ell, int een) {
19261         long long gll;
19262         errno = 0;
19263         gll = strtoll(s, 0, 10);
19264         if (!((gll == ell) && (errno == een)))
19265                 bad++;
19266 }
19267 int main() {
19268         check(" 1",                                      1LL, 0);
19269         check(" 0",                                      0LL, 0);
19270         check("-1",                                     -1LL, 0);
19271         check("-9223372036854775808", -9223372036854775808LL, 0);
19272         check("-9223372036854775808", -9223372036854775808LL, 0);
19273         check(" 9223372036854775807",  9223372036854775807LL, 0);
19274         check("-9223372036854775808", -9223372036854775808LL, 0);
19275         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
19276         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
19277         if (!bad)
19278                 printf("ok\n");
19279 }
19280 EOCP
19281         set try
19282         if eval $compile; then
19283                 yyy=`$run ./try`
19284                 case "$yyy" in
19285                 ok) echo "Your strtoll() seems to be working okay." ;;
19286                 *) cat <<EOM >&4
19287 Your strtoll() doesn't seem to be working okay.
19288 EOM
19289                    d_strtoll="$undef"
19290                    ;;
19291                 esac
19292         else
19293                 echo "(I can't seem to compile the test program--assuming it doesn't)"
19294                 d_strtoll="$undef"
19295         fi
19296         ;;
19297 esac
19298
19299 : see if strtoq exists
19300 set strtoq d_strtoq
19301 eval $inlibc
19302
19303 : see if strtoul exists
19304 set strtoul d_strtoul
19305 eval $inlibc
19306
19307 case "$d_strtoul" in
19308 "$define")
19309         $cat <<EOM
19310 Checking whether your strtoul() works okay...
19311 EOM
19312         $cat >try.c <<'EOCP'
19313 #include <errno.h>
19314 #include <stdio.h>
19315 extern unsigned long int strtoul(char *s, char **, int);
19316 static int bad = 0;
19317 void check(char *s, unsigned long eul, int een) {
19318         unsigned long gul;
19319         errno = 0;
19320         gul = strtoul(s, 0, 10);
19321         if (!((gul == eul) && (errno == een)))
19322                 bad++;
19323 }
19324 int main() {
19325         check(" 1", 1L, 0);
19326         check(" 0", 0L, 0);
19327 EOCP
19328         case "$longsize" in
19329         8)
19330             $cat >>try.c <<'EOCP'
19331         check("18446744073709551615", 18446744073709551615UL, 0);
19332         check("18446744073709551616", 18446744073709551615UL, ERANGE);
19333 #if 0 /* strtoul() for /^-/ strings is undefined. */
19334         check("-1", 18446744073709551615UL, 0);
19335         check("-18446744073709551614", 2, 0);
19336         check("-18446744073709551615", 1, 0);
19337         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
19338         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
19339 #endif
19340 EOCP
19341                 ;;
19342         4)
19343                     $cat >>try.c <<'EOCP'
19344         check("4294967295", 4294967295UL, 0);
19345         check("4294967296", 4294967295UL, ERANGE);
19346 #if 0 /* strtoul() for /^-/ strings is undefined. */
19347         check("-1", 4294967295UL, 0);
19348         check("-4294967294", 2, 0);
19349         check("-4294967295", 1, 0);
19350         check("-4294967296", 4294967295UL, ERANGE);
19351         check("-4294967297", 4294967295UL, ERANGE);
19352 #endif
19353 EOCP
19354                 ;;
19355         *)
19356 : Should we write these tests to be more portable by sprintf-ing
19357 : ~0 and then manipulating that char string as input for strtol?
19358                 ;;
19359         esac
19360         $cat >>try.c <<'EOCP'
19361         if (!bad)
19362                 printf("ok\n");
19363         return 0;
19364 }
19365 EOCP
19366         set try
19367         if eval $compile; then
19368                 case "`$run ./try`" in
19369                 ok) echo "Your strtoul() seems to be working okay." ;;
19370                 *) cat <<EOM >&4
19371 Your strtoul() doesn't seem to be working okay.
19372 EOM
19373                    d_strtoul="$undef"
19374                    ;;
19375                 esac
19376         else
19377                 echo "(I can't seem to compile the test program--assuming it doesn't)"
19378                 d_strtoul="$undef"
19379         fi
19380         ;;
19381 esac
19382
19383 : see if strtoull exists
19384 set strtoull d_strtoull
19385 eval $inlibc
19386
19387 case "$d_longlong-$d_strtoull" in
19388 "$define-$define")
19389         $cat <<EOM
19390 Checking whether your strtoull() works okay...
19391 EOM
19392         $cat >try.c <<'EOCP'
19393 #include <errno.h>
19394 #ifdef __hpux
19395 #define strtoull __strtoull
19396 #endif
19397 #include <stdio.h>
19398 extern unsigned long long int strtoull(char *s, char **, int);
19399 static int bad = 0;
19400 int check(char *s, long long eull, int een) {
19401         long long gull;
19402         errno = 0;
19403         gull = strtoull(s, 0, 10);
19404         if (!((gull == eull) && (errno == een)))
19405                 bad++;
19406 }
19407 int main() {
19408         check(" 1",                                        1LL, 0);
19409         check(" 0",                                        0LL, 0);
19410         check("18446744073709551615",  18446744073709551615ULL, 0);
19411         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
19412 #if 0 /* strtoull() for /^-/ strings is undefined. */
19413         check("-1",                    18446744073709551615ULL, 0);
19414         check("-18446744073709551614",                     2LL, 0);
19415         check("-18446744073709551615",                     1LL, 0);
19416         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
19417         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
19418 #endif
19419         if (!bad)
19420                 printf("ok\n");
19421 }
19422 EOCP
19423         set try
19424         if eval $compile; then
19425                 case "`$run ./try`" in
19426                 ok) echo "Your strtoull() seems to be working okay." ;;
19427                 *) cat <<EOM >&4
19428 Your strtoull() doesn't seem to be working okay.
19429 EOM
19430                    d_strtoull="$undef"
19431                    ;;
19432                 esac
19433         else
19434                 echo "(I can't seem to compile the test program--assuming it doesn't)"
19435                 d_strtoull="$undef"
19436         fi
19437         ;;
19438 esac
19439
19440 : see if strtouq exists
19441 set strtouq d_strtouq
19442 eval $inlibc
19443
19444 case "$d_strtouq" in
19445 "$define")
19446         $cat <<EOM
19447 Checking whether your strtouq() works okay...
19448 EOM
19449         $cat >try.c <<'EOCP'
19450 #include <errno.h>
19451 #include <stdio.h>
19452 extern unsigned long long int strtouq(char *s, char **, int);
19453 static int bad = 0;
19454 void check(char *s, unsigned long long eull, int een) {
19455         unsigned long long gull;
19456         errno = 0;
19457         gull = strtouq(s, 0, 10);
19458         if (!((gull == eull) && (errno == een)))
19459                 bad++;
19460 }
19461 int main() {
19462         check(" 1",                                        1LL, 0);
19463         check(" 0",                                        0LL, 0);
19464         check("18446744073709551615",  18446744073709551615ULL, 0);
19465         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
19466 #if 0 /* strtouq() for /^-/ strings is undefined. */
19467         check("-1",                    18446744073709551615ULL, 0);
19468         check("-18446744073709551614",                     2LL, 0);
19469         check("-18446744073709551615",                     1LL, 0);
19470         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
19471         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
19472 #endif
19473         if (!bad)
19474                 printf("ok\n");
19475         return 0;
19476 }
19477 EOCP
19478         set try
19479         if eval $compile; then
19480                 case "`$run ./try`" in
19481                 ok) echo "Your strtouq() seems to be working okay." ;;
19482                 *) cat <<EOM >&4
19483 Your strtouq() doesn't seem to be working okay.
19484 EOM
19485                    d_strtouq="$undef"
19486                    ;;
19487                 esac
19488         else
19489                 echo "(I can't seem to compile the test program--assuming it doesn't)"
19490                 d_strtouq="$undef"
19491         fi
19492         ;;
19493 esac
19494
19495 : see if strxfrm exists
19496 set strxfrm d_strxfrm
19497 eval $inlibc
19498
19499 : see if symlink exists
19500 set symlink d_symlink
19501 eval $inlibc
19502
19503 : see if syscall exists
19504 set syscall d_syscall
19505 eval $inlibc
19506
19507 : see if prototype for syscall is available
19508 echo " "
19509 set d_syscallproto syscall $i_unistd unistd.h
19510 eval $hasproto
19511
19512 : see if sysconf exists
19513 set sysconf d_sysconf
19514 eval $inlibc
19515
19516 : see if system exists
19517 set system d_system
19518 eval $inlibc
19519
19520 : see if tcgetpgrp exists
19521 set tcgetpgrp d_tcgetpgrp
19522 eval $inlibc
19523
19524 : see if tcsetpgrp exists
19525 set tcsetpgrp d_tcsetpgrp
19526 eval $inlibc
19527
19528 : see if prototype for telldir is available
19529 echo " "
19530 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
19531 eval $hasproto
19532
19533 : see if tgamma exists
19534 set tgamma d_tgamma
19535 eval $inlibc
19536
19537 : see if time exists
19538 echo " "
19539 if test "X$d_time" = X -o X"$timetype" = X; then
19540     if set time val -f d_time; eval $csym; $val; then
19541                 echo 'time() found.' >&4
19542                 val="$define"
19543                 rp="What is the type returned by time() on this system?"
19544                 set time_t timetype long stdio.h sys/types.h
19545                 eval $typedef_ask
19546     else
19547                 echo 'time() not found, hope that will do.' >&4
19548                 val="$undef"
19549                 timetype='int';
19550     fi
19551     set d_time
19552     eval $setvar
19553 fi
19554
19555 : see if timegm exists
19556 set timegm d_timegm
19557 eval $inlibc
19558
19559 : see if this is a sys/times.h system
19560 set sys/times.h i_systimes
19561 eval $inhdr
19562
19563 : see if times exists
19564 echo " "
19565 if set times val -f d_times; eval $csym; $val; then
19566         echo 'times() found.' >&4
19567         d_times="$define"
19568         inc=''
19569         case "$i_systimes" in
19570         "$define") inc='sys/times.h';;
19571         esac
19572         rp="What is the type returned by times() on this system?"
19573         set clock_t clocktype long stdio.h sys/types.h $inc
19574         eval $typedef_ask
19575 else
19576         echo 'times() NOT found, hope that will do.' >&4
19577         d_times="$undef"
19578         clocktype='int'
19579 fi
19580
19581 : see if tmpnam_r exists
19582 set tmpnam_r d_tmpnam_r
19583 eval $inlibc
19584 case "$d_tmpnam_r" in
19585 "$define")
19586         hdrs="$i_systypes sys/types.h define stdio.h "
19587         case "$d_tmpnam_r_proto:$usethreads" in
19588         ":define")      d_tmpnam_r_proto=define
19589                 set d_tmpnam_r_proto tmpnam_r $hdrs
19590                 eval $hasproto ;;
19591         *)      ;;
19592         esac
19593         case "$d_tmpnam_r_proto" in
19594         define)
19595         case "$tmpnam_r_proto" in
19596         ''|0) try='char* tmpnam_r(char*);'
19597         ./protochk "$extern_C $try" $hdrs && tmpnam_r_proto=B_B ;;
19598         esac
19599         case "$tmpnam_r_proto" in
19600         ''|0)   d_tmpnam_r=undef
19601                 tmpnam_r_proto=0
19602                 echo "Disabling tmpnam_r, cannot determine prototype." >&4 ;;
19603         * )     case "$tmpnam_r_proto" in
19604                 REENTRANT_PROTO*) ;;
19605                 *) tmpnam_r_proto="REENTRANT_PROTO_$tmpnam_r_proto" ;;
19606                 esac
19607                 echo "Prototype: $try" ;;
19608         esac
19609         ;;
19610         *)      case "$usethreads" in
19611                 define) echo "tmpnam_r has no prototype, not using it." >&4 ;;
19612                 esac
19613                 d_tmpnam_r=undef
19614                 tmpnam_r_proto=0
19615                 ;;
19616         esac
19617         ;;
19618 *)      tmpnam_r_proto=0
19619         ;;
19620 esac
19621
19622 : see if trunc exists
19623 set trunc d_trunc
19624 eval $inlibc
19625
19626 : see if truncate exists
19627 set truncate d_truncate
19628 eval $inlibc
19629
19630 : see if ttyname_r exists
19631 set ttyname_r d_ttyname_r
19632 eval $inlibc
19633 case "$d_ttyname_r" in
19634 "$define")
19635         hdrs="$i_systypes sys/types.h define stdio.h $i_unistd unistd.h"
19636         case "$d_ttyname_r_proto:$usethreads" in
19637         ":define")      d_ttyname_r_proto=define
19638                 set d_ttyname_r_proto ttyname_r $hdrs
19639                 eval $hasproto ;;
19640         *)      ;;
19641         esac
19642         case "$d_ttyname_r_proto" in
19643         define)
19644         case "$ttyname_r_proto" in
19645         ''|0) try='int ttyname_r(int, char*, size_t);'
19646         ./protochk "$extern_C $try" $hdrs && ttyname_r_proto=I_IBW ;;
19647         esac
19648         case "$ttyname_r_proto" in
19649         ''|0) try='int ttyname_r(int, char*, int);'
19650         ./protochk "$extern_C $try" $hdrs && ttyname_r_proto=I_IBI ;;
19651         esac
19652         case "$ttyname_r_proto" in
19653         ''|0) try='char* ttyname_r(int, char*, int);'
19654         ./protochk "$extern_C $try" $hdrs && ttyname_r_proto=B_IBI ;;
19655         esac
19656         case "$ttyname_r_proto" in
19657         ''|0)   d_ttyname_r=undef
19658                 ttyname_r_proto=0
19659                 echo "Disabling ttyname_r, cannot determine prototype." >&4 ;;
19660         * )     case "$ttyname_r_proto" in
19661                 REENTRANT_PROTO*) ;;
19662                 *) ttyname_r_proto="REENTRANT_PROTO_$ttyname_r_proto" ;;
19663                 esac
19664                 echo "Prototype: $try" ;;
19665         esac
19666         ;;
19667         *)      case "$usethreads" in
19668                 define) echo "ttyname_r has no prototype, not using it." >&4 ;;
19669                 esac
19670                 d_ttyname_r=undef
19671                 ttyname_r_proto=0
19672                 ;;
19673         esac
19674         ;;
19675 *)      ttyname_r_proto=0
19676         ;;
19677 esac
19678
19679 : see if tzname[] exists
19680 echo " "
19681 if set tzname val -a d_tzname; eval $csym; $val; then
19682         val="$define"
19683         echo 'tzname[] found.' >&4
19684 else
19685         val="$undef"
19686         echo 'tzname[] NOT found.' >&4
19687 fi
19688 set d_tzname
19689 eval $setvar
19690
19691 : Check if is a multiplatform env
19692 case "$osname" in
19693 darwin) multiarch="$define" ;;
19694 esac
19695 case "$multiarch" in
19696 ''|[nN]*) multiarch="$undef" ;;
19697 esac
19698
19699 : check for ordering of bytes in a UV
19700 echo " "
19701 case "$multiarch" in
19702 *$define*)
19703         $cat <<EOM
19704 You seem to be doing a multiarchitecture build,
19705 skipping the byteorder check.
19706
19707 EOM
19708         byteorder='ffff'
19709         ;;
19710 *)
19711         case "$byteorder" in
19712         '')
19713                 $cat <<'EOM'
19714 In the following, larger digits indicate more significance.  A big-endian
19715 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
19716 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
19717 machines may have weird orders like 3412.  A Cray will report 87654321,
19718 an Alpha will report 12345678. If the test program works the default is
19719 probably right.
19720 I'm now running the test program...
19721 EOM
19722                 $cat >try.c <<EOCP
19723 #include <stdio.h>
19724 #$i_stdlib I_STDLIB
19725 #ifdef I_STDLIB
19726 #include <stdlib.h>
19727 #endif
19728 #include <sys/types.h>
19729 typedef $uvtype UV;
19730 int main()
19731 {
19732         int i;
19733         union {
19734                 UV l;
19735                 char c[$uvsize];
19736         } u;
19737
19738         if ($uvsize > 4)
19739                 u.l = (((UV)0x08070605) << 32) | (UV)0x04030201;
19740         else
19741                 u.l = (UV)0x04030201;
19742         for (i = 0; i < $uvsize; i++)
19743                 printf("%c", u.c[i]+'0');
19744         printf("\n");
19745         exit(0);
19746 }
19747 EOCP
19748                 xxx_prompt=y
19749                 set try
19750                 if eval $compile && $run ./try > /dev/null; then
19751                         dflt=`$run ./try`
19752                         case "$dflt" in
19753                         [1-4][1-4][1-4][1-4]|12345678|87654321)
19754                                 echo "(The test program ran ok.)"
19755                                 echo "byteorder=$dflt"
19756                                 xxx_prompt=n
19757                         ;;
19758                         ????|????????) echo "(The test program ran ok.)" ;;
19759                         *) echo "(The test program didn't run right for some reason.)" ;;
19760                         esac
19761                 else
19762                         dflt='4321'
19763                         cat <<'EOM'
19764 (I can't seem to compile the test program.  Guessing big-endian...)
19765 EOM
19766                 fi
19767                 case "$xxx_prompt" in
19768                 y)
19769                         rp="What is the order of bytes in $uvtype?"
19770                         . ./myread
19771                         byteorder="$ans"
19772                         ;;
19773                 *)      byteorder=$dflt
19774                         ;;
19775                 esac
19776                 ;;
19777         esac
19778         $rm_try
19779         ;;
19780 esac
19781
19782 : Checking 32bit alignedness
19783 $cat <<EOM
19784
19785 Checking to see whether you can access character data unalignedly...
19786 EOM
19787 case "$d_u32align" in
19788 '')   $cat >try.c <<EOCP
19789 #include <stdio.h>
19790 #$i_stdlib I_STDLIB
19791 #ifdef I_STDLIB
19792 #include <stdlib.h>
19793 #endif
19794 #define U32 $u32type
19795 #define BYTEORDER 0x$byteorder
19796 #define U8 $u8type
19797 #include <signal.h>
19798 #ifdef SIGBUS
19799 $signal_t bletch(int s) { exit(4); }
19800 #endif
19801 int main() {
19802 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
19803     volatile U8 buf[8];
19804     volatile U32 *up;
19805     int i;
19806
19807     if (sizeof(U32) != 4) {
19808         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
19809         exit(1);
19810     }
19811
19812     fflush(stdout);
19813
19814 #ifdef SIGBUS
19815     signal(SIGBUS, bletch);
19816 #endif
19817
19818     buf[0] = 0;
19819     buf[1] = 0;
19820     buf[2] = 0;
19821     buf[3] = 1;
19822     buf[4] = 0;
19823     buf[5] = 0;
19824     buf[6] = 0;
19825     buf[7] = 1;
19826
19827     for (i = 0; i < 4; i++) {
19828         up = (U32*)(buf + i);
19829         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
19830                (*up == 1 << (8*(3-i)))  /* little-endian */
19831               )
19832            )
19833         {
19834             printf("read failed (%x)\n", *up);
19835             exit(2);
19836         }
19837     }
19838
19839     /* write test */
19840     for (i = 0; i < 4; i++) {
19841         up = (U32*)(buf + i);
19842         *up = 0xBeef;
19843         if (*up != 0xBeef) {
19844             printf("write failed (%x)\n", *up);
19845             exit(3);
19846         }
19847     }
19848
19849     exit(0);
19850 #else
19851     printf("1\n");
19852     exit(1);
19853 #endif
19854     return 0;
19855 }
19856 EOCP
19857 set try
19858 if eval $compile_ok; then
19859         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
19860         $run ./try 2>&1 >/dev/null
19861         case "$?" in
19862         0)      cat >&4 <<EOM
19863 You can access character data pretty unalignedly.
19864 EOM
19865                 d_u32align="$undef"
19866                 ;;
19867         *)      cat >&4 <<EOM
19868 It seems that you must access character data in an aligned manner.
19869 EOM
19870                 d_u32align="$define"
19871                 ;;
19872         esac
19873 else
19874         rp='Can you access character data at unaligned addresses?'
19875         dflt='n'
19876         . ./myread
19877         case "$ans" in
19878         [yY]*)  d_u32align="$undef"  ;;
19879         *)      d_u32align="$define" ;;
19880         esac
19881 fi
19882 $rm_try
19883 ;;
19884 esac
19885
19886 : see if ualarm exists
19887 set ualarm d_ualarm
19888 eval $inlibc
19889
19890 : see if umask exists
19891 set umask d_umask
19892 eval $inlibc
19893
19894 : see if unordered exists
19895 set unordered d_unordered
19896 eval $inlibc
19897
19898 : see if unsetenv exists
19899 set unsetenv d_unsetenv
19900 eval $inlibc
19901
19902 : see if usleep exists
19903 set usleep d_usleep
19904 eval $inlibc
19905
19906 : see if prototype for usleep is available
19907 echo " "
19908 set d_usleepproto usleep $i_unistd unistd.h
19909 eval $hasproto
19910
19911 : see if ustat exists
19912 set ustat d_ustat
19913 eval $inlibc
19914
19915 : see if closedir exists
19916 set closedir d_closedir
19917 eval $inlibc
19918
19919 case "$d_closedir" in
19920 "$define")
19921         echo " "
19922         echo "Checking whether closedir() returns a status..." >&4
19923         cat > try.c <<EOM
19924 #$i_dirent I_DIRENT             /**/
19925 #$i_sysdir I_SYS_DIR            /**/
19926 #$i_sysndir I_SYS_NDIR          /**/
19927 #$i_systypes I_SYS_TYPES        /**/
19928
19929 #if defined(I_SYS_TYPES)
19930 #include <sys/types.h>
19931 #endif
19932 #if defined(I_DIRENT)
19933 #include <dirent.h>
19934 #else
19935 #ifdef I_SYS_NDIR
19936 #include <sys/ndir.h>
19937 #else
19938 #ifdef I_SYS_DIR
19939 #ifdef hp9000s500
19940 #include <ndir.h>       /* may be wrong in the future */
19941 #else
19942 #include <sys/dir.h>
19943 #endif
19944 #endif
19945 #endif
19946 #endif
19947 int main() { return closedir(opendir(".")); }
19948 EOM
19949         set try
19950         if eval $compile_ok; then
19951                 if $run ./try > /dev/null 2>&1 ; then
19952                         echo "Yes, it does."
19953                         val="$undef"
19954                 else
19955                         echo "No, it doesn't."
19956                         val="$define"
19957                 fi
19958         else
19959                 echo "(I can't seem to compile the test program--assuming it doesn't)"
19960                 val="$define"
19961         fi
19962         ;;
19963 *)
19964         val="$undef";
19965         ;;
19966 esac
19967 set d_void_closedir
19968 eval $setvar
19969 $rm_try
19970
19971 : see if there is a wait4
19972 set wait4 d_wait4
19973 eval $inlibc
19974
19975 : see if waitpid exists
19976 set waitpid d_waitpid
19977 eval $inlibc
19978
19979 : look for wcscmp
19980 echo " "
19981 $cat >try.c <<'EOCP'
19982 #include <stdio.h>
19983 #include <wchar.h>
19984 int main ()
19985 {
19986     wchar_t *s = L" ";
19987     return (wcscmp (s, s) ? 1 : 0);
19988     }
19989 EOCP
19990 set try
19991 val="$undef"
19992 if eval $compile; then
19993     `$run ./try`
19994     case "$?" in
19995         0)  echo "A working wcscmp() found." >&4
19996             val="$define" ;;
19997         *)  echo "wcscmp() found, but it doesn't work" >&4
19998             ;;
19999         esac
20000 else
20001     echo "wcscmp() NOT found." >&4
20002     fi
20003 set d_wcscmp
20004 eval $setvar
20005 $rm_try
20006
20007 : see if wcstombs exists
20008 set wcstombs d_wcstombs
20009 eval $inlibc
20010
20011 : look for wcsxfrm
20012 echo " "
20013 $cat >try.c <<'EOCP'
20014 #include <errno.h>
20015 #include <wchar.h>
20016 int main ()
20017 {
20018     wchar_t dst[4], *src = L" ";
20019     errno = 0;
20020     return (wcsxfrm (dst, src, 1) ? errno ? errno : 0 : 1);
20021     }
20022 EOCP
20023 set try
20024 val="$undef"
20025 if eval $compile; then
20026     `$run ./try`
20027     case "$?" in
20028         0)  echo "A working wcsxfrm() found." >&4
20029             val="$define" ;;
20030         *)  echo "wcsxfrm() found, but it doesn't work" >&4
20031             ;;
20032         esac
20033 else
20034     echo "wcsxfrm() NOT found." >&4
20035     fi
20036 set d_wcsxfrm
20037 eval $setvar
20038 $rm_try
20039
20040 : see if wctomb exists
20041 set wctomb d_wctomb
20042 eval $inlibc
20043
20044 : see if writev exists
20045 set writev d_writev
20046 eval $inlibc
20047
20048 : check for alignment requirements
20049 echo " "
20050 case "$alignbytes" in
20051     '') echo "Checking alignment constraints..." >&4
20052         if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
20053             $cat >try.c <<'EOCP'
20054 typedef long double NV;
20055 EOCP
20056         else
20057             $cat >try.c <<'EOCP'
20058 typedef double NV;
20059 EOCP
20060         fi
20061         $cat >>try.c <<'EOCP'
20062 #include <stdio.h>
20063 struct foobar {
20064     char foo;
20065     NV bar;
20066 } try_algn;
20067 int main()
20068 {
20069     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
20070     return(0);
20071 }
20072 EOCP
20073         set try
20074         if eval $compile_ok; then
20075             dflt=`$run ./try`
20076         else
20077             dflt='8'
20078             echo "(I can't seem to compile the test program...)"
20079         fi
20080         case "$multiarch" in
20081             *$define*)
20082                 : The usual safe value is 8, but Darwin with -Duselongdouble
20083                 : needs 16.  Hence, we will take 8 as a minimum, but allow
20084                 : Configure to pick a larger value if needed.
20085                 if $test "$dflt" -lt 8; then
20086                     dflt='8'
20087                     echo "Setting alignment to 8 for multiarch support.">&4
20088                 fi
20089                 ;;
20090         esac
20091         ;;
20092     *) dflt="$alignbytes"
20093         ;;
20094 esac
20095 rp="Doubles must be aligned on a how-many-byte boundary?"
20096 . ./myread
20097 alignbytes="$ans"
20098 $rm_try
20099
20100 : set the base revision
20101 baserev=5.0
20102
20103 : length of character in bytes. Is always 1, otherwise it is not C
20104 : This used to be a test using sizeof
20105 charsize=1
20106
20107 : Check for the number of bits in a character
20108 case "$charbits" in
20109 '')     echo "Checking how long a character is (in bits)..." >&4
20110         $cat >try.c <<EOCP
20111 #include <stdio.h>
20112 int main ()
20113 {
20114     int n;
20115     unsigned char c;
20116     for (c = 1, n = 0; c; c <<= 1, n++) ;
20117     printf ("%d\n", n);
20118     return (0);
20119     }
20120 EOCP
20121         set try
20122         if eval $compile_ok; then
20123                 dflt=`$run ./try`
20124         else
20125                 dflt='8'
20126                 echo "(I can't seem to compile the test program.  Guessing...)"
20127         fi
20128         ;;
20129 *)
20130         dflt="$charbits"
20131         ;;
20132 esac
20133 rp="What is the length of a character (in bits)?"
20134 . ./myread
20135 charbits="$ans"
20136 $rm_try
20137 case "$charbits" in
20138 8)      ;;
20139 *)      cat >&4 << EOM
20140 Your system has an unsigned character size of $charbits bits, which
20141 is rather unusual (normally it is 8 bits).  Perl likely will not work
20142 correctly on your system, with subtle bugs in various places.
20143 EOM
20144         rp='Do you really want to continue?'
20145         dflt='n'
20146         . ./myread
20147         case "$ans" in
20148                 [yY])   echo >&4 "Okay, continuing."    ;;
20149                 *)      exit 1                          ;;
20150         esac
20151 esac
20152
20153 : how do we concatenate cpp tokens here?
20154 echo " "
20155 echo "Checking to see how your cpp does stuff like concatenate tokens..." >&4
20156 $cat >cpp_stuff.c <<'EOCP'
20157 #define RCAT(a,b)a/**/b
20158 #define ACAT(a,b)a ## b
20159 RCAT(Rei,ser)
20160 ACAT(Cir,cus)
20161 EOCP
20162 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
20163 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
20164         echo "Oh!  Smells like ANSI's been here." >&4
20165         echo "We can catify or stringify, separately or together!"
20166         cpp_stuff=42
20167 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
20168         echo "Ah, yes!  The good old days!" >&4
20169         echo "However, in the good old days we don't know how to stringify and"
20170         echo "catify at the same time."
20171         cpp_stuff=1
20172 else
20173         $cat >&4 <<EOM
20174 Hmm, I don't seem to be able to concatenate tokens with your cpp.
20175 You're going to have to edit the values of CAT[2-5] in config.h...
20176 EOM
20177         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
20178 fi
20179 $rm -f cpp_stuff.*
20180
20181 : see if this is a db.h system
20182 set db.h i_db
20183 eval $inhdr
20184
20185 case "$i_db" in
20186 $define)
20187         : Check db version.
20188         echo " "
20189         echo "Checking Berkeley DB version ..." >&4
20190         $cat >try.c <<EOCP
20191 #$d_const HASCONST
20192 #ifndef HASCONST
20193 #define const
20194 #endif
20195 #include <sys/types.h>
20196 #include <stdio.h>
20197 #$i_stdlib I_STDLIB
20198 #ifdef I_STDLIB
20199 #include <stdlib.h>
20200 #endif
20201 #include <db.h>
20202 int main(int argc, char *argv[])
20203 {
20204 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
20205     int Major, Minor, Patch ;
20206     unsigned long Version ;
20207     (void)db_version(&Major, &Minor, &Patch) ;
20208     if (argc == 2) {
20209         printf("%d %d %d %d %d %d\n",
20210                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
20211                Major, Minor, Patch);
20212         exit(0);
20213     }
20214     printf("You have Berkeley DB Version 2 or greater.\n");
20215
20216     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
20217                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
20218     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
20219                 Major, Minor, Patch) ;
20220
20221     /* check that db.h & libdb are compatible */
20222     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
20223         printf("db.h and libdb are incompatible.\n") ;
20224         exit(3);
20225     }
20226
20227     printf("db.h and libdb are compatible.\n") ;
20228
20229     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
20230                 + DB_VERSION_PATCH ;
20231
20232     /* needs to be >= 2.3.4 */
20233     if (Version < 2003004) {
20234     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
20235         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
20236         exit(2);
20237     }
20238
20239     exit(0);
20240 #else
20241 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
20242     if (argc == 2) {
20243         printf("1 0 0\n");
20244         exit(0);
20245     }
20246     printf("You have Berkeley DB Version 1.\n");
20247     exit(0);    /* DB version < 2: the coast is clear. */
20248 #else
20249     exit(1);    /* <db.h> not Berkeley DB? */
20250 #endif
20251 #endif
20252 }
20253 EOCP
20254         set try
20255         if eval $compile_ok && $run ./try; then
20256                 echo 'Looks OK.' >&4
20257                 set `$run ./try 1`
20258                 db_version_major=$1
20259                 db_version_minor=$2
20260                 db_version_patch=$3
20261         else
20262                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
20263                 i_db=$undef
20264                 case " $libs " in
20265                 *"-ldb "*)
20266                         : Remove db from list of libraries to use
20267                         echo "Removing unusable -ldb from library list" >&4
20268                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
20269                         shift
20270                         libs="$*"
20271                         echo "libs = $libs" >&4
20272                         ;;
20273                 esac
20274         fi
20275         $rm_try
20276         ;;
20277 esac
20278
20279 case "$i_db" in
20280 define)
20281         : Check the return type needed for hash
20282         echo " "
20283         echo "Checking return type needed for hash for Berkeley DB ..." >&4
20284         $cat >try.c <<EOCP
20285 #$d_const HASCONST
20286 #ifndef HASCONST
20287 #define const
20288 #endif
20289 #include <sys/types.h>
20290 #include <db.h>
20291
20292 #ifndef DB_VERSION_MAJOR
20293 u_int32_t hash_cb (const void* ptr, size_t size)
20294 {
20295 }
20296 HASHINFO info;
20297 int main()
20298 {
20299         info.hash = hash_cb;
20300 }
20301 #endif
20302 EOCP
20303         if $cc $ccflags -c try.c >try.out 2>&1 ; then
20304                 if $contains warning try.out >>/dev/null 2>&1 ; then
20305                         db_hashtype='int'
20306                 else
20307                         db_hashtype='u_int32_t'
20308                 fi
20309         else
20310                 : XXX Maybe we should just give up here.
20311                 db_hashtype=u_int32_t
20312                 $cat try.out >&4
20313                 echo "Help:  I can't seem to compile the db test program." >&4
20314                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
20315         fi
20316         $rm_try
20317         echo "Your version of Berkeley DB uses $db_hashtype for hash."
20318         ;;
20319 *)      db_hashtype=u_int32_t
20320         ;;
20321 esac
20322 case "$i_db" in
20323 define)
20324         : Check the return type needed for prefix
20325         echo " "
20326         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
20327         cat >try.c <<EOCP
20328 #$d_const HASCONST
20329 #ifndef HASCONST
20330 #define const
20331 #endif
20332 #include <sys/types.h>
20333 #include <db.h>
20334
20335 #ifndef DB_VERSION_MAJOR
20336 size_t prefix_cb (const DBT *key1, const DBT *key2)
20337 {
20338 }
20339 BTREEINFO info;
20340 int main()
20341 {
20342         info.prefix = prefix_cb;
20343 }
20344 #endif
20345 EOCP
20346         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
20347                 if $contains warning try.out >>/dev/null 2>&1 ; then
20348                         db_prefixtype='int'
20349                 else
20350                         db_prefixtype='size_t'
20351                 fi
20352         else
20353                 db_prefixtype='size_t'
20354                 : XXX Maybe we should just give up here.
20355                 $cat try.out >&4
20356                 echo "Help:  I can't seem to compile the db test program." >&4
20357                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
20358         fi
20359         $rm_try
20360         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
20361         ;;
20362 *)      db_prefixtype='size_t'
20363         ;;
20364 esac
20365
20366 : Check what kind of inf/nan your system has
20367 $echo "Checking the kind of infinities and nans you have..." >&4
20368 $cat >try.c <<EOP
20369 #define DOUBLESIZE $doublesize
20370 #$d_longdbl HAS_LONG_DOUBLE
20371 #ifdef HAS_LONG_DOUBLE
20372 #define LONGDBLSIZE $longdblsize
20373 #define LONGDBLKIND $longdblkind
20374 #endif
20375 #$i_math I_MATH
20376 #ifdef I_MATH
20377 #include <math.h>
20378 #endif
20379 #include <stdio.h>
20380 /* Note that whether the sign bit is on or off
20381  * for NaN depends on the CPU/FPU, and possibly
20382  * can be affected by the build toolchain.
20383  *
20384  * For example for older MIPS and HP-PA 2.0 the quiet NaN is:
20385  * 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
20386  * 0x7f, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
20387  * (respectively) as opposed to the more usual
20388  * 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
20389  */
20390 static void bytes(unsigned char *p, unsigned int n) {
20391   int i;
20392   for (i = 0; i < n; i++) {
20393     printf("0x%02x%s", p[i], i < n - 1 ? ", " : "\n");
20394   }
20395 }
20396 int main(int argc, char *argv[]) {
20397    /* We cannot use 1.0/0.0 and 0.0/0.0 (with L suffixes for long double)
20398     * because some compilers are 'smart' and not only warn but refuse to
20399     * compile such 'illegal' values. */
20400    double dinf = exp(1e9);
20401    double dnan = sqrt(-1.0);
20402 #ifdef HAS_LONG_DOUBLE
20403    long double ldinf = (long double)exp(1e9);
20404    long double ldnan = (long double)sqrt(-1.0);
20405 #endif
20406   if (argc == 2) {
20407     switch (argv[1][0]) {
20408     case '1': bytes(&dinf, sizeof(dinf)); break;
20409     case '2': bytes(&dnan, sizeof(dnan)); break;
20410 #ifdef HAS_LONG_DOUBLE
20411 # if LONG_DOUBLEKIND == 3 || LONG_DOUBLEKIND == 4
20412 /* the 80-bit long doubles might have garbage in their excess bytes */
20413     memset((char *)&ldinf + 10, '\0', LONG_DOUBLESIZE - 10);
20414 # endif
20415     case '3': bytes(&ldinf, sizeof(ldinf)); break;
20416     case '4': bytes(&ldnan, sizeof(ldnan)); break;
20417 #endif
20418     }
20419   }
20420   return 0;
20421 }
20422 EOP
20423 set try
20424 if eval $compile; then
20425     doubleinfbytes=`$run ./try 1`
20426     doublenanbytes=`$run ./try 2`
20427     case "$d_longdbl" in
20428     $define)
20429       longdblinfbytes=`$run ./try 3`
20430       longdblnanbytes=`$run ./try 4`
20431       ;;
20432     esac
20433 else
20434     # Defaults in case the above test program failed.
20435     case "$doublekind" in
20436     1) # IEEE 754 32-bit LE
20437        doubleinfbytes='0x00, 0x00, 0xf0, 0x7f'
20438        doublenanbytes='0x00, 0x00, 0xf8, 0x7f'
20439        ;;
20440     2) # IEEE 754 32-bit BE
20441        doubleinfbytes='0x7f, 0xf0, 0x00, 0x00'
20442        doublenanbytes='0x7f, 0xf8, 0x00, 0x00'
20443        ;;
20444     3) # IEEE 754 64-bit LE
20445        doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
20446        doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f'
20447        ;;
20448     4) # IEEE 754 64-bit BE
20449        doubleinfbytes='0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20450        doublenanbytes='0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20451        ;;
20452     5) # IEEE 754 128-bit LE
20453        doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
20454        doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f'
20455        ;;
20456     6) # IEEE 754 128-bit BE
20457        doubleinfbytes='0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20458        doublenanbytes='0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20459        ;;
20460     7) # IEEE 754 64-bit mixed: 32-bit LEs in BE
20461        doubleinfbytes='0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00'
20462        doublenanbytes='0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00'
20463        ;;
20464     8) # IEEE 754 64-bit mixed: 32-bit BEs in LE
20465        doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00'
20466        doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00'
20467        ;;
20468     *) # No idea.
20469        doubleinfbytes=$undef
20470        doublenanbytes=$undef
20471        ;;
20472     esac
20473     case "$longdblkind" in
20474     1) # IEEE 754 128-bit LE
20475        longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f'
20476        longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f'
20477        ;;
20478     2) # IEEE 754 128-bit BE
20479        longdblinfbytes='0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20480        longdblnanbytes='0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20481        ;;
20482     3) # IEEE 754 80-bit LE, 12 or 16 bytes (x86)
20483        case "$longdblsize" in
20484        12) # x86 32-bit (96 bits, or 4 x 32, or 12 x 8)
20485            longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00'
20486            longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00'
20487            ;;
20488        16) # x86_64
20489            longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20490            longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20491            ;;
20492        *)  # No idea.
20493            longdblinfbytes=$undef
20494            longdblnanbytes=$undef
20495        ;;
20496        esac
20497        ;;
20498     4) # IEEE 754 80-bit BE, 12 or 16 bytes
20499        case "$longdblsize" in
20500        12) # 32-bit system
20501            longdblinfbytes='0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20502            longdblnanbytes='0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20503            ;;
20504        16) # 64-bit system
20505            longdblinfbytes='0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20506            longdblnanbytes='0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20507            ;;
20508        *)  # No idea.
20509            longdblinfbytes=$undef
20510            longdblnanbytes=$undef
20511        ;;
20512        esac
20513        ;;
20514     5) # 128-bit LE "double double"
20515        longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
20516        longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f'
20517        ;;
20518     6) # 128-bit BE "double double"
20519        longdblinfbytes='0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20520        longdblnanbytes='0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00'
20521        ;;
20522     *) # No idea.
20523        longdblinfbytes=$undef
20524        longdblnanbytes=$undef
20525        ;;
20526     esac
20527 fi
20528 $rm_try
20529
20530 : Check the length of the double mantissa
20531 $echo "Checking how many mantissa bits your doubles have..." >&4
20532 $cat >try.c <<EOP
20533 #$i_float I_FLOAT
20534 #$i_sunmath I_SUNMATH
20535 #ifdef I_FLOAT
20536 # include <float.h>
20537 #endif
20538 #ifdef I_SUNMATH
20539 # include <sunmath.h>
20540 #endif
20541 #ifdef DBL_MANT_DIG
20542 # define BITS (DBL_MANT_DIG - 1) /* the implicit bit does not count */
20543 #endif
20544 #include <stdio.h>
20545 int main(int argc, char *argv[]) {
20546 #ifdef BITS
20547   printf("%d\n", BITS);
20548 #endif
20549   return 0;
20550 }
20551 EOP
20552 set try
20553 if eval $compile; then
20554     doublemantbits=`$run ./try`
20555 else
20556     doublemantbits="$undef"
20557 fi
20558 $rm_try
20559
20560 : Check the length of the longdouble mantissa
20561 $echo "Checking how many mantissa bits your long doubles have..." >&4
20562 $cat >try.c <<EOP
20563 #$i_float I_FLOAT
20564 #$i_sunmath I_SUNMATH
20565 #ifdef I_FLOAT
20566 # include <float.h>
20567 #endif
20568 #ifdef I_SUNMATH
20569 # include <sunmath.h>
20570 #endif
20571 #$d_longdbl HAS_LONG_DOUBLE
20572 #if defined(HAS_LONG_DOUBLE) && defined(LDBL_MANT_DIG)
20573 # if ($longdblkind == 3) || ($longdblkind == 4) /* 80-bit extended precision */
20574 /* This format has no implicit bit.  Beware, however, that for
20575  * this format the bare LDBL_MANT_DIG is misleading for inf/nan:
20576  * the top three bits are used for inf (100) / qnan (11x) / snan (101),
20577  * and the top bit must have been one since 387, zero is plain invalid.
20578  * For normal fp values, the LDBL_MANT_DIG is fine, though. */
20579 #  define BITS LDBL_MANT_DIG
20580 # elif ($longdblkind == 5 || $longdblkind == 6) /* double double */
20581 /* LDBL_MANT_DIG of 106 (twice 53) would be logical, but for some
20582  * reason e.g. Irix thinks 107.  But in any case, we want only
20583  * the number of real bits, the implicit bits are of no interest.  */
20584 #  define BITS 2 * (DBL_MANT_DIG - 1)
20585 # else
20586 #  define BITS (LDBL_MANT_DIG - 1) /* the implicit bit does not count */
20587 # endif
20588 #endif
20589 #include <stdio.h>
20590 int main(int argc, char *argv[]) {
20591 #ifdef BITS
20592   printf("%d\n", BITS);
20593 #endif
20594   return 0;
20595 }
20596 EOP
20597 set try
20598 if eval $compile; then
20599     longdblmantbits=`$run ./try`
20600 else
20601     longdblmantbits="$undef"
20602 fi
20603 $rm_try
20604
20605 : Check the length of the NV mantissa
20606 $echo "Checking how many mantissa bits your NVs have..." >&4
20607 if test "X$usequadmath" = "X$define"; then
20608   nvmantbits=112 # 128-1-15
20609 else
20610   if test "X$nvsize" = "X$doublesize"; then
20611     nvmantbits="$doublemantbits"
20612   else
20613      if test "X$nvsize" = "X$longdblsize"; then
20614        nvmantbits="$longdblmantbits"
20615      else
20616        nvmantbits="$undef"
20617      fi
20618   fi
20619 fi
20620
20621 : How can we generate normalized random numbers ?
20622 echo " "
20623 echo "Using our internal random number implementation..." >&4
20624
20625 case "$ccflags" in
20626 *-Dmy_rand=*|*-Dmy_srand=*)
20627         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
20628         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
20629         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
20630         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
20631         ;;
20632 esac
20633
20634 randfunc=Perl_drand48
20635 drand01="Perl_drand48()"
20636 seedfunc="Perl_drand48_init"
20637 randbits=48
20638 randseedtype=U32
20639
20640 : Determine if this is an EBCDIC system
20641 echo " "
20642 echo "Determining whether or not we are on an EBCDIC system..." >&4
20643 $cat >try.c <<'EOM'
20644 int main()
20645 {
20646   if ('M'==0xd4) return 0;
20647   return 1;
20648 }
20649 EOM
20650
20651 val=$undef
20652 set try
20653 if eval $compile_ok; then
20654         if $run ./try; then
20655                 echo "You seem to speak EBCDIC." >&4
20656                 val="$define"
20657         else
20658                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
20659         fi
20660 else
20661         echo "I'm unable to compile the test program." >&4
20662         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
20663 fi
20664 $rm_try
20665 set ebcdic
20666 eval $setvar
20667
20668 : Check how to flush
20669 echo " "
20670 $cat >&4 <<EOM
20671 Checking how to flush all pending stdio output...
20672 EOM
20673 # I only know how to find the first 32 possibly open files on SunOS.
20674 # See also hints/sunos_4_1.sh and util.c  --AD
20675 case "$osname" in
20676 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
20677 esac
20678 $cat >>try.c <<EOCP
20679 #include <stdio.h>
20680 #$i_stdlib I_STDLIB
20681 #ifdef I_STDLIB
20682 #include <stdlib.h>
20683 #endif
20684 #$i_unistd I_UNISTD
20685 #ifdef I_UNISTD
20686 # include <unistd.h>
20687 #endif
20688 #$d_sysconf HAS_SYSCONF
20689 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
20690 #ifdef HAS_STDIO_STREAM_ARRAY
20691 # define STDIO_STREAM_ARRAY $stdio_stream_array
20692 #endif
20693 int main() {
20694   FILE* p;
20695   unlink("try.out");
20696   p = fopen("try.out", "w");
20697 #ifdef TRY_FPUTC
20698   fputc('x', p);
20699 #else
20700 # ifdef TRY_FPRINTF
20701   fprintf(p, "x");
20702 # endif
20703 #endif
20704 #ifdef TRY_FFLUSH_NULL
20705   fflush(NULL);
20706 #endif
20707 #ifdef TRY_FFLUSH_ALL
20708   {
20709     long open_max = -1;
20710 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
20711     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
20712 # else
20713 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
20714     open_max = sysconf(_SC_OPEN_MAX);
20715 #  else
20716 #   ifdef FOPEN_MAX
20717     open_max = FOPEN_MAX;
20718 #   else
20719 #    ifdef OPEN_MAX
20720     open_max = OPEN_MAX;
20721 #    else
20722 #     ifdef _NFILE
20723     open_max = _NFILE;
20724 #     endif
20725 #    endif
20726 #   endif
20727 #  endif
20728 # endif
20729 # ifdef HAS_STDIO_STREAM_ARRAY
20730     if (open_max > 0) {
20731       long i;
20732       for (i = 0; i < open_max; i++)
20733             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
20734                 STDIO_STREAM_ARRAY[i]._file < open_max &&
20735                 STDIO_STREAM_ARRAY[i]._flag)
20736                 fflush(&STDIO_STREAM_ARRAY[i]);
20737     }
20738   }
20739 # endif
20740 #endif
20741   _exit(42);
20742 }
20743 EOCP
20744 : first we have to find out how _not_ to flush
20745 $to try.c
20746 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
20747     output=''
20748     set try -DTRY_FPUTC
20749     if eval $compile; then
20750             $run ./try 2>/dev/null
20751             code="$?"
20752             $from try.out
20753             if $test ! -s try.out -a "X$code" = X42; then
20754                 output=-DTRY_FPUTC
20755             fi
20756     fi
20757     case "$output" in
20758     '')
20759             set try -DTRY_FPRINTF
20760             if eval $compile; then
20761                     $run ./try 2>/dev/null
20762                     code="$?"
20763                     $from try.out
20764                     if $test ! -s try.out -a "X$code" = X42; then
20765                         output=-DTRY_FPRINTF
20766                     fi
20767             fi
20768         ;;
20769     esac
20770 fi
20771 : check for fflush NULL behavior
20772 case "$fflushNULL" in
20773 '')     set try -DTRY_FFLUSH_NULL $output
20774         if eval $compile; then
20775                 $run ./try 2>/dev/null
20776                 code="$?"
20777                 $from try.out
20778                 if $test -s try.out -a "X$code" = X42; then
20779                         fflushNULL="`$cat try.out`"
20780                 else
20781                         if $test "X$code" != X42; then
20782                                 $cat >&4 <<EOM
20783 (If this test failed, don't worry, we'll try another method shortly.)
20784 EOM
20785                         fi
20786                 fi
20787         fi
20788         $rm -f core try.core core.try.*
20789         case "$fflushNULL" in
20790         x)      $cat >&4 <<EOM
20791 Your fflush(NULL) works okay for output streams.
20792 Let's see if it clobbers input pipes...
20793 EOM
20794 # As of mid-March 2000 all versions of Solaris appear to have a stdio
20795 # bug that improperly flushes the input end of pipes.  So we avoid the
20796 # autoflush on fork/system/exec support for now. :-(
20797 $cat >tryp.c <<EOCP
20798 #include <stdio.h>
20799 int
20800 main(int argc, char **argv)
20801 {
20802     char buf[1024];
20803     int i;
20804     char *bp = buf;
20805     while (1) {
20806         while ((i = getc(stdin)) != -1
20807                && (*bp++ = i) != '\n'
20808                && bp < &buf[1024])
20809         /* DO NOTHING */ ;
20810         *bp = '\0';
20811         fprintf(stdout, "%s", buf);
20812         fflush(NULL);
20813         if (i == -1)
20814             return 0;
20815         bp = buf;
20816     }
20817 }
20818 EOCP
20819                 fflushNULL="$define"
20820                 set tryp
20821                 if eval $compile; then
20822                     $rm -f tryp.out
20823                     # Copy the .c file to the remote host ($to is an ssh-alike if targethost is set)
20824                     if $test "X$targethost" != X; then
20825                         $to tryp.c
20826                         $to tryp
20827                         $run "cat tryp.c | ./tryp " 2>/dev/null > tryp.out
20828                     else
20829                         $cat tryp.c | $run ./tryp   2>/dev/null > tryp.out
20830                     fi
20831                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
20832                        $cat >&4 <<EOM
20833 fflush(NULL) seems to behave okay with input streams.
20834 EOM
20835                         fflushNULL="$define"
20836                     else
20837                         $cat >&4 <<EOM
20838 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
20839 EOM
20840                         fflushNULL="$undef"
20841                     fi
20842                 fi
20843                 $rm -f core tryp.c tryp.core core.tryp.*
20844                 ;;
20845         '')     $cat >&4 <<EOM
20846 Your fflush(NULL) isn't working (contrary to ANSI C).
20847 EOM
20848                 fflushNULL="$undef"
20849                 ;;
20850         *)      $cat >&4 <<EOM
20851 Cannot figure out whether your fflush(NULL) works or not.
20852 I'm assuming it doesn't (contrary to ANSI C).
20853 EOM
20854                 fflushNULL="$undef"
20855                 ;;
20856         esac
20857         ;;
20858 $define|true|[yY]*)
20859         fflushNULL="$define"
20860         ;;
20861 *)
20862         fflushNULL="$undef"
20863         ;;
20864 esac
20865 : check explicit looping only if NULL did not work, and if the pipe
20866 : bug does not show up on an explicit flush too
20867 case "$fflushNULL" in
20868 "$undef")
20869         $cat >tryp.c <<EOCP
20870 #include <stdio.h>
20871 int
20872 main(int argc, char **argv)
20873 {
20874     char buf[1024];
20875     int i;
20876     char *bp = buf;
20877     while (1) {
20878         while ((i = getc(stdin)) != -1
20879                && (*bp++ = i) != '\n'
20880                && bp < &buf[1024])
20881         /* DO NOTHING */ ;
20882         *bp = '\0';
20883         fprintf(stdout, "%s", buf);
20884         fflush(stdin);
20885         if (i == -1)
20886             return 0;
20887         bp = buf;
20888     }
20889 }
20890 EOCP
20891         set tryp
20892         if eval $compile; then
20893             $rm -f tryp.out
20894             if $test "X$targethost" != X; then
20895                 $to tryp.c
20896                 $to tryp
20897                 $run "cat tryp.c | ./tryp " 2>/dev/null > tryp.out
20898             else
20899                 $cat tryp.c | $run ./tryp   2>/dev/null > tryp.out
20900             fi
20901             if cmp tryp.c tryp.out >/dev/null 2>&1; then
20902                $cat >&4 <<EOM
20903 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
20904 EOM
20905                 : now check for fflushall behaviour
20906                 case "$fflushall" in
20907                 '')     set try -DTRY_FFLUSH_ALL $output
20908                         if eval $compile; then
20909                                 $cat >&4 <<EOM
20910 (Now testing the other method--but note that this also may fail.)
20911 EOM
20912                                 $run ./try 2>/dev/null
20913                                 code=$?
20914                                 $from try.out
20915                                 if $test -s try.out -a "X$code" = X42; then
20916                                         fflushall="`$cat try.out`"
20917                                 fi
20918                         fi
20919                         $rm_try
20920                         case "$fflushall" in
20921                         x)      $cat >&4 <<EOM
20922 Whew. Flushing explicitly all the stdio streams works.
20923 EOM
20924                                 fflushall="$define"
20925                                 ;;
20926                         '')     $cat >&4 <<EOM
20927 Sigh. Flushing explicitly all the stdio streams doesn't work.
20928 EOM
20929                                 fflushall="$undef"
20930                                 ;;
20931                         *)      $cat >&4 <<EOM
20932 Cannot figure out whether flushing stdio streams explicitly works or not.
20933 I'm assuming it doesn't.
20934 EOM
20935                                 fflushall="$undef"
20936                                 ;;
20937                         esac
20938                         ;;
20939                 "$define"|true|[yY]*)
20940                         fflushall="$define"
20941                         ;;
20942                 *)
20943                         fflushall="$undef"
20944                         ;;
20945                 esac
20946             else
20947                 $cat >&4 <<EOM
20948 All is futile.  Even fflush(stdin) clobbers input pipes!
20949 EOM
20950                 fflushall="$undef"
20951             fi
20952         else
20953             fflushall="$undef"
20954         fi
20955         $rm -f core tryp.c tryp.core core.tryp.*
20956         ;;
20957 *)      fflushall="$undef"
20958         ;;
20959 esac
20960
20961 case "$fflushNULL$fflushall" in
20962 undefundef)
20963         $cat <<EOM
20964 OK, I give up.  I cannot figure out how to flush pending stdio output.
20965 We won't be flushing handles at all before fork/exec/popen.
20966 EOM
20967         ;;
20968 esac
20969 $rm_try tryp
20970
20971 : Store the full pathname to the ar program for use in the C program
20972 : Respect a hint or command line value for full_ar.
20973 case "$full_ar" in
20974 '') full_ar=$ar ;;
20975 esac
20976
20977 : Store the full pathname to the sed program for use in the C program
20978 full_sed=$sed
20979
20980 : see what type gids are declared as in the kernel
20981 echo " "
20982 echo "Looking for the type for group ids returned by getgid()."
20983 set gid_t gidtype xxx stdio.h sys/types.h
20984 eval $typedef
20985 case "$gidtype" in
20986 xxx)
20987         xxx=`./findhdr sys/user.h`
20988         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
20989         case $1 in
20990         unsigned) dflt="$1 $2" ;;
20991         *) dflt="$1" ;;
20992         esac
20993         ;;
20994 *) dflt="$gidtype";;
20995 esac
20996 case "$gidtype" in
20997 gid_t) echo "gid_t found." ;;
20998 *)      rp="What is the type for group ids returned by getgid()?"
20999         . ./myread
21000         gidtype="$ans"
21001         ;;
21002 esac
21003
21004 : Check the size of GID
21005 echo " "
21006 case "$gidtype" in
21007 *_t) zzz="$gidtype"     ;;
21008 *)   zzz="gid"          ;;
21009 esac
21010 echo "Checking the size of $zzz..." >&4
21011 cat > try.c <<EOCP
21012 #include <sys/types.h>
21013 #include <stdio.h>
21014 #$i_stdlib I_STDLIB
21015 #ifdef I_STDLIB
21016 #include <stdlib.h>
21017 #endif
21018 int main() {
21019     printf("%d\n", (int)sizeof($gidtype));
21020     exit(0);
21021 }
21022 EOCP
21023 set try
21024 if eval $compile_ok; then
21025         yyy=`$run ./try`
21026         case "$yyy" in
21027         '')     gidsize=4
21028                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
21029                 ;;
21030         *)      gidsize=$yyy
21031                 echo "Your $zzz is $gidsize bytes long."
21032                 ;;
21033         esac
21034 else
21035         gidsize=4
21036         echo "(I can't compile the test program--guessing $gidsize.)" >&4
21037 fi
21038
21039
21040 : Check if GID is signed
21041 echo " "
21042 case "$gidtype" in
21043 *_t) zzz="$gidtype"     ;;
21044 *)   zzz="gid"          ;;
21045 esac
21046 echo "Checking the sign of $zzz..." >&4
21047 cat > try.c <<EOCP
21048 #include <sys/types.h>
21049 #include <stdio.h>
21050 int main() {
21051         $gidtype foo = -1;
21052         if (foo < 0)
21053                 printf("-1\n");
21054         else
21055                 printf("1\n");
21056 }
21057 EOCP
21058 set try
21059 if eval $compile; then
21060         yyy=`$run ./try`
21061         case "$yyy" in
21062         '')     gidsign=1
21063                 echo "(I can't execute the test program--guessing unsigned.)" >&4
21064                 ;;
21065         *)      gidsign=$yyy
21066                 case "$gidsign" in
21067                  1) echo "Your $zzz is unsigned." ;;
21068                 -1) echo "Your $zzz is signed."   ;;
21069                 esac
21070                 ;;
21071         esac
21072 else
21073         gidsign=1
21074         echo "(I can't compile the test program--guessing unsigned.)" >&4
21075 fi
21076
21077
21078 : Check 64bit sizes
21079 echo " "
21080
21081 if $test X"$quadtype" != X; then
21082
21083 echo "Checking how to print 64-bit integers..." >&4
21084
21085 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
21086         $cat >try.c <<'EOCP'
21087 #include <sys/types.h>
21088 #include <stdio.h>
21089 int main() {
21090   int q = 12345678901;
21091   printf("%ld\n", q);
21092 }
21093 EOCP
21094         set try
21095         if eval $compile; then
21096                 yyy=`$run ./try`
21097                 case "$yyy" in
21098                 12345678901)
21099                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
21100                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
21101                         echo "We will use %d."
21102                         ;;
21103                 esac
21104         fi
21105 fi
21106
21107 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
21108         $cat >try.c <<'EOCP'
21109 #include <sys/types.h>
21110 #include <stdio.h>
21111 int main() {
21112   long q = 12345678901;
21113   printf("%ld\n", q);
21114 }
21115 EOCP
21116         set try
21117         if eval $compile; then
21118                 yyy=`$run ./try`
21119                 case "$yyy" in
21120                 12345678901)
21121                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
21122                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
21123                         echo "We will use %ld."
21124                         ;;
21125                 esac
21126         fi
21127 fi
21128
21129 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
21130         $cat >try.c <<'EOCP'
21131 #include <sys/types.h>
21132 #include <inttypes.h>
21133 #include <stdio.h>
21134 int main() {
21135   int64_t q = 12345678901;
21136   printf("%" PRId64 "\n", q);
21137 }
21138 EOCP
21139         set try
21140         if eval $compile; then
21141                 yyy=`$run ./try`
21142                 case "$yyy" in
21143                 12345678901)
21144                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
21145                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
21146                         echo "We will use the C9X style."
21147                         ;;
21148                 esac
21149         fi
21150 fi
21151
21152 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
21153         $cat >try.c <<EOCP
21154 #include <sys/types.h>
21155 #include <stdio.h>
21156 int main() {
21157   $quadtype q = 12345678901;
21158   printf("%Ld\n", q);
21159 }
21160 EOCP
21161         set try
21162         if eval $compile; then
21163                 yyy=`$run ./try`
21164                 case "$yyy" in
21165                 12345678901)
21166                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
21167                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
21168                         echo "We will use %Ld."
21169                         ;;
21170                 esac
21171         fi
21172 fi
21173
21174 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
21175         $cat >try.c <<'EOCP'
21176 #include <sys/types.h>
21177 #include <stdio.h>
21178 int main() {
21179   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
21180   printf("%lld\n", q);
21181 }
21182 EOCP
21183         set try
21184         if eval $compile; then
21185                 yyy=`$run ./try`
21186                 case "$yyy" in
21187                 12345678901)
21188                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
21189                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
21190                         echo "We will use the %lld style."
21191                         ;;
21192                 esac
21193         fi
21194 fi
21195
21196 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
21197         $cat >try.c <<EOCP
21198 #include <sys/types.h>
21199 #include <stdio.h>
21200 int main() {
21201   $quadtype q = 12345678901;
21202   printf("%qd\n", q);
21203 }
21204 EOCP
21205         set try
21206         if eval $compile; then
21207                 yyy=`$run ./try`
21208                 case "$yyy" in
21209                 12345678901)
21210                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
21211                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
21212                         echo "We will use %qd."
21213                         ;;
21214                 esac
21215         fi
21216 fi
21217
21218 if $test X"$sPRId64" = X; then
21219         echo "Cannot figure out how to print 64-bit integers." >&4
21220 fi
21221 $rm_try
21222
21223 fi
21224
21225 case "$sPRId64" in
21226 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
21227         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef";
21228         ;;
21229 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
21230         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define";
21231         ;;
21232 esac
21233
21234 : Check format strings for internal types
21235 echo " "
21236 $echo "Checking the format strings to be used for Perl's internal types..." >&4
21237
21238 if $test X"$ivsize" = X8; then
21239         ivdformat="$sPRId64"
21240         uvuformat="$sPRIu64"
21241         uvoformat="$sPRIo64"
21242         uvxformat="$sPRIx64"
21243         uvXUformat="$sPRIXU64"
21244 else
21245         if $test X"$ivsize" = X"$longsize"; then
21246                 ivdformat='"ld"'
21247                 uvuformat='"lu"'
21248                 uvoformat='"lo"'
21249                 uvxformat='"lx"'
21250                 uvXUformat='"lX"'
21251         else
21252                 if $test X"$ivsize" = X"$intsize"; then
21253                         ivdformat='"d"'
21254                         uvuformat='"u"'
21255                         uvoformat='"o"'
21256                         uvxformat='"x"'
21257                         uvXUformat='"X"'
21258                 else
21259                         : far out
21260                         if $test X"$ivsize" = X"$shortsize"; then
21261                                 ivdformat='"hd"'
21262                                 uvuformat='"hu"'
21263                                 uvoformat='"ho"'
21264                                 uvxformat='"hx"'
21265                                 uvXUformat='"hX"'
21266                         fi
21267                 fi
21268         fi
21269 fi
21270
21271 if $test X"$usequadmath" = X"$define"; then
21272     nveformat='"Qe"'
21273     nvfformat='"Qf"'
21274     nvgformat='"Qg"'
21275     nvEUformat='"QE"'
21276     nvFUformat='"QF"'
21277     nvGUformat='"QG"'
21278 else
21279     if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
21280         nveformat="$sPRIeldbl"
21281         nvfformat="$sPRIfldbl"
21282         nvgformat="$sPRIgldbl"
21283         nvEUformat="$sPRIEUldbl"
21284         nvFUformat="$sPRIFUldbl"
21285         nvGUformat="$sPRIGUldbl"
21286     else
21287         nveformat='"e"'
21288         nvfformat='"f"'
21289         nvgformat='"g"'
21290         nvEUformat='"E"'
21291         nvFUformat='"F"'
21292         nvGUformat='"G"'
21293     fi
21294 fi
21295
21296 case "$ivdformat" in
21297 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
21298     exit 1
21299     ;;
21300 esac
21301
21302 : Check format string for GID
21303
21304 echo " "
21305 $echo "Checking the format string to be used for gids..." >&4
21306
21307 case "$gidsign" in
21308 -1)     if $test X"$gidsize" = X"$ivsize"; then
21309                 gidformat="$ivdformat"
21310         else
21311                 if $test X"$gidsize" = X"$longsize"; then
21312                         gidformat='"ld"'
21313                 else
21314                         if $test X"$gidsize" = X"$intsize"; then
21315                                 gidformat='"d"'
21316                         else
21317                                 if $test X"$gidsize" = X"$shortsize"; then
21318                                         gidformat='"hd"'
21319                                 fi
21320                         fi
21321                 fi
21322         fi
21323         ;;
21324 *)      if $test X"$gidsize" = X"$uvsize"; then
21325                 gidformat="$uvuformat"
21326         else
21327                 if $test X"$gidsize" = X"$longsize"; then
21328                         gidformat='"lu"'
21329                 else
21330                         if $test X"$gidsize" = X"$intsize"; then
21331                                 gidformat='"u"'
21332                         else
21333                                 if $test X"$gidsize" = X"$shortsize"; then
21334                                         gidformat='"hu"'
21335                                 fi
21336                         fi
21337                 fi
21338         fi
21339         ;;
21340 esac
21341
21342 : see if getgroups exists
21343 set getgroups d_getgrps
21344 eval $inlibc
21345
21346 : see if setgroups exists
21347 set setgroups d_setgrps
21348 eval $inlibc
21349
21350 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
21351 echo " "
21352 case "$d_getgrps$d_setgrps" in
21353 *define*)
21354         case "$groupstype" in
21355         '') dflt="$gidtype" ;;
21356         *)  dflt="$groupstype" ;;
21357         esac
21358         $cat <<EOM
21359 What type of pointer is the second argument to getgroups() and setgroups()?
21360 Usually this is the same as group ids, $gidtype, but not always.
21361
21362 EOM
21363         rp='What type pointer is the second argument to getgroups() and setgroups()?'
21364         . ./myread
21365         groupstype="$ans"
21366         ;;
21367 *)  groupstype="$gidtype";;
21368 esac
21369
21370 : check whether make sets MAKE
21371 echo " "
21372 echo "Checking if your $make program sets \$(MAKE)..." >&4
21373 case "$make_set_make" in
21374 '')
21375         $sed 's/^X //' > testmake.mak << 'EOF'
21376 Xall:
21377 X       @echo 'maketemp="$(MAKE)"'
21378 EOF
21379         case "`$make -f testmake.mak 2>/dev/null`" in
21380         *maketemp=*) make_set_make='#' ;;
21381         *)      make_set_make="MAKE=$make" ;;
21382         esac
21383         $rm -f testmake.mak
21384         ;;
21385 esac
21386 case "$make_set_make" in
21387 '#') echo "Yup, it does.";;
21388 *) echo "Nope, it doesn't.";;
21389 esac
21390
21391 : see what type is used for mode_t
21392 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
21393 set mode_t modetype int stdio.h sys/types.h
21394 eval $typedef_ask
21395
21396 : see if we need va_copy
21397 echo " "
21398 case "$i_stdarg" in
21399 "$define")
21400         $cat >try.c <<EOCP
21401 #include <stdarg.h>
21402 #include <stdio.h>
21403 #$i_stdlib I_STDLIB
21404 #ifdef I_STDLIB
21405 #include <stdlib.h>
21406 #endif
21407 #include <signal.h>
21408
21409 int
21410 ivfprintf(FILE *f, const char *fmt, va_list *valp)
21411 {
21412   return vfprintf(f, fmt, *valp);
21413 }
21414
21415 int
21416 myvfprintf(FILE *f, const  char *fmt, va_list val)
21417 {
21418   return ivfprintf(f, fmt, &val);
21419 }
21420
21421 int
21422 myprintf(char *fmt, ...)
21423 {
21424   va_list val;
21425   va_start(val, fmt);
21426   return myvfprintf(stdout, fmt, val);
21427 }
21428
21429 int
21430 main(int ac, char **av)
21431 {
21432   signal(SIGSEGV, exit);
21433
21434   myprintf("%s%cs all right, then\n", "that", '\'');
21435   exit(0);
21436 }
21437 EOCP
21438         set try
21439         if eval $compile && $run ./try 2>&1 >/dev/null; then
21440                 case "`$run ./try`" in
21441                 "that's all right, then")
21442                         okay=yes
21443                         ;;
21444                 esac
21445         fi
21446         case "$okay" in
21447         yes)    echo "It seems that you don't need va_copy()." >&4
21448                 need_va_copy="$undef"
21449                 ;;
21450         *)      echo "It seems that va_copy() or similar will be needed." >&4
21451                 need_va_copy="$define"
21452                 ;;
21453         esac
21454         $rm_try
21455         ;;
21456 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
21457         need_va_copy="$undef"
21458         ;;
21459 esac
21460
21461 : see what type is used for size_t
21462 rp="What is the type used for the length parameter for string functions?"
21463 set size_t sizetype 'unsigned int' stdio.h sys/types.h
21464 eval $typedef_ask
21465
21466 : check for type of arguments to gethostbyaddr.
21467 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
21468         case "$d_gethbyaddr" in
21469         $define)
21470                 $cat <<EOM
21471
21472 Checking to see what type of arguments are accepted by gethostbyaddr().
21473 EOM
21474                 hdrs="$define sys/types.h
21475                         $d_socket sys/socket.h
21476                         $i_niin netinet/in.h
21477                         $i_netdb netdb.h
21478                         $i_unistd unistd.h"
21479                 : The first arg can 'char *' or 'void *'
21480                 : The second arg is some of integral type
21481                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
21482                         for yyy in size_t long int; do
21483                                 case "$netdb_host_type" in
21484                                 '')     try="$extern_C struct hostent *gethostbyaddr($xxx, $yyy, int);"
21485                                         if ./protochk "$try" $hdrs; then
21486                                                 echo "Your system accepts $xxx for the first arg."
21487                                                 echo "...and $yyy for the second arg."
21488                                                 netdb_host_type="$xxx"
21489                                                 netdb_hlen_type="$yyy"
21490                                         fi
21491                                         ;;
21492                                 esac
21493                         done
21494                 done
21495                 : In case none of those worked, prompt the user.
21496                 case "$netdb_host_type" in
21497                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
21498                         dflt='char *'
21499                         . ./myread
21500                         netdb_host_type=$ans
21501                         rp='What is the type for the 2nd argument to gethostbyaddr?'
21502                         dflt="$sizetype"
21503                         . ./myread
21504                         netdb_hlen_type=$ans
21505                         ;;
21506                 esac
21507                 ;;
21508         *)      : no gethostbyaddr, so pick harmless defaults
21509                 netdb_host_type='char *'
21510                 netdb_hlen_type="$sizetype"
21511                 ;;
21512         esac
21513         # Remove the "const" if needed. -- but then we'll have a
21514         # prototype clash!
21515         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
21516 fi
21517
21518 : check for type of argument to gethostbyname.
21519 if test "X$netdb_name_type" = X ; then
21520         case "$d_gethbyname" in
21521         $define)
21522                 $cat <<EOM
21523
21524 Checking to see what type of argument is accepted by gethostbyname().
21525 EOM
21526                 hdrs="$define sys/types.h
21527                         $d_socket sys/socket.h
21528                         $i_niin netinet/in.h
21529                         $i_netdb netdb.h
21530                         $i_unistd unistd.h"
21531                 for xxx in "const char *" "char *"; do
21532                         case "$netdb_name_type" in
21533                         '')     try="$extern_C struct hostent *gethostbyname($xxx);"
21534                                 if ./protochk "$try" $hdrs; then
21535                                         echo "Your system accepts $xxx."
21536                                         netdb_name_type="$xxx"
21537                                 fi
21538                                 ;;
21539                         esac
21540                 done
21541                 : In case none of those worked, prompt the user.
21542                 case "$netdb_name_type" in
21543                 '')     rp='What is the type for the 1st argument to gethostbyname?'
21544                         dflt='char *'
21545                         . ./myread
21546                         netdb_name_type=$ans
21547                         ;;
21548                 esac
21549                 ;;
21550         *)      : no gethostbyname, so pick harmless default
21551                 netdb_name_type='char *'
21552                 ;;
21553         esac
21554 fi
21555
21556 : check for type of 1st argument to getnetbyaddr.
21557 if test "X$netdb_net_type" = X ; then
21558         case "$d_getnbyaddr" in
21559         $define)
21560                 $cat <<EOM
21561
21562 Checking to see what type of 1st argument is accepted by getnetbyaddr().
21563 EOM
21564                 hdrs="$define sys/types.h
21565                         $d_socket sys/socket.h
21566                         $i_niin netinet/in.h
21567                         $i_netdb netdb.h
21568                         $i_unistd unistd.h"
21569                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
21570                         case "$netdb_net_type" in
21571                         '')     try="$extern_C struct netent *getnetbyaddr($xxx, int);"
21572                                 if ./protochk "$try" $hdrs; then
21573                                         echo "Your system accepts $xxx."
21574                                         netdb_net_type="$xxx"
21575                                 fi
21576                                 ;;
21577                         esac
21578                 done
21579                 : In case none of those worked, prompt the user.
21580                 case "$netdb_net_type" in
21581                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
21582                         dflt='long'
21583                         . ./myread
21584                         netdb_net_type=$ans
21585                         ;;
21586                 esac
21587                 ;;
21588         *)      : no getnetbyaddr, so pick harmless default
21589                 netdb_net_type='long'
21590                 ;;
21591         esac
21592 fi
21593 : locate the preferred pager for this system
21594 fn=f/
21595 case "$pager" in
21596 '')
21597         dflt=''
21598         case "$pg" in
21599         /*) dflt=$pg;;
21600         [a-zA-Z]:/*) dflt=$pg;;
21601         esac
21602         case "$more" in
21603         /*) dflt=$more;;
21604         [a-zA-Z]:/*) dflt=$more;;
21605         esac
21606         case "$less" in
21607         /*) dflt=$less;;
21608         [a-zA-Z]:/*) dflt=$less;;
21609         esac
21610         case "$dflt" in
21611         '') dflt=/usr/ucb/more;;
21612         esac
21613         ;;
21614 *)      dflt="$pager"
21615         ;;
21616 esac
21617 fn="f/($dflt)"
21618 echo " "
21619 rp='What pager is used on your system?'
21620 . ./getfile
21621 pager="$ans"
21622
21623 : see what type pids are declared as in the kernel
21624 rp="What is the type of process ids on this system?"
21625 set pid_t pidtype int stdio.h sys/types.h
21626 eval $typedef_ask
21627
21628 : see if ar generates random libraries by itself
21629 echo " "
21630 echo "Checking how to generate random libraries on your machine..." >&4
21631 echo 'int bar1() { return bar2(); }' > bar1.c
21632 echo 'int bar2() { return 2; }' > bar2.c
21633 $cat > foo.c <<EOP
21634 #$i_stdlib I_STDLIB
21635 #ifdef I_STDLIB
21636 #include <stdlib.h>
21637 #endif
21638 int main() { printf("%d\n", bar1()); exit(0); }
21639 EOP
21640 $cc $ccflags -c bar1.c >/dev/null 2>&1
21641 $cc $ccflags -c bar2.c >/dev/null 2>&1
21642 $cc $ccflags -c foo.c >/dev/null 2>&1
21643 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
21644 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
21645         $run ./foobar >/dev/null 2>&1; then
21646         echo "$ar appears to generate random libraries itself."
21647         orderlib=false
21648         if [ "X$ranlib" = "X" ]; then
21649             ranlib=":"
21650         fi
21651 elif $ar s bar$_a >/dev/null 2>&1 &&
21652         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
21653         $run ./foobar >/dev/null 2>&1; then
21654                 echo "a table of contents needs to be added with '$ar s'."
21655                 orderlib=false
21656                 ranlib="$ar s"
21657 elif $ar ts bar$_a >/dev/null 2>&1 &&
21658         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
21659         $run ./foobar >/dev/null 2>&1; then
21660                 echo "a table of contents needs to be added with '$ar ts'."
21661                 orderlib=false
21662                 ranlib="$ar ts"
21663 else
21664         case "$ranlib" in
21665         :) ranlib='';;
21666         '')
21667                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
21668                 $test -f $ranlib || ranlib=''
21669                 ;;
21670         esac
21671         if $test -n "$ranlib"; then
21672                 echo "your system has '$ranlib'; we'll use that."
21673                 orderlib=false
21674         else
21675                 echo "your system doesn't seem to support random libraries"
21676                 echo "so we'll use lorder and tsort to order the libraries."
21677                 orderlib=true
21678                 ranlib=":"
21679         fi
21680 fi
21681 $rm -f foo* bar*
21682
21683 : see if this is a values.h system
21684 set values.h i_values
21685 eval $inhdr
21686
21687 : Check the max offset that gmtime and localtime accept
21688 echo "Checking max offsets that gmtime () accepts"
21689
21690 case $i_values in
21691     define) yyy="#include <values.h>" ;;
21692     *)      yyy="" ;;
21693     esac
21694
21695 case "$sGMTIME_min/$sGMTIME_max" in
21696     0/0|/)
21697         $cat >try.c <<EOCP
21698 #include <sys/types.h>
21699 #include <stdio.h>
21700 #include <time.h>
21701 $yyy
21702
21703 int i;
21704 struct tm *tmp;
21705 time_t pt;
21706
21707 void gm_check (time_t t, int min_year, int max_year)
21708 {
21709     tmp = gmtime (&t);
21710     if ( tmp == NULL ||
21711         /* Check tm_year overflow */
21712          tmp->tm_year < min_year || tmp->tm_year > max_year)
21713         tmp = NULL;
21714     else
21715         pt = t;
21716     } /* gm_check */
21717
21718 int check_max ()
21719 {
21720     tmp = NULL;
21721     pt  = 0;
21722 #ifdef MAXLONG
21723     gm_check (MAXLONG, 69, 0x7fffffff);
21724 #endif
21725     if (tmp == NULL || tmp->tm_year < 0) {
21726         for (i = 63; i >= 0; i--) {
21727             time_t x = pt | ((time_t)1 << i);
21728             if (x < 0 || x < pt) continue;
21729             gm_check (x, 69, 0x7fffffff);
21730             }
21731         }
21732     printf ("sGMTIME_max=%ld\n", pt);
21733     return (0);
21734     } /* check_max */
21735
21736 int check_min ()
21737 {
21738     tmp = NULL;
21739     pt  = 0;
21740 #ifdef MINLONG
21741     gm_check (MINLONG, -1900, 70);
21742 #endif
21743     if (tmp == NULL) {
21744         for (i = 36; i >= 0; i--) {
21745             time_t x = pt - ((time_t)1 << i);
21746             if (x > 0) continue;
21747             gm_check (x, -1900, 70);
21748             }
21749         }
21750     printf ("sGMTIME_min=%ld\n", pt);
21751     return (0);
21752     } /* check_min */
21753
21754 int main (int argc, char *argv[])
21755 {
21756     /* fprintf (stderr, "Sizeof time_t = %ld\n", sizeof (time_t)); */
21757     check_max ();
21758     check_min ();
21759     return (0);
21760     } /* main */
21761 EOCP
21762         set try
21763         if eval $compile; then
21764             eval `$run ./try 2>/dev/null`
21765         else
21766             echo "Cannot determine sGMTIME_max and sGMTIME_min." >&4
21767             fi
21768         $rm_try
21769         ;;
21770     esac
21771
21772 echo "Checking max offsets that localtime () accepts"
21773
21774 case "$sLOCALTIME_min/$sLOCALTIME_max" in
21775     0/0|/)
21776         $cat >try.c <<EOCP
21777 #include <sys/types.h>
21778 #include <stdio.h>
21779 #include <time.h>
21780 $yyy
21781
21782 int i;
21783 struct tm *tmp;
21784 time_t pt;
21785
21786 void local_check (time_t t, int min_year, int max_year)
21787 {
21788     if (sizeof (time_t) > 4 && t > 0x7ffffffffffff000LL)
21789         tmp = NULL;
21790     else
21791         tmp = localtime (&t);
21792     if ( tmp == NULL ||
21793         /* Check tm_year overflow */
21794          tmp->tm_year < min_year || tmp->tm_year > max_year)
21795         tmp = NULL;
21796     else
21797         pt = t;
21798     } /* local_check */
21799
21800 int check_max ()
21801 {
21802     tmp = NULL;
21803     pt  = 0;
21804 #ifdef MAXLONG
21805     local_check (MAXLONG, 69, 0x7fffffff);
21806 #endif
21807     if (tmp == NULL || tmp->tm_year < 0) {
21808         for (i = 63; i >= 0; i--) {
21809             time_t x = pt | ((time_t)1 << i);
21810             if (x < 0 || x < pt) continue;
21811             local_check (x, 69, 0x7fffffff);
21812             }
21813         }
21814     printf ("sLOCALTIME_max=%ld\n", pt);
21815     return (0);
21816    } /* check_max */
21817
21818 int check_min ()
21819 {
21820     tmp = NULL;
21821     pt  = 0;
21822 #ifdef MINLONG
21823     local_check (MINLONG, -1900, 70);
21824 #endif
21825     if (tmp == NULL) {
21826         for (i = 36; i >= 0; i--) {
21827             time_t x = pt - ((time_t)1 << i);
21828             if (x > 0) continue;
21829             local_check (x, -1900, 70);
21830             }
21831         }
21832     printf ("sLOCALTIME_min=%ld\n", pt);
21833     return (0);
21834     } /* check_min */
21835
21836 int main (int argc, char *argv[])
21837 {
21838     check_max ();
21839     check_min ();
21840     return (0);
21841     } /* main */
21842 EOCP
21843         set try
21844         if eval $compile; then
21845             eval `$run ./try 2>/dev/null`
21846         else
21847             echo "Cannot determine sLOCALTIME_max and sLOCALTIME_min." >&4
21848             fi
21849         $rm_try
21850         ;;
21851     esac
21852
21853 : check for type of arguments to select.
21854 case "$selecttype" in
21855 '') case "$d_select" in
21856         $define)
21857                 echo " "
21858                 $cat <<EOM
21859 Checking to see what type of arguments are accepted by select().
21860 EOM
21861                 hdrs="$define sys/types.h
21862                         $i_systime sys/time.h
21863                         $i_sysselct sys/select.h
21864                         $d_socket sys/socket.h"
21865                 : The first arg can be int, unsigned, or size_t
21866                 : The last arg may or may not be 'const'
21867                 val=''
21868                 : void pointer has been seen but using that
21869                 : breaks the selectminbits test
21870                 for xxx in 'fd_set *' 'int *'; do
21871                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
21872                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
21873                                         case "$val" in
21874                                         '')     try="$extern_C select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
21875                                                 if ./protochk "$try" $hdrs; then
21876                                                         echo "Your system accepts $xxx."
21877                                                         val="$xxx"
21878                                                 fi
21879                                                 ;;
21880                                         esac
21881                                 done
21882                         done
21883                 done
21884                 case "$val" in
21885                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
21886                         case "$d_fd_set" in
21887                                 $define) dflt="fd_set *" ;;
21888                                 *)              dflt="int *" ;;
21889                         esac
21890                         . ./myread
21891                         val=$ans
21892                         ;;
21893                 esac
21894                 selecttype="$val"
21895                 ;;
21896         *)      : no select, so pick a harmless default
21897                 selecttype='int *'
21898                 ;;
21899         esac
21900         ;;
21901 esac
21902
21903 : check for the select 'width'
21904 case "$selectminbits" in
21905 '') safebits=`expr $ptrsize \* 8`
21906     case "$d_select" in
21907         $define)
21908                 $cat <<EOM
21909
21910 Checking to see on how many bits at a time your select() operates...
21911 EOM
21912                 $cat >try.c <<EOCP
21913 #include <sys/types.h>
21914 #$i_time I_TIME
21915 #$i_systime I_SYS_TIME
21916 #$i_systimek I_SYS_TIME_KERNEL
21917 #ifdef I_TIME
21918 #   include <time.h>
21919 #endif
21920 #ifdef I_SYS_TIME
21921 #   ifdef I_SYS_TIME_KERNEL
21922 #       define KERNEL
21923 #   endif
21924 #   include <sys/time.h>
21925 #   ifdef I_SYS_TIME_KERNEL
21926 #       undef KERNEL
21927 #   endif
21928 #endif
21929 #$i_sysselct I_SYS_SELECT
21930 #ifdef I_SYS_SELECT
21931 #include <sys/select.h>
21932 #endif
21933 #$d_socket HAS_SOCKET
21934 #ifdef HAS_SOCKET
21935 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
21936 #endif
21937 #include <stdio.h>
21938 #$i_stdlib I_STDLIB
21939 #ifdef I_STDLIB
21940 #include <stdlib.h>
21941 #endif
21942 $selecttype b;
21943 #define S sizeof(*(b))
21944 #define MINBITS 64
21945 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
21946 #define NBITS  (NBYTES * 8)
21947 int main() {
21948     char *s = (char *)malloc(NBYTES);
21949     struct timeval t;
21950     int i;
21951     FILE* fp;
21952     int fd;
21953
21954     if (!s)
21955         exit(1);
21956     fclose(stdin);
21957     fp = fopen("try.c", "r");
21958     if (fp == 0)
21959       exit(2);
21960     fd = fileno(fp);
21961     if (fd < 0)
21962       exit(3);
21963     b = ($selecttype)s;
21964     for (i = 0; i < NBITS; i++)
21965         FD_SET(i, b);
21966     t.tv_sec  = 0;
21967     t.tv_usec = 0;
21968     select(fd + 1, b, 0, 0, &t);
21969     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
21970     free(s);
21971     printf("%d\n", i + 1);
21972     return 0;
21973 }
21974 EOCP
21975                 set try
21976                 if eval $compile_ok; then
21977                         selectminbits=`$run ./try 2>/dev/null`
21978                         case "$selectminbits" in
21979                         '')     cat >&4 <<EOM
21980 Cannot figure out on how many bits at a time your select() operates.
21981 I'll play safe and guess it is $safebits bits.
21982 EOM
21983                                 selectminbits=$safebits
21984                                 bits="$safebits bits"
21985                                 ;;
21986                         1)      bits="1 bit" ;;
21987                         *)      bits="$selectminbits bits" ;;
21988                         esac
21989                         echo "Your select() operates on $bits at a time." >&4
21990                 else
21991                         rp='What is the minimum number of bits your select() operates on?'
21992                         case "$byteorder" in
21993                         12345678)       dflt=64 ;;
21994                         1234)           dflt=32 ;;
21995                         *)              dflt=1  ;;
21996                         esac
21997                         . ./myread
21998                         val=$ans
21999                         selectminbits="$val"
22000                 fi
22001                 $rm_try
22002                 ;;
22003         *)      : no select, so pick a harmless default
22004                 selectminbits=$safebits
22005                 ;;
22006         esac
22007         ;;
22008 esac
22009
22010 : Trace out the files included by signal.h, then look for SIGxxx names.
22011 case "$sig_num_init" in
22012 '')
22013 if [ "X$fieldn" = X ]; then
22014         : Just make some guesses.  We check them later.
22015         xxx="$sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h"
22016 else
22017         xxx=`echo '#include <signal.h>' |
22018         $cppstdin $cppminus $cppflags 2>/dev/null |
22019         $grep '^[       ]*#.*include' |
22020         $awk "{print \\$$fieldn}" | $sed 's!"!!g' |\
22021                 $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
22022 fi
22023 xxxfiles=''
22024 for xx in $xxx /dev/null ; do
22025         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
22026 done
22027 case "$xxxfiles" in
22028 '')     xxxfiles=`./findhdr signal.h` ;;
22029 esac
22030 xxx=`awk '
22031 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
22032         print substr($2, 4, 20)
22033 }
22034 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
22035         print substr($3, 4, 20)
22036 }' $xxxfiles`
22037 : Append some common names just in case the awk scan failed.
22038 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
22039 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
22040 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
22041 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
22042 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
22043
22044 : generate a few handy files for later
22045 $cat > signal.c <<EOCP
22046 #include <sys/types.h>
22047 #include <signal.h>
22048 #$i_stdlib I_STDLIB
22049 #ifdef I_STDLIB
22050 #include <stdlib.h>
22051 #endif
22052 #include <stdio.h>
22053 int main() {
22054
22055 /* Strange style to avoid deeply-nested #if/#else/#endif */
22056 #ifndef NSIG
22057 #  ifdef _NSIG
22058 #    define NSIG (_NSIG)
22059 #  endif
22060 #endif
22061
22062 #ifndef NSIG
22063 #  ifdef SIGMAX
22064 #    define NSIG (SIGMAX+1)
22065 #  endif
22066 #endif
22067
22068 #ifndef NSIG
22069 #  ifdef SIG_MAX
22070 #    define NSIG (SIG_MAX+1)
22071 #  endif
22072 #endif
22073
22074 #ifndef NSIG
22075 #  ifdef _SIG_MAX
22076 #    define NSIG (_SIG_MAX+1)
22077 #  endif
22078 #endif
22079
22080 #ifndef NSIG
22081 #  ifdef MAXSIG
22082 #    define NSIG (MAXSIG+1)
22083 #  endif
22084 #endif
22085
22086 #ifndef NSIG
22087 #  ifdef MAX_SIG
22088 #    define NSIG (MAX_SIG+1)
22089 #  endif
22090 #endif
22091
22092 #ifndef NSIG
22093 #  ifdef SIGARRAYSIZE
22094 #    define NSIG SIGARRAYSIZE /* Assume ary[SIGARRAYSIZE] */
22095 #  endif
22096 #endif
22097
22098 #ifndef NSIG
22099 #  ifdef _sys_nsig
22100 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
22101 #  endif
22102 #endif
22103
22104 /* Default to some arbitrary number that's big enough to get most
22105    of the common signals.
22106 */
22107 #ifndef NSIG
22108 #    define NSIG 50
22109 #endif
22110
22111 printf("NSIG %d\n", NSIG);
22112
22113 #ifndef JUST_NSIG
22114
22115 EOCP
22116
22117 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
22118 {
22119         printf "#ifdef SIG"; printf $1; printf "\n"
22120         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
22121         printf $1; printf ");\n"
22122         printf "#endif\n"
22123 }
22124 END {
22125         printf "#endif /* JUST_NSIG */\n";
22126         printf "exit(0);\n}\n";
22127 }
22128 ' >>signal.c
22129 $cat >signal.awk <<'EOP'
22130 BEGIN { ndups = 0 }
22131 $1 ~ /^NSIG$/ { nsig = $2 }
22132 ($1 !~ /^NSIG$/) && (NF == 2) && ($2 ~ /^[0-9][0-9]*$/) {
22133     if ($2 > maxsig) { maxsig = $2 }
22134     if (sig_name[$2]) {
22135         dup_name[ndups] = $1
22136         dup_num[ndups] = $2
22137         ndups++
22138     }
22139     else {
22140         sig_name[$2] = $1
22141         sig_num[$2] = $2
22142     }
22143 }
22144 END {
22145     if (nsig == 0) {
22146         nsig = maxsig + 1
22147     }
22148     printf("NSIG %d\n", nsig);
22149     for (n = 1; n < nsig; n++) {
22150         if (sig_name[n]) {
22151             printf("%s %d\n", sig_name[n], sig_num[n])
22152         }
22153         else {
22154             printf("NUM%d %d\n", n, n)
22155         }
22156     }
22157     for (n = 0; n < ndups; n++) {
22158         printf("%s %d\n", dup_name[n], dup_num[n])
22159     }
22160 }
22161 EOP
22162 $cat >signal_cmd <<EOS
22163 $startsh
22164 if $test -s signal.lst; then
22165     echo "Using your existing signal.lst file"
22166         exit 0
22167 fi
22168 xxx="$xxx"
22169 EOS
22170 $cat >>signal_cmd <<'EOS'
22171
22172 set signal
22173 if eval $compile_ok; then
22174         $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) |\
22175                 $uniq | $awk -f signal.awk >signal.lst
22176 else
22177         echo "(I can't seem be able to compile the whole test program)" >&4
22178         echo "(I'll try it in little pieces.)" >&4
22179         set signal -DJUST_NSIG
22180         if eval $compile_ok; then
22181                 $run ./signal$_exe > signal.nsg
22182                 $cat signal.nsg
22183         else
22184                 echo "I can't seem to figure out how many signals you have." >&4
22185                 echo "Guessing 50." >&4
22186                 echo 'NSIG 50' > signal.nsg
22187         fi
22188         : Now look at all the signal names, one at a time.
22189         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
22190                 $cat > signal.c <<EOCP
22191 #include <sys/types.h>
22192 #include <signal.h>
22193 #include <stdio.h>
22194 int main() {
22195 printf("$xx %d\n", SIG${xx});
22196 return 0;
22197 }
22198 EOCP
22199                 set signal
22200                 if eval $compile; then
22201                         echo "SIG${xx} found."
22202                         $run ./signal$_exe  >> signal.ls1
22203                 else
22204                         echo "SIG${xx} NOT found."
22205                 fi
22206         done
22207         if $test -s signal.ls1; then
22208                 $cat signal.nsg signal.ls1 |
22209                         $sort -n | $uniq | $awk -f signal.awk >signal.lst
22210         fi
22211
22212 fi
22213 if $test -s signal.lst; then
22214         :
22215 else
22216         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
22217         echo 'kill -l' >signal
22218         set X `csh -f <signal`
22219         $rm -f signal
22220         shift
22221         case $# in
22222         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
22223         esac
22224         echo $@ | $tr ' ' $trnl | \
22225             $awk '{ printf "%s %d\n", $1, ++s; }
22226                   END { printf "NSIG %d\n", ++s }' >signal.lst
22227 fi
22228 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
22229 EOS
22230 chmod a+x signal_cmd
22231 $eunicefix signal_cmd
22232
22233 : generate list of signal names
22234 echo " "
22235 case "$sig_name_init" in
22236 '') doinit=yes ;;
22237 *)  case "$sig_num_init" in
22238     ''|*,*) doinit=yes ;;
22239     esac ;;
22240 esac
22241 case "$doinit" in
22242 yes)
22243         echo "Generating a list of signal names and numbers..." >&4
22244         . ./signal_cmd
22245         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
22246         sig_name=`$awk 'BEGIN { printf "ZERO " }
22247                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
22248         sig_num=`$awk  'BEGIN { printf "0 " }
22249                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
22250         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
22251                              !/^NSIG/   { printf "\"%s\", ", $1 }
22252                              END        { printf "0\n" }' signal.lst`
22253         sig_num_init=`$awk  'BEGIN      { printf "0, " }
22254                              !/^NSIG/   { printf "%d, ", $2}
22255                              END        { printf "0\n"}' signal.lst`
22256         ;;
22257 esac
22258 echo "The following $sig_count signals are available:"
22259 echo " "
22260 echo $sig_name | $awk \
22261 'BEGIN { linelen = 0 }
22262 {
22263         for (i = 1; i <= NF; i++) {
22264                 name = "SIG" $i " "
22265                 linelen = linelen + length(name)
22266                 if (linelen > 70) {
22267                         printf "\n"
22268                         linelen = length(name)
22269                 }
22270                 printf "%s", name
22271         }
22272         printf "\n"
22273 }'
22274 sig_size=`echo $sig_name | awk '{print NF}'`
22275 $rm -f signal signal.c signal.awk signal.lst signal_cmd
22276 ;;
22277 esac
22278
22279 : Check size of size
22280 echo " "
22281 case "$sizetype" in
22282 *_t) zzz="$sizetype"    ;;
22283 *)   zzz="filesize"     ;;
22284 esac
22285 echo "Checking the size of $zzz..." >&4
22286 cat > try.c <<EOCP
22287 #include <sys/types.h>
22288 #include <stdio.h>
22289 #$i_stdlib I_STDLIB
22290 #ifdef I_STDLIB
22291 #include <stdlib.h>
22292 #endif
22293 int main() {
22294     printf("%d\n", (int)sizeof($sizetype));
22295     exit(0);
22296 }
22297 EOCP
22298 set try
22299 if eval $compile_ok; then
22300         yyy=`$run ./try`
22301         case "$yyy" in
22302         '')     sizesize=4
22303                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
22304                 ;;
22305         *)      sizesize=$yyy
22306                 echo "Your $zzz size is $sizesize bytes."
22307                 ;;
22308         esac
22309 else
22310         sizesize=4
22311         echo "(I can't compile the test program--guessing $sizesize.)" >&4
22312 fi
22313
22314
22315 : check for socklen_t
22316 echo " "
22317 echo "Checking to see if you have socklen_t..." >&4
22318 $cat >try.c <<EOCP
22319 #include <sys/types.h>
22320 #$d_socket HAS_SOCKET
22321 #ifdef HAS_SOCKET
22322 #include <sys/socket.h>
22323 #endif
22324 int main() { socklen_t x = 16; }
22325 EOCP
22326 set try
22327 if eval $compile; then
22328         val="$define"
22329         echo "You have socklen_t."
22330 else
22331         val="$undef"
22332         echo "You do not have socklen_t."
22333         case "$sizetype" in
22334         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
22335         esac
22336 fi
22337 $rm_try
22338 set d_socklen_t
22339 eval $setvar
22340
22341 : see if this is a socks.h system
22342 set socks.h i_socks
22343 eval $inhdr
22344
22345 : check for type of the size argument to socket calls
22346 case "$d_socket" in
22347 "$define")
22348         $cat <<EOM
22349
22350 Checking to see what type is the last argument of accept().
22351 EOM
22352         yyy=''
22353         case "$d_socklen_t" in
22354         "$define") yyy="$yyy socklen_t"
22355         esac
22356         yyy="$yyy $sizetype int long unsigned"
22357         for xxx in $yyy; do
22358                 case "$socksizetype" in
22359                 '')     try="$extern_C int accept(int, struct sockaddr *, $xxx *);"
22360                         case "$usesocks" in
22361                         "$define")
22362                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
22363                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
22364                                         socksizetype="$xxx"
22365                                 fi
22366                                 ;;
22367                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
22368                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
22369                                         socksizetype="$xxx"
22370                                 fi
22371                                 ;;
22372                         esac
22373                         ;;
22374                 esac
22375         done
22376 : In case none of those worked, prompt the user.
22377         case "$socksizetype" in
22378         '')     rp='What is the type for socket address structure sizes?'
22379                 dflt='int'
22380                 . ./myread
22381                 socksizetype=$ans
22382                 ;;
22383         esac
22384         ;;
22385 *)      : no sockets, so pick relatively harmless default
22386         socksizetype='int'
22387         ;;
22388 esac
22389
22390 : see what type is used for signed size_t
22391 set ssize_t ssizetype int stdio.h sys/types.h
22392 eval $typedef
22393 dflt="$ssizetype"
22394 $cat > try.c <<EOM
22395 #include <stdio.h>
22396 #$i_stdlib I_STDLIB
22397 #ifdef I_STDLIB
22398 #include <stdlib.h>
22399 #endif
22400 #include <sys/types.h>
22401 #define Size_t $sizetype
22402 #define SSize_t $dflt
22403 int main()
22404 {
22405         if (sizeof(Size_t) == sizeof(SSize_t))
22406                 printf("$dflt\n");
22407         else if (sizeof(Size_t) == sizeof(int))
22408                 printf("int\n");
22409         else
22410                 printf("long\n");
22411         exit(0);
22412 }
22413 EOM
22414 echo " "
22415 set try
22416 if eval $compile_ok && $run ./try > /dev/null; then
22417         ssizetype=`$run ./try`
22418         echo "I'll be using $ssizetype for functions returning a byte count." >&4
22419 else
22420         $cat >&4 <<EOM
22421 Help! I can't compile and run the ssize_t test program: please enlighten me!
22422 (This is probably a misconfiguration in your system or libraries, and
22423 you really ought to fix it.  Still, I'll try anyway.)
22424
22425 I need a type that is the same size as $sizetype, but is guaranteed to
22426 be signed.  Common values are ssize_t, int and long.
22427
22428 EOM
22429         rp="What signed type is the same size as $sizetype?"
22430         . ./myread
22431         ssizetype="$ans"
22432 fi
22433 $rm_try
22434
22435 : Check the size of st_ino
22436 $echo " "
22437 $echo "Checking the size of st_ino..." >&4
22438 $cat > try.c <<EOCP
22439 #include <sys/stat.h>
22440 #include <stdio.h>
22441 #$i_stdlib I_STDLIB
22442 #ifdef I_STDLIB
22443 #include <stdlib.h>
22444 #endif
22445 int main() {
22446     struct stat st;
22447     printf("%d\n", (int)sizeof(st.st_ino));
22448     exit(0);
22449 }
22450 EOCP
22451 set try
22452 if eval $compile_ok; then
22453         val=`$run ./try`
22454         case "$val" in
22455         '')     st_ino_size=4
22456                 $echo "(I can't execute the test program--guessing $st_ino_size.)" >&4
22457                 ;;
22458         *)      st_ino_size=$val
22459                 $echo "Your st_ino is $st_ino_size bytes long."
22460                 ;;
22461         esac
22462 else
22463         st_ino_size=4
22464         $echo "(I can't compile the test program--guessing $st_ino_size.)" >&4
22465 fi
22466 $rm_try
22467
22468 : Check if st_ino is signed
22469 $echo " "
22470 $echo "Checking the sign of st_ino..." >&4
22471 $cat > try.c <<EOCP
22472 #include <sys/stat.h>
22473 #include <stdio.h>
22474 int main() {
22475         struct stat foo;
22476         foo.st_ino = -1;
22477         if (foo.st_ino < 0)
22478                 printf("-1\n");
22479         else
22480                 printf("1\n");
22481 }
22482 EOCP
22483 set try
22484 if eval $compile; then
22485         val=`$run ./try`
22486         case "$val" in
22487         '')     st_ino_sign=1
22488                 $echo "(I can't execute the test program--guessing unsigned.)" >&4
22489                 ;;
22490         *)      st_ino_sign=$val
22491                 case "$st_ino_sign" in
22492                  1) $echo "Your st_ino is unsigned." ;;
22493                 -1) $echo "Your st_ino is signed."   ;;
22494                 esac
22495                 ;;
22496         esac
22497 else
22498         st_ino_sign=1
22499         $echo "(I can't compile the test program--guessing unsigned.)" >&4
22500 fi
22501 $rm_try
22502
22503 : see what type of char stdio uses.
22504 echo " "
22505 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
22506 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
22507         echo "Your stdio uses unsigned chars." >&4
22508         stdchar="unsigned char"
22509 else
22510         echo "Your stdio uses signed chars." >&4
22511         stdchar="char"
22512 fi
22513 $rm -f stdioh
22514
22515 : see what type uids are declared as in the kernel
22516 echo " "
22517 echo "Looking for the type for user ids returned by getuid()."
22518 set uid_t uidtype xxx stdio.h sys/types.h
22519 eval $typedef
22520 case "$uidtype" in
22521 xxx)
22522         xxx=`./findhdr sys/user.h`
22523         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
22524         case $1 in
22525         unsigned) dflt="$1 $2" ;;
22526         *) dflt="$1" ;;
22527         esac
22528         ;;
22529 *) dflt="$uidtype";;
22530 esac
22531 case "$uidtype" in
22532 uid_t)  echo "uid_t found." ;;
22533 *)      rp="What is the type for user ids returned by getuid()?"
22534         . ./myread
22535         uidtype="$ans"
22536         ;;
22537 esac
22538
22539 : Check size of UID
22540 echo " "
22541 case "$uidtype" in
22542 *_t) zzz="$uidtype"     ;;
22543 *)   zzz="uid"          ;;
22544 esac
22545 echo "Checking the size of $zzz..." >&4
22546 cat > try.c <<EOCP
22547 #include <sys/types.h>
22548 #include <stdio.h>
22549 #$i_stdlib I_STDLIB
22550 #ifdef I_STDLIB
22551 #include <stdlib.h>
22552 #endif
22553 int main() {
22554     printf("%d\n", (int)sizeof($uidtype));
22555     exit(0);
22556 }
22557 EOCP
22558 set try
22559 if eval $compile_ok; then
22560         yyy=`$run ./try`
22561         case "$yyy" in
22562         '')     uidsize=4
22563                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
22564                 ;;
22565         *)      uidsize=$yyy
22566                 echo "Your $zzz is $uidsize bytes long."
22567                 ;;
22568         esac
22569 else
22570         uidsize=4
22571         echo "(I can't compile the test program--guessing $uidsize.)" >&4
22572 fi
22573
22574 : Check if UID is signed
22575 echo " "
22576 case "$uidtype" in
22577 *_t) zzz="$uidtype"     ;;
22578 *)   zzz="uid"          ;;
22579 esac
22580 echo "Checking the sign of $zzz..." >&4
22581 cat > try.c <<EOCP
22582 #include <sys/types.h>
22583 #include <stdio.h>
22584 int main() {
22585         $uidtype foo = -1;
22586         if (foo < 0)
22587                 printf("-1\n");
22588         else
22589                 printf("1\n");
22590 }
22591 EOCP
22592 set try
22593 if eval $compile; then
22594         yyy=`$run ./try`
22595         case "$yyy" in
22596         '')     uidsign=1
22597                 echo "(I can't execute the test program--guessing unsigned.)" >&4
22598                 ;;
22599         *)      uidsign=$yyy
22600                 case "$uidsign" in
22601                  1) echo "Your $zzz is unsigned." ;;
22602                 -1) echo "Your $zzz is signed."   ;;
22603                 esac
22604                 ;;
22605         esac
22606 else
22607         uidsign=1
22608         echo "(I can't compile the test program--guessing unsigned.)" >&4
22609 fi
22610
22611
22612 : Check format string for UID
22613 echo " "
22614 $echo "Checking the format string to be used for uids..." >&4
22615
22616 case "$uidsign" in
22617 -1)     if $test X"$uidsize" = X"$ivsize"; then
22618                 uidformat="$ivdformat"
22619         else
22620                 if $test X"$uidsize" = X"$longsize"; then
22621                         uidformat='"ld"'
22622                 else
22623                         if $test X"$uidsize" = X"$intsize"; then
22624                                 uidformat='"d"'
22625                         else
22626                                 if $test X"$uidsize" = X"$shortsize"; then
22627                                         uidformat='"hd"'
22628                                 fi
22629                         fi
22630                 fi
22631         fi
22632         ;;
22633 *)      if $test X"$uidsize" = X"$uvsize"; then
22634                 uidformat="$uvuformat"
22635         else
22636                 if $test X"$uidsize" = X"$longsize"; then
22637                         uidformat='"lu"'
22638                 else
22639                         if $test X"$uidsize" = X"$intsize"; then
22640                                 uidformat='"u"'
22641                         else
22642                                 if $test X"$uidsize" = X"$shortsize"; then
22643                                         uidformat='"hu"'
22644                                 fi
22645                         fi
22646                 fi
22647         fi
22648         ;;
22649 esac
22650
22651 : Determine if we can use sysctl with KERN_PROC_PATHNAME to find executing program
22652 echo " "
22653 echo "Determining whether we can use sysctl with KERN_PROC_PATHNAME to find executing program..." >&4
22654 $cat >try.c <<'EOM'
22655 /* Intentionally a long probe as I'd like to sanity check that the exact
22656    approach is going to work, as thinking it will work, but only having it
22657    part working at runtime is worse than not having it.  */
22658
22659 #include <sys/types.h>
22660 #include <sys/sysctl.h>
22661 #include <sys/param.h>
22662 #include <stdio.h>
22663 #include <string.h>
22664 #include <stdlib.h>
22665 #include <unistd.h>
22666
22667 int
22668 main(int argc, char **argv) {
22669     char *buffer;
22670     char *argv_leaf = strrchr(argv[0], '/');
22671     char *buffer_leaf;
22672     size_t size = 0;
22673     int mib[4];
22674
22675     mib[0] = CTL_KERN;
22676     mib[1] = KERN_PROC;
22677     mib[2] = KERN_PROC_PATHNAME;
22678     mib[3] = -1;
22679
22680     if (!argv_leaf) {
22681         fprintf(stderr, "Can't locate / in '%s'\n", argv[0]);
22682         return 1;
22683     }
22684
22685     if (sysctl(mib, 4, NULL, &size, NULL, 0)) {
22686         perror("sysctl");
22687         return 2;
22688     }
22689
22690     if (size < strlen(argv_leaf) + 1) {
22691         fprintf(stderr, "size %lu is too short for a path\n",
22692                 (unsigned long) size);
22693         return 3;
22694     }
22695
22696     if (size > MAXPATHLEN * MAXPATHLEN) {
22697         fprintf(stderr, "size %lu is too long for a path\n",
22698                 (unsigned long) size);
22699         return 4;
22700     }
22701
22702     buffer = malloc(size);
22703     if (!buffer) {
22704         perror("malloc");
22705         return 5;
22706     }
22707
22708     if (sysctl(mib, 4, buffer, &size, NULL, 0)) {
22709         perror("sysctl");
22710         return 6;
22711     }
22712
22713     if (strlen(buffer) + 1 != size) {
22714         fprintf(stderr, "size != strlen(buffer) + 1 (%lu != %lu)\n",
22715                 (unsigned long)size, (unsigned long)strlen(buffer) + 1);
22716         return 7;
22717     }
22718
22719
22720     if (*buffer != '/') {
22721         fprintf(stderr, "Not an absolute path: '%s'\n", buffer);
22722         return 8;
22723     }
22724
22725     if (strstr(buffer, "/./")) {
22726         fprintf(stderr, "Contains /./: '%s'\n", buffer);
22727         return 9;
22728     }
22729
22730     if (strstr(buffer, "/../")) {
22731         fprintf(stderr, "Contains /../: '%s'\n", buffer);
22732         return 10;
22733     }
22734
22735     buffer_leaf = strrchr(buffer, '/');
22736     if (strcmp(buffer_leaf, argv_leaf) != 0) {
22737         fprintf(stderr, "Leafnames differ: '%s' vs '%s'\n", argv[0], buffer);
22738         return 11;
22739     }
22740
22741     free(buffer);
22742
22743     return 0;
22744 }
22745 EOM
22746
22747 val=$undef
22748 set try
22749 if eval $compile; then
22750         if $run ./try; then
22751                 echo "You can use sysctl with KERN_PROC_PATHNAME to find the executing program." >&4
22752                 val="$define"
22753         else
22754                 echo "Nope, sysctl with KERN_PROC_PATHNAME doesn't work here." >&4
22755                 val="$undef"
22756         fi
22757 else
22758         echo "I'm unable to compile the test program." >&4
22759         echo "I'll assume no sysctl with KERN_PROC_PATHNAME here." >&4
22760         val="$undef"
22761 fi
22762 $rm_try
22763 set usekernprocpathname
22764 eval $setvar
22765
22766 : Determine if we can use _NSGetExecutablePath to find executing program
22767 echo " "
22768 echo "Determining whether we can use _NSGetExecutablePath to find executing program..." >&4
22769 $cat >try.c <<'EOM'
22770 /* Intentionally a long probe as I'd like to sanity check that the exact
22771    approach is going to work, as thinking it will work, but only having it
22772    part working at runtime is worse than not having it.  */
22773 #include <mach-o/dyld.h>
22774 #include <stdio.h>
22775 #include <stdlib.h>
22776 #include <sys/param.h>
22777 #include <string.h>
22778
22779 int
22780 main(int argc, char **argv) {
22781     char buf[1];
22782     uint32_t size = sizeof(buf);
22783     int result;
22784     char *buffer;
22785     char *tidied;
22786     char *argv_leaf = strrchr(argv[0], '/');
22787     char *tidied_leaf;
22788
22789     if (!argv_leaf) {
22790         fprintf(stderr, "Can't locate / in '%s'\n", argv[0]);
22791         return 1;
22792     }
22793
22794     _NSGetExecutablePath(buf, &size);
22795     if (size > MAXPATHLEN * MAXPATHLEN) {
22796         fprintf(stderr, "_NSGetExecutablePath size %u is too long for a path\n",
22797                 (unsigned int) size);
22798         return 2;
22799     }
22800
22801     buffer = malloc(size);
22802     if (!buffer) {
22803         perror("malloc");
22804         return 3;
22805     }
22806
22807     result = _NSGetExecutablePath(buffer, &size);
22808     if (result != 0) {
22809         fprintf(stderr, "_NSGetExecutablePath returned %i for a size of %u\n",
22810                 result, (unsigned int) size);
22811         return 4;
22812     }
22813
22814     tidied = realpath(buffer, NULL);
22815     if (!tidied) {
22816         perror("realpath");
22817         return 5;
22818     }
22819
22820     free(buffer);
22821
22822     if (*tidied != '/') {
22823         fprintf(stderr, "Not an absolute path: '%s'\n", tidied);
22824         return 6;
22825     }
22826
22827     if (strstr(tidied, "/./")) {
22828         fprintf(stderr, "Contains /./: '%s'\n", tidied);
22829         return 7;
22830     }
22831
22832     if (strstr(tidied, "/../")) {
22833         fprintf(stderr, "Contains /../: '%s'\n", tidied);
22834         return 8;
22835     }
22836
22837     tidied_leaf = strrchr(tidied, '/');
22838     if (strcmp(tidied_leaf, argv_leaf) != 0) {
22839         fprintf(stderr, "Leafnames differ: '%s' vs '%s'\n", argv[0], tidied);
22840         return 9;
22841     }
22842
22843     free(tidied);
22844
22845     return 0;
22846 }
22847 EOM
22848
22849 val=$undef
22850 set try
22851 if eval $compile; then
22852         if $run ./try; then
22853                 echo "You can use _NSGetExecutablePath to find the executing program." >&4
22854                 val="$define"
22855         else
22856                 echo "Nope, _NSGetExecutablePath doesn't work here." >&4
22857         fi
22858 else
22859         echo "I'm unable to compile the test program." >&4
22860         echo "I'll assume no _NSGetExecutablePath here." >&4
22861 fi
22862 $rm_try
22863 set usensgetexecutablepath
22864 eval $setvar
22865
22866 : Check if site customization support was requested
22867 case "$usesitecustomize" in
22868     $define|true|[Yy]*)
22869         usesitecustomize="$define"
22870         ;;
22871     *)
22872         usesitecustomize="$undef"
22873         ;;
22874     esac
22875
22876 : see if prototypes support variable argument declarations
22877 echo " "
22878 case "$prototype$i_stdarg" in
22879 $define$define)
22880         echo "It appears we'll be able to prototype varargs functions." >&4
22881         val="$define"
22882         ;;
22883 *)
22884         echo "Too bad... We won't be using prototyped varargs functions..." >&4
22885         val="$undef"
22886         ;;
22887 esac
22888 set vaproto
22889 eval $setvar
22890
22891 : determine compiler compiler
22892 case "$yacc" in
22893 '')
22894         dflt=yacc;;
22895 *)
22896         dflt="$yacc";;
22897 esac
22898 echo " "
22899 comp='yacc'
22900 if $test -f "$byacc$_exe"; then
22901         dflt="$byacc"
22902         comp="byacc or $comp"
22903 fi
22904 if $test -f "$bison$_exe"; then
22905         comp="$comp or bison -y"
22906 fi
22907 rp="Which compiler compiler ($comp) shall I use?"
22908 . ./myread
22909 yacc="$ans"
22910 case "$yacc" in
22911 *bis*)
22912         case "$yacc" in
22913         *-y*) ;;
22914         *)
22915                 yacc="$yacc -y"
22916                 echo "(Adding -y option to bison to get yacc-compatible behavior.)"
22917                 ;;
22918         esac
22919         ;;
22920 esac
22921
22922 : see if this is a assert.h system
22923 set assert.h i_assert
22924 eval $inhdr
22925
22926 : see if this is a bfd.h system
22927 set bfd.h i_bfd
22928 eval $inhdr
22929
22930 : see if this is an execinfo.h system
22931 set execinfo.h i_execinfo
22932 eval $inhdr
22933
22934 : see if this is a fenv.h system
22935 set fenv.h i_fenv
22936 eval $inhdr
22937
22938 : see if this is a fp.h system
22939 set fp.h i_fp
22940 eval $inhdr
22941
22942 : see if this is a fp_class.h system
22943 set fp_class.h i_fp_class
22944 eval $inhdr
22945
22946 : see if gdbm.h is available
22947 set gdbm.h t_gdbm
22948 eval $inhdr
22949 case "$t_gdbm" in
22950 $define)
22951         : see if gdbm_open exists
22952         set gdbm_open d_gdbm_open
22953         eval $inlibc
22954         case "$d_gdbm_open" in
22955         $undef)
22956                 t_gdbm="$undef"
22957                 echo "We won't be including <gdbm.h>"
22958                 ;;
22959         esac
22960         ;;
22961 esac
22962 val="$t_gdbm"
22963 set i_gdbm
22964 eval $setvar
22965
22966 : see if this is a ieeefp.h system
22967 case "$i_ieeefp" in
22968 '' ) set ieeefp.h i_ieeefp
22969      eval $inhdr
22970      ;;
22971 esac
22972
22973 : see if this is a libutil.h system
22974 set libutil.h i_libutil
22975 eval $inhdr
22976
22977 : see if mach cthreads are available
22978 if test "X$usethreads" = "X$define"; then
22979         set mach/cthreads.h i_machcthr
22980         eval $inhdr
22981 else
22982         i_machcthr="$undef"
22983 fi
22984
22985 : see if this is a mntent.h system
22986 set mntent.h i_mntent
22987 eval $inhdr
22988
22989 : see if net/errno.h is available
22990 val=''
22991 set net/errno.h val
22992 eval $inhdr
22993
22994 : Unfortunately, it causes problems on some systems.  Arrgh.
22995 case "$val" in
22996 $define)
22997         cat > try.c <<'EOM'
22998 #include <stdio.h>
22999 #include <errno.h>
23000 #include <net/errno.h>
23001 int func()
23002 {
23003         return ENOTSOCK;
23004 }
23005 EOM
23006         if $cc $ccflags -c try.c >/dev/null 2>&1; then
23007                 echo "We'll be including <net/errno.h>." >&4
23008         else
23009                 echo "We won't be including <net/errno.h>." >&4
23010                 val="$undef"
23011         fi
23012         $rm_try
23013         ;;
23014 esac
23015 set i_neterrno
23016 eval $setvar
23017
23018 : see if netinet/tcp.h is available
23019 set netinet/tcp.h i_netinettcp
23020 eval $inhdr
23021
23022 : see if this is a poll.h system
23023 set poll.h i_poll
23024 eval $inhdr
23025
23026 : see if this is a prot.h system
23027 set prot.h i_prot
23028 eval $inhdr
23029
23030 : Preprocessor symbols
23031 echo " "
23032 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4
23033 $cat <<'EOSH' > Cppsym.know
23034 a29k aarch64 ABI64 aegis AES_SOURCE AIX AIX32 AIX370 AIX41 AIX42
23035 AIX43 aixpc AIX_SOURCE alliant ALL_SOURCE alpha AM29000 am29000
23036 AMD64 amd64 amiga AMIGAOS AMIX ansi ANSI_C_SOURCE apollo arch_ppc
23037 arch_pwr ardent ARM ARM32 atarist att386 att3b
23038 BeOS BIG_ENDIAN BIT_MSF BSD bsd bsd43 bsd4_2 BSD4_3 bsd4_3 bsd4_4
23039 BSDCOMPAT bsdi BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES bull
23040 byteorder byte_order
23041 c cadmus clang clipper CMU COFF COMPILER_VERSION concurrent
23042 convex cpu CRAY cray CRAYMPP ctix CX_UX CYGWIN
23043 DECC DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO Dynix DynixPTX
23044 ELF encore EPI EXTENSIONS
23045 FAVOR_BSD FILE_OFFSET_BITS FORTIFY_SOURCE FreeBSD
23046 GCC_NEW_VARARGS gcos gcx gimpel GLIBC GLIBC_MINOR GNUC GNUC_MINOR
23047 GNU_LIBRARY GNU_SOURCE GO32 gould GOULD_PN
23048 H3050R H3050RX hbullx20 hcx host_mips hp200 hp300 HP700 hp700
23049 hp800 hp9000 hp9000s200 hp9000s300 hp9000s400 hp9000s500
23050 hp9000s700 hp9000s800 hp9k8 hppa hpux HPUX_SOURCE hp_osf
23051 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960 IA32 IA64
23052 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
23053 INLINE_INTRINSICS INT64 INTEL interdata INTRINSICS is68k itanium
23054 ksr1
23055 LANGUAGE_C LARGEFILE64_SOURCE LARGEFILE_SOURCE LARGE_FILE_API
23056 LFS64_LARGEFILE LFS_LARGEFILE LIBCATAMOUNT Linux LITTLE_ENDIAN
23057 LONG64 LONGDOUBLE LONGLONG LONG_DOUBLE LONG_LONG LP64 luna
23058 luna88k Lynx
23059 M68000 m68k m88100 m88k M88KBCS_TARGET MACH machine MachTen
23060 MATH_HAS_NO_SIDE_EFFECTS mc300 mc500 mc68000 mc68010 mc68020
23061 mc68030 mc68040 mc68060 mc68k mc68k32 mc700 mc88000 mc88100
23062 merlin mert MiNT mips MIPSEB MIPSEL MIPS_FPSET MIPS_ISA MIPS_SIM
23063 MIPS_SZINT MIPS_SZLONG MIPS_SZPTR MODERN_C motorola mpeix MSDOS
23064 MTXINU MULTIMAX MVS mvs M_AMD64 M_ARM M_ARMT M_COFF M_I186 M_I286
23065 M_I386 M_I8086 M_I86 M_I86SM M_IA64 M_IX86 M_PPC M_SYS3 M_SYS5
23066 M_SYSIII M_SYSV M_UNIX M_X86 M_XENIX
23067 n16 ncl_el ncl_mr NetBSD news1500 news1700 news1800 news1900
23068 news3700 news700 news800 news900 NeXT NLS nonstopux ns16000
23069 ns32000 ns32016 ns32332 ns32k nsc32000
23070 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
23071 PARAGON parisc pa_risc PA_RISC1_1 PA_RISC2_0 pc532 pdp11 PGC PIC
23072 plexus PORTAR posix POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
23073 POSIX_C_SOURCE POSIX_SOURCE POWER powerpc ppc PROTOTYPES PWB pyr
23074 QK_USER QNX
23075 R3000 REENTRANT RES Rhapsody RISC6000 riscix riscos RT
23076 S390 S390x SA110 SCO scs sequent sgi SGI_SOURCE SH SH3 sinix
23077 SIZE_INT SIZE_LONG SIZE_PTR SOCKETS_SOURCE SOCKET_SOURCE sony
23078 sonyrisc sony_news sparc sparclite sparcv8 sparcv9 spectrum
23079 stardent stdc STDC_EXT stratos sun sun3 sun386 Sun386i svr3 svr4
23080 SVR4_2 SVR4_SOURCE svr5 SX system SYSTYPE_BSD SYSTYPE_BSD43
23081 SYSTYPE_BSD44 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3
23082 SYSV4 SYSV5 sysV68 sysV88
23083 Tek4132 Tek4300 thumb thw_370 thw_intel thw_rs6000 titan TM3200
23084 TM5400 TM5600 tower tower32 tower32_200 tower32_600 tower32_700
23085 tower32_800 tower32_850 tss
23086 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5 ultrix UMAXV UnicomPBB
23087 UnicomPBD UNICOS UNICOSMK unix UNIX95 UNIX99 unixpc unos USE_BSD
23088 USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE
23089 USE_LARGEFILE64 USE_MISC USE_POSIX USE_POSIX199309
23090 USE_POSIX199506 USE_POSIX2 USE_REENTRANT USE_SVID USE_UNIX98
23091 USE_XOPEN USE_XOPEN_EXTENDED USGr4 USGr4_2 UTek Utek UTS UWIN
23092 uxpm uxps
23093 vax venix VMESA vms
23094 x86_64 xenix Xenix286 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2
23095 XPG2_EXTENDED XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
23096 z8000 zarch
23097 EOSH
23098 # Maybe put other stuff here too.
23099 ./tr '-' '_' <<EOSH >>Cppsym.know
23100 $osname
23101 EOSH
23102 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
23103 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
23104 $cat Cppsym.know > Cppsym.c
23105 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
23106 $rm -f Cppsym.a Cppsym.b Cppsym.c
23107 cat <<EOSH > Cppsym
23108 $startsh
23109 if $test \$# -gt 0; then
23110     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
23111     if $test -s Cppsym.got; then
23112         $rm -f Cppsym.got
23113         exit 0
23114     fi
23115     $rm -f Cppsym.got
23116     exit 1
23117 else
23118     $tr " " "$trnl" | ./Cppsym.try
23119     exit 0
23120 fi
23121 EOSH
23122 chmod +x Cppsym
23123 $eunicefix Cppsym
23124 cat <<EOSH > Cppsym.try
23125 $startsh
23126 cat <<'EOCP' > try.c
23127 #include <stdio.h>
23128 #if cpp_stuff == 1
23129 #define STRINGIFY(a)    "a"
23130 #endif
23131 #if cpp_stuff == 42
23132 #define StGiFy(a)  #a
23133 #define STRINGIFY(a)    StGiFy(a)
23134 #endif
23135 #if $cpp_stuff != 1 && $cpp_stuff != 42
23136 #   include "Bletch: How does this C preprocessor stringify macros?"
23137 #endif
23138 int main() {
23139 EOCP
23140 $awk \\
23141 EOSH
23142 cat <<'EOSH' >> Cppsym.try
23143 'length($1) > 0 {
23144     printf "#ifdef %s\nprintf(\"%s=%%s\\n\", STRINGIFY(%s));\n#endif\n", $1, $1, $1
23145     printf "#ifdef _%s\nprintf(\"_%s=%%s\\n\", STRINGIFY(_%s));\n#endif\n", $1, $1, $1
23146     printf "#ifdef __%s\nprintf(\"__%s=%%s\\n\", STRINGIFY(__%s));\n#endif\n", $1, $1, $1
23147     printf "#ifdef __%s__\nprintf(\"__%s__=%%s\\n\", STRINGIFY(__%s__));\n#endif\n", $1, $1, $1
23148 }'       >> try.c
23149 echo 'return 0;}' >> try.c
23150 EOSH
23151 cat <<EOSH >> Cppsym.try
23152 ccflags="$ccflags"
23153 case "$osname-$gccversion" in
23154 irix-) ccflags="\$ccflags -woff 1178" ;;
23155 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
23156 esac
23157 $cc -o try -Dcpp_stuff=$cpp_stuff $optimize \$ccflags $ldflags try.c $libs && $run ./try | $sed 's/ /\\\\ /g'
23158 EOSH
23159 chmod +x Cppsym.try
23160 $eunicefix Cppsym.try
23161 ./Cppsym < Cppsym.know | $sort | $uniq > Cppsym.true
23162 : Add in any Linux cpp "predefined macros":
23163 case "$osname::$gccversion" in
23164   *linux*::*.*|*gnukfreebsd*::*.*|gnu::*.*)
23165     tHdrH=_tmpHdr
23166     rm -f $tHdrH'.h' $tHdrH
23167     touch $tHdrH'.h'
23168     # Filter out macro arguments, such as Linux's __INT8_C(c)
23169     if $cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then
23170        sed -e 's/#define[\ \  ]*//;s/[\ \     ].*$//' -e 's/(.*//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real'
23171        if [ -s $tHdrH'_cppsym.real' ]; then
23172           cat $tHdrH'_cppsym.real' Cppsym.know | sort | uniq | ./Cppsym | sort | uniq > Cppsym.true
23173        fi
23174     fi
23175     rm -f $tHdrH'.h' $tHdrH'_cppsym.h' $tHdrH'_cppsym.real'
23176   ;;
23177 esac
23178 : now check the C compiler for additional symbols
23179 postprocess_cc_v=''
23180 case "$osname" in
23181 aix) postprocess_cc_v="|$tr , ' '" ;;
23182 esac
23183 $cat >ccsym <<EOS
23184 $startsh
23185 $cat >tmp.c <<EOF
23186 extern int foo;
23187 EOF
23188 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
23189 do
23190         case "\$i" in
23191         -D*) echo "\$i" | $sed 's/^-D//';;
23192         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A//' | $sed 's/\(.*\)(\(.*\))/\1=\2/';;
23193         esac
23194 done
23195 $rm_try
23196 EOS
23197 postprocess_cc_v=''
23198 chmod +x ccsym
23199 $eunicefix ccsym
23200 ./ccsym > ccsym1.raw
23201 if $test -s ccsym1.raw; then
23202     $sort ccsym1.raw | $uniq >ccsym.raw
23203 else
23204     mv ccsym1.raw ccsym.raw
23205 fi
23206
23207 $awk '/\=/ { print $0; next }
23208         { print $0"=1" }' ccsym.raw >ccsym.list
23209 $comm -13 Cppsym.true ccsym.list >ccsym.own
23210 $comm -12 Cppsym.true ccsym.list >ccsym.com
23211 $comm -23 Cppsym.true ccsym.list >ccsym.cpp
23212 also=''
23213 if $test -z ccsym.raw; then
23214         echo "Your C compiler doesn't seem to define any symbols!" >&4
23215         echo " "
23216         echo "However, your C preprocessor defines the following symbols:"
23217         $cat Cppsym.true
23218         ccsymbols=''
23219         cppsymbols=`$cat Cppsym.true`
23220         cppsymbols=`echo $cppsymbols`
23221         cppccsymbols="$cppsymbols"
23222 else
23223         if $test -s ccsym.com; then
23224                 echo "Your C compiler and pre-processor define these symbols:"
23225                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
23226                 also='also '
23227                 symbols='ones'
23228                 cppccsymbols=`$cat ccsym.com`
23229                 cppccsymbols=`echo $cppccsymbols`
23230                 $test "$silent" || sleep 1
23231         fi
23232         if $test -s ccsym.cpp; then
23233                 $test "$also" && echo " "
23234                 echo "Your C pre-processor ${also}defines the following symbols:"
23235                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
23236                 also='further '
23237                 cppsymbols=`$cat ccsym.cpp`
23238                 cppsymbols=`echo $cppsymbols`
23239                 $test "$silent" || sleep 1
23240         fi
23241         if $test -s ccsym.own; then
23242                 $test "$also" && echo " "
23243                 echo "Your C compiler ${also}defines the following cpp symbols:"
23244                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
23245                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
23246                 ccsymbols=`$cat ccsym.own`
23247                 ccsymbols=`echo $ccsymbols`
23248                 $test "$silent" || sleep 1
23249         fi
23250 fi
23251
23252 : add -D_FORTIFY_SOURCE if feasible and not already there
23253 case "$gccversion" in
23254 4.*)    case "$optimize$ccflags" in
23255         *-O*)   case "$ccflags$cppsymbols" in
23256                 *_FORTIFY_SOURCE=*) # Don't add it again.
23257                         echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4
23258                         ;;
23259                 *)      echo "Adding -D_FORTIFY_SOURCE=2 to ccflags..." >&4
23260                         ccflags="$ccflags -D_FORTIFY_SOURCE=2"
23261                         ;;
23262                 esac
23263                 ;;
23264         *)      echo "You have gcc 4.* but not optimizing, not adding -D_FORTIFY_SOURCE." >&4
23265                 ;;
23266         esac
23267         ;;
23268 *)      echo "You seem not to have gcc 4.*, not adding -D_FORTIFY_SOURCE." >&4
23269         ;;
23270 esac
23271
23272 : see if this is a termio system
23273 val="$undef"
23274 val2="$undef"
23275 val3="$undef"
23276 if $test `./findhdr termios.h`; then
23277     set tcsetattr i_termios
23278     eval $inlibc
23279     val3="$i_termios"
23280 fi
23281 echo " "
23282 case "$val3" in
23283     "$define") echo "You have POSIX termios.h... good!" >&4;;
23284     *)  if ./Cppsym pyr; then
23285             case "`$run /bin/universe`" in
23286                 ucb) if $test `./findhdr sgtty.h`; then
23287                         val2="$define"
23288                         echo "<sgtty.h> found." >&4
23289                     else
23290                         echo "System is pyramid with BSD universe."
23291                         ./warn "<sgtty.h> not found--you could have problems."
23292                     fi;;
23293                 *)  if $test `./findhdr termio.h`; then
23294                         val="$define"
23295                         echo "<termio.h> found." >&4
23296                     else
23297                         echo "System is pyramid with USG universe."
23298                         ./warn "<termio.h> not found--you could have problems."
23299                     fi;;
23300             esac
23301         elif ./usg; then
23302             if $test `./findhdr termio.h`; then
23303                 echo "<termio.h> found." >&4
23304                 val="$define"
23305             elif $test `./findhdr sgtty.h`; then
23306                 echo "<sgtty.h> found." >&4
23307                 val2="$define"
23308             else
23309                 ./warn "Neither <termio.h> nor <sgtty.h> found--cross fingers!"
23310             fi
23311         else
23312             if $test `./findhdr sgtty.h`; then
23313                 echo "<sgtty.h> found." >&4
23314                 val2="$define"
23315             elif $test `./findhdr termio.h`; then
23316                 echo "<termio.h> found." >&4
23317                 val="$define"
23318             else
23319                 ./warn "Neither <sgtty.h> nor <termio.h> found--cross fingers!"
23320             fi
23321         fi;;
23322 esac
23323 set i_termio; eval $setvar
23324 val=$val2; set i_sgtty; eval $setvar
23325 val=$val3; set i_termios; eval $setvar
23326
23327 : see if stdbool is available
23328 : we want a real compile instead of Inhdr because some Solaris systems
23329 : have stdbool.h, but it can only be used if the compiler indicates it
23330 : is sufficiently c99-compliant.
23331 echo " "
23332 $cat >try.c <<EOCP
23333 #include <stdio.h>
23334 #include <stdbool.h>
23335 int func(bool x)
23336 {
23337     return x ? 1 : 0;
23338 }
23339 int main(int argc, char **argv)
23340 {
23341     return func(0);
23342 }
23343 EOCP
23344 set try
23345 if eval $compile; then
23346         echo "<stdbool.h> found." >&4
23347         val="$define"
23348 else
23349         echo "<stdbool.h> NOT found." >&4
23350         val="$undef"
23351 fi
23352 $rm_try
23353 set i_stdbool
23354 eval $setvar
23355
23356 : see if stddef is available
23357 set stddef.h i_stddef
23358 eval $inhdr
23359
23360 : see if stdint is available
23361 set stdint.h i_stdint
23362 eval $inhdr
23363
23364 : see if sys/access.h is available
23365 set sys/access.h i_sysaccess
23366 eval $inhdr
23367
23368 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
23369 set sys/filio.h i_sysfilio
23370 eval $inhdr
23371 echo " "
23372 if $test `./findhdr sys/ioctl.h`; then
23373         val="$define"
23374         echo '<sys/ioctl.h> found.' >&4
23375 else
23376         val="$undef"
23377         if $test $i_sysfilio = "$define"; then
23378             echo '<sys/ioctl.h> NOT found.' >&4
23379         else
23380                 $test $i_sgtty = "$define" && xxx="sgtty.h"
23381                 $test $i_termio = "$define" && xxx="termio.h"
23382                 $test $i_termios = "$define" && xxx="termios.h"
23383 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
23384         fi
23385 fi
23386 set i_sysioctl
23387 eval $setvar
23388
23389 : see if socket ioctl defs are in sys/sockio.h
23390 echo " "
23391 xxx=`./findhdr sys/sockio.h`
23392 if $test "$xxx"; then
23393         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
23394                 val="$define"
23395                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
23396         else
23397                 val="$undef"
23398                 echo "No socket ioctls found in <sys/sockio.h>." >&4
23399         fi
23400 else
23401         val="$undef"
23402         $cat <<EOM
23403 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
23404 EOM
23405 fi
23406 set i_syssockio
23407 eval $setvar
23408
23409 : see if this is a syslog.h system
23410 set syslog.h i_syslog
23411 eval $inhdr
23412
23413 : see if this is a sys/mode.h system
23414 set sys/mode.h i_sysmode
23415 eval $inhdr
23416
23417 : see if there is a sys/poll.h file
23418 set sys/poll.h i_syspoll
23419 eval $inhdr
23420
23421 : see if sys/resource.h has to be included
23422 set sys/resource.h i_sysresrc
23423 eval $inhdr
23424
23425 : see if sys/security.h is available
23426 set sys/security.h i_syssecrt
23427 eval $inhdr
23428
23429 : see if this is a sys/statvfs.h system
23430 set sys/statvfs.h i_sysstatvfs
23431 eval $inhdr
23432
23433 : see if this is a sys/un.h system
23434 set sys/un.h i_sysun
23435 eval $inhdr
23436
23437 : see if this is a sys/utsname.h system
23438 set sys/utsname.h i_sysutsname
23439 eval $inhdr
23440
23441 : see if this is a syswait system
23442 set sys/wait.h i_syswait
23443 eval $inhdr
23444
23445 : see if this is a ustat.h system
23446 set ustat.h i_ustat
23447 eval $inhdr
23448
23449 : see if this is an utime system
23450 set utime.h i_utime
23451 eval $inhdr
23452
23453 : see if this is a vfork system
23454 case "$d_vfork" in
23455 "$define")
23456         set vfork.h i_vfork
23457         eval $inhdr
23458         ;;
23459 *)
23460         i_vfork="$undef"
23461         ;;
23462 esac
23463
23464 : Check extensions
23465 echo " "
23466 echo "Looking for extensions..." >&4
23467 : If we are using the old config.sh, nonxs_extensions and xs_extensions may
23468 : contain old or inaccurate or duplicate values.
23469 nonxs_extensions=''
23470 xs_extensions=''
23471 : We do not use find because it might not be available.
23472 : We do not just use MANIFEST because the user may have dropped
23473 : some additional extensions into the source tree and expect them
23474 : to be built.
23475
23476 : Function to recursively find available extensions, ignoring DynaLoader
23477 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
23478 : In 5.10.1 and later, extensions are stored in directories
23479 : like File-Glob instead of the older File/Glob/.
23480 find_extensions='
23481     for xxx in *; do
23482         case "$xxx" in
23483             DynaLoader|dynaload) ;;
23484             *)
23485             this_ext=`echo "$xxx" | $sed -e s/-/\\\//g`;
23486             case "$this_ext" in
23487                 Scalar/List/Utils) this_ext="List/Util" ;;
23488                 PathTools)         this_ext="Cwd"       ;;
23489             esac;
23490             echo " $xs_extensions $nonxs_extensions" > "$tdir/$$.tmp";
23491             if $contains " $this_ext " "$tdir/$$.tmp"; then
23492                 echo >&4;
23493                 echo "Duplicate directories detected for extension $xxx" >&4;
23494                 echo "Configure cannot correctly recover from this - shall I abort?" >&4;
23495                 case "$knowitall" in
23496                 "") dflt=y;;
23497                 *) dflt=n;;
23498                 esac;
23499                 . ../UU/myread;
23500                 case "$ans" in
23501                 n*|N*) ;;
23502                 *) echo >&4;
23503                     echo "Ok.  Stopping Configure." >&4;
23504                     echo "Please remove the duplicate directory (e.g. using git clean) and then re-run Configure" >&4;
23505                     exit 1;;
23506                 esac;
23507                 echo "Ok.  You will need to correct config.sh before running make." >&4;
23508             fi;
23509             $ls -1 "$xxx" > "$tdir/$$.tmp";
23510             if   $contains "\.xs$" "$tdir/$$.tmp" > /dev/null 2>&1; then
23511                 xs_extensions="$xs_extensions $this_ext";
23512             elif $contains "\.c$"  "$tdir/$$.tmp" > /dev/null 2>&1; then
23513                 xs_extensions="$xs_extensions $this_ext";
23514             elif $test -d "$xxx"; then
23515                 nonxs_extensions="$nonxs_extensions $this_ext";
23516             fi;
23517             $rm -f "$tdir/$$.tmp";
23518             ;;
23519         esac;
23520     done'
23521 tdir=`pwd`
23522 cd "$rsrc/cpan"
23523 set X
23524 shift
23525 eval $find_extensions
23526 cd "$rsrc/dist"
23527 set X
23528 shift
23529 eval $find_extensions
23530 cd "$rsrc/ext"
23531 set X
23532 shift
23533 eval $find_extensions
23534 set X $xs_extensions
23535 shift
23536 xs_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '`
23537 set X $nonxs_extensions
23538 shift
23539 nonxs_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '`
23540 cd "$tdir"
23541 known_extensions=`echo $nonxs_extensions $xs_extensions  | tr ' ' $trnl | $sort | tr $trnl ' '`
23542
23543 : Now see which are supported on this system.
23544 avail_ext=''
23545 for xxx in $xs_extensions ; do
23546         case "$xxx" in
23547         Amiga*)
23548                 case "$osname" in
23549                 amigaos) avail_ext="$avail_ext $xxx" ;;
23550                 esac
23551                 ;;
23552         DB_File|db_file)
23553                 case "$i_db" in
23554                 $define) avail_ext="$avail_ext $xxx" ;;
23555                 esac
23556                 ;;
23557         GDBM_File|gdbm_fil)
23558                 case "$i_gdbm" in
23559                 $define) avail_ext="$avail_ext $xxx" ;;
23560                 esac
23561                 ;;
23562         I18N/Langinfo|i18n_lan)
23563                 case "$i_langinfo$d_nl_langinfo" in
23564                 $define$define) avail_ext="$avail_ext $xxx" ;;
23565                 esac
23566                 ;;
23567         IPC/SysV|ipc/sysv)
23568                 : XXX Do we need a useipcsysv variable here
23569                 case "${d_msg}${d_sem}${d_shm}" in
23570                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
23571                 esac
23572                 ;;
23573         NDBM_File|ndbm_fil)
23574                 case "$d_ndbm" in
23575                 $define)
23576                     case "$osname-$use64bitint" in
23577                     hpux-define)
23578                         case "$libs" in
23579                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
23580                         esac
23581                         ;;
23582                     *) avail_ext="$avail_ext $xxx" ;;
23583                     esac
23584                     ;;
23585                 esac
23586                 ;;
23587         ODBM_File|odbm_fil)
23588                 case "${i_dbm}${i_rpcsvcdbm}" in
23589                 *"${define}"*)
23590                     case "$d_cplusplus" in
23591                     define) ;; # delete as a function name will not work
23592                     *)  case "$osname-$use64bitint" in
23593                         hpux-define)
23594                             case "$libs" in
23595                             *-ldbm*) avail_ext="$avail_ext $xxx" ;;
23596                             esac
23597                             ;;
23598                         *) avail_ext="$avail_ext $xxx" ;;
23599                         esac
23600                         ;;
23601                     esac
23602                     ;;
23603                 esac
23604                 ;;
23605         Opcode|opcode)
23606                 case "$useopcode" in
23607                 true|define|y) avail_ext="$avail_ext $xxx" ;;
23608                 esac
23609                 ;;
23610         POSIX|posix)
23611                 case "$useposix" in
23612                 true|define|y) avail_ext="$avail_ext $xxx" ;;
23613                 esac
23614                 ;;
23615         Socket|socket)
23616                 case "$d_socket" in
23617                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
23618                 esac
23619                 ;;
23620         Sys/Syslog|sys/syslog)
23621                 : XXX syslog requires socket
23622                 case "$d_socket" in
23623                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
23624                 esac
23625                 ;;
23626         Thread|thread)
23627                 case "$usethreads" in
23628                 true|$define|y)
23629                         case "$use5005threads" in
23630                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
23631                         esac
23632                 esac
23633                 ;;
23634         threads|threads/shared)
23635                 # threads and threads::shared are special cases.
23636                 # To stop people from asking "Perl 5.8.0 was supposed
23637                 # to have this new fancy threads implementation but my
23638                 # perl doesn't have it" and from people trying to
23639                 # (re)install the threads module using CPAN.pm and
23640                 # CPAN.pm then offering to reinstall Perl 5.8.0,
23641                 # the threads.pm and threads/shared.pm will always be
23642                 # there, croaking informatively ("you need to rebuild
23643                 # all of Perl with threads, sorry") when threads haven't
23644                 # been compiled in.
23645                 # --jhi
23646                 avail_ext="$avail_ext $xxx"
23647                 ;;
23648         VMS*)
23649                 ;;
23650         Win32*)
23651                 case "$osname" in
23652                 cygwin) avail_ext="$avail_ext $xxx" ;;
23653                 esac
23654                 ;;
23655         XS/APItest|xs/apitest)
23656                 # This is just for testing.  Skip it unless we have dynamic loading.
23657
23658                 case "$usedl" in
23659                 $define) avail_ext="$avail_ext $xxx" ;;
23660                 esac
23661                 ;;
23662         XS/Typemap|xs/typemap)
23663                 # This is just for testing.  Skip it unless we have dynamic loading.
23664                 case "$usedl" in
23665                 $define) avail_ext="$avail_ext $xxx" ;;
23666                 esac
23667                 ;;
23668         *)      avail_ext="$avail_ext $xxx"
23669                 ;;
23670         esac
23671 done
23672
23673 set X $avail_ext
23674 shift
23675 avail_ext="$*"
23676
23677 case "$onlyextensions" in
23678 '') ;;
23679 *)  keepextensions=''
23680     echo "You have requested that only certain extensions be included..." >&4
23681     for i in $onlyextensions; do
23682         case " $avail_ext " in
23683         *" $i "*)
23684             echo "Keeping extension $i."
23685             keepextensions="$keepextensions $i"
23686             ;;
23687         *) echo "Ignoring extension $i." ;;
23688         esac
23689     done
23690     avail_ext="$keepextensions"
23691     ;;
23692 esac
23693
23694 case "$noextensions" in
23695 '') ;;
23696 *)  keepextensions=''
23697     echo "You have requested that certain extensions be ignored..." >&4
23698     for i in $avail_ext; do
23699         case " $noextensions " in
23700         *" $i "*) echo "Ignoring extension $i." ;;
23701         *) echo "Keeping extension $i.";
23702            keepextensions="$keepextensions $i"
23703            ;;
23704         esac
23705     done
23706     avail_ext="$keepextensions"
23707     ;;
23708 esac
23709
23710 : Now see which nonxs extensions are supported on this system.
23711 : For now assume all are.
23712 nonxs_ext=''
23713 for xxx in $nonxs_extensions ; do
23714         case "$xxx" in
23715         VMS*)
23716                 ;;
23717         *)      nonxs_ext="$nonxs_ext $xxx"
23718                 ;;
23719         esac
23720 done
23721
23722 set X $nonxs_ext
23723 shift
23724 nonxs_ext="$*"
23725
23726 case $usedl in
23727 $define)
23728         $cat <<EOM
23729 A number of extensions are supplied with $package.  You may choose to
23730 compile these extensions for dynamic loading (the default), compile
23731 them into the $package executable (static loading), or not include
23732 them at all.  Answer "none" to include no extensions.
23733 Note that DynaLoader is always built and need not be mentioned here.
23734
23735 EOM
23736         case "$dynamic_ext" in
23737         '')
23738                 : Exclude those listed in static_ext
23739                 dflt=''
23740                 for xxx in $avail_ext; do
23741                         case " $static_ext " in
23742                         *" $xxx "*) ;;
23743                         *) dflt="$dflt $xxx" ;;
23744                         esac
23745                 done
23746                 set X $dflt
23747                 shift
23748                 dflt="$*"
23749                 ;;
23750         *)      dflt="$dynamic_ext"
23751                 # Perhaps we are reusing an old out-of-date config.sh.
23752                 case "$hint" in
23753                 previous)
23754                         if test X"$dynamic_ext" != X"$avail_ext"; then
23755                                 $cat <<EOM
23756 NOTICE:  Your previous config.sh list may be incorrect.
23757 The extensions now available to you are
23758         ${avail_ext}
23759 but the default list from your previous config.sh is
23760         ${dynamic_ext}
23761
23762 EOM
23763                         fi
23764                         ;;
23765                 esac
23766                 ;;
23767         esac
23768         case "$dflt" in
23769         '')     dflt=none;;
23770         esac
23771         rp="What extensions do you wish to load dynamically?"
23772         . ./myread
23773         case "$ans" in
23774         none) dynamic_ext=' ' ;;
23775         *) dynamic_ext="$ans" ;;
23776         esac
23777
23778         case "$static_ext" in
23779         '')
23780                 : Exclude those already listed in dynamic linking
23781                 dflt=''
23782                 for xxx in $avail_ext; do
23783                         case " $dynamic_ext " in
23784                         *" $xxx "*) ;;
23785                         *) dflt="$dflt $xxx" ;;
23786                         esac
23787                 done
23788                 set X $dflt
23789                 shift
23790                 dflt="$*"
23791                 ;;
23792         *)  dflt="$static_ext"
23793                 ;;
23794         esac
23795
23796         case "$dflt" in
23797         '')     dflt=none;;
23798         esac
23799         rp="What extensions do you wish to load statically?"
23800         . ./myread
23801         case "$ans" in
23802         none) static_ext=' ' ;;
23803         *) static_ext="$ans" ;;
23804         esac
23805         ;;
23806 *)
23807         $cat <<EOM
23808 A number of extensions are supplied with $package.  Answer "none"
23809 to include no extensions.
23810 Note that DynaLoader is always built and need not be mentioned here.
23811
23812 EOM
23813         case "$static_ext" in
23814         '') dflt="$avail_ext" ;;
23815         *)      dflt="$static_ext"
23816                 # Perhaps we are reusing an old out-of-date config.sh.
23817                 case "$hint" in
23818                 previous)
23819                         if test X"$static_ext" != X"$avail_ext"; then
23820                                 $cat <<EOM
23821 NOTICE:  Your previous config.sh list may be incorrect.
23822 The extensions now available to you are
23823         ${avail_ext}
23824 but the default list from your previous config.sh is
23825         ${static_ext}
23826
23827 EOM
23828                         fi
23829                         ;;
23830                 esac
23831                 ;;
23832         esac
23833         : Exclude those that are not xs extensions
23834         case "$dflt" in
23835         '')     dflt=none;;
23836         esac
23837         rp="What extensions do you wish to include?"
23838         . ./myread
23839         case "$ans" in
23840         none) static_ext=' ' ;;
23841         *) static_ext="$ans" ;;
23842         esac
23843         ;;
23844 esac
23845 #
23846 # Encode is a special case.  If we are building Encode as a static
23847 # extension, we need to explicitly list its subextensions as well.
23848 # For other nested extensions, this is handled automatically by
23849 # the appropriate Makefile.PL.
23850 case " $static_ext " in
23851         *" Encode "*) # Add the subextensions of Encode
23852         cd "$rsrc/cpan"
23853         for xxx in `ls Encode/*/Makefile.PL|awk -F/ '{print $2}'`; do
23854                 static_ext="$static_ext Encode/$xxx"
23855                 known_extensions="$known_extensions Encode/$xxx"
23856         done
23857         cd "$tdir"
23858         ;;
23859 esac
23860
23861 set X $dynamic_ext $static_ext $nonxs_ext
23862 shift
23863 extensions="$*"
23864
23865 # Sanity check:  We require an extension suitable for use with
23866 # AnyDBM_File, as well as Fcntl and IO.  (Failure to have these
23867 # should show up as failures in the test suite, but it's helpful to
23868 # catch them now.) The 'extensions' list is normally sorted
23869 # alphabetically, so we need to accept either
23870 #    DB_File ... Fcntl ... IO  ....
23871 # or something like
23872 #    Fcntl ... NDBM_File ... IO  ....
23873 case " $extensions"  in
23874 *"_File "*" Fcntl "*" IO "*) ;; # DB_File
23875 *" Fcntl "*"_File "*" IO "*) ;; # GDBM_File
23876 *" Fcntl "*" IO "*"_File "*) ;; # NDBM_File
23877 *) echo "WARNING: Extensions DB_File or *DBM_File, Fcntl, and IO not configured." >&4
23878    echo "WARNING: The Perl you are building will be quite crippled." >& 4
23879    ;;
23880 esac
23881
23882 : Remove libraries needed only for extensions
23883 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
23884 : The exception is SunOS 4.x, which needs them.
23885 case "${osname}X${osvers}" in
23886 sunos*X4*)
23887     perllibs="$libs"
23888     ;;
23889 *) case "$usedl" in
23890     $define|true|[yY]*)
23891             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -lgdbm_compat @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
23892             shift
23893             perllibs="$*"
23894             ;;
23895     *)  perllibs="$libs"
23896             ;;
23897     esac
23898     ;;
23899 esac
23900
23901 : Remove build directory name from cppstdin so it can be used from
23902 : either the present location or the final installed location.
23903 echo " "
23904 : Get out of the UU directory to get correct path name.
23905 cd ..
23906 case "$cppstdin" in
23907 `pwd`/cppstdin)
23908         echo "Stripping down cppstdin path name"
23909         cppstdin=cppstdin
23910         ;;
23911 esac
23912 cd UU
23913
23914 : end of configuration questions
23915 echo " "
23916 echo "End of configuration questions."
23917 echo " "
23918
23919 : back to where it started
23920 if test -d ../UU; then
23921         cd ..
23922 fi
23923
23924 : configuration may be unconditionally patched via a 'config.arch' file
23925 if $test -f config.arch; then
23926         echo "I see a config.arch file, loading it." >&4
23927         . ./config.arch
23928 fi
23929
23930 : configuration may be patched via a 'config.over' file
23931 if $test -f config.over; then
23932         echo " "
23933         dflt=y
23934         rp='I see a config.over file.  Do you wish to load it?'
23935         . UU/myread
23936         case "$ans" in
23937         n*) echo "OK, I'll ignore it.";;
23938         *)      . ./config.over
23939                 echo "Configuration override changes have been loaded."
23940                 ;;
23941         esac
23942 fi
23943
23944 : in case they want portability, strip down executable paths
23945 case "$d_portable" in
23946 "$define")
23947         echo " "
23948         echo "Stripping down executable paths..." >&4
23949         for file in $loclist $trylist; do
23950                 eval temp=\$$file
23951                 eval $file=`basename $temp`
23952         done
23953         ;;
23954 esac
23955
23956 : create config.sh file
23957 echo " "
23958 echo "Creating config.sh..." >&4
23959 $spitshell <<EOT >config.sh
23960 $startsh
23961 #
23962 # This file was produced by running the Configure script. It holds all the
23963 # definitions figured out by Configure. Should you modify one of these values,
23964 # do not forget to propagate your changes by running "Configure -der". You may
23965 # instead choose to run each of the .SH files by yourself, or "Configure -S".
23966 #
23967
23968 # Package name      : $package
23969 # Source directory  : $src
23970 # Configuration time: $cf_time
23971 # Configured by     : $cf_by
23972 # Target system     : $myuname
23973
23974 EOT
23975 : Add in command line options if available
23976 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
23977
23978 $spitshell <<EOT >>config.sh
23979
23980 Author='$Author'
23981 Date='$Date'
23982 Header='$Header'
23983 Id='$Id'
23984 Locker='$Locker'
23985 Log='$Log'
23986 RCSfile='$RCSfile'
23987 Revision='$Revision'
23988 Source='$Source'
23989 State='$State'
23990 _a='$_a'
23991 _exe='$_exe'
23992 _o='$_o'
23993 afs='$afs'
23994 afsroot='$afsroot'
23995 alignbytes='$alignbytes'
23996 ansi2knr='$ansi2knr'
23997 aphostname='$aphostname'
23998 api_revision='$api_revision'
23999 api_subversion='$api_subversion'
24000 api_version='$api_version'
24001 api_versionstring='$api_versionstring'
24002 ar='$ar'
24003 archlib='$archlib'
24004 archlibexp='$archlibexp'
24005 archname64='$archname64'
24006 archname='$archname'
24007 archobjs='$archobjs'
24008 asctime_r_proto='$asctime_r_proto'
24009 awk='$awk'
24010 baserev='$baserev'
24011 bash='$bash'
24012 bin='$bin'
24013 bin_ELF='$bin_ELF'
24014 binexp='$binexp'
24015 bison='$bison'
24016 byacc='$byacc'
24017 byteorder='$byteorder'
24018 c='$c'
24019 castflags='$castflags'
24020 cat='$cat'
24021 cc='$cc'
24022 cccdlflags='$cccdlflags'
24023 ccdlflags='$ccdlflags'
24024 ccflags='$ccflags'
24025 ccflags_uselargefiles='$ccflags_uselargefiles'
24026 ccname='$ccname'
24027 ccsymbols='$ccsymbols'
24028 ccversion='$ccversion'
24029 cf_by='$cf_by'
24030 cf_email='$cf_email'
24031 cf_time='$cf_time'
24032 charbits='$charbits'
24033 charsize='$charsize'
24034 chgrp='$chgrp'
24035 chmod='$chmod'
24036 chown='$chown'
24037 clocktype='$clocktype'
24038 comm='$comm'
24039 compress='$compress'
24040 contains='$contains'
24041 cp='$cp'
24042 cpio='$cpio'
24043 cpp='$cpp'
24044 cpp_stuff='$cpp_stuff'
24045 cppccsymbols='$cppccsymbols'
24046 cppflags='$cppflags'
24047 cpplast='$cpplast'
24048 cppminus='$cppminus'
24049 cpprun='$cpprun'
24050 cppstdin='$cppstdin'
24051 cppsymbols='$cppsymbols'
24052 crypt_r_proto='$crypt_r_proto'
24053 cryptlib='$cryptlib'
24054 csh='$csh'
24055 ctermid_r_proto='$ctermid_r_proto'
24056 ctime_r_proto='$ctime_r_proto'
24057 d_Gconvert='$d_Gconvert'
24058 d_PRIEUldbl='$d_PRIEUldbl'
24059 d_PRIFUldbl='$d_PRIFUldbl'
24060 d_PRIGUldbl='$d_PRIGUldbl'
24061 d_PRIXU64='$d_PRIXU64'
24062 d_PRId64='$d_PRId64'
24063 d_PRIeldbl='$d_PRIeldbl'
24064 d_PRIfldbl='$d_PRIfldbl'
24065 d_PRIgldbl='$d_PRIgldbl'
24066 d_PRIi64='$d_PRIi64'
24067 d_PRIo64='$d_PRIo64'
24068 d_PRIu64='$d_PRIu64'
24069 d_PRIx64='$d_PRIx64'
24070 d_SCNfldbl='$d_SCNfldbl'
24071 d__fwalk='$d__fwalk'
24072 d_access='$d_access'
24073 d_accessx='$d_accessx'
24074 d_acosh='$d_acosh'
24075 d_aintl='$d_aintl'
24076 d_alarm='$d_alarm'
24077 d_archlib='$d_archlib'
24078 d_asctime64='$d_asctime64'
24079 d_asctime_r='$d_asctime_r'
24080 d_asinh='$d_asinh'
24081 d_atanh='$d_atanh'
24082 d_atolf='$d_atolf'
24083 d_atoll='$d_atoll'
24084 d_attribute_deprecated='$d_attribute_deprecated'
24085 d_attribute_format='$d_attribute_format'
24086 d_attribute_malloc='$d_attribute_malloc'
24087 d_attribute_nonnull='$d_attribute_nonnull'
24088 d_attribute_noreturn='$d_attribute_noreturn'
24089 d_attribute_pure='$d_attribute_pure'
24090 d_attribute_unused='$d_attribute_unused'
24091 d_attribute_warn_unused_result='$d_attribute_warn_unused_result'
24092 d_backtrace='$d_backtrace'
24093 d_bcmp='$d_bcmp'
24094 d_bcopy='$d_bcopy'
24095 d_bsd='$d_bsd'
24096 d_bsdgetpgrp='$d_bsdgetpgrp'
24097 d_bsdsetpgrp='$d_bsdsetpgrp'
24098 d_builtin_choose_expr='$d_builtin_choose_expr'
24099 d_builtin_expect='$d_builtin_expect'
24100 d_bzero='$d_bzero'
24101 d_c99_variadic_macros='$d_c99_variadic_macros'
24102 d_casti32='$d_casti32'
24103 d_castneg='$d_castneg'
24104 d_cbrt='$d_cbrt'
24105 d_charvspr='$d_charvspr'
24106 d_chown='$d_chown'
24107 d_chroot='$d_chroot'
24108 d_chsize='$d_chsize'
24109 d_class='$d_class'
24110 d_clearenv='$d_clearenv'
24111 d_closedir='$d_closedir'
24112 d_cmsghdr_s='$d_cmsghdr_s'
24113 d_const='$d_const'
24114 d_copysign='$d_copysign'
24115 d_copysignl='$d_copysignl'
24116 d_cplusplus='$d_cplusplus'
24117 d_crypt='$d_crypt'
24118 d_crypt_r='$d_crypt_r'
24119 d_csh='$d_csh'
24120 d_ctermid='$d_ctermid'
24121 d_ctermid_r='$d_ctermid_r'
24122 d_ctime64='$d_ctime64'
24123 d_ctime_r='$d_ctime_r'
24124 d_cuserid='$d_cuserid'
24125 d_dbl_dig='$d_dbl_dig'
24126 d_dbminitproto='$d_dbminitproto'
24127 d_difftime64='$d_difftime64'
24128 d_difftime='$d_difftime'
24129 d_dir_dd_fd='$d_dir_dd_fd'
24130 d_dirfd='$d_dirfd'
24131 d_dirnamlen='$d_dirnamlen'
24132 d_dladdr='$d_dladdr'
24133 d_dlerror='$d_dlerror'
24134 d_dlopen='$d_dlopen'
24135 d_dlsymun='$d_dlsymun'
24136 d_dosuid='$d_dosuid'
24137 d_drand48_r='$d_drand48_r'
24138 d_drand48proto='$d_drand48proto'
24139 d_dup2='$d_dup2'
24140 d_eaccess='$d_eaccess'
24141 d_endgrent='$d_endgrent'
24142 d_endgrent_r='$d_endgrent_r'
24143 d_endhent='$d_endhent'
24144 d_endhostent_r='$d_endhostent_r'
24145 d_endnent='$d_endnent'
24146 d_endnetent_r='$d_endnetent_r'
24147 d_endpent='$d_endpent'
24148 d_endprotoent_r='$d_endprotoent_r'
24149 d_endpwent='$d_endpwent'
24150 d_endpwent_r='$d_endpwent_r'
24151 d_endsent='$d_endsent'
24152 d_endservent_r='$d_endservent_r'
24153 d_eofnblk='$d_eofnblk'
24154 d_erf='$d_erf'
24155 d_erfc='$d_erfc'
24156 d_eunice='$d_eunice'
24157 d_exp2='$d_exp2'
24158 d_expm1='$d_expm1'
24159 d_faststdio='$d_faststdio'
24160 d_fchdir='$d_fchdir'
24161 d_fchmod='$d_fchmod'
24162 d_fchown='$d_fchown'
24163 d_fcntl='$d_fcntl'
24164 d_fcntl_can_lock='$d_fcntl_can_lock'
24165 d_fd_macros='$d_fd_macros'
24166 d_fd_set='$d_fd_set'
24167 d_fdim='$d_fdim'
24168 d_fds_bits='$d_fds_bits'
24169 d_fegetround='$d_fegetround'
24170 d_fgetpos='$d_fgetpos'
24171 d_finite='$d_finite'
24172 d_finitel='$d_finitel'
24173 d_flexfnam='$d_flexfnam'
24174 d_flock='$d_flock'
24175 d_flockproto='$d_flockproto'
24176 d_fma='$d_fma'
24177 d_fmax='$d_fmax'
24178 d_fmin='$d_fmin'
24179 d_fork='$d_fork'
24180 d_fp_class='$d_fp_class'
24181 d_fp_classify='$d_fp_classify'
24182 d_fp_classl='$d_fp_classl'
24183 d_fpathconf='$d_fpathconf'
24184 d_fpclass='$d_fpclass'
24185 d_fpclassify='$d_fpclassify'
24186 d_fpclassl='$d_fpclassl'
24187 d_fpgetround='$d_fpgetround'
24188 d_fpos64_t='$d_fpos64_t'
24189 d_frexpl='$d_frexpl'
24190 d_fs_data_s='$d_fs_data_s'
24191 d_fseeko='$d_fseeko'
24192 d_fsetpos='$d_fsetpos'
24193 d_fstatfs='$d_fstatfs'
24194 d_fstatvfs='$d_fstatvfs'
24195 d_fsync='$d_fsync'
24196 d_ftello='$d_ftello'
24197 d_ftime='$d_ftime'
24198 d_futimes='$d_futimes'
24199 d_gdbm_ndbm_h_uses_prototypes='$d_gdbm_ndbm_h_uses_prototypes'
24200 d_gdbmndbm_h_uses_prototypes='$d_gdbmndbm_h_uses_prototypes'
24201 d_getaddrinfo='$d_getaddrinfo'
24202 d_getcwd='$d_getcwd'
24203 d_getespwnam='$d_getespwnam'
24204 d_getfsstat='$d_getfsstat'
24205 d_getgrent='$d_getgrent'
24206 d_getgrent_r='$d_getgrent_r'
24207 d_getgrgid_r='$d_getgrgid_r'
24208 d_getgrnam_r='$d_getgrnam_r'
24209 d_getgrps='$d_getgrps'
24210 d_gethbyaddr='$d_gethbyaddr'
24211 d_gethbyname='$d_gethbyname'
24212 d_gethent='$d_gethent'
24213 d_gethname='$d_gethname'
24214 d_gethostbyaddr_r='$d_gethostbyaddr_r'
24215 d_gethostbyname_r='$d_gethostbyname_r'
24216 d_gethostent_r='$d_gethostent_r'
24217 d_gethostprotos='$d_gethostprotos'
24218 d_getitimer='$d_getitimer'
24219 d_getlogin='$d_getlogin'
24220 d_getlogin_r='$d_getlogin_r'
24221 d_getmnt='$d_getmnt'
24222 d_getmntent='$d_getmntent'
24223 d_getnameinfo='$d_getnameinfo'
24224 d_getnbyaddr='$d_getnbyaddr'
24225 d_getnbyname='$d_getnbyname'
24226 d_getnent='$d_getnent'
24227 d_getnetbyaddr_r='$d_getnetbyaddr_r'
24228 d_getnetbyname_r='$d_getnetbyname_r'
24229 d_getnetent_r='$d_getnetent_r'
24230 d_getnetprotos='$d_getnetprotos'
24231 d_getpagsz='$d_getpagsz'
24232 d_getpbyname='$d_getpbyname'
24233 d_getpbynumber='$d_getpbynumber'
24234 d_getpent='$d_getpent'
24235 d_getpgid='$d_getpgid'
24236 d_getpgrp2='$d_getpgrp2'
24237 d_getpgrp='$d_getpgrp'
24238 d_getppid='$d_getppid'
24239 d_getprior='$d_getprior'
24240 d_getprotobyname_r='$d_getprotobyname_r'
24241 d_getprotobynumber_r='$d_getprotobynumber_r'
24242 d_getprotoent_r='$d_getprotoent_r'
24243 d_getprotoprotos='$d_getprotoprotos'
24244 d_getprpwnam='$d_getprpwnam'
24245 d_getpwent='$d_getpwent'
24246 d_getpwent_r='$d_getpwent_r'
24247 d_getpwnam_r='$d_getpwnam_r'
24248 d_getpwuid_r='$d_getpwuid_r'
24249 d_getsbyname='$d_getsbyname'
24250 d_getsbyport='$d_getsbyport'
24251 d_getsent='$d_getsent'
24252 d_getservbyname_r='$d_getservbyname_r'
24253 d_getservbyport_r='$d_getservbyport_r'
24254 d_getservent_r='$d_getservent_r'
24255 d_getservprotos='$d_getservprotos'
24256 d_getspnam='$d_getspnam'
24257 d_getspnam_r='$d_getspnam_r'
24258 d_gettimeod='$d_gettimeod'
24259 d_gmtime64='$d_gmtime64'
24260 d_gmtime_r='$d_gmtime_r'
24261 d_gnulibc='$d_gnulibc'
24262 d_grpasswd='$d_grpasswd'
24263 d_hasmntopt='$d_hasmntopt'
24264 d_htonl='$d_htonl'
24265 d_hypot='$d_hypot'
24266 d_ilogb='$d_ilogb'
24267 d_ilogbl='$d_ilogbl'
24268 d_inc_version_list='$d_inc_version_list'
24269 d_index='$d_index'
24270 d_inetaton='$d_inetaton'
24271 d_inetntop='$d_inetntop'
24272 d_inetpton='$d_inetpton'
24273 d_int64_t='$d_int64_t'
24274 d_ip_mreq='$d_ip_mreq'
24275 d_ip_mreq_source='$d_ip_mreq_source'
24276 d_ipv6_mreq='$d_ipv6_mreq'
24277 d_ipv6_mreq_source='$d_ipv6_mreq_source'
24278 d_isascii='$d_isascii'
24279 d_isblank='$d_isblank'
24280 d_isfinite='$d_isfinite'
24281 d_isfinitel='$d_isfinitel'
24282 d_isinf='$d_isinf'
24283 d_isinfl='$d_isinfl'
24284 d_isless='$d_isless'
24285 d_isnan='$d_isnan'
24286 d_isnanl='$d_isnanl'
24287 d_isnormal='$d_isnormal'
24288 d_j0='$d_j0'
24289 d_j0l='$d_j0l'
24290 d_killpg='$d_killpg'
24291 d_lc_monetary_2008='$d_lc_monetary_2008'
24292 d_lchown='$d_lchown'
24293 d_ldbl_dig='$d_ldbl_dig'
24294 d_ldexpl='$d_ldexpl'
24295 d_lgamma='$d_lgamma'
24296 d_lgamma_r='$d_lgamma_r'
24297 d_libm_lib_version='$d_libm_lib_version'
24298 d_libname_unique='$d_libname_unique'
24299 d_link='$d_link'
24300 d_llrint='$d_llrint'
24301 d_llrintl='$d_llrintl'
24302 d_llround='$d_llround'
24303 d_llroundl='$d_llroundl'
24304 d_localtime64='$d_localtime64'
24305 d_localtime_r='$d_localtime_r'
24306 d_localtime_r_needs_tzset='$d_localtime_r_needs_tzset'
24307 d_locconv='$d_locconv'
24308 d_lockf='$d_lockf'
24309 d_log1p='$d_log1p'
24310 d_log2='$d_log2'
24311 d_logb='$d_logb'
24312 d_longdbl='$d_longdbl'
24313 d_longlong='$d_longlong'
24314 d_lrint='$d_lrint'
24315 d_lrintl='$d_lrintl'
24316 d_lround='$d_lround'
24317 d_lroundl='$d_lroundl'
24318 d_lseekproto='$d_lseekproto'
24319 d_lstat='$d_lstat'
24320 d_madvise='$d_madvise'
24321 d_malloc_good_size='$d_malloc_good_size'
24322 d_malloc_size='$d_malloc_size'
24323 d_mblen='$d_mblen'
24324 d_mbstowcs='$d_mbstowcs'
24325 d_mbtowc='$d_mbtowc'
24326 d_memchr='$d_memchr'
24327 d_memcmp='$d_memcmp'
24328 d_memcpy='$d_memcpy'
24329 d_memmove='$d_memmove'
24330 d_memset='$d_memset'
24331 d_mkdir='$d_mkdir'
24332 d_mkdtemp='$d_mkdtemp'
24333 d_mkfifo='$d_mkfifo'
24334 d_mkstemp='$d_mkstemp'
24335 d_mkstemps='$d_mkstemps'
24336 d_mktime64='$d_mktime64'
24337 d_mktime='$d_mktime'
24338 d_mmap='$d_mmap'
24339 d_modfl='$d_modfl'
24340 d_modfl_pow32_bug='$d_modfl_pow32_bug'
24341 d_modflproto='$d_modflproto'
24342 d_mprotect='$d_mprotect'
24343 d_msg='$d_msg'
24344 d_msg_ctrunc='$d_msg_ctrunc'
24345 d_msg_dontroute='$d_msg_dontroute'
24346 d_msg_oob='$d_msg_oob'
24347 d_msg_peek='$d_msg_peek'
24348 d_msg_proxy='$d_msg_proxy'
24349 d_msgctl='$d_msgctl'
24350 d_msgget='$d_msgget'
24351 d_msghdr_s='$d_msghdr_s'
24352 d_msgrcv='$d_msgrcv'
24353 d_msgsnd='$d_msgsnd'
24354 d_msync='$d_msync'
24355 d_munmap='$d_munmap'
24356 d_mymalloc='$d_mymalloc'
24357 d_nan='$d_nan'
24358 d_ndbm='$d_ndbm'
24359 d_ndbm_h_uses_prototypes='$d_ndbm_h_uses_prototypes'
24360 d_nearbyint='$d_nearbyint'
24361 d_nextafter='$d_nextafter'
24362 d_nexttoward='$d_nexttoward'
24363 d_nice='$d_nice'
24364 d_nl_langinfo='$d_nl_langinfo'
24365 d_nv_preserves_uv='$d_nv_preserves_uv'
24366 d_nv_zero_is_allbits_zero='$d_nv_zero_is_allbits_zero'
24367 d_off64_t='$d_off64_t'
24368 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
24369 d_oldpthreads='$d_oldpthreads'
24370 d_oldsock='$d_oldsock'
24371 d_open3='$d_open3'
24372 d_pathconf='$d_pathconf'
24373 d_pause='$d_pause'
24374 d_perl_otherlibdirs='$d_perl_otherlibdirs'
24375 d_phostname='$d_phostname'
24376 d_pipe='$d_pipe'
24377 d_poll='$d_poll'
24378 d_portable='$d_portable'
24379 d_prctl='$d_prctl'
24380 d_prctl_set_name='$d_prctl_set_name'
24381 d_printf_format_null='$d_printf_format_null'
24382 d_procselfexe='$d_procselfexe'
24383 d_pseudofork='$d_pseudofork'
24384 d_pthread_atfork='$d_pthread_atfork'
24385 d_pthread_attr_setscope='$d_pthread_attr_setscope'
24386 d_pthread_yield='$d_pthread_yield'
24387 d_ptrdiff_t='$d_ptrdiff_t'
24388 d_pwage='$d_pwage'
24389 d_pwchange='$d_pwchange'
24390 d_pwclass='$d_pwclass'
24391 d_pwcomment='$d_pwcomment'
24392 d_pwexpire='$d_pwexpire'
24393 d_pwgecos='$d_pwgecos'
24394 d_pwpasswd='$d_pwpasswd'
24395 d_pwquota='$d_pwquota'
24396 d_qgcvt='$d_qgcvt'
24397 d_quad='$d_quad'
24398 d_random_r='$d_random_r'
24399 d_re_comp='$d_re_comp'
24400 d_readdir64_r='$d_readdir64_r'
24401 d_readdir='$d_readdir'
24402 d_readdir_r='$d_readdir_r'
24403 d_readlink='$d_readlink'
24404 d_readv='$d_readv'
24405 d_recvmsg='$d_recvmsg'
24406 d_regcmp='$d_regcmp'
24407 d_regcomp='$d_regcomp'
24408 d_remainder='$d_remainder'
24409 d_remquo='$d_remquo'
24410 d_rename='$d_rename'
24411 d_rewinddir='$d_rewinddir'
24412 d_rint='$d_rint'
24413 d_rmdir='$d_rmdir'
24414 d_round='$d_round'
24415 d_safebcpy='$d_safebcpy'
24416 d_safemcpy='$d_safemcpy'
24417 d_sanemcmp='$d_sanemcmp'
24418 d_sbrkproto='$d_sbrkproto'
24419 d_scalbn='$d_scalbn'
24420 d_scalbnl='$d_scalbnl'
24421 d_sched_yield='$d_sched_yield'
24422 d_scm_rights='$d_scm_rights'
24423 d_seekdir='$d_seekdir'
24424 d_select='$d_select'
24425 d_sem='$d_sem'
24426 d_semctl='$d_semctl'
24427 d_semctl_semid_ds='$d_semctl_semid_ds'
24428 d_semctl_semun='$d_semctl_semun'
24429 d_semget='$d_semget'
24430 d_semop='$d_semop'
24431 d_sendmsg='$d_sendmsg'
24432 d_setegid='$d_setegid'
24433 d_seteuid='$d_seteuid'
24434 d_setgrent='$d_setgrent'
24435 d_setgrent_r='$d_setgrent_r'
24436 d_setgrps='$d_setgrps'
24437 d_sethent='$d_sethent'
24438 d_sethostent_r='$d_sethostent_r'
24439 d_setitimer='$d_setitimer'
24440 d_setlinebuf='$d_setlinebuf'
24441 d_setlocale='$d_setlocale'
24442 d_setlocale_r='$d_setlocale_r'
24443 d_setnent='$d_setnent'
24444 d_setnetent_r='$d_setnetent_r'
24445 d_setpent='$d_setpent'
24446 d_setpgid='$d_setpgid'
24447 d_setpgrp2='$d_setpgrp2'
24448 d_setpgrp='$d_setpgrp'
24449 d_setprior='$d_setprior'
24450 d_setproctitle='$d_setproctitle'
24451 d_setprotoent_r='$d_setprotoent_r'
24452 d_setpwent='$d_setpwent'
24453 d_setpwent_r='$d_setpwent_r'
24454 d_setregid='$d_setregid'
24455 d_setresgid='$d_setresgid'
24456 d_setresuid='$d_setresuid'
24457 d_setreuid='$d_setreuid'
24458 d_setrgid='$d_setrgid'
24459 d_setruid='$d_setruid'
24460 d_setsent='$d_setsent'
24461 d_setservent_r='$d_setservent_r'
24462 d_setsid='$d_setsid'
24463 d_setvbuf='$d_setvbuf'
24464 d_shm='$d_shm'
24465 d_shmat='$d_shmat'
24466 d_shmatprototype='$d_shmatprototype'
24467 d_shmctl='$d_shmctl'
24468 d_shmdt='$d_shmdt'
24469 d_shmget='$d_shmget'
24470 d_sigaction='$d_sigaction'
24471 d_signbit='$d_signbit'
24472 d_sigprocmask='$d_sigprocmask'
24473 d_sigsetjmp='$d_sigsetjmp'
24474 d_sin6_scope_id='$d_sin6_scope_id'
24475 d_sitearch='$d_sitearch'
24476 d_snprintf='$d_snprintf'
24477 d_sockaddr_in6='$d_sockaddr_in6'
24478 d_sockaddr_sa_len='$d_sockaddr_sa_len'
24479 d_sockatmark='$d_sockatmark'
24480 d_sockatmarkproto='$d_sockatmarkproto'
24481 d_socket='$d_socket'
24482 d_socklen_t='$d_socklen_t'
24483 d_sockpair='$d_sockpair'
24484 d_socks5_init='$d_socks5_init'
24485 d_sprintf_returns_strlen='$d_sprintf_returns_strlen'
24486 d_sqrtl='$d_sqrtl'
24487 d_srand48_r='$d_srand48_r'
24488 d_srandom_r='$d_srandom_r'
24489 d_sresgproto='$d_sresgproto'
24490 d_sresuproto='$d_sresuproto'
24491 d_stat='$d_stat'
24492 d_statblks='$d_statblks'
24493 d_statfs_f_flags='$d_statfs_f_flags'
24494 d_statfs_s='$d_statfs_s'
24495 d_static_inline='$d_static_inline'
24496 d_statvfs='$d_statvfs'
24497 d_stdio_cnt_lval='$d_stdio_cnt_lval'
24498 d_stdio_ptr_lval='$d_stdio_ptr_lval'
24499 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
24500 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
24501 d_stdio_stream_array='$d_stdio_stream_array'
24502 d_stdiobase='$d_stdiobase'
24503 d_stdstdio='$d_stdstdio'
24504 d_strchr='$d_strchr'
24505 d_strcoll='$d_strcoll'
24506 d_strctcpy='$d_strctcpy'
24507 d_strerrm='$d_strerrm'
24508 d_strerror='$d_strerror'
24509 d_strerror_r='$d_strerror_r'
24510 d_strftime='$d_strftime'
24511 d_strlcat='$d_strlcat'
24512 d_strlcpy='$d_strlcpy'
24513 d_strtod='$d_strtod'
24514 d_strtol='$d_strtol'
24515 d_strtold='$d_strtold'
24516 d_strtoll='$d_strtoll'
24517 d_strtoq='$d_strtoq'
24518 d_strtoul='$d_strtoul'
24519 d_strtoull='$d_strtoull'
24520 d_strtouq='$d_strtouq'
24521 d_strxfrm='$d_strxfrm'
24522 d_suidsafe='$d_suidsafe'
24523 d_symlink='$d_symlink'
24524 d_syscall='$d_syscall'
24525 d_syscallproto='$d_syscallproto'
24526 d_sysconf='$d_sysconf'
24527 d_sysernlst='$d_sysernlst'
24528 d_syserrlst='$d_syserrlst'
24529 d_system='$d_system'
24530 d_tcgetpgrp='$d_tcgetpgrp'
24531 d_tcsetpgrp='$d_tcsetpgrp'
24532 d_telldir='$d_telldir'
24533 d_telldirproto='$d_telldirproto'
24534 d_tgamma='$d_tgamma'
24535 d_time='$d_time'
24536 d_timegm='$d_timegm'
24537 d_times='$d_times'
24538 d_tm_tm_gmtoff='$d_tm_tm_gmtoff'
24539 d_tm_tm_zone='$d_tm_tm_zone'
24540 d_tmpnam_r='$d_tmpnam_r'
24541 d_trunc='$d_trunc'
24542 d_truncate='$d_truncate'
24543 d_truncl='$d_truncl'
24544 d_ttyname_r='$d_ttyname_r'
24545 d_tzname='$d_tzname'
24546 d_u32align='$d_u32align'
24547 d_ualarm='$d_ualarm'
24548 d_umask='$d_umask'
24549 d_uname='$d_uname'
24550 d_union_semun='$d_union_semun'
24551 d_unordered='$d_unordered'
24552 d_unsetenv='$d_unsetenv'
24553 d_usleep='$d_usleep'
24554 d_usleepproto='$d_usleepproto'
24555 d_ustat='$d_ustat'
24556 d_vendorarch='$d_vendorarch'
24557 d_vendorbin='$d_vendorbin'
24558 d_vendorlib='$d_vendorlib'
24559 d_vendorscript='$d_vendorscript'
24560 d_vfork='$d_vfork'
24561 d_void_closedir='$d_void_closedir'
24562 d_voidsig='$d_voidsig'
24563 d_voidtty='$d_voidtty'
24564 d_volatile='$d_volatile'
24565 d_vprintf='$d_vprintf'
24566 d_vsnprintf='$d_vsnprintf'
24567 d_wait4='$d_wait4'
24568 d_waitpid='$d_waitpid'
24569 d_wcscmp='$d_wcscmp'
24570 d_wcstombs='$d_wcstombs'
24571 d_wcsxfrm='$d_wcsxfrm'
24572 d_wctomb='$d_wctomb'
24573 d_writev='$d_writev'
24574 d_xenix='$d_xenix'
24575 date='$date'
24576 db_hashtype='$db_hashtype'
24577 db_prefixtype='$db_prefixtype'
24578 db_version_major='$db_version_major'
24579 db_version_minor='$db_version_minor'
24580 db_version_patch='$db_version_patch'
24581 direntrytype='$direntrytype'
24582 dlext='$dlext'
24583 dlsrc='$dlsrc'
24584 doubleinfbytes='$doubleinfbytes'
24585 doublekind='$doublekind'
24586 doublemantbits='$doublemantbits'
24587 doublenanbytes='$doublenanbytes'
24588 doublesize='$doublesize'
24589 drand01='$drand01'
24590 drand48_r_proto='$drand48_r_proto'
24591 dtrace='$dtrace'
24592 dynamic_ext='$dynamic_ext'
24593 eagain='$eagain'
24594 ebcdic='$ebcdic'
24595 echo='$echo'
24596 egrep='$egrep'
24597 emacs='$emacs'
24598 endgrent_r_proto='$endgrent_r_proto'
24599 endhostent_r_proto='$endhostent_r_proto'
24600 endnetent_r_proto='$endnetent_r_proto'
24601 endprotoent_r_proto='$endprotoent_r_proto'
24602 endpwent_r_proto='$endpwent_r_proto'
24603 endservent_r_proto='$endservent_r_proto'
24604 eunicefix='$eunicefix'
24605 exe_ext='$exe_ext'
24606 expr='$expr'
24607 extensions='$extensions'
24608 extern_C='$extern_C'
24609 extras='$extras'
24610 fflushNULL='$fflushNULL'
24611 fflushall='$fflushall'
24612 find='$find'
24613 firstmakefile='$firstmakefile'
24614 flex='$flex'
24615 fpossize='$fpossize'
24616 fpostype='$fpostype'
24617 freetype='$freetype'
24618 from='$from'
24619 full_ar='$full_ar'
24620 full_csh='$full_csh'
24621 full_sed='$full_sed'
24622 gccansipedantic='$gccansipedantic'
24623 gccosandvers='$gccosandvers'
24624 gccversion='$gccversion'
24625 getgrent_r_proto='$getgrent_r_proto'
24626 getgrgid_r_proto='$getgrgid_r_proto'
24627 getgrnam_r_proto='$getgrnam_r_proto'
24628 gethostbyaddr_r_proto='$gethostbyaddr_r_proto'
24629 gethostbyname_r_proto='$gethostbyname_r_proto'
24630 gethostent_r_proto='$gethostent_r_proto'
24631 getlogin_r_proto='$getlogin_r_proto'
24632 getnetbyaddr_r_proto='$getnetbyaddr_r_proto'
24633 getnetbyname_r_proto='$getnetbyname_r_proto'
24634 getnetent_r_proto='$getnetent_r_proto'
24635 getprotobyname_r_proto='$getprotobyname_r_proto'
24636 getprotobynumber_r_proto='$getprotobynumber_r_proto'
24637 getprotoent_r_proto='$getprotoent_r_proto'
24638 getpwent_r_proto='$getpwent_r_proto'
24639 getpwnam_r_proto='$getpwnam_r_proto'
24640 getpwuid_r_proto='$getpwuid_r_proto'
24641 getservbyname_r_proto='$getservbyname_r_proto'
24642 getservbyport_r_proto='$getservbyport_r_proto'
24643 getservent_r_proto='$getservent_r_proto'
24644 getspnam_r_proto='$getspnam_r_proto'
24645 gidformat='$gidformat'
24646 gidsign='$gidsign'
24647 gidsize='$gidsize'
24648 gidtype='$gidtype'
24649 glibpth='$glibpth'
24650 gmake='$gmake'
24651 gmtime_r_proto='$gmtime_r_proto'
24652 gnulibc_version='$gnulibc_version'
24653 grep='$grep'
24654 groupcat='$groupcat'
24655 groupstype='$groupstype'
24656 gzip='$gzip'
24657 h_fcntl='$h_fcntl'
24658 h_sysfile='$h_sysfile'
24659 hint='$hint'
24660 hostcat='$hostcat'
24661 hostgenerate='$hostgenerate'
24662 hostosname='$hostosname'
24663 hostperl='$hostperl'
24664 html1dir='$html1dir'
24665 html1direxp='$html1direxp'
24666 html3dir='$html3dir'
24667 html3direxp='$html3direxp'
24668 i16size='$i16size'
24669 i16type='$i16type'
24670 i32size='$i32size'
24671 i32type='$i32type'
24672 i64size='$i64size'
24673 i64type='$i64type'
24674 i8size='$i8size'
24675 i8type='$i8type'
24676 i_arpainet='$i_arpainet'
24677 i_assert='$i_assert'
24678 i_bfd='$i_bfd'
24679 i_bsdioctl='$i_bsdioctl'
24680 i_crypt='$i_crypt'
24681 i_db='$i_db'
24682 i_dbm='$i_dbm'
24683 i_dirent='$i_dirent'
24684 i_dlfcn='$i_dlfcn'
24685 i_execinfo='$i_execinfo'
24686 i_fcntl='$i_fcntl'
24687 i_fenv='$i_fenv'
24688 i_float='$i_float'
24689 i_fp='$i_fp'
24690 i_fp_class='$i_fp_class'
24691 i_gdbm='$i_gdbm'
24692 i_gdbm_ndbm='$i_gdbm_ndbm'
24693 i_gdbmndbm='$i_gdbmndbm'
24694 i_grp='$i_grp'
24695 i_ieeefp='$i_ieeefp'
24696 i_inttypes='$i_inttypes'
24697 i_langinfo='$i_langinfo'
24698 i_libutil='$i_libutil'
24699 i_limits='$i_limits'
24700 i_locale='$i_locale'
24701 i_machcthr='$i_machcthr'
24702 i_malloc='$i_malloc'
24703 i_mallocmalloc='$i_mallocmalloc'
24704 i_math='$i_math'
24705 i_memory='$i_memory'
24706 i_mntent='$i_mntent'
24707 i_ndbm='$i_ndbm'
24708 i_netdb='$i_netdb'
24709 i_neterrno='$i_neterrno'
24710 i_netinettcp='$i_netinettcp'
24711 i_niin='$i_niin'
24712 i_poll='$i_poll'
24713 i_prot='$i_prot'
24714 i_pthread='$i_pthread'
24715 i_pwd='$i_pwd'
24716 i_quadmath='$i_quadmath'
24717 i_rpcsvcdbm='$i_rpcsvcdbm'
24718 i_sgtty='$i_sgtty'
24719 i_shadow='$i_shadow'
24720 i_socks='$i_socks'
24721 i_stdarg='$i_stdarg'
24722 i_stdbool='$i_stdbool'
24723 i_stddef='$i_stddef'
24724 i_stdint='$i_stdint'
24725 i_stdlib='$i_stdlib'
24726 i_string='$i_string'
24727 i_sunmath='$i_sunmath'
24728 i_sysaccess='$i_sysaccess'
24729 i_sysdir='$i_sysdir'
24730 i_sysfile='$i_sysfile'
24731 i_sysfilio='$i_sysfilio'
24732 i_sysin='$i_sysin'
24733 i_sysioctl='$i_sysioctl'
24734 i_syslog='$i_syslog'
24735 i_sysmman='$i_sysmman'
24736 i_sysmode='$i_sysmode'
24737 i_sysmount='$i_sysmount'
24738 i_sysndir='$i_sysndir'
24739 i_sysparam='$i_sysparam'
24740 i_syspoll='$i_syspoll'
24741 i_sysresrc='$i_sysresrc'
24742 i_syssecrt='$i_syssecrt'
24743 i_sysselct='$i_sysselct'
24744 i_syssockio='$i_syssockio'
24745 i_sysstat='$i_sysstat'
24746 i_sysstatfs='$i_sysstatfs'
24747 i_sysstatvfs='$i_sysstatvfs'
24748 i_systime='$i_systime'
24749 i_systimek='$i_systimek'
24750 i_systimes='$i_systimes'
24751 i_systypes='$i_systypes'
24752 i_sysuio='$i_sysuio'
24753 i_sysun='$i_sysun'
24754 i_sysutsname='$i_sysutsname'
24755 i_sysvfs='$i_sysvfs'
24756 i_syswait='$i_syswait'
24757 i_termio='$i_termio'
24758 i_termios='$i_termios'
24759 i_time='$i_time'
24760 i_unistd='$i_unistd'
24761 i_ustat='$i_ustat'
24762 i_utime='$i_utime'
24763 i_values='$i_values'
24764 i_varargs='$i_varargs'
24765 i_varhdr='$i_varhdr'
24766 i_vfork='$i_vfork'
24767 ignore_versioned_solibs='$ignore_versioned_solibs'
24768 inc_version_list='$inc_version_list'
24769 inc_version_list_init='$inc_version_list_init'
24770 incpath='$incpath'
24771 incpth='$incpth'
24772 inews='$inews'
24773 initialinstalllocation='$initialinstalllocation'
24774 installarchlib='$installarchlib'
24775 installbin='$installbin'
24776 installhtml1dir='$installhtml1dir'
24777 installhtml3dir='$installhtml3dir'
24778 installman1dir='$installman1dir'
24779 installman3dir='$installman3dir'
24780 installprefix='$installprefix'
24781 installprefixexp='$installprefixexp'
24782 installprivlib='$installprivlib'
24783 installscript='$installscript'
24784 installsitearch='$installsitearch'
24785 installsitebin='$installsitebin'
24786 installsitehtml1dir='$installsitehtml1dir'
24787 installsitehtml3dir='$installsitehtml3dir'
24788 installsitelib='$installsitelib'
24789 installsiteman1dir='$installsiteman1dir'
24790 installsiteman3dir='$installsiteman3dir'
24791 installsitescript='$installsitescript'
24792 installstyle='$installstyle'
24793 installusrbinperl='$installusrbinperl'
24794 installvendorarch='$installvendorarch'
24795 installvendorbin='$installvendorbin'
24796 installvendorhtml1dir='$installvendorhtml1dir'
24797 installvendorhtml3dir='$installvendorhtml3dir'
24798 installvendorlib='$installvendorlib'
24799 installvendorman1dir='$installvendorman1dir'
24800 installvendorman3dir='$installvendorman3dir'
24801 installvendorscript='$installvendorscript'
24802 intsize='$intsize'
24803 issymlink='$issymlink'
24804 ivdformat='$ivdformat'
24805 ivsize='$ivsize'
24806 ivtype='$ivtype'
24807 known_extensions='$known_extensions'
24808 ksh='$ksh'
24809 ld='$ld'
24810 ld_can_script='$ld_can_script'
24811 lddlflags='$lddlflags'
24812 ldflags='$ldflags'
24813 ldflags_uselargefiles='$ldflags_uselargefiles'
24814 ldlibpthname='$ldlibpthname'
24815 less='$less'
24816 lib_ext='$lib_ext'
24817 libc='$libc'
24818 libperl='$libperl'
24819 libpth='$libpth'
24820 libs='$libs'
24821 libsdirs='$libsdirs'
24822 libsfiles='$libsfiles'
24823 libsfound='$libsfound'
24824 libspath='$libspath'
24825 libswanted='$libswanted'
24826 libswanted_uselargefiles='$libswanted_uselargefiles'
24827 line='$line'
24828 lint='$lint'
24829 lkflags='$lkflags'
24830 ln='$ln'
24831 lns='$lns'
24832 localtime_r_proto='$localtime_r_proto'
24833 locincpth='$locincpth'
24834 loclibpth='$loclibpth'
24835 longdblinfbytes='$longdblinfbytes'
24836 longdblkind='$longdblkind'
24837 longdblmantbits='$longdblmantbits'
24838 longdblnanbytes='$longdblnanbytes'
24839 longdblsize='$longdblsize'
24840 longlongsize='$longlongsize'
24841 longsize='$longsize'
24842 lp='$lp'
24843 lpr='$lpr'
24844 ls='$ls'
24845 lseeksize='$lseeksize'
24846 lseektype='$lseektype'
24847 mail='$mail'
24848 mailx='$mailx'
24849 make='$make'
24850 make_set_make='$make_set_make'
24851 mallocobj='$mallocobj'
24852 mallocsrc='$mallocsrc'
24853 malloctype='$malloctype'
24854 man1dir='$man1dir'
24855 man1direxp='$man1direxp'
24856 man1ext='$man1ext'
24857 man3dir='$man3dir'
24858 man3direxp='$man3direxp'
24859 man3ext='$man3ext'
24860 mips_type='$mips_type'
24861 mistrustnm='$mistrustnm'
24862 mkdir='$mkdir'
24863 mmaptype='$mmaptype'
24864 modetype='$modetype'
24865 more='$more'
24866 multiarch='$multiarch'
24867 mv='$mv'
24868 myarchname='$myarchname'
24869 mydomain='$mydomain'
24870 myhostname='$myhostname'
24871 myuname='$myuname'
24872 n='$n'
24873 need_va_copy='$need_va_copy'
24874 netdb_hlen_type='$netdb_hlen_type'
24875 netdb_host_type='$netdb_host_type'
24876 netdb_name_type='$netdb_name_type'
24877 netdb_net_type='$netdb_net_type'
24878 nm='$nm'
24879 nm_opt='$nm_opt'
24880 nm_so_opt='$nm_so_opt'
24881 nonxs_ext='$nonxs_ext'
24882 nroff='$nroff'
24883 nvEUformat='$nvEUformat'
24884 nvFUformat='$nvFUformat'
24885 nvGUformat='$nvGUformat'
24886 nv_overflows_integers_at='$nv_overflows_integers_at'
24887 nv_preserves_uv_bits='$nv_preserves_uv_bits'
24888 nveformat='$nveformat'
24889 nvfformat='$nvfformat'
24890 nvgformat='$nvgformat'
24891 nvmantbits='$nvmantbits'
24892 nvsize='$nvsize'
24893 nvtype='$nvtype'
24894 o_nonblock='$o_nonblock'
24895 obj_ext='$obj_ext'
24896 old_pthread_create_joinable='$old_pthread_create_joinable'
24897 optimize='$optimize'
24898 orderlib='$orderlib'
24899 osname='$osname'
24900 osvers='$osvers'
24901 otherlibdirs='$otherlibdirs'
24902 package='$package'
24903 pager='$pager'
24904 passcat='$passcat'
24905 patchlevel='$patchlevel'
24906 path_sep='$path_sep'
24907 perl5='$perl5'
24908 perl='$perl'
24909 perl_patchlevel='$perl_patchlevel'
24910 perl_static_inline='$perl_static_inline'
24911 perladmin='$perladmin'
24912 perllibs='$perllibs'
24913 perlpath='$perlpath'
24914 pg='$pg'
24915 phostname='$phostname'
24916 pidtype='$pidtype'
24917 plibpth='$plibpth'
24918 pmake='$pmake'
24919 pr='$pr'
24920 prefix='$prefix'
24921 prefixexp='$prefixexp'
24922 privlib='$privlib'
24923 privlibexp='$privlibexp'
24924 procselfexe='$procselfexe'
24925 prototype='$prototype'
24926 ptrsize='$ptrsize'
24927 quadkind='$quadkind'
24928 quadtype='$quadtype'
24929 randbits='$randbits'
24930 randfunc='$randfunc'
24931 random_r_proto='$random_r_proto'
24932 randseedtype='$randseedtype'
24933 ranlib='$ranlib'
24934 rd_nodata='$rd_nodata'
24935 readdir64_r_proto='$readdir64_r_proto'
24936 readdir_r_proto='$readdir_r_proto'
24937 revision='$revision'
24938 rm='$rm'
24939 rm_try='$rm_try'
24940 rmail='$rmail'
24941 run='$run'
24942 runnm='$runnm'
24943 sGMTIME_max='$sGMTIME_max'
24944 sGMTIME_min='$sGMTIME_min'
24945 sLOCALTIME_max='$sLOCALTIME_max'
24946 sLOCALTIME_min='$sLOCALTIME_min'
24947 sPRIEUldbl='$sPRIEUldbl'
24948 sPRIFUldbl='$sPRIFUldbl'
24949 sPRIGUldbl='$sPRIGUldbl'
24950 sPRIXU64='$sPRIXU64'
24951 sPRId64='$sPRId64'
24952 sPRIeldbl='$sPRIeldbl'
24953 sPRIfldbl='$sPRIfldbl'
24954 sPRIgldbl='$sPRIgldbl'
24955 sPRIi64='$sPRIi64'
24956 sPRIo64='$sPRIo64'
24957 sPRIu64='$sPRIu64'
24958 sPRIx64='$sPRIx64'
24959 sSCNfldbl='$sSCNfldbl'
24960 sched_yield='$sched_yield'
24961 scriptdir='$scriptdir'
24962 scriptdirexp='$scriptdirexp'
24963 sed='$sed'
24964 seedfunc='$seedfunc'
24965 selectminbits='$selectminbits'
24966 selecttype='$selecttype'
24967 sendmail='$sendmail'
24968 setgrent_r_proto='$setgrent_r_proto'
24969 sethostent_r_proto='$sethostent_r_proto'
24970 setlocale_r_proto='$setlocale_r_proto'
24971 setnetent_r_proto='$setnetent_r_proto'
24972 setprotoent_r_proto='$setprotoent_r_proto'
24973 setpwent_r_proto='$setpwent_r_proto'
24974 setservent_r_proto='$setservent_r_proto'
24975 sh='$sh'
24976 shar='$shar'
24977 sharpbang='$sharpbang'
24978 shmattype='$shmattype'
24979 shortsize='$shortsize'
24980 shrpenv='$shrpenv'
24981 shsharp='$shsharp'
24982 sig_count='$sig_count'
24983 sig_name='$sig_name'
24984 sig_name_init='$sig_name_init'
24985 sig_num='$sig_num'
24986 sig_num_init='$sig_num_init'
24987 sig_size='$sig_size'
24988 signal_t='$signal_t'
24989 sitearch='$sitearch'
24990 sitearchexp='$sitearchexp'
24991 sitebin='$sitebin'
24992 sitebinexp='$sitebinexp'
24993 sitehtml1dir='$sitehtml1dir'
24994 sitehtml1direxp='$sitehtml1direxp'
24995 sitehtml3dir='$sitehtml3dir'
24996 sitehtml3direxp='$sitehtml3direxp'
24997 sitelib='$sitelib'
24998 sitelib_stem='$sitelib_stem'
24999 sitelibexp='$sitelibexp'
25000 siteman1dir='$siteman1dir'
25001 siteman1direxp='$siteman1direxp'
25002 siteman3dir='$siteman3dir'
25003 siteman3direxp='$siteman3direxp'
25004 siteprefix='$siteprefix'
25005 siteprefixexp='$siteprefixexp'
25006 sitescript='$sitescript'
25007 sitescriptexp='$sitescriptexp'
25008 sizesize='$sizesize'
25009 sizetype='$sizetype'
25010 sleep='$sleep'
25011 smail='$smail'
25012 so='$so'
25013 sockethdr='$sockethdr'
25014 socketlib='$socketlib'
25015 socksizetype='$socksizetype'
25016 sort='$sort'
25017 spackage='$spackage'
25018 spitshell='$spitshell'
25019 srand48_r_proto='$srand48_r_proto'
25020 srandom_r_proto='$srandom_r_proto'
25021 src='$src'
25022 ssizetype='$ssizetype'
25023 st_ino_sign='$st_ino_sign'
25024 st_ino_size='$st_ino_size'
25025 startperl='$startperl'
25026 startsh='$startsh'
25027 static_ext='$static_ext'
25028 stdchar='$stdchar'
25029 stdio_base='$stdio_base'
25030 stdio_bufsiz='$stdio_bufsiz'
25031 stdio_cnt='$stdio_cnt'
25032 stdio_filbuf='$stdio_filbuf'
25033 stdio_ptr='$stdio_ptr'
25034 stdio_stream_array='$stdio_stream_array'
25035 strerror_r_proto='$strerror_r_proto'
25036 strings='$strings'
25037 submit='$submit'
25038 subversion='$subversion'
25039 sysman='$sysman'
25040 sysroot='$sysroot'
25041 tail='$tail'
25042 tar='$tar'
25043 targetarch='$targetarch'
25044 targetdir='$targetdir'
25045 targetenv='$targetenv'
25046 targethost='$targethost'
25047 targetmkdir='$targetmkdir'
25048 targetport='$targetport'
25049 targetsh='$targetsh'
25050 tbl='$tbl'
25051 tee='$tee'
25052 test='$test'
25053 timeincl='$timeincl'
25054 timetype='$timetype'
25055 tmpnam_r_proto='$tmpnam_r_proto'
25056 to='$to'
25057 touch='$touch'
25058 tr='$tr'
25059 trnl='$trnl'
25060 troff='$troff'
25061 ttyname_r_proto='$ttyname_r_proto'
25062 u16size='$u16size'
25063 u16type='$u16type'
25064 u32size='$u32size'
25065 u32type='$u32type'
25066 u64size='$u64size'
25067 u64type='$u64type'
25068 u8size='$u8size'
25069 u8type='$u8type'
25070 uidformat='$uidformat'
25071 uidsign='$uidsign'
25072 uidsize='$uidsize'
25073 uidtype='$uidtype'
25074 uname='$uname'
25075 uniq='$uniq'
25076 uquadtype='$uquadtype'
25077 use5005threads='$use5005threads'
25078 use64bitall='$use64bitall'
25079 use64bitint='$use64bitint'
25080 usecbacktrace='$usecbacktrace'
25081 usecrosscompile='$usecrosscompile'
25082 usedevel='$usedevel'
25083 usedl='$usedl'
25084 usedtrace='$usedtrace'
25085 usefaststdio='$usefaststdio'
25086 useithreads='$useithreads'
25087 usekernprocpathname='$usekernprocpathname'
25088 uselargefiles='$uselargefiles'
25089 uselongdouble='$uselongdouble'
25090 usemallocwrap='$usemallocwrap'
25091 usemorebits='$usemorebits'
25092 usemultiplicity='$usemultiplicity'
25093 usemymalloc='$usemymalloc'
25094 usenm='$usenm'
25095 usensgetexecutablepath='$usensgetexecutablepath'
25096 useopcode='$useopcode'
25097 useperlio='$useperlio'
25098 useposix='$useposix'
25099 usequadmath='$usequadmath'
25100 usereentrant='$usereentrant'
25101 userelocatableinc='$userelocatableinc'
25102 useshrplib='$useshrplib'
25103 usesitecustomize='$usesitecustomize'
25104 usesocks='$usesocks'
25105 usethreads='$usethreads'
25106 usevendorprefix='$usevendorprefix'
25107 useversionedarchname='$useversionedarchname'
25108 usevfork='$usevfork'
25109 usrinc='$usrinc'
25110 uuname='$uuname'
25111 uvXUformat='$uvXUformat'
25112 uvoformat='$uvoformat'
25113 uvsize='$uvsize'
25114 uvtype='$uvtype'
25115 uvuformat='$uvuformat'
25116 uvxformat='$uvxformat'
25117 vaproto='$vaproto'
25118 vendorarch='$vendorarch'
25119 vendorarchexp='$vendorarchexp'
25120 vendorbin='$vendorbin'
25121 vendorbinexp='$vendorbinexp'
25122 vendorhtml1dir='$vendorhtml1dir'
25123 vendorhtml1direxp='$vendorhtml1direxp'
25124 vendorhtml3dir='$vendorhtml3dir'
25125 vendorhtml3direxp='$vendorhtml3direxp'
25126 vendorlib='$vendorlib'
25127 vendorlib_stem='$vendorlib_stem'
25128 vendorlibexp='$vendorlibexp'
25129 vendorman1dir='$vendorman1dir'
25130 vendorman1direxp='$vendorman1direxp'
25131 vendorman3dir='$vendorman3dir'
25132 vendorman3direxp='$vendorman3direxp'
25133 vendorprefix='$vendorprefix'
25134 vendorprefixexp='$vendorprefixexp'
25135 vendorscript='$vendorscript'
25136 vendorscriptexp='$vendorscriptexp'
25137 version='$version'
25138 version_patchlevel_string='$version_patchlevel_string'
25139 versiononly='$versiononly'
25140 vi='$vi'
25141 xlibpth='$xlibpth'
25142 yacc='$yacc'
25143 yaccflags='$yaccflags'
25144 zcat='$zcat'
25145 zip='$zip'
25146 EOT
25147
25148 : add special variables
25149 $test -f $src/patchlevel.h && \
25150 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
25151 echo "PERL_PATCHLEVEL='$perl_patchlevel'" >>config.sh
25152 echo "PERL_CONFIG_SH=true" >>config.sh
25153
25154 : propagate old symbols
25155 if $test -f UU/config.sh; then
25156         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
25157         $sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \
25158                 config.sh config.sh UU/oldconfig.sh |\
25159                 $sort | $uniq -u >UU/oldsyms
25160         set X `$cat UU/oldsyms`
25161         shift
25162         case $# in
25163         0) ;;
25164         *)
25165                 $cat <<EOM
25166 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
25167 EOM
25168                 echo ": Variables propagated from previous config.sh file." >>config.sh
25169                 for sym in `$cat UU/oldsyms`; do
25170                         echo "    Propagating $hint variable "'$'"$sym..."
25171                         eval 'tmp="$'"${sym}"'"'
25172                         echo "$tmp" | \
25173                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
25174                 done
25175                 ;;
25176         esac
25177 fi
25178
25179 : preserve RCS keywords in files with variable substitution, grrr
25180 Id='$Id'
25181
25182 : Finish up by extracting the .SH files
25183 case "$alldone" in
25184 exit)
25185         $rm -rf UU
25186         echo "Extraction done."
25187         exit 0
25188         ;;
25189 cont)
25190         ;;
25191 '')
25192         dflt=''
25193         nostick=true
25194         $cat <<EOM
25195
25196 If you'd like to make any changes to the config.sh file before I begin
25197 to configure things, do it as a shell escape now (e.g. !vi config.sh).
25198
25199 EOM
25200         rp="Press return or use a shell escape to edit config.sh:"
25201         . UU/myread
25202         nostick=''
25203         case "$ans" in
25204         '') ;;
25205         *) : in case they cannot read
25206                 sh 1>&4 -c "$ans";;
25207         esac
25208         ;;
25209 esac
25210
25211 : if this fails, just run all the .SH files by hand
25212 . ./config.sh
25213
25214 echo " "
25215 exec 1>&4
25216 pwd=`pwd`
25217 . ./UU/extract
25218 cd "$pwd"
25219
25220 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
25221         dflt=y
25222         case "$silent" in
25223         true) ;;
25224         *)
25225                 $cat <<EOM
25226
25227 Now you need to generate make dependencies by running "$make depend".
25228 You might prefer to run it in background: "$make depend > makedepend.out &"
25229 It can take a while, so you might not want to run it right now.
25230
25231 EOM
25232                 ;;
25233         esac
25234         rp="Run $make depend now?"
25235         . UU/myread
25236         case "$ans" in
25237         y*)
25238                 $make depend && echo "Now you must run '$make'."
25239                 ;;
25240         *)
25241                 echo "You must run '$make depend' then '$make'."
25242                 ;;
25243         esac
25244 elif test -f [Mm]akefile; then
25245         echo " "
25246         echo "Now you must run a $make."
25247 else
25248         echo "Configure done."
25249 fi
25250
25251 if $test -f Policy.sh; then
25252     $cat <<EOM
25253
25254 If you compile $package on a different machine or from a different object
25255 directory, copy the Policy.sh file from this object directory to the
25256 new one before you run Configure -- this will help you with most of
25257 the policy defaults.
25258
25259 EOM
25260 fi
25261 if $test -f config.msg; then
25262     echo "Hmm.  I also noted the following information while running:"
25263     echo " "
25264     $cat config.msg >&4
25265     $rm -f config.msg
25266 fi
25267 $rm -f kit*isdone ark*isdone
25268 $rm -rf UU
25269
25270 : End of Configure
25271