Retract #14327 for now, going to the limit seems
[p5sagit/p5-mst-13.2.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. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Jan 18 01:06:38 EET 2002 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 i_systime=''
760 i_systimek=''
761 i_time=''
762 timeincl=''
763 i_unistd=''
764 i_ustat=''
765 i_utime=''
766 i_values=''
767 i_stdarg=''
768 i_varargs=''
769 i_varhdr=''
770 i_vfork=''
771 inc_version_list=''
772 inc_version_list_init=''
773 installprefix=''
774 installprefixexp=''
775 installstyle=''
776 installusrbinperl=''
777 intsize=''
778 longsize=''
779 shortsize=''
780 issymlink=''
781 libc=''
782 ldlibpthname=''
783 libperl=''
784 shrpenv=''
785 useshrplib=''
786 glibpth=''
787 libpth=''
788 loclibpth=''
789 plibpth=''
790 xlibpth=''
791 ignore_versioned_solibs=''
792 libs=''
793 libsdirs=''
794 libsfiles=''
795 libsfound=''
796 libspath=''
797 lns=''
798 d_PRIEUldbl=''
799 d_PRIFUldbl=''
800 d_PRIGUldbl=''
801 d_PRIeldbl=''
802 d_PRIfldbl=''
803 d_PRIgldbl=''
804 d_SCNfldbl=''
805 sPRIEUldbl=''
806 sPRIFUldbl=''
807 sPRIGUldbl=''
808 sPRIeldbl=''
809 sPRIfldbl=''
810 sPRIgldbl=''
811 sSCNfldbl=''
812 lseeksize=''
813 lseektype=''
814 make_set_make=''
815 d_mymalloc=''
816 freetype=''
817 mallocobj=''
818 mallocsrc=''
819 malloctype=''
820 usemymalloc=''
821 installman1dir=''
822 man1dir=''
823 man1direxp=''
824 man1ext=''
825 installman3dir=''
826 man3dir=''
827 man3direxp=''
828 man3ext=''
829 modetype=''
830 multiarch=''
831 mydomain=''
832 myhostname=''
833 phostname=''
834 c=''
835 n=''
836 d_eofnblk=''
837 eagain=''
838 o_nonblock=''
839 rd_nodata=''
840 need_va_copy=''
841 netdb_hlen_type=''
842 netdb_host_type=''
843 netdb_name_type=''
844 netdb_net_type=''
845 groupcat=''
846 hostcat=''
847 passcat=''
848 orderlib=''
849 ranlib=''
850 d_perl_otherlibdirs=''
851 otherlibdirs=''
852 package=''
853 spackage=''
854 pager=''
855 api_revision=''
856 api_subversion=''
857 api_version=''
858 api_versionstring=''
859 patchlevel=''
860 perl_patchlevel=''
861 revision=''
862 subversion=''
863 version=''
864 version_patchlevel_string=''
865 perl5=''
866 perladmin=''
867 perlpath=''
868 d_nv_preserves_uv=''
869 d_nv_preserves_uv_bits=''
870 i16size=''
871 i16type=''
872 i32size=''
873 i32type=''
874 i64size=''
875 i64type=''
876 i8size=''
877 i8type=''
878 ivsize=''
879 ivtype=''
880 nvsize=''
881 nvtype=''
882 u16size=''
883 u16type=''
884 u32size=''
885 u32type=''
886 u64size=''
887 u64type=''
888 u8size=''
889 u8type=''
890 uvsize=''
891 uvtype=''
892 ivdformat=''
893 nvEUformat=''
894 nvFUformat=''
895 nvGUformat=''
896 nveformat=''
897 nvfformat=''
898 nvgformat=''
899 uvXUformat=''
900 uvoformat=''
901 uvuformat=''
902 uvxformat=''
903 pidtype=''
904 prefix=''
905 prefixexp=''
906 installprivlib=''
907 privlib=''
908 privlibexp=''
909 prototype=''
910 ptrsize=''
911 d_PRIXU64=''
912 d_PRId64=''
913 d_PRIi64=''
914 d_PRIo64=''
915 d_PRIu64=''
916 d_PRIx64=''
917 sPRIXU64=''
918 sPRId64=''
919 sPRIi64=''
920 sPRIo64=''
921 sPRIu64=''
922 sPRIx64=''
923 d_quad=''
924 quadkind=''
925 quadtype=''
926 uquadtype=''
927 drand01=''
928 randbits=''
929 randfunc=''
930 randseedtype=''
931 seedfunc=''
932 installscript=''
933 scriptdir=''
934 scriptdirexp=''
935 selectminbits=''
936 selecttype=''
937 sh=''
938 sig_count=''
939 sig_name=''
940 sig_name_init=''
941 sig_num=''
942 sig_num_init=''
943 sig_size=''
944 installsitearch=''
945 sitearch=''
946 sitearchexp=''
947 installsitebin=''
948 sitebin=''
949 sitebinexp=''
950 installsitelib=''
951 sitelib=''
952 sitelib_stem=''
953 sitelibexp=''
954 siteprefix=''
955 siteprefixexp=''
956 sizesize=''
957 sizetype=''
958 so=''
959 socksizetype=''
960 sharpbang=''
961 shsharp=''
962 spitshell=''
963 src=''
964 ssizetype=''
965 startperl=''
966 startsh=''
967 stdchar=''
968 d_stdio_stream_array=''
969 stdio_stream_array=''
970 sysman=''
971 trnl=''
972 uidformat=''
973 uidsign=''
974 uidsize=''
975 uidtype=''
976 archname64=''
977 use64bitall=''
978 use64bitint=''
979 ccflags_uselargefiles=''
980 ldflags_uselargefiles=''
981 libswanted_uselargefiles=''
982 uselargefiles=''
983 uselongdouble=''
984 usemorebits=''
985 usemultiplicity=''
986 nm_opt=''
987 nm_so_opt=''
988 runnm=''
989 usenm=''
990 useperlio=''
991 usesocks=''
992 d_oldpthreads=''
993 use5005threads=''
994 useithreads=''
995 usereentrant=''
996 usethreads=''
997 incpath=''
998 mips_type=''
999 usrinc=''
1000 d_vendorarch=''
1001 installvendorarch=''
1002 vendorarch=''
1003 vendorarchexp=''
1004 d_vendorbin=''
1005 installvendorbin=''
1006 vendorbin=''
1007 vendorbinexp=''
1008 d_vendorlib=''
1009 installvendorlib=''
1010 vendorlib=''
1011 vendorlib_stem=''
1012 vendorlibexp=''
1013 usevendorprefix=''
1014 vendorprefix=''
1015 vendorprefixexp=''
1016 versiononly=''
1017 defvoidused=''
1018 voidflags=''
1019 pm_apiversion=''
1020 xs_apiversion=''
1021 yacc=''
1022 yaccflags=''
1023 CONFIG=''
1024
1025 define='define'
1026 undef='undef'
1027 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1028 rmlist=''
1029
1030 : We must find out about Eunice early
1031 eunicefix=':'
1032 if test -f /etc/unixtovms; then
1033         eunicefix=/etc/unixtovms
1034 fi
1035 if test -f /etc/unixtovms.exe; then
1036         eunicefix=/etc/unixtovms.exe
1037 fi
1038
1039 if test -f "/system/gnu_library/bin/ar.pm"; then
1040      _exe=".pm"
1041 fi
1042
1043 i_whoami=''
1044 ccname=''
1045 ccversion=''
1046 perllibs=''
1047 : set useposix=false in your hint file to disable the POSIX extension.
1048 useposix=true
1049 : set useopcode=false in your hint file to disable the Opcode extension.
1050 useopcode=true
1051 : Trailing extension.  Override this in a hint file, if needed.
1052 : Extra object files, if any, needed on this platform.
1053 archobjs=''
1054 archname=''
1055 : Possible local include directories to search.
1056 : Set locincpth to "" in a hint file to defeat local include searches.
1057 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1058 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1059 :
1060 : no include file wanted by default
1061 inclwanted=''
1062
1063 groupstype=''
1064 libnames=''
1065 : change the next line if compiling for Xenix/286 on Xenix/386
1066 xlibpth='/usr/lib/386 /lib/386'
1067 : Possible local library directories to search.
1068 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1069 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1070
1071 : general looking path for locating libraries
1072 glibpth="/lib /usr/lib $xlibpth"
1073 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1074 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1075 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1076
1077 : Private path used by Configure to find libraries.  Its value
1078 : is prepended to libpth. This variable takes care of special
1079 : machines, like the mips.  Usually, it should be empty.
1080 plibpth=''
1081
1082 : default library list
1083 libswanted=''
1084 : some systems want to use only the non-versioned libso:s
1085 ignore_versioned_solibs=''
1086 archname64=''
1087 ccflags_uselargefiles=''
1088 ldflags_uselargefiles=''
1089 libswanted_uselargefiles=''
1090 : set usemultiplicity on the Configure command line to enable multiplicity.
1091 : set usesocks on the Configure command line to enable socks.
1092 : set usethreads on the Configure command line to enable threads.
1093 usereentrant='undef'
1094 : full support for void wanted by default
1095 defvoidused=15
1096
1097 : List of libraries we want.
1098 : If anyone needs -lnet, put it in a hint file.
1099 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1100 libswanted="$libswanted dld ld sun m c cposix posix"
1101 libswanted="$libswanted ndir dir crypt sec"
1102 libswanted="$libswanted ucb bsd BSD PW x util"
1103 : We probably want to search /usr/shlib before most other libraries.
1104 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1105 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1106 glibpth="/usr/shlib $glibpth"
1107 : Do not use vfork unless overridden by a hint file.
1108 usevfork=false
1109
1110 : Find the basic shell for Bourne shell scripts
1111 case "$sh" in
1112 '')
1113         case "$SYSTYPE" in
1114         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1115         *) xxx='/bin/sh';;
1116         esac
1117         if test -f "$xxx"; then
1118                 sh="$xxx"
1119         else
1120                 : Build up a list and do a single loop so we can 'break' out.
1121                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1122                 for xxx in sh bash ksh pdksh ash; do
1123                         for p in $pth; do
1124                                 try="$try ${p}/${xxx}"
1125                         done
1126                 done
1127                 for xxx in $try; do
1128                         if test -f "$xxx"; then
1129                                 sh="$xxx";
1130                                 break
1131                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1132                                 sh="$xxx";
1133                                 break
1134                         elif test -f "$xxx.exe"; then
1135                                 sh="$xxx";
1136                                 break
1137                         fi
1138                 done
1139         fi
1140         ;;
1141 esac
1142
1143 case "$sh" in
1144 '')     cat >&2 <<EOM
1145 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1146
1147 Usually it's in /bin/sh.  How did you even get this far?
1148 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1149 we'll try to straighten this all out.
1150 EOM
1151         exit 1
1152         ;;
1153 esac
1154
1155 : see if sh knows # comments
1156 if `$sh -c '#' >/dev/null 2>&1`; then
1157         shsharp=true
1158         spitshell=cat
1159         xcat=/bin/cat
1160         test -f $xcat$_exe || xcat=/usr/bin/cat
1161         if test ! -f $xcat$_exe; then
1162                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1163                         if test -f $p/cat$_exe; then
1164                                 xcat=$p/cat
1165                                 break
1166                         fi
1167                 done
1168                 if test ! -f $xcat$_exe; then
1169                         echo "Can't find cat anywhere!"
1170                         exit 1
1171                 fi
1172         fi
1173         echo "#!$xcat" >sharp
1174         $eunicefix sharp
1175         chmod +x sharp
1176         ./sharp > today
1177         if test -s today; then
1178                 sharpbang='#!'
1179         else
1180                 echo "#! $xcat" > sharp
1181                 $eunicefix sharp
1182                 chmod +x sharp
1183                 ./sharp > today
1184                 if test -s today; then
1185                         sharpbang='#! '
1186                 else
1187                         sharpbang=': use '
1188                 fi
1189         fi
1190 else
1191         echo " "
1192         echo "Your $sh doesn't grok # comments--I will strip them later on."
1193         shsharp=false
1194         cd ..
1195         echo "exec grep -v '^[  ]*#'" >spitshell
1196         chmod +x spitshell
1197         $eunicefix spitshell
1198         spitshell=`pwd`/spitshell
1199         cd UU
1200         echo "I presume that if # doesn't work, #! won't work either!"
1201         sharpbang=': use '
1202 fi
1203 rm -f sharp today
1204
1205 : figure out how to guarantee sh startup
1206 case "$startsh" in
1207 '') startsh=${sharpbang}${sh} ;;
1208 *)
1209 esac
1210 cat >sharp <<EOSS
1211 $startsh
1212 set abc
1213 test "$?abc" != 1
1214 EOSS
1215
1216 chmod +x sharp
1217 $eunicefix sharp
1218 if ./sharp; then
1219         : echo "Yup, it does."
1220 else
1221         echo "Hmm... '$startsh' does not guarantee sh startup..."
1222         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1223 fi
1224 rm -f sharp
1225
1226
1227 : Save command line options in file UU/cmdline.opt for later use in
1228 : generating config.sh.
1229 cat > cmdline.opt <<EOSH
1230 # Configure command line arguments.
1231 config_arg0='$0'
1232 config_args='$*'
1233 config_argc=$#
1234 EOSH
1235 argn=1
1236 args_exp=''
1237 args_sep=''
1238 for arg in "$@"; do
1239         cat >>cmdline.opt <<EOSH
1240 config_arg$argn='$arg'
1241 EOSH
1242         # Extreme backslashitis: replace each ' by '"'"'
1243         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1244 $arg
1245 EOC
1246         arg_exp=`cat cmdl.opt`
1247         args_exp="$args_exp$args_sep'$arg_exp'"
1248         argn=`expr $argn + 1`
1249         args_sep=' '
1250 done
1251 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1252 # used by ./hints/os2.sh
1253 rm -f cmdl.opt
1254
1255 : produce awk script to parse command line options
1256 cat >options.awk <<'EOF'
1257 BEGIN {
1258         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1259
1260         len = length(optstr);
1261         for (i = 1; i <= len; i++) {
1262                 c = substr(optstr, i, 1);
1263                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1264                 if (a == ":") {
1265                         arg[c] = 1;
1266                         i++;
1267                 }
1268                 opt[c] = 1;
1269         }
1270 }
1271 {
1272         expect = 0;
1273         str = $0;
1274         if (substr(str, 1, 1) != "-") {
1275                 printf("'%s'\n", str);
1276                 next;
1277         }
1278         len = length($0);
1279         for (i = 2; i <= len; i++) {
1280                 c = substr(str, i, 1);
1281                 if (!opt[c]) {
1282                         printf("-%s\n", substr(str, i));
1283                         next;
1284                 }
1285                 printf("-%s\n", c);
1286                 if (arg[c]) {
1287                         if (i < len)
1288                                 printf("'%s'\n", substr(str, i + 1));
1289                         else
1290                                 expect = 1;
1291                         next;
1292                 }
1293         }
1294 }
1295 END {
1296         if (expect)
1297                 print "?";
1298 }
1299 EOF
1300
1301 : process the command line options
1302 set X `for arg in "$@"; do echo "X$arg"; done |
1303         sed -e s/X// | awk -f options.awk`
1304 eval "set $*"
1305 shift
1306 rm -f options.awk
1307
1308 : set up default values
1309 fastread=''
1310 reuseval=false
1311 config_sh=''
1312 alldone=''
1313 error=''
1314 silent=''
1315 extractsh=''
1316 override=''
1317 knowitall=''
1318 rm -f optdef.sh posthint.sh
1319 cat >optdef.sh <<EOS
1320 $startsh
1321 EOS
1322
1323
1324 : option parsing
1325 while test $# -gt 0; do
1326         case "$1" in
1327         -d) shift; fastread=yes;;
1328         -e) shift; alldone=cont;;
1329         -f)
1330                 shift
1331                 cd ..
1332                 if test -r "$1"; then
1333                         config_sh="$1"
1334                 else
1335                         echo "$me: cannot read config file $1." >&2
1336                         error=true
1337                 fi
1338                 cd UU
1339                 shift;;
1340         -h) shift; error=true;;
1341         -r) shift; reuseval=true;;
1342         -s) shift; silent=true; realsilent=true;;
1343         -E) shift; alldone=exit;;
1344         -K) shift; knowitall=true;;
1345         -O) shift; override=true;;
1346         -S) shift; silent=true; extractsh=true;;
1347         -D)
1348                 shift
1349                 case "$1" in
1350                 *=)
1351                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1352                         echo "$me: ignoring -D $1" >&2
1353                         ;;
1354                 *=*) echo "$1" | \
1355                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1356                 *) echo "$1='define'" >> optdef.sh;;
1357                 esac
1358                 shift
1359                 ;;
1360         -U)
1361                 shift
1362                 case "$1" in
1363                 *=) echo "$1" >> optdef.sh;;
1364                 *=*)
1365                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1366                         echo "$me: ignoring -U $1" >&2
1367                         ;;
1368                 *) echo "$1='undef'" >> optdef.sh;;
1369                 esac
1370                 shift
1371                 ;;
1372         -A)
1373             shift
1374             xxx=''
1375             yyy="$1"
1376             zzz=''
1377             uuu=undef
1378             case "$yyy" in
1379             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1380                  case "$zzz" in
1381                  *:*) zzz='' ;;
1382                  *)   xxx=append
1383                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1384                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1385                  esac
1386                  ;;
1387             esac
1388             case "$xxx" in
1389             '')  case "$yyy" in
1390                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1391                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1392                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1393                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1394                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1395                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1396                  esac
1397                  ;;       
1398             esac
1399             case "$xxx" in
1400             append)
1401                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1402             clear)
1403                 echo "$yyy=''"                  >> posthint.sh ;;
1404             define)
1405                 case "$zzz" in
1406                 '') zzz=define ;;
1407                 esac
1408                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1409             eval)
1410                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1411             prepend)
1412                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1413             undef)
1414                 case "$zzz" in
1415                 '') zzz="$uuu" ;;
1416                 esac
1417                 echo "$yyy=$zzz"                >> posthint.sh ;;
1418             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1419             esac
1420             shift
1421             ;;
1422         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1423             exit 0;;
1424         --) break;;
1425         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1426         *) break;;
1427         esac
1428 done
1429
1430 case "$error" in
1431 true)
1432         cat >&2 <<EOM
1433 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1434                  [-U symbol] [-U symbol=] [-A command:symbol...]
1435   -d : use defaults for all answers.
1436   -e : go on without questioning past the production of config.sh.
1437   -f : specify an alternate default configuration file.
1438   -h : print this help message and exit (with an error status).
1439   -r : reuse C symbols value if possible (skips costly nm extraction).
1440   -s : silent mode, only echoes questions and essential information.
1441   -D : define symbol to have some value:
1442          -D symbol         symbol gets the value 'define'
1443          -D symbol=value   symbol gets the value 'value'
1444   -E : stop at the end of questions, after having produced config.sh.
1445   -K : do not use unless you know what you are doing.
1446   -O : let -D and -U override definitions from loaded configuration file.
1447   -S : perform variable substitutions on all .SH files (can mix with -f)
1448   -U : undefine symbol:
1449          -U symbol    symbol gets the value 'undef'
1450          -U symbol=   symbol gets completely empty
1451   -A : manipulate symbol after the platform specific hints have been applied:
1452          -A symbol=value                append " "value to symbol
1453          -A append:symbol=value         append value to symbol
1454          -A define:symbol=value         define symbol to have value
1455          -A clear:symbol                define symbol to be ''
1456          -A define:symbol               define symbol to be 'define'
1457          -A eval:symbol=value           define symbol to be eval of value
1458          -A prepend:symbol=value        prepend value to symbol
1459          -A undef:symbol                define symbol to be 'undef'
1460          -A undef:symbol=               define symbol to be ''
1461   -V : print version number and exit (with a zero status).
1462 EOM
1463         exit 1
1464         ;;
1465 esac
1466
1467 : Sanity checks
1468 case "$fastread$alldone" in
1469 yescont|yesexit) ;;
1470 *)
1471         case "$extractsh" in
1472         true) ;;
1473         *)
1474                 if test ! -t 0; then
1475                         echo "Say 'sh Configure', not 'sh <Configure'"
1476                         exit 1
1477                 fi
1478                 ;;
1479         esac
1480         ;;
1481 esac
1482
1483 exec 4>&1
1484 case "$silent" in
1485 true) exec 1>/dev/null;;
1486 esac
1487
1488 : run the defines and the undefines, if any, but leave the file out there...
1489 touch optdef.sh
1490 . ./optdef.sh
1491 : create the posthint manipulation script and leave the file out there...
1492 touch posthint.sh
1493
1494 : set package name
1495 package=perl5
1496 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1497 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1498 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1499 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1500 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1501 esac
1502
1503 : Some greps do not return status, grrr.
1504 echo "grimblepritz" >grimble
1505 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1506         contains=contains
1507 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1508         contains=grep
1509 else
1510         contains=contains
1511 fi
1512 rm -f grimble
1513 : the following should work in any shell
1514 case "$contains" in
1515 contains*)
1516         echo " "
1517         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1518         cat >contains <<'EOSS'
1519 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1520 EOSS
1521 chmod +x contains
1522 esac
1523
1524 : Find the path to the source tree
1525 case "$src" in
1526 '') case "$0" in
1527     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1528          case "$src" in
1529          /*)    ;;
1530          .)     ;;
1531          *)     src=`cd ../$src && pwd` ;;
1532          esac
1533          ;;
1534     *)   src='.';;
1535     esac;;
1536 esac
1537 case "$src" in
1538 '')     src=/
1539         rsrc=/
1540         ;;
1541 /*) rsrc="$src";;
1542 *) rsrc="../$src";;
1543 esac
1544 if test -f $rsrc/Configure && \
1545         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1546 then
1547    : found it, so we are ok.
1548 else
1549         rsrc=''
1550         for src in . .. ../.. ../../.. ../../../..; do
1551                 if test -f ../$src/Configure && \
1552                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1553                 then
1554                         rsrc=../$src
1555                         break
1556                 fi
1557         done
1558 fi
1559 case "$rsrc" in
1560 '')
1561         cat <<EOM >&4
1562
1563 Sorry, I can't seem to locate the source dir for $package.  Please start
1564 Configure with an explicit path -- i.e. /some/path/Configure.
1565
1566 EOM
1567         exit 1
1568         ;;
1569 ../.)   rsrc='..';;
1570 *)
1571         echo " "
1572         echo "Sources for $package found in \"$src\"." >&4
1573         ;;
1574 esac
1575
1576 : script used to extract .SH files with variable substitutions
1577 cat >extract <<'EOS'
1578 PERL_CONFIG_SH=true
1579 echo "Doing variable substitutions on .SH files..."
1580 if test -f MANIFEST; then
1581         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1582 else
1583         echo "(Looking for .SH files under the source directory.)"
1584         set x `(cd "$src"; find . -name "*.SH" -print)`
1585 fi
1586 shift
1587 case $# in
1588 0) set x `(cd "$src"; echo *.SH)`; shift;;
1589 esac
1590 if test ! -f "$src/$1"; then
1591         shift
1592 fi
1593 mkdir_p='
1594 name=$1;
1595 create="";
1596 while test $name; do
1597         if test ! -d "$name"; then
1598                 create="$name $create";
1599                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1600                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1601         else
1602                 name="";
1603         fi;
1604 done;
1605 for file in $create; do
1606         mkdir $file;
1607 done
1608 '
1609 for file in $*; do
1610         case "$src" in
1611         ".")
1612                 case "$file" in
1613                 */*)
1614                         dir=`expr X$file : 'X\(.*\)/'`
1615                         file=`expr X$file : 'X.*/\(.*\)'`
1616                         (cd "$dir" && . ./$file)
1617                         ;;
1618                 *)
1619                         . ./$file
1620                         ;;
1621                 esac
1622                 ;;
1623         *)
1624                 case "$file" in
1625                 */*)
1626                         dir=`expr X$file : 'X\(.*\)/'`
1627                         file=`expr X$file : 'X.*/\(.*\)'`
1628                         (set x $dir; shift; eval $mkdir_p)
1629                         sh <"$src/$dir/$file"
1630                         ;;
1631                 *)
1632                         sh <"$src/$file"
1633                         ;;
1634                 esac
1635                 ;;
1636         esac
1637 done
1638 if test -f "$src/config_h.SH"; then
1639         if test ! -f config.h; then
1640         : oops, they left it out of MANIFEST, probably, so do it anyway.
1641         . "$src/config_h.SH"
1642         fi
1643 fi
1644 EOS
1645
1646 : extract files and exit if asked to do so
1647 case "$extractsh" in
1648 true)
1649         case "$realsilent" in
1650         true) ;;
1651         *) exec 1>&4;;
1652         esac
1653         case "$config_sh" in
1654         '') config_sh='config.sh';;
1655         esac
1656         echo " "
1657         echo "Fetching answers from $config_sh..."
1658         cd ..
1659         . $config_sh
1660         test "$override" && . ./optdef.sh
1661         echo " "
1662         . UU/extract
1663         rm -rf UU
1664         echo "Extraction done."
1665         exit 0
1666         ;;
1667 esac
1668
1669 : Eunice requires " " instead of "", can you believe it
1670 echo " "
1671 : Here we go...
1672 echo "Beginning of configuration questions for $package."
1673
1674 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1675
1676 : first determine how to suppress newline on echo command
1677 echo " "
1678 echo "Checking echo to see how to suppress newlines..."
1679 (echo "hi there\c" ; echo " ") >.echotmp
1680 if $contains c .echotmp >/dev/null 2>&1 ; then
1681         echo "...using -n."
1682         n='-n'
1683         c=''
1684 else
1685         cat <<'EOM'
1686 ...using \c
1687 EOM
1688         n=''
1689         c='\c'
1690 fi
1691 echo $n "The star should be here-->$c"
1692 echo '*'
1693 rm -f .echotmp
1694
1695 : Now test for existence of everything in MANIFEST
1696 echo " "
1697 if test -f "$rsrc/MANIFEST"; then
1698         echo "First let's make sure your kit is complete.  Checking..." >&4
1699         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | split -50
1700         rm -f missing
1701         tmppwd=`pwd`
1702         for filelist in x??; do
1703                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1704         done
1705         if test -s missing; then
1706                 cat missing >&4
1707                 cat >&4 <<'EOM'
1708
1709 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1710
1711 You have the option of continuing the configuration process, despite the
1712 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1713 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1714 and contact the author (perlbug@perl.org).
1715
1716 EOM
1717                 echo $n "Continue? [n] $c" >&4
1718                 read ans
1719                 case "$ans" in
1720                 y*)
1721                         echo "Continuing..." >&4
1722                         rm -f missing
1723                         ;;
1724                 *)
1725                         echo "ABORTING..." >&4
1726                         kill $$
1727                         ;;
1728                 esac
1729         else
1730                 echo "Looks good..."
1731         fi
1732 else
1733         echo "There is no MANIFEST file.  I hope your kit is complete !"
1734 fi
1735 rm -f missing x??
1736
1737 echo " "
1738 : Find the appropriate value for a newline for tr
1739 if test -n "$DJGPP"; then
1740        trnl='\012'
1741 fi
1742 if test X"$trnl" = X; then
1743         case "`echo foo|tr '\n' x 2>/dev/null`" in
1744         foox) trnl='\n' ;;
1745         esac
1746 fi
1747 if test X"$trnl" = X; then
1748         case "`echo foo|tr '\012' x 2>/dev/null`" in
1749         foox) trnl='\012' ;;
1750         esac
1751 fi
1752 if test X"$trnl" = X; then
1753         cat <<EOM >&2
1754
1755 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1756
1757 EOM
1758         exit 1
1759 fi
1760
1761 : compute the number of columns on the terminal for proper question formatting
1762 case "$COLUMNS" in
1763 '') COLUMNS='80';;
1764 esac
1765
1766 : set up the echo used in my read
1767 myecho="case \"\$xxxm\" in
1768 '') echo $n \"\$rp $c\" >&4;;
1769 *) case \"\$rp\" in
1770         '') echo $n \"[\$xxxm] $c\";;
1771         *)
1772                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1773                         echo \"\$rp\" >&4
1774                         echo $n \"[\$xxxm] $c\" >&4
1775                 else
1776                         echo $n \"\$rp [\$xxxm] $c\" >&4
1777                 fi
1778                 ;;
1779         esac;;
1780 esac"
1781
1782 : now set up to do reads with possible shell escape and default assignment
1783 cat <<EOSC >myread
1784 $startsh
1785 xxxm=\$dflt
1786 $myecho
1787 ans='!'
1788 case "\$fastread" in
1789 yes) case "\$dflt" in
1790         '') ;;
1791         *) ans='';
1792                 case "\$silent-\$rp" in
1793                 true-) ;;
1794                 *) echo " " >&4;;
1795                 esac;;
1796         esac;;
1797 *) case "\$silent" in
1798         true) case "\$rp" in
1799                 '') ans='';;
1800                 esac;;
1801         esac;;
1802 esac
1803 while expr "X\$ans" : "X!" >/dev/null; do
1804         read answ
1805         set x \$xxxm
1806         shift
1807         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1808         case  "\$answ" in
1809         "!")
1810                 sh 1>&4
1811                 echo " "
1812                 $myecho
1813                 ;;
1814         !*)
1815                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1816                 shift
1817                 sh 1>&4 -c "\$*"
1818                 echo " "
1819                 $myecho
1820                 ;;
1821         "\$ans")
1822                 case "\$ans" in
1823                 \\&*)
1824                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1825                         shift
1826                         case "\$1" in
1827                         -d)
1828                                 fastread=yes
1829                                 echo "(OK, I'll run with -d after this question.)" >&4
1830                                 ;;
1831                         -*)
1832                                 echo "*** Sorry, \$1 not supported yet." >&4
1833                                 ;;
1834                         esac
1835                         $myecho
1836                         ans=!
1837                         ;;
1838                 esac;;
1839         *)
1840                 case "\$aok" in
1841                 y)
1842                         echo "*** Substitution done -- please confirm."
1843                         xxxm="\$ans"
1844                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1845                         xxxm="\$ans"
1846                         ans=!
1847                         ;;
1848                 *)
1849                         echo "*** Error -- try again."
1850                         ans=!
1851                         ;;
1852                 esac
1853                 $myecho
1854                 ;;
1855         esac
1856         case "\$ans\$xxxm\$nostick" in
1857         '')
1858                 ans=!
1859                 $myecho
1860                 ;;
1861         esac
1862 done
1863 case "\$ans" in
1864 '') ans="\$xxxm";;
1865 esac
1866 EOSC
1867
1868 : create .config dir to save info across Configure sessions
1869 test -d ../.config || mkdir ../.config
1870 cat >../.config/README <<EOF
1871 This directory created by Configure to save information that should
1872 persist across sessions for $package.
1873
1874 You may safely delete it if you wish.
1875 EOF
1876
1877 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1878 case "$usedevel" in
1879 $define|true|[yY]*) ;;
1880 *) case "$xversion" in
1881    *[13579])
1882         cat >&4 <<EOH
1883 *** WHOA THERE!!! ***
1884
1885     This is an UNSTABLE DEVELOPMENT release.
1886     The version of this $package distribution is $xversion, that is, odd,
1887     (as opposed to even) and that signifies a development release.
1888     If you want a maintenance release, you want an even-numbered version.
1889
1890     Do ***NOT*** install this into production use.
1891     Data corruption and crashes are possible.
1892
1893     It is most seriously suggested that you do not continue any further
1894     unless you want to help in developing and debugging Perl.
1895
1896     If you *still* want to build perl, you can answer 'y' now,
1897     or pass -Dusedevel to Configure.
1898
1899 EOH
1900         rp='Do you really want to continue?'
1901         dflt='n'
1902         . ./myread
1903         case "$ans" in
1904         [yY]) echo >&4 "Okay, continuing."
1905               usedevel="$define" ;;
1906         *) echo >&4 "Okay, bye."
1907            exit 1
1908            ;;
1909         esac
1910         ;;
1911     esac
1912     ;;
1913 esac
1914 case "$usedevel" in
1915 $define|true|[yY]*)
1916         case "$versiononly" in
1917         '') versiononly="$define" ;;
1918         esac
1919         case "$installusrbinperl" in
1920         '') installusrbinperl="$undef" ;;
1921         esac
1922         ;;
1923 esac
1924
1925 : general instructions
1926 needman=true
1927 firsttime=true
1928 user=`(logname) 2>/dev/null`
1929 case "$user" in
1930 '') user=`whoami 2>&1`;;
1931 esac
1932 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1933         firsttime=false
1934         echo " "
1935         rp='Would you like to see the instructions?'
1936         dflt=n
1937         . ./myread
1938         case "$ans" in
1939         [yY]*) ;;
1940         *) needman=false;;
1941         esac
1942 fi
1943 if $needman; then
1944         cat <<EOH
1945
1946 This installation shell script will examine your system and ask you questions
1947 to determine how the perl5 package should be installed. If you get
1948 stuck on a question, you may use a ! shell escape to start a subshell or
1949 execute a command.  Many of the questions will have default answers in square
1950 brackets; typing carriage return will give you the default.
1951
1952 On some of the questions which ask for file or directory names you are allowed
1953 to use the ~name construct to specify the login directory belonging to "name",
1954 even if you don't have a shell which knows about that.  Questions where this is
1955 allowed will be marked "(~name ok)".
1956
1957 EOH
1958         rp=''
1959         dflt='Type carriage return to continue'
1960         . ./myread
1961         cat <<'EOH'
1962
1963 The prompter used in this script allows you to use shell variables and
1964 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1965 in the default answer, as if the default line was a set of arguments given to a
1966 script shell.  This means you may also use $* to repeat the whole default line,
1967 so you do not have to re-type everything to add something to the default.
1968
1969 Everytime there is a substitution, you will have to confirm.  If there is an
1970 error (e.g. an unmatched backtick), the default answer will remain unchanged
1971 and you will be prompted again.
1972
1973 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1974 the questions and use the computed defaults (or the previous answers if there
1975 was already a config.sh file). Type 'Configure -h' for a list of options.
1976 You may also start interactively and then answer '& -d' at any prompt to turn
1977 on the non-interactive behaviour for the remainder of the execution.
1978
1979 EOH
1980         . ./myread
1981         cat <<EOH
1982
1983 Much effort has been expended to ensure that this shell script will run on any
1984 Unix system.  If despite that it blows up on yours, your best bet is to edit
1985 Configure and run it again.  If you can't run Configure for some reason,
1986 you'll have to generate a config.sh file by hand.  Whatever problems you
1987 have, let me (perlbug@perl.org) know how I blew it.
1988
1989 This installation script affects things in two ways:
1990
1991 1) it may do direct variable substitutions on some of the files included
1992    in this kit.
1993 2) it builds a config.h file for inclusion in C programs.  You may edit
1994    any of these files as the need arises after running this script.
1995
1996 If you make a mistake on a question, there is no easy way to back up to it
1997 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1998 files.  Configure will offer to let you do this before it runs the SH files.
1999
2000 EOH
2001         dflt='Type carriage return to continue'
2002         . ./myread
2003         case "$firsttime" in
2004         true) echo $user >>../.config/instruct;;
2005         esac
2006 fi
2007
2008 : find out where common programs are
2009 echo " "
2010 echo "Locating common programs..." >&4
2011 cat <<EOSC >loc
2012 $startsh
2013 case \$# in
2014 0) exit 1;;
2015 esac
2016 thing=\$1
2017 shift
2018 dflt=\$1
2019 shift
2020 for dir in \$*; do
2021         case "\$thing" in
2022         .)
2023         if test -d \$dir/\$thing; then
2024                 echo \$dir
2025                 exit 0
2026         fi
2027         ;;
2028         *)
2029         for thisthing in \$dir/\$thing; do
2030                 : just loop through to pick last item
2031         done
2032         if test -f \$thisthing; then
2033                 echo \$thisthing
2034                 exit 0
2035         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2036                 echo \$thisthing
2037                 exit 0
2038         elif test -f \$dir/\$thing.exe; then
2039                 if test -n "$DJGPP"; then
2040                         echo \$dir/\$thing.exe
2041                 else
2042                         : on Eunice apparently
2043                         echo \$dir/\$thing
2044                 fi
2045                 exit 0
2046         fi
2047         ;;
2048         esac
2049 done
2050 echo \$dflt
2051 exit 1
2052 EOSC
2053 chmod +x loc
2054 $eunicefix loc
2055 loclist="
2056 awk
2057 cat
2058 chmod
2059 comm
2060 cp
2061 echo
2062 expr
2063 grep
2064 ls
2065 mkdir
2066 rm
2067 sed
2068 sort
2069 touch
2070 tr
2071 uniq
2072 "
2073 trylist="
2074 Mcc
2075 ar
2076 bison
2077 byacc
2078 cpp
2079 csh
2080 date
2081 egrep
2082 gmake
2083 gzip
2084 less
2085 ln
2086 make
2087 more
2088 nm
2089 nroff
2090 pg
2091 test
2092 uname
2093 zip
2094 "
2095 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2096 pth="$pth /lib /usr/lib"
2097 for file in $loclist; do
2098         eval xxx=\$$file
2099         case "$xxx" in
2100         /*|?:[\\/]*)
2101                 if test -f "$xxx"; then
2102                         : ok
2103                 else
2104                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2105                         xxx=`./loc $file $file $pth`
2106                 fi
2107                 ;;
2108         '') xxx=`./loc $file $file $pth`;;
2109         *) xxx=`./loc $xxx $xxx $pth`;;
2110         esac
2111         eval $file=$xxx$_exe
2112         eval _$file=$xxx
2113         case "$xxx" in
2114         /*)
2115                 echo $file is in $xxx.
2116                 ;;
2117         ?:[\\/]*)
2118                 echo $file is in $xxx.
2119                 ;;
2120         *)
2121                 echo "I don't know where '$file' is, and my life depends on it." >&4
2122                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2123                 exit 1
2124                 ;;
2125         esac
2126 done
2127 echo " "
2128 echo "Don't worry if any of the following aren't found..."
2129 say=offhand
2130 for file in $trylist; do
2131         eval xxx=\$$file
2132         case "$xxx" in
2133         /*|?:[\\/]*)
2134                 if test -f "$xxx"; then
2135                         : ok
2136                 else
2137                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2138                         xxx=`./loc $file $file $pth`
2139                 fi
2140                 ;;
2141         '') xxx=`./loc $file $file $pth`;;
2142         *) xxx=`./loc $xxx $xxx $pth`;;
2143         esac
2144         eval $file=$xxx
2145         eval _$file=$xxx
2146         case "$xxx" in
2147         /*)
2148                 echo $file is in $xxx.
2149                 ;;
2150         ?:[\\/]*)
2151                 echo $file is in $xxx.
2152                 ;;
2153         *)
2154                 echo "I don't see $file out there, $say."
2155                 say=either
2156                 ;;
2157         esac
2158 done
2159 case "$egrep" in
2160 egrep)
2161         echo "Substituting grep for egrep."
2162         egrep=$grep
2163         _egrep=$grep
2164         ;;
2165 esac
2166 case "$ln" in
2167 ln)
2168         echo "Substituting cp for ln."
2169         ln=$cp
2170         _ln=$cp
2171         ;;
2172 esac
2173 case "$make" in
2174 make)   
2175         case "$gmake" in
2176         gmake)
2177         echo "I can't find make or gmake, and my life depends on it." >&4
2178         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2179         exit 1
2180         ;;
2181         esac
2182         ;;
2183 esac    
2184 case "$gmake" in
2185 gmake)  ;;
2186 *)      # We can't have osname yet.
2187         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2188                 # Assume that gmake, if found, is definitely GNU make
2189                 # and prefer it over the system make.
2190                 echo "Substituting gmake for make."
2191                 make=$gmake
2192                 _make=$gmake
2193         fi
2194         ;;
2195 esac
2196 case "$test" in
2197 test)
2198         echo "Hopefully test is built into your sh."
2199         ;;
2200 *)
2201         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2202                 echo "Using the test built into your sh."
2203                 test=test
2204                 _test=test
2205         fi
2206         ;;
2207 esac
2208 case "$echo" in
2209 echo)
2210         echo "Hopefully echo is built into your sh."
2211         ;;
2212 '') ;;
2213 *)
2214         echo " "
2215 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2216         $echo $n "hi there$c" >foo1
2217         echo $n "hi there$c" >foo2
2218         if cmp foo1 foo2 >/dev/null 2>&1; then
2219                 echo "They are compatible.  In fact, they may be identical."
2220         else
2221                 case "$n" in
2222                 '-n') n='' c='\c';;
2223                 *) n='-n' c='';;
2224                 esac
2225                 cat <<FOO
2226 They are not compatible!  You are probably running ksh on a non-USG system.
2227 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2228 have echo built in and we may have to run some Bourne shell scripts.  That
2229 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2230
2231 FOO
2232                 $echo $n "The star should be here-->$c"
2233                 $echo "*"
2234         fi
2235         $rm -f foo1 foo2
2236         ;;
2237 esac
2238
2239 cat <<EOS >checkcc
2240 $startsh
2241 EOS
2242 cat <<'EOSC' >>checkcc
2243 case "$cc" in
2244 '') ;;
2245 *)  $rm -f try try.*
2246     $cat >try.c <<EOM
2247 int main(int argc, char *argv[]) {
2248   return 0;
2249 }
2250 EOM
2251     if $cc -o try $ccflags $ldflags try.c; then
2252        :
2253     else
2254         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2255         despair=yes
2256         trygcc=yes
2257         case "$cc" in
2258         *gcc*) trygcc=no ;;
2259         esac
2260         case "`$cc -v -c try.c 2>&1`" in
2261         *gcc*) trygcc=no ;;
2262         esac
2263         if $test X"$trygcc" = Xyes; then
2264             if gcc -o try -c try.c; then
2265                 echo " "
2266                 echo "You seem to have a working gcc, though." >&4
2267                 rp="Would you like to use it?"
2268                 dflt=y
2269                 if $test -f myread; then
2270                     . ./myread
2271                 else
2272                     if $test -f UU/myread; then
2273                         . ./UU/myread
2274                     else
2275                         echo "Cannot find myread, sorry.  Aborting." >&2
2276                         exit 1
2277                     fi
2278                 fi  
2279                 case "$ans" in
2280                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2281                 esac
2282             fi
2283         fi
2284         if $test X"$despair" = Xyes; then
2285             $cat >&4 <<EOM
2286 You need to find a working C compiler.
2287 Either (purchase and) install the C compiler supplied by your OS vendor,
2288 or for a free C compiler try http://gcc.gnu.org/
2289 I cannot continue any further, aborting.
2290 EOM
2291             exit 1
2292         fi
2293     fi
2294     $rm -f try try.*
2295     ;;
2296 esac
2297 EOSC
2298
2299 : determine whether symbolic links are supported
2300 echo " "
2301 $touch blurfl
2302 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2303         echo "Symbolic links are supported." >&4
2304         lns="$ln -s"
2305 else
2306         echo "Symbolic links are NOT supported." >&4
2307         lns="$ln"
2308 fi
2309 $rm -f blurfl sym
2310
2311 : determine whether symbolic links are supported
2312 echo " "
2313 case "$lns" in
2314 *"ln -s")
2315         echo "Checking how to test for symbolic links..." >&4
2316         $lns blurfl sym
2317         if $test "X$issymlink" = X; then
2318                 case "$newsh" in
2319                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2320                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2321                 esac
2322                 if test $? = 0; then
2323                         issymlink="test -h"
2324                 else
2325                         echo "Your builtin 'test -h' may be broken." >&4
2326                         case "$test" in
2327                         /*)     ;;
2328                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2329                                 for p in $pth
2330                                 do
2331                                         if test -f "$p/$test"; then
2332                                                 test="$p/$test"
2333                                                 break
2334                                         fi
2335                                 done
2336                                 ;;
2337                         esac
2338                         case "$test" in
2339                         /*)
2340                                 echo "Trying external '$test -h'." >&4
2341                                 issymlink="$test -h"
2342                                 if $test ! -h sym >/dev/null 2>&1; then
2343                                         echo "External '$test -h' is broken, too." >&4
2344                                         issymlink=''
2345                                 fi
2346                                 ;;
2347                         *)      issymlink='' ;;
2348                         esac
2349                 fi              
2350         fi
2351         if $test "X$issymlink" = X; then
2352                 if $test -L sym 2>/dev/null; then
2353                         issymlink="$test -L"
2354                         echo "The builtin '$test -L' worked." >&4
2355                 fi
2356         fi
2357         if $test "X$issymlink" != X; then
2358                 echo "You can test for symbolic links with '$issymlink'." >&4
2359         else
2360                 echo "I do not know how you can test for symbolic links." >&4
2361         fi
2362         $rm -f blurfl sym
2363         ;;
2364 *)      echo "No symbolic links, so not testing for their testing..." >&4
2365         ;;
2366 esac
2367 echo " "
2368
2369
2370 case "$mksymlinks" in
2371 $define|true|[yY]*)
2372         case "$src" in
2373         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2374                 exit 1
2375                 ;;
2376         *)      case "$lns:$issymlink" in
2377                 *"ln -s:"*"test -"?)
2378                         echo "Creating the symbolic links..." >&4
2379                         echo "(First creating the subdirectories...)" >&4
2380                         cd ..
2381                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2382                                 read directory
2383                                 test -z "$directory" && break
2384                                 mkdir -p $directory
2385                         done
2386                         # Sanity check 1.
2387                         if test ! -d t/base; then
2388                                 echo "Failed to create the subdirectories.  Aborting." >&4
2389                                 exit 1
2390                         fi
2391                         echo "(Then creating the symlinks...)" >&4
2392                         awk '{print $1}' $src/MANIFEST | while true; do
2393                                 read filename
2394                                 test -z "$filename" && break
2395                                 if test -f $filename; then
2396                                         if $issymlink $filename; then
2397                                                 rm -f $filename
2398                                         fi
2399                                 fi
2400                                 if test -f $filename; then
2401                                         echo "$filename already exists, not symlinking."
2402                                 else
2403                                         ln -s $src/$filename $filename
2404                                 fi
2405                         done
2406                         # Sanity check 2.
2407                         if test ! -f t/base/lex.t; then
2408                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2409                                 exit 1
2410                         fi
2411                         cd UU
2412                         ;;
2413                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2414                         ;;
2415                 esac
2416                 ;;
2417         esac
2418         ;;
2419 esac
2420
2421
2422 case "$usecrosscompile" in
2423 $define|true|[yY]*)
2424         $echo "Cross-compiling..."
2425         croak=''
2426         case "$cc" in
2427         *-*-gcc) # A cross-compiling gcc, probably.
2428             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2429             ar=$targetarch-ar
2430             # leave out ld, choosing it is more complex
2431             nm=$targetarch-nm
2432             ranlib=$targetarch-ranlib
2433             $echo 'extern int foo;' > try.c
2434             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2435             shift
2436             if $test $# -gt 0; then
2437                 incpth="$incpth $*"
2438                 incpth="`$echo $incpth|$sed 's/^ //'`"
2439                 echo "Guessing incpth '$incpth'." >&4
2440                 for i in $*; do
2441                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2442                     if $test -d $j; then
2443                         libpth="$libpth $j"
2444                     fi
2445                 done   
2446                 libpth="`$echo $libpth|$sed 's/^ //'`"
2447                 echo "Guessing libpth '$libpth'." >&4
2448             fi
2449             $rm -f try.c
2450             ;;
2451         esac
2452         case "$targetarch" in
2453         '') echo "Targetarch not defined." >&4; croak=y ;;
2454         *)  echo "Using targetarch $targetarch." >&4 ;;
2455         esac
2456         case "$incpth" in
2457         '') echo "Incpth not defined." >&4; croak=y ;;
2458         *)  echo "Using incpth '$incpth'." >&4 ;;
2459         esac
2460         case "$libpth" in
2461         '') echo "Libpth not defined." >&4; croak=y ;;
2462         *)  echo "Using libpth '$libpth'." >&4 ;;
2463         esac
2464         case "$usrinc" in
2465         '') for i in $incpth; do
2466                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2467                     usrinc=$i
2468                     echo "Guessing usrinc $usrinc." >&4
2469                     break
2470                 fi
2471             done
2472             case "$usrinc" in
2473             '') echo "Usrinc not defined." >&4; croak=y ;;
2474             esac
2475             ;;
2476         *)  echo "Using usrinc $usrinc." >&4 ;;
2477         esac
2478         case "$targethost" in
2479         '') echo "Targethost not defined." >&4; croak=y ;;
2480         *)  echo "Using targethost $targethost." >&4
2481         esac
2482         locincpth=' '
2483         loclibpth=' '
2484         case "$croak" in
2485         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2486         esac
2487         case "$src" in
2488         /*) run=$src/Cross/run
2489             targetmkdir=$src/Cross/mkdir
2490             to=$src/Cross/to
2491             from=$src/Cross/from
2492             ;;
2493         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2494             run=$pwd/Cross/run
2495             targetmkdir=$pwd/Cross/mkdir
2496             to=$pwd/Cross/to
2497             from=$pwd/Cross/from
2498             ;;
2499         esac
2500         case "$targetrun" in
2501         '') targetrun=ssh ;;
2502         esac
2503         case "$targetto" in
2504         '') targetto=scp ;;
2505         esac
2506         case "$targetfrom" in
2507         '') targetfrom=scp ;;
2508         esac
2509         run=$run-$targetrun
2510         to=$to-$targetto
2511         from=$from-$targetfrom
2512         case "$targetdir" in
2513         '')  targetdir=/tmp
2514              echo "Guessing targetdir $targetdir." >&4
2515              ;;
2516         esac
2517         case "$targetuser" in
2518         '')  targetuser=root
2519              echo "Guessing targetuser $targetuser." >&4
2520              ;;
2521         esac
2522         case "$targetfrom" in
2523         scp)    q=-q ;;
2524         *)      q='' ;;
2525         esac
2526         case "$targetrun" in
2527         ssh|rsh)
2528             cat >$run <<EOF
2529 #!/bin/sh
2530 case "\$1" in
2531 -cwd)
2532   shift
2533   cwd=\$1
2534   shift
2535   ;;
2536 esac
2537 case "\$cwd" in
2538 '') cwd=$targetdir ;;
2539 esac
2540 exe=\$1
2541 shift
2542 if $test ! -f \$exe.xok; then
2543   $to \$exe
2544   $touch \$exe.xok
2545 fi
2546 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2547 EOF
2548             ;;
2549         *)  echo "Unknown targetrun '$targetrun'" >&4
2550             exit 1
2551             ;;
2552         esac
2553         case "$targetmkdir" in
2554         */Cross/mkdir)
2555             cat >$targetmkdir <<EOF
2556 #!/bin/sh
2557 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2558 EOF
2559             $chmod a+rx $targetmkdir
2560             ;;
2561         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2562             exit 1
2563             ;;
2564         esac
2565         case "$targetto" in
2566         scp|rcp)
2567             cat >$to <<EOF
2568 #!/bin/sh
2569 for f in \$@
2570 do
2571   case "\$f" in
2572   /*)
2573     $targetmkdir \`dirname \$f\`
2574     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2575     ;;
2576   *)
2577     $targetmkdir $targetdir/\`dirname \$f\`
2578     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2579     ;;
2580   esac
2581 done
2582 exit 0
2583 EOF
2584             ;;
2585         cp) cat >$to <<EOF
2586 #!/bin/sh
2587 for f in \$@
2588 do
2589   case "\$f" in
2590   /*)
2591     $mkdir -p $targetdir/\`dirname \$f\`
2592     $cp \$f $targetdir/\$f || exit 1
2593     ;;
2594   *)
2595     $targetmkdir $targetdir/\`dirname \$f\`
2596     $cp \$f $targetdir/\$f || exit 1
2597     ;;
2598   esac
2599 done
2600 exit 0
2601 EOF
2602             ;;
2603         *)  echo "Unknown targetto '$targetto'" >&4
2604             exit 1
2605             ;;
2606         esac
2607         case "$targetfrom" in
2608         scp|rcp)
2609           cat >$from <<EOF
2610 #!/bin/sh
2611 for f in \$@
2612 do
2613   $rm -f \$f
2614   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2615 done
2616 exit 0
2617 EOF
2618             ;;
2619         cp) cat >$from <<EOF
2620 #!/bin/sh
2621 for f in \$@
2622 do
2623   $rm -f \$f
2624   cp $targetdir/\$f . || exit 1
2625 done
2626 exit 0
2627 EOF
2628             ;;
2629         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2630             exit 1
2631             ;;
2632         esac
2633         if $test ! -f $run; then
2634             echo "Target 'run' script '$run' not found." >&4
2635         else
2636             $chmod a+rx $run
2637         fi
2638         if $test ! -f $to; then
2639             echo "Target 'to' script '$to' not found." >&4
2640         else
2641             $chmod a+rx $to
2642         fi
2643         if $test ! -f $from; then
2644             echo "Target 'from' script '$from' not found." >&4
2645         else
2646             $chmod a+rx $from
2647         fi
2648         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2649             exit 1
2650         fi
2651         cat >&4 <<EOF
2652 Using '$run' for remote execution,
2653 and '$from' and '$to'
2654 for remote file transfer.
2655 EOF
2656         ;;
2657 *)      run=''
2658         to=:
2659         from=:
2660         usecrosscompile='undef'
2661         targetarch=''
2662         ;;
2663 esac
2664
2665 : see whether [:lower:] and [:upper:] are supported character classes
2666 echo " "
2667 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2668 ABYZ)
2669         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2670         up='[:upper:]'
2671         low='[:lower:]'
2672         ;;
2673 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2674         # (0xc9 and 0xd1), therefore that is a nice testing point.
2675         if test "X$up" = X -o "X$low" = X; then
2676             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2677             ij) up='[A-Z]'
2678                 low='[a-z]'
2679                 ;;
2680             esac
2681         fi
2682         if test "X$up" = X -o "X$low" = X; then
2683             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2684             ij) up='A-Z'
2685                 low='a-z'
2686                 ;;
2687             esac
2688         fi
2689         if test "X$up" = X -o "X$low" = X; then
2690             case "`echo IJ | od -x 2>/dev/null`" in
2691             *C9D1*|*c9d1*)
2692                 echo "Hey, this might be EBCDIC." >&4
2693                 if test "X$up" = X -o "X$low" = X; then
2694                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2695                     ij) up='[A-IJ-RS-Z]'
2696                         low='[a-ij-rs-z]'
2697                         ;;
2698                     esac
2699                 fi
2700                 if test "X$up" = X -o "X$low" = X; then
2701                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2702                     ij) up='A-IJ-RS-Z'
2703                         low='a-ij-rs-z'
2704                         ;;
2705                     esac
2706                 fi
2707                 ;;
2708             esac
2709         fi
2710 esac
2711 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2712 ij)
2713     echo "Using $up and $low to convert case." >&4
2714     ;;
2715 *)
2716     echo "I don't know how to translate letters from upper to lower case." >&4
2717     echo "Your tr is not acting any way I know of." >&4
2718     exit 1
2719     ;;
2720 esac
2721 : set up the translation script tr, must be called with ./tr of course
2722 cat >tr <<EOSC
2723 $startsh
2724 case "\$1\$2" in
2725 '[A-Z][a-z]') exec $tr '$up' '$low';;
2726 '[a-z][A-Z]') exec $tr '$low' '$up';;
2727 esac
2728 exec $tr "\$@"
2729 EOSC
2730 chmod +x tr
2731 $eunicefix tr
2732
2733 : Try to determine whether config.sh was made on this system
2734 case "$config_sh" in
2735 '')
2736 myuname=`$uname -a 2>/dev/null`
2737 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2738 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2739 # because the A-Z/a-z are not consecutive.
2740 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2741         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2742 newmyuname="$myuname"
2743 dflt=n
2744 case "$knowitall" in
2745 '')
2746         if test -f ../config.sh; then
2747                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2748                         eval "`grep myuname= ../config.sh`"
2749                 fi
2750                 if test "X$myuname" = "X$newmyuname"; then
2751                         dflt=y
2752                 fi
2753         fi
2754         ;;
2755 *) dflt=y;;
2756 esac
2757
2758 : Get old answers from old config file if Configure was run on the
2759 : same system, otherwise use the hints.
2760 hint=default
2761 cd ..
2762 if test -f config.sh; then
2763         echo " "
2764         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2765         . UU/myread
2766         case "$ans" in
2767         n*|N*) echo "OK, I'll ignore it."
2768                 mv config.sh config.sh.old
2769                 myuname="$newmyuname"
2770                 ;;
2771         *)  echo "Fetching default answers from your old config.sh file..." >&4
2772                 tmp_n="$n"
2773                 tmp_c="$c"
2774                 tmp_sh="$sh"
2775                 . ./config.sh
2776                 cp config.sh UU
2777                 n="$tmp_n"
2778                 c="$tmp_c"
2779                 : Older versions did not always set $sh.  Catch re-use of such
2780                 : an old config.sh.
2781                 case "$sh" in
2782                 '') sh="$tmp_sh" ;;
2783                 esac
2784                 hint=previous
2785                 ;;
2786         esac
2787 fi
2788 . ./UU/checkcc
2789 if test ! -f config.sh; then
2790         $cat <<EOM
2791
2792 First time through, eh?  I have some defaults handy for some systems
2793 that need some extra help getting the Configure answers right:
2794
2795 EOM
2796         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2797         dflt=''
2798         : Half the following guesses are probably wrong... If you have better
2799         : tests or hints, please send them to perlbug@perl.org
2800         : The metaconfig authors would also appreciate a copy...
2801         $test -f /irix && osname=irix
2802         $test -f /xenix && osname=sco_xenix
2803         $test -f /dynix && osname=dynix
2804         $test -f /dnix && osname=dnix
2805         $test -f /lynx.os && osname=lynxos
2806         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2807         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2808         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2809         $test -f /bin/mips && /bin/mips && osname=mips
2810         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2811                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2812         $test -d /usr/apollo/bin && osname=apollo
2813         $test -f /etc/saf/_sactab && osname=svr4
2814         $test -d /usr/include/minix && osname=minix
2815         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2816         if $test -d /MachTen -o -d /MachTen_Folder; then
2817                 osname=machten
2818                 if $test -x /sbin/version; then
2819                         osvers=`/sbin/version | $awk '{print $2}' |
2820                         $sed -e 's/[A-Za-z]$//'`
2821                 elif $test -x /usr/etc/version; then
2822                         osvers=`/usr/etc/version | $awk '{print $2}' |
2823                         $sed -e 's/[A-Za-z]$//'`
2824                 else
2825                         osvers="$2.$3"
2826                 fi
2827         fi
2828
2829         $test -f /sys/posix.dll &&
2830                 $test -f /usr/bin/what &&
2831                 set X `/usr/bin/what /sys/posix.dll` &&
2832                 $test "$3" = UWIN &&
2833                 osname=uwin &&
2834                 osvers="$5"
2835
2836         if $test -f $uname; then
2837                 set X $myuname
2838                 shift
2839
2840                 case "$5" in
2841                 fps*) osname=fps ;;
2842                 mips*)
2843                         case "$4" in
2844                         umips) osname=umips ;;
2845                         *) osname=mips ;;
2846                         esac;;
2847                 [23]100) osname=mips ;;
2848                 next*) osname=next ;;
2849                 i386*)
2850                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2851                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2852                                 osname='sco'
2853                                 osvers=$tmp
2854                         elif $test -f /etc/kconfig; then
2855                                 osname=isc
2856                                 if test "$lns" = "$ln -s"; then
2857                                         osvers=4
2858                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2859                                         osvers=3
2860                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2861                                         osvers=2
2862                                 fi
2863                         fi
2864                         tmp=''
2865                         ;;
2866                 pc*)
2867                         if test -n "$DJGPP"; then
2868                                 osname=dos
2869                                 osvers=djgpp
2870                         fi
2871                         ;;
2872                 esac
2873
2874                 case "$1" in
2875                 aix) osname=aix
2876                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2877                         case "$tmp" in
2878                         'not found') osvers="$4"."$3" ;;
2879                         '<3240'|'<>3240') osvers=3.2.0 ;;
2880                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2881                         '=3250'|'>3250') osvers=3.2.5 ;;
2882                         *) osvers=$tmp;;
2883                         esac
2884                         ;;
2885                 bsd386) osname=bsd386
2886                         osvers=`$uname -r`
2887                         ;;
2888                 cygwin*) osname=cygwin
2889                         osvers="$3"
2890                         ;;
2891                 *dc.osx) osname=dcosx
2892                         osvers="$3"
2893                         ;;
2894                 dnix) osname=dnix
2895                         osvers="$3"
2896                         ;;
2897                 domainos) osname=apollo
2898                         osvers="$3"
2899                         ;;
2900                 dgux) osname=dgux 
2901                         osvers="$3"
2902                         ;;
2903                 dynixptx*) osname=dynixptx
2904                         osvers=`echo "$4"|sed 's/^v//'`
2905                         ;;
2906                 freebsd) osname=freebsd 
2907                         osvers="$3" ;;
2908                 genix) osname=genix ;;
2909                 hp*) osname=hpux 
2910                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2911                         ;;
2912                 irix*) osname=irix
2913                         case "$3" in
2914                         4*) osvers=4 ;;
2915                         5*) osvers=5 ;;
2916                         *)      osvers="$3" ;;
2917                         esac
2918                         ;;
2919                 linux) osname=linux
2920                         case "$3" in
2921                         *)      osvers="$3" ;;
2922                         esac
2923                         ;;
2924                 MiNT) osname=mint
2925                         ;;
2926                 netbsd*) osname=netbsd
2927                         osvers="$3"
2928                         ;;
2929                 news-os) osvers="$3"
2930                         case "$3" in
2931                         4*) osname=newsos4 ;;
2932                         *) osname=newsos ;;
2933                         esac
2934                         ;;
2935                 next*) osname=next ;;
2936                 nonstop-ux) osname=nonstopux ;;
2937                 POSIX-BC | posix-bc ) osname=posix-bc
2938                         osvers="$3"
2939                         ;;
2940                 powerux | power_ux | powermax_os | powermaxos | \
2941                 powerunix | power_unix) osname=powerux
2942                         osvers="$3"
2943                         ;;
2944                 qnx) osname=qnx
2945                         osvers="$4"
2946                         ;;
2947                 solaris) osname=solaris
2948                         case "$3" in
2949                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2950                         *)      osvers="$3" ;;
2951                         esac
2952                         ;;
2953                 sunos) osname=sunos
2954                         case "$3" in
2955                         5*) osname=solaris
2956                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2957                         *)      osvers="$3" ;;
2958                         esac
2959                         ;;
2960                 titanos) osname=titanos
2961                         case "$3" in
2962                         1*) osvers=1 ;;
2963                         2*) osvers=2 ;;
2964                         3*) osvers=3 ;;
2965                         4*) osvers=4 ;;
2966                         *)      osvers="$3" ;;
2967                         esac
2968                         ;;
2969                 ultrix) osname=ultrix
2970                         osvers="$3"
2971                         ;;
2972                 osf1|mls+)      case "$5" in
2973                                 alpha)
2974                                         osname=dec_osf
2975                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2976                                         case "$osvers" in
2977                                         [1-9].[0-9]*) ;;
2978                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2979                                         esac
2980                                         ;;
2981                         hp*)    osname=hp_osf1  ;;
2982                         mips)   osname=mips_osf1 ;;
2983                         esac
2984                         ;;
2985                 unixware) osname=svr5
2986                         osvers="$4"
2987                         ;;
2988                 uts)    osname=uts
2989                         osvers="$3"
2990                         ;;
2991                 vos) osvers="$3"
2992                         ;;
2993                 $2) case "$osname" in
2994                         *isc*) ;;
2995                         *freebsd*) ;;
2996                         svr*)
2997                                 : svr4.x or possibly later
2998                                 case "svr$3" in 
2999                                 ${osname}*)
3000                                         osname=svr$3
3001                                         osvers=$4
3002                                         ;;
3003                                 esac
3004                                 case "$osname" in
3005                                 svr4.0)
3006                                         : Check for ESIX
3007                                         if test -f /stand/boot ; then
3008                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3009                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3010                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3011                                                         if test -n "$isesix"; then
3012                                                                 osname=esix4
3013                                                         fi
3014                                                 fi
3015                                         fi
3016                                         ;;
3017                                 esac
3018                                 ;;
3019                         *)      if test -f /etc/systemid; then
3020                                         osname=sco
3021                                         set `echo $3 | $sed 's/\./ /g'` $4
3022                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3023                                                 osvers=$1.$2.$3
3024                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3025                                                 osvers=$1.$2
3026                                         elif $test -f $src/hints/sco_$1.sh; then
3027                                                 osvers=$1
3028                                         fi
3029                                 else
3030                                         case "$osname" in
3031                                         '') : Still unknown.  Probably a generic Sys V.
3032                                                 osname="sysv"
3033                                                 osvers="$3"
3034                                                 ;;
3035                                         esac
3036                                 fi
3037                                 ;;
3038                         esac
3039                         ;;
3040                 *)      case "$osname" in
3041                         '') : Still unknown.  Probably a generic BSD.
3042                                 osname="$1"
3043                                 osvers="$3"
3044                                 ;;
3045                         esac
3046                         ;;
3047                 esac
3048         else
3049                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3050                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3051                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3052                                 osname=news_os
3053                         fi
3054                         $rm -f UU/kernel.what
3055                 elif test -d c:/.; then
3056                         set X $myuname
3057                         osname=os2
3058                         osvers="$5"
3059                 fi
3060         fi
3061         
3062         case "$targetarch" in
3063         '') ;;
3064         *)  hostarch=$osname
3065             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3066             osvers=''
3067             ;;
3068         esac
3069
3070         : Now look for a hint file osname_osvers, unless one has been
3071         : specified already.
3072         case "$hintfile" in
3073         ''|' ')
3074                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3075                 : Also try without trailing minor version numbers.
3076                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3077                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3078                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3079                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3080                 case "$file" in
3081                 '') dflt=none ;;
3082                 *)  case "$osvers" in
3083                         '') dflt=$file
3084                                 ;;
3085                         *)  if $test -f $src/hints/$file.sh ; then
3086                                         dflt=$file
3087                                 elif $test -f $src/hints/$xfile.sh ; then
3088                                         dflt=$xfile
3089                                 elif $test -f $src/hints/$xxfile.sh ; then
3090                                         dflt=$xxfile
3091                                 elif $test -f $src/hints/$xxxfile.sh ; then
3092                                         dflt=$xxxfile
3093                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3094                                         dflt=$xxxxfile
3095                                 elif $test -f "$src/hints/${osname}.sh" ; then
3096                                         dflt="${osname}"
3097                                 else
3098                                         dflt=none
3099                                 fi
3100                                 ;;
3101                         esac
3102                         ;;
3103                 esac
3104                 if $test -f Policy.sh ; then
3105                         case "$dflt" in
3106                         *Policy*) ;;
3107                         none) dflt="Policy" ;;
3108                         *) dflt="Policy $dflt" ;;
3109                         esac
3110                 fi
3111                 ;;
3112         *)
3113                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3114                 ;;
3115         esac
3116
3117         if $test -f Policy.sh ; then
3118                 $cat <<EOM
3119
3120 There's also a Policy hint file available, which should make the
3121 site-specific (policy) questions easier to answer.
3122 EOM
3123
3124         fi
3125
3126         $cat <<EOM
3127
3128 You may give one or more space-separated answers, or "none" if appropriate.
3129 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3130 is a good thing.  DO NOT give a wrong version or a wrong OS.
3131
3132 EOM
3133
3134         rp="Which of these apply, if any?"
3135         . UU/myread
3136         tans=$ans
3137         for file in $tans; do
3138                 if $test X$file = XPolicy -a -f Policy.sh; then
3139                         . Policy.sh
3140                         $cat Policy.sh >> UU/config.sh
3141                 elif $test -f $src/hints/$file.sh; then
3142                         . $src/hints/$file.sh
3143                         $cat $src/hints/$file.sh >> UU/config.sh
3144                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3145                         : nothing
3146                 else
3147                         : Give one chance to correct a possible typo.
3148                         echo "$file.sh does not exist"
3149                         dflt=$file
3150                         rp="hint to use instead?"
3151                         . UU/myread
3152                         for file in $ans; do
3153                                 if $test -f "$src/hints/$file.sh"; then
3154                                         . $src/hints/$file.sh
3155                                         $cat $src/hints/$file.sh >> UU/config.sh
3156                                 elif $test X$ans = X -o X$ans = Xnone ; then
3157                                         : nothing
3158                                 else
3159                                         echo "$file.sh does not exist -- ignored."
3160                                 fi
3161                         done
3162                 fi
3163         done
3164
3165         hint=recommended
3166         : Remember our hint file for later.
3167         if $test -f "$src/hints/$file.sh" ; then
3168                 hintfile="$file"
3169         else
3170                 hintfile=''
3171         fi
3172 fi
3173 cd UU
3174 ;;
3175 *)
3176         echo " "
3177         echo "Fetching default answers from $config_sh..." >&4
3178         tmp_n="$n"
3179         tmp_c="$c"
3180         cd ..
3181         cp $config_sh config.sh 2>/dev/null
3182         chmod +w config.sh
3183         . ./config.sh
3184         cd UU
3185         cp ../config.sh .
3186         n="$tmp_n"
3187         c="$tmp_c"
3188         hint=previous
3189         ;;
3190 esac
3191 test "$override" && . ./optdef.sh
3192
3193 : Restore computed paths
3194 for file in $loclist $trylist; do
3195         eval $file="\$_$file"
3196 done
3197
3198 cat << EOM
3199
3200 Configure uses the operating system name and version to set some defaults.
3201 The default value is probably right if the name rings a bell. Otherwise,
3202 since spelling matters for me, either accept the default or answer "none"
3203 to leave it blank.
3204
3205 EOM
3206 case "$osname" in
3207         ''|' ')
3208                 case "$hintfile" in
3209                 ''|' '|none) dflt=none ;;
3210                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3211                 esac
3212                 ;;
3213         *) dflt="$osname" ;;
3214 esac
3215 rp="Operating system name?"
3216 . ./myread
3217 case "$ans" in
3218 none)  osname='' ;;
3219 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3220 esac
3221 echo " "
3222 case "$osvers" in
3223         ''|' ')
3224                 case "$hintfile" in
3225                 ''|' '|none) dflt=none ;;
3226                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3227                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3228                         case "$dflt" in
3229                         ''|' ') dflt=none ;;
3230                         esac
3231                         ;;
3232                 esac
3233                 ;;
3234         *) dflt="$osvers" ;;
3235 esac
3236 rp="Operating system version?"
3237 . ./myread
3238 case "$ans" in
3239 none)  osvers='' ;;
3240 *) osvers="$ans" ;;
3241 esac
3242
3243
3244 . ./posthint.sh
3245
3246 : who configured the system
3247 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3248 cf_by=`(logname) 2>/dev/null`
3249 case "$cf_by" in
3250 "")
3251         cf_by=`(whoami) 2>/dev/null`
3252         case "$cf_by" in
3253         "") cf_by=unknown ;;
3254         esac ;;
3255 esac
3256
3257 : set up the script used to warn in case of inconsistency
3258 cat <<EOS >whoa
3259 $startsh
3260 EOS
3261 cat <<'EOSC' >>whoa
3262 dflt=y
3263 echo " "
3264 echo "*** WHOA THERE!!! ***" >&4
3265 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3266 rp="    Keep the $hint value?"
3267 . ./myread
3268 case "$ans" in
3269 y) td=$was; tu=$was;;
3270 esac
3271 EOSC
3272
3273 : function used to set $1 to $val
3274 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3275 case "$val$was" in
3276 $define$undef) . ./whoa; eval "$var=\$td";;
3277 $undef$define) . ./whoa; eval "$var=\$tu";;
3278 *) eval "$var=$val";;
3279 esac'
3280
3281 case "$usethreads" in
3282 $define|true|[yY]*)     dflt='y';;
3283 *) dflt='n';;
3284 esac
3285 cat <<EOM
3286
3287 Perl can be built to take advantage of threads on some systems.
3288 To do so, Configure can be run with -Dusethreads.
3289
3290 Note that threading is a highly experimental feature, and
3291 some known race conditions still remain.  If you choose to try
3292 it, be very sure to not actually deploy it for production
3293 purposes.  README.threads has more details, and is required
3294 reading if you enable threads.
3295
3296 If this doesn't make any sense to you, just accept the default '$dflt'.
3297 EOM
3298 rp='Build a threading Perl?'
3299 . ./myread
3300 case "$ans" in
3301 y|Y)    val="$define" ;;
3302 *)      val="$undef" ;;
3303 esac
3304 set usethreads
3305 eval $setvar
3306
3307 case "$usethreads" in
3308 $define)
3309         $cat <<EOM
3310
3311 As of 5.5.640, Perl has two different internal threading implementations,
3312 the 5.005 version (5005threads) and an interpreter-based version
3313 (ithreads) that has one interpreter per thread.  Both are very 
3314 experimental.  This arrangement exists to help developers work out
3315 which one is better.
3316
3317 If you're a casual user, you probably don't want interpreter-threads
3318 at this time.  But if you do, the 'threads' module allows their use,
3319 and the 'Thread' module offers an interface to both 5005threads and
3320 ithreads (whichever has been configured).
3321 EOM
3322         : Default to ithreads unless overridden on command line or with
3323         : old config.sh
3324         dflt='y'
3325         case "$use5005threads" in
3326                 $define|true|[yY]*) dflt='n';;
3327         esac
3328         case "$useithreads" in
3329                 $undef|false|[nN]*) dflt='n';;
3330         esac
3331         rp='Use interpreter-based ithreads?'
3332         . ./myread
3333         case "$ans" in
3334         y|Y)    val="$define" ;;
3335         *)      val="$undef" ;;
3336         esac
3337         set useithreads
3338         eval $setvar
3339         : Now set use5005threads to the opposite value.
3340         case "$useithreads" in
3341         $define) val="$undef" ;;
3342         *) val="$define" ;;
3343         esac
3344         set use5005threads
3345         eval $setvar
3346         ;;
3347 *)
3348         useithreads="$undef"
3349         use5005threads="$undef"
3350         ;;
3351 esac
3352
3353 case "$useithreads$use5005threads" in
3354 "$define$define")
3355         $cat >&4 <<EOM
3356
3357 You cannot have both the ithreads and the 5.005 threads enabled
3358 at the same time.  Disabling the 5.005 threads since they are
3359 much less stable than the ithreads.
3360
3361 EOM
3362         use5005threads="$undef"
3363         ;;
3364 esac
3365
3366 case "$d_oldpthreads" in
3367 '')     : Configure tests would be welcome here.  For now, assume undef.
3368         val="$undef" ;;
3369 *)      val="$d_oldpthreads" ;;
3370 esac
3371 set d_oldpthreads
3372 eval $setvar
3373
3374
3375 case "$usethreads" in
3376 "$define"|true|[yY]*)
3377 : Look for a hint-file generated 'call-back-unit'.  If the
3378 : user has specified that a threading perl is to be built,
3379 : we may need to set or change some other defaults.
3380         if $test -f usethreads.cbu; then
3381                 echo "Your platform has some specific hints for threaded builds, using them..."
3382                 . ./usethreads.cbu
3383         else
3384                 $cat <<EOM
3385 (Your platform doesn't have any specific hints for threaded builds.
3386  Assuming POSIX threads, then.)
3387 EOM
3388         fi
3389         ;;
3390 esac
3391
3392 cat <<EOM
3393
3394 Perl can be built so that multiple Perl interpreters can coexist
3395 within the same Perl executable.
3396 EOM
3397
3398 case "$useithreads" in
3399 $define)
3400         cat <<EOM
3401 This multiple interpreter support is required for interpreter-based threads.
3402 EOM
3403         val="$define"
3404         ;;
3405 *)      case "$usemultiplicity" in
3406         $define|true|[yY]*)     dflt='y';;
3407         *) dflt='n';;
3408         esac
3409         echo " "
3410         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3411         rp='Build Perl for multiplicity?'
3412         . ./myread
3413         case "$ans" in
3414         y|Y)    val="$define" ;;
3415         *)      val="$undef" ;;
3416         esac
3417         ;;
3418 esac
3419 set usemultiplicity
3420 eval $setvar
3421
3422
3423 case "$usemorebits" in
3424 "$define"|true|[yY]*)
3425         use64bitint="$define"
3426         uselongdouble="$define"
3427         usemorebits="$define"
3428         ;;
3429 *)      usemorebits="$undef"
3430         ;;
3431 esac
3432
3433 : make some quick guesses about what we are up against
3434 echo " "
3435 $echo $n "Hmm...  $c"
3436 echo exit 1 >bsd
3437 echo exit 1 >usg
3438 echo exit 1 >v7
3439 echo exit 1 >osf1
3440 echo exit 1 >eunice
3441 echo exit 1 >xenix
3442 echo exit 1 >venix
3443 echo exit 1 >os2
3444 d_bsd="$undef"
3445 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3446 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3447 then
3448         echo "Looks kind of like an OSF/1 system, but we'll see..."
3449         echo exit 0 >osf1
3450 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3451         xxx=`./loc addbib blurfl $pth`
3452         if $test -f $xxx; then
3453         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3454                 echo exit 0 >bsd
3455                 echo exit 0 >usg
3456         else
3457                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3458                         echo "Looks kind of like an extended USG system, but we'll see..."
3459                 else
3460                         echo "Looks kind of like a USG system, but we'll see..."
3461                 fi
3462                 echo exit 0 >usg
3463         fi
3464 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3465         echo "Looks kind of like a BSD system, but we'll see..."
3466         d_bsd="$define"
3467         echo exit 0 >bsd
3468 else
3469         echo "Looks kind of like a Version 7 system, but we'll see..."
3470         echo exit 0 >v7
3471 fi
3472 case "$eunicefix" in
3473 *unixtovms*)
3474         $cat <<'EOI'
3475 There is, however, a strange, musty smell in the air that reminds me of
3476 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3477 EOI
3478         echo exit 0 >eunice
3479         d_eunice="$define"
3480 : it so happens the Eunice I know will not run shell scripts in Unix format
3481         ;;
3482 *)
3483         echo " "
3484         echo "Congratulations.  You aren't running Eunice."
3485         d_eunice="$undef"
3486         ;;
3487 esac
3488 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3489 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3490 : semicolon as a patch separator
3491 case "$p_" in
3492 :) ;;
3493 *)
3494         $cat <<'EOI'
3495 I have the feeling something is not exactly right, however...don't tell me...
3496 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3497 (Or you may be running DOS with DJGPP.)
3498 EOI
3499         echo exit 0 >os2
3500         ;;
3501 esac
3502 if test -f /xenix; then
3503         echo "Actually, this looks more like a XENIX system..."
3504         echo exit 0 >xenix
3505         d_xenix="$define"
3506 else
3507         echo " "
3508         echo "It's not Xenix..."
3509         d_xenix="$undef"
3510 fi
3511 chmod +x xenix
3512 $eunicefix xenix
3513 if test -f /venix; then
3514         echo "Actually, this looks more like a VENIX system..."
3515         echo exit 0 >venix
3516 else
3517         echo " "
3518         if ./xenix; then
3519                 : null
3520         else
3521                 echo "Nor is it Venix..."
3522         fi
3523 fi
3524 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3525 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3526 $rm -f foo
3527
3528 case "$cc" in
3529 '') dflt=cc;;
3530 *) dflt="$cc";;
3531 esac
3532 rp="Use which C compiler?"
3533 . ./myread
3534 cc="$ans"
3535 : Look for a hint-file generated 'call-back-unit'.  Now that the
3536 : user has specified the compiler, we may need to set or change some
3537 : other defaults.
3538 if $test -f cc.cbu; then
3539     . ./cc.cbu
3540 fi
3541 . ./checkcc
3542
3543 echo " "
3544 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3545 $cat >try.c <<EOM
3546 #include <stdio.h>
3547 int main() {
3548 #ifdef __GNUC__
3549 #ifdef __VERSION__
3550         printf("%s\n", __VERSION__);
3551 #else
3552         printf("%s\n", "1");
3553 #endif
3554 #endif
3555         exit(0);
3556 }
3557 EOM
3558 if $cc -o try $ccflags $ldflags try.c; then
3559         gccversion=`$run ./try`
3560         case "$gccversion" in
3561         '') echo "You are not using GNU cc." ;;
3562         *)  echo "You are using GNU cc $gccversion."
3563             ccname=gcc  
3564             ;;
3565         esac
3566 else
3567         echo " "
3568         echo "*** WHOA THERE!!! ***" >&4
3569         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3570         case "$knowitall" in
3571         '')
3572         echo "    You'd better start hunting for one and let me know about it." >&4
3573                 exit 1
3574                 ;;
3575         esac
3576 fi
3577 $rm -f try try.*
3578 case "$gccversion" in
3579 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3580 esac
3581 case "$gccversion" in
3582 '') gccosandvers='' ;;
3583 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3584    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3585    gccshortvers=''
3586    case "$gccosandvers" in
3587    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3588    $osname$osvers) ;; # looking good
3589    $osname*) cat <<EOM >&4
3590
3591 *** WHOA THERE!!! ***
3592
3593     Your gcc has not been compiled for the exact release of
3594     your operating system ($gccosandvers versus $osname$osvers).
3595
3596     In general it is a good idea to keep gcc synchronized with
3597     the operating system because otherwise serious problems
3598     may ensue when trying to compile software, like Perl.
3599
3600     I'm trying to be optimistic here, though, and will continue.
3601     If later during the configuration and build icky compilation
3602     problems appear (headerfile conflicts being the most common
3603     manifestation), I suggest reinstalling the gcc to match
3604     your operating system release.
3605
3606 EOM
3607       ;;
3608    *) gccosandvers='' ;; # failed to parse, better be silent
3609    esac
3610    ;;
3611 esac
3612 case "$ccname" in
3613 '') ccname="$cc" ;;
3614 esac
3615
3616
3617 : decide how portable to be.  Allow command line overrides.
3618 case "$d_portable" in
3619 "$undef") ;;
3620 *)      d_portable="$define" ;;
3621 esac
3622
3623 : set up shell script to do ~ expansion
3624 cat >filexp <<EOSS
3625 $startsh
3626 : expand filename
3627 case "\$1" in
3628  ~/*|~)
3629         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3630         ;;
3631  ~*)
3632         if $test -f /bin/csh; then
3633                 /bin/csh -f -c "glob \$1"
3634                 failed=\$?
3635                 echo ""
3636                 exit \$failed
3637         else
3638                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3639                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3640                 if $test ! -d "\$dir"; then
3641                         me=\`basename \$0\`
3642                         echo "\$me: can't locate home directory for: \$name" >&2
3643                         exit 1
3644                 fi
3645                 case "\$1" in
3646                 */*)
3647                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3648                         ;;
3649                 *)
3650                         echo \$dir
3651                         ;;
3652                 esac
3653         fi
3654         ;;
3655 *)
3656         echo \$1
3657         ;;
3658 esac
3659 EOSS
3660 chmod +x filexp
3661 $eunicefix filexp
3662
3663 : now set up to get a file name
3664 cat <<EOS >getfile
3665 $startsh
3666 EOS
3667 cat <<'EOSC' >>getfile
3668 tilde=''
3669 fullpath=''
3670 already=''
3671 skip=''
3672 none_ok=''
3673 exp_file=''
3674 nopath_ok=''
3675 orig_rp="$rp"
3676 orig_dflt="$dflt"
3677 case "$gfpth" in
3678 '') gfpth='.' ;;
3679 esac
3680
3681 case "$fn" in
3682 *\(*)
3683         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3684         fn=`echo $fn | sed 's/(.*)//'`
3685         ;;
3686 esac
3687
3688 case "$fn" in
3689 *:*)
3690         loc_file=`expr $fn : '.*:\(.*\)'`
3691         fn=`expr $fn : '\(.*\):.*'`
3692         ;;
3693 esac
3694
3695 case "$fn" in
3696 *~*) tilde=true;;
3697 esac
3698 case "$fn" in
3699 */*) fullpath=true;;
3700 esac
3701 case "$fn" in
3702 *+*) skip=true;;
3703 esac
3704 case "$fn" in
3705 *n*) none_ok=true;;
3706 esac
3707 case "$fn" in
3708 *e*) exp_file=true;;
3709 esac
3710 case "$fn" in
3711 *p*) nopath_ok=true;;
3712 esac
3713
3714 case "$fn" in
3715 *f*) type='File';;
3716 *d*) type='Directory';;
3717 *l*) type='Locate';;
3718 esac
3719
3720 what="$type"
3721 case "$what" in
3722 Locate) what='File';;
3723 esac
3724
3725 case "$exp_file" in
3726 '')
3727         case "$d_portable" in
3728         "$define") ;;
3729         *) exp_file=true;;
3730         esac
3731         ;;
3732 esac
3733
3734 cd ..
3735 while test "$type"; do
3736         redo=''
3737         rp="$orig_rp"
3738         dflt="$orig_dflt"
3739         case "$tilde" in
3740         true) rp="$rp (~name ok)";;
3741         esac
3742         . UU/myread
3743         if test -f UU/getfile.ok && \
3744                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3745         then
3746                 value="$ans"
3747                 ansexp="$ans"
3748                 break
3749         fi
3750         case "$ans" in
3751         none)
3752                 value=''
3753                 ansexp=''
3754                 case "$none_ok" in
3755                 true) type='';;
3756                 esac
3757                 ;;
3758         *)
3759                 case "$tilde" in
3760                 '') value="$ans"
3761                         ansexp="$ans";;
3762                 *)
3763                         value=`UU/filexp $ans`
3764                         case $? in
3765                         0)
3766                                 if test "$ans" != "$value"; then
3767                                         echo "(That expands to $value on this system.)"
3768                                 fi
3769                                 ;;
3770                         *) value="$ans";;
3771                         esac
3772                         ansexp="$value"
3773                         case "$exp_file" in
3774                         '') value="$ans";;
3775                         esac
3776                         ;;
3777                 esac
3778                 case "$fullpath" in
3779                 true)
3780                         case "$ansexp" in
3781                         /*) value="$ansexp" ;;
3782                         [a-zA-Z]:/*) value="$ansexp" ;;
3783                         *)
3784                                 redo=true
3785                                 case "$already" in
3786                                 true)
3787                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3788                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3789                                         ;;
3790                                 *)
3791                                 echo "Please give a full path name, starting with slash." >&4
3792                                         case "$tilde" in
3793                                         true)
3794                                 echo "Note that using ~name is ok provided it expands well." >&4
3795                                                 already=true
3796                                                 ;;
3797                                         esac
3798                                 esac
3799                                 ;;
3800                         esac
3801                         ;;
3802                 esac
3803                 case "$redo" in
3804                 '')
3805                         case "$type" in
3806                         File)
3807                                 for fp in $gfpth; do
3808                                         if test "X$fp" = X.; then
3809                                             pf="$ansexp"
3810                                         else    
3811                                             pf="$fp/$ansexp"
3812                                         fi
3813                                         if test -f "$pf"; then
3814                                                 type=''
3815                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3816                                         then
3817                                                 echo "($value is not a plain file, but that's ok.)"
3818                                                 type=''
3819                                         fi
3820                                         if test X"$type" = X; then
3821                                             value="$pf"
3822                                             break
3823                                         fi
3824                                 done
3825                                 ;;
3826                         Directory)
3827                                 for fp in $gfpth; do
3828                                         if test "X$fp" = X.; then
3829                                             dir="$ans"
3830                                             direxp="$ansexp"
3831                                         else    
3832                                             dir="$fp/$ansexp"
3833                                             direxp="$fp/$ansexp"
3834                                         fi
3835                                         if test -d "$direxp"; then
3836                                                 type=''
3837                                                 value="$dir"
3838                                                 break
3839                                         fi
3840                                 done
3841                                 ;;
3842                         Locate)
3843                                 if test -d "$ansexp"; then
3844                                         echo "(Looking for $loc_file in directory $value.)"
3845                                         value="$value/$loc_file"
3846                                         ansexp="$ansexp/$loc_file"
3847                                 fi
3848                                 if test -f "$ansexp"; then
3849                                         type=''
3850                                 fi
3851                                 case "$nopath_ok" in
3852                                 true)   case "$value" in
3853                                         */*) ;;
3854                                         *)      echo "Assuming $value will be in people's path."
3855                                                 type=''
3856                                                 ;;
3857                                         esac
3858                                         ;;
3859                                 esac
3860                                 ;;
3861                         esac
3862
3863                         case "$skip" in
3864                         true) type='';
3865                         esac
3866
3867                         case "$type" in
3868                         '') ;;
3869                         *)
3870                                 if test "$fastread" = yes; then
3871                                         dflt=y
3872                                 else
3873                                         dflt=n
3874                                 fi
3875                                 rp="$what $value doesn't exist.  Use that name anyway?"
3876                                 . UU/myread
3877                                 dflt=''
3878                                 case "$ans" in
3879                                 y*) type='';;
3880                                 *) echo " ";;
3881                                 esac
3882                                 ;;
3883                         esac
3884                         ;;
3885                 esac
3886                 ;;
3887         esac
3888 done
3889 cd UU
3890 ans="$value"
3891 rp="$orig_rp"
3892 dflt="$orig_dflt"
3893 rm -f getfile.ok
3894 test "X$gfpthkeep" != Xy && gfpth=""
3895 EOSC
3896
3897 : What should the include directory be ?
3898 echo " "
3899 $echo $n "Hmm...  $c"
3900 dflt='/usr/include'
3901 incpath=''
3902 mips_type=''
3903 if $test -f /bin/mips && /bin/mips; then
3904         echo "Looks like a MIPS system..."
3905         $cat >usr.c <<'EOCP'
3906 #ifdef SYSTYPE_BSD43
3907 /bsd43
3908 #endif
3909 EOCP
3910         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3911                 dflt='/bsd43/usr/include'
3912                 incpath='/bsd43'
3913                 mips_type='BSD 4.3'
3914         else
3915                 mips_type='System V'
3916         fi
3917         $rm -f usr.c usr.out
3918         echo "and you're compiling with the $mips_type compiler and libraries."
3919         xxx_prompt=y
3920         echo "exit 0" >mips
3921 else
3922         echo "Doesn't look like a MIPS system."
3923         xxx_prompt=n
3924         echo "exit 1" >mips
3925 fi
3926 chmod +x mips
3927 $eunicefix mips
3928 case "$usrinc" in
3929 '') ;;
3930 *) dflt="$usrinc";;
3931 esac
3932 case "$xxx_prompt" in
3933 y)      fn=d/
3934         echo " "
3935         rp='Where are the include files you want to use?'
3936         . ./getfile
3937         usrinc="$ans"
3938         ;;
3939 *)      usrinc="$dflt"
3940         ;;
3941 esac
3942
3943 : see how we invoke the C preprocessor
3944 echo " "
3945 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3946 cat <<'EOT' >testcpp.c
3947 #define ABC abc
3948 #define XYZ xyz
3949 ABC.XYZ
3950 EOT
3951 cd ..
3952 if test ! -f cppstdin; then
3953         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3954                 # AIX cc -E doesn't show the absolute headerfile
3955                 # locations but we'll cheat by using the -M flag.
3956                 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
3957         else
3958                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3959         fi
3960 else
3961         echo "Keeping your $hint cppstdin wrapper."
3962 fi
3963 chmod 755 cppstdin
3964 wrapper=`pwd`/cppstdin
3965 ok='false'
3966 cd UU
3967
3968 if $test "X$cppstdin" != "X" && \
3969         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3970         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3971 then
3972         echo "You used to use $cppstdin $cppminus so we'll use that again."
3973         case "$cpprun" in
3974         '') echo "But let's see if we can live without a wrapper..." ;;
3975         *)
3976                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3977                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3978                 then
3979                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3980                         ok='true'
3981                 else
3982                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3983                 fi
3984                 ;;
3985         esac
3986 else
3987         case "$cppstdin" in
3988         '') ;;
3989         *)
3990                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3991                 ;;
3992         esac
3993 fi
3994
3995 if $ok; then
3996         : nothing
3997 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3998         $cc -E <testcpp.c >testcpp.out 2>&1; \
3999         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4000         echo "Yup, it does."
4001         x_cpp="$cc -E"
4002         x_minus='';
4003 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4004         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4005         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4006         echo "Yup, it does."
4007         x_cpp="$cc -E"
4008         x_minus='-';
4009 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4010         $cc -P <testcpp.c >testcpp.out 2>&1; \
4011         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4012         echo "Yipee, that works!"
4013         x_cpp="$cc -P"
4014         x_minus='';
4015 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4016         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4017         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4018         echo "At long last!"
4019         x_cpp="$cc -P"
4020         x_minus='-';
4021 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4022         $cpp <testcpp.c >testcpp.out 2>&1; \
4023         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4024         echo "It works!"
4025         x_cpp="$cpp"
4026         x_minus='';
4027 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4028         $cpp - <testcpp.c >testcpp.out 2>&1; \
4029         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4030         echo "Hooray, it works!  I was beginning to wonder."
4031         x_cpp="$cpp"
4032         x_minus='-';
4033 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4034         $wrapper <testcpp.c >testcpp.out 2>&1; \
4035         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4036         x_cpp="$wrapper"
4037         x_minus=''
4038         echo "Eureka!"
4039 else
4040         dflt=''
4041         rp="No dice.  I can't find a C preprocessor.  Name one:"
4042         . ./myread
4043         x_cpp="$ans"
4044         x_minus=''
4045         $x_cpp <testcpp.c >testcpp.out 2>&1
4046         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4047                 echo "OK, that will do." >&4
4048         else
4049 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4050                 exit 1
4051         fi
4052 fi
4053
4054 case "$ok" in
4055 false)
4056         cppstdin="$x_cpp"
4057         cppminus="$x_minus"
4058         cpprun="$x_cpp"
4059         cpplast="$x_minus"
4060         set X $x_cpp
4061         shift
4062         case "$1" in
4063         "$cpp")
4064                 echo "Perhaps can we force $cc -E using a wrapper..."
4065                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4066                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4067                 then
4068                         echo "Yup, we can."
4069                         cppstdin="$wrapper"
4070                         cppminus='';
4071                 else
4072                         echo "Nope, we'll have to live without it..."
4073                 fi
4074                 ;;
4075         esac
4076         case "$cpprun" in
4077         "$wrapper")
4078                 cpprun=''
4079                 cpplast=''
4080                 ;;
4081         esac
4082         ;;
4083 esac
4084
4085 case "$cppstdin" in
4086 "$wrapper"|'cppstdin') ;;
4087 *) $rm -f $wrapper;;
4088 esac
4089 $rm -f testcpp.c testcpp.out
4090
4091 : Set private lib path
4092 case "$plibpth" in
4093 '') if ./mips; then
4094                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4095         fi;;
4096 esac
4097 case "$libpth" in
4098 ' ') dlist='';;
4099 '') dlist="$loclibpth $plibpth $glibpth";;
4100 *) dlist="$libpth";;
4101 esac
4102
4103 : Now check and see which directories actually exist, avoiding duplicates
4104 libpth=''
4105 for xxx in $dlist
4106 do
4107     if $test -d $xxx; then
4108                 case " $libpth " in
4109                 *" $xxx "*) ;;
4110                 *) libpth="$libpth $xxx";;
4111                 esac
4112     fi
4113 done
4114 $cat <<'EOM'
4115
4116 Some systems have incompatible or broken versions of libraries.  Among
4117 the directories listed in the question below, please remove any you
4118 know not to be holding relevant libraries, and add any that are needed.
4119 Say "none" for none.
4120
4121 EOM
4122 case "$libpth" in
4123 '') dflt='none';;
4124 *)
4125         set X $libpth
4126         shift
4127         dflt=${1+"$@"}
4128         ;;
4129 esac
4130 rp="Directories to use for library searches?"
4131 . ./myread
4132 case "$ans" in
4133 none) libpth=' ';;
4134 *) libpth="$ans";;
4135 esac
4136
4137 : compute shared library extension
4138 case "$so" in
4139 '')
4140         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4141                 dflt='sl'
4142         else
4143                 dflt='so'
4144         fi
4145         ;;
4146 *) dflt="$so";;
4147 esac
4148 $cat <<EOM
4149
4150 On some systems, shared libraries may be available.  Answer 'none' if
4151 you want to suppress searching of shared libraries for the remainder
4152 of this configuration.
4153
4154 EOM
4155 rp='What is the file extension used for shared libraries?'
4156 . ./myread
4157 so="$ans"
4158
4159 : Define several unixisms.
4160 : Hints files or command line option can be used to override them.
4161 : The convoluted testing is in case hints files set either the old
4162 : or the new name.
4163 case "$_exe" in
4164 '')     case "$exe_ext" in
4165         '')     ;;
4166         *)      _exe="$exe_ext" ;;
4167         esac
4168         ;;
4169 esac
4170 case "$_a" in
4171 '')     case "$lib_ext" in
4172     '') _a='.a';;
4173         *)      _a="$lib_ext" ;;
4174         esac
4175         ;;
4176 esac
4177 case "$_o" in
4178 '') case "$obj_ext" in
4179         '')     _o='.o';;
4180         *)      _o="$obj_ext";;
4181         esac
4182         ;;
4183 esac
4184 case "$p_" in
4185 '') case "$path_sep" in
4186         '')     p_=':';;
4187         *)      p_="$path_sep";;
4188         esac
4189         ;;
4190 esac
4191 exe_ext=$_exe
4192 lib_ext=$_a
4193 obj_ext=$_o
4194 path_sep=$p_
4195
4196 : Which makefile gets called first.  This is used by make depend.
4197 case "$firstmakefile" in
4198 '') firstmakefile='makefile';;
4199 esac
4200
4201 case "$usesocks" in
4202 $define|true|[yY]*)     dflt='y';;
4203 *) dflt='n';;
4204 esac
4205 cat <<EOM
4206
4207 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4208 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4209 to use the PerlIO abstraction layer, this will be implicitly selected.
4210
4211 If this doesn't make any sense to you, just accept the default '$dflt'.
4212 EOM
4213 rp='Build Perl for SOCKS?'
4214 . ./myread
4215 case "$ans" in
4216 y|Y)    val="$define" ;;     
4217 *)      val="$undef" ;;
4218 esac
4219 set usesocks
4220 eval $setvar
4221
4222 case "$usesocks" in
4223 $define|true|[yY]*) useperlio="$define";;
4224 esac
4225
4226 : Looking for optional libraries
4227 echo " "
4228 echo "Checking for optional libraries..." >&4
4229 case "$libs" in
4230 ' '|'') dflt='';;
4231 *) dflt="$libs";;
4232 esac
4233 case "$libswanted" in
4234 '') libswanted='c_s';;
4235 esac
4236 case "$usesocks" in
4237 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4238 esac
4239 libsfound=''
4240 libsfiles=''
4241 libsdirs=''
4242 libspath=''
4243 for thisdir in $libpth $xlibpth; do
4244   test -d $thisdir && libspath="$libspath $thisdir"
4245 done
4246 for thislib in $libswanted; do
4247         for thisdir in $libspath; do
4248             xxx=''
4249             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4250                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4251                 $test -f "$xxx" && eval $libscheck
4252                 $test -f "$xxx" && libstyle=shared
4253             fi
4254             if test ! -f "$xxx"; then
4255                 xxx=$thisdir/lib$thislib.$so
4256                 $test -f "$xxx" && eval $libscheck
4257                 $test -f "$xxx" && libstyle=shared
4258             fi  
4259             if test ! -f "$xxx"; then
4260                 xxx=$thisdir/lib$thislib$_a
4261                 $test -f "$xxx" && eval $libscheck
4262                 $test -f "$xxx" && libstyle=static
4263             fi
4264             if test ! -f "$xxx"; then
4265                 xxx=$thisdir/$thislib$_a
4266                 $test -f "$xxx" && eval $libscheck
4267                 $test -f "$xxx" && libstyle=static
4268             fi
4269             if test ! -f "$xxx"; then
4270                 xxx=$thisdir/lib${thislib}_s$_a
4271                 $test -f "$xxx" && eval $libscheck
4272                 $test -f "$xxx" && libstyle=static
4273                 $test -f "$xxx" && thislib=${thislib}_s
4274             fi
4275             if test ! -f "$xxx"; then
4276                 xxx=$thisdir/Slib$thislib$_a
4277                 $test -f "$xxx" && eval $libscheck
4278                 $test -f "$xxx" && libstyle=static
4279             fi
4280             if $test -f "$xxx"; then
4281                 case "$libstyle" in
4282                 shared) echo "Found -l$thislib (shared)." ;;
4283                 static) echo "Found -l$thislib." ;;
4284                 *)      echo "Found -l$thislib ($libstyle)." ;;
4285                 esac
4286                 case " $dflt " in
4287                 *"-l$thislib "*);;
4288                 *) dflt="$dflt -l$thislib"
4289                    libsfound="$libsfound $xxx"
4290                    yyy=`basename $xxx`
4291                    libsfiles="$libsfiles $yyy"
4292                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4293                    case " $libsdirs " in
4294                    *" $yyy "*) ;;
4295                    *) libsdirs="$libsdirs $yyy" ;;
4296                    esac
4297                    ;;
4298                 esac
4299                 break
4300             fi  
4301         done
4302         if $test ! -f "$xxx"; then
4303             echo "No -l$thislib."
4304         fi
4305 done
4306 set X $dflt
4307 shift
4308 dflt="$*"
4309 case "$libs" in
4310 '') dflt="$dflt";;
4311 *) dflt="$libs";;
4312 esac
4313 case "$dflt" in
4314 ' '|'') dflt='none';;
4315 esac
4316
4317 $cat <<EOM
4318
4319 In order to compile $package on your machine, a number of libraries
4320 are usually needed.  Include any other special libraries here as well.
4321 Say "none" for none.  The default list is almost always right.
4322 EOM
4323
4324 echo " "
4325 rp="What libraries to use?"
4326 . ./myread
4327 case "$ans" in
4328 none) libs=' ';;
4329 *) libs="$ans";;
4330 esac
4331
4332 : determine optimization, if desired, or use for debug flag also
4333 case "$optimize" in
4334 ' '|$undef) dflt='none';;
4335 '') dflt='-O';;
4336 *) dflt="$optimize";;
4337 esac
4338 $cat <<EOH
4339
4340 By default, $package compiles with the -O flag to use the optimizer.
4341 Alternately, you might want to use the symbolic debugger, which uses
4342 the -g flag (on traditional Unix systems).  Either flag can be
4343 specified here.  To use neither flag, specify the word "none".
4344
4345 EOH
4346 rp="What optimizer/debugger flag should be used?"
4347 . ./myread
4348 optimize="$ans"
4349 case "$optimize" in
4350 'none') optimize=" ";;
4351 esac
4352
4353 dflt=''
4354 : We will not override a previous value, but we might want to
4355 : augment a hint file
4356 case "$hint" in
4357 default|recommended)
4358         case "$gccversion" in
4359         1*) dflt='-fpcc-struct-return' ;;
4360         esac
4361         case "$optimize" in
4362         *-g*) dflt="$dflt -DDEBUGGING";;
4363         esac
4364         case "$gccversion" in
4365         2*) if test -d /etc/conf/kconfig.d &&
4366                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4367                 then
4368                         dflt="$dflt -posix"
4369                 fi
4370                 ;;
4371         esac
4372         case "$gccversion" in
4373         1*) ;;
4374         2.[0-8]*) ;;
4375         ?*)     echo " "
4376                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4377                 echo 'int main(void) { return 0; }' > gcctest.c
4378                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4379                         echo "Yes, it does." 2>&1
4380                         case "$ccflags" in
4381                         *strict-aliasing*) 
4382                                 echo "Leaving current flags $ccflags alone." 2>&1
4383                                 ;;
4384                         *) dflt="$dflt -fno-strict-aliasing" ;;
4385                         esac
4386                 else
4387                         echo "Nope, it doesn't, but that's ok." 2>&1
4388                 fi
4389                 ;;
4390         esac
4391         ;;
4392 esac
4393
4394 case "$mips_type" in
4395 *BSD*|'') inclwanted="$locincpth $usrinc";;
4396 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4397 esac
4398 for thisincl in $inclwanted; do
4399         if $test -d $thisincl; then
4400                 if $test x$thisincl != x$usrinc; then
4401                         case "$dflt" in
4402                         *" -I$thisincl "*);;
4403                         *) dflt="$dflt -I$thisincl ";;
4404                         esac
4405                 fi
4406         fi
4407 done
4408
4409 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4410         xxx=true;
4411 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4412         xxx=true;
4413 else
4414         xxx=false;
4415 fi;
4416 if $xxx; then
4417         case "$dflt" in
4418         *$2*);;
4419         *) dflt="$dflt -D$2";;
4420         esac;
4421 fi'
4422
4423 set signal.h LANGUAGE_C; eval $inctest
4424
4425 case "$usesocks" in
4426 $define)
4427         ccflags="$ccflags -DSOCKS"
4428         ;;
4429 esac
4430
4431 case "$hint" in
4432 default|recommended) dflt="$ccflags $dflt" ;;
4433 *) dflt="$ccflags";;
4434 esac
4435
4436 case "$dflt" in
4437 ''|' ') dflt=none;;
4438 esac
4439
4440 $cat <<EOH
4441
4442 Your C compiler may want other flags.  For this question you should include
4443 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4444 but you should NOT include libraries or ld flags like -lwhatever.  If you
4445 want $package to honor its debug switch, you should include -DDEBUGGING here.
4446 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4447
4448 To use no flags, specify the word "none".
4449
4450 EOH
4451 set X $dflt
4452 shift
4453 dflt=${1+"$@"}
4454 rp="Any additional cc flags?"
4455 . ./myread
4456 case "$ans" in
4457 none) ccflags='';;
4458 *) ccflags="$ans";;
4459 esac
4460
4461 : the following weeds options from ccflags that are of no interest to cpp
4462 case "$cppflags" in
4463 '') cppflags="$ccflags" ;;
4464 *)  cppflags="$cppflags $ccflags" ;;
4465 esac
4466 case "$gccversion" in
4467 1*) cppflags="$cppflags -D__GNUC__"
4468 esac
4469 case "$mips_type" in
4470 '');;
4471 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4472 esac
4473 case "$cppflags" in
4474 '');;
4475 *)
4476         echo " "
4477         echo "Let me guess what the preprocessor flags are..." >&4
4478         set X $cppflags
4479         shift
4480         cppflags=''
4481         $cat >cpp.c <<'EOM'
4482 #define BLURFL foo
4483
4484 BLURFL xx LFRULB
4485 EOM
4486         previous=''
4487         for flag in $*
4488         do
4489                 case "$flag" in
4490                 -*) ftry="$flag";;
4491                 *) ftry="$previous $flag";;
4492                 esac
4493                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4494                         >cpp1.out 2>/dev/null && \
4495                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4496                         >cpp2.out 2>/dev/null && \
4497                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4498                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4499                 then
4500                         cppflags="$cppflags $ftry"
4501                         previous=''
4502                 else
4503                         previous="$flag"
4504                 fi
4505         done
4506         set X $cppflags
4507         shift
4508         cppflags=${1+"$@"}
4509         case "$cppflags" in
4510         *-*)  echo "They appear to be: $cppflags";;
4511         esac
4512         $rm -f cpp.c cpp?.out
4513         ;;
4514 esac
4515
4516 : flags used in final linking phase
4517 case "$ldflags" in
4518 '') if ./venix; then
4519                 dflt='-i -z'
4520         else
4521                 dflt=''
4522         fi
4523         case "$ccflags" in
4524         *-posix*) dflt="$dflt -posix" ;;
4525         esac
4526         ;;
4527 *) dflt="$ldflags";;
4528 esac
4529
4530 : Try to guess additional flags to pick up local libraries.
4531 for thislibdir in $libpth; do
4532         case " $loclibpth " in
4533         *" $thislibdir "*)
4534                 case "$dflt " in 
4535                 *"-L$thislibdir "*) ;;
4536                 *)  dflt="$dflt -L$thislibdir" ;;
4537                 esac
4538                 ;;
4539         esac
4540 done
4541
4542 case "$dflt" in
4543 '') dflt='none' ;;
4544 esac
4545
4546 $cat <<EOH
4547
4548 Your C linker may need flags.  For this question you should
4549 include -L/whatever and any other flags used by the C linker, but you
4550 should NOT include libraries like -lwhatever.
4551
4552 Make sure you include the appropriate -L/path flags if your C linker
4553 does not normally search all of the directories you specified above,
4554 namely
4555         $libpth
4556 To use no flags, specify the word "none".
4557
4558 EOH
4559
4560 rp="Any additional ld flags (NOT including libraries)?"
4561 . ./myread
4562 case "$ans" in
4563 none) ldflags='';;
4564 *) ldflags="$ans";;
4565 esac
4566 rmlist="$rmlist pdp11"
4567
4568 : coherency check
4569 echo " "
4570 echo "Checking your choice of C compiler and flags for coherency..." >&4
4571 $cat > try.c <<'EOF'
4572 #include <stdio.h>
4573 int main() { printf("Ok\n"); exit(0); }
4574 EOF
4575 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4576 shift
4577 $cat >try.msg <<'EOM'
4578 I've tried to compile and run the following simple program:
4579
4580 EOM
4581 $cat try.c >> try.msg
4582
4583 $cat >> try.msg <<EOM
4584
4585 I used the command:
4586
4587         $*
4588         $run ./try
4589
4590 and I got the following output:
4591
4592 EOM
4593 dflt=y
4594 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4595         if $sh -c "$run ./try" >>try.msg 2>&1; then
4596                 xxx=`$run ./try`
4597                 case "$xxx" in
4598                 "Ok") dflt=n ;;
4599                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4600                         case " $libs " in
4601                         *" -lsfio "*)
4602                                 cat >> try.msg <<'EOQS'
4603 If $libs contains -lsfio, and sfio is mis-configured, then it
4604 sometimes (apparently) runs and exits with a 0 status, but with no
4605 output!  It may have to do with sfio's use of _exit vs. exit.
4606
4607 EOQS
4608                                 rp="You have a big problem.  Shall I abort Configure"
4609                                 dflt=y
4610                                 ;;
4611                         esac
4612                         ;;
4613                 esac
4614         else
4615                 echo "The program compiled OK, but exited with status $?." >>try.msg
4616                 rp="You have a problem.  Shall I abort Configure"
4617                 dflt=y
4618         fi
4619 else
4620         echo "I can't compile the test program." >>try.msg
4621         rp="You have a BIG problem.  Shall I abort Configure"
4622         dflt=y
4623 fi
4624 case "$dflt" in
4625 y)
4626         $cat try.msg >&4
4627         case "$knowitall" in
4628         '')
4629                 echo "(The supplied flags or libraries might be incorrect.)"
4630                 ;;
4631         *) dflt=n;;
4632         esac
4633         echo " "
4634         . ./myread
4635         case "$ans" in
4636         n*|N*) ;;
4637         *)      echo "Ok.  Stopping Configure." >&4
4638                 exit 1
4639                 ;;
4640         esac
4641         ;;
4642 n) echo "OK, that should do.";;
4643 esac
4644 $rm -f try try.* core
4645
4646 : define a shorthand compile call
4647 compile='
4648 mc_file=$1;
4649 shift;
4650 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4651 : define a shorthand compile call for compilations that should be ok.
4652 compile_ok='
4653 mc_file=$1;
4654 shift;
4655 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4656
4657 : check for lengths of integral types
4658 echo " "
4659 case "$intsize" in
4660 '')
4661         echo "Checking to see how big your integers are..." >&4
4662         $cat >try.c <<'EOCP'
4663 #include <stdio.h>
4664 int main()
4665 {
4666         printf("intsize=%d;\n", (int)sizeof(int));
4667         printf("longsize=%d;\n", (int)sizeof(long));
4668         printf("shortsize=%d;\n", (int)sizeof(short));
4669         exit(0);
4670 }
4671 EOCP
4672         set try
4673         if eval $compile_ok && $run ./try > /dev/null; then
4674                 eval `$run ./try`
4675                 echo "Your integers are $intsize bytes long."
4676                 echo "Your long integers are $longsize bytes long."
4677                 echo "Your short integers are $shortsize bytes long."
4678         else
4679                 $cat >&4 <<EOM
4680 !
4681 Help! I can't compile and run the intsize test program: please enlighten me!
4682 (This is probably a misconfiguration in your system or libraries, and
4683 you really ought to fix it.  Still, I'll try anyway.)
4684 !
4685 EOM
4686                 dflt=4
4687                 rp="What is the size of an integer (in bytes)?"
4688                 . ./myread
4689                 intsize="$ans"
4690                 dflt=$intsize
4691                 rp="What is the size of a long integer (in bytes)?"
4692                 . ./myread
4693                 longsize="$ans"
4694                 dflt=2
4695                 rp="What is the size of a short integer (in bytes)?"
4696                 . ./myread
4697                 shortsize="$ans"
4698         fi
4699         ;;
4700 esac
4701 $rm -f try try.*
4702
4703 : check for void type
4704 echo " "
4705 echo "Checking to see how well your C compiler groks the void type..." >&4
4706 case "$voidflags" in
4707 '')
4708         $cat >try.c <<'EOCP'
4709 #if TRY & 1
4710 void sub() {
4711 #else
4712 sub() {
4713 #endif
4714         extern void moo();      /* function returning void */
4715         void (*goo)();          /* ptr to func returning void */
4716 #if TRY & 8
4717         void *hue;              /* generic ptr */
4718 #endif
4719 #if TRY & 2
4720         void (*foo[10])();
4721 #endif
4722
4723 #if TRY & 4
4724         if(goo == moo) {
4725                 exit(0);
4726         }
4727 #endif
4728         exit(0);
4729 }
4730 int main() { sub(); }
4731 EOCP
4732         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4733                 voidflags=$defvoidused
4734         echo "Good.  It appears to support void to the level $package wants.">&4
4735                 if $contains warning .out >/dev/null 2>&1; then
4736                         echo "However, you might get some warnings that look like this:"
4737                         $cat .out
4738                 fi
4739         else
4740 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4741                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4742                         echo "It supports 1..."
4743                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4744                                 echo "It also supports 2..."
4745                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4746                                         voidflags=7
4747                                         echo "And it supports 4 but not 8 definitely."
4748                                 else
4749                                         echo "It doesn't support 4..."
4750                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4751                                                 voidflags=11
4752                                                 echo "But it supports 8."
4753                                         else
4754                                                 voidflags=3
4755                                                 echo "Neither does it support 8."
4756                                         fi
4757                                 fi
4758                         else
4759                                 echo "It does not support 2..."
4760                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4761                                         voidflags=13
4762                                         echo "But it supports 4 and 8."
4763                                 else
4764                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4765                                                 voidflags=5
4766                                                 echo "And it supports 4 but has not heard about 8."
4767                                         else
4768                                                 echo "However it supports 8 but not 4."
4769                                         fi
4770                                 fi
4771                         fi
4772                 else
4773                         echo "There is no support at all for void."
4774                         voidflags=0
4775                 fi
4776         fi
4777 esac
4778 case "$voidflags" in
4779 "$defvoidused") ;;
4780 *)      $cat >&4 <<'EOM'
4781   Support flag bits are:
4782     1: basic void declarations.
4783     2: arrays of pointers to functions returning void.
4784     4: operations between pointers to and addresses of void functions.
4785     8: generic void pointers.
4786 EOM
4787         dflt="$voidflags";
4788         rp="Your void support flags add up to what?"
4789         . ./myread
4790         voidflags="$ans"
4791         ;;
4792 esac
4793 $rm -f try.* .out
4794
4795 : check for length of pointer
4796 echo " "
4797 case "$ptrsize" in
4798 '')
4799         echo "Checking to see how big your pointers are..." >&4
4800         if test "$voidflags" -gt 7; then
4801                 echo '#define VOID_PTR char *' > try.c
4802         else
4803                 echo '#define VOID_PTR void *' > try.c
4804         fi
4805         $cat >>try.c <<'EOCP'
4806 #include <stdio.h>
4807 int main()
4808 {
4809     printf("%d\n", (int)sizeof(VOID_PTR));
4810     exit(0);
4811 }
4812 EOCP
4813         set try
4814         if eval $compile_ok; then
4815                 ptrsize=`$run ./try`
4816                 echo "Your pointers are $ptrsize bytes long."
4817         else
4818                 dflt='4'
4819                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4820                 rp="What is the size of a pointer (in bytes)?"
4821                 . ./myread
4822                 ptrsize="$ans"
4823         fi
4824         ;;
4825 esac
4826 $rm -f try.c try
4827
4828 : check for long long
4829 echo " "
4830 echo "Checking to see if you have long long..." >&4
4831 echo 'int main() { long long x = 7; return 0; }' > try.c
4832 set try
4833 if eval $compile; then
4834         val="$define"
4835         echo "You have long long."
4836 else
4837         val="$undef"
4838         echo "You do not have long long."
4839 fi
4840 $rm try.*
4841 set d_longlong
4842 eval $setvar
4843
4844 : check for length of long long
4845 case "${d_longlong}${longlongsize}" in
4846 $define)
4847         echo " "
4848         echo "Checking to see how big your long longs are..." >&4
4849         $cat >try.c <<'EOCP'
4850 #include <stdio.h>
4851 int main()
4852 {
4853     printf("%d\n", (int)sizeof(long long));
4854     return(0);
4855 }
4856 EOCP
4857         set try
4858         if eval $compile_ok; then
4859                 longlongsize=`$run ./try`
4860                 echo "Your long longs are $longlongsize bytes long."
4861         else
4862                 dflt='8'
4863                 echo " "
4864                 echo "(I can't seem to compile the test program.  Guessing...)"
4865                 rp="What is the size of a long long (in bytes)?"
4866                 . ./myread
4867                 longlongsize="$ans"
4868         fi
4869         if $test "X$longsize" = "X$longlongsize"; then
4870                 echo "(That isn't any different from an ordinary long.)"
4871         fi      
4872         ;;
4873 esac
4874 $rm -f try.* try
4875
4876 : determine filename position in cpp output
4877 echo " "
4878 echo "Computing filename position in cpp output for #include directives..." >&4
4879 case "$osname" in
4880 vos) testaccess=-e ;;
4881 *)   testaccess=-r ;;
4882 esac
4883 echo '#include <stdio.h>' > foo.c
4884 $cat >fieldn <<EOF
4885 $startsh
4886 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4887 $grep '^[       ]*#.*stdio\.h' | \
4888 while read cline; do
4889         pos=1
4890         set \$cline
4891         while $test \$# -gt 0; do
4892                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4893                         echo "\$pos"
4894                         exit 0
4895                 fi
4896                 shift
4897                 pos=\`expr \$pos + 1\`
4898         done
4899 done
4900 EOF
4901 chmod +x fieldn
4902 fieldn=`./fieldn`
4903 $rm -f foo.c fieldn
4904 case $fieldn in
4905 '') pos='???';;
4906 1) pos=first;;
4907 2) pos=second;;
4908 3) pos=third;;
4909 *) pos="${fieldn}th";;
4910 esac
4911 echo "Your cpp writes the filename in the $pos field of the line."
4912
4913 case "$osname" in
4914 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4915 *)   cppfilter='' ;;
4916 esac
4917 : locate header file
4918 $cat >findhdr <<EOF
4919 $startsh
4920 wanted=\$1
4921 name=''
4922 for usrincdir in $usrinc
4923 do
4924         if test -f \$usrincdir/\$wanted; then
4925                 echo "\$usrincdir/\$wanted"
4926                 exit 0
4927         fi
4928 done
4929 awkprg='{ print \$$fieldn }'
4930 echo "#include <\$wanted>" > foo\$\$.c
4931 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4932 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4933 while read cline; do
4934         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4935         case "\$name" in
4936         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4937         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4938         *) exit 2;;
4939         esac;
4940 done;
4941 #
4942 # status = 0: grep returned 0 lines, case statement not executed
4943 # status = 1: headerfile found
4944 # status = 2: while loop executed, no headerfile found
4945 #
4946 status=\$?
4947 $rm -f foo\$\$.c;
4948 if test \$status -eq 1; then
4949         exit 0;
4950 fi
4951 exit 1
4952 EOF
4953 chmod +x findhdr
4954
4955 : define an alternate in-header-list? function
4956 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4957 cont=true; xxf="echo \"<\$1> found.\" >&4";
4958 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4959 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4960 esac;
4961 case $# in 4) instead=instead;; *) instead="at last";; esac;
4962 while $test "$cont"; do
4963         xxx=`./findhdr $1`
4964         var=$2; eval "was=\$$2";
4965         if $test "$xxx" && $test -r "$xxx";
4966         then eval $xxf;
4967         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4968                 cont="";
4969         else eval $xxnf;
4970         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4971         set $yyy; shift; shift; yyy=$@;
4972         case $# in 0) cont="";;
4973         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4974                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4975         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4976                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4977         esac;
4978 done;
4979 while $test "$yyy";
4980 do set $yyy; var=$2; eval "was=\$$2";
4981         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4982         set $yyy; shift; shift; yyy=$@;
4983 done'
4984
4985 : see if inttypes.h is available
4986 : we want a real compile instead of Inhdr because some systems
4987 : have an inttypes.h which includes non-existent headers
4988 echo " "
4989 $cat >try.c <<EOCP
4990 #include <inttypes.h>
4991 int main() {
4992         static int32_t foo32 = 0x12345678;
4993 }
4994 EOCP
4995 set try
4996 if eval $compile; then
4997         echo "<inttypes.h> found." >&4
4998         val="$define"
4999 else
5000         echo "<inttypes.h> NOT found." >&4
5001         val="$undef"
5002 fi
5003 $rm -f try.c try
5004 set i_inttypes
5005 eval $setvar
5006
5007 : check for int64_t
5008 echo " "
5009 echo "Checking to see if you have int64_t..." >&4
5010 $cat >try.c <<EOCP
5011 #include <sys/types.h>
5012 #$i_inttypes I_INTTYPES
5013 #ifdef I_INTTYPES
5014 #include <inttypes.h>
5015 #endif
5016 int main() { int64_t x = 7; }
5017 EOCP
5018 set try
5019 if eval $compile; then
5020         val="$define"
5021         echo "You have int64_t."
5022 else
5023         val="$undef"
5024         echo "You do not have int64_t."
5025 fi
5026 $rm -f try try.*
5027 set d_int64_t
5028 eval $setvar
5029
5030
5031 echo " "
5032 echo "Checking which 64-bit integer type we could use..." >&4
5033
5034 case "$intsize" in
5035 8) val=int
5036    set quadtype
5037    eval $setvar
5038    val='"unsigned int"'
5039    set uquadtype
5040    eval $setvar
5041    quadkind=1
5042    ;;
5043 *) case "$longsize" in
5044    8) val=long
5045       set quadtype
5046       eval $setvar
5047       val='"unsigned long"'
5048       set uquadtype
5049       eval $setvar
5050       quadkind=2
5051       ;;
5052    *) case "$d_longlong:$longlongsize" in
5053       define:8)
5054         val='"long long"'
5055         set quadtype
5056         eval $setvar
5057         val='"unsigned long long"'
5058         set uquadtype
5059         eval $setvar
5060         quadkind=3
5061         ;;
5062       *) case "$d_int64_t" in
5063          define)
5064            val=int64_t
5065            set quadtype
5066            eval $setvar
5067            val=uint64_t
5068            set uquadtype
5069            eval $setvar
5070            quadkind=4
5071            ;;
5072          esac
5073          ;;
5074       esac
5075       ;;
5076    esac
5077    ;;
5078 esac
5079
5080 case "$quadtype" in
5081 '')     echo "Alas, no 64-bit integer types in sight." >&4
5082         d_quad="$undef"
5083         ;;
5084 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5085         d_quad="$define"
5086         ;;
5087 esac
5088
5089
5090 case "$uselonglong" in
5091 "$define"|true|[yY]*)
5092         cat <<EOM >&4
5093
5094 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5095 EOM
5096         use64bitint="$define"
5097         ;;
5098 esac                          
5099 case "$use64bits" in
5100 "$define"|true|[yY]*)
5101         cat <<EOM >&4
5102
5103 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5104 EOM
5105         use64bitint="$define"
5106         ;;
5107 esac                          
5108 case "$use64bitints" in
5109 "$define"|true|[yY]*)
5110         cat <<EOM >&4
5111
5112 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5113 EOM
5114         use64bitint="$define"
5115         ;;
5116 esac                          
5117 case "$use64bitsint" in
5118 "$define"|true|[yY]*)
5119         cat <<EOM >&4
5120
5121 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5122 EOM
5123         use64bitint="$define"
5124         ;;
5125 esac                          
5126 case "$uselonglongs" in
5127 "$define"|true|[yY]*)
5128         cat <<EOM >&4
5129
5130 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5131 EOM
5132         use64bitint="$define"
5133         ;;
5134 esac                          
5135 case "$use64bitsall" in
5136 "$define"|true|[yY]*)
5137         cat <<EOM >&4
5138
5139 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5140 EOM
5141         use64bitall="$define"
5142         ;;
5143 esac                          
5144
5145 case "$ccflags" in
5146 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5147 esac
5148 case "$use64bitall" in
5149 "$define"|true|[yY]*) use64bitint="$define" ;;
5150 esac
5151
5152 case "$longsize" in
5153 8) cat <<EOM
5154
5155 You have natively 64-bit long integers.
5156 EOM
5157    val="$define"
5158    ;;
5159 *) case "$use64bitint" in
5160    "$define"|true|[yY]*) dflt='y';;
5161    *) dflt='n';;
5162    esac
5163    case "$d_quad" in
5164    "$define") ;;
5165    *) dflt='n' ;;
5166    esac
5167    cat <<EOM
5168
5169 Perl can be built to take advantage of 64-bit integer types
5170 on some systems.  To do so, Configure can be run with -Duse64bitint.
5171 Choosing this option will most probably introduce binary incompatibilities.
5172
5173 If this doesn't make any sense to you, just accept the default '$dflt'.
5174 (The default has been chosen based on your configuration.)
5175 EOM
5176    rp='Try to use 64-bit integers, if available?'
5177    . ./myread
5178    case "$ans" in
5179    [yY]*) val="$define" ;;
5180    *)     val="$undef"  ;;
5181    esac
5182    ;;
5183 esac
5184 set use64bitint
5185 eval $setvar
5186
5187 case "$use64bitall" in
5188 "$define"|true|[yY]*) dflt='y' ;;
5189 *) case "$longsize" in
5190    8) dflt='y' ;;
5191    *) dflt='n' ;;
5192    esac
5193    ;;
5194 esac    
5195 cat <<EOM
5196
5197 You may also choose to try maximal 64-bitness.  It means using as much
5198 64-bitness as possible on the platform.  This in turn means even more
5199 binary incompatibilities.  On the other hand, your platform may not
5200 have any more 64-bitness available than what you already have chosen.
5201
5202 If this doesn't make any sense to you, just accept the default '$dflt'.
5203 (The default has been chosen based on your configuration.)
5204 EOM
5205 rp='Try to use maximal 64-bit support, if available?'
5206 . ./myread
5207 case "$ans" in
5208 [yY]*) val="$define" ;;
5209 *)     val="$undef"  ;;
5210 esac
5211 set use64bitall
5212 eval $setvar
5213 case "$use64bitall" in
5214 "$define")
5215         case "$use64bitint" in
5216         "$undef")
5217                 cat <<EOM
5218
5219 Since you have chosen a maximally 64-bit build, I'm also turning on
5220 the use of 64-bit integers.
5221 EOM
5222                 use64bitint="$define" ;;
5223         esac
5224         ;;
5225 esac
5226
5227 case "$use64bitall" in
5228 "$define"|true|[yY]*)
5229         case "$ptrsize" in
5230         4)      cat <<EOM >&4
5231
5232 *** You have chosen a maximally 64-bit build, but your pointers
5233 *** are only 4 bytes wide, disabling maximal 64-bitness.
5234
5235 EOM
5236                 use64bitall="$undef"
5237                 case "$use64bitint" in
5238                 "$define"|true|[yY]*) ;;
5239                 *)      cat <<EOM >&4
5240
5241 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5242
5243 EOM
5244                         use64bitint="$define"
5245                         ;;
5246                 esac
5247                 ;;
5248         esac
5249         ;;
5250 esac
5251
5252 case "$use64bitint" in
5253 "$define"|true|[yY]*)
5254 : Look for a hint-file generated 'call-back-unit'.  If the
5255 : user has specified that a 64-bit perl is to be built,
5256 : we may need to set or change some other defaults.
5257         if $test -f use64bitint.cbu; then
5258                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5259                 . ./use64bitint.cbu
5260         fi
5261         case "$longsize" in
5262         4) case "$archname64" in
5263            '') archname64=64int ;;
5264            esac
5265            ;;
5266         esac
5267         ;;
5268 esac
5269
5270 case "$use64bitall" in
5271 "$define"|true|[yY]*)
5272 : Look for a hint-file generated 'call-back-unit'.  If the
5273 : user has specified that a maximally 64-bit perl is to be built,
5274 : we may need to set or change some other defaults.
5275         if $test -f use64bitall.cbu; then
5276                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5277                 . ./use64bitall.cbu
5278         fi
5279         case "$longsize" in
5280         4) case "$archname64" in
5281            ''|64int) archname64=64all ;;
5282            esac
5283            ;;
5284         esac
5285         ;;
5286 esac
5287
5288 echo " "
5289 echo "Checking for GNU C Library..." >&4
5290 cat >try.c <<EOM
5291 #include <stdio.h>
5292 int main()
5293 {
5294 #ifdef __GLIBC__
5295     exit(0);
5296 #else
5297     exit(1);
5298 #endif
5299 }
5300 EOM
5301 set try
5302 if eval $compile_ok && $run ./try; then
5303         val="$define"
5304         echo "You are using the GNU C Library"
5305 else
5306         val="$undef"
5307         echo "You are not using the GNU C Library"
5308 fi
5309 $rm -f try try.*
5310 set d_gnulibc
5311 eval $setvar
5312
5313 : see if nm is to be used to determine whether a symbol is defined or not
5314 case "$usenm" in
5315 '')
5316         dflt=''
5317         case "$d_gnulibc" in
5318         "$define")
5319                 echo " "
5320                 echo "nm probably won't work on the GNU C Library." >&4
5321                 dflt=n
5322                 ;;
5323         esac
5324         case "$dflt" in
5325         '') 
5326                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5327                         echo " "
5328                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5329                         echo "'nm' won't be sufficient on this sytem." >&4
5330                         dflt=n
5331                 fi
5332                 ;;
5333         esac
5334         case "$dflt" in
5335         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5336                 if $test $dflt -gt 20; then
5337                         dflt=y
5338                 else
5339                         dflt=n
5340                 fi
5341                 ;;
5342         esac
5343         ;;
5344 *)
5345         case "$usenm" in
5346         true|$define) dflt=y;;
5347         *) dflt=n;;
5348         esac
5349         ;;
5350 esac
5351 $cat <<EOM
5352
5353 I can use $nm to extract the symbols from your C libraries. This
5354 is a time consuming task which may generate huge output on the disk (up
5355 to 3 megabytes) but that should make the symbols extraction faster. The
5356 alternative is to skip the 'nm' extraction part and to compile a small
5357 test program instead to determine whether each symbol is present. If
5358 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5359 this may be the best solution.
5360
5361 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5362
5363 EOM
5364 rp="Shall I use $nm to extract C symbols from the libraries?"
5365 . ./myread
5366 case "$ans" in
5367 [Nn]*) usenm=false;;
5368 *) usenm=true;;
5369 esac
5370
5371 runnm=$usenm
5372 case "$reuseval" in
5373 true) runnm=false;;
5374 esac
5375
5376 : nm options which may be necessary
5377 case "$nm_opt" in
5378 '') if $test -f /mach_boot; then
5379                 nm_opt=''       # Mach
5380         elif $test -d /usr/ccs/lib; then
5381                 nm_opt='-p'     # Solaris (and SunOS?)
5382         elif $test -f /dgux; then
5383                 nm_opt='-p'     # DG-UX
5384         elif $test -f /lib64/rld; then
5385                 nm_opt='-p'     # 64-bit Irix
5386         else
5387                 nm_opt=''
5388         fi;;
5389 esac
5390
5391 : nm options which may be necessary for shared libraries but illegal
5392 : for archive libraries.  Thank you, Linux.
5393 case "$nm_so_opt" in
5394 '')     case "$myuname" in
5395         *linux*)
5396                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5397                         nm_so_opt='--dynamic'
5398                 fi
5399                 ;;
5400         esac
5401         ;;
5402 esac
5403
5404 case "$runnm" in
5405 true)
5406 : get list of predefined functions in a handy place
5407 echo " "
5408 case "$libc" in
5409 '') libc=unknown
5410         case "$libs" in
5411         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5412         esac
5413         ;;
5414 esac
5415 case "$libs" in
5416 '') ;;
5417 *)  for thislib in $libs; do
5418         case "$thislib" in
5419         -lc|-lc_s)
5420                 : Handle C library specially below.
5421                 ;;
5422         -l*)
5423                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5424                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5425                         :
5426                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5427                         :
5428                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5429                         :
5430                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5431                         :
5432                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5433                         :
5434                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5435                         :
5436                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5437                         :
5438                 else
5439                         try=''
5440                 fi
5441                 libnames="$libnames $try"
5442                 ;;
5443         *) libnames="$libnames $thislib" ;;
5444         esac
5445         done
5446         ;;
5447 esac
5448 xxx=normal
5449 case "$libc" in
5450 unknown)
5451         set /lib/libc.$so
5452         for xxx in $libpth; do
5453                 $test -r $1 || set $xxx/libc.$so
5454                 : The messy sed command sorts on library version numbers.
5455                 $test -r $1 || \
5456                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5457                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5458                                 h
5459                                 s/[0-9][0-9]*/0000&/g
5460                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5461                                 G
5462                                 s/\n/ /' | \
5463                          $sort | $sed -e 's/^.* //'`
5464                 eval set \$$#
5465         done
5466         $test -r $1 || set /usr/ccs/lib/libc.$so
5467         $test -r $1 || set /lib/libsys_s$_a
5468         ;;
5469 *)
5470         set blurfl
5471         ;;
5472 esac
5473 if $test -r "$1"; then
5474         echo "Your (shared) C library seems to be in $1."
5475         libc="$1"
5476 elif $test -r /lib/libc && $test -r /lib/clib; then
5477         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5478         xxx=apollo
5479         libc='/lib/clib /lib/libc'
5480         if $test -r /lib/syslib; then
5481                 echo "(Your math library is in /lib/syslib.)"
5482                 libc="$libc /lib/syslib"
5483         fi
5484 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5485         echo "Your C library seems to be in $libc, as you said before."
5486 elif $test -r $incpath/usr/lib/libc$_a; then
5487         libc=$incpath/usr/lib/libc$_a;
5488         echo "Your C library seems to be in $libc.  That's fine."
5489 elif $test -r /lib/libc$_a; then
5490         libc=/lib/libc$_a;
5491         echo "Your C library seems to be in $libc.  You're normal."
5492 else
5493         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5494                 :
5495         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5496                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5497         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5498                 :
5499         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5500                 :
5501         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5502                 :
5503         else
5504                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5505         fi
5506         if $test -r "$tans"; then
5507                 echo "Your C library seems to be in $tans, of all places."
5508                 libc=$tans
5509         else
5510                 libc='blurfl'
5511         fi
5512 fi
5513 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5514         dflt="$libc"
5515         cat <<EOM
5516
5517 If the guess above is wrong (which it might be if you're using a strange
5518 compiler, or your machine supports multiple models), you can override it here.
5519
5520 EOM
5521 else
5522         dflt=''
5523         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5524         cat >&4 <<EOM
5525 I can't seem to find your C library.  I've looked in the following places:
5526
5527 EOM
5528         $sed 's/^/      /' libpath
5529         cat <<EOM
5530
5531 None of these seems to contain your C library. I need to get its name...
5532
5533 EOM
5534 fi
5535 fn=f
5536 rp='Where is your C library?'
5537 . ./getfile
5538 libc="$ans"
5539
5540 echo " "
5541 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5542 set X `cat libnames`
5543 shift
5544 xxx=files
5545 case $# in 1) xxx=file; esac
5546 echo "Extracting names from the following $xxx for later perusal:" >&4
5547 echo " "
5548 $sed 's/^/      /' libnames >&4
5549 echo " "
5550 $echo $n "This may take a while...$c" >&4
5551
5552 for file in $*; do
5553         case $file in
5554         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5555         *) $nm $nm_opt $file 2>/dev/null;;
5556         esac
5557 done >libc.tmp
5558
5559 $echo $n ".$c"
5560 $grep fprintf libc.tmp > libc.ptf
5561 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5562 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5563 xxx='[ADTSIW]'
5564 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5565         eval $xscan;\
5566         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5567                 eval $xrun
5568 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5569         eval $xscan;\
5570         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5571                 eval $xrun
5572 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5573         eval $xscan;\
5574         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5575                 eval $xrun
5576 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5577         eval $xscan;\
5578         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5579                 eval $xrun
5580 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5581         eval $xscan;\
5582         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5583                 eval $xrun
5584 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5585         eval $xscan;\
5586         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5587                 eval $xrun
5588 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5589                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5590         eval $xscan;\
5591         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5592                 eval $xrun
5593 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5594         eval $xscan;\
5595         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5596                 eval $xrun
5597 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5598         eval $xscan;\
5599         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5600                 eval $xrun
5601 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5602         eval $xscan;\
5603         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5604                 eval $xrun
5605 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5606         eval $xscan;\
5607         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5608                 eval $xrun
5609 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5610         eval $xscan;\
5611         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5612                 eval $xrun
5613 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5614         eval $xscan;\
5615         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5616                 eval $xrun
5617 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5618         eval $xscan;\
5619         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5620                 eval $xrun
5621 else
5622         $nm -p $* 2>/dev/null >libc.tmp
5623         $grep fprintf libc.tmp > libc.ptf
5624         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5625                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5626         then
5627                 nm_opt='-p'
5628                 eval $xrun
5629         else
5630                 echo " "
5631                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5632                 com=''
5633                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5634                         for thisname in $libnames $libc; do
5635                                 $ar t $thisname >>libc.tmp
5636                         done
5637                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5638                         echo "Ok." >&4
5639                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5640                         # Repeat libc to extract forwarders to DLL entries too
5641                         for thisname in $libnames $libc; do
5642                                 $ar tv $thisname >>libc.tmp
5643                                 # Revision 50 of EMX has bug in $ar.
5644                                 # it will not extract forwarders to DLL entries
5645                                 # Use emximp which will extract exactly them.
5646                                 emximp -o tmp.imp $thisname \
5647                                     2>/dev/null && \
5648                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5649                                     < tmp.imp >>libc.tmp
5650                                 $rm tmp.imp
5651                         done
5652                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5653                         echo "Ok." >&4
5654                 else
5655                         echo "$ar didn't seem to work right." >&4
5656                         echo "Maybe this is a Cray...trying bld instead..." >&4
5657                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5658                         then
5659                                 for thisname in $libnames; do
5660                                         bld t $libnames | \
5661                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5662                                         $ar t $thisname >>libc.tmp
5663                                 done
5664                                 echo "Ok." >&4
5665                         else
5666                                 echo "That didn't work either.  Giving up." >&4
5667                                 exit 1
5668                         fi
5669                 fi
5670         fi
5671 fi
5672 nm_extract="$com"
5673 if $test -f /lib/syscalls.exp; then
5674         echo " "
5675         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5676         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5677 fi
5678 ;;
5679 esac
5680 $rm -f libnames libpath
5681
5682 : is a C symbol defined?
5683 csym='tlook=$1;
5684 case "$3" in
5685 -v) tf=libc.tmp; tc=""; tdc="";;
5686 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5687 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5688 esac;
5689 tx=yes;
5690 case "$reuseval-$4" in
5691 true-) ;;
5692 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5693 esac;
5694 case "$tx" in
5695 yes)
5696         case "$runnm" in
5697         true)
5698                 if $contains $tlook $tf >/dev/null 2>&1;
5699                 then tval=true;
5700                 else tval=false;
5701                 fi;;
5702         *)
5703                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5704                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5705                 then tval=true;
5706                 else tval=false;
5707                 fi;
5708                 $rm -f t t.c;;
5709         esac;;
5710 *)
5711         case "$tval" in
5712         $define) tval=true;;
5713         *) tval=false;;
5714         esac;;
5715 esac;
5716 eval "$2=$tval"'
5717
5718 : define an is-in-libc? function
5719 inlibc='echo " "; td=$define; tu=$undef;
5720 sym=$1; var=$2; eval "was=\$$2";
5721 tx=yes;
5722 case "$reuseval$was" in
5723 true) ;;
5724 true*) tx=no;;
5725 esac;
5726 case "$tx" in
5727 yes)
5728         set $sym tres -f;
5729         eval $csym;
5730         case "$tres" in
5731         true)
5732                 echo "$sym() found." >&4;
5733                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5734         *)
5735                 echo "$sym() NOT found." >&4;
5736                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5737         esac;;
5738 *)
5739         case "$was" in
5740         $define) echo "$sym() found." >&4;;
5741         *) echo "$sym() NOT found." >&4;;
5742         esac;;
5743 esac'
5744
5745 : see if sqrtl exists
5746 set sqrtl d_sqrtl
5747 eval $inlibc
5748
5749 : check for length of double
5750 echo " "
5751 case "$doublesize" in
5752 '')
5753         echo "Checking to see how big your double precision numbers are..." >&4
5754         $cat >try.c <<'EOCP'
5755 #include <stdio.h>
5756 int main()
5757 {
5758     printf("%d\n", (int)sizeof(double));
5759     exit(0);
5760 }
5761 EOCP
5762         set try
5763         if eval $compile_ok; then
5764                 doublesize=`$run ./try`
5765                 echo "Your double is $doublesize bytes long."
5766         else
5767                 dflt='8'
5768                 echo "(I can't seem to compile the test program.  Guessing...)"
5769                 rp="What is the size of a double precision number (in bytes)?"
5770                 . ./myread
5771                 doublesize="$ans"
5772         fi
5773         ;;
5774 esac
5775 $rm -f try.c try
5776
5777 : check for long doubles
5778 echo " "
5779 echo "Checking to see if you have long double..." >&4
5780 echo 'int main() { long double x = 7.0; }' > try.c
5781 set try
5782 if eval $compile; then
5783         val="$define"
5784         echo "You have long double."
5785 else
5786         val="$undef"
5787         echo "You do not have long double."
5788 fi
5789 $rm try.*
5790 set d_longdbl
5791 eval $setvar
5792
5793 : check for length of long double
5794 case "${d_longdbl}${longdblsize}" in
5795 $define)
5796         echo " "
5797         echo "Checking to see how big your long doubles are..." >&4
5798         $cat >try.c <<'EOCP'
5799 #include <stdio.h>
5800 int main()
5801 {
5802         printf("%d\n", sizeof(long double));
5803 }
5804 EOCP
5805         set try
5806         set try
5807         if eval $compile; then
5808                 longdblsize=`$run ./try`
5809                 echo "Your long doubles are $longdblsize bytes long."
5810         else
5811                 dflt='8'
5812                 echo " "
5813                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5814                 rp="What is the size of a long double (in bytes)?"
5815                 . ./myread
5816                 longdblsize="$ans"
5817         fi
5818         if $test "X$doublesize" = "X$longdblsize"; then
5819                 echo "(That isn't any different from an ordinary double.)"
5820         fi      
5821         ;;
5822 esac
5823 $rm -f try.* try
5824
5825 echo " "
5826
5827 if $test X"$d_longdbl" = X"$define"; then
5828
5829 echo "Checking how to print long doubles..." >&4
5830
5831 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5832         $cat >try.c <<'EOCP'
5833 #include <sys/types.h>
5834 #include <stdio.h>
5835 int main() {
5836   double d = 123.456;
5837   printf("%.3f\n", d);
5838 }
5839 EOCP
5840         set try
5841         if eval $compile; then
5842                 yyy=`$run ./try`
5843                 case "$yyy" in
5844                 123.456)
5845                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5846                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5847                         echo "We will use %f."
5848                         ;;
5849                 esac
5850         fi
5851 fi
5852
5853 if $test X"$sPRIfldbl" = X; then
5854         $cat >try.c <<'EOCP'
5855 #include <sys/types.h>
5856 #include <stdio.h>
5857 int main() {
5858   long double d = 123.456;
5859   printf("%.3Lf\n", d);
5860 }
5861 EOCP
5862         set try
5863         if eval $compile; then
5864                 yyy=`$run ./try`
5865                 case "$yyy" in
5866                 123.456)
5867                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5868                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5869                         echo "We will use %Lf."
5870                         ;;
5871                 esac
5872         fi
5873 fi
5874
5875 if $test X"$sPRIfldbl" = X; then
5876         $cat >try.c <<'EOCP'
5877 #include <sys/types.h>
5878 #include <stdio.h>
5879 int main() {
5880   long double d = 123.456;
5881   printf("%.3llf\n", d);
5882 }
5883 EOCP
5884         set try
5885         if eval $compile; then
5886                 yyy=`$run ./try`
5887                 case "$yyy" in
5888                 123.456)
5889                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5890                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5891                         echo "We will use %llf."
5892                         ;;
5893                 esac
5894         fi
5895 fi
5896
5897 if $test X"$sPRIfldbl" = X; then
5898         $cat >try.c <<'EOCP'
5899 #include <sys/types.h>
5900 #include <stdio.h>
5901 int main() {
5902   long double d = 123.456;
5903   printf("%.3lf\n", d);
5904 }
5905 EOCP
5906         set try
5907         if eval $compile; then
5908                 yyy=`$run ./try`
5909                 case "$yyy" in
5910                 123.456)
5911                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5912                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5913                         echo "We will use %lf."
5914                         ;;
5915                 esac
5916         fi
5917 fi
5918
5919 if $test X"$sPRIfldbl" = X; then
5920         echo "Cannot figure out how to print long doubles." >&4
5921 else
5922         sSCNfldbl=$sPRIfldbl    # expect consistency
5923 fi
5924
5925 $rm -f try try.*
5926
5927 fi # d_longdbl
5928
5929 case "$sPRIfldbl" in
5930 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5931         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5932         d_SCNfldbl="$undef";
5933         ;;
5934 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5935         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5936         d_SCNfldbl="$define";
5937         ;;
5938 esac
5939
5940 : see if modfl exists
5941 set modfl d_modfl
5942 eval $inlibc
5943
5944 d_modfl_pow32_bug="$undef"
5945
5946 case "$d_longdbl$d_modfl" in
5947 $define$define)
5948         $cat <<EOM
5949 Checking to see whether your modfl() is okay for large values...
5950 EOM
5951 $cat >try.c <<EOCP
5952 #include <math.h> 
5953 #include <stdio.h>
5954 int main() {
5955     long double nv = 4294967303.15;
5956     long double v, w;
5957     v = modfl(nv, &w);         
5958 #ifdef __GLIBC__
5959     printf("glibc");
5960 #endif
5961     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
5962     return 0;
5963 }
5964 EOCP
5965         case "$osname:$gccversion" in
5966         aix:)   saveccflags="$ccflags"
5967                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
5968         esac
5969         set try
5970         if eval $compile; then
5971                 foo=`$run ./try`
5972                 case "$foo" in
5973                 *" 4294967303.150000 1.150000 4294967302.000000")
5974                         echo >&4 "Your modfl() is broken for large values."
5975                         d_modfl_pow32_bug="$define"
5976                         case "$foo" in
5977                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
5978                         ;;
5979                         esac
5980                         ;;
5981                 *" 4294967303.150000 0.150000 4294967303.000000")
5982                         echo >&4 "Your modfl() seems okay for large values."
5983                         ;;
5984                 *)      echo >&4 "I don't understand your modfl() at all."
5985                         d_modfl="$undef"
5986                         ;;
5987                 esac
5988                 $rm -f try.* try core core.try.*
5989         else
5990                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
5991                 d_modfl="$undef"
5992         fi
5993         case "$osname:$gccversion" in
5994         aix:)   ccflags="$saveccflags" ;; # restore
5995         esac
5996         ;;
5997 esac
5998
5999 case "$ccflags" in
6000 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6001 esac
6002
6003 case "$uselongdouble" in
6004 $define|true|[yY]*)     dflt='y';;
6005 *) dflt='n';;
6006 esac
6007 cat <<EOM
6008
6009 Perl can be built to take advantage of long doubles which
6010 (if available) may give more accuracy and range for floating point numbers.
6011
6012 If this doesn't make any sense to you, just accept the default '$dflt'.
6013 EOM
6014 rp='Try to use long doubles if available?'
6015 . ./myread
6016 case "$ans" in
6017 y|Y)    val="$define"   ;;
6018 *)      val="$undef"    ;;
6019 esac
6020 set uselongdouble
6021 eval $setvar
6022
6023 case "$uselongdouble" in
6024 true|[yY]*) uselongdouble="$define" ;;
6025 esac
6026
6027 case "$uselongdouble" in
6028 $define)
6029 : Look for a hint-file generated 'call-back-unit'.  If the
6030 : user has specified that long doubles should be used,
6031 : we may need to set or change some other defaults.
6032         if $test -f uselongdouble.cbu; then
6033                 echo "Your platform has some specific hints for long doubles, using them..."
6034                 . ./uselongdouble.cbu
6035         else
6036                 $cat <<EOM
6037 (Your platform doesn't have any specific hints for long doubles.)
6038 EOM
6039         fi
6040         ;;
6041 esac
6042
6043 message=X
6044 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6045 $define:$define:$define)
6046         : You have both
6047         ;;
6048 $define:$define:$undef)
6049         message="I could not find modfl"
6050         ;;
6051 $define:$undef:$define)
6052         message="I could not find sqrtl"
6053         ;;
6054 $define:$undef:$undef)
6055         message="I found neither sqrtl nor modfl"
6056         ;;
6057 esac
6058
6059 if $test "$message" != X; then
6060         $cat <<EOM >&4
6061
6062 *** You requested the use of long doubles but you do not seem to have
6063 *** the mathematic functions for long doubles.
6064 *** ($message)
6065 *** I'm disabling the use of long doubles.
6066
6067 EOM
6068
6069         uselongdouble=$undef
6070 fi
6071
6072 case "$useperlio" in
6073 $define|true|[yY]*|'')  dflt='y';;
6074 *) dflt='n';;
6075 esac
6076 cat <<EOM
6077
6078 Previous version of $package used the standard IO mechanisms as
6079 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6080 alternate IO mechanisms via the PerlIO abstraction layer, but the
6081 stdio mechanism is still available if needed.  The abstraction layer
6082 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6083 Using PerlIO with sfio may cause problems with some extension modules.
6084
6085 If this doesn't make any sense to you, just accept the default '$dflt'.
6086 EOM
6087 rp='Use the PerlIO abstraction layer?'
6088 . ./myread
6089 case "$ans" in
6090 y|Y) 
6091         val="$define"
6092         ;;
6093 *)      
6094         echo "Ok, doing things the stdio way."
6095         val="$undef"
6096         ;;
6097 esac
6098 set useperlio
6099 eval $setvar 
6100
6101 case "$usesocks" in
6102 $define|true|[yY]*)
6103         case "$useperlio" in
6104         $define|true|[yY]*) ;;
6105         *)      cat >&4 <<EOM
6106
6107 You are using the SOCKS proxy protocol library which means that you
6108 should also use the PerlIO layer.  You may be headed for trouble.
6109
6110 EOM
6111                 ;;
6112         esac
6113         ;;
6114 esac
6115
6116         
6117 : determine the architecture name
6118 echo " "
6119 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6120         tarch=`arch`"-$osname"
6121 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6122         if uname -m > tmparch 2>&1 ; then
6123                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6124                         -e 's/$/'"-$osname/" tmparch`
6125         else
6126                 tarch="$osname"
6127         fi
6128         $rm -f tmparch
6129 else
6130         tarch="$osname"
6131 fi
6132 case "$myarchname" in
6133 ''|"$tarch") ;;
6134 *)
6135         echo "(Your architecture name used to be $myarchname.)"
6136         archname=''
6137         ;;
6138 esac
6139 case "$targetarch" in
6140 '') ;;
6141 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6142 esac
6143 myarchname="$tarch"
6144 case "$archname" in
6145 '') dflt="$tarch";;
6146 *) dflt="$archname";;
6147 esac
6148 rp='What is your architecture name'
6149 . ./myread
6150 archname="$ans"
6151 case "$usethreads" in
6152 $define)
6153         echo "Threads selected." >&4
6154         case "$archname" in
6155         *-thread*) echo "...and architecture name already has -thread." >&4
6156                 ;;
6157         *)      archname="$archname-thread"
6158                 echo "...setting architecture name to $archname." >&4
6159                 ;;
6160         esac
6161         ;;
6162 esac
6163 case "$usemultiplicity" in
6164 $define)
6165         echo "Multiplicity selected." >&4
6166         case "$archname" in
6167         *-multi*) echo "...and architecture name already has -multi." >&4
6168                 ;;
6169         *)      archname="$archname-multi"
6170                 echo "...setting architecture name to $archname." >&4
6171                 ;;
6172         esac
6173         ;;
6174 esac
6175 case "$use64bitint$use64bitall" in
6176 *"$define"*)
6177         case "$archname64" in
6178         '')
6179                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6180                 ;;
6181         *)
6182                 case "$use64bitint" in
6183                 "$define") echo "64 bit integers selected." >&4 ;;
6184                 esac
6185                 case "$use64bitall" in
6186                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6187                 esac
6188                 case "$archname" in
6189                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6190                         ;;
6191                 *)      archname="$archname-$archname64"
6192                         echo "...setting architecture name to $archname." >&4
6193                         ;;
6194                 esac
6195                 ;;
6196         esac
6197 esac
6198 case "$uselongdouble" in
6199 $define)
6200         echo "Long doubles selected." >&4
6201         case "$longdblsize" in
6202         $doublesize)
6203                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6204                 ;;
6205         *)
6206                 case "$archname" in
6207                 *-ld*) echo "...and architecture name already has -ld." >&4
6208                         ;;
6209                 *)      archname="$archname-ld"
6210                         echo "...setting architecture name to $archname." >&4
6211                         ;;
6212                 esac
6213                 ;;
6214         esac
6215         ;;
6216 esac
6217 case "$useperlio" in
6218 $define)
6219         echo "Perlio selected." >&4
6220         ;;
6221 *)
6222         echo "Perlio not selected, using stdio." >&4
6223         case "$archname" in
6224         *-stdio*) echo "...and architecture name already has -stdio." >&4
6225                 ;;
6226         *)      archname="$archname-stdio"
6227                 echo "...setting architecture name to $archname." >&4
6228                 ;;
6229         esac
6230         ;;
6231 esac
6232
6233 : determine root of directory hierarchy where package will be installed.
6234 case "$prefix" in
6235 '')
6236         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6237         ;;
6238 *)
6239         dflt="$prefix"
6240         ;;
6241 esac
6242 $cat <<EOM
6243
6244 By default, $package will be installed in $dflt/bin, manual pages
6245 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6246 installation directories. Typically this is something like /usr/local.
6247 If you wish to have binaries under /usr/bin but other parts of the
6248 installation under /usr/local, that's ok: you will be prompted
6249 separately for each of the installation directories, the prefix being
6250 only used to set the defaults.
6251
6252 EOM
6253 fn=d~
6254 rp='Installation prefix to use?'
6255 . ./getfile
6256 oldprefix=''
6257 case "$prefix" in
6258 '') ;;
6259 *)
6260         case "$ans" in
6261         "$prefix") ;;
6262         *) oldprefix="$prefix";;
6263         esac
6264         ;;
6265 esac
6266 prefix="$ans"
6267 prefixexp="$ansexp"
6268
6269 case "$afsroot" in
6270 '')     afsroot=/afs ;;
6271 *)      afsroot=$afsroot ;;
6272 esac
6273
6274 : is AFS running?
6275 echo " "
6276 case "$afs" in
6277 $define|true)   afs=true ;;
6278 $undef|false)   afs=false ;;
6279 *)      if test -d $afsroot; then
6280                 afs=true
6281         else
6282                 afs=false
6283         fi
6284         ;;
6285 esac
6286 if $afs; then
6287         echo "AFS may be running... I'll be extra cautious then..." >&4
6288 else
6289         echo "AFS does not seem to be running..." >&4
6290 fi
6291
6292 : determine installation prefix for where package is to be installed.
6293 if $afs; then 
6294 $cat <<EOM
6295
6296 Since you are running AFS, I need to distinguish the directory in which
6297 files will reside from the directory in which they are installed (and from
6298 which they are presumably copied to the former directory by occult means).
6299
6300 EOM
6301         case "$installprefix" in
6302         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6303         *) dflt="$installprefix";;
6304         esac
6305 else
6306 $cat <<EOM
6307
6308 In some special cases, particularly when building $package for distribution,
6309 it is convenient to distinguish between the directory in which files should 
6310 be installed from the directory ($prefix) in which they 
6311 will eventually reside.  For most users, these two directories are the same.
6312
6313 EOM
6314         case "$installprefix" in
6315         '') dflt=$prefix ;;
6316         *) dflt=$installprefix;;
6317         esac
6318 fi
6319 fn=d~
6320 rp='What installation prefix should I use for installing files?'
6321 . ./getfile
6322 installprefix="$ans"
6323 installprefixexp="$ansexp"
6324
6325 : set the prefixit variable, to compute a suitable default value
6326 prefixit='case "$3" in
6327 ""|none)
6328         case "$oldprefix" in
6329         "") eval "$1=\"\$$2\"";;
6330         *)
6331                 case "$3" in
6332                 "") eval "$1=";;
6333                 none)
6334                         eval "tp=\"\$$2\"";
6335                         case "$tp" in
6336                         ""|" ") eval "$1=\"\$$2\"";;
6337                         *) eval "$1=";;
6338                         esac;;
6339                 esac;;
6340         esac;;
6341 *)
6342         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6343         case "$tp" in
6344         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6345         /*-$oldprefix/*|\~*-$oldprefix/*)
6346                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6347         *) eval "$1=\"\$$2\"";;
6348         esac;;
6349 esac'
6350
6351 : get the patchlevel
6352 echo " "
6353 echo "Getting the current patchlevel..." >&4
6354 if $test -r $rsrc/patchlevel.h;then
6355         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6356         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6357         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6358         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6359         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6360         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6361        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6362 else
6363         revision=0
6364         patchlevel=0
6365         subversion=0
6366         api_revision=0
6367         api_version=0
6368         api_subversion=0
6369         perl_patchlevel=0
6370         $echo "(You do not have patchlevel.h.  Eek.)"
6371 fi
6372 if $test -r $rsrc/.patch ; then  
6373         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6374                 perl_patchlevel=`cat $rsrc/.patch`
6375         fi
6376 fi
6377 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6378 version_patchlevel_string="version $patchlevel subversion $subversion"
6379 case "$perl_patchlevel" in
6380 0|'') ;;
6381 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6382 esac
6383
6384 $echo "(You have $package $version_patchlevel_string.)"
6385
6386 case "$osname" in
6387 dos|vms)
6388         : XXX Should be a Configure test for double-dots in filenames.
6389         version=`echo $revision $patchlevel $subversion | \
6390                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6391         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6392                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6393         ;;
6394 *)
6395         version=`echo $revision $patchlevel $subversion | \
6396                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6397         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6398                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6399         ;;
6400 esac
6401 : Special case the 5.005_xx maintenance series, which used 5.005
6402 : without any subversion label as a subdirectory in $sitelib
6403 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6404         api_versionstring='5.005'
6405 fi
6406
6407 : determine installation style
6408 : For now, try to deduce it from prefix unless it is already set.
6409 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6410 case "$installstyle" in
6411 '')     case "$prefix" in
6412                 *perl*) dflt='lib';;
6413                 *) dflt='lib/perl5' ;;
6414         esac
6415         ;;
6416 *)      dflt="$installstyle" ;;
6417 esac
6418 : Probably not worth prompting for this since we prompt for all
6419 : the directories individually, and the prompt would be too long and
6420 : confusing anyway.
6421 installstyle=$dflt
6422
6423 : determine where private library files go
6424 : Usual default is /usr/local/lib/perl5/$version.
6425 : Also allow things like /opt/perl/lib/$version, since 
6426 : /opt/perl/lib/perl5... would be redundant.
6427 : The default "style" setting is made in installstyle.U
6428 case "$installstyle" in
6429 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6430 *)       set dflt privlib lib/$version ;;
6431 esac
6432 eval $prefixit
6433 $cat <<EOM
6434
6435 There are some auxiliary files for $package that need to be put into a
6436 private library directory that is accessible by everyone.
6437
6438 EOM
6439 fn=d~+
6440 rp='Pathname where the private library files will reside?'
6441 . ./getfile
6442 privlib="$ans"
6443 privlibexp="$ansexp"
6444 : Change installation prefix, if necessary.
6445 if $test X"$prefix" != X"$installprefix"; then
6446         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6447 else
6448         installprivlib="$privlibexp"
6449 fi
6450
6451 : set the prefixup variable, to restore leading tilda escape
6452 prefixup='case "$prefixexp" in
6453 "$prefix") ;;
6454 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6455 esac'
6456
6457 : determine where public architecture dependent libraries go
6458 set archlib archlib
6459 eval $prefixit
6460 : privlib default is /usr/local/lib/$package/$version
6461 : archlib default is /usr/local/lib/$package/$version/$archname
6462 : privlib may have an optional trailing /share.
6463 tdflt=`echo $privlib | $sed 's,/share$,,'`
6464 tdflt=$tdflt/$archname
6465 case "$archlib" in
6466 '')     dflt=$tdflt
6467         ;;
6468 *)      dflt="$archlib"
6469     ;;
6470 esac
6471 $cat <<EOM
6472
6473 $spackage contains architecture-dependent library files.  If you are
6474 sharing libraries in a heterogeneous environment, you might store
6475 these files in a separate location.  Otherwise, you can just include
6476 them with the rest of the public library files.
6477
6478 EOM
6479 fn=d+~
6480 rp='Where do you want to put the public architecture-dependent libraries?'
6481 . ./getfile
6482 archlib="$ans"
6483 archlibexp="$ansexp"
6484 if $test X"$archlib" = X"$privlib"; then
6485         d_archlib="$undef"
6486 else
6487         d_archlib="$define"
6488 fi
6489 : Change installation prefix, if necessary.
6490 if $test X"$prefix" != X"$installprefix"; then
6491         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6492 else
6493         installarchlib="$archlibexp"
6494 fi
6495
6496
6497 : Binary compatibility with 5.005 is not possible for builds
6498 : with advanced features
6499 case "$usethreads$usemultiplicity" in
6500 *define*)
6501         bincompat5005="$undef"
6502         d_bincompat5005="$undef"
6503         ;;
6504 *)      $cat <<EOM
6505
6506 This version of Perl can be compiled for binary compatibility with 5.005.
6507 If you decide to do so, you will be able to continue using most of the
6508 extensions that were compiled for Perl 5.005.
6509
6510 EOM
6511         case "$bincompat5005$d_bincompat5005" in
6512         *"$undef"*) dflt=n ;;
6513         *) dflt=y ;;
6514         esac
6515         rp='Binary compatibility with Perl 5.005?'
6516         . ./myread
6517         case "$ans" in
6518         y*) val="$define" ;;
6519         *)  val="$undef" ;;
6520         esac
6521         set d_bincompat5005
6522         eval $setvar
6523         case "$d_bincompat5005" in
6524         "$define")
6525                 bincompat5005="$define"
6526                 ;;
6527         *)      bincompat5005="$undef"
6528                 d_bincompat5005="$undef"
6529                 ;;
6530         esac
6531         ;;
6532 esac
6533
6534
6535 : see if setuid scripts can be secure
6536 $cat <<EOM
6537
6538 Some kernels have a bug that prevents setuid #! scripts from being
6539 secure.  Some sites have disabled setuid #! scripts because of this.
6540
6541 First let's decide if your kernel supports secure setuid #! scripts.
6542 (If setuid #! scripts would be secure but have been disabled anyway,
6543 don't say that they are secure if asked.)
6544
6545 EOM
6546
6547 val="$undef"
6548 if $test -d /dev/fd; then
6549         echo "#!$ls" >reflect
6550         chmod +x,u+s reflect
6551         ./reflect >flect 2>&1
6552         if $contains "/dev/fd" flect >/dev/null; then
6553                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6554                 val="$define"
6555         else
6556                 $cat <<EOM
6557 If you are not sure if they are secure, I can check but I'll need a
6558 username and password different from the one you are using right now.
6559 If you don't have such a username or don't want me to test, simply
6560 enter 'none'.
6561
6562 EOM
6563                 rp='Other username to test security of setuid scripts with?'
6564                 dflt='none'
6565                 . ./myread
6566                 case "$ans" in
6567                 n|none)
6568                         case "$d_suidsafe" in
6569                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6570                                 dflt=n;;
6571                         "$undef")
6572                                 echo "Well, the $hint value is *not* secure." >&4
6573                                 dflt=n;;
6574                         *)      echo "Well, the $hint value *is* secure." >&4
6575                                 dflt=y;;
6576                         esac
6577                         ;;
6578                 *)
6579                         $rm -f reflect flect
6580                         echo "#!$ls" >reflect
6581                         chmod +x,u+s reflect
6582                         echo >flect
6583                         chmod a+w flect
6584                         echo '"su" will (probably) prompt you for '"$ans's password."
6585                         su $ans -c './reflect >flect'
6586                         if $contains "/dev/fd" flect >/dev/null; then
6587                                 echo "Okay, it looks like setuid scripts are secure." >&4
6588                                 dflt=y
6589                         else
6590                                 echo "I don't think setuid scripts are secure." >&4
6591                                 dflt=n
6592                         fi
6593                         ;;
6594                 esac
6595                 rp='Does your kernel have *secure* setuid scripts?'
6596                 . ./myread
6597                 case "$ans" in
6598                 [yY]*)  val="$define";;
6599                 *)      val="$undef";;
6600                 esac
6601         fi
6602 else
6603         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6604         echo "(That's for file descriptors, not floppy disks.)"
6605         val="$undef"
6606 fi
6607 set d_suidsafe
6608 eval $setvar
6609
6610 $rm -f reflect flect
6611
6612 : now see if they want to do setuid emulation
6613 echo " "
6614 val="$undef"
6615 case "$d_suidsafe" in
6616 "$define")
6617         val="$undef"
6618         echo "No need to emulate SUID scripts since they are secure here." >&4
6619         ;;
6620 *)
6621         $cat <<EOM
6622 Some systems have disabled setuid scripts, especially systems where
6623 setuid scripts cannot be secure.  On systems where setuid scripts have
6624 been disabled, the setuid/setgid bits on scripts are currently
6625 useless.  It is possible for $package to detect those bits and emulate
6626 setuid/setgid in a secure fashion.  This emulation will only work if
6627 setuid scripts have been disabled in your kernel.
6628
6629 EOM
6630         case "$d_dosuid" in
6631         "$define") dflt=y ;;
6632         *) dflt=n ;;
6633         esac
6634         rp="Do you want to do setuid/setgid emulation?"
6635         . ./myread
6636         case "$ans" in
6637         [yY]*)  val="$define";;
6638         *)      val="$undef";;
6639         esac
6640         ;;
6641 esac
6642 set d_dosuid
6643 eval $setvar
6644
6645 : see if this is a malloc.h system
6646 set malloc.h i_malloc
6647 eval $inhdr
6648
6649 : see if stdlib is available
6650 set stdlib.h i_stdlib
6651 eval $inhdr
6652
6653 : determine which malloc to compile in
6654 echo " "
6655 case "$usemymalloc" in
6656 [yY]*|true|$define)     dflt='y' ;;
6657 [nN]*|false|$undef)     dflt='n' ;;
6658 *)      case "$ptrsize" in
6659         4) dflt='y' ;;
6660         *) dflt='n' ;;
6661         esac
6662         ;;
6663 esac
6664 rp="Do you wish to attempt to use the malloc that comes with $package?"
6665 . ./myread
6666 usemymalloc="$ans"
6667 case "$ans" in
6668 y*|true)
6669         usemymalloc='y'
6670         mallocsrc='malloc.c'
6671         mallocobj="malloc$_o"
6672         d_mymalloc="$define"
6673         case "$libs" in
6674         *-lmalloc*)
6675                 : Remove malloc from list of libraries to use
6676                 echo "Removing unneeded -lmalloc from library list" >&4
6677                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6678                 shift
6679                 libs="$*"
6680                 echo "libs = $libs" >&4
6681                 ;;
6682         esac
6683         ;;
6684 *)
6685         usemymalloc='n'
6686         mallocsrc=''
6687         mallocobj=''
6688         d_mymalloc="$undef"
6689         ;;
6690 esac
6691
6692 : compute the return types of malloc and free
6693 echo " "
6694 $cat >malloc.c <<END
6695 #$i_malloc I_MALLOC
6696 #$i_stdlib I_STDLIB
6697 #include <stdio.h>
6698 #include <sys/types.h>
6699 #ifdef I_MALLOC
6700 #include <malloc.h>
6701 #endif
6702 #ifdef I_STDLIB
6703 #include <stdlib.h>
6704 #endif
6705 #ifdef TRY_MALLOC
6706 void *malloc();
6707 #endif
6708 #ifdef TRY_FREE
6709 void free();
6710 #endif
6711 END
6712 case "$malloctype" in
6713 '')
6714         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6715                 malloctype='void *'
6716         else
6717                 malloctype='char *'
6718         fi
6719         ;;
6720 esac
6721 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6722
6723 case "$freetype" in
6724 '')
6725         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6726                 freetype='void'
6727         else
6728                 freetype='int'
6729         fi
6730         ;;
6731 esac
6732 echo "Your system uses $freetype free(), it would seem." >&4
6733 $rm -f malloc.[co]
6734 $cat <<EOM
6735
6736 After $package is installed, you may wish to install various
6737 add-on modules and utilities.  Typically, these add-ons will
6738 be installed under $prefix with the rest
6739 of this package.  However, you may wish to install such add-ons
6740 elsewhere under a different prefix.
6741
6742 If you do not wish to put everything under a single prefix, that's
6743 ok.  You will be prompted for the individual locations; this siteprefix
6744 is only used to suggest the defaults.
6745
6746 The default should be fine for most people.
6747
6748 EOM
6749 fn=d~+
6750 rp='Installation prefix to use for add-on modules and utilities?'
6751 : XXX Here might be another good place for an installstyle setting.
6752 case "$siteprefix" in
6753 '') dflt=$prefix ;;
6754 *)  dflt=$siteprefix ;;
6755 esac
6756 . ./getfile
6757 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6758 oldsiteprefix=''
6759 case "$siteprefix" in
6760 '') ;;
6761 *)      case "$ans" in
6762         "$prefix") ;;
6763         *) oldsiteprefix="$prefix";;
6764         esac
6765         ;;
6766 esac
6767 siteprefix="$ans"
6768 siteprefixexp="$ansexp"
6769
6770 : determine where site specific libraries go.
6771 : Usual default is /usr/local/lib/perl5/site_perl/$version
6772 : The default "style" setting is made in installstyle.U
6773 : XXX No longer works with Prefixit stuff.
6774 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6775 case "$sitelib" in
6776 '') case "$installstyle" in
6777         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6778         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6779         esac
6780         ;;
6781 *)      dflt="$sitelib"
6782         ;;
6783 esac
6784 $cat <<EOM
6785
6786 The installation process will create a directory for
6787 site-specific extensions and modules.  Most users find it convenient
6788 to place all site-specific files in this directory rather than in the
6789 main distribution directory.
6790
6791 EOM
6792 fn=d~+
6793 rp='Pathname for the site-specific library files?'
6794 . ./getfile
6795 sitelib="$ans"
6796 sitelibexp="$ansexp"
6797 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6798 : Change installation prefix, if necessary.
6799 if $test X"$prefix" != X"$installprefix"; then
6800         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6801 else
6802         installsitelib="$sitelibexp"
6803 fi
6804
6805 : determine where site specific architecture-dependent libraries go.
6806 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6807 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6808 : sitelib may have an optional trailing /share.
6809 case "$sitearch" in
6810 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6811         dflt="$dflt/$archname"
6812         ;;
6813 *)      dflt="$sitearch"
6814         ;;
6815 esac
6816 set sitearch sitearch none
6817 eval $prefixit
6818 $cat <<EOM
6819
6820 The installation process will also create a directory for
6821 architecture-dependent site-specific extensions and modules.
6822
6823 EOM
6824 fn=d~+
6825 rp='Pathname for the site-specific architecture-dependent library files?'
6826 . ./getfile
6827 sitearch="$ans"
6828 sitearchexp="$ansexp"
6829 : Change installation prefix, if necessary.
6830 if $test X"$prefix" != X"$installprefix"; then
6831         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6832 else
6833         installsitearch="$sitearchexp"
6834 fi
6835
6836 $cat <<EOM
6837
6838 The installation process will also create a directory for
6839 vendor-supplied add-ons.  Vendors who supply perl with their system
6840 may find it convenient to place all vendor-supplied files in this
6841 directory rather than in the main distribution directory.  This will
6842 ease upgrades between binary-compatible maintenance versions of perl.
6843
6844 Of course you may also use these directories in whatever way you see
6845 fit.  For example, you might use them to access modules shared over a
6846 company-wide network.
6847
6848 The default answer should be fine for most people.
6849 This causes further questions about vendor add-ons to be skipped
6850 and no vendor-specific directories will be configured for perl.
6851
6852 EOM
6853 rp='Do you want to configure vendor-specific add-on directories?'
6854 case "$usevendorprefix" in
6855 define|true|[yY]*) dflt=y ;;
6856 *)      : User may have set vendorprefix directly on Configure command line.
6857         case "$vendorprefix" in
6858         ''|' ') dflt=n ;;
6859         *)      dflt=y ;;
6860         esac
6861         ;;
6862 esac
6863 . ./myread
6864 case "$ans" in
6865 [yY]*)  fn=d~+
6866         rp='Installation prefix to use for vendor-supplied add-ons?'
6867         case "$vendorprefix" in
6868         '') dflt='' ;;
6869         *)  dflt=$vendorprefix ;;
6870         esac
6871         . ./getfile
6872         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6873         oldvendorprefix=''
6874         case "$vendorprefix" in
6875         '') ;;
6876         *)      case "$ans" in
6877                 "$prefix") ;;
6878                 *) oldvendorprefix="$prefix";;
6879                 esac
6880                 ;;
6881         esac
6882         usevendorprefix="$define"
6883         vendorprefix="$ans"
6884         vendorprefixexp="$ansexp"
6885         ;;
6886 *)      usevendorprefix="$undef"
6887         vendorprefix=''
6888         vendorprefixexp=''
6889         ;;
6890 esac
6891
6892 case "$vendorprefix" in
6893 '')     d_vendorlib="$undef"
6894         vendorlib=''
6895         vendorlibexp=''
6896         ;;
6897 *)      d_vendorlib="$define"
6898         : determine where vendor-supplied modules go.
6899         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6900         case "$vendorlib" in
6901         '')
6902                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6903                 case "$installstyle" in
6904                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6905                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6906                 esac
6907                 ;;
6908         *)      dflt="$vendorlib"
6909                 ;;
6910         esac
6911         fn=d~+
6912         rp='Pathname for the vendor-supplied library files?'
6913         . ./getfile
6914         vendorlib="$ans"
6915         vendorlibexp="$ansexp"
6916         ;;
6917 esac
6918 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6919 : Change installation prefix, if necessary.
6920 if $test X"$prefix" != X"$installprefix"; then
6921         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6922 else
6923         installvendorlib="$vendorlibexp"
6924 fi
6925
6926 case "$vendorprefix" in
6927 '')     d_vendorarch="$undef"
6928         vendorarch=''
6929         vendorarchexp=''
6930         ;;
6931 *)      d_vendorarch="$define"
6932         : determine where vendor-supplied architecture-dependent libraries go.
6933         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6934         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6935         : vendorlib may have an optional trailing /share.
6936         case "$vendorarch" in
6937         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6938                 dflt="$dflt/$archname"
6939                 ;;
6940         *)      dflt="$vendorarch" ;;
6941         esac
6942         fn=d~+
6943         rp='Pathname for vendor-supplied architecture-dependent files?'
6944         . ./getfile
6945         vendorarch="$ans"
6946         vendorarchexp="$ansexp"
6947         ;;
6948 esac
6949 : Change installation prefix, if necessary.
6950 if $test X"$prefix" != X"$installprefix"; then
6951         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6952 else
6953         installvendorarch="$vendorarchexp"
6954 fi
6955
6956 : Final catch-all directories to search
6957 $cat <<EOM
6958
6959 Lastly, you can have perl look in other directories for extensions and
6960 modules in addition to those already specified.
6961 These directories will be searched after 
6962         $sitearch 
6963         $sitelib 
6964 EOM
6965 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6966 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6967 echo ' '
6968 case "$otherlibdirs" in
6969 ''|' ') dflt='none' ;;
6970 *)      dflt="$otherlibdirs" ;;
6971 esac
6972 $cat <<EOM
6973 Enter a colon-separated set of extra paths to include in perl's @INC
6974 search path, or enter 'none' for no extra paths.
6975
6976 EOM
6977
6978 rp='Colon-separated list of additional directories for perl to search?'
6979 . ./myread
6980 case "$ans" in
6981 ' '|''|none)    otherlibdirs=' ' ;;     
6982 *)      otherlibdirs="$ans" ;;
6983 esac
6984 case "$otherlibdirs" in
6985 ' ') val=$undef ;;
6986 *)      val=$define ;;
6987 esac
6988 set d_perl_otherlibdirs
6989 eval $setvar
6990
6991 : Cruising for prototypes
6992 echo " "
6993 echo "Checking out function prototypes..." >&4
6994 $cat >prototype.c <<'EOCP'
6995 int main(int argc, char *argv[]) {
6996         exit(0);}
6997 EOCP
6998 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6999         echo "Your C compiler appears to support function prototypes."
7000         val="$define"
7001 else
7002         echo "Your C compiler doesn't seem to understand function prototypes."
7003         val="$undef"
7004 fi
7005 set prototype
7006 eval $setvar
7007 $rm -f prototype*
7008
7009 case "$prototype" in
7010 "$define") ;;
7011 *)      ansi2knr='ansi2knr'
7012         echo " "
7013         cat <<EOM >&4
7014
7015 $me:  FATAL ERROR:
7016 This version of $package can only be compiled by a compiler that 
7017 understands function prototypes.  Unfortunately, your C compiler 
7018         $cc $ccflags
7019 doesn't seem to understand them.  Sorry about that.
7020
7021 If GNU cc is available for your system, perhaps you could try that instead.  
7022
7023 Eventually, we hope to support building Perl with pre-ANSI compilers.
7024 If you would like to help in that effort, please contact <perlbug@perl.org>.
7025
7026 Aborting Configure now.
7027 EOM
7028         exit 2
7029         ;;
7030 esac
7031
7032 : determine where public executables go
7033 echo " "
7034 set dflt bin bin
7035 eval $prefixit
7036 fn=d~
7037 rp='Pathname where the public executables will reside?'
7038 . ./getfile
7039 if $test "X$ansexp" != "X$binexp"; then
7040         installbin=''
7041 fi
7042 bin="$ans"
7043 binexp="$ansexp"
7044 : Change installation prefix, if necessary.
7045 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7046 if $test X"$prefix" != X"$installprefix"; then
7047         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7048 else
7049         installbin="$binexp"
7050 fi
7051
7052 echo " "
7053 case "$extras" in
7054 '') dflt='n';;
7055 *) dflt='y';;
7056 esac
7057 cat <<EOM
7058 Perl can be built with extra modules or bundles of modules which
7059 will be fetched from the CPAN and installed alongside Perl.
7060
7061 Notice that you will need access to the CPAN; either via the Internet,
7062 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7063 be asked later to configure the CPAN.pm module which will in turn do
7064 the installation of the rest of the extra modules or bundles.)
7065
7066 Notice also that if the modules require any external software such as
7067 libraries and headers (the libz library and the zlib.h header for the
7068 Compress::Zlib module, for example) you MUST have any such software
7069 already installed, this configuration process will NOT install such
7070 things for you.
7071
7072 If this doesn't make any sense to you, just accept the default '$dflt'.
7073 EOM
7074 rp='Install any extra modules (y or n)?'
7075 . ./myread
7076 case "$ans" in
7077 y|Y)
7078         cat <<EOM
7079
7080 Please list any extra modules or bundles to be installed from CPAN,
7081 with spaces between the names.  The names can be in any format the
7082 'install' command of CPAN.pm will understand.  (Answer 'none',
7083 without the quotes, to install no extra modules or bundles.)
7084 EOM
7085         rp='Extras?'
7086         dflt="$extras"
7087         . ./myread
7088         extras="$ans"
7089 esac
7090 case "$extras" in
7091 ''|'none')
7092         val=''
7093         $rm -f ../extras.lst
7094         ;;
7095 *)      echo "(Saving the list of extras for later...)"
7096         echo "$extras" > ../extras.lst
7097         val="'$extras'"
7098         ;;
7099 esac
7100 set extras
7101 eval $setvar
7102 echo " "
7103
7104 : Find perl5.005 or later.
7105 echo "Looking for a previously installed perl5.005 or later... "
7106 case "$perl5" in
7107 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7108                 : Check if this perl is recent and can load a simple module
7109                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7110                         perl5=$tdir/perl
7111                         break;
7112                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7113                         perl5=$tdir/perl5
7114                         break;
7115                 fi
7116         done
7117         ;;
7118 *)      perl5="$perl5"
7119         ;;
7120 esac
7121 case "$perl5" in
7122 '')     echo "None found.  That's ok.";;
7123 *)      echo "Using $perl5." ;;
7124 esac
7125
7126 : Determine list of previous versions to include in @INC
7127 $cat > getverlist <<EOPL
7128 #!$perl5 -w
7129 use File::Basename;
7130 \$api_versionstring = "$api_versionstring";
7131 \$version = "$version";
7132 \$stem = "$sitelib_stem";
7133 \$archname = "$archname";
7134 EOPL
7135         $cat >> getverlist <<'EOPL'
7136 # Can't have leading @ because metaconfig interprets it as a command!
7137 ;@inc_version_list=();
7138 # XXX Redo to do opendir/readdir? 
7139 if (-d $stem) {
7140     chdir($stem);
7141     ;@candidates = glob("5.*");
7142 }
7143 else {
7144     ;@candidates = ();
7145 }
7146
7147 # XXX ToDo:  These comparisons must be reworked when two-digit
7148 # subversions come along, so that 5.7.10 compares as greater than
7149 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7150 # widespread that we can use the built-in version vectors rather
7151 # than reinventing them here.  For 5.6.0, however, we must
7152 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7153 foreach $d (@candidates) {
7154     if ($d lt $version) {
7155         if ($d ge $api_versionstring) {
7156             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7157         }
7158         elsif ($d ge "5.005") {
7159             unshift(@inc_version_list, grep { -d } $d);
7160         }
7161     }
7162     else {
7163         # Skip newer version.  I.e. don't look in
7164         # 5.7.0 if we're installing 5.6.1.
7165     }
7166 }
7167
7168 if (@inc_version_list) {
7169     print join(' ', @inc_version_list);
7170 }
7171 else {
7172     # Blank space to preserve value for next Configure run.
7173     print " ";
7174 }
7175 EOPL
7176 chmod +x getverlist
7177 case "$inc_version_list" in
7178 '')     if test -x "$perl5$exe_ext"; then
7179                 dflt=`$perl5 getverlist`
7180         else
7181                 dflt='none'
7182         fi
7183         ;;
7184 $undef) dflt='none' ;;
7185 *)  eval dflt=\"$inc_version_list\" ;;
7186 esac
7187 case "$dflt" in
7188 ''|' ') dflt=none ;;
7189 esac
7190 case "$dflt" in
7191 5.005) case "$bincompat5005" in
7192        $define|true|[yY]*) ;;
7193        *) dflt=none ;;
7194        esac
7195        ;;
7196 esac
7197 $cat <<'EOM'
7198
7199 In order to ease the process of upgrading, this version of perl 
7200 can be configured to use modules built and installed with earlier 
7201 versions of perl that were installed under $prefix.  Specify here
7202 the list of earlier versions that this version of perl should check.
7203 If Configure detected no earlier versions of perl installed under
7204 $prefix, then the list will be empty.  Answer 'none' to tell perl
7205 to not search earlier versions.
7206
7207 The default should almost always be sensible, so if you're not sure,
7208 just accept the default.
7209 EOM
7210
7211 rp='List of earlier versions to include in @INC?'
7212 . ./myread
7213 case "$ans" in
7214 [Nn]one|''|' ') inc_version_list=' ' ;;
7215 *) inc_version_list="$ans" ;;
7216 esac
7217 case "$inc_version_list" in
7218 ''|' ') 
7219         inc_version_list_init='0';;
7220 *)      inc_version_list_init=`echo $inc_version_list |
7221                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7222         ;;
7223 esac
7224 $rm -f getverlist
7225
7226 : determine whether to install perl also as /usr/bin/perl
7227
7228 echo " "
7229 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7230         $cat <<EOM
7231 Many scripts expect perl to be installed as /usr/bin/perl.
7232 I can install the perl you are about to compile also as /usr/bin/perl
7233 (in addition to $installbin/perl).
7234 EOM
7235         case "$installusrbinperl" in
7236         "$undef"|[nN]*) dflt='n';;
7237         *)              dflt='y';;
7238         esac
7239         rp="Do you want to install perl as /usr/bin/perl?"
7240         . ./myread
7241         case "$ans" in
7242         [yY]*)  val="$define";;
7243         *)      val="$undef" ;;
7244         esac
7245 else
7246         val="$undef"
7247 fi
7248 set installusrbinperl
7249 eval $setvar
7250
7251 : see if dld is available
7252 set dld.h i_dld
7253 eval $inhdr
7254
7255 : see if dlopen exists
7256 xxx_runnm="$runnm"
7257 runnm=false
7258 set dlopen d_dlopen
7259 eval $inlibc
7260 runnm="$xxx_runnm"
7261
7262 : determine which dynamic loading, if any, to compile in
7263 echo " "
7264 dldir="ext/DynaLoader"
7265 case "$usedl" in
7266 $define|y|true)
7267         dflt='y'
7268         usedl="$define"
7269         ;;
7270 $undef|n|false)
7271         dflt='n'
7272         usedl="$undef"
7273         ;;
7274 *) 
7275         dflt='n'
7276         case "$d_dlopen" in
7277             $define) dflt='y' ;;
7278         esac
7279         case "$i_dld" in
7280             $define) dflt='y' ;;
7281         esac
7282         : Does a dl_xxx.xs file exist for this operating system
7283         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7284         ;;
7285 esac
7286 rp="Do you wish to use dynamic loading?"
7287 . ./myread
7288 usedl="$ans"
7289 case "$ans" in
7290 y*) usedl="$define"
7291         case "$dlsrc" in
7292         '')
7293                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7294                         dflt="$dldir/dl_${osname}.xs"
7295                 elif $test "$d_dlopen" = "$define" ; then
7296                         dflt="$dldir/dl_dlopen.xs"
7297                 elif $test "$i_dld" = "$define" ; then
7298                         dflt="$dldir/dl_dld.xs"
7299                 else
7300                         dflt=''
7301                 fi
7302                 ;;
7303         *)      dflt="$dldir/$dlsrc"
7304                 ;;
7305         esac
7306     echo "The following dynamic loading files are available:"
7307         : Can not go over to $dldir because getfile has path hard-coded in.
7308         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7309         rp="Source file to use for dynamic loading"
7310         fn="fne"
7311         gfpth="$src"
7312         . ./getfile
7313         usedl="$define"
7314         : emulate basename
7315         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7316
7317         $cat << EOM
7318
7319 Some systems may require passing special flags to $cc -c to
7320 compile modules that will be used to create a shared library.
7321 To use no flags, say "none".
7322
7323 EOM
7324     case "$cccdlflags" in
7325     '') case "$gccversion" in
7326                 '') case "$osname" in
7327                         hpux)   dflt='+z' ;;
7328                         next)   dflt='none' ;;
7329                         irix*)  dflt='-KPIC' ;;
7330                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7331                         sunos)  dflt='-pic' ;;
7332                         *)      dflt='none' ;;
7333                     esac
7334                         ;;
7335                 *)  case "$osname" in
7336                         darwin) dflt='none' ;;
7337                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7338                         *)      dflt='-fpic' ;;
7339                     esac ;;
7340             esac ;;
7341         ' ') dflt='none' ;;
7342     *)  dflt="$cccdlflags" ;;
7343     esac
7344     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7345     . ./myread
7346     case "$ans" in
7347     none) cccdlflags=' ' ;;
7348     *) cccdlflags="$ans" ;;
7349     esac
7350
7351     cat << EOM
7352
7353 Some systems use ld to create libraries that can be dynamically loaded,
7354 while other systems (such as those using ELF) use $cc.
7355
7356 EOM
7357         case "$ld" in
7358         '')     $cat >try.c <<'EOM'
7359 /* Test for whether ELF binaries are produced */
7360 #include <fcntl.h>
7361 #include <stdlib.h>
7362 int main() {
7363         char b[4];
7364         int i = open("a.out",O_RDONLY);
7365         if(i == -1) 
7366                 exit(1); /* fail */
7367         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7368                 exit(0); /* succeed (yes, it's ELF) */
7369         else
7370                 exit(1); /* fail */
7371 }
7372 EOM
7373                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7374                         cat <<EOM
7375 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7376 EOM
7377                         dflt="$cc"
7378                 else
7379                         echo "I'll use ld to build dynamic libraries."
7380                         dflt='ld'
7381                 fi
7382                 rm -f try.c a.out
7383                 ;;
7384         *)      dflt="$ld"
7385                 ;;
7386         esac
7387
7388     rp="What command should be used to create dynamic libraries?"
7389     . ./myread
7390         ld="$ans"
7391
7392     cat << EOM
7393
7394 Some systems may require passing special flags to $ld to create a
7395 library that can be dynamically loaded.  If your ld flags include
7396 -L/other/path options to locate libraries outside your loader's normal
7397 search path, you may need to specify those -L options here as well.  To
7398 use no flags, say "none".
7399
7400 EOM
7401     case "$lddlflags" in
7402     '') case "$osname" in
7403                         beos) dflt='-nostart' ;;
7404                         hpux) dflt='-b';
7405                               case "$gccversion" in
7406                               '') dflt="$dflt +vnocompatwarnings" ;;
7407                               esac
7408                               ;;        
7409                         linux|irix*)    dflt='-shared' ;;
7410                         next)  dflt='none' ;;
7411                         solaris) dflt='-G' ;;
7412                         sunos) dflt='-assert nodefinitions' ;;
7413                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7414                 *)     dflt='none' ;;
7415                         esac
7416                         ;;
7417     *) dflt="$lddlflags" ;;
7418     esac
7419
7420         : Try to guess additional flags to pick up local libraries.
7421         : Be careful not to append to a plain 'none'
7422         case "$dflt" in
7423         none) dflt='' ;;
7424         esac
7425         for thisflag in $ldflags; do
7426                 case "$thisflag" in
7427                 -L*|-R*|-Wl,-R*)
7428                         case " $dflt " in
7429                         *" $thisflag "*) ;;
7430                         *) dflt="$dflt $thisflag" ;;
7431                         esac
7432                         ;;
7433                 esac
7434         done
7435
7436         case "$dflt" in
7437         ''|' ') dflt='none' ;;
7438         esac
7439
7440     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7441     . ./myread
7442     case "$ans" in
7443     none) lddlflags=' ' ;;
7444     *) lddlflags="$ans" ;;
7445     esac
7446
7447         cat <<EOM
7448
7449 Some systems may require passing special flags to $cc to indicate that
7450 the resulting executable will use dynamic linking.  To use no flags,
7451 say "none".
7452
7453 EOM
7454     case "$ccdlflags" in
7455     '') case "$osname" in
7456                 hpux)   dflt='-Wl,-E' ;;
7457                 linux)  dflt='-rdynamic' ;;
7458                 next)   dflt='none' ;;
7459                 sunos)  dflt='none' ;;
7460                 *)      dflt='none' ;;
7461             esac ;;
7462     ' ')  dflt='none' ;;
7463     *)  dflt="$ccdlflags" ;;
7464     esac
7465     rp="Any special flags to pass to $cc to use dynamic linking?"
7466     . ./myread
7467     case "$ans" in
7468     none) ccdlflags=' ' ;;
7469     *) ccdlflags="$ans" ;;
7470     esac
7471     ;;
7472 *)  usedl="$undef"
7473         ld='ld'
7474     dlsrc='dl_none.xs'
7475     lddlflags=''
7476     ccdlflags=''
7477     ;;
7478 esac
7479
7480 also=''
7481 case "$usedl" in
7482 $undef)
7483         # No dynamic loading being used, so don't bother even to prompt.
7484         useshrplib='false'
7485         ;;
7486 *)      case "$useshrplib" in
7487         '')     case "$osname" in
7488                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7489                         dflt=y
7490                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7491                         ;;
7492                 next*)
7493                         case "$osvers" in
7494                         4*)     dflt=y
7495                                 also='Building a shared libperl is needed for MAB support.'
7496                                 ;;
7497                         *)      dflt=n
7498                                 ;;
7499                         esac
7500                         ;;
7501                 *)      dflt=n
7502                         ;;
7503                 esac
7504                 ;;
7505         $define|true|[Yy]*)
7506                 dflt=y
7507                 ;;
7508         *)      dflt=n
7509                 ;;
7510         esac
7511         $cat << EOM
7512
7513 The perl executable is normally obtained by linking perlmain.c with
7514 libperl${_a}, any static extensions (usually just DynaLoader), and
7515 any other libraries needed on this system (such as -lm, etc.).  Since
7516 your system supports dynamic loading, it is probably possible to build
7517 a shared libperl.$so.  If you will have more than one executable linked
7518 to libperl.$so, this will significantly reduce the size of each
7519 executable, but it may have a noticeable affect on performance.  The
7520 default is probably sensible for your system.
7521 $also
7522
7523 EOM
7524         rp="Build a shared libperl.$so (y/n)"
7525         . ./myread
7526         case "$ans" in
7527         true|$define|[Yy]*)
7528                 useshrplib='true'  ;;
7529         *)      useshrplib='false' ;;
7530         esac
7531         ;;
7532 esac
7533
7534 case "$useshrplib" in
7535 true)
7536         case "$libperl" in
7537         '')
7538                 # Figure out a good name for libperl.so.  Since it gets stored in
7539                 # a version-specific architecture-dependent library, the version
7540                 # number isn't really that important, except for making cc/ld happy.
7541                 #
7542                 # A name such as libperl.so.3.1
7543                 majmin="libperl.$so.$patchlevel.$subversion"
7544                 # A name such as libperl.so.301
7545                 majonly=`echo $patchlevel $subversion |
7546                         $awk '{printf "%d%02d", $1, $2}'`
7547                 majonly=libperl.$so.$majonly
7548                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7549                 # rely on figuring it out from the naming of libc.
7550                 case "${osname}${osvers}" in
7551                 next4*)
7552                         dflt=libperl.5.$so
7553                         # XXX How handle the --version stuff for MAB?
7554                         ;;
7555                 linux*)  # ld won't link with a bare -lperl otherwise.
7556                         dflt=libperl.$so
7557                         ;;
7558                 cygwin*) # include version
7559                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7560                         ;;
7561                 *)      # Try to guess based on whether libc has major.minor.
7562                         case "$libc" in
7563                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7564                         *libc.$so.[0-9]*) dflt=$majonly ;;
7565                         *)      dflt=libperl.$so ;;
7566                         esac
7567                         ;;
7568                 esac
7569                 ;;
7570         *)      dflt=$libperl
7571                 ;;
7572         esac
7573         cat << EOM
7574
7575 I need to select a good name for the shared libperl.  If your system uses
7576 library names with major and minor numbers, then you might want something
7577 like $majmin.  Alternatively, if your system uses a single version
7578 number for shared libraries, then you might want to use $majonly.
7579 Or, your system might be quite happy with a simple libperl.$so.
7580
7581 Since the shared libperl will get installed into a version-specific
7582 architecture-dependent directory, the version number of the shared perl
7583 library probably isn't important, so the default should be o.k.
7584
7585 EOM
7586         rp='What name do you want to give to the shared libperl?'
7587         . ./myread
7588         libperl=$ans
7589         echo "Ok, I'll use $libperl"
7590         ;;
7591 *)
7592         libperl="libperl${_a}"
7593         ;;
7594 esac
7595
7596 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7597 case "$shrpdir" in
7598 '') ;;
7599 *)      $cat >&4 <<EOM
7600 WARNING:  Use of the shrpdir variable for the installation location of
7601 the shared $libperl is not supported.  It was never documented and
7602 will not work in this version.  Let me (perlbug@perl.org)
7603 know of any problems this may cause.
7604
7605 EOM
7606         case "$shrpdir" in
7607         "$archlibexp/CORE")
7608                 $cat >&4 <<EOM
7609 But your current setting of $shrpdir is
7610 the default anyway, so it's harmless.
7611 EOM
7612                 ;;
7613         *)
7614                 $cat >&4 <<EOM
7615 Further, your current attempted setting of $shrpdir
7616 conflicts with the value of $archlibexp/CORE
7617 that installperl will use.
7618 EOM
7619                 ;;
7620         esac
7621         ;;
7622 esac
7623
7624 # How will the perl executable find the installed shared $libperl?
7625 # Add $xxx to ccdlflags.
7626 # If we can't figure out a command-line option, use $shrpenv to
7627 # set env LD_RUN_PATH.  The main perl makefile uses this.
7628 shrpdir=$archlibexp/CORE
7629 xxx=''
7630 tmp_shrpenv=''
7631 if "$useshrplib"; then
7632     case "$osname" in 
7633         aix)
7634                 # We'll set it in Makefile.SH...
7635                 ;;
7636         solaris)
7637                 xxx="-R $shrpdir"
7638                 ;;
7639         freebsd|netbsd)
7640                 xxx="-Wl,-R$shrpdir"
7641                 ;;
7642         linux|irix*|dec_osf)
7643                 xxx="-Wl,-rpath,$shrpdir"
7644                 ;;
7645         next)
7646                 # next doesn't like the default...
7647                 ;;
7648         beos)
7649                 # beos doesn't like the default, either.
7650                 ;;
7651         hpux*)
7652                 # hpux doesn't like the default, either.
7653                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7654                 ;;
7655         *)
7656                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7657                 ;;
7658         esac
7659         case "$xxx" in
7660         '') ;;
7661         *)      
7662                 # Only add $xxx if it isn't already in ccdlflags.
7663                 case " $ccdlflags " in
7664                 *" $xxx "*)     ;;
7665                 *)      ccdlflags="$ccdlflags $xxx"
7666                         cat <<EOM >&4
7667
7668 Adding $xxx to the flags
7669 passed to $ld so that the perl executable will find the 
7670 installed shared $libperl.
7671
7672 EOM
7673                         ;;
7674                 esac
7675                 ;;
7676         esac
7677 fi
7678 # Fix ccdlflags in AIX for building external extensions.
7679 # (For building Perl itself bare -bE:perl.exp is needed,
7680 #  Makefile.SH takes care of this.)
7681 case "$osname" in
7682 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7683 esac
7684 # Respect a hint or command-line value.
7685 case "$shrpenv" in
7686 '') shrpenv="$tmp_shrpenv" ;;
7687 esac
7688 case "$ldlibpthname" in
7689 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7690 none)   ldlibpthname='' ;;
7691 esac
7692
7693 : determine where manual pages are on this system
7694 echo " "
7695 case "$sysman" in
7696 '') 
7697         syspath='/usr/share/man/man1 /usr/man/man1'
7698         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7699         syspath="$syspath /usr/man/u_man/man1"
7700         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7701         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7702         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7703         sysman=`./loc . /usr/man/man1 $syspath`
7704         ;;
7705 esac
7706 if $test -d "$sysman"; then
7707         echo "System manual is in $sysman." >&4
7708 else
7709         echo "Could not find manual pages in source form." >&4
7710 fi
7711
7712 : determine where manual pages go
7713 set man1dir man1dir none
7714 eval $prefixit
7715 $cat <<EOM
7716
7717 $spackage has manual pages available in source form.
7718 EOM
7719 case "$nroff" in
7720 nroff)
7721         echo "However, you don't have nroff, so they're probably useless to you."
7722         case "$man1dir" in
7723         '') man1dir="none";;
7724         esac;;
7725 esac
7726 echo "If you don't want the manual sources installed, answer 'none'."
7727 case "$man1dir" in
7728 ' ') dflt=none
7729         ;;
7730 '')
7731         lookpath="$prefixexp/share/man/man1"
7732         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7733         lookpath="$lookpath $prefixexp/man/p_man/man1"
7734         lookpath="$lookpath $prefixexp/man/u_man/man1"
7735         lookpath="$lookpath $prefixexp/man/man.1"
7736         case "$sysman" in
7737         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7738         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7739         esac
7740         set dflt
7741         eval $prefixup
7742         ;;
7743 *)  dflt="$man1dir"
7744         ;;
7745 esac
7746 echo " "
7747 fn=dn+~
7748 rp="Where do the main $spackage manual pages (source) go?"
7749 . ./getfile
7750 if $test "X$man1direxp" != "X$ansexp"; then
7751         installman1dir=''
7752 fi
7753 man1dir="$ans"
7754 man1direxp="$ansexp"
7755 case "$man1dir" in
7756 '')     man1dir=' '
7757         installman1dir='';;
7758 esac
7759
7760 : Change installation prefix, if necessary.
7761 if $test X"$prefix" != X"$installprefix"; then
7762         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7763 else
7764         installman1dir="$man1direxp"
7765 fi
7766
7767 : What suffix to use on installed man pages
7768
7769 case "$man1dir" in
7770 ' ')
7771         man1ext='0'
7772         ;;
7773 *)
7774         rp="What suffix should be used for the main $spackage man pages?"
7775         case "$man1ext" in
7776         '')     case "$man1dir" in
7777                 *1)  dflt=1 ;;
7778                 *1p) dflt=1p ;;
7779                 *1pm) dflt=1pm ;;
7780                 *l) dflt=l;;
7781                 *n) dflt=n;;
7782                 *o) dflt=o;;
7783                 *p) dflt=p;;
7784                 *C) dflt=C;;
7785                 *L) dflt=L;;
7786                 *L1) dflt=L1;;
7787                 *) dflt=1;;
7788                 esac
7789                 ;;
7790         *)      dflt="$man1ext";;
7791         esac
7792         . ./myread
7793         man1ext="$ans"
7794         ;;
7795 esac
7796
7797 : see if we can have long filenames
7798 echo " "
7799 first=123456789abcdef
7800 $rm -f $first
7801 if (echo hi >$first) 2>/dev/null; then
7802         if $test -f 123456789abcde; then
7803                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7804                 val="$undef"
7805         else
7806                 echo 'You can have filenames longer than 14 characters.'>&4
7807                 val="$define"
7808         fi
7809 else
7810         $cat <<'EOM'
7811 You can't have filenames longer than 14 chars.
7812 You can't even think about them!
7813 EOM
7814         val="$undef"
7815 fi 
7816 set d_flexfnam
7817 eval $setvar
7818 $rm -rf 123456789abcde*
7819
7820 : determine where library module manual pages go
7821 set man3dir man3dir none
7822 eval $prefixit
7823 $cat <<EOM
7824
7825 $spackage has manual pages for many of the library modules.
7826 EOM
7827
7828 case "$nroff" in
7829 nroff)
7830         $cat <<'EOM'
7831 However, you don't have nroff, so they're probably useless to you.
7832 EOM
7833         case "$man3dir" in
7834         '') man3dir="none";;
7835         esac;;
7836 esac
7837
7838 case "$d_flexfnam" in
7839 undef)
7840         $cat <<'EOM'
7841 However, your system can't handle the long file names like File::Basename.3. 
7842 EOM
7843         case "$man3dir" in
7844         '') man3dir="none";;
7845         esac;;
7846 esac
7847
7848 echo "If you don't want the manual sources installed, answer 'none'."
7849 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7850 case "$man3dir" in
7851 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7852         if $test -d "$privlib/man/man3"; then
7853                 cat <<EOM >&4
7854
7855 WARNING:  Previous versions of perl installed man3 pages into
7856 $privlib/man/man3.  This version will suggest a 
7857 new default of $dflt.  
7858 EOM
7859                 tdflt=$dflt
7860                 dflt='n'
7861                 rp='Do you wish to preserve the old behavior?(y/n)'
7862                 . ./myread
7863                 case "$ans" in
7864                 y*) dflt="$privlib/man/man3" ;;
7865                 *)  dflt=$tdflt ;;
7866                 esac
7867     fi
7868         ;;
7869 *)      dflt="$man3dir" ;;
7870 esac
7871 case "$dflt" in
7872 ' ') dflt=none ;;
7873 esac
7874 echo " "
7875 fn=dn+~
7876 rp="Where do the $package library man pages (source) go?"
7877 . ./getfile
7878 man3dir="$ans"
7879 man3direxp="$ansexp"
7880 case "$man3dir" in
7881 '')     man3dir=' '
7882         installman3dir='';;
7883 esac
7884
7885 : Change installation prefix, if necessary.
7886 if $test X"$prefix" != X"$installprefix"; then
7887         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7888 else
7889         installman3dir="$man3direxp"
7890 fi
7891
7892 : What suffix to use on installed man pages
7893 case "$man3dir" in
7894 ' ')
7895         man3ext='0'
7896         ;;
7897 *)
7898         rp="What suffix should be used for the $package library man pages?"
7899         case "$man3ext" in
7900         '')     case "$man3dir" in
7901                 *3)  dflt=3 ;;
7902                 *3p) dflt=3p ;;
7903                 *3pm) dflt=3pm ;;
7904                 *l) dflt=l;;
7905                 *n) dflt=n;;
7906                 *o) dflt=o;;
7907                 *p) dflt=p;;
7908                 *C) dflt=C;;
7909                 *L) dflt=L;;
7910                 *L3) dflt=L3;;
7911                 *) dflt=3;;
7912                 esac
7913                 ;;
7914         *)      dflt="$man3ext";;
7915         esac
7916         . ./myread
7917         man3ext="$ans"
7918         ;;
7919 esac
7920
7921 : see if we have to deal with yellow pages, now NIS.
7922 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7923         if $test -f /usr/etc/nibindd; then
7924                 echo " "
7925                 echo "I'm fairly confident you're on a NeXT."
7926                 echo " "
7927                 rp='Do you get the hosts file via NetInfo?'
7928                 dflt=y
7929                 case "$hostcat" in
7930                 nidump*) ;;
7931                 '') ;;
7932                 *) dflt=n;;
7933                 esac
7934                 . ./myread
7935                 case "$ans" in
7936                 y*) hostcat='nidump hosts .';;
7937                 *)      case "$hostcat" in
7938                         nidump*) hostcat='';;
7939                         esac
7940                         ;;
7941                 esac
7942         fi
7943         case "$hostcat" in
7944         nidump*) ;;
7945         *)
7946                 case "$hostcat" in
7947                 *ypcat*) dflt=y;;
7948                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7949                                 dflt=y
7950                         else
7951                                 dflt=n
7952                         fi;;
7953                 *) dflt=n;;
7954                 esac
7955                 echo " "
7956                 rp='Are you getting the hosts file via yellow pages?'
7957                 . ./myread
7958                 case "$ans" in
7959                 y*) hostcat='ypcat hosts';;
7960                 *) hostcat='cat /etc/hosts';;
7961                 esac
7962                 ;;
7963         esac
7964 fi
7965 case "$hostcat" in
7966 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7967 esac
7968 case "$groupcat" in
7969 '') test -f /etc/group && groupcat='cat /etc/group';;
7970 esac
7971 case "$passcat" in
7972 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7973 esac
7974
7975 : now get the host name
7976 echo " "
7977 echo "Figuring out host name..." >&4
7978 case "$myhostname" in
7979 '') cont=true
7980         echo 'Maybe "hostname" will work...'
7981         if tans=`sh -c hostname 2>&1` ; then
7982                 myhostname=$tans
7983                 phostname=hostname
7984                 cont=''
7985         fi
7986         ;;
7987 *) cont='';;
7988 esac
7989 if $test "$cont"; then
7990         if ./xenix; then
7991                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7992                 if tans=`cat /etc/systemid 2>&1` ; then
7993                         myhostname=$tans
7994                         phostname='cat /etc/systemid'
7995                         echo "Whadyaknow.  Xenix always was a bit strange..."
7996                         cont=''
7997                 fi
7998         elif $test -r /etc/systemid; then
7999                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8000         fi
8001 fi
8002 if $test "$cont"; then
8003         echo 'No, maybe "uuname -l" will work...'
8004         if tans=`sh -c 'uuname -l' 2>&1` ; then
8005                 myhostname=$tans
8006                 phostname='uuname -l'
8007         else
8008                 echo 'Strange.  Maybe "uname -n" will work...'
8009                 if tans=`sh -c 'uname -n' 2>&1` ; then
8010                         myhostname=$tans
8011                         phostname='uname -n'
8012                 else
8013                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8014                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8015                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8016                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8017                         else
8018                                 case "$myhostname" in
8019                                 '') echo "Does this machine have an identity crisis or something?"
8020                                         phostname='';;
8021                                 *)
8022                                         echo "Well, you said $myhostname before..."
8023                                         phostname='echo $myhostname';;
8024                                 esac
8025                         fi
8026                 fi
8027         fi
8028 fi
8029 : you do not want to know about this
8030 set $myhostname
8031 myhostname=$1
8032
8033 : verify guess
8034 if $test "$myhostname" ; then
8035         dflt=y
8036         rp='Your host name appears to be "'$myhostname'".'" Right?"
8037         . ./myread
8038         case "$ans" in
8039         y*) ;;
8040         *) myhostname='';;
8041         esac
8042 fi
8043
8044 : bad guess or no guess
8045 while $test "X$myhostname" = X ; do
8046         dflt=''
8047         rp="Please type the (one word) name of your host:"
8048         . ./myread
8049         myhostname="$ans"
8050 done
8051
8052 : translate upper to lower if necessary
8053 case "$myhostname" in
8054 *[A-Z]*)
8055         echo "(Normalizing case in your host name)"
8056         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8057         ;;
8058 esac
8059
8060 case "$myhostname" in
8061 *.*)
8062         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8063         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8064         echo "(Trimming domain name from host name--host name is now $myhostname)"
8065         ;;
8066 *) case "$mydomain" in
8067         '')
8068                 {
8069                         test "X$hostcat" = "Xypcat hosts" &&
8070                         ypmatch "$myhostname" hosts 2>/dev/null |\
8071                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8072                         $test -s hosts
8073                 } || {
8074                         test "X$hostcat" != "X" &&
8075                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8076                                         /[       ]$myhostname[  . ]/p" > hosts
8077                 }
8078                 tmp_re="[       . ]"
8079                 if $test -f hosts; then
8080                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8081                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8082                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8083                                 hosts | $sort | $uniq | \
8084                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8085                         case `$echo X$dflt` in
8086                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8087                                 dflt=.
8088                                 ;;
8089                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8090                                 ;;
8091                         esac
8092                 else
8093                         echo "(I cannot locate a hosts database anywhere)"
8094                         dflt=.
8095                 fi
8096                 case "$dflt" in
8097                 .)
8098                         tans=`./loc resolv.conf X /etc /usr/etc`
8099                         if $test -f "$tans"; then
8100                                 echo "(Attempting domain name extraction from $tans)"
8101                                 dflt=.`$sed -n -e 's/   / /g' \
8102                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8103                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8104                                 case "$dflt" in
8105                                 .) dflt=.`$sed -n -e 's/        / /g' \
8106                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8107                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8108                                         ;;
8109                                 esac
8110                         fi
8111                         ;;
8112                 esac
8113                 case "$dflt" in
8114                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8115                         dflt=.`sh -c domainname 2>/dev/null`
8116                         case "$dflt" in
8117                         '') dflt='.';;
8118                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8119                         esac
8120                         ;;
8121                 esac
8122                 case "$dflt$osname" in
8123                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8124                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8125                         ;;
8126                 esac
8127                 case "$dflt" in
8128                 .) echo "(Lost all hope -- silly guess then)"
8129                         dflt='.uucp'
8130                         ;;
8131                 esac
8132                 $rm -f hosts
8133                 ;;
8134         *) dflt="$mydomain";;
8135         esac;;
8136 esac
8137 echo " "
8138 rp="What is your domain name?"
8139 . ./myread
8140 tans="$ans"
8141 case "$ans" in
8142 '') ;;
8143 .*) ;;
8144 *) tans=".$tans";;
8145 esac
8146 mydomain="$tans"
8147
8148 : translate upper to lower if necessary
8149 case "$mydomain" in
8150 *[A-Z]*)
8151         echo "(Normalizing case in your domain name)"
8152         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8153         ;;
8154 esac
8155
8156 : a little sanity check here
8157 case "$phostname" in
8158 '') ;;
8159 *)
8160         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8161         $myhostname$mydomain|$myhostname) ;;
8162         *)
8163                 case "$phostname" in
8164                 sed*)
8165                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8166                         ;;
8167                 *)
8168                         echo "(That doesn't agree with your $phostname command, by the way.)"
8169                         ;;
8170                 esac
8171         ;;
8172         esac
8173         ;;
8174 esac
8175
8176 $cat <<EOM
8177
8178 I need to get your e-mail address in Internet format if possible, i.e.
8179 something like user@host.domain. Please answer accurately since I have
8180 no easy means to double check it. The default value provided below
8181 is most probably close to reality but may not be valid from outside
8182 your organization...
8183
8184 EOM
8185 cont=x
8186 while test "$cont"; do
8187         case "$cf_email" in
8188         '') dflt="$cf_by@$myhostname$mydomain";;
8189         *) dflt="$cf_email";;
8190         esac
8191         rp='What is your e-mail address?'
8192         . ./myread
8193         cf_email="$ans"
8194         case "$cf_email" in
8195         *@*.*) cont='' ;;
8196         *)
8197                 rp='Address does not look like an Internet one.  Use it anyway?'
8198                 case "$fastread" in
8199                 yes) dflt=y ;;
8200                 *) dflt=n ;;
8201                 esac
8202                 . ./myread
8203                 case "$ans" in
8204                 y*) cont='' ;;
8205                 *) echo " " ;;
8206                 esac
8207                 ;;
8208         esac
8209 done
8210
8211 $cat <<EOM
8212
8213 If you or somebody else will be maintaining perl at your site, please
8214 fill in the correct e-mail address here so that they may be contacted
8215 if necessary. Currently, the "perlbug" program included with perl
8216 will send mail to this address in addition to perlbug@perl.org. You may
8217 enter "none" for no administrator.
8218
8219 EOM
8220 case "$perladmin" in
8221 '') dflt="$cf_email";;
8222 *) dflt="$perladmin";;
8223 esac
8224 rp='Perl administrator e-mail address'
8225 . ./myread
8226 perladmin="$ans"
8227
8228 : determine whether to only install version-specific parts.
8229 echo " "
8230 $cat <<EOM
8231 Do you want to install only the version-specific parts of the perl
8232 distribution?  Usually you do *not* want to do this.
8233 EOM
8234 case "$versiononly" in
8235 "$define"|[Yy]*|true) dflt='y' ;;
8236 *) dflt='n';
8237 esac
8238 rp="Do you want to install only the version-specific parts of perl?"
8239 . ./myread
8240 case "$ans" in
8241 [yY]*)  val="$define";;
8242 *)      val="$undef" ;;
8243 esac
8244 set versiononly
8245 eval $setvar
8246
8247 : figure out how to guarantee perl startup
8248 case "$startperl" in
8249 '')
8250         case "$sharpbang" in
8251         *!)
8252                 $cat <<EOH
8253
8254 I can use the #! construct to start perl on your system. This will
8255 make startup of perl scripts faster, but may cause problems if you
8256 want to share those scripts and perl is not in a standard place
8257 ($binexp/perl) on all your platforms. The alternative is to force
8258 a shell by starting the script with a single ':' character.
8259
8260 EOH
8261                 case "$versiononly" in
8262                 "$define")      dflt="$binexp/perl$version";;  
8263                 *)              dflt="$binexp/perl";;
8264                 esac
8265                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8266                 . ./myread
8267                 case "$ans" in
8268                 none)   startperl=": # use perl";;
8269                 *)      startperl="#!$ans"
8270                         if $test 30 -lt `echo "$ans" | wc -c`; then
8271                                 $cat >&4 <<EOM
8272
8273 WARNING:  Some systems limit the #! command to 32 characters.
8274 If you experience difficulty running Perl scripts with #!, try
8275 installing Perl in a directory with a shorter pathname.
8276
8277 EOM
8278                         fi ;;
8279                 esac
8280                 ;;
8281         *) startperl=": # use perl"
8282                 ;;
8283         esac
8284         ;;
8285 esac
8286 echo "I'll use $startperl to start perl scripts."
8287
8288 : figure best path for perl in scripts
8289 case "$perlpath" in
8290 '')
8291         case "$versiononly" in
8292         "$define")      perlpath="$binexp/perl$version";;
8293         *)              perlpath="$binexp/perl";;
8294         esac
8295         case "$startperl" in
8296         *!*) ;;
8297         *)
8298                 $cat <<EOH
8299
8300 I will use the "eval 'exec'" idiom to start Perl on your system.
8301 I can use the full path of your Perl binary for this purpose, but
8302 doing so may cause problems if you want to share those scripts and
8303 Perl is not always in a standard place ($binexp/perl).
8304
8305 EOH
8306                 dflt="$binexp/perl"
8307                 rp="What path shall I use in \"eval 'exec'\"?"
8308                 . ./myread
8309                 perlpath="$ans"
8310                 ;;
8311         esac
8312         ;;
8313 esac
8314 case "$startperl" in
8315 *!*)    ;;
8316 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8317 esac
8318
8319 : determine where public executable scripts go
8320 set scriptdir scriptdir
8321 eval $prefixit
8322 case "$scriptdir" in
8323 '')
8324         dflt="$bin"
8325         : guess some guesses
8326         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8327         $test -d /usr/share/bin     && dflt=/usr/share/bin
8328         $test -d /usr/local/script  && dflt=/usr/local/script
8329         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8330         $test -d $prefixexp/script  && dflt=$prefixexp/script
8331         set dflt
8332         eval $prefixup
8333         ;;
8334 *)  dflt="$scriptdir"
8335         ;;
8336 esac
8337 $cat <<EOM
8338  
8339 Some installations have a separate directory just for executable scripts so
8340 that they can mount it across multiple architectures but keep the scripts in
8341 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8342 Or you might just lump your scripts in with all your other executables.
8343  
8344 EOM
8345 fn=d~
8346 rp='Where do you keep publicly executable scripts?'
8347 . ./getfile
8348 if $test "X$ansexp" != "X$scriptdirexp"; then
8349         installscript=''
8350 fi
8351 scriptdir="$ans"
8352 scriptdirexp="$ansexp"
8353 : Change installation prefix, if necessary.
8354 if $test X"$prefix" != X"$installprefix"; then
8355         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8356 else
8357         installscript="$scriptdirexp"
8358 fi
8359
8360 : determine where add-on public executables go
8361 case "$sitebin" in
8362 '')     dflt=$siteprefix/bin ;;
8363 *)      dflt=$sitebin ;;
8364 esac
8365 fn=d~
8366 rp='Pathname where the add-on public executables should be installed?'
8367 . ./getfile
8368 sitebin="$ans"
8369 sitebinexp="$ansexp"
8370 : Change installation prefix, if necessary.
8371 if $test X"$prefix" != X"$installprefix"; then
8372         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8373 else
8374         installsitebin="$sitebinexp"
8375 fi
8376
8377 : define an is-a-typedef? function
8378 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8379 case "$inclist" in
8380 "") inclist="sys/types.h";;
8381 esac;
8382 eval "varval=\$$var";
8383 case "$varval" in
8384 "")
8385         $rm -f temp.c;
8386         for inc in $inclist; do
8387                 echo "#include <$inc>" >>temp.c;
8388         done;
8389         echo "#ifdef $type" >> temp.c;
8390         echo "printf(\"We have $type\");" >> temp.c;
8391         echo "#endif" >> temp.c;
8392         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8393         if $contains $type temp.E >/dev/null 2>&1; then
8394                 eval "$var=\$type";
8395         else
8396                 eval "$var=\$def";
8397         fi;
8398         $rm -f temp.?;;
8399 *) eval "$var=\$varval";;
8400 esac'
8401
8402 : define an is-a-typedef? function that prompts if the type is not available.
8403 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8404 case "$inclist" in
8405 "") inclist="sys/types.h";;
8406 esac;
8407 eval "varval=\$$var";
8408 case "$varval" in
8409 "")
8410         $rm -f temp.c;
8411         for inc in $inclist; do
8412                 echo "#include <$inc>" >>temp.c;
8413         done;
8414         echo "#ifdef $type" >> temp.c;
8415         echo "printf(\"We have $type\");" >> temp.c;
8416         echo "#endif" >> temp.c;
8417         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8418         echo " " ;
8419         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8420         if $contains $type temp.E >/dev/null 2>&1; then
8421                 echo "$type found." >&4;
8422                 eval "$var=\$type";
8423         else
8424                 echo "$type NOT found." >&4;
8425                 dflt="$def";
8426                 . ./myread ;
8427                 eval "$var=\$ans";
8428         fi;
8429         $rm -f temp.?;;
8430 *) eval "$var=\$varval";;
8431 esac'
8432
8433 : see what type lseek is declared as in the kernel
8434 rp="What is the type used for lseek's offset on this system?"
8435 set off_t lseektype long stdio.h sys/types.h
8436 eval $typedef_ask
8437
8438 echo " "
8439 echo "Checking to see how big your file offsets are..." >&4
8440 $cat >try.c <<EOCP
8441 #include <sys/types.h>
8442 #include <stdio.h>
8443 int main()
8444 {
8445     printf("%d\n", (int)sizeof($lseektype));
8446     return(0); 
8447 }
8448 EOCP
8449 set try
8450 if eval $compile_ok; then
8451         lseeksize=`$run ./try`
8452         echo "Your file offsets are $lseeksize bytes long."
8453 else
8454         dflt=$longsize
8455         echo " "
8456         echo "(I can't seem to compile the test program.  Guessing...)"
8457         rp="What is the size of your file offsets (in bytes)?"
8458         . ./myread
8459         lseeksize="$ans"
8460 fi
8461 $rm -f try.c try
8462
8463 : see what type file positions are declared as in the library
8464 rp="What is the type for file position used by fsetpos()?"
8465 set fpos_t fpostype long stdio.h sys/types.h
8466 eval $typedef_ask
8467
8468 echo " "
8469 case "$fpostype" in
8470 *_t) zzz="$fpostype"    ;;
8471 *)   zzz="fpos_t"       ;;
8472 esac
8473 echo "Checking the size of $zzz..." >&4 
8474 cat > try.c <<EOCP
8475 #include <sys/types.h>
8476 #include <stdio.h>
8477 int main() {
8478     printf("%d\n", (int)sizeof($fpostype));
8479     exit(0);
8480 }
8481 EOCP
8482 set try
8483 if eval $compile_ok; then
8484         yyy=`$run ./try`
8485         case "$yyy" in
8486         '')     fpossize=4
8487                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8488                 ;;
8489         *)      fpossize=$yyy
8490                 echo "Your $zzz is $fpossize bytes long."
8491                 ;;
8492         esac
8493 else
8494         dflt="$longsize"
8495         echo " " >&4
8496         echo "(I can't compile the test program.  Guessing...)" >&4
8497         rp="What is the size of your file positions (in bytes)?"
8498         . ./myread
8499         fpossize="$ans"
8500 fi
8501
8502
8503
8504 # Backward compatibility (uselfs is deprecated).
8505 case "$uselfs" in
8506 "$define"|true|[yY]*)
8507         cat <<EOM >&4
8508
8509 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8510 EOM
8511         uselargefiles="$define"
8512         ;;
8513 esac                          
8514
8515 case "$lseeksize:$fpossize" in
8516 8:8) cat <<EOM
8517
8518 You can have files larger than 2 gigabytes.
8519 EOM
8520    val="$define" ;;
8521 *)    case "$uselargefiles" in
8522    "$undef"|false|[nN]*) dflt='n' ;;
8523    *)   dflt='y' ;;
8524    esac
8525    cat <<EOM
8526
8527 Perl can be built to understand large files (files larger than 2 gigabytes)
8528 on some systems.  To do so, Configure can be run with -Duselargefiles.
8529
8530 If this doesn't make any sense to you, just accept the default '$dflt'.
8531 EOM
8532    rp='Try to understand large files, if available?'
8533    . ./myread
8534    case "$ans" in
8535    y|Y)         val="$define" ;;
8536    *)           val="$undef"  ;;
8537    esac
8538    ;;
8539 esac
8540 set uselargefiles
8541 eval $setvar
8542 case "$uselargefiles" in
8543 "$define")
8544 : Look for a hint-file generated 'call-back-unit'.  If the
8545 : user has specified that a large files perl is to be built,
8546 : we may need to set or change some other defaults.
8547         if $test -f uselargefiles.cbu; then
8548                 echo "Your platform has some specific hints for large file builds, using them..."
8549                 . ./uselargefiles.cbu
8550                 echo " "
8551                 echo "Rechecking to see how big your file offsets are..." >&4
8552                 $cat >try.c <<EOCP
8553 #include <sys/types.h>
8554 #include <stdio.h>
8555 int main()
8556 {
8557     printf("%d\n", (int)sizeof($lseektype));
8558     return(0); 
8559 }
8560 EOCP
8561                 set try
8562                 if eval $compile_ok; then
8563                         lseeksize=`$run ./try`
8564                         $echo "Your file offsets are now $lseeksize bytes long."
8565                 else
8566                         dflt="$lseeksize"
8567                         echo " "
8568                         echo "(I can't seem to compile the test program.  Guessing...)"
8569                         rp="What is the size of your file offsets (in bytes)?"
8570                         . ./myread
8571                         lseeksize="$ans"
8572                 fi
8573                 case "$fpostype" in
8574                 *_t) zzz="$fpostype"    ;;
8575                 *)   zzz="fpos_t"       ;;
8576                 esac
8577                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8578                 $cat > try.c <<EOCP
8579 #include <sys/types.h>
8580 #include <stdio.h>
8581 int main() {
8582     printf("%d\n", (int)sizeof($fpostype));
8583     exit(0);
8584 }
8585 EOCP
8586                 set try
8587                 if eval $compile_ok; then
8588                         yyy=`$run ./try`
8589                         dflt="$lseeksize"
8590                         case "$yyy" in
8591                         '')     echo " "
8592                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8593                                 ;;
8594                         *)      fpossize=$yyy
8595                                 echo " $fpossize bytes." >&4
8596                                 ;;
8597                         esac
8598                 else
8599                         dflt="$fpossize"
8600                         echo " "
8601                         echo "(I can't compile the test program.  Guessing...)" >&4
8602                         rp="What is the size of your file positions (in bytes)?"
8603                         . ./myread
8604                         fpossize="$ans"
8605                 fi
8606                 $rm -f try.c try
8607         fi
8608         ;;
8609 esac
8610
8611 case "$vendorprefix" in
8612 '')     d_vendorbin="$undef"
8613         vendorbin=''
8614         vendorbinexp=''
8615         ;;
8616 *)      d_vendorbin="$define"
8617         : determine where vendor-supplied executables go.
8618         case "$vendorbin" in
8619         '') dflt=$vendorprefix/bin ;;
8620         *)      dflt="$vendorbin" ;;
8621         esac
8622         fn=d~+
8623         rp='Pathname for the vendor-supplied executables directory?'
8624         . ./getfile
8625         vendorbin="$ans"
8626         vendorbinexp="$ansexp"
8627         ;;
8628 esac
8629 : Change installation prefix, if necessary.
8630 if $test X"$prefix" != X"$installprefix"; then
8631         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8632 else
8633         installvendorbin="$vendorbinexp"
8634 fi
8635
8636 : see if qgcvt exists
8637 set qgcvt d_qgcvt
8638 eval $inlibc
8639
8640 : Check how to convert floats to strings.
8641 echo " "
8642 echo "Checking for an efficient way to convert floats to strings."
8643 echo " " > try.c
8644 case "$uselongdouble" in
8645 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8646 esac
8647 case "$d_longdbl" in
8648 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8649 esac
8650 case "$d_PRIgldbl" in
8651 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8652 esac
8653 $cat >>try.c <<EOP
8654 #ifdef TRY_gconvert
8655 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8656 char *myname = "gconvert";
8657 #endif
8658 #ifdef TRY_gcvt
8659 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8660 char *myname = "gcvt";
8661 #endif
8662 #ifdef TRY_qgcvt
8663 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8664 char *myname = "qgcvt";
8665 #define DOUBLETYPE long double
8666 #endif
8667 #ifdef TRY_sprintf
8668 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8669 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8670 #else
8671 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8672 #endif
8673 char *myname = "sprintf";
8674 #endif
8675
8676 #ifndef DOUBLETYPE
8677 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8678 #define DOUBLETYPE long double
8679 #else
8680 #define DOUBLETYPE double
8681 #endif
8682 #endif
8683
8684 #include <stdio.h>
8685
8686 #define I_STDLIB $i_stdlib
8687 #ifdef I_STDLIB
8688 #include <stdlib.h>
8689 #endif
8690
8691 int
8692 checkit(expect, got)
8693 char *expect;
8694 char *got;
8695 {
8696     if (strcmp(expect, got)) {
8697                 printf("%s oddity:  Expected %s, got %s\n",
8698                         myname, expect, got);
8699                 exit(1);
8700         }
8701 }
8702
8703 int main()
8704
8705         char buf[64]; 
8706         buf[63] = '\0';
8707
8708         /* This must be 1st test on (which?) platform */
8709         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8710         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8711         checkit("0.1", buf);
8712
8713         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8714         checkit("1", buf);
8715
8716         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8717         checkit("1.1", buf);
8718
8719         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8720         checkit("1.01", buf);
8721
8722         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8723         checkit("1.001", buf);
8724
8725         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8726         checkit("1.0001", buf);
8727
8728         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8729         checkit("1.00001", buf);
8730
8731         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8732         checkit("1.000001", buf);
8733
8734         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8735         checkit("0", buf);
8736
8737         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8738         checkit("-1", buf);
8739
8740         /* Some Linux gcvt's give 1.e+5 here. */
8741         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8742         checkit("100000", buf);
8743         
8744         /* Some Linux gcvt's give -1.e+5 here. */
8745         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8746         checkit("-100000", buf);
8747
8748         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8749         checkit("123.456", buf);
8750
8751         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8752         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8753         if (strlen(buf) > 5)
8754             checkit("1e+030", buf); /* for Microsoft */
8755         else
8756             checkit("1e+30", buf);
8757
8758         exit(0);
8759 }
8760 EOP
8761 case "$d_Gconvert" in
8762 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8763 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8764 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8765 *) xxx_list='gconvert gcvt sprintf' ;;
8766 esac
8767
8768 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8769 "$define$define$define")
8770     # for long doubles prefer first qgcvt, then sprintf
8771     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8772     xxx_list="sprintf $xxx_list"
8773     case "$d_qgcvt" in
8774     "$define") xxx_list="qgcvt $xxx_list" ;;
8775     esac
8776     ;;
8777 esac
8778
8779 for xxx_convert in $xxx_list; do
8780         echo "Trying $xxx_convert..."
8781         $rm -f try try$_o
8782         set try -DTRY_$xxx_convert
8783         if eval $compile; then
8784                 echo "$xxx_convert() found." >&4
8785                 if $run ./try; then
8786                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8787                         break;
8788                 else
8789                         echo "...But $xxx_convert didn't work as I expected."
8790                 fi
8791         else
8792                 echo "$xxx_convert NOT found." >&4
8793         fi
8794 done
8795         
8796 case "$xxx_convert" in
8797 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8798 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8799 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8800 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8801    "$define$define$define")
8802       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8803    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8804    esac
8805    ;;  
8806 esac
8807
8808 : see if _fwalk exists
8809 set fwalk d__fwalk
8810 eval $inlibc
8811
8812 : Initialize h_fcntl
8813 h_fcntl=false
8814
8815 : Initialize h_sysfile
8816 h_sysfile=false
8817
8818 : access call always available on UNIX
8819 set access d_access
8820 eval $inlibc
8821
8822 : locate the flags for 'access()'
8823 case "$d_access" in
8824 "$define")
8825         echo " "
8826         $cat >access.c <<'EOCP'
8827 #include <sys/types.h>
8828 #ifdef I_FCNTL
8829 #include <fcntl.h>
8830 #endif
8831 #ifdef I_SYS_FILE
8832 #include <sys/file.h>
8833 #endif
8834 #ifdef I_UNISTD
8835 #include <unistd.h>
8836 #endif
8837 int main() {
8838         exit(R_OK);
8839 }
8840 EOCP
8841         : check sys/file.h first, no particular reason here
8842         if $test `./findhdr sys/file.h` && \
8843                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8844                 h_sysfile=true;
8845                 echo "<sys/file.h> defines the *_OK access constants." >&4
8846         elif $test `./findhdr fcntl.h` && \
8847                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8848                 h_fcntl=true;
8849                 echo "<fcntl.h> defines the *_OK access constants." >&4
8850         elif $test `./findhdr unistd.h` && \
8851                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8852                 echo "<unistd.h> defines the *_OK access constants." >&4
8853         else
8854                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8855         fi
8856         ;;
8857 esac
8858 $rm -f access*
8859
8860 : see if accessx exists
8861 set accessx d_accessx
8862 eval $inlibc
8863
8864 : see if alarm exists
8865 set alarm d_alarm
8866 eval $inlibc
8867
8868 : see if atolf exists
8869 set atolf d_atolf
8870 eval $inlibc
8871
8872 : see if atoll exists
8873 set atoll d_atoll
8874 eval $inlibc
8875
8876 : Look for GNU-cc style attribute checking
8877 echo " "
8878 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8879 $cat >attrib.c <<'EOCP'
8880 #include <stdio.h>
8881 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8882 EOCP
8883 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8884         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8885                 echo "Your C compiler doesn't fully support __attribute__."
8886                 val="$undef"
8887         else
8888                 echo "Your C compiler supports __attribute__."
8889                 val="$define"
8890         fi
8891 else
8892         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8893         val="$undef"
8894 fi
8895 set d_attribut
8896 eval $setvar
8897 $rm -f attrib*
8898
8899 : see if bcmp exists
8900 set bcmp d_bcmp
8901 eval $inlibc
8902
8903 : see if bcopy exists
8904 set bcopy d_bcopy
8905 eval $inlibc
8906
8907 : see if this is a unistd.h system
8908 set unistd.h i_unistd
8909 eval $inhdr
8910
8911 : see if getpgrp exists
8912 set getpgrp d_getpgrp
8913 eval $inlibc
8914
8915 case "$d_getpgrp" in
8916 "$define")
8917         echo " "
8918         echo "Checking to see which flavor of getpgrp is in use..."
8919         $cat >try.c <<EOP
8920 #$i_unistd I_UNISTD
8921 #include <sys/types.h>
8922 #ifdef I_UNISTD
8923 #  include <unistd.h>
8924 #endif
8925 int main()
8926 {
8927         if (getuid() == 0) {
8928                 printf("(I see you are running Configure as super-user...)\n");
8929                 setuid(1);
8930         }
8931 #ifdef TRY_BSD_PGRP
8932         if (getpgrp(1) == 0)
8933                 exit(0);
8934 #else
8935         if (getpgrp() > 0)
8936                 exit(0);
8937 #endif
8938         exit(1);
8939 }
8940 EOP
8941         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8942                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8943                 val="$define"
8944         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8945                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8946                 val="$undef"
8947         else
8948                 echo "I can't seem to compile and run the test program."
8949                 if ./usg; then
8950                         xxx="a USG one, i.e. you use getpgrp()."
8951                 else
8952                         # SVR4 systems can appear rather BSD-ish.
8953                         case "$i_unistd" in
8954                         $undef)
8955                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8956                                 val="$define"
8957                                 ;;
8958                         $define)
8959                                 xxx="probably a USG one, i.e. you use getpgrp()."
8960                                 val="$undef"
8961                                 ;;
8962                         esac
8963                 fi
8964                 echo "Assuming your getpgrp is $xxx" >&4
8965         fi
8966         ;;
8967 *) val="$undef";;
8968 esac
8969 set d_bsdgetpgrp
8970 eval $setvar
8971 $rm -f try try.*
8972
8973 : see if setpgrp exists
8974 set setpgrp d_setpgrp
8975 eval $inlibc
8976
8977 case "$d_setpgrp" in
8978 "$define")
8979         echo " "
8980         echo "Checking to see which flavor of setpgrp is in use..."
8981         $cat >try.c <<EOP
8982 #$i_unistd I_UNISTD
8983 #include <sys/types.h>
8984 #ifdef I_UNISTD
8985 #  include <unistd.h>
8986 #endif
8987 int main()
8988 {
8989         if (getuid() == 0) {
8990                 printf("(I see you are running Configure as super-user...)\n");
8991                 setuid(1);
8992         }
8993 #ifdef TRY_BSD_PGRP
8994         if (-1 == setpgrp(1, 1))
8995                 exit(0);
8996 #else
8997         if (setpgrp() != -1)
8998                 exit(0);
8999 #endif
9000         exit(1);
9001 }
9002 EOP
9003         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9004                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9005                 val="$define"
9006         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9007                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9008                 val="$undef"
9009         else
9010                 echo "(I can't seem to compile and run the test program.)"
9011                 if ./usg; then
9012                         xxx="a USG one, i.e. you use setpgrp()."
9013                 else
9014                         # SVR4 systems can appear rather BSD-ish.
9015                         case "$i_unistd" in
9016                         $undef)
9017                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9018                                 val="$define"
9019                                 ;;
9020                         $define)
9021                                 xxx="probably a USG one, i.e. you use setpgrp()."
9022                                 val="$undef"
9023                                 ;;
9024                         esac
9025                 fi
9026                 echo "Assuming your setpgrp is $xxx" >&4
9027         fi
9028         ;;
9029 *) val="$undef";;
9030 esac
9031 set d_bsdsetpgrp
9032 eval $setvar
9033 $rm -f try try.*
9034 : see if bzero exists
9035 set bzero d_bzero
9036 eval $inlibc
9037
9038 : see if signal is declared as pointer to function returning int or void
9039 echo " "
9040 xxx=`./findhdr signal.h`
9041 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9042 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9043         echo "You have int (*signal())() instead of void." >&4
9044         val="$undef"
9045 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9046         echo "You have void (*signal())()." >&4
9047         val="$define"
9048 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9049         echo "You have int (*signal())() instead of void." >&4
9050         val="$undef"
9051 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9052         echo "You have void (*signal())()." >&4
9053         val="$define"
9054 else
9055         case "$d_voidsig" in
9056         '')
9057         echo "I can't determine whether signal handler returns void or int..." >&4
9058                 dflt=void
9059                 rp="What type does your signal handler return?"
9060                 . ./myread
9061                 case "$ans" in
9062                 v*) val="$define";;
9063                 *) val="$undef";;
9064                 esac;;
9065         "$define")
9066                 echo "As you already told me, signal handler returns void." >&4
9067                 val="$define"
9068                 ;;
9069         *)      echo "As you already told me, signal handler returns int." >&4
9070                 val="$undef"
9071                 ;;
9072         esac
9073 fi
9074 set d_voidsig
9075 eval $setvar
9076 case "$d_voidsig" in
9077 "$define") signal_t="void";;
9078 *) signal_t="int";;
9079 esac
9080 $rm -f $$.tmp
9081
9082 : check for ability to cast large floats to 32-bit ints.
9083 echo " "
9084 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9085 if $test "$intsize" -ge 4; then
9086         xxx=int
9087 else
9088         xxx=long
9089 fi
9090 $cat >try.c <<EOCP
9091 #include <stdio.h>
9092 #include <sys/types.h>
9093 #include <signal.h>
9094 $signal_t blech(s) int s; { exit(3); }
9095 int main()
9096 {
9097         $xxx i32;
9098         double f, g;
9099         int result = 0;
9100         char str[16];
9101         signal(SIGFPE, blech);
9102
9103         /* Don't let compiler optimize the test away.  Store the number 
9104            in a writable string for gcc to pass to sscanf under HP/UX.
9105         */
9106         sprintf(str, "2147483647");
9107         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9108         g = 10 * f;
9109         i32  = ($xxx) g;
9110
9111         /* x86 processors will probably give 0x8000 0000, which is a
9112        sign change.  We don't want that.  We want to mimic SPARC
9113            behavior here, which is to preserve the sign and give
9114            back 0x7fff ffff.
9115         */
9116         if (i32 != ($xxx) f)
9117                 result |= 1;
9118         exit(result);
9119 }
9120 EOCP
9121 set try
9122 if eval $compile_ok; then
9123         $run ./try
9124         yyy=$?
9125 else
9126         echo "(I can't seem to compile the test program--assuming it can't)"
9127         yyy=1
9128 fi
9129 case "$yyy" in
9130 0)      val="$define"
9131         echo "Yup, it can."
9132         ;;
9133 *)      val="$undef"
9134         echo "Nope, it can't."
9135         ;;
9136 esac
9137 set d_casti32
9138 eval $setvar
9139 $rm -f try try.*
9140
9141 : check for ability to cast negative floats to unsigned
9142 echo " "
9143 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9144 $cat >try.c <<EOCP
9145 #include <stdio.h>
9146 #include <sys/types.h>
9147 #include <signal.h>
9148 $signal_t blech(s) int s; { exit(7); }
9149 $signal_t blech_in_list(s) int s; { exit(4); }
9150 unsigned long dummy_long(p) unsigned long p; { return p; }
9151 unsigned int dummy_int(p) unsigned int p; { return p; }
9152 unsigned short dummy_short(p) unsigned short p; { return p; }
9153 int main()
9154 {
9155         double f;
9156         unsigned long along;
9157         unsigned int aint;
9158         unsigned short ashort;
9159         int result = 0;
9160         char str[16];
9161         
9162         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9163            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9164            optimized the whole file away
9165         */
9166         /* Store the number in a writable string for gcc to pass to 
9167            sscanf under HP/UX.
9168         */
9169         sprintf(str, "-123");
9170         sscanf(str, "%lf", &f);  /* f = -123.; */
9171
9172         signal(SIGFPE, blech);
9173         along = (unsigned long)f;
9174         aint = (unsigned int)f;
9175         ashort = (unsigned short)f;
9176         if (along != (unsigned long)-123)
9177                 result |= 1;
9178         if (aint != (unsigned int)-123)
9179                 result |= 1;
9180         if (ashort != (unsigned short)-123)
9181                 result |= 1;
9182         sprintf(str, "1073741824.");
9183         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9184         f = f + f;
9185         along = 0;
9186         along = (unsigned long)f;
9187         if (along != 0x80000000)
9188                 result |= 2;
9189         f -= 1.;
9190         along = 0;
9191         along = (unsigned long)f;
9192         if (along != 0x7fffffff)
9193                 result |= 1;
9194         f += 2.;
9195         along = 0;
9196         along = (unsigned long)f;
9197         if (along != 0x80000001)
9198                 result |= 2;
9199         if (result)
9200                 exit(result);
9201         signal(SIGFPE, blech_in_list);
9202         sprintf(str, "123.");
9203         sscanf(str, "%lf", &f);  /* f = 123.; */
9204         along = dummy_long((unsigned long)f);
9205         aint = dummy_int((unsigned int)f);
9206         ashort = dummy_short((unsigned short)f);
9207         if (along != (unsigned long)123)
9208                 result |= 4;
9209         if (aint != (unsigned int)123)
9210                 result |= 4;
9211         if (ashort != (unsigned short)123)
9212                 result |= 4;
9213         exit(result);
9214
9215 }
9216 EOCP
9217 set try
9218 if eval $compile_ok; then
9219         $run ./try
9220         castflags=$?
9221 else
9222         echo "(I can't seem to compile the test program--assuming it can't)"
9223         castflags=7
9224 fi
9225 case "$castflags" in
9226 0)      val="$define"
9227         echo "Yup, it can."
9228         ;;
9229 *)      val="$undef"
9230         echo "Nope, it can't."
9231         ;;
9232 esac
9233 set d_castneg
9234 eval $setvar
9235 $rm -f try.*
9236
9237 : see if vprintf exists
9238 echo " "
9239 if set vprintf val -f d_vprintf; eval $csym; $val; then
9240         echo 'vprintf() found.' >&4
9241         val="$define"
9242         $cat >try.c <<'EOF'
9243 #include <varargs.h>
9244
9245 int main() { xxx("foo"); }
9246
9247 xxx(va_alist)
9248 va_dcl
9249 {
9250         va_list args;
9251         char buf[10];
9252
9253         va_start(args);
9254         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9255 }
9256 EOF
9257         set try
9258         if eval $compile && $run ./try; then
9259                 echo "Your vsprintf() returns (int)." >&4
9260                 val2="$undef"
9261         else
9262                 echo "Your vsprintf() returns (char*)." >&4
9263                 val2="$define"
9264         fi
9265 else
9266         echo 'vprintf() NOT found.' >&4
9267                 val="$undef"
9268                 val2="$undef"
9269 fi
9270 $rm -f try try.*
9271 set d_vprintf
9272 eval $setvar
9273 val=$val2
9274 set d_charvspr
9275 eval $setvar
9276
9277 : see if chown exists
9278 set chown d_chown
9279 eval $inlibc
9280
9281 : see if chroot exists
9282 set chroot d_chroot
9283 eval $inlibc
9284
9285 : see if chsize exists
9286 set chsize d_chsize
9287 eval $inlibc
9288
9289 : see if class exists
9290 set class d_class
9291 eval $inlibc
9292
9293 hasstruct='varname=$1; struct=$2; shift; shift;
9294 while $test $# -ge 2; do
9295         case "$1" in
9296         $define) echo "#include <$2>";;
9297         esac ;
9298     shift 2;
9299 done > try.c;
9300 echo "int main () { struct $struct foo; }" >> try.c;
9301 set try;
9302 if eval $compile; then
9303         val="$define";
9304 else
9305         val="$undef";
9306 fi;
9307 set $varname;
9308 eval $setvar;
9309 $rm -f try.c try.o'
9310
9311 : see if sys/types.h has to be included
9312 set sys/types.h i_systypes
9313 eval $inhdr
9314
9315 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9316 while $test $# -ge 2; do
9317         case "$1" in
9318         $define) echo "#include <$2>";;
9319         esac ;
9320     shift 2;
9321 done > try.c;
9322 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9323 set try;
9324 if eval $compile; then
9325         val="$define";
9326 else
9327         val="$undef";
9328 fi;
9329 set $varname;
9330 eval $setvar;
9331 $rm -f try.c try.o'
9332
9333 socketlib=''
9334 sockethdr=''
9335 : see whether socket exists
9336 echo " "
9337 $echo $n "Hmm... $c" >&4
9338 if set socket val -f d_socket; eval $csym; $val; then
9339         echo "Looks like you have Berkeley networking support." >&4
9340         d_socket="$define"
9341         if set setsockopt val -f; eval $csym; $val; then
9342                 d_oldsock="$undef"
9343         else
9344                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9345                 d_oldsock="$define"
9346         fi
9347 else
9348         if $contains socklib libc.list >/dev/null 2>&1; then
9349                 echo "Looks like you have Berkeley networking support." >&4
9350                 d_socket="$define"
9351                 : we will have to assume that it supports the 4.2 BSD interface
9352                 d_oldsock="$undef"
9353         else
9354                 echo "You don't have Berkeley networking in libc$_a..." >&4
9355                 if test "X$d_socket" = "X$define"; then
9356                    echo "...but you seem to believe that you have sockets." >&4
9357                 else
9358                         for net in net socket
9359                         do
9360                                 if test -f /usr/lib/lib$net$_a; then
9361                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9362                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9363                                         if $contains socket libc.list >/dev/null 2>&1; then
9364                                                 d_socket="$define"
9365                                                 socketlib="-l$net"
9366                                                 case "$net" in
9367                                                 net)
9368                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9369                                                         sockethdr="-I/usr/netinclude"
9370                                                         ;;
9371                                                 esac
9372                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9373                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9374                                                         d_oldsock="$undef"
9375                                                 else
9376                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9377                                                         d_oldsock="$define"
9378                                                 fi
9379                                                 break
9380                                         fi
9381                                 fi
9382                         done
9383                         if test "X$d_socket" != "X$define"; then
9384                            echo "or anywhere else I see." >&4
9385                            d_socket="$undef"
9386                            d_oldsock="$undef"
9387                         fi
9388                 fi
9389         fi
9390 fi
9391
9392 : see if socketpair exists
9393 set socketpair d_sockpair
9394 eval $inlibc
9395
9396
9397 echo " "
9398 echo "Checking the availability of certain socket constants..." >&4
9399 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9400         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9401         $cat >try.c <<EOF
9402 #include <sys/types.h>
9403 #include <sys/socket.h>
9404 int main() {
9405     int i = $ENUM;
9406 }
9407 EOF
9408         val="$undef"
9409         set try; if eval $compile; then
9410                 val="$define"
9411         fi
9412         set d_${enum}; eval $setvar
9413         $rm -f try.c try
9414 done
9415
9416 : see if this is a sys/uio.h system
9417 set sys/uio.h i_sysuio
9418 eval $inhdr
9419
9420
9421 echo " "
9422 echo "Checking to see if your system supports struct cmsghdr..." >&4
9423 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9424 eval $hasstruct
9425 case "$d_cmsghdr_s" in
9426 "$define")      echo "Yes, it does."   ;;
9427 *)              echo "No, it doesn't." ;;
9428 esac
9429
9430
9431 : check for const keyword
9432 echo " "
9433 echo 'Checking to see if your C compiler knows about "const"...' >&4
9434 $cat >const.c <<'EOCP'
9435 typedef struct spug { int drokk; } spug;
9436 int main()
9437 {
9438         const char *foo;
9439         const spug y;
9440 }
9441 EOCP
9442 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9443         val="$define"
9444         echo "Yup, it does."
9445 else
9446         val="$undef"
9447         echo "Nope, it doesn't."
9448 fi
9449 set d_const
9450 eval $setvar
9451
9452 : see if crypt exists
9453 echo " "
9454 set crypt d_crypt
9455 eval $inlibc
9456 case "$d_crypt" in
9457 $define) cryptlib='' ;;
9458 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9459                 echo 'crypt() found.' >&4
9460                 val="$define"
9461                 cryptlib=''
9462         else
9463                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9464                 if $test -z "$cryptlib"; then
9465                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9466                 else
9467                         cryptlib=-lcrypt
9468                 fi
9469                 if $test -z "$cryptlib"; then
9470                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9471                 else
9472                         cryptlib=-lcrypt
9473                 fi
9474                 if $test -z "$cryptlib"; then
9475                         cryptlib=`./loc libcrypt$_a "" $libpth`
9476                 else
9477                         cryptlib=-lcrypt
9478                 fi
9479                 if $test -z "$cryptlib"; then
9480                         echo 'crypt() NOT found.' >&4
9481                         val="$undef"
9482                 else
9483                         val="$define"
9484                 fi
9485         fi
9486         set d_crypt
9487         eval $setvar
9488         ;;
9489 esac
9490
9491 : get csh whereabouts
9492 case "$csh" in
9493 'csh') val="$undef" ;;
9494 *) val="$define" ;;
9495 esac
9496 set d_csh
9497 eval $setvar
9498 : Respect a hint or command line value for full_csh.
9499 case "$full_csh" in
9500 '') full_csh=$csh ;;
9501 esac
9502
9503 : see if cuserid exists
9504 set cuserid d_cuserid
9505 eval $inlibc
9506
9507 : see if this is a limits.h system
9508 set limits.h i_limits
9509 eval $inhdr
9510
9511 : see if this is a float.h system
9512 set float.h i_float
9513 eval $inhdr
9514
9515 : See if number of significant digits in a double precision number is known
9516 echo " "
9517 $cat >dbl_dig.c <<EOM
9518 #$i_limits I_LIMITS
9519 #$i_float I_FLOAT
9520 #ifdef I_LIMITS
9521 #include <limits.h>
9522 #endif
9523 #ifdef I_FLOAT
9524 #include <float.h>
9525 #endif
9526 #ifdef DBL_DIG
9527 printf("Contains DBL_DIG");
9528 #endif
9529 EOM
9530 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9531 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9532         echo "DBL_DIG found." >&4
9533         val="$define"
9534 else
9535         echo "DBL_DIG NOT found." >&4
9536         val="$undef"
9537 fi
9538 $rm -f dbl_dig.?
9539 set d_dbl_dig
9540 eval $setvar
9541
9542 hasproto='varname=$1; func=$2; shift; shift;
9543 while $test $# -ge 2; do
9544         case "$1" in
9545         $define) echo "#include <$2>";;
9546         esac ;
9547     shift 2;
9548 done > try.c;
9549 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9550 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9551         echo "$func() prototype found.";
9552         val="$define";
9553 else
9554         echo "$func() prototype NOT found.";
9555         val="$undef";
9556 fi;
9557 set $varname;
9558 eval $setvar;
9559 $rm -f try.c tryout.c'
9560
9561 : see if dbm.h is available
9562 : see if dbmclose exists
9563 set dbmclose d_dbmclose
9564 eval $inlibc
9565
9566 case "$d_dbmclose" in
9567 $define)
9568         set dbm.h i_dbm
9569         eval $inhdr
9570         case "$i_dbm" in
9571         $define)
9572                 val="$undef"
9573                 set i_rpcsvcdbm
9574                 eval $setvar
9575                 ;;
9576         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9577                 eval $inhdr
9578                 ;;
9579         esac
9580         ;;
9581 *)      echo "We won't be including <dbm.h>"
9582         val="$undef"
9583         set i_dbm
9584         eval $setvar
9585         val="$undef"
9586         set i_rpcsvcdbm
9587         eval $setvar
9588         ;;
9589 esac
9590
9591 : see if prototype for dbminit is available
9592 echo " "
9593 set d_dbminitproto dbminit $i_dbm dbm.h
9594 eval $hasproto
9595
9596 : see if difftime exists
9597 set difftime d_difftime
9598 eval $inlibc
9599
9600 : see if this is a dirent system
9601 echo " "
9602 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9603         val="$define"
9604         echo "<dirent.h> found." >&4
9605 else
9606         val="$undef"
9607         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9608                 echo "<sys/dir.h> found." >&4
9609                 echo " "
9610         else
9611                 xinc=`./findhdr sys/ndir.h`
9612         fi
9613         echo "<dirent.h> NOT found." >&4
9614 fi
9615 set i_dirent
9616 eval $setvar
9617
9618 : Look for type of directory structure.
9619 echo " "
9620 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9621
9622 case "$direntrytype" in
9623 ''|' ')
9624         case "$i_dirent" in
9625         $define) guess1='struct dirent' ;;
9626         *) guess1='struct direct'  ;;
9627         esac
9628         ;;
9629 *)      guess1="$direntrytype"
9630         ;;
9631 esac
9632
9633 case "$guess1" in
9634 'struct dirent') guess2='struct direct' ;;
9635 *) guess2='struct dirent' ;;
9636 esac
9637                 
9638 if $contains "$guess1" try.c >/dev/null 2>&1; then
9639         direntrytype="$guess1"
9640         echo "Your directory entries are $direntrytype." >&4
9641 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9642         direntrytype="$guess2"
9643         echo "Your directory entries seem to be $direntrytype." >&4
9644 else
9645         echo "I don't recognize your system's directory entries." >&4
9646         rp="What type is used for directory entries on this system?"
9647         dflt="$guess1"
9648         . ./myread
9649         direntrytype="$ans"
9650 fi
9651 $rm -f try.c
9652
9653
9654 : see if the directory entry stores field length
9655 echo " "
9656 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9657 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9658         echo "Good, your directory entry keeps length information in d_namlen." >&4
9659         val="$define"
9660 else
9661         echo "Your directory entry does not know about the d_namlen field." >&4
9662         val="$undef"
9663 fi
9664 set d_dirnamlen
9665 eval $setvar
9666 $rm -f try.c
9667
9668 : see if this is an sysdir system
9669 set sys/dir.h i_sysdir
9670 eval $inhdr
9671
9672 : see if this is an sysndir system
9673 set sys/ndir.h i_sysndir
9674 eval $inhdr
9675
9676 : Look for dirfd
9677 echo " "
9678 $cat >dirfd.c <<EOM
9679 #include <stdio.h>
9680 #$i_dirent I_DIRENT             /**/
9681 #$i_sysdir I_SYS_DIR            /**/
9682 #$i_sysndir I_SYS_NDIR          /**/
9683 #$i_systypes I_SYS_TYPES        /**/
9684 #if defined(I_SYS_TYPES)
9685 #include <sys/types.h>
9686 #endif
9687 #if defined(I_DIRENT)
9688 #include <dirent.h>
9689 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9690 #include <sys/dir.h>
9691 #endif
9692 #else
9693 #ifdef I_SYS_NDIR
9694 #include <sys/ndir.h>
9695 #else
9696 #ifdef I_SYS_DIR
9697 #ifdef hp9000s500
9698 #include <ndir.h>       /* may be wrong in the future */
9699 #else
9700 #include <sys/dir.h>
9701 #endif
9702 #endif
9703 #endif
9704 #endif 
9705 int main() {
9706         DIR *dirp = opendir(".");
9707         if (dirfd(dirp) >= 0)
9708                 exit(0);
9709         else
9710                 exit(1);
9711 }
9712 EOM
9713 set dirfd
9714 if eval $compile; then
9715         val="$define"
9716 fi
9717 case "$val" in
9718 $define)        echo "dirfd() found." >&4       ;;
9719 *)              echo "dirfd() NOT found." >&4   ;;
9720 esac
9721 set d_dirfd
9722 eval $setvar
9723 $rm -f dirfd*
9724
9725 : see if dlerror exists
9726 xxx_runnm="$runnm"
9727 runnm=false
9728 set dlerror d_dlerror
9729 eval $inlibc
9730 runnm="$xxx_runnm"
9731
9732 : see if dlfcn is available
9733 set dlfcn.h i_dlfcn
9734 eval $inhdr
9735
9736 case "$usedl" in
9737 $define|y|true)
9738         $cat << EOM
9739
9740 On a few systems, the dynamically loaded modules that perl generates and uses
9741 will need a different extension than shared libs. The default will probably
9742 be appropriate.
9743
9744 EOM
9745         case "$dlext" in
9746         '')     dflt="$so" ;;
9747         *)      dflt="$dlext" ;;
9748         esac
9749         rp='What is the extension of dynamically loaded modules'
9750         . ./myread
9751         dlext="$ans"
9752         ;;
9753 *)
9754         dlext="none"
9755         ;;
9756 esac
9757
9758 : Check if dlsym need a leading underscore
9759 echo " "
9760 val="$undef"
9761
9762 case "$dlsrc" in
9763 dl_dlopen.xs)
9764         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9765         $cat >dyna.c <<'EOM'
9766 fred () { }
9767 EOM
9768
9769 $cat >fred.c<<EOM
9770
9771 #include <stdio.h>
9772 #$i_dlfcn I_DLFCN
9773 #ifdef I_DLFCN
9774 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9775 #else
9776 #include <sys/types.h>
9777 #include <nlist.h>
9778 #include <link.h>
9779 #endif
9780
9781 extern int fred() ;
9782
9783 int main()
9784 {
9785     void * handle ;
9786     void * symbol ;
9787 #ifndef RTLD_LAZY
9788     int mode = 1 ;
9789 #else
9790     int mode = RTLD_LAZY ;
9791 #endif
9792     handle = dlopen("./dyna.$dlext", mode) ;
9793     if (handle == NULL) {
9794         printf ("1\n") ;
9795         fflush (stdout) ;
9796         exit(0);
9797     }
9798     symbol = dlsym(handle, "fred") ;
9799     if (symbol == NULL) {
9800         /* try putting a leading underscore */
9801         symbol = dlsym(handle, "_fred") ;
9802         if (symbol == NULL) {
9803             printf ("2\n") ;
9804             fflush (stdout) ;
9805             exit(0);
9806         }
9807         printf ("3\n") ;
9808     }
9809     else
9810         printf ("4\n") ;
9811     fflush (stdout) ;
9812     exit(0);
9813 }
9814 EOM
9815         : Call the object file tmp-dyna.o in case dlext=o.
9816         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9817                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9818                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9819                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9820                 xxx=`$run ./fred`
9821                 case $xxx in
9822                 1)      echo "Test program failed using dlopen." >&4
9823                         echo "Perhaps you should not use dynamic loading." >&4;;
9824                 2)      echo "Test program failed using dlsym." >&4
9825                         echo "Perhaps you should not use dynamic loading." >&4;;
9826                 3)      echo "dlsym needs a leading underscore" >&4
9827                         val="$define" ;;
9828                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9829                 esac
9830         else
9831                 echo "I can't compile and run the test program." >&4
9832                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9833         fi
9834         ;;
9835 esac
9836                 
9837 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9838
9839 set d_dlsymun
9840 eval $setvar
9841
9842 : see if prototype for drand48 is available
9843 echo " "
9844 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9845 eval $hasproto
9846
9847 : see if dup2 exists
9848 set dup2 d_dup2
9849 eval $inlibc
9850
9851 : see if eaccess exists
9852 set eaccess d_eaccess
9853 eval $inlibc
9854
9855 : see if endgrent exists
9856 set endgrent d_endgrent
9857 eval $inlibc
9858
9859 : see if endhostent exists
9860 set endhostent d_endhent
9861 eval $inlibc
9862
9863 : see if endnetent exists
9864 set endnetent d_endnent
9865 eval $inlibc
9866
9867 : see if endprotoent exists
9868 set endprotoent d_endpent
9869 eval $inlibc
9870
9871 : see if endpwent exists
9872 set endpwent d_endpwent
9873 eval $inlibc
9874
9875 : see if endservent exists
9876 set endservent d_endsent
9877 eval $inlibc
9878
9879 : Locate the flags for 'open()'
9880 echo " "
9881 $cat >try.c <<'EOCP'
9882 #include <sys/types.h>
9883 #ifdef I_FCNTL
9884 #include <fcntl.h>
9885 #endif
9886 #ifdef I_SYS_FILE
9887 #include <sys/file.h>
9888 #endif
9889 int main() {
9890         if(O_RDONLY);
9891 #ifdef O_TRUNC
9892         exit(0);
9893 #else
9894         exit(1);
9895 #endif
9896 }
9897 EOCP
9898 : check sys/file.h first to get FREAD on Sun
9899 if $test `./findhdr sys/file.h` && \
9900                 set try -DI_SYS_FILE && eval $compile; then
9901         h_sysfile=true;
9902         echo "<sys/file.h> defines the O_* constants..." >&4
9903         if $run ./try; then
9904                 echo "and you have the 3 argument form of open()." >&4
9905                 val="$define"
9906         else
9907                 echo "but not the 3 argument form of open().  Oh, well." >&4
9908                 val="$undef"
9909         fi
9910 elif $test `./findhdr fcntl.h` && \
9911                 set try -DI_FCNTL && eval $compile; then
9912         h_fcntl=true;
9913         echo "<fcntl.h> defines the O_* constants..." >&4
9914         if $run ./try; then
9915                 echo "and you have the 3 argument form of open()." >&4
9916                 val="$define"
9917         else
9918                 echo "but not the 3 argument form of open().  Oh, well." >&4
9919                 val="$undef"
9920         fi
9921 else
9922         val="$undef"
9923         echo "I can't find the O_* constant definitions!  You got problems." >&4
9924 fi
9925 set d_open3
9926 eval $setvar
9927 $rm -f try try.*
9928
9929 : see which of string.h or strings.h is needed
9930 echo " "
9931 strings=`./findhdr string.h`
9932 if $test "$strings" && $test -r "$strings"; then
9933         echo "Using <string.h> instead of <strings.h>." >&4
9934         val="$define"
9935 else
9936         val="$undef"
9937         strings=`./findhdr strings.h`
9938         if $test "$strings" && $test -r "$strings"; then
9939                 echo "Using <strings.h> instead of <string.h>." >&4
9940         else
9941                 echo "No string header found -- You'll surely have problems." >&4
9942         fi
9943 fi
9944 set i_string
9945 eval $setvar
9946 case "$i_string" in
9947 "$undef") strings=`./findhdr strings.h`;;
9948 *)        strings=`./findhdr string.h`;;
9949 esac
9950
9951 : see if this is a sys/file.h system
9952 val=''
9953 set sys/file.h val
9954 eval $inhdr
9955
9956 : do we need to include sys/file.h ?
9957 case "$val" in
9958 "$define")
9959         echo " "
9960         if $h_sysfile; then
9961                 val="$define"
9962                 echo "We'll be including <sys/file.h>." >&4
9963         else
9964                 val="$undef"
9965                 echo "We won't be including <sys/file.h>." >&4
9966         fi
9967         ;;
9968 *)
9969         h_sysfile=false
9970         ;;
9971 esac
9972 set i_sysfile
9973 eval $setvar
9974
9975 : see if fcntl.h is there
9976 val=''
9977 set fcntl.h val
9978 eval $inhdr
9979
9980 : see if we can include fcntl.h
9981 case "$val" in
9982 "$define")
9983         echo " "
9984         if $h_fcntl; then
9985                 val="$define"
9986                 echo "We'll be including <fcntl.h>." >&4
9987         else
9988                 val="$undef"
9989                 if $h_sysfile; then
9990         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9991                 else
9992                         echo "We won't be including <fcntl.h>." >&4
9993                 fi
9994         fi
9995         ;;
9996 *)
9997         h_fcntl=false
9998         val="$undef"
9999         ;;
10000 esac
10001 set i_fcntl
10002 eval $setvar
10003
10004 : check for non-blocking I/O stuff
10005 case "$h_sysfile" in
10006 true) echo "#include <sys/file.h>" > head.c;;
10007 *)
10008        case "$h_fcntl" in
10009        true) echo "#include <fcntl.h>" > head.c;;
10010        *) echo "#include <sys/fcntl.h>" > head.c;;
10011        esac
10012        ;;
10013 esac
10014 echo " "
10015 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10016 case "$o_nonblock" in
10017 '')
10018         $cat head.c > try.c
10019         $cat >>try.c <<EOCP
10020 #include <stdio.h>
10021 #include <stdlib.h>
10022 #$i_fcntl I_FCNTL
10023 #ifdef I_FCNTL
10024 #include <fcntl.h>
10025 #endif
10026 int main() {
10027 #ifdef O_NONBLOCK
10028         printf("O_NONBLOCK\n");
10029         exit(0);
10030 #endif
10031 #ifdef O_NDELAY
10032         printf("O_NDELAY\n");
10033         exit(0);
10034 #endif
10035 #ifdef FNDELAY
10036         printf("FNDELAY\n");
10037         exit(0);
10038 #endif
10039         exit(0);
10040 }
10041 EOCP
10042         set try
10043         if eval $compile_ok; then
10044                 o_nonblock=`$run ./try`
10045                 case "$o_nonblock" in
10046                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10047                 *) echo "Seems like we can use $o_nonblock.";;
10048                 esac
10049         else
10050                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10051         fi
10052         ;;
10053 *) echo "Using $hint value $o_nonblock.";;
10054 esac
10055 $rm -f try try.* .out core
10056
10057 echo " "
10058 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10059 case "$eagain" in
10060 '')
10061         $cat head.c > try.c
10062         $cat >>try.c <<EOCP
10063 #include <errno.h>
10064 #include <sys/types.h>
10065 #include <signal.h>
10066 #include <stdio.h> 
10067 #include <stdlib.h> 
10068 #$i_fcntl I_FCNTL
10069 #ifdef I_FCNTL
10070 #include <fcntl.h>
10071 #endif
10072 #define MY_O_NONBLOCK $o_nonblock
10073 #ifndef errno  /* XXX need better Configure test */
10074 extern int errno;
10075 #endif
10076 #$i_unistd I_UNISTD
10077 #ifdef I_UNISTD
10078 #include <unistd.h>
10079 #endif
10080 #$i_string I_STRING
10081 #ifdef I_STRING
10082 #include <string.h>
10083 #else
10084 #include <strings.h>
10085 #endif
10086 $signal_t blech(x) int x; { exit(3); }
10087 EOCP
10088         $cat >> try.c <<'EOCP'
10089 int main()
10090 {
10091         int pd[2];
10092         int pu[2];
10093         char buf[1];
10094         char string[100];
10095
10096         pipe(pd);       /* Down: child -> parent */
10097         pipe(pu);       /* Up: parent -> child */
10098         if (0 != fork()) {
10099                 int ret;
10100                 close(pd[1]);   /* Parent reads from pd[0] */
10101                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10102 #ifdef F_SETFL
10103                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10104                         exit(1);
10105 #else
10106                 exit(4);
10107 #endif
10108                 signal(SIGALRM, blech);
10109                 alarm(5);
10110                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10111                         exit(2);
10112                 sprintf(string, "%d\n", ret);
10113                 write(2, string, strlen(string));
10114                 alarm(0);
10115 #ifdef EAGAIN
10116                 if (errno == EAGAIN) {
10117                         printf("EAGAIN\n");
10118                         goto ok;
10119                 }
10120 #endif
10121 #ifdef EWOULDBLOCK
10122                 if (errno == EWOULDBLOCK)
10123                         printf("EWOULDBLOCK\n");
10124 #endif
10125         ok:
10126                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10127                 sleep(2);                               /* Give it time to close our pipe */
10128                 alarm(5);
10129                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10130                 alarm(0);
10131                 sprintf(string, "%d\n", ret);
10132                 write(4, string, strlen(string));
10133                 exit(0);
10134         }
10135
10136         close(pd[0]);                   /* We write to pd[1] */
10137         close(pu[1]);                   /* We read from pu[0] */
10138         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10139         close(pd[1]);                   /* Pipe pd is now fully closed! */
10140         exit(0);                                /* Bye bye, thank you for playing! */
10141 }
10142 EOCP
10143         set try
10144         if eval $compile_ok; then
10145                 echo "$startsh" >mtry
10146                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10147                 chmod +x mtry
10148                 ./mtry >/dev/null 2>&1
10149                 case $? in
10150                 0) eagain=`$cat try.out`;;
10151                 1) echo "Could not perform non-blocking setting!";;
10152                 2) echo "I did a successful read() for something that was not there!";;
10153                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10154                 4) echo "Could not find F_SETFL!";;
10155                 *) echo "Something terribly wrong happened during testing.";;
10156                 esac
10157                 rd_nodata=`$cat try.ret`
10158                 echo "A read() system call with no data present returns $rd_nodata."
10159                 case "$rd_nodata" in
10160                 0|-1) ;;
10161                 *)
10162                         echo "(That's peculiar, fixing that to be -1.)"
10163                         rd_nodata=-1
10164                         ;;
10165                 esac
10166                 case "$eagain" in
10167                 '')
10168                         echo "Forcing errno EAGAIN on read() with no data available."
10169                         eagain=EAGAIN
10170                         ;;
10171                 *)
10172                         echo "Your read() sets errno to $eagain when no data is available."
10173                         ;;
10174                 esac
10175                 status=`$cat try.err`
10176                 case "$status" in
10177                 0) echo "And it correctly returns 0 to signal EOF.";;
10178                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10179                 *) echo "However, your read() returns '$status' on EOF??";;
10180                 esac
10181                 val="$define"
10182                 if test "$status" = "$rd_nodata"; then
10183                         echo "WARNING: you can't distinguish between EOF and no data!"
10184                         val="$undef"
10185                 fi
10186         else
10187                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10188                 eagain=EAGAIN
10189         fi
10190         set d_eofnblk
10191         eval $setvar
10192         ;;
10193 *)
10194         echo "Using $hint value $eagain."
10195         echo "Your read() returns $rd_nodata when no data is present."
10196         case "$d_eofnblk" in
10197         "$define") echo "And you can see EOF because read() returns 0.";;
10198         "$undef") echo "But you can't see EOF status from read() returned value.";;
10199         *)
10200                 echo "(Assuming you can't see EOF status from read anyway.)"
10201                 d_eofnblk=$undef
10202                 ;;
10203         esac
10204         ;;
10205 esac
10206 $rm -f try try.* .out core head.c mtry
10207
10208 : see if fchdir exists
10209 set fchdir d_fchdir
10210 eval $inlibc
10211
10212 : see if fchmod exists
10213 set fchmod d_fchmod
10214 eval $inlibc
10215
10216 : see if fchown exists
10217 set fchown d_fchown
10218 eval $inlibc
10219
10220 : see if this is an fcntl system
10221 set fcntl d_fcntl
10222 eval $inlibc
10223
10224 echo " "
10225 : See if fcntl-based locking works.
10226 $cat >try.c <<EOCP
10227 #include <stdlib.h>
10228 #include <unistd.h>
10229 #include <fcntl.h>
10230 #include <signal.h>
10231 $signal_t blech(x) int x; { exit(3); }
10232 int main() {
10233 #if defined(F_SETLK) && defined(F_SETLKW)
10234      struct flock flock;
10235      int retval, fd;
10236      fd = open("try.c", O_RDONLY);
10237      flock.l_type = F_RDLCK;
10238      flock.l_whence = SEEK_SET;
10239      flock.l_start = flock.l_len = 0;
10240      signal(SIGALRM, blech);
10241      alarm(10);
10242      retval = fcntl(fd, F_SETLK, &flock);
10243      close(fd);
10244      (retval < 0 ? exit(2) : exit(0));
10245 #else
10246      exit(2);
10247 #endif
10248 }
10249 EOCP
10250 echo "Checking if fcntl-based file locking works... "
10251 case "$d_fcntl" in
10252 "$define")
10253         set try
10254         if eval $compile_ok; then
10255                 if $run ./try; then
10256                         echo "Yes, it seems to work."
10257                         val="$define"
10258                 else
10259                         echo "Nope, it didn't work."
10260                         val="$undef"
10261                         case "$?" in
10262                         3) $cat >&4 <<EOM
10263 ***
10264 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10265 *** This is (almost) impossible.
10266 *** If your NFS lock daemons are not feeling well, something like
10267 *** this may happen, please investigate.  Cannot continue, aborting.
10268 ***
10269 EOM
10270                                 exit 1
10271                                 ;;
10272                         esac
10273                 fi
10274         else
10275                 echo "I'm unable to compile the test program, so I'll assume not."
10276                 val="$undef"
10277         fi
10278         ;;
10279 *) val="$undef";
10280         echo "Nope, since you don't even have fcntl()."
10281         ;;
10282 esac
10283 set d_fcntl_can_lock
10284 eval $setvar
10285 $rm -f try*
10286
10287
10288 : see if sys/select.h has to be included
10289 set sys/select.h i_sysselct
10290 eval $inhdr
10291
10292 : see if we should include time.h, sys/time.h, or both
10293 echo " "
10294 if test "X$timeincl" = X; then
10295         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10296         $echo $n "I'm now running the test program...$c"
10297         $cat >try.c <<'EOCP'
10298 #include <sys/types.h>
10299 #ifdef I_TIME
10300 #include <time.h>
10301 #endif
10302 #ifdef I_SYSTIME
10303 #ifdef SYSTIMEKERNEL
10304 #define KERNEL
10305 #endif
10306 #include <sys/time.h>
10307 #endif
10308 #ifdef I_SYSSELECT
10309 #include <sys/select.h>
10310 #endif
10311 int main()
10312 {
10313         struct tm foo;
10314 #ifdef S_TIMEVAL
10315         struct timeval bar;
10316 #endif
10317 #ifdef S_TIMEZONE
10318         struct timezone tzp;
10319 #endif
10320         if (foo.tm_sec == foo.tm_sec)
10321                 exit(0);
10322 #ifdef S_TIMEVAL
10323         if (bar.tv_sec == bar.tv_sec)
10324                 exit(0);
10325 #endif
10326         exit(1);
10327 }
10328 EOCP
10329         flags=''
10330         for s_timezone in '-DS_TIMEZONE' ''; do
10331         sysselect=''
10332         for s_timeval in '-DS_TIMEVAL' ''; do
10333         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10334         for i_time in '' '-DI_TIME'; do
10335         for i_systime in '-DI_SYSTIME' ''; do
10336                 case "$flags" in
10337                 '') $echo $n ".$c"
10338                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10339                         if eval $compile; then
10340                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10341                                 shift
10342                                 flags="$*"
10343                                 echo " "
10344                                 $echo $n "Succeeded with $flags$c"
10345                         fi
10346                         ;;
10347                 esac
10348         done
10349         done
10350         done
10351         done
10352         done
10353         timeincl=''
10354         echo " "
10355         case "$flags" in
10356         *SYSTIMEKERNEL*) i_systimek="$define"
10357                 timeincl=`./findhdr sys/time.h`
10358                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10359         *) i_systimek="$undef";;
10360         esac
10361         case "$flags" in
10362         *I_TIME*) i_time="$define"
10363                 timeincl=`./findhdr time.h`" $timeincl"
10364                 echo "We'll include <time.h>." >&4;;
10365         *) i_time="$undef";;
10366         esac
10367         case "$flags" in
10368         *I_SYSTIME*) i_systime="$define"
10369                 timeincl=`./findhdr sys/time.h`" $timeincl"
10370                 echo "We'll include <sys/time.h>." >&4;;
10371         *) i_systime="$undef";;
10372         esac
10373         $rm -f try.c try
10374 fi
10375
10376 : check for fd_set items
10377 $cat <<EOM
10378
10379 Checking to see how well your C compiler handles fd_set and friends ...
10380 EOM
10381 $cat >try.c <<EOCP
10382 #$i_systime I_SYS_TIME
10383 #$i_sysselct I_SYS_SELECT
10384 #$d_socket HAS_SOCKET
10385 #include <sys/types.h>
10386 #ifdef HAS_SOCKET
10387 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10388 #endif
10389 #ifdef I_SYS_TIME
10390 #include <sys/time.h>
10391 #endif
10392 #ifdef I_SYS_SELECT
10393 #include <sys/select.h>
10394 #endif
10395 int main() {
10396         fd_set fds;
10397
10398 #ifdef TRYBITS
10399         if(fds.fds_bits);
10400 #endif
10401
10402 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10403         exit(0);
10404 #else
10405         exit(1);
10406 #endif
10407 }
10408 EOCP
10409 set try -DTRYBITS
10410 if eval $compile; then
10411         d_fds_bits="$define"
10412         d_fd_set="$define"
10413         echo "Well, your system knows about the normal fd_set typedef..." >&4
10414         if $run ./try; then
10415                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10416                 d_fd_macros="$define"
10417         else
10418                 $cat >&4 <<'EOM'
10419 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10420 EOM
10421                 d_fd_macros="$undef"
10422         fi
10423 else
10424         $cat <<'EOM'
10425 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10426 EOM
10427         set try
10428         if eval $compile; then
10429                 d_fds_bits="$undef"
10430                 d_fd_set="$define"
10431                 echo "Well, your system has some sort of fd_set available..." >&4
10432                 if $run ./try; then
10433                         echo "and you have the normal fd_set macros." >&4
10434                         d_fd_macros="$define"
10435                 else
10436                         $cat <<'EOM'
10437 but not the normal fd_set macros!  Gross!  More work for me...
10438 EOM
10439                         d_fd_macros="$undef"
10440                 fi
10441         else
10442         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10443                 d_fd_set="$undef"
10444                 d_fds_bits="$undef"
10445                 d_fd_macros="$undef"
10446         fi
10447 fi
10448 $rm -f try try.*
10449
10450 : see if fgetpos exists
10451 set fgetpos d_fgetpos
10452 eval $inlibc
10453
10454 : see if finite exists
10455 set finite d_finite
10456 eval $inlibc
10457
10458 : see if finitel exists
10459 set finitel d_finitel
10460 eval $inlibc
10461
10462 : see if flock exists
10463 set flock d_flock
10464 eval $inlibc
10465
10466 : see if prototype for flock is available
10467 echo " "
10468 set d_flockproto flock $i_sysfile sys/file.h
10469 eval $hasproto
10470
10471 : see if fork exists
10472 set fork d_fork
10473 eval $inlibc
10474
10475 : see if fp_class exists
10476 set fp_class d_fp_class
10477 eval $inlibc
10478
10479 : see if pathconf exists
10480 set pathconf d_pathconf
10481 eval $inlibc
10482
10483 : see if fpathconf exists
10484 set fpathconf d_fpathconf
10485 eval $inlibc
10486
10487 : see if fpclass exists
10488 set fpclass d_fpclass
10489 eval $inlibc
10490
10491 : see if fpclassify exists
10492 set fpclassify d_fpclassify
10493 eval $inlibc
10494
10495 : see if fpclassl exists
10496 set fpclassl d_fpclassl
10497 eval $inlibc
10498
10499
10500 : check for fpos64_t
10501 echo " "
10502 echo "Checking to see if you have fpos64_t..." >&4
10503 $cat >try.c <<EOCP
10504 #include <stdio.h>
10505 int main() { fpos64_t x = 7; }
10506 EOCP
10507 set try
10508 if eval $compile; then
10509         val="$define"
10510         echo "You have fpos64_t."
10511 else
10512         val="$undef"
10513         echo "You do not have fpos64_t."
10514         case "$fpossize" in
10515         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10516         esac
10517 fi
10518 $rm -f try.* try
10519 set d_fpos64_t
10520 eval $setvar
10521
10522 : see if frexpl exists
10523 set frexpl d_frexpl
10524 eval $inlibc
10525
10526 : see if this is a sys/param system
10527 set sys/param.h i_sysparam
10528 eval $inhdr
10529
10530 : see if this is a sys/mount.h system
10531 set sys/mount.h i_sysmount
10532 eval $inhdr
10533
10534
10535 echo " "
10536 echo "Checking to see if your system supports struct fs_data..." >&4
10537 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10538 eval $hasstruct
10539 case "$d_fs_data_s" in
10540 "$define")      echo "Yes, it does."   ;;
10541 *)              echo "No, it doesn't." ;;
10542 esac
10543
10544 : see if fseeko exists
10545 set fseeko d_fseeko
10546 eval $inlibc
10547 case "$longsize" in
10548 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10549 esac
10550
10551 : see if fsetpos exists
10552 set fsetpos d_fsetpos
10553 eval $inlibc
10554
10555
10556 : see if fstatfs exists
10557 set fstatfs d_fstatfs
10558 eval $inlibc
10559
10560
10561 : see if statvfs exists
10562 set statvfs d_statvfs
10563 eval $inlibc
10564
10565 : see if fstatvfs exists
10566 set fstatvfs d_fstatvfs
10567 eval $inlibc
10568
10569
10570 : see if fsync exists
10571 set fsync d_fsync
10572 eval $inlibc
10573
10574 : see if ftello exists
10575 set ftello d_ftello
10576 eval $inlibc
10577 case "$longsize" in
10578 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10579 esac
10580
10581 : see if getcwd exists
10582 set getcwd d_getcwd
10583 eval $inlibc
10584
10585 : see if getespwnam exists
10586 set getespwnam d_getespwnam
10587 eval $inlibc
10588
10589
10590 : see if getfsstat exists
10591 set getfsstat d_getfsstat
10592 eval $inlibc
10593
10594 : see if getgrent exists
10595 set getgrent d_getgrent
10596 eval $inlibc
10597
10598 : see if gethostbyaddr exists
10599 set gethostbyaddr d_gethbyaddr
10600 eval $inlibc
10601
10602 : see if gethostbyname exists
10603 set gethostbyname d_gethbyname
10604 eval $inlibc
10605
10606 : see if gethostent exists
10607 set gethostent d_gethent
10608 eval $inlibc
10609
10610 : see how we will look up host name
10611 echo " "
10612 call=''
10613 if set gethostname val -f d_gethname; eval $csym; $val; then
10614         echo 'gethostname() found.' >&4
10615         d_gethname="$define"
10616         call=gethostname
10617 fi
10618 if set uname val -f d_uname; eval $csym; $val; then
10619         if ./xenix; then
10620                 $cat <<'EOM'
10621 uname() was found, but you're running xenix, and older versions of xenix
10622 have a broken uname(). If you don't really know whether your xenix is old
10623 enough to have a broken system call, use the default answer.
10624
10625 EOM
10626                 dflt=y
10627                 case "$d_uname" in
10628                 "$define") dflt=n;;
10629                 esac
10630                 rp='Is your uname() broken?'
10631                 . ./myread
10632                 case "$ans" in
10633                 n*) d_uname="$define"; call=uname;;
10634                 esac
10635         else
10636                 echo 'uname() found.' >&4
10637                 d_uname="$define"
10638                 case "$call" in
10639                 '') call=uname ;;
10640                 esac
10641         fi
10642 fi
10643 case "$d_gethname" in
10644 '') d_gethname="$undef";;
10645 esac
10646 case "$d_uname" in
10647 '') d_uname="$undef";;
10648 esac
10649 case "$d_uname$d_gethname" in
10650 *define*)
10651         dflt=n
10652         cat <<EOM
10653  
10654 Every now and then someone has a $call() that lies about the hostname
10655 but can't be fixed for political or economic reasons.  If you wish, I can
10656 pretend $call() isn't there and maybe compute hostname at run-time
10657 thanks to the '$phostname' command.
10658
10659 EOM
10660         rp="Shall I ignore $call() from now on?"
10661         . ./myread
10662         case "$ans" in
10663         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10664         esac;;
10665 esac
10666 case "$phostname" in
10667 '') aphostname='';;
10668 *) case "$aphostname" in
10669         /*) ;;
10670         *) set X $phostname
10671                 shift
10672                 file=$1
10673                 shift
10674                 file=`./loc $file $file $pth`
10675                 aphostname=`echo $file $*`
10676                 ;;
10677         esac
10678         ;;
10679 esac
10680 case "$d_uname$d_gethname" in
10681 *define*) ;;
10682 *)
10683         case "$phostname" in
10684         '')
10685                 echo "There will be no way for $package to get your hostname." >&4;;
10686         *)
10687         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10688                 ;;
10689         esac;;
10690 esac
10691 case "$d_phostname" in
10692 '') d_phostname="$undef";;
10693 esac
10694
10695 : see if this is a netdb.h system
10696 set netdb.h i_netdb
10697 eval $inhdr
10698
10699 : see if prototypes for various gethostxxx netdb.h functions are available
10700 echo " "
10701 set d_gethostprotos gethostent $i_netdb netdb.h
10702 eval $hasproto
10703
10704 : see if getitimer exists
10705 set getitimer d_getitimer
10706 eval $inlibc
10707
10708 : see if getlogin exists
10709 set getlogin d_getlogin
10710 eval $inlibc
10711
10712 : see if getmnt exists
10713 set getmnt d_getmnt
10714 eval $inlibc
10715
10716 : see if getmntent exists
10717 set getmntent d_getmntent
10718 eval $inlibc
10719
10720 : see if getnetbyaddr exists
10721 set getnetbyaddr d_getnbyaddr
10722 eval $inlibc
10723
10724 : see if getnetbyname exists
10725 set getnetbyname d_getnbyname
10726 eval $inlibc
10727
10728 : see if getnetent exists
10729 set getnetent d_getnent
10730 eval $inlibc
10731
10732 : see if prototypes for various getnetxxx netdb.h functions are available
10733 echo " "
10734 set d_getnetprotos getnetent $i_netdb netdb.h
10735 eval $hasproto
10736
10737 : see if getpagesize exists
10738 set getpagesize d_getpagsz
10739 eval $inlibc
10740
10741
10742 : see if getprotobyname exists
10743 set getprotobyname d_getpbyname
10744 eval $inlibc
10745
10746 : see if getprotobynumber exists
10747 set getprotobynumber d_getpbynumber
10748 eval $inlibc
10749
10750 : see if getprotoent exists
10751 set getprotoent d_getpent
10752 eval $inlibc
10753
10754 : see if getpgid exists
10755 set getpgid d_getpgid
10756 eval $inlibc
10757
10758 : see if getpgrp2 exists
10759 set getpgrp2 d_getpgrp2
10760 eval $inlibc
10761
10762 : see if getppid exists
10763 set getppid d_getppid
10764 eval $inlibc
10765
10766 : see if getpriority exists
10767 set getpriority d_getprior
10768 eval $inlibc
10769
10770 : see if prototypes for various getprotoxxx netdb.h functions are available
10771 echo " "
10772 set d_getprotoprotos getprotoent $i_netdb netdb.h
10773 eval $hasproto
10774
10775 : see if getprpwnam exists
10776 set getprpwnam d_getprpwnam
10777 eval $inlibc
10778
10779 : see if getpwent exists
10780 set getpwent d_getpwent
10781 eval $inlibc
10782
10783
10784 : see if getservbyname exists
10785 set getservbyname d_getsbyname
10786 eval $inlibc
10787
10788 : see if getservbyport exists
10789 set getservbyport d_getsbyport
10790 eval $inlibc
10791
10792 : see if getservent exists
10793 set getservent d_getsent
10794 eval $inlibc
10795
10796 : see if prototypes for various getservxxx netdb.h functions are available
10797 echo " "
10798 set d_getservprotos getservent $i_netdb netdb.h
10799 eval $hasproto
10800
10801 : see if getspnam exists
10802 set getspnam d_getspnam
10803 eval $inlibc
10804
10805 : see if gettimeofday or ftime exists
10806 set gettimeofday d_gettimeod
10807 eval $inlibc
10808 case "$d_gettimeod" in
10809 "$undef")
10810         set ftime d_ftime 
10811         eval $inlibc
10812         ;;
10813 *)
10814         val="$undef"; set d_ftime; eval $setvar
10815         ;;
10816 esac
10817 case "$d_gettimeod$d_ftime" in
10818 "$undef$undef")
10819         echo " "
10820         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10821         ;;
10822 esac
10823
10824 : see if this is an grp system
10825 set grp.h i_grp
10826 eval $inhdr
10827
10828 case "$i_grp" in
10829 $define)
10830         xxx=`./findhdr grp.h`
10831         $cppstdin $cppflags $cppminus < $xxx >$$.h
10832
10833         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10834                 val="$define"
10835         else
10836                 val="$undef"
10837         fi
10838         set d_grpasswd
10839         eval $setvar
10840
10841         $rm -f $$.h
10842         ;;
10843 *)
10844         val="$undef";
10845         set d_grpasswd; eval $setvar
10846         ;;
10847 esac
10848
10849 : see if hasmntopt exists
10850 set hasmntopt d_hasmntopt
10851 eval $inlibc
10852
10853 : see if this is a netinet/in.h or sys/in.h system
10854 set netinet/in.h i_niin sys/in.h i_sysin
10855 eval $inhdr
10856
10857 : see if arpa/inet.h has to be included
10858 set arpa/inet.h i_arpainet
10859 eval $inhdr
10860
10861 : see if htonl --and friends-- exists
10862 val=''
10863 set htonl val
10864 eval $inlibc
10865
10866 : Maybe they are macros.
10867 case "$val" in
10868 $undef)
10869         $cat >htonl.c <<EOM
10870 #include <stdio.h>
10871 #include <sys/types.h>
10872 #$i_niin I_NETINET_IN
10873 #$i_sysin I_SYS_IN
10874 #$i_arpainet I_ARPA_INET
10875 #ifdef I_NETINET_IN
10876 #include <netinet/in.h>
10877 #endif
10878 #ifdef I_SYS_IN
10879 #include <sys/in.h>
10880 #endif
10881 #ifdef I_ARPA_INET
10882 #include <arpa/inet.h>
10883 #endif
10884 #ifdef htonl
10885 printf("Defined as a macro.");
10886 #endif
10887 EOM
10888         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10889         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10890                 val="$define"
10891                 echo "But it seems to be defined as a macro." >&4
10892         fi
10893         $rm -f htonl.?
10894         ;;
10895 esac
10896 set d_htonl
10897 eval $setvar
10898
10899 : index or strchr
10900 echo " "
10901 if set index val -f; eval $csym; $val; then
10902         if set strchr val -f d_strchr; eval $csym; $val; then
10903                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10904                         val="$define"
10905                         vali="$undef"
10906                         echo "strchr() found." >&4
10907                 else
10908                         val="$undef"
10909                         vali="$define"
10910                         echo "index() found." >&4
10911                 fi
10912         else
10913                 val="$undef"
10914                 vali="$define"
10915                 echo "index() found." >&4
10916         fi
10917 else
10918         if set strchr val -f d_strchr; eval $csym; $val; then
10919                 val="$define"
10920                 vali="$undef"
10921                 echo "strchr() found." >&4
10922         else
10923                 echo "No index() or strchr() found!" >&4
10924                 val="$undef"
10925                 vali="$undef"
10926         fi
10927 fi
10928 set d_strchr; eval $setvar
10929 val="$vali"
10930 set d_index; eval $setvar
10931
10932 : check whether inet_aton exists
10933 set inet_aton d_inetaton
10934 eval $inlibc
10935
10936 : Look for isascii
10937 echo " "
10938 $cat >isascii.c <<'EOCP'
10939 #include <stdio.h>
10940 #include <ctype.h>
10941 int main() {
10942         int c = 'A';
10943         if (isascii(c))
10944                 exit(0);
10945         else
10946                 exit(1);
10947 }
10948 EOCP
10949 set isascii
10950 if eval $compile; then
10951         echo "isascii() found." >&4
10952         val="$define"
10953 else
10954         echo "isascii() NOT found." >&4
10955         val="$undef"
10956 fi
10957 set d_isascii
10958 eval $setvar
10959 $rm -f isascii*
10960
10961 : see if isfinite exists
10962 set isfinite d_isfinite
10963 eval $inlibc
10964
10965 : see if isinf exists
10966 set isinf d_isinf
10967 eval $inlibc
10968
10969 : see if isnan exists
10970 set isnan d_isnan
10971 eval $inlibc
10972
10973 : see if isnanl exists
10974 set isnanl d_isnanl
10975 eval $inlibc
10976
10977 : see if killpg exists
10978 set killpg d_killpg
10979 eval $inlibc
10980
10981 : see if lchown exists
10982 echo " "
10983 $cat > try.c <<'EOCP'
10984 /* System header to define __stub macros and hopefully few prototypes,
10985     which can conflict with char lchown(); below.  */
10986 #include <assert.h>
10987 /* Override any gcc2 internal prototype to avoid an error.  */
10988 /* We use char because int might match the return type of a gcc2
10989    builtin and then its argument prototype would still apply.  */
10990 char lchown();
10991 int main() {
10992     /*  The GNU C library defines this for functions which it implements
10993         to always fail with ENOSYS.  Some functions are actually named
10994         something starting with __ and the normal name is an alias.  */
10995 #if defined (__stub_lchown) || defined (__stub___lchown)
10996 choke me
10997 #else
10998 lchown();
10999 #endif
11000 ; return 0; }
11001 EOCP
11002 set try
11003 if eval $compile; then
11004     $echo "lchown() found." >&4
11005     val="$define"
11006 else
11007     $echo "lchown() NOT found." >&4
11008     val="$undef"
11009 fi
11010 set d_lchown
11011 eval $setvar
11012
11013 : See if number of significant digits in a double precision number is known
11014 echo " "
11015 $cat >ldbl_dig.c <<EOM
11016 #$i_limits I_LIMITS
11017 #$i_float I_FLOAT
11018 #ifdef I_LIMITS
11019 #include <limits.h>
11020 #endif
11021 #ifdef I_FLOAT
11022 #include <float.h>
11023 #endif
11024 #ifdef LDBL_DIG
11025 printf("Contains LDBL_DIG");
11026 #endif
11027 EOM
11028 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11029 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11030         echo "LDBL_DIG found." >&4
11031         val="$define"
11032 else
11033         echo "LDBL_DIG NOT found." >&4
11034         val="$undef"
11035 fi
11036 $rm -f ldbl_dig.?
11037 set d_ldbl_dig
11038 eval $setvar
11039
11040 : see if link exists
11041 set link d_link
11042 eval $inlibc
11043
11044 : see if localeconv exists
11045 set localeconv d_locconv
11046 eval $inlibc
11047
11048 : see if lockf exists
11049 set lockf d_lockf
11050 eval $inlibc
11051
11052 : see if prototype for lseek is available
11053 echo " "
11054 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11055 eval $hasproto
11056
11057 : see if lstat exists
11058 set lstat d_lstat
11059 eval $inlibc
11060
11061 : see if madvise exists
11062 set madvise d_madvise
11063 eval $inlibc
11064
11065 : see if mblen exists
11066 set mblen d_mblen
11067 eval $inlibc
11068
11069 : see if mbstowcs exists
11070 set mbstowcs d_mbstowcs
11071 eval $inlibc
11072
11073 : see if mbtowc exists
11074 set mbtowc d_mbtowc
11075 eval $inlibc
11076
11077 : see if memchr exists
11078 set memchr d_memchr
11079 eval $inlibc
11080
11081 : see if memcmp exists
11082 set memcmp d_memcmp
11083 eval $inlibc
11084
11085 : see if memcpy exists
11086 set memcpy d_memcpy
11087 eval $inlibc
11088
11089 : see if memmove exists
11090 set memmove d_memmove
11091 eval $inlibc
11092
11093 : see if memset exists
11094 set memset d_memset
11095 eval $inlibc
11096
11097 : see if mkdir exists
11098 set mkdir d_mkdir
11099 eval $inlibc
11100
11101 : see if mkdtemp exists
11102 set mkdtemp d_mkdtemp
11103 eval $inlibc
11104
11105 : see if mkfifo exists
11106 set mkfifo d_mkfifo
11107 eval $inlibc
11108
11109 : see if mkstemp exists
11110 set mkstemp d_mkstemp
11111 eval $inlibc
11112
11113 : see if mkstemps exists
11114 set mkstemps d_mkstemps
11115 eval $inlibc
11116
11117 : see if mktime exists
11118 set mktime d_mktime
11119 eval $inlibc
11120
11121 : see if this is a sys/mman.h system
11122 set sys/mman.h i_sysmman
11123 eval $inhdr
11124
11125 : see if mmap exists
11126 set mmap d_mmap
11127 eval $inlibc
11128 : see what shmat returns
11129 : default to something harmless
11130 mmaptype='void *'
11131 case "$i_sysmman$d_mmap" in
11132 "$define$define")
11133         $cat >mmap.c <<'END'
11134 #include <sys/mman.h>
11135 void *mmap();
11136 END
11137         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11138                 mmaptype='void *'
11139         else
11140                 mmaptype='caddr_t'
11141         fi
11142         echo "and it returns ($mmaptype)." >&4
11143         ;;
11144 esac
11145
11146
11147
11148 : see if mprotect exists
11149 set mprotect d_mprotect
11150 eval $inlibc
11151
11152 : see if msgctl exists
11153 set msgctl d_msgctl
11154 eval $inlibc
11155
11156 : see if msgget exists
11157 set msgget d_msgget
11158 eval $inlibc
11159
11160 : see if msgsnd exists
11161 set msgsnd d_msgsnd
11162 eval $inlibc
11163
11164 : see if msgrcv exists
11165 set msgrcv d_msgrcv
11166 eval $inlibc
11167
11168 : see how much of the 'msg*(2)' library is present.
11169 h_msg=true
11170 echo " "
11171 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11172 *"$undef"*) h_msg=false;;
11173 esac
11174 case "$osname" in
11175 freebsd)
11176     case "`ipcs 2>&1`" in
11177     "SVID messages"*"not configured"*)
11178         echo "Your $osname does not have the msg*(2) configured." >&4
11179         h_msg=false
11180         val="$undef"
11181         set msgctl d_msgctl
11182         eval $setvar
11183         set msgget d_msgget
11184         eval $setvar
11185         set msgsnd d_msgsnd
11186         eval $setvar
11187         set msgrcv d_msgrcv
11188         eval $setvar
11189         ;;
11190     esac
11191     ;;
11192 esac
11193 : we could also check for sys/ipc.h ...
11194 if $h_msg && $test `./findhdr sys/msg.h`; then
11195         echo "You have the full msg*(2) library." >&4
11196         val="$define"
11197 else
11198         echo "You don't have the full msg*(2) library." >&4
11199         val="$undef"
11200 fi
11201 set d_msg
11202 eval $setvar
11203
11204
11205 echo " "
11206 echo "Checking to see if your system supports struct msghdr..." >&4
11207 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11208 eval $hasstruct
11209 case "$d_msghdr_s" in
11210 "$define")      echo "Yes, it does."   ;;
11211 *)              echo "No, it doesn't." ;;
11212 esac
11213
11214
11215 : see if msync exists
11216 set msync d_msync
11217 eval $inlibc
11218
11219 : see if munmap exists
11220 set munmap d_munmap
11221 eval $inlibc
11222
11223 : see if nice exists
11224 set nice d_nice
11225 eval $inlibc
11226
11227 : see if this is a langinfo.h system
11228 set langinfo.h i_langinfo
11229 eval $inhdr
11230
11231 : see if nl_langinfo exists
11232 set nl_langinfo d_nl_langinfo
11233 eval $inlibc
11234
11235 : check for length of character
11236 echo " "
11237 case "$charsize" in
11238 '')
11239         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11240         $cat >try.c <<'EOCP'
11241 #include <stdio.h>
11242 int main()
11243 {
11244     printf("%d\n", (int)sizeof(char));
11245     exit(0);
11246 }
11247 EOCP
11248         set try
11249         if eval $compile_ok; then
11250                 dflt=`$run ./try`
11251         else
11252                 dflt='1'
11253                 echo "(I can't seem to compile the test program.  Guessing...)"
11254         fi
11255         ;;
11256 *)
11257         dflt="$charsize"
11258         ;;
11259 esac
11260 rp="What is the size of a character (in bytes)?"
11261 . ./myread
11262 charsize="$ans"
11263 $rm -f try.c try
11264
11265 : check for volatile keyword
11266 echo " "
11267 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11268 $cat >try.c <<'EOCP'
11269 int main()
11270 {
11271         typedef struct _goo_struct goo_struct;
11272         goo_struct * volatile goo = ((goo_struct *)0);
11273         struct _goo_struct {
11274                 long long_int;
11275                 int reg_int;
11276                 char char_var;
11277         };
11278         typedef unsigned short foo_t;
11279         char *volatile foo;
11280         volatile int bar;
11281         volatile foo_t blech;
11282         foo = foo;
11283 }
11284 EOCP
11285 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11286         val="$define"
11287         echo "Yup, it does."
11288 else
11289         val="$undef"
11290         echo "Nope, it doesn't."
11291 fi
11292 set d_volatile
11293 eval $setvar
11294 $rm -f try.*
11295
11296
11297 echo " "
11298 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11299
11300 case "$use64bitint:$d_quad:$quadtype" in
11301 define:define:?*)
11302         ivtype="$quadtype"
11303         uvtype="$uquadtype"
11304         ivsize=8
11305         uvsize=8
11306         ;;
11307 *)      ivtype="long"
11308         uvtype="unsigned long"
11309         ivsize=$longsize
11310         uvsize=$longsize
11311         ;;
11312 esac
11313
11314 case "$uselongdouble:$d_longdbl" in
11315 define:define)
11316         nvtype="long double"
11317         nvsize=$longdblsize
11318         ;;
11319 *)      nvtype=double
11320         nvsize=$doublesize
11321         ;;
11322 esac
11323
11324 $echo "(IV will be "$ivtype", $ivsize bytes)"
11325 $echo "(UV will be "$uvtype", $uvsize bytes)"
11326 $echo "(NV will be "$nvtype", $nvsize bytes)"
11327
11328 $cat >try.c <<EOCP
11329 #$i_inttypes I_INTTYPES
11330 #ifdef I_INTTYPES
11331 #include <inttypes.h>
11332 #endif
11333 #include <stdio.h>
11334 int main() {
11335 #ifdef INT8
11336    int8_t i =  INT8_MAX;
11337   uint8_t u = UINT8_MAX;
11338   printf("int8_t\n");
11339 #endif
11340 #ifdef INT16
11341    int16_t i =  INT16_MAX;
11342   uint16_t i = UINT16_MAX;
11343   printf("int16_t\n");
11344 #endif
11345 #ifdef INT32
11346    int32_t i =  INT32_MAX;
11347   uint32_t u = UINT32_MAX;
11348   printf("int32_t\n");
11349 #endif
11350 }
11351 EOCP
11352
11353 case "$i8type" in
11354 '')     case "$charsize" in
11355         1)      i8type=char
11356                 u8type="unsigned char"
11357                 i8size=$charsize
11358                 u8size=$charsize
11359                 ;;
11360         esac
11361         ;;
11362 esac
11363 case "$i8type" in
11364 '')     set try -DINT8
11365         if eval $compile; then
11366                 case "`$run ./try`" in
11367                 int8_t) i8type=int8_t
11368                         u8type=uint8_t
11369                         i8size=1
11370                         u8size=1
11371                         ;;
11372                 esac
11373         fi
11374         ;;
11375 esac
11376 case "$i8type" in
11377 '')     if $test $charsize -ge 1; then
11378                 i8type=char
11379                 u8type="unsigned char"
11380                 i8size=$charsize
11381                 u8size=$charsize
11382         fi
11383         ;;
11384 esac
11385
11386 case "$i16type" in
11387 '')     case "$shortsize" in
11388         2)      i16type=short
11389                 u16type="unsigned short"
11390                 i16size=$shortsize
11391                 u16size=$shortsize
11392                 ;;
11393         esac
11394         ;;
11395 esac
11396 case "$i16type" in
11397 '')     set try -DINT16
11398         if eval $compile; then
11399                 case "`$run ./try`" in
11400                 int16_t)
11401                         i16type=int16_t
11402                         u16type=uint16_t
11403                         i16size=2
11404                         u16size=2
11405                         ;;
11406                 esac
11407         fi
11408         ;;
11409 esac
11410 case "$i16type" in
11411 '')     if $test $shortsize -ge 2; then
11412                 i16type=short
11413                 u16type="unsigned short"
11414                 i16size=$shortsize
11415                 u16size=$shortsize
11416         fi
11417         ;;
11418 esac
11419
11420 case "$i32type" in
11421 '')     case "$longsize" in
11422         4)      i32type=long
11423                 u32type="unsigned long"
11424                 i32size=$longsize
11425                 u32size=$longsize
11426                 ;;
11427         *)      case "$intsize" in
11428                 4)      i32type=int
11429                         u32type="unsigned int"
11430                         i32size=$intsize
11431                         u32size=$intsize
11432                         ;;
11433                 esac
11434                 ;;
11435         esac
11436         ;;
11437 esac
11438 case "$i32type" in
11439 '')     set try -DINT32
11440         if eval $compile; then
11441                 case "`$run ./try`" in
11442                 int32_t)
11443                         i32type=int32_t
11444                         u32type=uint32_t
11445                         i32size=4
11446                         u32size=4
11447                         ;;
11448                 esac
11449         fi
11450         ;;
11451 esac
11452 case "$i32type" in
11453 '')     if $test $intsize -ge 4; then
11454                 i32type=int
11455                 u32type="unsigned int"
11456                 i32size=$intsize
11457                 u32size=$intsize
11458         fi
11459         ;;
11460 esac
11461
11462 case "$i64type" in
11463 '')     case "$d_quad:$quadtype" in
11464         define:?*)
11465                 i64type="$quadtype"
11466                 u64type="$uquadtype"
11467                 i64size=8
11468                 u64size=8
11469                 ;;
11470         esac
11471         ;;
11472 esac
11473
11474 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11475 : volatile so that the compiler has to store it out to memory.
11476 if test X"$d_volatile" = X"$define"; then
11477         volatile=volatile
11478 fi
11479 $cat <<EOP >try.c
11480 #include <stdio.h>
11481 #include <sys/types.h>
11482 #include <signal.h>
11483 #ifdef SIGFPE
11484 $volatile int bletched = 0;
11485 $signal_t blech(s) int s; { bletched = 1; }
11486 #endif
11487 int main() {
11488     $uvtype u = 0;
11489     $nvtype d;
11490     int     n = 8 * $uvsize;
11491     int     i;
11492 #ifdef SIGFPE
11493     signal(SIGFPE, blech);
11494 #endif
11495
11496     for (i = 0; i < n; i++) {
11497       u = u << 1 | ($uvtype)1;
11498       d = ($nvtype)u;
11499       if (($uvtype)d != u)
11500         break;
11501       if (d <= 0)
11502         break;
11503       d = ($nvtype)(u - 1);
11504       if (($uvtype)d != (u - 1))
11505         break;
11506 #ifdef SIGFPE
11507       if (bletched) {
11508         break;
11509 #endif
11510       } 
11511     }
11512     printf("%d\n", ((i == n) ? -n : i));
11513     exit(0);
11514 }
11515 EOP
11516 set try
11517
11518 d_nv_preserves_uv="$undef"
11519 if eval $compile; then
11520         d_nv_preserves_uv_bits="`$run ./try`"
11521 fi
11522 case "$d_nv_preserves_uv_bits" in
11523 \-[1-9]*)       
11524         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11525         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11526         d_nv_preserves_uv="$define"
11527         ;;
11528 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11529         d_nv_preserves_uv="$undef" ;;
11530 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11531         d_nv_preserves_uv_bits="$undef" ;;
11532 esac
11533
11534 $rm -f try.* try
11535
11536
11537 : check for off64_t
11538 echo " "
11539 echo "Checking to see if you have off64_t..." >&4
11540 $cat >try.c <<EOCP
11541 #include <sys/types.h>
11542 #include <unistd.h>
11543 int main() { off64_t x = 7; }
11544 EOCP
11545 set try
11546 if eval $compile; then
11547         val="$define"
11548         echo "You have off64_t."
11549 else
11550         val="$undef"
11551         echo "You do not have off64_t."
11552         case "$lseeksize" in
11553         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11554         esac
11555 fi
11556 $rm -f try.* try
11557 set d_off64_t
11558 eval $setvar
11559
11560 : see if POSIX threads are available
11561 set pthread.h i_pthread
11562 eval $inhdr
11563
11564
11565
11566
11567 : how to create joinable pthreads
11568 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11569         echo " "
11570         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11571         $cat >try.c <<'EOCP'
11572 #include <pthread.h>
11573 int main() {
11574     int detachstate = JOINABLE;
11575 }
11576 EOCP
11577         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11578         if eval $compile; then
11579                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11580                 val="$undef" # Yes, undef.
11581                 set d_old_pthread_create_joinable
11582                 eval $setvar
11583                 val=""
11584                 set old_pthread_create_joinable
11585                 eval $setvar
11586         else
11587                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11588                 if eval $compile; then
11589                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11590                         val="$define"
11591                         set d_old_pthread_create_joinable
11592                         eval $setvar
11593                         val=PTHREAD_CREATE_UNDETACHED
11594                         set old_pthread_create_joinable
11595                         eval $setvar
11596                 else            
11597                         set try -DJOINABLE=__UNDETACHED
11598                         if eval $compile; then
11599                                 echo "You seem to use __UNDETACHED." >&4
11600                                 val="$define"
11601                                 set d_old_pthread_create_joinable
11602                                 eval $setvar
11603                                 val=__UNDETACHED
11604                                 set old_pthread_create_joinable
11605                                 eval $setvar
11606                         else
11607                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11608                                 val="$define"
11609                                 set d_old_pthread_create_joinable
11610                                 eval $setvar
11611                                 val=0
11612                                 set old_pthread_create_joinable
11613                                 eval $setvar
11614                         fi
11615                 fi
11616         fi
11617         $rm -f try try.*
11618 else
11619     d_old_pthread_create_joinable="$undef"
11620     old_pthread_create_joinable=""
11621 fi
11622
11623 : see if pause exists
11624 set pause d_pause
11625 eval $inlibc
11626
11627 : see if pipe exists
11628 set pipe d_pipe
11629 eval $inlibc
11630
11631 : see if poll exists
11632 set poll d_poll
11633 eval $inlibc
11634
11635 : see if readlink exists
11636 set readlink d_readlink
11637 eval $inlibc
11638
11639 echo " "
11640 procselfexe=''
11641 val="$undef"
11642 case "$d_readlink" in
11643 "$define")
11644         if $issymlink /proc/self/exe ; then
11645                 $ls -l /proc/self/exe > reflect
11646                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11647                         echo "You have Linux-like /proc/self/exe."
11648                         procselfexe='"/proc/self/exe"'
11649                         val="$define"
11650                 fi
11651         fi
11652         if $issymlink /proc/curproc/file ; then
11653                 $ls -l /proc/curproc/file > reflect
11654                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11655                         echo "You have BSD-like /proc/curproc/file."
11656                         procselfexe='"/proc/curproc/file"'
11657                         val="$define"
11658                 fi
11659         fi
11660         ;;
11661 esac
11662 $rm -f reflect
11663 set d_procselfexe
11664 eval $setvar
11665
11666 : see if pthread_atfork exists
11667 set pthread_atfork d_pthread_atfork
11668 eval $inlibc
11669
11670
11671 : see whether the various POSIXish _yields exist
11672 $cat >try.c <<EOP
11673 #include <pthread.h>
11674 #include <stdio.h>
11675 int main() {
11676 #ifdef SCHED_YIELD
11677         sched_yield();
11678 #else
11679 #ifdef PTHREAD_YIELD
11680         pthread_yield();
11681 #else
11682 #ifdef PTHREAD_YIELD_NULL
11683         pthread_yield(NULL);
11684 #endif
11685 #endif
11686 #endif
11687 }
11688 EOP
11689 : see if sched_yield exists
11690 set try -DSCHED_YIELD
11691 if eval $compile; then
11692     val="$define"
11693     sched_yield='sched_yield()'
11694 else
11695     val="$undef"
11696 fi
11697 case "$usethreads" in
11698 $define)
11699         case "$val" in
11700         $define) echo 'sched_yield() found.' >&4        ;;
11701         *)       echo 'sched_yield() NOT found.' >&4    ;;
11702         esac
11703 esac
11704 set d_sched_yield
11705 eval $setvar
11706
11707 : see if pthread_yield exists
11708 set try -DPTHREAD_YIELD
11709 if eval $compile; then
11710     val="$define"
11711     case "$sched_yield" in
11712     '') sched_yield='pthread_yield()' ;;
11713     esac
11714 else
11715     set try -DPTHREAD_YIELD_NULL
11716     if eval $compile; then
11717         val="$define"
11718         case "$sched_yield" in
11719         '') sched_yield='pthread_yield(NULL)' ;;
11720         esac
11721     else
11722         val="$undef"
11723     fi
11724 fi
11725 case "$usethreads" in
11726 $define)
11727         case "$val" in
11728         $define) echo 'pthread_yield() found.' >&4      ;;
11729         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11730         esac
11731         ;;
11732 esac
11733 set d_pthread_yield
11734 eval $setvar
11735
11736 case "$sched_yield" in
11737 '') sched_yield=undef ;;
11738 esac
11739
11740 $rm -f try try.*
11741
11742 : see if this is a pwd.h system
11743 set pwd.h i_pwd
11744 eval $inhdr
11745
11746 case "$i_pwd" in
11747 $define)
11748         xxx=`./findhdr pwd.h`
11749         $cppstdin $cppflags $cppminus < $xxx >$$.h
11750
11751         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11752                 val="$define"
11753         else
11754                 val="$undef"
11755         fi
11756         set d_pwquota
11757         eval $setvar
11758
11759         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11760                 val="$define"
11761         else
11762                 val="$undef"
11763         fi
11764         set d_pwage
11765         eval $setvar
11766
11767         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11768                 val="$define"
11769         else
11770                 val="$undef"
11771         fi
11772         set d_pwchange
11773         eval $setvar
11774
11775         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11776                 val="$define"
11777         else
11778                 val="$undef"
11779         fi
11780         set d_pwclass
11781         eval $setvar
11782
11783         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11784                 val="$define"
11785         else
11786                 val="$undef"
11787         fi
11788         set d_pwexpire
11789         eval $setvar
11790
11791         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11792                 val="$define"
11793         else
11794                 val="$undef"
11795         fi
11796         set d_pwcomment
11797         eval $setvar
11798
11799         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11800                 val="$define"
11801         else
11802                 val="$undef"
11803         fi
11804         set d_pwgecos
11805         eval $setvar
11806
11807         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11808                 val="$define"
11809         else
11810                 val="$undef"
11811         fi
11812         set d_pwpasswd
11813         eval $setvar
11814
11815         $rm -f $$.h
11816         ;;
11817 *)
11818         val="$undef"; 
11819         set d_pwquota; eval $setvar
11820         set d_pwage; eval $setvar
11821         set d_pwchange; eval $setvar
11822         set d_pwclass; eval $setvar
11823         set d_pwexpire; eval $setvar
11824         set d_pwcomment; eval $setvar
11825         set d_pwgecos; eval $setvar
11826         set d_pwpasswd; eval $setvar
11827         ;;
11828 esac
11829
11830 : see if readdir and friends exist
11831 set readdir d_readdir
11832 eval $inlibc
11833 set seekdir d_seekdir
11834 eval $inlibc
11835 set telldir d_telldir
11836 eval $inlibc
11837 set rewinddir d_rewinddir
11838 eval $inlibc
11839
11840 : see if readv exists
11841 set readv d_readv
11842 eval $inlibc
11843
11844 : see if recvmsg exists
11845 set recvmsg d_recvmsg
11846 eval $inlibc
11847
11848 : see if rename exists
11849 set rename d_rename
11850 eval $inlibc
11851
11852 : see if rmdir exists
11853 set rmdir d_rmdir
11854 eval $inlibc
11855
11856 : see if memory.h is available.
11857 val=''
11858 set memory.h val
11859 eval $inhdr
11860
11861 : See if it conflicts with string.h
11862 case "$val" in
11863 $define)
11864         case "$strings" in
11865         '') ;;
11866         *)
11867                 $cppstdin $cppflags $cppminus < $strings > mem.h
11868                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11869                         echo " "
11870                         echo "We won't be including <memory.h>."
11871                         val="$undef"
11872                 fi
11873                 $rm -f mem.h
11874                 ;;
11875         esac
11876 esac
11877 set i_memory
11878 eval $setvar
11879
11880 : can bcopy handle overlapping blocks?
11881 echo " "
11882 val="$undef"
11883 case "$d_memmove" in
11884 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11885 *)      case "$d_bcopy" in
11886         "$define")
11887                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11888                 $cat >try.c <<EOCP
11889 #$i_memory I_MEMORY
11890 #$i_stdlib I_STDLIB
11891 #$i_string I_STRING
11892 #$i_unistd I_UNISTD
11893 EOCP
11894         $cat >>try.c <<'EOCP'
11895 #include <stdio.h>
11896 #ifdef I_MEMORY
11897 #  include <memory.h>
11898 #endif
11899 #ifdef I_STDLIB
11900 #  include <stdlib.h>
11901 #endif
11902 #ifdef I_STRING
11903 #  include <string.h>
11904 #else
11905 #  include <strings.h>
11906 #endif
11907 #ifdef I_UNISTD
11908 #  include <unistd.h>  /* Needed for NetBSD */
11909 #endif
11910 int main()
11911 {
11912 char buf[128], abc[128];
11913 char *b;
11914 int len;
11915 int off;
11916 int align;
11917
11918 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11919    try to store the string in read-only memory. */
11920 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11921
11922 for (align = 7; align >= 0; align--) {
11923         for (len = 36; len; len--) {
11924                 b = buf+align;
11925                 bcopy(abc, b, len);
11926                 for (off = 1; off <= len; off++) {
11927                         bcopy(b, b+off, len);
11928                         bcopy(b+off, b, len);
11929                         if (bcmp(b, abc, len))
11930                                 exit(1);
11931                 }
11932         }
11933 }
11934 exit(0);
11935 }
11936 EOCP
11937                 set try
11938                 if eval $compile_ok; then
11939                         if ./try 2>/dev/null; then
11940                                 echo "Yes, it can."
11941                                 val="$define"
11942                         else
11943                                 echo "It can't, sorry."
11944                         fi
11945                 else
11946                         echo "(I can't compile the test program, so we'll assume not...)"
11947                 fi
11948                 ;;
11949         esac
11950         $rm -f try.* try core
11951         ;;
11952 esac
11953 set d_safebcpy
11954 eval $setvar
11955
11956 : can memcpy handle overlapping blocks?
11957 echo " "
11958 val="$undef"
11959 case "$d_memmove" in
11960 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11961 *)      case "$d_memcpy" in
11962         "$define")
11963                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11964                 $cat >try.c <<EOCP
11965 #$i_memory I_MEMORY
11966 #$i_stdlib I_STDLIB
11967 #$i_string I_STRING
11968 #$i_unistd I_UNISTD
11969 EOCP
11970         $cat >>try.c <<'EOCP'
11971 #include <stdio.h>
11972 #ifdef I_MEMORY
11973 #  include <memory.h>
11974 #endif
11975 #ifdef I_STDLIB
11976 #  include <stdlib.h>
11977 #endif
11978 #ifdef I_STRING
11979 #  include <string.h>
11980 #else
11981 #  include <strings.h>
11982 #endif
11983 #ifdef I_UNISTD
11984 #  include <unistd.h>  /* Needed for NetBSD */
11985 #endif
11986 int main()
11987 {
11988 char buf[128], abc[128];
11989 char *b;
11990 int len;
11991 int off;
11992 int align;
11993
11994 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11995    try to store the string in read-only memory. */
11996 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11997
11998 for (align = 7; align >= 0; align--) {
11999         for (len = 36; len; len--) {
12000                 b = buf+align;
12001                 memcpy(b, abc, len);
12002                 for (off = 1; off <= len; off++) {
12003                         memcpy(b+off, b, len);
12004                         memcpy(b, b+off, len);
12005                         if (memcmp(b, abc, len))
12006                                 exit(1);
12007                 }
12008         }
12009 }
12010 exit(0);
12011 }
12012 EOCP
12013                 set try
12014                 if eval $compile_ok; then
12015                         if ./try 2>/dev/null; then
12016                                 echo "Yes, it can."
12017                                 val="$define"
12018                         else
12019                                 echo "It can't, sorry."
12020                         fi
12021                 else
12022                         echo "(I can't compile the test program, so we'll assume not...)"
12023                 fi
12024                 ;;
12025         esac
12026         $rm -f try.* try core
12027         ;;
12028 esac
12029 set d_safemcpy
12030 eval $setvar
12031
12032 : can memcmp be trusted to compare relative magnitude?
12033 val="$undef"
12034 case "$d_memcmp" in
12035 "$define")
12036         echo " "
12037         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12038         $cat >try.c <<EOCP
12039 #$i_memory I_MEMORY
12040 #$i_stdlib I_STDLIB
12041 #$i_string I_STRING
12042 #$i_unistd I_UNISTD
12043 EOCP
12044         $cat >>try.c <<'EOCP'
12045 #include <stdio.h>
12046 #ifdef I_MEMORY
12047 #  include <memory.h>
12048 #endif
12049 #ifdef I_STDLIB
12050 #  include <stdlib.h>
12051 #endif
12052 #ifdef I_STRING
12053 #  include <string.h>
12054 #else
12055 #  include <strings.h>
12056 #endif
12057 #ifdef I_UNISTD
12058 #  include <unistd.h>  /* Needed for NetBSD */
12059 #endif
12060 int main()
12061 {
12062 char a = -1;
12063 char b = 0;
12064 if ((a < b) && memcmp(&a, &b, 1) < 0)
12065         exit(1);
12066 exit(0);
12067 }
12068 EOCP
12069         set try
12070         if eval $compile_ok; then
12071                 if $run ./try 2>/dev/null; then
12072                         echo "Yes, it can."
12073                         val="$define"
12074                 else
12075                         echo "No, it can't (it uses signed chars)."
12076                 fi
12077         else
12078                 echo "(I can't compile the test program, so we'll assume not...)"
12079         fi
12080         ;;
12081 esac
12082 $rm -f try.* try core
12083 set d_sanemcmp
12084 eval $setvar
12085
12086 : see if prototype for sbrk is available
12087 echo " "
12088 set d_sbrkproto sbrk $i_unistd unistd.h
12089 eval $hasproto
12090
12091 : see if select exists
12092 set select d_select
12093 eval $inlibc
12094
12095 : see if semctl exists
12096 set semctl d_semctl
12097 eval $inlibc
12098
12099 : see if semget exists
12100 set semget d_semget
12101 eval $inlibc
12102
12103 : see if semop exists
12104 set semop d_semop
12105 eval $inlibc
12106
12107 : see how much of the 'sem*(2)' library is present.
12108 h_sem=true
12109 echo " "
12110 case "$d_semctl$d_semget$d_semop" in
12111 *"$undef"*) h_sem=false;;
12112 esac
12113 case "$osname" in
12114 freebsd)
12115     case "`ipcs 2>&1`" in
12116     "SVID messages"*"not configured"*)
12117         echo "Your $osname does not have the sem*(2) configured." >&4
12118         h_sem=false
12119         val="$undef"
12120         set semctl d_semctl
12121         eval $setvar
12122         set semget d_semget
12123         eval $setvar
12124         set semop d_semop
12125         eval $setvar
12126         ;;
12127     esac
12128     ;;
12129 esac
12130 : we could also check for sys/ipc.h ...
12131 if $h_sem && $test `./findhdr sys/sem.h`; then
12132         echo "You have the full sem*(2) library." >&4
12133         val="$define"
12134 else
12135         echo "You don't have the full sem*(2) library." >&4
12136         val="$undef"
12137 fi
12138 set d_sem
12139 eval $setvar
12140
12141 : see whether sys/sem.h defines union semun
12142 echo " "
12143 $cat > try.c <<'END'
12144 #include <sys/types.h>
12145 #include <sys/ipc.h>
12146 #include <sys/sem.h>
12147 int main () { union semun semun; semun.buf = 0; }
12148 END
12149 set try
12150 if eval $compile; then
12151     echo "You have union semun in <sys/sem.h>." >&4
12152     val="$define"
12153 else
12154     echo "You do not have union semun in <sys/sem.h>." >&4
12155     val="$undef"
12156 fi
12157 $rm -f try try.c try.h
12158 set d_union_semun
12159 eval $setvar
12160
12161 : see how to do semctl IPC_STAT
12162 case "$d_sem" in
12163 $define)
12164     : see whether semctl IPC_STAT can use union semun
12165     echo " "
12166     $cat > try.h <<END
12167 #ifndef S_IRUSR
12168 #   ifdef S_IREAD
12169 #       define S_IRUSR S_IREAD
12170 #       define S_IWUSR S_IWRITE
12171 #       define S_IXUSR S_IEXEC
12172 #   else
12173 #       define S_IRUSR 0400
12174 #       define S_IWUSR 0200
12175 #       define S_IXUSR 0100
12176 #   endif
12177 #   define S_IRGRP (S_IRUSR>>3)
12178 #   define S_IWGRP (S_IWUSR>>3)
12179 #   define S_IXGRP (S_IXUSR>>3)
12180 #   define S_IROTH (S_IRUSR>>6)
12181 #   define S_IWOTH (S_IWUSR>>6)
12182 #   define S_IXOTH (S_IXUSR>>6)
12183 #endif
12184 #ifndef S_IRWXU
12185 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12186 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12187 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12188 #endif
12189 END
12190
12191     $cat > try.c <<END
12192 #include <sys/types.h>
12193 #include <sys/ipc.h>
12194 #include <sys/sem.h>
12195 #include <sys/stat.h>
12196 #include <stdio.h>
12197 #include <errno.h>
12198 #include "try.h"
12199 #ifndef errno
12200 extern int errno;
12201 #endif
12202 #$d_union_semun HAS_UNION_SEMUN
12203 int main() {
12204     union semun
12205 #ifndef HAS_UNION_SEMUN
12206     {
12207         int val;
12208         struct semid_ds *buf;
12209         unsigned short *array;
12210     }
12211 #endif
12212     arg;
12213     int sem, st;
12214
12215 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12216     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12217     if (sem > -1) {
12218         struct semid_ds argbuf;
12219         arg.buf = &argbuf;
12220 #       ifdef IPC_STAT
12221         st = semctl(sem, 0, IPC_STAT, arg);
12222         if (st == 0)
12223             printf("semun\n");
12224         else
12225 #       endif /* IPC_STAT */
12226             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12227 #       ifdef IPC_RMID
12228         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12229 #       endif /* IPC_RMID */
12230             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12231     } else
12232 #endif /* IPC_PRIVATE && ... */
12233         printf("semget failed: errno = %d\n", errno);
12234   return 0;
12235 }
12236 END
12237     val="$undef"
12238     set try
12239     if eval $compile; then
12240         xxx=`$run ./try`
12241         case "$xxx" in
12242         semun) val="$define" ;;
12243         esac
12244     fi
12245     $rm -f try try.c
12246     set d_semctl_semun
12247     eval $setvar
12248     case "$d_semctl_semun" in
12249     $define)
12250         echo "You can use union semun for semctl IPC_STAT." >&4
12251         also='also'
12252         ;;
12253     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12254         also=''
12255         ;;
12256     esac
12257
12258     : see whether semctl IPC_STAT can use struct semid_ds pointer
12259     $cat > try.c <<'END'
12260 #include <sys/types.h>
12261 #include <sys/ipc.h>
12262 #include <sys/sem.h>
12263 #include <sys/stat.h>
12264 #include "try.h"
12265 #include <stdio.h>
12266 #include <errno.h>
12267 #ifndef errno
12268 extern int errno;
12269 #endif
12270 int main() {
12271     struct semid_ds arg;
12272     int sem, st;
12273
12274 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12275     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12276     if (sem > -1) {
12277 #       ifdef IPC_STAT
12278         st = semctl(sem, 0, IPC_STAT, &arg);
12279         if (st == 0)
12280             printf("semid_ds\n");
12281         else
12282 #       endif /* IPC_STAT */
12283             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12284 #       ifdef IPC_RMID
12285         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12286 #       endif /* IPC_RMID */
12287             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12288     } else
12289 #endif /* IPC_PRIVATE && ... */
12290         printf("semget failed: errno = %d\n", errno);
12291
12292     return 0;
12293 }
12294 END
12295     val="$undef"
12296     set try
12297     if eval $compile; then
12298         xxx=`$run ./try`
12299         case "$xxx" in
12300         semid_ds) val="$define" ;;
12301         esac
12302     fi
12303     $rm -f try try.c
12304     set d_semctl_semid_ds
12305     eval $setvar
12306     case "$d_semctl_semid_ds" in
12307     $define)
12308         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12309         ;;
12310     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12311         ;;
12312     esac
12313     $rm -f try.h
12314     ;;
12315 *)  val="$undef"
12316
12317     # We do not have the full sem*(2) library, so assume we can not
12318     # use either.
12319
12320     set d_semctl_semun
12321     eval $setvar
12322
12323     set d_semctl_semid_ds
12324     eval $setvar
12325     ;;
12326 esac
12327
12328 : see if sendmsg exists
12329 set sendmsg d_sendmsg
12330 eval $inlibc
12331
12332 : see if setegid exists
12333 set setegid d_setegid
12334 eval $inlibc
12335
12336 : see if seteuid exists
12337 set seteuid d_seteuid
12338 eval $inlibc
12339
12340 : see if setgrent exists
12341 set setgrent d_setgrent
12342 eval $inlibc
12343
12344 : see if sethostent exists
12345 set sethostent d_sethent
12346 eval $inlibc
12347
12348 : see if setitimer exists
12349 set setitimer d_setitimer
12350 eval $inlibc
12351
12352 : see if setlinebuf exists
12353 set setlinebuf d_setlinebuf
12354 eval $inlibc
12355
12356 : see if setlocale exists
12357 set setlocale d_setlocale
12358 eval $inlibc
12359
12360 : see if setnetent exists
12361 set setnetent d_setnent
12362 eval $inlibc
12363
12364 : see if setprotoent exists
12365 set setprotoent d_setpent
12366 eval $inlibc
12367
12368 : see if setpgid exists
12369 set setpgid d_setpgid
12370 eval $inlibc
12371
12372 : see if setpgrp2 exists
12373 set setpgrp2 d_setpgrp2
12374 eval $inlibc
12375
12376 : see if setpriority exists
12377 set setpriority d_setprior
12378 eval $inlibc
12379
12380 : see if setproctitle exists
12381 set setproctitle d_setproctitle
12382 eval $inlibc
12383
12384 : see if setpwent exists
12385 set setpwent d_setpwent
12386 eval $inlibc
12387
12388 : see if setregid exists
12389 set setregid d_setregid
12390 eval $inlibc
12391 set setresgid d_setresgid
12392 eval $inlibc
12393
12394 : see if setreuid exists
12395 set setreuid d_setreuid
12396 eval $inlibc
12397 set setresuid d_setresuid
12398 eval $inlibc
12399
12400 : see if setrgid exists
12401 set setrgid d_setrgid
12402 eval $inlibc
12403
12404 : see if setruid exists
12405 set setruid d_setruid
12406 eval $inlibc
12407
12408 : see if setservent exists
12409 set setservent d_setsent
12410 eval $inlibc
12411
12412 : see if setsid exists
12413 set setsid d_setsid
12414 eval $inlibc
12415
12416 : see if setvbuf exists
12417 set setvbuf d_setvbuf
12418 eval $inlibc
12419
12420 : see if sfio.h is available
12421 set sfio.h i_sfio
12422 eval $inhdr
12423
12424
12425 : see if sfio library is available
12426 case "$i_sfio" in
12427 $define)
12428         val=''
12429         set sfreserve val
12430         eval $inlibc
12431         ;;
12432 *)
12433         val="$undef"
12434         ;;
12435 esac
12436 : Ok, but do we want to use it.
12437 case "$val" in
12438 $define)
12439         case "$usesfio" in
12440         true|$define|[yY]*) dflt='y';;
12441         *) dflt='n';;
12442         esac
12443         echo "$package can use the sfio library, but it is experimental."
12444         case "$useperlio" in
12445         "$undef")
12446             echo "For sfio also the PerlIO abstraction layer is needed."
12447             echo "Earlier you said you wouldn't want that."
12448             ;;
12449         esac
12450         rp="You seem to have sfio available, do you want to try using it?"
12451         . ./myread
12452         case "$ans" in
12453         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12454                 useperlio="$define"
12455                 val="$define"
12456                 ;;
12457         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12458                 val="$undef"
12459                 ;;
12460         esac
12461         ;;
12462 *)      case "$usesfio" in
12463         true|$define|[yY]*)
12464                 echo "Sorry, cannot find sfio on this machine." >&4
12465                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12466                 val="$undef"
12467                 ;;
12468         esac
12469         ;;
12470 esac
12471 set d_sfio
12472 eval $setvar
12473 case "$d_sfio" in
12474 $define) usesfio='true';;
12475 *) usesfio='false';;
12476 esac
12477 case "$d_sfio" in
12478 $define) ;;
12479 *)      : Remove sfio from list of libraries to use
12480         case "$libs" in
12481         *-lsfio*)
12482                 echo "Removing unneeded -lsfio from library list" >&4
12483                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12484                 shift
12485                 libs="$*"
12486                 echo "libs = $libs" >&4
12487                 ;;
12488         esac
12489 ;;
12490 esac
12491
12492
12493 : see if shmctl exists
12494 set shmctl d_shmctl
12495 eval $inlibc
12496
12497 : see if shmget exists
12498 set shmget d_shmget
12499 eval $inlibc
12500
12501 : see if shmat exists
12502 set shmat d_shmat
12503 eval $inlibc
12504 : see what shmat returns
12505 case "$d_shmat" in
12506 "$define")
12507         $cat >shmat.c <<'END'
12508 #include <sys/shm.h>
12509 void *shmat();
12510 END
12511         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12512                 shmattype='void *'
12513         else
12514                 shmattype='char *'
12515         fi
12516         echo "and it returns ($shmattype)." >&4
12517         : see if a prototype for shmat is available
12518         xxx=`./findhdr sys/shm.h`
12519         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12520         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12521                 val="$define"
12522         else
12523                 val="$undef"
12524         fi
12525         $rm -f shmat.[co]
12526         ;;
12527 *)
12528         val="$undef"
12529         ;;
12530 esac
12531 set d_shmatprototype
12532 eval $setvar
12533
12534 : see if shmdt exists
12535 set shmdt d_shmdt
12536 eval $inlibc
12537
12538 : see how much of the 'shm*(2)' library is present.
12539 h_shm=true
12540 echo " "
12541 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12542 *"$undef"*) h_shm=false;;
12543 esac
12544 case "$osname" in
12545 freebsd)
12546     case "`ipcs 2>&1`" in
12547     "SVID shared memory"*"not configured"*)
12548         echo "Your $osname does not have the shm*(2) configured." >&4
12549         h_shm=false
12550         val="$undef"
12551         set shmctl d_shmctl
12552         evat $setvar
12553         set shmget d_shmget
12554         evat $setvar
12555         set shmat d_shmat
12556         evat $setvar
12557         set shmdt d_shmdt
12558         evat $setvar
12559         ;;
12560     esac
12561     ;;
12562 esac
12563 : we could also check for sys/ipc.h ...
12564 if $h_shm && $test `./findhdr sys/shm.h`; then
12565         echo "You have the full shm*(2) library." >&4
12566         val="$define"
12567 else
12568         echo "You don't have the full shm*(2) library." >&4
12569         val="$undef"
12570 fi
12571 set d_shm
12572 eval $setvar
12573
12574 echo " "
12575 : see if we have sigaction
12576 if set sigaction val -f d_sigaction; eval $csym; $val; then
12577         echo 'sigaction() found.' >&4
12578         $cat > try.c <<'EOP'
12579 #include <stdio.h>
12580 #include <sys/types.h>
12581 #include <signal.h>
12582 int main()
12583 {
12584     struct sigaction act, oact;
12585     act.sa_flags = 0;
12586     oact.sa_handler = 0;
12587     /* so that act and oact are used */
12588     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12589 }
12590 EOP
12591         set try
12592         if eval $compile_ok; then
12593                 val="$define"
12594         else
12595                 echo "But you don't seem to have a useable struct sigaction." >&4
12596                 val="$undef"
12597         fi
12598 else
12599         echo 'sigaction NOT found.' >&4
12600         val="$undef"
12601 fi
12602 set d_sigaction; eval $setvar
12603 $rm -f try try$_o try.c
12604
12605 : see if sigprocmask exists
12606 set sigprocmask d_sigprocmask
12607 eval $inlibc
12608
12609 : see if sigsetjmp exists
12610 echo " "
12611 case "$d_sigsetjmp" in
12612 '')
12613         $cat >try.c <<'EOP'
12614 #include <setjmp.h>
12615 sigjmp_buf env;
12616 int set = 1;
12617 int main()
12618 {
12619         if (sigsetjmp(env,1))
12620                 exit(set);
12621         set = 0;
12622         siglongjmp(env, 1);
12623         exit(1);
12624 }
12625 EOP
12626         set try
12627         if eval $compile; then
12628                 if $run ./try >/dev/null 2>&1; then
12629                         echo "POSIX sigsetjmp found." >&4
12630                         val="$define"
12631                 else
12632                         $cat >&4 <<EOM
12633 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12634 I'll ignore them.
12635 EOM
12636                         val="$undef"
12637                 fi
12638         else
12639                 echo "sigsetjmp not found." >&4
12640                 val="$undef"
12641         fi
12642         ;;
12643 *) val="$d_sigsetjmp"
12644         case "$d_sigsetjmp" in
12645         $define) echo "POSIX sigsetjmp found." >&4;;
12646         $undef) echo "sigsetjmp not found." >&4;;
12647         esac
12648         ;;
12649 esac
12650 set d_sigsetjmp
12651 eval $setvar
12652 $rm -f try.c try
12653
12654 : see if sockatmark exists
12655 set sockatmark d_sockatmark
12656 eval $inlibc
12657
12658 : see if prototype for sockatmark is available
12659 echo " "
12660 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12661 eval $hasproto
12662
12663 : see if socks5_init exists
12664 set socks5_init d_socks5_init
12665 eval $inlibc
12666
12667 : see if prototype for setresgid is available
12668 echo " "
12669 set d_sresgproto setresgid $i_unistd unistd.h
12670 eval $hasproto
12671
12672 : see if prototype for setresuid is available
12673 echo " "
12674 set d_sresuproto setresuid $i_unistd unistd.h
12675 eval $hasproto
12676
12677 : see if sys/stat.h is available
12678 set sys/stat.h i_sysstat
12679 eval $inhdr
12680
12681
12682 : see if stat knows about block sizes
12683 echo " "
12684 echo "Checking to see if your struct stat has st_blocks field..." >&4
12685 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12686 eval $hasfield
12687
12688
12689 : see if this is a sys/vfs.h system
12690 set sys/vfs.h i_sysvfs
12691 eval $inhdr
12692
12693
12694 : see if this is a sys/statfs.h system
12695 set sys/statfs.h i_sysstatfs
12696 eval $inhdr
12697
12698
12699 echo " "
12700 echo "Checking to see if your system supports struct statfs..." >&4
12701 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
12702 eval $hasstruct
12703 case "$d_statfs_s" in
12704 "$define")      echo "Yes, it does."   ;;
12705 *)              echo "No, it doesn't." ;;
12706 esac
12707
12708
12709
12710 : see if struct statfs knows about f_flags
12711 case "$d_statfs_s" in
12712 define) 
12713         echo " "
12714         echo "Checking to see if your struct statfs has f_flags field..." >&4
12715         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
12716         eval $hasfield
12717         ;;
12718 *)      val="$undef"
12719         set d_statfs_f_flags
12720         eval $setvar
12721         ;;
12722 esac
12723 case "$d_statfs_f_flags" in
12724 "$define")      echo "Yes, it does."   ;;
12725 *)              echo "No, it doesn't." ;;
12726 esac
12727
12728 : see if _ptr and _cnt from stdio act std
12729 echo " "
12730
12731 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12732         echo "(Looks like you have stdio.h from BSD.)"
12733         case "$stdio_ptr" in
12734         '') stdio_ptr='((fp)->_p)'
12735                 ptr_lval=$define
12736                 ;;
12737         *)      ptr_lval=$d_stdio_ptr_lval;;
12738         esac
12739         case "$stdio_cnt" in
12740         '') stdio_cnt='((fp)->_r)'
12741                 cnt_lval=$define
12742                 ;;
12743         *)      cnt_lval=$d_stdio_cnt_lval;;
12744         esac
12745         case "$stdio_base" in
12746         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12747         esac
12748         case "$stdio_bufsiz" in
12749         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12750         esac
12751 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12752         echo "(Looks like you have stdio.h from Linux.)"
12753         case "$stdio_ptr" in
12754         '') stdio_ptr='((fp)->_IO_read_ptr)'
12755                 ptr_lval=$define
12756                 ;;
12757         *)      ptr_lval=$d_stdio_ptr_lval;;
12758         esac
12759         case "$stdio_cnt" in
12760         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12761                 cnt_lval=$undef
12762                 ;;
12763         *)      cnt_lval=$d_stdio_cnt_lval;;
12764         esac
12765         case "$stdio_base" in
12766         '') stdio_base='((fp)->_IO_read_base)';;
12767         esac
12768         case "$stdio_bufsiz" in
12769         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12770         esac
12771 else
12772         case "$stdio_ptr" in
12773         '') stdio_ptr='((fp)->_ptr)'
12774                 ptr_lval=$define
12775                 ;;
12776         *)      ptr_lval=$d_stdio_ptr_lval;;
12777         esac
12778         case "$stdio_cnt" in
12779         '') stdio_cnt='((fp)->_cnt)'
12780                 cnt_lval=$define
12781                 ;;
12782         *)      cnt_lval=$d_stdio_cnt_lval;;
12783         esac
12784         case "$stdio_base" in
12785         '') stdio_base='((fp)->_base)';;
12786         esac
12787         case "$stdio_bufsiz" in
12788         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12789         esac
12790 fi
12791
12792 : test whether _ptr and _cnt really work
12793 echo "Checking how std your stdio is..." >&4
12794 $cat >try.c <<EOP
12795 #include <stdio.h>
12796 #define FILE_ptr(fp)    $stdio_ptr
12797 #define FILE_cnt(fp)    $stdio_cnt
12798 int main() {
12799         FILE *fp = fopen("try.c", "r");
12800         char c = getc(fp);
12801         if (
12802                 18 <= FILE_cnt(fp) &&
12803                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12804         )
12805                 exit(0);
12806         exit(1);
12807 }
12808 EOP
12809 val="$undef"
12810 set try
12811 if eval $compile && $to try.c; then
12812         if $run ./try; then
12813                 echo "Your stdio acts pretty std."
12814                 val="$define"
12815         else
12816                 echo "Your stdio isn't very std."
12817         fi
12818 else
12819         echo "Your stdio doesn't appear very std."
12820 fi
12821 $rm -f try.c try
12822 set d_stdstdio
12823 eval $setvar
12824
12825 : Can _ptr be used as an lvalue?
12826 case "$d_stdstdio$ptr_lval" in
12827 $define$define) val=$define ;;
12828 *) val=$undef ;;
12829 esac
12830 set d_stdio_ptr_lval
12831 eval $setvar
12832
12833 : Can _cnt be used as an lvalue?
12834 case "$d_stdstdio$cnt_lval" in
12835 $define$define) val=$define ;;
12836 *) val=$undef ;;
12837 esac
12838 set d_stdio_cnt_lval
12839 eval $setvar
12840
12841
12842 : test whether setting _ptr sets _cnt as a side effect
12843 d_stdio_ptr_lval_sets_cnt="$undef"
12844 d_stdio_ptr_lval_nochange_cnt="$undef"
12845 case "$d_stdio_ptr_lval$d_stdstdio" in
12846 $define$define)
12847         echo "Checking to see what happens if we set the stdio ptr..." >&4
12848 $cat >try.c <<EOP
12849 #include <stdio.h>
12850 /* Can we scream? */
12851 /* Eat dust sed :-) */
12852 /* In the buffer space, no one can hear you scream. */
12853 #define FILE_ptr(fp)    $stdio_ptr
12854 #define FILE_cnt(fp)    $stdio_cnt
12855 #include <sys/types.h>
12856 int main() {
12857         FILE *fp = fopen("try.c", "r");
12858         int c;
12859         char *ptr;
12860         size_t cnt;
12861         if (!fp) {
12862             puts("Fail even to read");
12863             exit(1);
12864         }
12865         c = getc(fp); /* Read away the first # */
12866         if (c == EOF) {
12867             puts("Fail even to read");
12868             exit(1);
12869         }
12870         if (!(
12871                 18 <= FILE_cnt(fp) &&
12872                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12873         )) {
12874                 puts("Fail even to read");
12875                 exit (1);
12876         }
12877         ptr = (char*) FILE_ptr(fp);
12878         cnt = (size_t)FILE_cnt(fp);
12879
12880         FILE_ptr(fp) += 42;
12881
12882         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12883                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12884                 exit (1);
12885         }
12886         if (FILE_cnt(fp) <= 20) {
12887                 printf ("Fail (<20 chars to test)");
12888                 exit (1);
12889         }
12890         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12891                 puts("Fail compare");
12892                 exit (1);
12893         }
12894         if (cnt == FILE_cnt(fp)) {
12895                 puts("Pass_unchanged");
12896                 exit (0);
12897         }       
12898         if (FILE_cnt(fp) == (cnt - 42)) {
12899                 puts("Pass_changed");
12900                 exit (0);
12901         }
12902         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12903         return 1;
12904
12905 }
12906 EOP
12907         set try
12908         if eval $compile && $to try.c; then
12909                 case `$run ./try` in
12910                 Pass_changed)
12911                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12912                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12913                 Pass_unchanged)
12914                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12915                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12916                 Fail*)
12917                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12918                 *)
12919                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12920         esac
12921         else
12922                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12923         fi
12924         $rm -f try.c try
12925         ;;
12926 esac
12927
12928 : see if _base is also standard
12929 val="$undef"
12930 case "$d_stdstdio" in
12931 $define)
12932         $cat >try.c <<EOP
12933 #include <stdio.h>
12934 #define FILE_base(fp)   $stdio_base
12935 #define FILE_bufsiz(fp) $stdio_bufsiz
12936 int main() {
12937         FILE *fp = fopen("try.c", "r");
12938         char c = getc(fp);
12939         if (
12940                 19 <= FILE_bufsiz(fp) &&
12941                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12942         )
12943                 exit(0);
12944         exit(1);
12945 }
12946 EOP
12947         set try
12948         if eval $compile && $to try.c; then
12949                 if $run ./try; then
12950                         echo "And its _base field acts std."
12951                         val="$define"
12952                 else
12953                         echo "But its _base field isn't std."
12954                 fi
12955         else
12956                 echo "However, it seems to be lacking the _base field."
12957         fi
12958         $rm -f try.c try
12959         ;;
12960 esac
12961 set d_stdiobase
12962 eval $setvar
12963
12964 $cat >&4 <<EOM
12965 Checking how to access stdio streams by file descriptor number...
12966 EOM
12967 case "$stdio_stream_array" in
12968 '')     $cat >try.c <<EOCP
12969 #include <stdio.h>
12970 int main() {
12971   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12972     printf("yes\n");
12973 }
12974 EOCP
12975         for s in _iob __iob __sF
12976         do
12977                 set try -DSTDIO_STREAM_ARRAY=$s
12978                 if eval $compile; then
12979                         case "`$run ./try`" in
12980                         yes)    stdio_stream_array=$s; break ;;
12981                         esac
12982                 fi
12983         done
12984         $rm -f try.* try$exe_ext
12985 esac
12986 case "$stdio_stream_array" in
12987 '')     $cat >&4 <<EOM
12988 I can't figure out how to access stdio streams by file descriptor number.
12989 EOM
12990         d_stdio_stream_array="$undef"
12991         ;;
12992 *)      $cat >&4 <<EOM
12993 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12994 EOM
12995         d_stdio_stream_array="$define"
12996         ;;
12997 esac
12998
12999 : see if strcoll exists
13000 set strcoll d_strcoll
13001 eval $inlibc
13002
13003 : check for structure copying
13004 echo " "
13005 echo "Checking to see if your C compiler can copy structs..." >&4
13006 $cat >try.c <<'EOCP'
13007 int main()
13008 {
13009         struct blurfl {
13010                 int dyick;
13011         } foo, bar;
13012
13013         foo = bar;
13014 }
13015 EOCP
13016 if $cc -c try.c >/dev/null 2>&1 ; then
13017         val="$define"
13018         echo "Yup, it can."
13019 else
13020         val="$undef"
13021         echo "Nope, it can't."
13022 fi
13023 set d_strctcpy
13024 eval $setvar
13025 $rm -f try.*
13026
13027 : see if strerror and/or sys_errlist[] exist
13028 echo " "
13029 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13030     if set strerror val -f d_strerror; eval $csym; $val; then
13031                 echo 'strerror() found.' >&4
13032                 d_strerror="$define"
13033                 d_strerrm='strerror(e)'
13034                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13035                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13036                         d_syserrlst="$define"
13037                 else
13038                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13039                         d_syserrlst="$undef"
13040                 fi
13041     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13042                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13043                 echo 'strerror() found in string header.' >&4
13044                 d_strerror="$define"
13045                 d_strerrm='strerror(e)'
13046                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13047                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13048                                 d_syserrlst="$define"
13049                 else
13050                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13051                         d_syserrlst="$undef"
13052                 fi
13053     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13054                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13055                 d_strerror="$undef"
13056                 d_syserrlst="$define"
13057                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13058     else
13059                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13060                 d_strerror="$undef"
13061                 d_syserrlst="$undef"
13062                 d_strerrm='"unknown"'
13063     fi
13064 fi
13065
13066 : see if strftime exists
13067 set strftime d_strftime
13068 eval $inlibc
13069
13070 : see if strtod exists
13071 set strtod d_strtod
13072 eval $inlibc
13073
13074 : see if strtol exists
13075 set strtol d_strtol
13076 eval $inlibc
13077
13078 : see if strtold exists
13079 set strtold d_strtold
13080 eval $inlibc
13081
13082 : see if strtoll exists
13083 set strtoll d_strtoll
13084 eval $inlibc
13085
13086 case "$d_longlong-$d_strtoll" in
13087 "$define-$define")
13088         $cat <<EOM
13089 Checking whether your strtoll() works okay...
13090 EOM
13091         $cat >try.c <<'EOCP'
13092 #include <errno.h>
13093 #ifdef __hpux
13094 #define strtoll __strtoll
13095 #endif
13096 #ifdef __EMX__
13097 #define strtoll _strtoll
13098 #endif
13099 #include <stdio.h>
13100 extern long long int strtoll(char *s, char **, int); 
13101 static int bad = 0;
13102 int check(char *s, long long ell, int een) {
13103         long long gll;
13104         errno = 0;
13105         gll = strtoll(s, 0, 10);
13106         if (!((gll == ell) && (errno == een)))
13107                 bad++;
13108 }
13109 int main() {
13110         check(" 1",                                      1LL, 0);
13111         check(" 0",                                      0LL, 0);
13112         check("-1",                                     -1LL, 0);
13113         check("-9223372036854775808", -9223372036854775808LL, 0);
13114         check("-9223372036854775808", -9223372036854775808LL, 0);
13115         check(" 9223372036854775807",  9223372036854775807LL, 0);
13116         check("-9223372036854775808", -9223372036854775808LL, 0);
13117         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13118         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13119         if (!bad)
13120                 printf("ok\n");
13121 }
13122 EOCP
13123         set try
13124         if eval $compile; then
13125                 yyy=`$run ./try`
13126                 case "$yyy" in
13127                 ok) echo "Your strtoll() seems to be working okay." ;;
13128                 *) cat <<EOM >&4
13129 Your strtoll() doesn't seem to be working okay.
13130 EOM
13131                    d_strtoll="$undef"
13132                    ;;
13133                 esac
13134         else
13135                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13136                 d_strtoll="$undef"
13137         fi
13138         ;;
13139 esac
13140
13141 : see if strtoq exists
13142 set strtoq d_strtoq
13143 eval $inlibc
13144
13145 : see if strtoul exists
13146 set strtoul d_strtoul
13147 eval $inlibc
13148
13149 case "$d_strtoul" in
13150 "$define")
13151         $cat <<EOM
13152 Checking whether your strtoul() works okay...
13153 EOM
13154         $cat >try.c <<'EOCP'
13155 #include <errno.h>
13156 #include <stdio.h>
13157 extern unsigned long int strtoul(char *s, char **, int); 
13158 static int bad = 0;
13159 void check(char *s, unsigned long eul, int een) {
13160         unsigned long gul;
13161         errno = 0;
13162         gul = strtoul(s, 0, 10);
13163         if (!((gul == eul) && (errno == een)))
13164                 bad++;
13165 }
13166 int main() {
13167         check(" 1", 1L, 0);
13168         check(" 0", 0L, 0);
13169 EOCP
13170         case "$longsize" in
13171         8)
13172             $cat >>try.c <<'EOCP'
13173         check("18446744073709551615", 18446744073709551615UL, 0);
13174         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13175 #if 0 /* strtoul() for /^-/ strings is undefined. */
13176         check("-1", 18446744073709551615UL, 0);
13177         check("-18446744073709551614", 2, 0);
13178         check("-18446744073709551615", 1, 0);
13179         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13180         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13181 #endif
13182 EOCP
13183                 ;;
13184         4)
13185                     $cat >>try.c <<'EOCP'
13186         check("4294967295", 4294967295UL, 0);
13187         check("4294967296", 4294967295UL, ERANGE);
13188 #if 0 /* strtoul() for /^-/ strings is undefined. */
13189         check("-1", 4294967295UL, 0);
13190         check("-4294967294", 2, 0);
13191         check("-4294967295", 1, 0);
13192         check("-4294967296", 4294967295UL, ERANGE);
13193         check("-4294967297", 4294967295UL, ERANGE);
13194 #endif
13195 EOCP
13196                 ;;
13197         *)
13198 : Should we write these tests to be more portable by sprintf-ing
13199 : ~0 and then manipulating that char string as input for strtol?
13200                 ;;
13201         esac
13202         $cat >>try.c <<'EOCP'
13203         if (!bad)
13204                 printf("ok\n");
13205         return 0;
13206 }
13207 EOCP
13208         set try
13209         if eval $compile; then
13210                 case "`$run ./try`" in
13211                 ok) echo "Your strtoul() seems to be working okay." ;;
13212                 *) cat <<EOM >&4
13213 Your strtoul() doesn't seem to be working okay.
13214 EOM
13215                    d_strtoul="$undef"
13216                    ;;
13217                 esac
13218         fi
13219         ;;
13220 esac
13221
13222 : see if strtoull exists
13223 set strtoull d_strtoull
13224 eval $inlibc
13225
13226 case "$d_longlong-$d_strtoull" in
13227 "$define-$define")
13228         $cat <<EOM
13229 Checking whether your strtoull() works okay...
13230 EOM
13231         $cat >try.c <<'EOCP'
13232 #include <errno.h>
13233 #ifdef __hpux
13234 #define strtoull __strtoull
13235 #endif
13236 #include <stdio.h>
13237 extern unsigned long long int strtoull(char *s, char **, int); 
13238 static int bad = 0;
13239 int check(char *s, long long eull, int een) {
13240         long long gull;
13241         errno = 0;
13242         gull = strtoull(s, 0, 10);
13243         if (!((gull == eull) && (errno == een)))
13244                 bad++;
13245 }
13246 int main() {
13247         check(" 1",                                        1LL, 0);
13248         check(" 0",                                        0LL, 0);
13249         check("18446744073709551615",  18446744073709551615ULL, 0);
13250         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13251 #if 0 /* strtoull() for /^-/ strings is undefined. */
13252         check("-1",                    18446744073709551615ULL, 0);
13253         check("-18446744073709551614",                     2LL, 0);
13254         check("-18446744073709551615",                     1LL, 0);
13255         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13256         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13257 #endif
13258         if (!bad)
13259                 printf("ok\n");
13260 }
13261 EOCP
13262         set try
13263         if eval $compile; then
13264                 case "`$run ./try`" in
13265                 ok) echo "Your strtoull() seems to be working okay." ;;
13266                 *) cat <<EOM >&4
13267 Your strtoull() doesn't seem to be working okay.
13268 EOM
13269                    d_strtoull="$undef"
13270                    ;;
13271                 esac
13272         fi
13273         ;;
13274 esac
13275
13276 : see if strtouq exists
13277 set strtouq d_strtouq
13278 eval $inlibc
13279
13280 case "$d_strtouq" in
13281 "$define")
13282         $cat <<EOM
13283 Checking whether your strtouq() works okay...
13284 EOM
13285         $cat >try.c <<'EOCP'
13286 #include <errno.h>
13287 #include <stdio.h>
13288 extern unsigned long long int strtouq(char *s, char **, int); 
13289 static int bad = 0;
13290 void check(char *s, unsigned long long eull, int een) {
13291         unsigned long long gull;
13292         errno = 0;
13293         gull = strtouq(s, 0, 10);
13294         if (!((gull == eull) && (errno == een)))
13295                 bad++;
13296 }
13297 int main() {
13298         check(" 1",                                        1LL, 0);
13299         check(" 0",                                        0LL, 0);
13300         check("18446744073709551615",  18446744073709551615ULL, 0);
13301         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13302 #if 0 /* strtouq() for /^-/ strings is undefined. */
13303         check("-1",                    18446744073709551615ULL, 0);
13304         check("-18446744073709551614",                     2LL, 0);
13305         check("-18446744073709551615",                     1LL, 0);
13306         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13307         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13308 #endif
13309         if (!bad)
13310                 printf("ok\n");
13311         return 0;
13312 }
13313 EOCP
13314         set try
13315         if eval $compile; then
13316                 case "`$run ./try`" in
13317                 ok) echo "Your strtouq() seems to be working okay." ;;
13318                 *) cat <<EOM >&4
13319 Your strtouq() doesn't seem to be working okay.
13320 EOM
13321                    d_strtouq="$undef"
13322                    ;;
13323                 esac
13324         fi
13325         ;;
13326 esac
13327
13328 : see if strxfrm exists
13329 set strxfrm d_strxfrm
13330 eval $inlibc
13331
13332 : see if symlink exists
13333 set symlink d_symlink
13334 eval $inlibc
13335
13336 : see if syscall exists
13337 set syscall d_syscall
13338 eval $inlibc
13339
13340 : see if prototype for syscall is available
13341 echo " "
13342 set d_syscallproto syscall $i_unistd unistd.h
13343 eval $hasproto
13344
13345 : see if sysconf exists
13346 set sysconf d_sysconf
13347 eval $inlibc
13348
13349 : see if system exists
13350 set system d_system
13351 eval $inlibc
13352
13353 : see if tcgetpgrp exists
13354 set tcgetpgrp d_tcgetpgrp
13355 eval $inlibc
13356
13357 : see if tcsetpgrp exists
13358 set tcsetpgrp d_tcsetpgrp
13359 eval $inlibc
13360
13361 : see if prototype for telldir is available
13362 echo " "
13363 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13364 eval $hasproto
13365
13366 : see if this is a sys/times.h system
13367 set sys/times.h i_systimes
13368 eval $inhdr
13369
13370 : see if times exists
13371 echo " "
13372 if set times val -f d_times; eval $csym; $val; then
13373         echo 'times() found.' >&4
13374         d_times="$define"
13375         inc=''
13376         case "$i_systimes" in
13377         "$define") inc='sys/times.h';;
13378         esac
13379         rp="What is the type returned by times() on this system?"
13380         set clock_t clocktype long stdio.h sys/types.h $inc
13381         eval $typedef_ask
13382 else
13383         echo 'times() NOT found, hope that will do.' >&4
13384         d_times="$undef"
13385         clocktype='int'
13386 fi
13387
13388 : see if truncate exists
13389 set truncate d_truncate
13390 eval $inlibc
13391
13392 : see if tzname[] exists
13393 echo " "
13394 if set tzname val -a d_tzname; eval $csym; $val; then
13395         val="$define"
13396         echo 'tzname[] found.' >&4
13397 else
13398         val="$undef"
13399         echo 'tzname[] NOT found.' >&4
13400 fi
13401 set d_tzname
13402 eval $setvar
13403
13404 case "$osname" in
13405 next|rhapsody|darwin) multiarch="$define" ;;
13406 esac
13407 case "$multiarch" in
13408 ''|[nN]*) multiarch="$undef" ;;
13409 esac
13410
13411 : check for ordering of bytes in a long
13412 echo " "
13413 case "$usecrosscompile$multiarch" in
13414 *$define*)
13415         $cat <<EOM
13416 You seem to be either cross-compiling or doing a multiarchitecture build,
13417 skipping the byteorder check.
13418
13419 EOM
13420         byteorder='ffff'
13421         ;;
13422 *)
13423         case "$byteorder" in
13424         '')
13425                 $cat <<'EOM'
13426 In the following, larger digits indicate more significance.  A big-endian
13427 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13428 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13429 machines may have weird orders like 3412.  A Cray will report 87654321,
13430 an Alpha will report 12345678. If the test program works the default is
13431 probably right.
13432 I'm now running the test program...
13433 EOM
13434                 $cat >try.c <<'EOCP'
13435 #include <stdio.h>
13436 int main()
13437 {
13438         int i;
13439         union {
13440                 unsigned long l;
13441                 char c[sizeof(long)];
13442         } u;
13443
13444         if (sizeof(long) > 4)
13445                 u.l = (0x08070605L << 32) | 0x04030201L;
13446         else
13447                 u.l = 0x04030201L;
13448         for (i = 0; i < sizeof(long); i++)
13449                 printf("%c", u.c[i]+'0');
13450         printf("\n");
13451         exit(0);
13452 }
13453 EOCP
13454                 xxx_prompt=y
13455                 set try
13456                 if eval $compile && ./try > /dev/null; then
13457                         dflt=`$run ./try`
13458                         case "$dflt" in
13459                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13460                                 echo "(The test program ran ok.)"
13461                                 echo "byteorder=$dflt"
13462                                 xxx_prompt=n
13463                         ;;
13464                         ????|????????) echo "(The test program ran ok.)" ;;
13465                         *) echo "(The test program didn't run right for some reason.)" ;;
13466                         esac
13467                 else
13468                         dflt='4321'
13469                         cat <<'EOM'
13470 (I can't seem to compile the test program.  Guessing big-endian...)
13471 EOM
13472                 fi
13473                 case "$xxx_prompt" in
13474                 y)
13475                         rp="What is the order of bytes in a long?"
13476                         . ./myread
13477                         byteorder="$ans"
13478                         ;;
13479                 *)      byteorder=$dflt
13480                         ;;
13481                 esac
13482                 ;;
13483         esac
13484         $rm -f try.c try
13485         ;;
13486 esac
13487
13488
13489 $cat <<EOM
13490
13491 Checking to see whether you can access character data unalignedly...
13492 EOM
13493 $cat >try.c <<EOCP
13494 #include <stdio.h>
13495 #define U32 $u32type
13496 #define BYTEORDER 0x$byteorder
13497 #define U8 $u8type
13498 #include <signal.h>
13499 #ifdef SIGBUS
13500 $signal_t bletch(s) int s; { exit(4); }
13501 #endif
13502 int main() {
13503 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13504     U8 buf[] = "\0\0\0\1\0\0\0\0";
13505     U32 *up;
13506     int i;
13507
13508     if (sizeof(U32) != 4) {
13509         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13510         exit(1);
13511     }
13512
13513     fflush(stdout);
13514
13515 #ifdef SIGBUS
13516     signal(SIGBUS, bletch);
13517 #endif
13518
13519     for (i = 0; i < 4; i++) {
13520         up = (U32*)(buf + i);
13521         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13522                (*up == 1 << (8*(3-i)))  /* little-endian */
13523               )
13524            )
13525         {
13526             printf("read failed (%x)\n", *up);
13527             exit(2);
13528         }
13529     }
13530
13531     /* write test */
13532     for (i = 0; i < 4; i++) {
13533         up = (U32*)(buf + i);
13534         *up = 0xBeef;
13535         if (*up != 0xBeef) {
13536             printf("write failed (%x)\n", *up);
13537             exit(3);
13538         }
13539     }
13540
13541     exit(0);
13542 #else
13543     printf("1\n");
13544     exit(1);
13545 #endif
13546     return 0;
13547 }
13548 EOCP
13549 set try
13550 if eval $compile_ok; then
13551         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13552         $run ./try 2>&1 >/dev/null
13553         case "$?" in
13554         0)      cat >&4 <<EOM
13555 You can access character data pretty unalignedly.
13556 EOM
13557                 d_u32align="$undef"
13558                 ;;
13559         *)      cat >&4 <<EOM
13560 It seems that you must access character data in an aligned manner.
13561 EOM
13562                 d_u32align="$define"
13563                 ;;
13564         esac
13565 else
13566         rp='Can you access character data at unaligned addresses?'
13567         dflt='n'
13568         . ./myread
13569         case "$ans" in
13570         [yY]*)  d_u32align="$undef"  ;;
13571         *)      d_u32align="$define" ;;
13572         esac
13573 fi
13574 $rm -f core core.try.* try.core
13575
13576 : see if ualarm exists
13577 set ualarm d_ualarm
13578 eval $inlibc
13579
13580 : see if umask exists
13581 set umask d_umask
13582 eval $inlibc
13583
13584 : see if unordered exists
13585 set unordered d_unordered
13586 eval $inlibc
13587
13588 : see if usleep exists
13589 set usleep d_usleep
13590 eval $inlibc
13591
13592 : see if prototype for usleep is available
13593 echo " "
13594 set d_usleepproto usleep $i_unistd unistd.h
13595 eval $hasproto
13596
13597 : see if ustat exists
13598 set ustat d_ustat
13599 eval $inlibc
13600
13601 : backward compatibility for d_hvfork
13602 if test X$d_hvfork != X; then
13603         d_vfork="$d_hvfork"
13604         d_hvfork=''
13605 fi
13606 : see if there is a vfork
13607 val=''
13608 set vfork val
13609 eval $inlibc
13610
13611 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13612 : perl on Solaris 2.x, and probably elsewhere.
13613 case "$val" in
13614 $define)
13615         echo " "
13616         case "$usevfork" in
13617         false) dflt='n';;
13618         *) dflt='y';;
13619         esac
13620         cat <<'EOM'
13621  
13622 Perl can only use a vfork() that doesn't suffer from strict
13623 restrictions on calling functions or modifying global data in
13624 the child.  For example, glibc-2.1 contains such a vfork()
13625 that is unsuitable.  If your system provides a proper fork()
13626 call, chances are that you do NOT want perl to use vfork().
13627
13628 EOM
13629         rp="Do you still want to use vfork()?"
13630         . ./myread
13631         case "$ans" in
13632         y|Y) ;;
13633         *)
13634                 echo "Ok, we won't use vfork()."
13635                 val="$undef"
13636                 ;;
13637         esac
13638         ;;
13639 esac
13640 set d_vfork
13641 eval $setvar
13642 case "$d_vfork" in
13643 $define) usevfork='true';;
13644 *) usevfork='false';;
13645 esac
13646
13647 : see if closedir exists
13648 set closedir d_closedir
13649 eval $inlibc
13650
13651 case "$d_closedir" in
13652 "$define")
13653         echo " "
13654         echo "Checking whether closedir() returns a status..." >&4
13655         cat > try.c <<EOM
13656 #$i_dirent I_DIRENT             /**/
13657 #$i_sysdir I_SYS_DIR            /**/
13658 #$i_sysndir I_SYS_NDIR          /**/
13659 #$i_systypes I_SYS_TYPES        /**/
13660
13661 #if defined(I_SYS_TYPES)
13662 #include <sys/types.h>
13663 #endif
13664 #if defined(I_DIRENT)
13665 #include <dirent.h>
13666 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13667 #include <sys/dir.h>
13668 #endif
13669 #else
13670 #ifdef I_SYS_NDIR
13671 #include <sys/ndir.h>
13672 #else
13673 #ifdef I_SYS_DIR
13674 #ifdef hp9000s500
13675 #include <ndir.h>       /* may be wrong in the future */
13676 #else
13677 #include <sys/dir.h>
13678 #endif
13679 #endif
13680 #endif
13681 #endif 
13682 int main() { return closedir(opendir(".")); }
13683 EOM
13684         set try
13685         if eval $compile_ok; then
13686                 if $run ./try > /dev/null 2>&1 ; then
13687                         echo "Yes, it does."
13688                         val="$undef"
13689                 else
13690                         echo "No, it doesn't."
13691                         val="$define"
13692                 fi
13693         else
13694                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13695                 val="$define"
13696         fi
13697         ;;
13698 *)
13699         val="$undef";
13700         ;;
13701 esac
13702 set d_void_closedir
13703 eval $setvar
13704 $rm -f try try.*
13705 : see if there is a wait4
13706 set wait4 d_wait4
13707 eval $inlibc
13708
13709 : see if waitpid exists
13710 set waitpid d_waitpid
13711 eval $inlibc
13712
13713 : see if wcstombs exists
13714 set wcstombs d_wcstombs
13715 eval $inlibc
13716
13717 : see if wctomb exists
13718 set wctomb d_wctomb
13719 eval $inlibc
13720
13721 : see if writev exists
13722 set writev d_writev
13723 eval $inlibc
13724
13725 : preserve RCS keywords in files with variable substitution, grrr
13726 Date='$Date'
13727 Id='$Id'
13728 Log='$Log'
13729 RCSfile='$RCSfile'
13730 Revision='$Revision'
13731
13732 : check for alignment requirements
13733 echo " "
13734 case "$usecrosscompile$multiarch" in
13735 *$define*)
13736         $cat <<EOM
13737 You seem to be either cross-compiling or doing a multiarchitecture build,
13738 skipping the memory alignment check.
13739
13740 EOM
13741         case "$alignbytes" in
13742         '') alignbytes=8 ;;
13743         esac
13744         ;;
13745 *)
13746         case "$alignbytes" in
13747         '') echo "Checking alignment constraints..." >&4
13748                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13749                         $cat >try.c <<'EOCP'
13750 typedef long double NV;
13751 EOCP
13752                 else
13753                         $cat >try.c <<'EOCP'
13754 typedef double NV;
13755 EOCP
13756                 fi
13757                 $cat >>try.c <<'EOCP'
13758 #include <stdio.h>
13759 struct foobar {
13760         char foo;
13761         NV bar;
13762 } try_algn;
13763 int main()
13764 {
13765     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13766     return(0);
13767 }
13768 EOCP
13769                 set try
13770                 if eval $compile_ok; then
13771                         dflt=`$run ./try`
13772                 else
13773                         dflt='8'
13774                         echo "(I can't seem to compile the test program...)"
13775                 fi
13776                 ;;
13777         *) dflt="$alignbytes"
13778                 ;;
13779         esac
13780         rp="Doubles must be aligned on a how-many-byte boundary?"
13781         . ./myread
13782         alignbytes="$ans"
13783         $rm -f try.c try
13784         ;;
13785 esac
13786
13787
13788 : set the base revision
13789 baserev=5.0
13790
13791 : how do we catenate cpp tokens here?
13792 echo " "
13793 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13794 $cat >cpp_stuff.c <<'EOCP'
13795 #define RCAT(a,b)a/**/b
13796 #define ACAT(a,b)a ## b
13797 RCAT(Rei,ser)
13798 ACAT(Cir,cus)
13799 EOCP
13800 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13801 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13802         echo "Oh!  Smells like ANSI's been here." >&4
13803         echo "We can catify or stringify, separately or together!"
13804         cpp_stuff=42
13805 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13806         echo "Ah, yes!  The good old days!" >&4
13807         echo "However, in the good old days we don't know how to stringify and"
13808         echo "catify at the same time."
13809         cpp_stuff=1
13810 else
13811         $cat >&4 <<EOM
13812 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13813 to have to edit the values of CAT[2-5] in config.h...
13814 EOM
13815         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13816 fi
13817 $rm -f cpp_stuff.*
13818
13819 : see if this is a db.h system
13820 set db.h i_db
13821 eval $inhdr
13822
13823 case "$i_db" in
13824 $define)
13825         : Check db version.
13826         echo " "
13827         echo "Checking Berkeley DB version ..." >&4
13828         $cat >try.c <<EOCP
13829 #$d_const HASCONST
13830 #ifndef HASCONST
13831 #define const
13832 #endif
13833 #include <sys/types.h>
13834 #include <stdio.h>
13835 #include <db.h>
13836 int main(int argc, char *argv[])
13837 {
13838 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13839     int Major, Minor, Patch ;
13840     unsigned long Version ;
13841     (void)db_version(&Major, &Minor, &Patch) ;
13842     if (argc == 2) {
13843         printf("%d %d %d %d %d %d\n",
13844                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13845                Major, Minor, Patch);
13846         exit(0);
13847     }
13848     printf("You have Berkeley DB Version 2 or greater.\n");
13849
13850     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13851                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13852     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13853                 Major, Minor, Patch) ;
13854
13855     /* check that db.h & libdb are compatible */
13856     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13857         printf("db.h and libdb are incompatible.\n") ;
13858         exit(3);        
13859     }
13860
13861     printf("db.h and libdb are compatible.\n") ;
13862
13863     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13864                 + DB_VERSION_PATCH ;
13865
13866     /* needs to be >= 2.3.4 */
13867     if (Version < 2003004) {
13868     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13869         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13870         exit(2);        
13871     }
13872
13873     exit(0);
13874 #else
13875 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13876     if (argc == 2) {
13877         printf("1 0 0\n");
13878         exit(0);
13879     }
13880     printf("You have Berkeley DB Version 1.\n");
13881     exit(0);    /* DB version < 2: the coast is clear. */
13882 #else
13883     exit(1);    /* <db.h> not Berkeley DB? */
13884 #endif
13885 #endif
13886 }
13887 EOCP
13888         set try
13889         if eval $compile_ok && $run ./try; then
13890                 echo 'Looks OK.' >&4
13891                 set `$run ./try 1`
13892                 db_version_major=$1
13893                 db_version_minor=$2
13894                 db_version_patch=$3
13895         else
13896                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13897                 i_db=$undef
13898                 case " $libs " in
13899                 *"-ldb "*)
13900                         : Remove db from list of libraries to use
13901                         echo "Removing unusable -ldb from library list" >&4
13902                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13903                         shift
13904                         libs="$*"
13905                         echo "libs = $libs" >&4
13906                         ;;
13907                 esac
13908         fi
13909         $rm -f try.*
13910         ;;
13911 esac
13912
13913 case "$i_db" in
13914 define)
13915         : Check the return type needed for hash 
13916         echo " "
13917         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13918         $cat >try.c <<EOCP
13919 #$d_const HASCONST
13920 #ifndef HASCONST
13921 #define const
13922 #endif
13923 #include <sys/types.h>
13924 #include <db.h>
13925
13926 #ifndef DB_VERSION_MAJOR
13927 u_int32_t hash_cb (ptr, size)
13928 const void *ptr;
13929 size_t size;
13930 {
13931 }
13932 HASHINFO info;
13933 int main()
13934 {
13935         info.hash = hash_cb;
13936 }
13937 #endif
13938 EOCP
13939         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13940                 if $contains warning try.out >>/dev/null 2>&1 ; then
13941                         db_hashtype='int'
13942                 else
13943                         db_hashtype='u_int32_t'
13944                 fi
13945         else
13946                 : XXX Maybe we should just give up here.
13947                 db_hashtype=u_int32_t
13948                 $cat try.out >&4
13949                 echo "Help:  I can't seem to compile the db test program." >&4
13950                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13951         fi
13952         $rm -f try.*
13953         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13954         ;;
13955 *)      db_hashtype=u_int32_t
13956         ;;
13957 esac
13958 case "$i_db" in
13959 define)
13960         : Check the return type needed for prefix 
13961         echo " "
13962         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13963         cat >try.c <<EOCP
13964 #$d_const HASCONST
13965 #ifndef HASCONST
13966 #define const
13967 #endif
13968 #include <sys/types.h>
13969 #include <db.h>
13970
13971 #ifndef DB_VERSION_MAJOR
13972 size_t prefix_cb (key1, key2)
13973 const DBT *key1;
13974 const DBT *key2;
13975 {
13976 }
13977 BTREEINFO info;
13978 int main()
13979 {
13980         info.prefix = prefix_cb;
13981 }
13982 #endif
13983 EOCP
13984         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13985                 if $contains warning try.out >>/dev/null 2>&1 ; then
13986                         db_prefixtype='int'
13987                 else
13988                         db_prefixtype='size_t'
13989                 fi
13990         else
13991                 db_prefixtype='size_t'
13992                 : XXX Maybe we should just give up here.
13993                 $cat try.out >&4
13994                 echo "Help:  I can't seem to compile the db test program." >&4
13995                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13996         fi
13997         $rm -f try.*
13998         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13999         ;;
14000 *)      db_prefixtype='size_t'
14001         ;;
14002 esac
14003
14004
14005 : How can we generate normalized random numbers ?
14006 echo " "
14007 echo "Looking for a random number function..." >&4
14008 case "$randfunc" in
14009 '')
14010         if set drand48 val -f; eval $csym; $val; then
14011                 dflt="drand48"
14012                 echo "Good, found drand48()." >&4
14013         elif set random val -f; eval $csym; $val; then
14014                 dflt="random"
14015                 echo "OK, found random()." >&4
14016         else
14017                 dflt="rand"
14018                 echo "Yick, looks like I have to use rand()." >&4
14019         fi
14020         echo " "
14021         ;;
14022 *)
14023         dflt="$randfunc"
14024         ;;
14025 esac
14026 cont=true
14027
14028 case "$ccflags" in
14029 *-Dmy_rand=*|*-Dmy_srand=*)
14030         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14031         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14032         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14033         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14034         ;;
14035 esac
14036
14037 while $test "$cont"; do
14038         rp="Use which function to generate random numbers?"
14039         . ./myread
14040         if $test "$ans" = "$dflt"; then
14041                 : null
14042         else
14043                 randbits=''
14044         fi
14045         randfunc="$ans"
14046         if set $ans val -f; eval $csym; $val; then
14047                 cont=''
14048         else
14049                 dflt=y
14050                 rp="I cannot find function $ans. Use that name anyway?"
14051                 . ./myread
14052                 dflt=rand
14053                 case "$ans" in
14054                         [yY]*) cont='';;
14055                 esac
14056         fi
14057         case "$cont" in
14058         '')
14059                 case "$randfunc" in
14060                 drand48)
14061                         drand01="drand48()"
14062                         seedfunc="srand48"
14063                         randbits=48
14064                         randseedtype=long
14065                         ;;
14066                 rand|random)
14067                         case "$randbits" in
14068                         '')
14069 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14070                                 $cat >try.c <<EOCP
14071 #$i_unistd I_UNISTD
14072 #$i_stdlib I_STDLIB
14073 #include <stdio.h>
14074 #ifdef I_UNISTD
14075 #  include <unistd.h>
14076 #endif
14077 #ifdef I_STDLIB
14078 #  include <stdlib.h>
14079 #endif
14080 int main()
14081 {
14082         register int i;
14083         register unsigned long tmp;
14084         register unsigned long max = 0L;
14085
14086         for (i = 1000; i; i--) {
14087                 tmp = (unsigned long) $randfunc();
14088                 if (tmp > max) max = tmp;
14089         }
14090         for (i = 0; max; i++)
14091                 max /= 2;
14092         printf("%d\n",i);
14093 }
14094 EOCP
14095                                 set try
14096                                 if eval $compile_ok; then
14097                                         dflt=`try`
14098                                 else
14099                                         dflt='?'
14100                                         echo "(I can't seem to compile the test program...)"
14101                                 fi
14102                                 ;;
14103                         *)
14104                                 dflt="$randbits"
14105                                 ;;
14106                         esac
14107                         rp="How many bits does your $randfunc() function produce?"
14108                         . ./myread
14109                         randbits="$ans"
14110                         $rm -f try.c try
14111                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14112                         seedfunc="s$randfunc"
14113                         randseedtype=unsigned
14114                         ;;
14115                 *)
14116                         dflt="31"
14117                         rp="How many bits does your $randfunc() function produce?"
14118                         . ./myread
14119                         randbits="$ans"
14120                         seedfunc="s$randfunc"
14121                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14122                         if set $seedfunc val -f; eval $csym; $val; then
14123                                 echo "(Using $seedfunc() to seed random generator)"
14124                         else
14125                                 echo "(Warning: no $seedfunc() to seed random generator)"
14126                                 seedfunc=rand
14127                         fi
14128                         randseedtype=unsigned
14129                         ;;
14130                 esac
14131                 ;;
14132         esac
14133 done
14134
14135 echo " "
14136 echo "Determining whether or not we are on an EBCDIC system..." >&4
14137 $cat >try.c <<'EOM'
14138 int main()
14139 {
14140   if ('M'==0xd4) return 0;
14141   return 1;
14142 }
14143 EOM
14144
14145 val=$undef
14146 set try
14147 if eval $compile_ok; then
14148         if $run ./try; then
14149                 echo "You seem to speak EBCDIC." >&4
14150                 val="$define"
14151         else
14152                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14153         fi
14154 else
14155         echo "I'm unable to compile the test program." >&4
14156         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14157 fi
14158 $rm -f try try.*
14159 set ebcdic
14160 eval $setvar
14161
14162 echo " "
14163 $cat >&4 <<EOM
14164 Checking how to flush all pending stdio output...
14165 EOM
14166 # I only know how to find the first 32 possibly open files on SunOS.
14167 # See also hints/sunos_4_1.sh and util.c  --AD
14168 case "$osname" in
14169 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14170 esac
14171 $cat >>try.c <<EOCP
14172 #include <stdio.h>
14173 #$i_unistd I_UNISTD
14174 #ifdef I_UNISTD
14175 # include <unistd.h>
14176 #endif
14177 #$d_sysconf HAS_SYSCONF
14178 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14179 #ifdef HAS_STDIO_STREAM_ARRAY
14180 # define STDIO_STREAM_ARRAY $stdio_stream_array
14181 #endif
14182 int main() {
14183   FILE* p;
14184   unlink("try.out");
14185   p = fopen("try.out", "w");
14186 #ifdef TRY_FPUTC
14187   fputc('x', p);
14188 #else
14189 # ifdef TRY_FPRINTF
14190   fprintf(p, "x");
14191 # endif
14192 #endif
14193 #ifdef TRY_FFLUSH_NULL
14194   fflush(NULL);
14195 #endif
14196 #ifdef TRY_FFLUSH_ALL
14197   {
14198     long open_max = -1;
14199 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14200     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14201 # else
14202 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14203     open_max = sysconf(_SC_OPEN_MAX);
14204 #  else
14205 #   ifdef FOPEN_MAX
14206     open_max = FOPEN_MAX;
14207 #   else
14208 #    ifdef OPEN_MAX
14209     open_max = OPEN_MAX;
14210 #    else
14211 #     ifdef _NFILE
14212     open_max = _NFILE;
14213 #     endif
14214 #    endif
14215 #   endif
14216 #  endif
14217 # endif 
14218 # ifdef HAS_STDIO_STREAM_ARRAY
14219     if (open_max > 0) {
14220       long i;
14221       for (i = 0; i < open_max; i++)
14222             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14223                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14224                 STDIO_STREAM_ARRAY[i]._flag)
14225                 fflush(&STDIO_STREAM_ARRAY[i]);
14226     }   
14227   }
14228 # endif
14229 #endif
14230   _exit(42);
14231 }
14232 EOCP
14233 : first we have to find out how _not_ to flush
14234 $to try.c
14235 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14236     output=''
14237     set try -DTRY_FPUTC
14238     if eval $compile; then
14239             $run ./try 2>/dev/null
14240             code="$?"
14241             $from try.out
14242             if $test ! -s try.out -a "X$code" = X42; then
14243                 output=-DTRY_FPUTC
14244             fi
14245     fi
14246     case "$output" in
14247     '')
14248             set try -DTRY_FPRINTF
14249             if eval $compile; then
14250                     $run ./try 2>/dev/null
14251                     code="$?"
14252                     $from try.out
14253                     if $test ! -s try.out -a "X$code" = X42; then
14254                         output=-DTRY_FPRINTF
14255                     fi
14256             fi
14257         ;;
14258     esac
14259 fi
14260 : check for fflush NULL behaviour
14261 case "$fflushNULL" in
14262 '')     set try -DTRY_FFLUSH_NULL $output
14263         if eval $compile; then
14264                 $run ./try 2>/dev/null
14265                 code="$?"
14266                 $from try.out
14267                 if $test -s try.out -a "X$code" = X42; then
14268                         fflushNULL="`$cat try.out`"
14269                 else
14270                         if $test "X$code" != X42; then
14271                                 $cat >&4 <<EOM
14272 (If this test failed, don't worry, we'll try another method shortly.)
14273 EOM
14274                         fi
14275                 fi
14276         fi
14277         $rm -f core try.core core.try.*
14278         case "$fflushNULL" in
14279         x)      $cat >&4 <<EOM
14280 Your fflush(NULL) works okay for output streams.
14281 Let's see if it clobbers input pipes...
14282 EOM
14283 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14284 # bug that improperly flushes the input end of pipes.  So we avoid the
14285 # autoflush on fork/system/exec support for now. :-(
14286 $cat >tryp.c <<EOCP
14287 #include <stdio.h>
14288 int
14289 main(int argc, char **argv)
14290 {
14291     char buf[1024];
14292     int i;
14293     char *bp = buf;
14294     while (1) {
14295         while ((i = getc(stdin)) != -1
14296                && (*bp++ = i) != '\n'
14297                && bp < &buf[1024])
14298         /* DO NOTHING */ ;
14299         *bp = '\0';
14300         fprintf(stdout, "%s", buf);
14301         fflush(NULL);
14302         if (i == -1)
14303             return 0;
14304         bp = buf;
14305     }
14306 }
14307 EOCP
14308                 fflushNULL="$define"
14309                 set tryp
14310                 if eval $compile; then
14311                     $rm -f tryp.out
14312                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14313                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14314                        $cat >&4 <<EOM
14315 fflush(NULL) seems to behave okay with input streams.
14316 EOM
14317                         fflushNULL="$define"
14318                     else
14319                         $cat >&4 <<EOM
14320 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14321 EOM
14322                         fflushNULL="$undef"
14323                     fi
14324                 fi
14325                 $rm -f core tryp.c tryp.core core.tryp.*
14326                 ;;
14327         '')     $cat >&4 <<EOM
14328 Your fflush(NULL) isn't working (contrary to ANSI C).
14329 EOM
14330                 fflushNULL="$undef"
14331                 ;;
14332         *)      $cat >&4 <<EOM
14333 Cannot figure out whether your fflush(NULL) works or not.
14334 I'm assuming it doesn't (contrary to ANSI C).
14335 EOM
14336                 fflushNULL="$undef"
14337                 ;;
14338         esac
14339         ;;
14340 $define|true|[yY]*)
14341         fflushNULL="$define"
14342         ;;
14343 *)
14344         fflushNULL="$undef"
14345         ;;
14346 esac
14347 : check explicit looping only if NULL did not work, and if the pipe
14348 : bug does not show up on an explicit flush too
14349 case "$fflushNULL" in
14350 "$undef")
14351         $cat >tryp.c <<EOCP
14352 #include <stdio.h>
14353 int
14354 main(int argc, char **argv)
14355 {
14356     char buf[1024];
14357     int i;
14358     char *bp = buf;
14359     while (1) {
14360         while ((i = getc(stdin)) != -1
14361                && (*bp++ = i) != '\n'
14362                && bp < &buf[1024])
14363         /* DO NOTHING */ ;
14364         *bp = '\0';
14365         fprintf(stdout, "%s", buf);
14366         fflush(stdin);
14367         if (i == -1)
14368             return 0;
14369         bp = buf;
14370     }
14371 }
14372 EOCP
14373         set tryp
14374         if eval $compile; then
14375             $rm -f tryp.out
14376             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14377             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14378                $cat >&4 <<EOM
14379 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14380 EOM
14381                 : now check for fflushall behaviour
14382                 case "$fflushall" in
14383                 '')     set try -DTRY_FFLUSH_ALL $output
14384                         if eval $compile; then
14385                                 $cat >&4 <<EOM
14386 (Now testing the other method--but note that this also may fail.)
14387 EOM
14388                                 $run ./try 2>/dev/null
14389                                 code=$?
14390                                 $from try.out
14391                                 if $test -s try.out -a "X$code" = X42; then
14392                                         fflushall="`$cat try.out`"
14393                                 fi
14394                         fi
14395                         $rm -f core try.core core.try.*
14396                         case "$fflushall" in
14397                         x)      $cat >&4 <<EOM
14398 Whew. Flushing explicitly all the stdio streams works.
14399 EOM
14400                                 fflushall="$define"
14401                                 ;;
14402                         '')     $cat >&4 <<EOM
14403 Sigh. Flushing explicitly all the stdio streams doesn't work.
14404 EOM
14405                                 fflushall="$undef"
14406                                 ;;
14407                         *)      $cat >&4 <<EOM
14408 Cannot figure out whether flushing stdio streams explicitly works or not.
14409 I'm assuming it doesn't.
14410 EOM
14411                                 fflushall="$undef"
14412                                 ;;
14413                         esac
14414                         ;;
14415                 "$define"|true|[yY]*)
14416                         fflushall="$define"
14417                         ;;
14418                 *)
14419                         fflushall="$undef"
14420                         ;;
14421                 esac
14422             else
14423                 $cat >&4 <<EOM
14424 All is futile.  Even fflush(stdin) clobbers input pipes!
14425 EOM
14426                 fflushall="$undef"
14427             fi
14428         else
14429             fflushall="$undef"
14430         fi
14431         $rm -f core tryp.c tryp.core core.tryp.*
14432         ;;
14433 *)      fflushall="$undef"
14434         ;;
14435 esac
14436
14437 case "$fflushNULL$fflushall" in
14438 undefundef)
14439         $cat <<EOM
14440 OK, I give up.  I cannot figure out how to flush pending stdio output.
14441 We won't be flushing handles at all before fork/exec/popen.
14442 EOM
14443         ;;
14444 esac
14445 $rm -f try.* try$exe_ext
14446
14447 : Store the full pathname to the ar program for use in the C program
14448 : Respect a hint or command line value for full_ar.
14449 case "$full_ar" in
14450 '') full_ar=$ar ;;
14451 esac
14452
14453 : Store the full pathname to the sed program for use in the C program
14454 full_sed=$sed
14455
14456 : see what type gids are declared as in the kernel
14457 echo " "
14458 echo "Looking for the type for group ids returned by getgid()."
14459 set gid_t gidtype xxx stdio.h sys/types.h
14460 eval $typedef
14461 case "$gidtype" in
14462 xxx)
14463         xxx=`./findhdr sys/user.h`
14464         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14465         case $1 in
14466         unsigned) dflt="$1 $2" ;;
14467         *) dflt="$1" ;;
14468         esac
14469         ;;
14470 *) dflt="$gidtype";;
14471 esac
14472 case "$gidtype" in
14473 gid_t) echo "gid_t found." ;;
14474 *)      rp="What is the type for group ids returned by getgid()?"
14475         . ./myread
14476         gidtype="$ans"
14477         ;;
14478 esac
14479
14480 echo " "
14481 case "$gidtype" in
14482 *_t) zzz="$gidtype"     ;;
14483 *)   zzz="gid"          ;;
14484 esac
14485 echo "Checking the size of $zzz..." >&4 
14486 cat > try.c <<EOCP
14487 #include <sys/types.h>
14488 #include <stdio.h>
14489 int main() {
14490     printf("%d\n", (int)sizeof($gidtype));
14491     exit(0);
14492 }
14493 EOCP
14494 set try
14495 if eval $compile_ok; then
14496         yyy=`$run ./try`
14497         case "$yyy" in
14498         '')     gidsize=4
14499                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14500                 ;;
14501         *)      gidsize=$yyy
14502                 echo "Your $zzz is $gidsize bytes long."
14503                 ;;
14504         esac
14505 else
14506         gidsize=4
14507         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14508 fi
14509
14510
14511 echo " "
14512 case "$gidtype" in
14513 *_t) zzz="$gidtype"     ;;
14514 *)   zzz="gid"          ;;
14515 esac
14516 echo "Checking the sign of $zzz..." >&4 
14517 cat > try.c <<EOCP
14518 #include <sys/types.h>
14519 #include <stdio.h>
14520 int main() {
14521         $gidtype foo = -1;
14522         if (foo < 0)
14523                 printf("-1\n");
14524         else
14525                 printf("1\n");
14526 }
14527 EOCP
14528 set try
14529 if eval $compile; then
14530         yyy=`$run ./try`
14531         case "$yyy" in
14532         '')     gidsign=1
14533                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14534                 ;;
14535         *)      gidsign=$yyy
14536                 case "$gidsign" in
14537                  1) echo "Your $zzz is unsigned." ;;
14538                 -1) echo "Your $zzz is signed."   ;;
14539                 esac
14540                 ;;
14541         esac
14542 else
14543         gidsign=1
14544         echo "(I can't compile the test program--guessing unsigned.)" >&4
14545 fi
14546
14547
14548 echo " "
14549
14550 if $test X"$quadtype" != X; then
14551
14552 echo "Checking how to print 64-bit integers..." >&4
14553
14554 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14555         $cat >try.c <<'EOCP'
14556 #include <sys/types.h>
14557 #include <stdio.h>
14558 int main() {
14559   int q = 12345678901;
14560   printf("%ld\n", q);
14561 }
14562 EOCP
14563         set try
14564         if eval $compile; then
14565                 yyy=`$run ./try`
14566                 case "$yyy" in
14567                 12345678901)
14568                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14569                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14570                         echo "We will use %d."
14571                         ;;
14572                 esac
14573         fi
14574 fi
14575
14576 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14577         $cat >try.c <<'EOCP'
14578 #include <sys/types.h>
14579 #include <stdio.h>
14580 int main() {
14581   long q = 12345678901;
14582   printf("%ld\n", q);
14583 }
14584 EOCP
14585         set try
14586         if eval $compile; then
14587                 yyy=`$run ./try`
14588                 case "$yyy" in
14589                 12345678901)
14590                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14591                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14592                         echo "We will use %ld."
14593                         ;;
14594                 esac
14595         fi
14596 fi
14597
14598 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14599         $cat >try.c <<'EOCP'
14600 #include <sys/types.h>
14601 #include <inttypes.h>
14602 #include <stdio.h>
14603 int main() {
14604   int64_t q = 12345678901;
14605   printf("%" PRId64 "\n", q);
14606 }
14607 EOCP
14608         set try
14609         if eval $compile; then
14610                 yyy=`$run ./try`
14611                 case "$yyy" in
14612                 12345678901)
14613                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14614                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14615                         echo "We will use the C9X style."
14616                         ;;
14617                 esac
14618         fi
14619 fi
14620
14621 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14622         $cat >try.c <<EOCP
14623 #include <sys/types.h>
14624 #include <stdio.h>
14625 int main() {
14626   $quadtype q = 12345678901;
14627   printf("%Ld\n", q);
14628 }
14629 EOCP
14630         set try
14631         if eval $compile; then
14632                 yyy=`$run ./try`
14633                 case "$yyy" in
14634                 12345678901)
14635                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14636                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14637                         echo "We will use %Ld."
14638                         ;;
14639                 esac
14640         fi
14641 fi
14642
14643 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14644         $cat >try.c <<'EOCP'
14645 #include <sys/types.h>
14646 #include <stdio.h>
14647 int main() {
14648   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14649   printf("%lld\n", q);
14650 }
14651 EOCP
14652         set try
14653         if eval $compile; then
14654                 yyy=`$run ./try`
14655                 case "$yyy" in
14656                 12345678901)
14657                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14658                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14659                         echo "We will use the %lld style."
14660                         ;;
14661                 esac
14662         fi
14663 fi
14664
14665 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14666         $cat >try.c <<EOCP
14667 #include <sys/types.h>
14668 #include <stdio.h>
14669 int main() {
14670   $quadtype q = 12345678901;
14671   printf("%qd\n", q);
14672 }
14673 EOCP
14674         set try
14675         if eval $compile; then
14676                 yyy=`$run ./try`
14677                 case "$yyy" in
14678                 12345678901)
14679                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14680                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14681                         echo "We will use %qd."
14682                         ;;
14683                 esac
14684         fi
14685 fi
14686
14687 if $test X"$sPRId64" = X; then
14688         echo "Cannot figure out how to print 64-bit integers." >&4
14689 fi
14690
14691 $rm -f try try.*
14692
14693 fi
14694
14695 case "$sPRId64" in
14696 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14697         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14698         ;;
14699 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14700         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14701         ;;
14702 esac
14703
14704
14705 echo " "
14706 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14707
14708 if $test X"$ivsize" = X8; then
14709         ivdformat="$sPRId64"
14710         uvuformat="$sPRIu64"
14711         uvoformat="$sPRIo64"
14712         uvxformat="$sPRIx64"
14713         uvXUformat="$sPRIXU64"
14714 else
14715         if $test X"$ivsize" = X"$longsize"; then
14716                 ivdformat='"ld"'
14717                 uvuformat='"lu"'
14718                 uvoformat='"lo"'
14719                 uvxformat='"lx"'
14720                 uvXUformat='"lX"'
14721         else
14722                 if $test X"$ivsize" = X"$intsize"; then
14723                         ivdformat='"d"'
14724                         uvuformat='"u"'
14725                         uvoformat='"o"'
14726                         uvxformat='"x"'
14727                         uvXUformat='"X"'
14728                 else
14729                         : far out
14730                         if $test X"$ivsize" = X"$shortsize"; then
14731                                 ivdformat='"hd"'
14732                                 uvuformat='"hu"'
14733                                 uvoformat='"ho"'
14734                                 uvxformat='"hx"'
14735                                 uvXUformat='"hX"'
14736                         fi
14737                 fi
14738         fi
14739 fi
14740
14741 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14742         nveformat="$sPRIeldbl"
14743         nvfformat="$sPRIfldbl"
14744         nvgformat="$sPRIgldbl"
14745         nvEUformat="$sPRIEUldbl"
14746         nvFUformat="$sPRIFUldbl"
14747         nvGUformat="$sPRIGUldbl"
14748 else
14749         nveformat='"e"'
14750         nvfformat='"f"'
14751         nvgformat='"g"'
14752         nvEUformat='"E"'
14753         nvFUformat='"F"'
14754         nvGUformat='"G"'
14755 fi
14756
14757 case "$ivdformat" in
14758 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14759     exit 1
14760     ;;
14761 esac
14762
14763
14764 echo " "
14765 $echo "Checking the format string to be used for gids..." >&4
14766
14767 case "$gidsign" in
14768 -1)     if $test X"$gidsize" = X"$ivsize"; then
14769                 gidformat="$ivdformat"
14770         else
14771                 if $test X"$gidsize" = X"$longsize"; then
14772                         gidformat='"ld"'
14773                 else
14774                         if $test X"$gidsize" = X"$intsize"; then
14775                                 gidformat='"d"'
14776                         else
14777                                 if $test X"$gidsize" = X"$shortsize"; then
14778                                         gidformat='"hd"'
14779                                 fi
14780                         fi
14781                 fi
14782         fi
14783         ;;
14784 *)      if $test X"$gidsize" = X"$uvsize"; then
14785                 gidformat="$uvuformat"
14786         else
14787                 if $test X"$gidsize" = X"$longsize"; then
14788                         gidformat='"lu"'
14789                 else
14790                         if $test X"$gidsize" = X"$intsize"; then
14791                                 gidformat='"u"'
14792                         else
14793                                 if $test X"$gidsize" = X"$shortsize"; then
14794                                         gidformat='"hu"'
14795                                 fi
14796                         fi
14797                 fi
14798         fi
14799         ;;
14800 esac
14801
14802 : see if getgroups exists
14803 set getgroups d_getgrps
14804 eval $inlibc
14805
14806 : see if setgroups exists
14807 set setgroups d_setgrps
14808 eval $inlibc
14809
14810
14811 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14812 echo " "
14813 case "$d_getgrps$d_setgrps" in
14814 *define*)
14815         case "$groupstype" in
14816         '') dflt="$gidtype" ;;
14817         *)  dflt="$groupstype" ;;
14818         esac
14819         $cat <<EOM
14820 What type of pointer is the second argument to getgroups() and setgroups()?
14821 Usually this is the same as group ids, $gidtype, but not always.
14822
14823 EOM
14824         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14825         . ./myread
14826         groupstype="$ans"
14827         ;;
14828 *)  groupstype="$gidtype";;
14829 esac
14830
14831 echo " "
14832 echo "Checking if your $make program sets \$(MAKE)..." >&4
14833 case "$make_set_make" in
14834 '')
14835         $sed 's/^X //' > testmake.mak << 'EOF'
14836 Xall:
14837 X       @echo 'maketemp="$(MAKE)"'
14838 EOF
14839         case "`$make -f testmake.mak 2>/dev/null`" in
14840         *maketemp=*) make_set_make='#' ;;
14841         *)      make_set_make="MAKE=$make" ;;
14842         esac
14843         $rm -f testmake.mak
14844         ;;
14845 esac
14846 case "$make_set_make" in
14847 '#') echo "Yup, it does.";;
14848 *) echo "Nope, it doesn't.";;
14849 esac
14850
14851 : see what type is used for mode_t
14852 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14853 set mode_t modetype int stdio.h sys/types.h
14854 eval $typedef_ask
14855
14856 : see if stdarg is available
14857 echo " "
14858 if $test `./findhdr stdarg.h`; then
14859         echo "<stdarg.h> found." >&4
14860         valstd="$define"
14861 else
14862         echo "<stdarg.h> NOT found." >&4
14863         valstd="$undef"
14864 fi
14865
14866 : see if varags is available
14867 echo " "
14868 if $test `./findhdr varargs.h`; then
14869         echo "<varargs.h> found." >&4
14870 else
14871         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14872 fi
14873
14874 : set up the varargs testing programs
14875 $cat > varargs.c <<EOP
14876 #ifdef I_STDARG
14877 #include <stdarg.h>
14878 #endif
14879 #ifdef I_VARARGS
14880 #include <varargs.h>
14881 #endif
14882
14883 #ifdef I_STDARG
14884 int f(char *p, ...)
14885 #else
14886 int f(va_alist)
14887 va_dcl
14888 #endif
14889 {
14890         va_list ap;
14891 #ifndef I_STDARG
14892         char *p;
14893 #endif
14894 #ifdef I_STDARG
14895         va_start(ap,p);
14896 #else
14897         va_start(ap);
14898         p = va_arg(ap, char *);
14899 #endif
14900         va_end(ap);
14901 }
14902 EOP
14903 $cat > varargs <<EOP
14904 $startsh
14905 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14906         echo "true"
14907 else
14908         echo "false"
14909 fi
14910 $rm -f varargs$_o
14911 EOP
14912 chmod +x varargs
14913
14914 : now check which varargs header should be included
14915 echo " "
14916 i_varhdr=''
14917 case "$valstd" in
14918 "$define")
14919         if `./varargs I_STDARG`; then
14920                 val='stdarg.h'
14921         elif `./varargs I_VARARGS`; then
14922                 val='varargs.h'
14923         fi
14924         ;;
14925 *)
14926         if `./varargs I_VARARGS`; then
14927                 val='varargs.h'
14928         fi
14929         ;;
14930 esac
14931 case "$val" in
14932 '')
14933 echo "I could not find the definition for va_dcl... You have problems..." >&4
14934         val="$undef"; set i_stdarg; eval $setvar
14935         val="$undef"; set i_varargs; eval $setvar
14936         ;;
14937 *) 
14938         set i_varhdr
14939         eval $setvar
14940         case "$i_varhdr" in
14941         stdarg.h)
14942                 val="$define"; set i_stdarg; eval $setvar
14943                 val="$undef"; set i_varargs; eval $setvar
14944                 ;;
14945         varargs.h)
14946                 val="$undef"; set i_stdarg; eval $setvar
14947                 val="$define"; set i_varargs; eval $setvar
14948                 ;;
14949         esac
14950         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14951 esac
14952 $rm -f varargs*
14953
14954 : see if we need va_copy
14955 echo " "
14956 case "$i_stdarg" in
14957 "$define")
14958         $cat >try.c <<EOCP
14959 #include <stdarg.h>
14960 #include <stdio.h>
14961 #$i_stdlib I_STDLIB
14962 #ifdef I_STDLIB
14963 #include <stdlib.h>
14964 #endif
14965 #include <signal.h>
14966
14967 int
14968 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14969 {
14970   return vfprintf(f, fmt, *valp);
14971 }
14972  
14973 int    
14974 myvfprintf(FILE *f, const  char *fmt, va_list val)
14975 {
14976   return ivfprintf(f, fmt, &val);
14977 }
14978       
14979 int
14980 myprintf(char *fmt, ...) 
14981 {
14982   va_list val;
14983   va_start(val, fmt);
14984   return myvfprintf(stdout, fmt, val); 
14985 }         
14986
14987 int
14988 main(int ac, char **av)
14989 {
14990   signal(SIGSEGV, exit);
14991
14992   myprintf("%s%cs all right, then\n", "that", '\'');                            
14993   exit(0);      
14994 }
14995 EOCP
14996         set try
14997         if eval $compile && $run ./try 2>&1 >/dev/null; then
14998                 case "`$run ./try`" in
14999                 "that's all right, then")
15000                         okay=yes
15001                         ;;
15002                 esac
15003         fi
15004         case "$okay" in
15005         yes)    echo "It seems that you don't need va_copy()." >&4
15006                 need_va_copy="$undef"
15007                 ;;
15008         *)      echo "It seems that va_copy() or similar will be needed." >&4
15009                 need_va_copy="$define"
15010                 ;;
15011         esac
15012         $rm -f try.* core core.* *.core *.core.*
15013         ;;
15014 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15015         ;;
15016 esac
15017
15018 : define a fucntion to check prototypes
15019 $cat > protochk <<EOSH
15020 $startsh
15021 cc="$cc"
15022 optimize="$optimize"
15023 ccflags="$ccflags"
15024 prototype="$prototype"
15025 define="$define"
15026 rm=$rm
15027 EOSH
15028
15029 $cat >> protochk <<'EOSH'
15030
15031 $rm -f try.c
15032 foo="$1"
15033 shift
15034 while test $# -ge 2; do
15035         case "$1" in
15036                 $define) echo "#include <$2>" >> try.c ;;
15037                 literal) echo "$2" >> try.c ;;
15038         esac
15039     shift 2
15040 done
15041 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15042 cat >> try.c <<'EOCP'
15043 #ifdef CAN_PROTOTYPE
15044 #define _(args) args
15045 #else
15046 #define _(args) ()
15047 #endif
15048 EOCP
15049 echo "$foo" >> try.c
15050 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15051 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15052 status=$?
15053 $rm -f try.[co]
15054 exit $status
15055 EOSH
15056 chmod +x protochk
15057 $eunicefix protochk
15058
15059 : see what type is used for size_t
15060 rp="What is the type used for the length parameter for string functions?"
15061 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15062 eval $typedef_ask
15063
15064 : check for type of arguments to gethostbyaddr. 
15065 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15066         case "$d_gethbyaddr" in
15067         $define)
15068                 $cat <<EOM
15069
15070 Checking to see what type of arguments are accepted by gethostbyaddr().
15071 EOM
15072                 hdrs="$define sys/types.h
15073                         $d_socket sys/socket.h 
15074                         $i_niin netinet/in.h 
15075                         $i_netdb netdb.h
15076                         $i_unistd unistd.h"
15077                 : The first arg can 'char *' or 'void *'
15078                 : The second arg is some of integral type
15079                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15080                         for yyy in size_t long int; do
15081                                 case "$netdb_host_type" in
15082                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15083                                         if ./protochk "$try" $hdrs; then
15084                                                 echo "Your system accepts $xxx for the first arg."
15085                                                 echo "...and $yyy for the second arg."
15086                                                 netdb_host_type="$xxx"
15087                                                 netdb_hlen_type="$yyy"
15088                                         fi
15089                                         ;;
15090                                 esac
15091                         done
15092                 done
15093                 : In case none of those worked, prompt the user.
15094                 case "$netdb_host_type" in
15095                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15096                         dflt='char *'
15097                         . ./myread
15098                         netdb_host_type=$ans
15099                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15100                         dflt="$sizetype"
15101                         . ./myread
15102                         netdb_hlen_type=$ans
15103                         ;;
15104                 esac
15105                 ;;
15106         *)      : no gethostbyaddr, so pick harmless defaults
15107                 netdb_host_type='char *'
15108                 netdb_hlen_type="$sizetype"
15109                 ;;
15110         esac
15111         # Remove the "const" if needed. -- but then we'll have a 
15112         # prototype clash!
15113         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15114 fi
15115
15116 : check for type of argument to gethostbyname. 
15117 if test "X$netdb_name_type" = X ; then
15118         case "$d_gethbyname" in
15119         $define)
15120                 $cat <<EOM
15121
15122 Checking to see what type of argument is accepted by gethostbyname().
15123 EOM
15124                 hdrs="$define sys/types.h
15125                         $d_socket sys/socket.h 
15126                         $i_niin netinet/in.h 
15127                         $i_netdb netdb.h
15128                         $i_unistd unistd.h"
15129                 for xxx in "const char *" "char *"; do
15130                         case "$netdb_name_type" in
15131                         '')     try="extern struct hostent *gethostbyname($xxx);"
15132                                 if ./protochk "$try" $hdrs; then
15133                                         echo "Your system accepts $xxx."
15134                                         netdb_name_type="$xxx"
15135                                 fi
15136                                 ;;
15137                         esac
15138                 done
15139                 : In case none of those worked, prompt the user.
15140                 case "$netdb_name_type" in
15141                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15142                         dflt='char *'
15143                         . ./myread
15144                         netdb_name_type=$ans
15145                         ;;
15146                 esac
15147                 ;;
15148         *)      : no gethostbyname, so pick harmless default
15149                 netdb_name_type='char *'
15150                 ;;
15151         esac
15152 fi
15153
15154 : check for type of 1st argument to getnetbyaddr. 
15155 if test "X$netdb_net_type" = X ; then
15156         case "$d_getnbyaddr" in
15157         $define)
15158                 $cat <<EOM
15159
15160 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15161 EOM
15162                 hdrs="$define sys/types.h
15163                         $d_socket sys/socket.h 
15164                         $i_niin netinet/in.h 
15165                         $i_netdb netdb.h
15166                         $i_unistd unistd.h"
15167                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15168                         case "$netdb_net_type" in
15169                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15170                                 if ./protochk "$try" $hdrs; then
15171                                         echo "Your system accepts $xxx."
15172                                         netdb_net_type="$xxx"
15173                                 fi
15174                                 ;;
15175                         esac
15176                 done
15177                 : In case none of those worked, prompt the user.
15178                 case "$netdb_net_type" in
15179                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15180                         dflt='long'
15181                         . ./myread
15182                         netdb_net_type=$ans
15183                         ;;
15184                 esac
15185                 ;;
15186         *)      : no getnetbyaddr, so pick harmless default
15187                 netdb_net_type='long'
15188                 ;;
15189         esac
15190 fi
15191 : locate the preferred pager for this system
15192 case "$pager" in
15193 '')
15194         dflt=''
15195         case "$pg" in
15196         /*) dflt=$pg;;
15197         [a-zA-Z]:/*) dflt=$pg;;
15198         esac
15199         case "$more" in
15200         /*) dflt=$more;;
15201         [a-zA-Z]:/*) dflt=$more;;
15202         esac
15203         case "$less" in
15204         /*) dflt=$less;;
15205         [a-zA-Z]:/*) dflt=$less;;
15206         esac
15207         case "$dflt" in
15208         '') dflt=/usr/ucb/more;;
15209         esac
15210         ;;
15211 *) dflt="$pager";;
15212 esac
15213 echo " "
15214 fn=f/
15215 rp='What pager is used on your system?'
15216 . ./getfile
15217 pager="$ans"
15218
15219 : see what type pids are declared as in the kernel
15220 rp="What is the type of process ids on this system?"
15221 set pid_t pidtype int stdio.h sys/types.h
15222 eval $typedef_ask
15223
15224 : Find earliest binary compatible site_perl subdirectory perl can use.
15225 case "$bincompat5005" in
15226 "$define") xs_apiversion='5.005' ;;
15227 *) xs_apiversion=$version ;;   # The current site_perl version.
15228 esac
15229 : Find earliest pure perl site_perl subdirectory perl can use.
15230 : The versioned directories started at 5.005.
15231 pm_apiversion='5.005'
15232
15233 : see if ar generates random libraries by itself
15234 echo " "
15235 echo "Checking how to generate random libraries on your machine..." >&4
15236 echo 'int bar1() { return bar2(); }' > bar1.c
15237 echo 'int bar2() { return 2; }' > bar2.c
15238 $cat > foo.c <<'EOP'
15239 int main() { printf("%d\n", bar1()); exit(0); }
15240 EOP
15241 $cc $ccflags -c bar1.c >/dev/null 2>&1
15242 $cc $ccflags -c bar2.c >/dev/null 2>&1
15243 $cc $ccflags -c foo.c >/dev/null 2>&1
15244 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15245 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15246         $run ./foobar >/dev/null 2>&1; then
15247         echo "$ar appears to generate random libraries itself."
15248         orderlib=false
15249         ranlib=":"
15250 elif $ar ts bar$_a >/dev/null 2>&1 &&
15251         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15252         $run ./foobar >/dev/null 2>&1; then
15253                 echo "a table of contents needs to be added with '$ar ts'."
15254                 orderlib=false
15255                 ranlib="$ar ts"
15256 else
15257         case "$ranlib" in
15258         :) ranlib='';;
15259         '')
15260                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15261                 $test -f $ranlib || ranlib=''
15262                 ;;
15263         esac
15264         if $test -n "$ranlib"; then
15265                 echo "your system has '$ranlib'; we'll use that."
15266                 orderlib=false
15267         else
15268                 echo "your system doesn't seem to support random libraries"
15269                 echo "so we'll use lorder and tsort to order the libraries."
15270                 orderlib=true
15271                 ranlib=":"
15272         fi
15273 fi
15274 $rm -f foo* bar* 
15275
15276 : check for type of arguments to select. 
15277 case "$selecttype" in
15278 '') case "$d_select" in
15279         $define)
15280                 echo " "
15281                 $cat <<EOM
15282 Checking to see what type of arguments are accepted by select().
15283 EOM
15284                 hdrs="$define sys/types.h
15285                         $i_systime sys/time.h 
15286                         $i_sysselct sys/select.h
15287                         $d_socket sys/socket.h"
15288                 : The first arg can be int, unsigned, or size_t
15289                 : The last arg may or may not be 'const'
15290                 val=''
15291                 : void pointer has been seen but using that
15292                 : breaks the selectminbits test
15293                 for xxx in 'fd_set *' 'int *'; do
15294                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15295                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15296                                         case "$val" in
15297                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15298                                                 if ./protochk "$try" $hdrs; then
15299                                                         echo "Your system accepts $xxx."
15300                                                         val="$xxx"
15301                                                 fi
15302                                                 ;;
15303                                         esac
15304                                 done
15305                         done
15306                 done
15307                 case "$val" in
15308                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15309                         case "$d_fd_set" in
15310                                 $define) dflt="fd_set *" ;;
15311                                 *)              dflt="int *" ;;
15312                         esac
15313                         . ./myread
15314                         val=$ans
15315                         ;;
15316                 esac
15317                 selecttype="$val"
15318                 ;;
15319         *)      : no select, so pick a harmless default
15320                 selecttype='int *'
15321                 ;;
15322         esac
15323         ;;
15324 esac
15325
15326 : check for the select 'width'
15327 case "$selectminbits" in
15328 '') case "$d_select" in
15329         $define)
15330                 $cat <<EOM
15331
15332 Checking to see on how many bits at a time your select() operates...
15333 EOM
15334                 $cat >try.c <<EOCP
15335 #include <sys/types.h>
15336 #$i_time I_TIME
15337 #$i_systime I_SYS_TIME
15338 #$i_systimek I_SYS_TIME_KERNEL
15339 #ifdef I_TIME
15340 #   include <time.h>
15341 #endif
15342 #ifdef I_SYS_TIME
15343 #   ifdef I_SYS_TIME_KERNEL
15344 #       define KERNEL
15345 #   endif
15346 #   include <sys/time.h>
15347 #   ifdef I_SYS_TIME_KERNEL
15348 #       undef KERNEL
15349 #   endif
15350 #endif
15351 #$i_sysselct I_SYS_SELECT
15352 #ifdef I_SYS_SELECT
15353 #include <sys/select.h>
15354 #endif
15355 #$d_socket HAS_SOCKET
15356 #ifdef HAS_SOCKET
15357 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15358 #endif
15359 #include <stdio.h>
15360 $selecttype b;
15361 #define S sizeof(*(b))
15362 #define MINBITS 64
15363 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15364 #define NBITS  (NBYTES * 8)
15365 int main() {
15366     char s[NBYTES];
15367     struct timeval t;
15368     int i;
15369     FILE* fp;
15370     int fd;
15371
15372     fclose(stdin);
15373     fp = fopen("try.c", "r");
15374     if (fp == 0)
15375       exit(1);
15376     fd = fileno(fp);
15377     if (fd < 0)
15378       exit(2);
15379     b = ($selecttype)s;
15380     for (i = 0; i < NBITS; i++)
15381         FD_SET(i, b);
15382     t.tv_sec  = 0;
15383     t.tv_usec = 0;
15384     select(fd + 1, b, 0, 0, &t);
15385     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15386     printf("%d\n", i + 1);
15387     return 0;
15388 }
15389 EOCP
15390                 set try
15391                 if eval $compile_ok; then
15392                         selectminbits=`$run ./try`
15393                         case "$selectminbits" in
15394                         '')     cat >&4 <<EOM
15395 Cannot figure out on how many bits at a time your select() operates.
15396 I'll play safe and guess it is 32 bits.
15397 EOM
15398                                 selectminbits=32
15399                                 bits="32 bits"
15400                                 ;;
15401                         1)      bits="1 bit" ;;
15402                         *)      bits="$selectminbits bits" ;;
15403                         esac
15404                         echo "Your select() operates on $bits at a time." >&4
15405                 else
15406                         rp='What is the minimum number of bits your select() operates on?'
15407                         case "$byteorder" in
15408                         1234|12345678)  dflt=32 ;;
15409                         *)              dflt=1  ;;
15410                         esac
15411                         . ./myread
15412                         val=$ans
15413                         selectminbits="$val"
15414                 fi
15415                 $rm -f try.* try
15416                 ;;
15417         *)      : no select, so pick a harmless default
15418                 selectminbits='32'
15419                 ;;
15420         esac
15421         ;;
15422 esac
15423
15424 : Trace out the files included by signal.h, then look for SIGxxx names.
15425 : Remove SIGARRAYSIZE used by HPUX.
15426 : Remove SIGSTKSIZE used by Linux.
15427 : Remove SIGSTKSZ used by Posix.
15428 : Remove SIGTYP void lines used by OS2.
15429 : Some cpps, like os390, dont give the file name anywhere
15430 if [ "X$fieldn" = X ]; then
15431         : Just make some guesses.  We check them later.
15432         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15433 else
15434         xxx=`echo '#include <signal.h>' |
15435         $cppstdin $cppminus $cppflags 2>/dev/null |
15436         $grep '^[       ]*#.*include' | 
15437         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15438 fi
15439 : Check this list of files to be sure we have parsed the cpp output ok.
15440 : This will also avoid potentially non-existent files, such 
15441 : as ../foo/bar.h
15442 xxxfiles=''
15443 for xx in $xxx /dev/null ; do
15444         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15445 done
15446 : If we have found no files, at least try signal.h
15447 case "$xxxfiles" in
15448 '')     xxxfiles=`./findhdr signal.h` ;;
15449 esac
15450 xxx=`awk '
15451 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15452         print substr($2, 4, 20)
15453 }
15454 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15455         print substr($3, 4, 20)
15456 }' $xxxfiles`
15457 : Append some common names just in case the awk scan failed.
15458 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15459 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15460 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15461 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15462 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15463
15464 : generate a few handy files for later
15465 $cat > signal.c <<'EOCP'
15466 #include <sys/types.h>
15467 #include <signal.h>
15468 #include <stdio.h>
15469 int main() {
15470
15471 /* Strange style to avoid deeply-nested #if/#else/#endif */
15472 #ifndef NSIG
15473 #  ifdef _NSIG
15474 #    define NSIG (_NSIG)
15475 #  endif
15476 #endif
15477
15478 #ifndef NSIG
15479 #  ifdef SIGMAX
15480 #    define NSIG (SIGMAX+1)
15481 #  endif
15482 #endif
15483
15484 #ifndef NSIG
15485 #  ifdef SIG_MAX
15486 #    define NSIG (SIG_MAX+1)
15487 #  endif
15488 #endif
15489
15490 #ifndef NSIG
15491 #  ifdef MAXSIG
15492 #    define NSIG (MAXSIG+1)
15493 #  endif
15494 #endif
15495
15496 #ifndef NSIG
15497 #  ifdef MAX_SIG
15498 #    define NSIG (MAX_SIG+1)
15499 #  endif
15500 #endif
15501
15502 #ifndef NSIG
15503 #  ifdef SIGARRAYSIZE
15504 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15505 #  endif
15506 #endif
15507
15508 #ifndef NSIG
15509 #  ifdef _sys_nsig
15510 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15511 #  endif
15512 #endif
15513
15514 /* Default to some arbitrary number that's big enough to get most
15515    of the common signals.
15516 */
15517 #ifndef NSIG
15518 #    define NSIG 50
15519 #endif
15520
15521 printf("NSIG %d\n", NSIG);
15522
15523 #ifndef JUST_NSIG
15524
15525 EOCP
15526
15527 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15528 {
15529         printf "#ifdef SIG"; printf $1; printf "\n"
15530         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15531         printf $1; printf ");\n"
15532         printf "#endif\n"
15533 }
15534 END {
15535         printf "#endif /* JUST_NSIG */\n";
15536         printf "exit(0);\n}\n";
15537 }
15538 ' >>signal.c
15539 $cat >signal.awk <<'EOP'
15540 BEGIN { ndups = 0 }
15541 $1 ~ /^NSIG$/ { nsig = $2 }
15542 ($1 !~ /^NSIG$/) && (NF == 2) {
15543     if ($2 > maxsig) { maxsig = $2 }
15544     if (sig_name[$2]) {
15545         dup_name[ndups] = $1
15546         dup_num[ndups] = $2
15547         ndups++ 
15548     }
15549     else {
15550         sig_name[$2] = $1
15551         sig_num[$2] = $2
15552     }
15553 }
15554 END { 
15555     if (nsig == 0) {
15556         nsig = maxsig + 1
15557     }
15558     printf("NSIG %d\n", nsig);
15559     for (n = 1; n < nsig; n++) {
15560         if (sig_name[n]) {
15561             printf("%s %d\n", sig_name[n], sig_num[n])
15562         }
15563         else {
15564             printf("NUM%d %d\n", n, n) 
15565         }
15566     }
15567     for (n = 0; n < ndups; n++) {
15568         printf("%s %d\n", dup_name[n], dup_num[n])
15569     }
15570 }
15571 EOP
15572 $cat >signal_cmd <<EOS
15573 $startsh
15574 if $test -s signal.lst; then
15575     echo "Using your existing signal.lst file"
15576         exit 0
15577 fi
15578 xxx="$xxx"
15579 EOS
15580 $cat >>signal_cmd <<'EOS'
15581
15582 set signal
15583 if eval $compile_ok; then
15584         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15585 else
15586         echo "(I can't seem be able to compile the whole test program)" >&4
15587         echo "(I'll try it in little pieces.)" >&4
15588         set signal -DJUST_NSIG
15589         if eval $compile_ok; then
15590                 $run ./signal$_exe > signal.nsg
15591                 $cat signal.nsg
15592         else
15593                 echo "I can't seem to figure out how many signals you have." >&4
15594                 echo "Guessing 50." >&4
15595                 echo 'NSIG 50' > signal.nsg
15596         fi
15597         : Now look at all the signal names, one at a time.
15598         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15599                 $cat > signal.c <<EOCP
15600 #include <sys/types.h>
15601 #include <signal.h>
15602 #include <stdio.h>
15603 int main() {
15604 printf("$xx %d\n", SIG${xx});
15605 return 0;
15606 }
15607 EOCP
15608                 set signal
15609                 if eval $compile; then
15610                         echo "SIG${xx} found."
15611                         $run ./signal$_exe  >> signal.ls1
15612                 else
15613                         echo "SIG${xx} NOT found."
15614                 fi
15615         done
15616         if $test -s signal.ls1; then
15617                 $cat signal.nsg signal.ls1 |
15618                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15619         fi
15620
15621 fi
15622 if $test -s signal.lst; then
15623         :
15624 else
15625         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15626         echo 'kill -l' >signal
15627         set X `csh -f <signal`
15628         $rm -f signal
15629         shift
15630         case $# in
15631         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15632         esac
15633         echo $@ | $tr ' ' $trnl | \
15634             $awk '{ printf "%s %d\n", $1, ++s; }
15635                   END { printf "NSIG %d\n", ++s }' >signal.lst
15636 fi
15637 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15638 EOS
15639 chmod a+x signal_cmd
15640 $eunicefix signal_cmd
15641
15642 : generate list of signal names
15643 echo " "
15644 case "$sig_name_init" in
15645 '') doinit=yes ;;
15646 *)  case "$sig_num_init" in
15647     ''|*,*) doinit=yes ;;
15648     esac ;;
15649 esac
15650 case "$doinit" in
15651 yes)
15652         echo "Generating a list of signal names and numbers..." >&4
15653         . ./signal_cmd
15654         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15655         sig_name=`$awk 'BEGIN { printf "ZERO " }
15656                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15657         sig_num=`$awk  'BEGIN { printf "0 " }
15658                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15659         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15660                              !/^NSIG/   { printf "\"%s\", ", $1 }
15661                              END        { printf "0\n" }' signal.lst`
15662         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15663                              !/^NSIG/   { printf "%d, ", $2}
15664                              END        { printf "0\n"}' signal.lst`
15665         ;;
15666 esac
15667 echo "The following $sig_count signals are available:"
15668 echo " "
15669 echo $sig_name | $awk \
15670 'BEGIN { linelen = 0 }
15671 {
15672         for (i = 1; i <= NF; i++) {
15673                 name = "SIG" $i " "
15674                 linelen = linelen + length(name)
15675                 if (linelen > 70) {
15676                         printf "\n"
15677                         linelen = length(name)
15678                 }
15679                 printf "%s", name
15680         }
15681         printf "\n"
15682 }'
15683 sig_size=`echo $sig_name | awk '{print NF}'`
15684 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15685
15686 echo " "
15687 case "$sizetype" in
15688 *_t) zzz="$sizetype"    ;;
15689 *)   zzz="filesize"     ;;
15690 esac
15691 echo "Checking the size of $zzz..." >&4 
15692 cat > try.c <<EOCP
15693 #include <sys/types.h>
15694 #include <stdio.h>
15695 int main() {
15696     printf("%d\n", (int)sizeof($sizetype));
15697     exit(0);
15698 }
15699 EOCP
15700 set try
15701 if eval $compile_ok; then
15702         yyy=`$run ./try`
15703         case "$yyy" in
15704         '')     sizesize=4
15705                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15706                 ;;
15707         *)      sizesize=$yyy
15708                 echo "Your $zzz size is $sizesize bytes."
15709                 ;;
15710         esac
15711 else
15712         sizesize=4
15713         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15714 fi
15715
15716
15717 : check for socklen_t
15718 echo " "
15719 echo "Checking to see if you have socklen_t..." >&4
15720 $cat >try.c <<EOCP
15721 #include <sys/types.h>
15722 #$d_socket HAS_SOCKET
15723 #ifdef HAS_SOCKET
15724 #include <sys/socket.h>
15725 #endif
15726 int main() { socklen_t x = 16; }
15727 EOCP
15728 set try
15729 if eval $compile; then
15730         val="$define"
15731         echo "You have socklen_t."
15732 else
15733         val="$undef"
15734         echo "You do not have socklen_t."
15735         case "$sizetype" in
15736         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15737         esac
15738 fi
15739 $rm -f try try.*
15740 set d_socklen_t
15741 eval $setvar
15742
15743 : see if this is a socks.h system
15744 set socks.h i_socks
15745 eval $inhdr
15746
15747 : check for type of the size argument to socket calls
15748 case "$d_socket" in
15749 "$define")
15750         $cat <<EOM
15751
15752 Checking to see what type is the last argument of accept().
15753 EOM
15754         yyy=''
15755         case "$d_socklen_t" in
15756         "$define") yyy="$yyy socklen_t"
15757         esac
15758         yyy="$yyy $sizetype int long unsigned"
15759         for xxx in $yyy; do
15760                 case "$socksizetype" in
15761                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15762                         case "$usesocks" in
15763                         "$define")
15764                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15765                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15766                                         socksizetype="$xxx"
15767                                 fi
15768                                 ;;
15769                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15770                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15771                                         socksizetype="$xxx"
15772                                 fi
15773                                 ;;
15774                         esac
15775                         ;;
15776                 esac
15777         done
15778 : In case none of those worked, prompt the user.
15779         case "$socksizetype" in
15780         '')     rp='What is the type for socket address structure sizes?'
15781                 dflt='int'
15782                 . ./myread
15783                 socksizetype=$ans
15784                 ;;
15785         esac
15786         ;;
15787 *)      : no sockets, so pick relatively harmless default
15788         socksizetype='int'
15789         ;;
15790 esac
15791
15792 : see what type is used for signed size_t
15793 set ssize_t ssizetype int stdio.h sys/types.h
15794 eval $typedef
15795 dflt="$ssizetype"
15796 $cat > try.c <<EOM
15797 #include <stdio.h>
15798 #include <sys/types.h>
15799 #define Size_t $sizetype
15800 #define SSize_t $dflt
15801 int main()
15802 {
15803         if (sizeof(Size_t) == sizeof(SSize_t))
15804                 printf("$dflt\n");
15805         else if (sizeof(Size_t) == sizeof(int))
15806                 printf("int\n");
15807         else 
15808                 printf("long\n");
15809         exit(0);
15810 }
15811 EOM
15812 echo " "
15813 set try
15814 if eval $compile_ok && $run ./try > /dev/null; then
15815         ssizetype=`$run ./try`
15816         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15817 else
15818         $cat >&4 <<EOM
15819 Help! I can't compile and run the ssize_t test program: please enlighten me!
15820 (This is probably a misconfiguration in your system or libraries, and
15821 you really ought to fix it.  Still, I'll try anyway.)
15822
15823 I need a type that is the same size as $sizetype, but is guaranteed to
15824 be signed.  Common values are ssize_t, int and long.
15825
15826 EOM
15827         rp="What signed type is the same size as $sizetype?"
15828         . ./myread
15829         ssizetype="$ans"
15830 fi
15831 $rm -f try try.*
15832
15833 : see what type of char stdio uses.
15834 echo " "
15835 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15836 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15837         echo "Your stdio uses unsigned chars." >&4
15838         stdchar="unsigned char"
15839 else
15840         echo "Your stdio uses signed chars." >&4
15841         stdchar="char"
15842 fi
15843 $rm -f stdioh
15844
15845
15846
15847 : see if time exists
15848 echo " "
15849 if test "X$d_time" = X -o X"$timetype" = X; then
15850     if set time val -f d_time; eval $csym; $val; then
15851                 echo 'time() found.' >&4
15852                 val="$define"
15853                 rp="What is the type returned by time() on this system?"
15854                 set time_t timetype long stdio.h sys/types.h
15855                 eval $typedef_ask
15856     else
15857                 echo 'time() not found, hope that will do.' >&4
15858                 val="$undef"
15859                 timetype='int';
15860     fi
15861     set d_time
15862     eval $setvar
15863 fi
15864
15865 : see what type uids are declared as in the kernel
15866 echo " "
15867 echo "Looking for the type for user ids returned by getuid()."
15868 set uid_t uidtype xxx stdio.h sys/types.h
15869 eval $typedef
15870 case "$uidtype" in
15871 xxx)
15872         xxx=`./findhdr sys/user.h`
15873         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15874         case $1 in
15875         unsigned) dflt="$1 $2" ;;
15876         *) dflt="$1" ;;
15877         esac
15878         ;;
15879 *) dflt="$uidtype";;
15880 esac
15881 case "$uidtype" in
15882 uid_t)  echo "uid_t found." ;;
15883 *)      rp="What is the type for user ids returned by getuid()?"
15884         . ./myread
15885         uidtype="$ans"
15886         ;;
15887 esac
15888
15889 echo " "
15890 case "$uidtype" in
15891 *_t) zzz="$uidtype"     ;;
15892 *)   zzz="uid"          ;;
15893 esac
15894 echo "Checking the size of $zzz..." >&4 
15895 cat > try.c <<EOCP
15896 #include <sys/types.h>
15897 #include <stdio.h>
15898 int main() {
15899     printf("%d\n", (int)sizeof($uidtype));
15900     exit(0);
15901 }
15902 EOCP
15903 set try
15904 if eval $compile_ok; then
15905         yyy=`$run ./try`
15906         case "$yyy" in
15907         '')     uidsize=4
15908                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15909                 ;;
15910         *)      uidsize=$yyy
15911                 echo "Your $zzz is $uidsize bytes long."
15912                 ;;
15913         esac
15914 else
15915         uidsize=4
15916         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15917 fi
15918
15919 echo " "
15920 case "$uidtype" in
15921 *_t) zzz="$uidtype"     ;;
15922 *)   zzz="uid"          ;;
15923 esac
15924 echo "Checking the sign of $zzz..." >&4
15925 cat > try.c <<EOCP
15926 #include <sys/types.h>
15927 #include <stdio.h>
15928 int main() {
15929         $uidtype foo = -1;
15930         if (foo < 0)
15931                 printf("-1\n");
15932         else
15933                 printf("1\n");
15934 }
15935 EOCP
15936 set try
15937 if eval $compile; then
15938         yyy=`$run ./try`
15939         case "$yyy" in
15940         '')     uidsign=1
15941                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15942                 ;;
15943         *)      uidsign=$yyy
15944                 case "$uidsign" in
15945                  1) echo "Your $zzz is unsigned." ;;
15946                 -1) echo "Your $zzz is signed."   ;;
15947                 esac
15948                 ;;
15949         esac
15950 else
15951         uidsign=1
15952         echo "(I can't compile the test program--guessing unsigned.)" >&4
15953 fi
15954
15955
15956
15957 echo " "
15958 $echo "Checking the format string to be used for uids..." >&4
15959
15960 case "$uidsign" in
15961 -1)     if $test X"$uidsize" = X"$ivsize"; then
15962                 uidformat="$ivdformat"
15963         else
15964                 if $test X"$uidsize" = X"$longsize"; then
15965                         uidformat='"ld"'
15966                 else
15967                         if $test X"$uidsize" = X"$intsize"; then
15968                                 uidformat='"d"'
15969                         else
15970                                 if $test X"$uidsize" = X"$shortsize"; then
15971                                         uidformat='"hd"'
15972                                 fi
15973                         fi
15974                 fi
15975         fi
15976         ;;
15977 *)      if $test X"$uidsize" = X"$uvsize"; then
15978                 uidformat="$uvuformat"
15979         else
15980                 if $test X"$uidsize" = X"$longsize"; then
15981                         uidformat='"lu"'
15982                 else
15983                         if $test X"$uidsize" = X"$intsize"; then
15984                                 uidformat='"u"'
15985                         else
15986                                 if $test X"$uidsize" = X"$shortsize"; then
15987                                         uidformat='"hu"'
15988                                 fi
15989                         fi
15990                 fi
15991         fi
15992         ;;
15993 esac
15994
15995 : determine compiler compiler
15996 case "$yacc" in
15997 '')
15998         dflt=yacc;;
15999 *)
16000         dflt="$yacc";;
16001 esac
16002 echo " "
16003 comp='yacc'
16004 if $test -f "$byacc$_exe"; then
16005         dflt="$byacc"
16006         comp="byacc or $comp"
16007 fi
16008 if $test -f "$bison$_exe"; then
16009         comp="$comp or bison -y"
16010 fi
16011 rp="Which compiler compiler ($comp) shall I use?"
16012 . ./myread
16013 yacc="$ans"
16014 case "$yacc" in
16015 *bis*)
16016         case "$yacc" in
16017         *-y*) ;;
16018         *)
16019                 yacc="$yacc -y"
16020                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16021                 ;;
16022         esac
16023         ;;
16024 esac
16025
16026 : see if this is a fp.h system
16027 set fp.h i_fp
16028 eval $inhdr
16029
16030 : see if this is a fp_class.h system
16031 set fp_class.h i_fp_class
16032 eval $inhdr
16033
16034 : see if this is a ieeefp.h system
16035 case "$i_ieeefp" in
16036 '' ) set ieeefp.h i_ieeefp
16037      eval $inhdr
16038      ;;
16039 esac
16040
16041 : see if this is a libutil.h system
16042 set libutil.h i_libutil
16043 eval $inhdr
16044
16045 : see if locale.h is available
16046 set locale.h i_locale
16047 eval $inhdr
16048
16049 : see if mach cthreads are available
16050 if test "X$usethreads" = "X$define"; then
16051         set mach/cthreads.h i_machcthr
16052         eval $inhdr
16053 else
16054         i_machcthr="$undef"
16055 fi
16056
16057
16058
16059 : see if this is a math.h system
16060 set math.h i_math
16061 eval $inhdr
16062
16063 : see if this is a mntent.h system
16064 set mntent.h i_mntent
16065 eval $inhdr
16066
16067 : see if ndbm.h is available
16068 set ndbm.h t_ndbm
16069 eval $inhdr
16070
16071 case "$t_ndbm" in
16072 $undef)
16073     # Some Linux distributions such as RedHat 7.1 put the
16074     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16075     if $test -f /usr/include/gdbm/ndbm.h; then
16076         echo '<gdbm/ndbm.h> found.'
16077         ccflags="$ccflags -I/usr/include/gdbm"
16078         cppflags="$cppflags -I/usr/include/gdbm"
16079         t_ndbm=$define
16080     fi
16081     ;;
16082 esac
16083
16084 case "$t_ndbm" in
16085 $define)
16086         : see if dbm_open exists
16087         set dbm_open d_dbm_open
16088         eval $inlibc
16089         case "$d_dbm_open" in
16090         $undef)
16091                 t_ndbm="$undef"
16092                 echo "We won't be including <ndbm.h>"
16093                 ;;
16094         esac
16095         ;;
16096 esac
16097 val="$t_ndbm"
16098 set i_ndbm
16099 eval $setvar
16100
16101 : see if net/errno.h is available
16102 val=''
16103 set net/errno.h val
16104 eval $inhdr
16105
16106 : Unfortunately, it causes problems on some systems.  Arrgh.
16107 case "$val" in
16108 $define)
16109         cat > try.c <<'EOM'
16110 #include <stdio.h>
16111 #include <errno.h>
16112 #include <net/errno.h>
16113 int func()
16114 {
16115         return ENOTSOCK;
16116 }
16117 EOM
16118         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16119                 echo "We'll be including <net/errno.h>." >&4
16120         else
16121                 echo "We won't be including <net/errno.h>." >&4
16122                 val="$undef"
16123         fi
16124         $rm -f try.* try
16125         ;;
16126 esac
16127 set i_neterrno
16128 eval $setvar
16129
16130 : see if netinet/tcp.h is available
16131 set netinet/tcp.h i_netinettcp
16132 eval $inhdr
16133
16134 : see if this is a poll.h system
16135 set poll.h i_poll
16136 eval $inhdr
16137
16138 : see if this is a prot.h system
16139 set prot.h i_prot
16140 eval $inhdr
16141
16142 echo " "
16143 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16144 $cat <<'EOSH' > Cppsym.know
16145 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16146 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16147 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16148 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16149 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16150 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16151 bull c cadmus clipper CMU COFF COMPILER_VERSION
16152 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16153 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16154 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16155 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16156 GLIBC GLIBC_MINOR
16157 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16158 H3050R H3050RX hbullx20 hcx host_mips
16159 hp200 hp300 hp700 HP700 hp800 hp9000
16160 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16161 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16162 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16163 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16164 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16165 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16166 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16167 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16168 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16169 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16170 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16171 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16172 MATH_HAS_NO_SIDE_EFFECTS
16173 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16174 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16175 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16176 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16177 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16178 NetBSD news1500 news1700 news1800 news1900 news3700
16179 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16180 ns32016 ns32332 ns32k nsc32000
16181 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16182 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16183 pc532 pdp11 PGC PIC plexus PORTAR posix
16184 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16185 POSIX_C_SOURCE POSIX_SOURCE POWER
16186 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16187 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16188 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16189 sony sony_news sonyrisc sparc sparclite spectrum
16190 stardent stdc STDC_EXT stratos sun sun3 sun386
16191 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16192 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16193 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16194 sysV68 sysV88 Tek4132 Tek4300 titan
16195 TM3200 TM5400 TM5600
16196 tower tower32 tower32_200 tower32_600 tower32_700
16197 tower32_800 tower32_850 tss
16198 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16199 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16200 unix UNIX95 UNIX99 unixpc unos
16201 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16202 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16203 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16204 USGr4 USGr4_2
16205 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16206 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16207 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16208 z8000
16209 EOSH
16210 # Maybe put other stuff here too.
16211 cat <<EOSH >>Cppsym.know
16212 $osname
16213 EOSH
16214 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16215 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16216 $cat Cppsym.know > Cppsym.c
16217 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16218 $rm -f Cppsym.a Cppsym.b Cppsym.c
16219 cat <<EOSH > Cppsym
16220 $startsh
16221 if $test \$# -gt 0; then
16222     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16223     if $test -s Cppsym.got; then
16224         $rm -f Cppsym.got
16225         exit 0
16226     fi
16227     $rm -f Cppsym.got
16228     exit 1
16229 else
16230     $tr " " "$trnl" | ./Cppsym.try
16231     exit 0
16232 fi
16233 EOSH
16234 chmod +x Cppsym
16235 $eunicefix Cppsym
16236 cat <<EOSH > Cppsym.try
16237 $startsh
16238 cat <<'EOCP' > try.c
16239 #include <stdio.h>
16240 int main() {
16241 EOCP
16242 $awk \\
16243 EOSH
16244 cat <<'EOSH' >> Cppsym.try
16245 'length($1) > 0 {
16246     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16247     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16248     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16249     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16250 }'       >> try.c
16251 echo 'return 0;}' >> try.c
16252 EOSH
16253 cat <<EOSH >> Cppsym.try
16254 ccflags="$ccflags"
16255 case "$osname-$gccversion" in
16256 irix-) ccflags="\$ccflags -woff 1178" ;;
16257 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16258 esac
16259 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16260 EOSH
16261 chmod +x Cppsym.try
16262 $eunicefix Cppsym.try
16263 ./Cppsym < Cppsym.know > Cppsym.true
16264 : now check the C compiler for additional symbols
16265 postprocess_cc_v=''
16266 case "$osname" in
16267 aix) postprocess_cc_v="|$tr , ' '" ;;
16268 esac
16269 $cat >ccsym <<EOS
16270 $startsh
16271 $cat >tmp.c <<EOF
16272 extern int foo;
16273 EOF
16274 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16275 do
16276         case "\$i" in
16277         -D*) echo "\$i" | $sed 's/^-D//';;
16278         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16279         esac
16280 done
16281 $rm -f try.c
16282 EOS
16283 postprocess_cc_v=''
16284 chmod +x ccsym
16285 $eunicefix ccsym
16286 ./ccsym > ccsym1.raw
16287 if $test -s ccsym1.raw; then
16288        $sort ccsym1.raw | $uniq >ccsym.raw
16289 else
16290        mv ccsym1.raw ccsym.raw
16291 fi
16292
16293 $awk '/\=/ { print $0; next }
16294         { print $0"=1" }' ccsym.raw >ccsym.list
16295 $awk '/\=/ { print $0; next }
16296         { print $0"=1" }' Cppsym.true >ccsym.true
16297 $comm -13 ccsym.true ccsym.list >ccsym.own
16298 $comm -12 ccsym.true ccsym.list >ccsym.com
16299 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16300 also=''
16301 if $test -z ccsym.raw; then
16302         echo "Your C compiler doesn't seem to define any symbols!" >&4
16303         echo " "
16304         echo "However, your C preprocessor defines the following symbols:"
16305         $cat Cppsym.true
16306         ccsymbols=''
16307         cppsymbols=`$cat Cppsym.true`
16308         cppsymbols=`echo $cppsymbols`
16309         cppccsymbols="$cppsymbols"
16310 else
16311         if $test -s ccsym.com; then
16312                 echo "Your C compiler and pre-processor define these symbols:"
16313                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16314                 also='also '
16315                 symbols='ones'
16316                 cppccsymbols=`$cat ccsym.com`
16317                 cppccsymbols=`echo $cppccsymbols`
16318                 $test "$silent" || sleep 1
16319         fi
16320         if $test -s ccsym.cpp; then
16321                 $test "$also" && echo " "
16322                 echo "Your C pre-processor ${also}defines the following symbols:"
16323                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16324                 also='further '
16325                 cppsymbols=`$cat ccsym.cpp`
16326                 cppsymbols=`echo $cppsymbols`
16327                 $test "$silent" || sleep 1
16328         fi
16329         if $test -s ccsym.own; then
16330                 $test "$also" && echo " "
16331                 echo "Your C compiler ${also}defines the following cpp symbols:"
16332                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16333                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16334                 ccsymbols=`$cat ccsym.own`
16335                 ccsymbols=`echo $ccsymbols`
16336                 $test "$silent" || sleep 1
16337         fi
16338 fi
16339
16340 : see if this is a termio system
16341 val="$undef"
16342 val2="$undef"
16343 val3="$undef"
16344 if $test `./findhdr termios.h`; then
16345         set tcsetattr i_termios
16346         eval $inlibc
16347         val3="$i_termios"
16348 fi
16349 echo " "
16350 case "$val3" in
16351 "$define") echo "You have POSIX termios.h... good!" >&4;;
16352 *) if ./Cppsym pyr; then
16353                 case "`/bin/universe`" in
16354                 ucb) if $test `./findhdr sgtty.h`; then
16355                                 val2="$define"
16356                                 echo "<sgtty.h> found." >&4
16357                         else
16358                                 echo "System is pyramid with BSD universe."
16359                                 echo "<sgtty.h> not found--you could have problems." >&4
16360                         fi;;
16361                 *) if $test `./findhdr termio.h`; then
16362                                 val="$define"
16363                                 echo "<termio.h> found." >&4
16364                         else
16365                                 echo "System is pyramid with USG universe."
16366                                 echo "<termio.h> not found--you could have problems." >&4
16367                         fi;;
16368                 esac
16369         elif ./usg; then
16370                 if $test `./findhdr termio.h`; then
16371                         echo "<termio.h> found." >&4
16372                         val="$define"
16373                 elif $test `./findhdr sgtty.h`; then
16374                         echo "<sgtty.h> found." >&4
16375                         val2="$define"
16376                 else
16377 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16378                 fi
16379         else
16380                 if $test `./findhdr sgtty.h`; then
16381                         echo "<sgtty.h> found." >&4
16382                         val2="$define"
16383                 elif $test `./findhdr termio.h`; then
16384                         echo "<termio.h> found." >&4
16385                         val="$define"
16386                 else
16387 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16388                 fi
16389         fi;;
16390 esac
16391 set i_termio; eval $setvar
16392 val=$val2; set i_sgtty; eval $setvar
16393 val=$val3; set i_termios; eval $setvar
16394
16395 : see if this is a shadow.h system
16396 set shadow.h i_shadow
16397 eval $inhdr
16398
16399 : see if stddef is available
16400 set stddef.h i_stddef
16401 eval $inhdr
16402
16403 : see if this is a sunmath.h system
16404 set sunmath.h i_sunmath
16405 eval $inhdr
16406
16407 : see if sys/access.h is available
16408 set sys/access.h i_sysaccess
16409 eval $inhdr
16410
16411 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16412 set sys/filio.h i_sysfilio
16413 eval $inhdr
16414 echo " "
16415 if $test `./findhdr sys/ioctl.h`; then
16416         val="$define"
16417         echo '<sys/ioctl.h> found.' >&4
16418 else
16419         val="$undef"
16420         if $test $i_sysfilio = "$define"; then
16421             echo '<sys/ioctl.h> NOT found.' >&4
16422         else
16423                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16424                 $test $i_termio = "$define" && xxx="termio.h"
16425                 $test $i_termios = "$define" && xxx="termios.h"
16426 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16427         fi
16428 fi
16429 set i_sysioctl
16430 eval $setvar
16431
16432 : see if socket ioctl defs are in sys/sockio.h
16433 echo " "
16434 xxx=`./findhdr sys/sockio.h`
16435 if $test "$xxx"; then
16436         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16437                 val="$define"
16438                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16439         else
16440                 val="$undef"
16441                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16442         fi
16443 else
16444         val="$undef"
16445         $cat <<EOM
16446 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16447 EOM
16448 fi
16449 set i_syssockio
16450 eval $setvar
16451
16452
16453 : see if this is a syslog.h system
16454 set syslog.h i_syslog
16455 eval $inhdr
16456
16457
16458 : see if this is a sys/mode.h system
16459 set sys/mode.h i_sysmode
16460 eval $inhdr
16461
16462 : see if sys/resource.h has to be included
16463 set sys/resource.h i_sysresrc
16464 eval $inhdr
16465
16466 : see if sys/security.h is available
16467 set sys/security.h i_syssecrt
16468 eval $inhdr
16469
16470 : see if this is a sys/statvfs.h system
16471 set sys/statvfs.h i_sysstatvfs
16472 eval $inhdr
16473
16474 : see if this is a sys/un.h system
16475 set sys/un.h i_sysun
16476 eval $inhdr
16477
16478
16479 : see if this is a sys/utsname.h system
16480 set sys/utsname.h i_sysutsname
16481 eval $inhdr
16482
16483 : see if this is a syswait system
16484 set sys/wait.h i_syswait
16485 eval $inhdr
16486
16487 : see if this is a ustat.h system
16488 set ustat.h i_ustat
16489 eval $inhdr
16490
16491 : see if this is an utime system
16492 set utime.h i_utime
16493 eval $inhdr
16494
16495 : see if this is a values.h system
16496 set values.h i_values
16497 eval $inhdr
16498
16499 : see if this is a vfork system
16500 case "$d_vfork" in
16501 "$define")
16502         set vfork.h i_vfork
16503         eval $inhdr
16504         ;;
16505 *)
16506         i_vfork="$undef"
16507         ;;
16508 esac
16509
16510 : see if gdbm.h is available
16511 set gdbm.h t_gdbm
16512 eval $inhdr
16513 case "$t_gdbm" in
16514 $define)
16515         : see if gdbm_open exists
16516         set gdbm_open d_gdbm_open
16517         eval $inlibc
16518         case "$d_gdbm_open" in
16519         $undef)
16520                 t_gdbm="$undef"
16521                 echo "We won't be including <gdbm.h>"
16522                 ;;
16523         esac
16524         ;;
16525 esac
16526 val="$t_gdbm"
16527 set i_gdbm
16528 eval $setvar
16529
16530 echo " "
16531 echo "Looking for extensions..." >&4
16532 : If we are using the old config.sh, known_extensions may contain
16533 : old or inaccurate or duplicate values.
16534 known_extensions=''
16535 nonxs_extensions=''
16536 : We do not use find because it might not be available.
16537 : We do not just use MANIFEST because the user may have dropped
16538 : some additional extensions into the source tree and expect them
16539 : to be built.
16540
16541 : Function to recursively find available extensions, ignoring DynaLoader
16542 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16543 find_extensions='
16544     for xxx in *; do
16545        case "$xxx" in
16546            DynaLoader|dynaload) ;;
16547            *)
16548            if $test -f $xxx/$xxx.xs; then
16549                known_extensions="$known_extensions $1$xxx";
16550            elif $test -f $xxx/Makefile.PL; then
16551                nonxs_extensions="$nonxs_extensions $1$xxx";
16552            else
16553                if $test -d $xxx -a $# -lt 10; then
16554                    set $1$xxx/ $*;
16555                    cd "$xxx";
16556                    eval $find_extensions;
16557                    cd ..;
16558                    shift;
16559                fi;
16560            fi
16561            ;;
16562        esac;
16563     done'
16564 tdir=`pwd`
16565 cd "$rsrc/ext"
16566 set X
16567 shift
16568 eval $find_extensions
16569 # Special case:  Add in threads/shared since it is not picked up by the
16570 # recursive find above (and adding in general recursive finding breaks
16571 # SDBM_File/sdbm).  A.D.  10/25/2001.
16572 known_extensions="$known_extensions threads/shared"
16573 set X $nonxs_extensions
16574 shift
16575 nonxs_extensions="$*"
16576 set X $known_extensions
16577 shift
16578 known_extensions="$*"
16579 cd "$tdir"
16580
16581 : Now see which are supported on this system.
16582 avail_ext=''
16583 for xxx in $known_extensions ; do
16584         case "$xxx" in
16585         DB_File|db_file)
16586                 case "$i_db" in
16587                 $define) avail_ext="$avail_ext $xxx" ;;
16588                 esac
16589                 ;;
16590         GDBM_File|gdbm_fil)
16591                 case "$i_gdbm" in 
16592                 $define) avail_ext="$avail_ext $xxx" ;;
16593                 esac
16594                 ;;
16595         I18N/Langinfo|i18n_lan)
16596                 case "$i_langinfo$d_nl_langinfo" in 
16597                 $define$define) avail_ext="$avail_ext $xxx" ;;
16598                 esac
16599                 ;;
16600         NDBM_File|ndbm_fil)
16601                 case "$i_ndbm" in
16602                 $define)
16603                     case "$osname-$use64bitint" in
16604                     cygwin-*|hpux-define)
16605                         case "$libs" in
16606                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16607                         esac
16608                         ;;
16609                     *) avail_ext="$avail_ext $xxx" ;;
16610                     esac
16611                     ;;
16612                 esac
16613                 ;;
16614         ODBM_File|odbm_fil) 
16615                 case "${i_dbm}${i_rpcsvcdbm}" in
16616                 *"${define}"*)
16617                     case "$osname-$use64bitint" in
16618                     cygwin-*|hpux-define)
16619                         case "$libs" in
16620                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16621                         esac
16622                         ;;
16623                     *) avail_ext="$avail_ext $xxx" ;;
16624                     esac
16625                     ;;
16626                 esac
16627                 ;;
16628         POSIX|posix)
16629                 case "$useposix" in
16630                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16631                 esac
16632                 ;;
16633         Opcode|opcode)
16634                 case "$useopcode" in
16635                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16636                 esac
16637                 ;;
16638         Socket|socket)
16639                 case "$d_socket" in 
16640                 true|$define|y)
16641                     case "$osname" in
16642                     beos) ;; # not unless BONE
16643                     *) avail_ext="$avail_ext $xxx" ;;
16644                     esac
16645                     ;;
16646                 esac
16647                 ;;
16648         Sys/Syslog|sys/syslog)
16649                 : XXX syslog requires socket
16650                 case "$d_socket" in 
16651                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16652                 esac
16653                 ;;
16654         Thread|thread)
16655                 case "$usethreads" in
16656                 true|$define|y)
16657                         case "$useithreads" in
16658                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16659                         esac
16660                 esac
16661                 ;;
16662         threads|threads/shared)
16663                 case "$usethreads" in
16664                 true|$define|y)
16665                         case "$useithreads" in
16666                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16667                         esac
16668                 esac
16669                 ;;
16670         IPC/SysV|ipc/sysv)
16671                 : XXX Do we need a useipcsysv variable here
16672                 case "${d_msg}${d_sem}${d_shm}" in 
16673                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16674                 esac
16675                 ;;
16676         *)      avail_ext="$avail_ext $xxx"
16677                 ;;
16678         esac
16679 done
16680
16681 set X $avail_ext
16682 shift
16683 avail_ext="$*"
16684
16685 : Now see which nonxs extensions are supported on this system.
16686 : For now assume all are.
16687 nonxs_ext=''
16688 for xxx in $nonxs_extensions ; do
16689         case "$xxx" in
16690         *)      nonxs_ext="$nonxs_ext $xxx"
16691                 ;;
16692         esac
16693 done
16694
16695 set X $nonxs_ext
16696 shift
16697 nonxs_ext="$*"
16698
16699 case $usedl in
16700 $define)
16701         $cat <<EOM
16702 A number of extensions are supplied with $package.  You may choose to
16703 compile these extensions for dynamic loading (the default), compile
16704 them into the $package executable (static loading), or not include
16705 them at all.  Answer "none" to include no extensions.
16706 Note that DynaLoader is always built and need not be mentioned here.
16707
16708 EOM
16709         case "$dynamic_ext" in
16710         '') dflt="$avail_ext" ;;
16711         *)      dflt="$dynamic_ext"
16712                 # Perhaps we are reusing an old out-of-date config.sh.
16713                 case "$hint" in
16714                 previous)
16715                         if test X"$dynamic_ext" != X"$avail_ext"; then
16716                                 $cat <<EOM
16717 NOTICE:  Your previous config.sh list may be incorrect. 
16718 The extensions now available to you are 
16719         ${avail_ext}
16720 but the default list from your previous config.sh is
16721         ${dynamic_ext} 
16722
16723 EOM
16724                         fi
16725                         ;;
16726                 esac
16727                 ;;
16728         esac
16729         case "$dflt" in
16730         '')     dflt=none;;
16731         esac
16732         rp="What extensions do you wish to load dynamically?"
16733         . ./myread
16734         case "$ans" in
16735         none) dynamic_ext=' ' ;;
16736         *) dynamic_ext="$ans" ;;
16737         esac
16738
16739         case "$static_ext" in
16740         '')
16741                 : Exclude those already listed in dynamic linking
16742                 dflt=''
16743                 for xxx in $avail_ext; do
16744                         case " $dynamic_ext " in
16745                         *" $xxx "*) ;;
16746                         *) dflt="$dflt $xxx" ;;
16747                         esac
16748                 done
16749                 set X $dflt
16750                 shift
16751                 dflt="$*"
16752                 ;;
16753         *)  dflt="$static_ext" 
16754                 ;;
16755         esac
16756
16757         case "$dflt" in
16758         '')     dflt=none;;
16759         esac
16760         rp="What extensions do you wish to load statically?"
16761         . ./myread
16762         case "$ans" in
16763         none) static_ext=' ' ;;
16764         *) static_ext="$ans" ;;
16765         esac
16766         ;;
16767 *)
16768         $cat <<EOM
16769 A number of extensions are supplied with $package.  Answer "none" 
16770 to include no extensions. 
16771 Note that DynaLoader is always built and need not be mentioned here.
16772
16773 EOM
16774         case "$static_ext" in
16775         '') dflt="$avail_ext" ;;
16776         *)      dflt="$static_ext"
16777                 # Perhaps we are reusing an old out-of-date config.sh.
16778                 case "$hint" in
16779                 previous)
16780                         if test X"$static_ext" != X"$avail_ext"; then
16781                                 $cat <<EOM
16782 NOTICE:  Your previous config.sh list may be incorrect. 
16783 The extensions now available to you are 
16784         ${avail_ext}
16785 but the default list from your previous config.sh is
16786         ${static_ext} 
16787
16788 EOM
16789                         fi
16790                         ;;
16791                 esac
16792                 ;;
16793         esac
16794         : Exclude those that are not xs extensions
16795         case "$dflt" in
16796         '')     dflt=none;;
16797         esac
16798         rp="What extensions do you wish to include?"
16799         . ./myread
16800         case "$ans" in
16801         none) static_ext=' ' ;;
16802         *) static_ext="$ans" ;;
16803         esac
16804         ;;
16805 esac
16806
16807 set X $dynamic_ext $static_ext $nonxs_ext
16808 shift
16809 extensions="$*"
16810
16811 : Remove libraries needed only for extensions
16812 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16813 : The exception is SunOS 4.x, which needs them.
16814 case "${osname}X${osvers}" in
16815 sunos*X4*)
16816     perllibs="$libs"
16817     ;;
16818 *) case "$usedl" in
16819     $define|true|[yY]*)
16820             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16821             shift
16822             perllibs="$*"
16823             ;;
16824     *)  perllibs="$libs"
16825             ;;
16826     esac
16827     ;;
16828 esac
16829
16830 : Remove build directory name from cppstdin so it can be used from
16831 : either the present location or the final installed location.
16832 echo " "
16833 : Get out of the UU directory to get correct path name.
16834 cd ..
16835 case "$cppstdin" in
16836 `pwd`/cppstdin)
16837         echo "Stripping down cppstdin path name"
16838         cppstdin=cppstdin
16839         ;;
16840 esac
16841 cd UU
16842
16843 : end of configuration questions
16844 echo " "
16845 echo "End of configuration questions."
16846 echo " "
16847
16848 : back to where it started
16849 if test -d ../UU; then
16850         cd ..
16851 fi
16852
16853 : configuration may be patched via a 'config.arch' file
16854 if $test -f config.arch; then
16855         echo "I see a config.arch file, loading it."
16856         . ./config.arch
16857 fi
16858
16859 : configuration may be patched via a 'config.over' file
16860 if $test -f config.over; then
16861         echo " "
16862         dflt=y
16863         rp='I see a config.over file.  Do you wish to load it?'
16864         . UU/myread
16865         case "$ans" in
16866         n*) echo "OK, I'll ignore it.";;
16867         *)      . ./config.over
16868                 echo "Configuration override changes have been loaded."
16869                 ;;
16870         esac
16871 fi
16872
16873 : in case they want portability, strip down executable paths
16874 case "$d_portable" in
16875 "$define")
16876         echo " "
16877         echo "Stripping down executable paths..." >&4
16878         for file in $loclist $trylist; do
16879                 eval temp=\$$file
16880                 eval $file=`basename $temp`
16881         done
16882         ;;
16883 esac
16884
16885 : create config.sh file
16886 echo " "
16887 echo "Creating config.sh..." >&4
16888 $spitshell <<EOT >config.sh
16889 $startsh
16890 #
16891 # This file was produced by running the Configure script. It holds all the
16892 # definitions figured out by Configure. Should you modify one of these values,
16893 # do not forget to propagate your changes by running "Configure -der". You may
16894 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16895 #
16896
16897 # Package name      : $package
16898 # Source directory  : $src
16899 # Configuration time: $cf_time
16900 # Configured by     : $cf_by
16901 # Target system     : $myuname
16902
16903 Author='$Author'
16904 Date='$Date'
16905 Header='$Header'
16906 Id='$Id'
16907 Locker='$Locker'
16908 Log='$Log'
16909 Mcc='$Mcc'
16910 RCSfile='$RCSfile'
16911 Revision='$Revision'
16912 Source='$Source'
16913 State='$State'
16914 _a='$_a'
16915 _exe='$_exe'
16916 _o='$_o'
16917 afs='$afs'
16918 afsroot='$afsroot'
16919 alignbytes='$alignbytes'
16920 ansi2knr='$ansi2knr'
16921 aphostname='$aphostname'
16922 api_revision='$api_revision'
16923 api_subversion='$api_subversion'
16924 api_version='$api_version'
16925 api_versionstring='$api_versionstring'
16926 ar='$ar'
16927 archlib='$archlib'
16928 archlibexp='$archlibexp'
16929 archname64='$archname64'
16930 archname='$archname'
16931 archobjs='$archobjs'
16932 awk='$awk'
16933 baserev='$baserev'
16934 bash='$bash'
16935 bin='$bin'
16936 bincompat5005='$bincompat5005'
16937 binexp='$binexp'
16938 bison='$bison'
16939 byacc='$byacc'
16940 byteorder='$byteorder'
16941 c='$c'
16942 castflags='$castflags'
16943 cat='$cat'
16944 cc='$cc'
16945 cccdlflags='$cccdlflags'
16946 ccdlflags='$ccdlflags'
16947 ccflags='$ccflags'
16948 ccflags_uselargefiles='$ccflags_uselargefiles'
16949 ccname='$ccname'
16950 ccsymbols='$ccsymbols'
16951 ccversion='$ccversion'
16952 cf_by='$cf_by'
16953 cf_email='$cf_email'
16954 cf_time='$cf_time'
16955 charsize='$charsize'
16956 chgrp='$chgrp'
16957 chmod='$chmod'
16958 chown='$chown'
16959 clocktype='$clocktype'
16960 comm='$comm'
16961 compress='$compress'
16962 contains='$contains'
16963 cp='$cp'
16964 cpio='$cpio'
16965 cpp='$cpp'
16966 cpp_stuff='$cpp_stuff'
16967 cppccsymbols='$cppccsymbols'
16968 cppflags='$cppflags'
16969 cpplast='$cpplast'
16970 cppminus='$cppminus'
16971 cpprun='$cpprun'
16972 cppstdin='$cppstdin'
16973 cppsymbols='$cppsymbols'
16974 cryptlib='$cryptlib'
16975 csh='$csh'
16976 d_Gconvert='$d_Gconvert'
16977 d_PRIEUldbl='$d_PRIEUldbl'
16978 d_PRIFUldbl='$d_PRIFUldbl'
16979 d_PRIGUldbl='$d_PRIGUldbl'
16980 d_PRIXU64='$d_PRIXU64'
16981 d_PRId64='$d_PRId64'
16982 d_PRIeldbl='$d_PRIeldbl'
16983 d_PRIfldbl='$d_PRIfldbl'
16984 d_PRIgldbl='$d_PRIgldbl'
16985 d_PRIi64='$d_PRIi64'
16986 d_PRIo64='$d_PRIo64'
16987 d_PRIu64='$d_PRIu64'
16988 d_PRIx64='$d_PRIx64'
16989 d_SCNfldbl='$d_SCNfldbl'
16990 d__fwalk='$d__fwalk'
16991 d_access='$d_access'
16992 d_accessx='$d_accessx'
16993 d_alarm='$d_alarm'
16994 d_archlib='$d_archlib'
16995 d_atolf='$d_atolf'
16996 d_atoll='$d_atoll'
16997 d_attribut='$d_attribut'
16998 d_bcmp='$d_bcmp'
16999 d_bcopy='$d_bcopy'
17000 d_bincompat5005='$d_bincompat5005'
17001 d_bsd='$d_bsd'
17002 d_bsdgetpgrp='$d_bsdgetpgrp'
17003 d_bsdsetpgrp='$d_bsdsetpgrp'
17004 d_bzero='$d_bzero'
17005 d_casti32='$d_casti32'
17006 d_castneg='$d_castneg'
17007 d_charvspr='$d_charvspr'
17008 d_chown='$d_chown'
17009 d_chroot='$d_chroot'
17010 d_chsize='$d_chsize'
17011 d_class='$d_class'
17012 d_closedir='$d_closedir'
17013 d_cmsghdr_s='$d_cmsghdr_s'
17014 d_const='$d_const'
17015 d_crypt='$d_crypt'
17016 d_csh='$d_csh'
17017 d_cuserid='$d_cuserid'
17018 d_dbl_dig='$d_dbl_dig'
17019 d_dbminitproto='$d_dbminitproto'
17020 d_difftime='$d_difftime'
17021 d_dirfd='$d_dirfd'
17022 d_dirnamlen='$d_dirnamlen'
17023 d_dlerror='$d_dlerror'
17024 d_dlopen='$d_dlopen'
17025 d_dlsymun='$d_dlsymun'
17026 d_dosuid='$d_dosuid'
17027 d_drand48proto='$d_drand48proto'
17028 d_dup2='$d_dup2'
17029 d_eaccess='$d_eaccess'
17030 d_endgrent='$d_endgrent'
17031 d_endhent='$d_endhent'
17032 d_endnent='$d_endnent'
17033 d_endpent='$d_endpent'
17034 d_endpwent='$d_endpwent'
17035 d_endsent='$d_endsent'
17036 d_eofnblk='$d_eofnblk'
17037 d_eunice='$d_eunice'
17038 d_fchdir='$d_fchdir'
17039 d_fchmod='$d_fchmod'
17040 d_fchown='$d_fchown'
17041 d_fcntl='$d_fcntl'
17042 d_fcntl_can_lock='$d_fcntl_can_lock'
17043 d_fd_macros='$d_fd_macros'
17044 d_fd_set='$d_fd_set'
17045 d_fds_bits='$d_fds_bits'
17046 d_fgetpos='$d_fgetpos'
17047 d_finite='$d_finite'
17048 d_finitel='$d_finitel'
17049 d_flexfnam='$d_flexfnam'
17050 d_flock='$d_flock'
17051 d_flockproto='$d_flockproto'
17052 d_fork='$d_fork'
17053 d_fp_class='$d_fp_class'
17054 d_fpathconf='$d_fpathconf'
17055 d_fpclass='$d_fpclass'
17056 d_fpclassify='$d_fpclassify'
17057 d_fpclassl='$d_fpclassl'
17058 d_fpos64_t='$d_fpos64_t'
17059 d_frexpl='$d_frexpl'
17060 d_fs_data_s='$d_fs_data_s'
17061 d_fseeko='$d_fseeko'
17062 d_fsetpos='$d_fsetpos'
17063 d_fstatfs='$d_fstatfs'
17064 d_fstatvfs='$d_fstatvfs'
17065 d_fsync='$d_fsync'
17066 d_ftello='$d_ftello'
17067 d_ftime='$d_ftime'
17068 d_getcwd='$d_getcwd'
17069 d_getespwnam='$d_getespwnam'
17070 d_getfsstat='$d_getfsstat'
17071 d_getgrent='$d_getgrent'
17072 d_getgrps='$d_getgrps'
17073 d_gethbyaddr='$d_gethbyaddr'
17074 d_gethbyname='$d_gethbyname'
17075 d_gethent='$d_gethent'
17076 d_gethname='$d_gethname'
17077 d_gethostprotos='$d_gethostprotos'
17078 d_getitimer='$d_getitimer'
17079 d_getlogin='$d_getlogin'
17080 d_getmnt='$d_getmnt'
17081 d_getmntent='$d_getmntent'
17082 d_getnbyaddr='$d_getnbyaddr'
17083 d_getnbyname='$d_getnbyname'
17084 d_getnent='$d_getnent'
17085 d_getnetprotos='$d_getnetprotos'
17086 d_getpagsz='$d_getpagsz'
17087 d_getpbyname='$d_getpbyname'
17088 d_getpbynumber='$d_getpbynumber'
17089 d_getpent='$d_getpent'
17090 d_getpgid='$d_getpgid'
17091 d_getpgrp2='$d_getpgrp2'
17092 d_getpgrp='$d_getpgrp'
17093 d_getppid='$d_getppid'
17094 d_getprior='$d_getprior'
17095 d_getprotoprotos='$d_getprotoprotos'
17096 d_getprpwnam='$d_getprpwnam'
17097 d_getpwent='$d_getpwent'
17098 d_getsbyname='$d_getsbyname'
17099 d_getsbyport='$d_getsbyport'
17100 d_getsent='$d_getsent'
17101 d_getservprotos='$d_getservprotos'
17102 d_getspnam='$d_getspnam'
17103 d_gettimeod='$d_gettimeod'
17104 d_gnulibc='$d_gnulibc'
17105 d_grpasswd='$d_grpasswd'
17106 d_hasmntopt='$d_hasmntopt'
17107 d_htonl='$d_htonl'
17108 d_index='$d_index'
17109 d_inetaton='$d_inetaton'
17110 d_int64_t='$d_int64_t'
17111 d_isascii='$d_isascii'
17112 d_isfinite='$d_isfinite'
17113 d_isinf='$d_isinf'
17114 d_isnan='$d_isnan'
17115 d_isnanl='$d_isnanl'
17116 d_killpg='$d_killpg'
17117 d_lchown='$d_lchown'
17118 d_ldbl_dig='$d_ldbl_dig'
17119 d_link='$d_link'
17120 d_locconv='$d_locconv'
17121 d_lockf='$d_lockf'
17122 d_longdbl='$d_longdbl'
17123 d_longlong='$d_longlong'
17124 d_lseekproto='$d_lseekproto'
17125 d_lstat='$d_lstat'
17126 d_madvise='$d_madvise'
17127 d_mblen='$d_mblen'
17128 d_mbstowcs='$d_mbstowcs'
17129 d_mbtowc='$d_mbtowc'
17130 d_memchr='$d_memchr'
17131 d_memcmp='$d_memcmp'
17132 d_memcpy='$d_memcpy'
17133 d_memmove='$d_memmove'
17134 d_memset='$d_memset'
17135 d_mkdir='$d_mkdir'
17136 d_mkdtemp='$d_mkdtemp'
17137 d_mkfifo='$d_mkfifo'
17138 d_mkstemp='$d_mkstemp'
17139 d_mkstemps='$d_mkstemps'
17140 d_mktime='$d_mktime'
17141 d_mmap='$d_mmap'
17142 d_modfl='$d_modfl'
17143 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17144 d_mprotect='$d_mprotect'
17145 d_msg='$d_msg'
17146 d_msg_ctrunc='$d_msg_ctrunc'
17147 d_msg_dontroute='$d_msg_dontroute'
17148 d_msg_oob='$d_msg_oob'
17149 d_msg_peek='$d_msg_peek'
17150 d_msg_proxy='$d_msg_proxy'
17151 d_msgctl='$d_msgctl'
17152 d_msgget='$d_msgget'
17153 d_msghdr_s='$d_msghdr_s'
17154 d_msgrcv='$d_msgrcv'
17155 d_msgsnd='$d_msgsnd'
17156 d_msync='$d_msync'
17157 d_munmap='$d_munmap'
17158 d_mymalloc='$d_mymalloc'
17159 d_nice='$d_nice'
17160 d_nl_langinfo='$d_nl_langinfo'
17161 d_nv_preserves_uv='$d_nv_preserves_uv'
17162 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17163 d_off64_t='$d_off64_t'
17164 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17165 d_oldpthreads='$d_oldpthreads'
17166 d_oldsock='$d_oldsock'
17167 d_open3='$d_open3'
17168 d_pathconf='$d_pathconf'
17169 d_pause='$d_pause'
17170 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17171 d_phostname='$d_phostname'
17172 d_pipe='$d_pipe'
17173 d_poll='$d_poll'
17174 d_portable='$d_portable'
17175 d_procselfexe='$d_procselfexe'
17176 d_pthread_atfork='$d_pthread_atfork'
17177 d_pthread_yield='$d_pthread_yield'
17178 d_pwage='$d_pwage'
17179 d_pwchange='$d_pwchange'
17180 d_pwclass='$d_pwclass'
17181 d_pwcomment='$d_pwcomment'
17182 d_pwexpire='$d_pwexpire'
17183 d_pwgecos='$d_pwgecos'
17184 d_pwpasswd='$d_pwpasswd'
17185 d_pwquota='$d_pwquota'
17186 d_qgcvt='$d_qgcvt'
17187 d_quad='$d_quad'
17188 d_readdir='$d_readdir'
17189 d_readlink='$d_readlink'
17190 d_readv='$d_readv'
17191 d_recvmsg='$d_recvmsg'
17192 d_rename='$d_rename'
17193 d_rewinddir='$d_rewinddir'
17194 d_rmdir='$d_rmdir'
17195 d_safebcpy='$d_safebcpy'
17196 d_safemcpy='$d_safemcpy'
17197 d_sanemcmp='$d_sanemcmp'
17198 d_sbrkproto='$d_sbrkproto'
17199 d_sched_yield='$d_sched_yield'
17200 d_scm_rights='$d_scm_rights'
17201 d_seekdir='$d_seekdir'
17202 d_select='$d_select'
17203 d_sem='$d_sem'
17204 d_semctl='$d_semctl'
17205 d_semctl_semid_ds='$d_semctl_semid_ds'
17206 d_semctl_semun='$d_semctl_semun'
17207 d_semget='$d_semget'
17208 d_semop='$d_semop'
17209 d_sendmsg='$d_sendmsg'
17210 d_setegid='$d_setegid'
17211 d_seteuid='$d_seteuid'
17212 d_setgrent='$d_setgrent'
17213 d_setgrps='$d_setgrps'
17214 d_sethent='$d_sethent'
17215 d_setitimer='$d_setitimer'
17216 d_setlinebuf='$d_setlinebuf'
17217 d_setlocale='$d_setlocale'
17218 d_setnent='$d_setnent'
17219 d_setpent='$d_setpent'
17220 d_setpgid='$d_setpgid'
17221 d_setpgrp2='$d_setpgrp2'
17222 d_setpgrp='$d_setpgrp'
17223 d_setprior='$d_setprior'
17224 d_setproctitle='$d_setproctitle'
17225 d_setpwent='$d_setpwent'
17226 d_setregid='$d_setregid'
17227 d_setresgid='$d_setresgid'
17228 d_setresuid='$d_setresuid'
17229 d_setreuid='$d_setreuid'
17230 d_setrgid='$d_setrgid'
17231 d_setruid='$d_setruid'
17232 d_setsent='$d_setsent'
17233 d_setsid='$d_setsid'
17234 d_setvbuf='$d_setvbuf'
17235 d_sfio='$d_sfio'
17236 d_shm='$d_shm'
17237 d_shmat='$d_shmat'
17238 d_shmatprototype='$d_shmatprototype'
17239 d_shmctl='$d_shmctl'
17240 d_shmdt='$d_shmdt'
17241 d_shmget='$d_shmget'
17242 d_sigaction='$d_sigaction'
17243 d_sigprocmask='$d_sigprocmask'
17244 d_sigsetjmp='$d_sigsetjmp'
17245 d_sockatmark='$d_sockatmark'
17246 d_sockatmarkproto='$d_sockatmarkproto'
17247 d_socket='$d_socket'
17248 d_socklen_t='$d_socklen_t'
17249 d_sockpair='$d_sockpair'
17250 d_socks5_init='$d_socks5_init'
17251 d_sqrtl='$d_sqrtl'
17252 d_sresgproto='$d_sresgproto'
17253 d_sresuproto='$d_sresuproto'
17254 d_statblks='$d_statblks'
17255 d_statfs_f_flags='$d_statfs_f_flags'
17256 d_statfs_s='$d_statfs_s'
17257 d_statvfs='$d_statvfs'
17258 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17259 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17260 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17261 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17262 d_stdio_stream_array='$d_stdio_stream_array'
17263 d_stdiobase='$d_stdiobase'
17264 d_stdstdio='$d_stdstdio'
17265 d_strchr='$d_strchr'
17266 d_strcoll='$d_strcoll'
17267 d_strctcpy='$d_strctcpy'
17268 d_strerrm='$d_strerrm'
17269 d_strerror='$d_strerror'
17270 d_strftime='$d_strftime'
17271 d_strtod='$d_strtod'
17272 d_strtol='$d_strtol'
17273 d_strtold='$d_strtold'
17274 d_strtoll='$d_strtoll'
17275 d_strtoq='$d_strtoq'
17276 d_strtoul='$d_strtoul'
17277 d_strtoull='$d_strtoull'
17278 d_strtouq='$d_strtouq'
17279 d_strxfrm='$d_strxfrm'
17280 d_suidsafe='$d_suidsafe'
17281 d_symlink='$d_symlink'
17282 d_syscall='$d_syscall'
17283 d_syscallproto='$d_syscallproto'
17284 d_sysconf='$d_sysconf'
17285 d_sysernlst='$d_sysernlst'
17286 d_syserrlst='$d_syserrlst'
17287 d_system='$d_system'
17288 d_tcgetpgrp='$d_tcgetpgrp'
17289 d_tcsetpgrp='$d_tcsetpgrp'
17290 d_telldir='$d_telldir'
17291 d_telldirproto='$d_telldirproto'
17292 d_time='$d_time'
17293 d_times='$d_times'
17294 d_truncate='$d_truncate'
17295 d_tzname='$d_tzname'
17296 d_u32align='$d_u32align'
17297 d_ualarm='$d_ualarm'
17298 d_umask='$d_umask'
17299 d_uname='$d_uname'
17300 d_union_semun='$d_union_semun'
17301 d_unordered='$d_unordered'
17302 d_usleep='$d_usleep'
17303 d_usleepproto='$d_usleepproto'
17304 d_ustat='$d_ustat'
17305 d_vendorarch='$d_vendorarch'
17306 d_vendorbin='$d_vendorbin'
17307 d_vendorlib='$d_vendorlib'
17308 d_vfork='$d_vfork'
17309 d_void_closedir='$d_void_closedir'
17310 d_voidsig='$d_voidsig'
17311 d_voidtty='$d_voidtty'
17312 d_volatile='$d_volatile'
17313 d_vprintf='$d_vprintf'
17314 d_wait4='$d_wait4'
17315 d_waitpid='$d_waitpid'
17316 d_wcstombs='$d_wcstombs'
17317 d_wctomb='$d_wctomb'
17318 d_writev='$d_writev'
17319 d_xenix='$d_xenix'
17320 date='$date'
17321 db_hashtype='$db_hashtype'
17322 db_prefixtype='$db_prefixtype'
17323 db_version_major='$db_version_major'
17324 db_version_minor='$db_version_minor'
17325 db_version_patch='$db_version_patch'
17326 defvoidused='$defvoidused'
17327 direntrytype='$direntrytype'
17328 dlext='$dlext'
17329 dlsrc='$dlsrc'
17330 doublesize='$doublesize'
17331 drand01='$drand01'
17332 dynamic_ext='$dynamic_ext'
17333 eagain='$eagain'
17334 ebcdic='$ebcdic'
17335 echo='$echo'
17336 egrep='$egrep'
17337 emacs='$emacs'
17338 eunicefix='$eunicefix'
17339 exe_ext='$exe_ext'
17340 expr='$expr'
17341 extensions='$extensions'
17342 extras='$extras'
17343 fflushNULL='$fflushNULL'
17344 fflushall='$fflushall'
17345 find='$find'
17346 firstmakefile='$firstmakefile'
17347 flex='$flex'
17348 fpossize='$fpossize'
17349 fpostype='$fpostype'
17350 freetype='$freetype'
17351 from='$from'
17352 full_ar='$full_ar'
17353 full_csh='$full_csh'
17354 full_sed='$full_sed'
17355 gccosandvers='$gccosandvers'
17356 gccversion='$gccversion'
17357 gidformat='$gidformat'
17358 gidsign='$gidsign'
17359 gidsize='$gidsize'
17360 gidtype='$gidtype'
17361 glibpth='$glibpth'
17362 gmake='$gmake'
17363 grep='$grep'
17364 groupcat='$groupcat'
17365 groupstype='$groupstype'
17366 gzip='$gzip'
17367 h_fcntl='$h_fcntl'
17368 h_sysfile='$h_sysfile'
17369 hint='$hint'
17370 hostcat='$hostcat'
17371 i16size='$i16size'
17372 i16type='$i16type'
17373 i32size='$i32size'
17374 i32type='$i32type'
17375 i64size='$i64size'
17376 i64type='$i64type'
17377 i8size='$i8size'
17378 i8type='$i8type'
17379 i_arpainet='$i_arpainet'
17380 i_bsdioctl='$i_bsdioctl'
17381 i_db='$i_db'
17382 i_dbm='$i_dbm'
17383 i_dirent='$i_dirent'
17384 i_dld='$i_dld'
17385 i_dlfcn='$i_dlfcn'
17386 i_fcntl='$i_fcntl'
17387 i_float='$i_float'
17388 i_fp='$i_fp'
17389 i_fp_class='$i_fp_class'
17390 i_gdbm='$i_gdbm'
17391 i_grp='$i_grp'
17392 i_ieeefp='$i_ieeefp'
17393 i_inttypes='$i_inttypes'
17394 i_langinfo='$i_langinfo'
17395 i_libutil='$i_libutil'
17396 i_limits='$i_limits'
17397 i_locale='$i_locale'
17398 i_machcthr='$i_machcthr'
17399 i_malloc='$i_malloc'
17400 i_math='$i_math'
17401 i_memory='$i_memory'
17402 i_mntent='$i_mntent'
17403 i_ndbm='$i_ndbm'
17404 i_netdb='$i_netdb'
17405 i_neterrno='$i_neterrno'
17406 i_netinettcp='$i_netinettcp'
17407 i_niin='$i_niin'
17408 i_poll='$i_poll'
17409 i_prot='$i_prot'
17410 i_pthread='$i_pthread'
17411 i_pwd='$i_pwd'
17412 i_rpcsvcdbm='$i_rpcsvcdbm'
17413 i_sfio='$i_sfio'
17414 i_sgtty='$i_sgtty'
17415 i_shadow='$i_shadow'
17416 i_socks='$i_socks'
17417 i_stdarg='$i_stdarg'
17418 i_stddef='$i_stddef'
17419 i_stdlib='$i_stdlib'
17420 i_string='$i_string'
17421 i_sunmath='$i_sunmath'
17422 i_sysaccess='$i_sysaccess'
17423 i_sysdir='$i_sysdir'
17424 i_sysfile='$i_sysfile'
17425 i_sysfilio='$i_sysfilio'
17426 i_sysin='$i_sysin'
17427 i_sysioctl='$i_sysioctl'
17428 i_syslog='$i_syslog'
17429 i_sysmman='$i_sysmman'
17430 i_sysmode='$i_sysmode'
17431 i_sysmount='$i_sysmount'
17432 i_sysndir='$i_sysndir'
17433 i_sysparam='$i_sysparam'
17434 i_sysresrc='$i_sysresrc'
17435 i_syssecrt='$i_syssecrt'
17436 i_sysselct='$i_sysselct'
17437 i_syssockio='$i_syssockio'
17438 i_sysstat='$i_sysstat'
17439 i_sysstatfs='$i_sysstatfs'
17440 i_sysstatvfs='$i_sysstatvfs'
17441 i_systime='$i_systime'
17442 i_systimek='$i_systimek'
17443 i_systimes='$i_systimes'
17444 i_systypes='$i_systypes'
17445 i_sysuio='$i_sysuio'
17446 i_sysun='$i_sysun'
17447 i_sysutsname='$i_sysutsname'
17448 i_sysvfs='$i_sysvfs'
17449 i_syswait='$i_syswait'
17450 i_termio='$i_termio'
17451 i_termios='$i_termios'
17452 i_time='$i_time'
17453 i_unistd='$i_unistd'
17454 i_ustat='$i_ustat'
17455 i_utime='$i_utime'
17456 i_values='$i_values'
17457 i_varargs='$i_varargs'
17458 i_varhdr='$i_varhdr'
17459 i_vfork='$i_vfork'
17460 ignore_versioned_solibs='$ignore_versioned_solibs'
17461 inc_version_list='$inc_version_list'
17462 inc_version_list_init='$inc_version_list_init'
17463 incpath='$incpath'
17464 inews='$inews'
17465 installarchlib='$installarchlib'
17466 installbin='$installbin'
17467 installman1dir='$installman1dir'
17468 installman3dir='$installman3dir'
17469 installprefix='$installprefix'
17470 installprefixexp='$installprefixexp'
17471 installprivlib='$installprivlib'
17472 installscript='$installscript'
17473 installsitearch='$installsitearch'
17474 installsitebin='$installsitebin'
17475 installsitelib='$installsitelib'
17476 installstyle='$installstyle'
17477 installusrbinperl='$installusrbinperl'
17478 installvendorarch='$installvendorarch'
17479 installvendorbin='$installvendorbin'
17480 installvendorlib='$installvendorlib'
17481 intsize='$intsize'
17482 issymlink='$issymlink'
17483 ivdformat='$ivdformat'
17484 ivsize='$ivsize'
17485 ivtype='$ivtype'
17486 known_extensions='$known_extensions'
17487 ksh='$ksh'
17488 ld='$ld'
17489 lddlflags='$lddlflags'
17490 ldflags='$ldflags'
17491 ldflags_uselargefiles='$ldflags_uselargefiles'
17492 ldlibpthname='$ldlibpthname'
17493 less='$less'
17494 lib_ext='$lib_ext'
17495 libc='$libc'
17496 libperl='$libperl'
17497 libpth='$libpth'
17498 libs='$libs'
17499 libsdirs='$libsdirs'
17500 libsfiles='$libsfiles'
17501 libsfound='$libsfound'
17502 libspath='$libspath'
17503 libswanted='$libswanted'
17504 libswanted_uselargefiles='$libswanted_uselargefiles'
17505 line='$line'
17506 lint='$lint'
17507 lkflags='$lkflags'
17508 ln='$ln'
17509 lns='$lns'
17510 locincpth='$locincpth'
17511 loclibpth='$loclibpth'
17512 longdblsize='$longdblsize'
17513 longlongsize='$longlongsize'
17514 longsize='$longsize'
17515 lp='$lp'
17516 lpr='$lpr'
17517 ls='$ls'
17518 lseeksize='$lseeksize'
17519 lseektype='$lseektype'
17520 mail='$mail'
17521 mailx='$mailx'
17522 make='$make'
17523 make_set_make='$make_set_make'
17524 mallocobj='$mallocobj'
17525 mallocsrc='$mallocsrc'
17526 malloctype='$malloctype'
17527 man1dir='$man1dir'
17528 man1direxp='$man1direxp'
17529 man1ext='$man1ext'
17530 man3dir='$man3dir'
17531 man3direxp='$man3direxp'
17532 man3ext='$man3ext'
17533 mips_type='$mips_type'
17534 mkdir='$mkdir'
17535 mmaptype='$mmaptype'
17536 modetype='$modetype'
17537 more='$more'
17538 multiarch='$multiarch'
17539 mv='$mv'
17540 myarchname='$myarchname'
17541 mydomain='$mydomain'
17542 myhostname='$myhostname'
17543 myuname='$myuname'
17544 n='$n'
17545 need_va_copy='$need_va_copy'
17546 netdb_hlen_type='$netdb_hlen_type'
17547 netdb_host_type='$netdb_host_type'
17548 netdb_name_type='$netdb_name_type'
17549 netdb_net_type='$netdb_net_type'
17550 nm='$nm'
17551 nm_opt='$nm_opt'
17552 nm_so_opt='$nm_so_opt'
17553 nonxs_ext='$nonxs_ext'
17554 nroff='$nroff'
17555 nvEUformat='$nvEUformat'
17556 nvFUformat='$nvFUformat'
17557 nvGUformat='$nvGUformat'
17558 nveformat='$nveformat'
17559 nvfformat='$nvfformat'
17560 nvgformat='$nvgformat'
17561 nvsize='$nvsize'
17562 nvtype='$nvtype'
17563 o_nonblock='$o_nonblock'
17564 obj_ext='$obj_ext'
17565 old_pthread_create_joinable='$old_pthread_create_joinable'
17566 optimize='$optimize'
17567 orderlib='$orderlib'
17568 osname='$osname'
17569 osvers='$osvers'
17570 otherlibdirs='$otherlibdirs'
17571 package='$package'
17572 pager='$pager'
17573 passcat='$passcat'
17574 patchlevel='$patchlevel'
17575 path_sep='$path_sep'
17576 perl5='$perl5'
17577 perl='$perl'
17578 perl_patchlevel='$perl_patchlevel'
17579 perladmin='$perladmin'
17580 perllibs='$perllibs'
17581 perlpath='$perlpath'
17582 pg='$pg'
17583 phostname='$phostname'
17584 pidtype='$pidtype'
17585 plibpth='$plibpth'
17586 pm_apiversion='$pm_apiversion'
17587 pmake='$pmake'
17588 pr='$pr'
17589 prefix='$prefix'
17590 prefixexp='$prefixexp'
17591 privlib='$privlib'
17592 privlibexp='$privlibexp'
17593 procselfexe='$procselfexe'
17594 prototype='$prototype'
17595 ptrsize='$ptrsize'
17596 quadkind='$quadkind'
17597 quadtype='$quadtype'
17598 randbits='$randbits'
17599 randfunc='$randfunc'
17600 randseedtype='$randseedtype'
17601 ranlib='$ranlib'
17602 rd_nodata='$rd_nodata'
17603 revision='$revision'
17604 rm='$rm'
17605 rmail='$rmail'
17606 run='$run'
17607 runnm='$runnm'
17608 sPRIEUldbl='$sPRIEUldbl'
17609 sPRIFUldbl='$sPRIFUldbl'
17610 sPRIGUldbl='$sPRIGUldbl'
17611 sPRIXU64='$sPRIXU64'
17612 sPRId64='$sPRId64'
17613 sPRIeldbl='$sPRIeldbl'
17614 sPRIfldbl='$sPRIfldbl'
17615 sPRIgldbl='$sPRIgldbl'
17616 sPRIi64='$sPRIi64'
17617 sPRIo64='$sPRIo64'
17618 sPRIu64='$sPRIu64'
17619 sPRIx64='$sPRIx64'
17620 sSCNfldbl='$sSCNfldbl'
17621 sched_yield='$sched_yield'
17622 scriptdir='$scriptdir'
17623 scriptdirexp='$scriptdirexp'
17624 sed='$sed'
17625 seedfunc='$seedfunc'
17626 selectminbits='$selectminbits'
17627 selecttype='$selecttype'
17628 sendmail='$sendmail'
17629 sh='$sh'
17630 shar='$shar'
17631 sharpbang='$sharpbang'
17632 shmattype='$shmattype'
17633 shortsize='$shortsize'
17634 shrpenv='$shrpenv'
17635 shsharp='$shsharp'
17636 sig_count='$sig_count'
17637 sig_name='$sig_name'
17638 sig_name_init='$sig_name_init'
17639 sig_num='$sig_num'
17640 sig_num_init='$sig_num_init'
17641 sig_size='$sig_size'
17642 signal_t='$signal_t'
17643 sitearch='$sitearch'
17644 sitearchexp='$sitearchexp'
17645 sitebin='$sitebin'
17646 sitebinexp='$sitebinexp'
17647 sitelib='$sitelib'
17648 sitelib_stem='$sitelib_stem'
17649 sitelibexp='$sitelibexp'
17650 siteprefix='$siteprefix'
17651 siteprefixexp='$siteprefixexp'
17652 sizesize='$sizesize'
17653 sizetype='$sizetype'
17654 sleep='$sleep'
17655 smail='$smail'
17656 so='$so'
17657 sockethdr='$sockethdr'
17658 socketlib='$socketlib'
17659 socksizetype='$socksizetype'
17660 sort='$sort'
17661 spackage='$spackage'
17662 spitshell='$spitshell'
17663 src='$src'
17664 ssizetype='$ssizetype'
17665 startperl='$startperl'
17666 startsh='$startsh'
17667 static_ext='$static_ext'
17668 stdchar='$stdchar'
17669 stdio_base='$stdio_base'
17670 stdio_bufsiz='$stdio_bufsiz'
17671 stdio_cnt='$stdio_cnt'
17672 stdio_filbuf='$stdio_filbuf'
17673 stdio_ptr='$stdio_ptr'
17674 stdio_stream_array='$stdio_stream_array'
17675 strings='$strings'
17676 submit='$submit'
17677 subversion='$subversion'
17678 sysman='$sysman'
17679 tail='$tail'
17680 tar='$tar'
17681 targetarch='$targetarch'
17682 tbl='$tbl'
17683 tee='$tee'
17684 test='$test'
17685 timeincl='$timeincl'
17686 timetype='$timetype'
17687 to='$to'
17688 touch='$touch'
17689 tr='$tr'
17690 trnl='$trnl'
17691 troff='$troff'
17692 u16size='$u16size'
17693 u16type='$u16type'
17694 u32size='$u32size'
17695 u32type='$u32type'
17696 u64size='$u64size'
17697 u64type='$u64type'
17698 u8size='$u8size'
17699 u8type='$u8type'
17700 uidformat='$uidformat'
17701 uidsign='$uidsign'
17702 uidsize='$uidsize'
17703 uidtype='$uidtype'
17704 uname='$uname'
17705 uniq='$uniq'
17706 uquadtype='$uquadtype'
17707 use5005threads='$use5005threads'
17708 use64bitall='$use64bitall'
17709 use64bitint='$use64bitint'
17710 usecrosscompile='$usecrosscompile'
17711 usedl='$usedl'
17712 useithreads='$useithreads'
17713 uselargefiles='$uselargefiles'
17714 uselongdouble='$uselongdouble'
17715 usemorebits='$usemorebits'
17716 usemultiplicity='$usemultiplicity'
17717 usemymalloc='$usemymalloc'
17718 usenm='$usenm'
17719 useopcode='$useopcode'
17720 useperlio='$useperlio'
17721 useposix='$useposix'
17722 usereentrant='$usereentrant'
17723 usesfio='$usesfio'
17724 useshrplib='$useshrplib'
17725 usesocks='$usesocks'
17726 usethreads='$usethreads'
17727 usevendorprefix='$usevendorprefix'
17728 usevfork='$usevfork'
17729 usrinc='$usrinc'
17730 uuname='$uuname'
17731 uvXUformat='$uvXUformat'
17732 uvoformat='$uvoformat'
17733 uvsize='$uvsize'
17734 uvtype='$uvtype'
17735 uvuformat='$uvuformat'
17736 uvxformat='$uvxformat'
17737 vendorarch='$vendorarch'
17738 vendorarchexp='$vendorarchexp'
17739 vendorbin='$vendorbin'
17740 vendorbinexp='$vendorbinexp'
17741 vendorlib='$vendorlib'
17742 vendorlib_stem='$vendorlib_stem'
17743 vendorlibexp='$vendorlibexp'
17744 vendorprefix='$vendorprefix'
17745 vendorprefixexp='$vendorprefixexp'
17746 version='$version'
17747 version_patchlevel_string='$version_patchlevel_string'
17748 versiononly='$versiononly'
17749 vi='$vi'
17750 voidflags='$voidflags'
17751 xlibpth='$xlibpth'
17752 xs_apiversion='$xs_apiversion'
17753 yacc='$yacc'
17754 yaccflags='$yaccflags'
17755 zcat='$zcat'
17756 zip='$zip'
17757 EOT
17758
17759 : Add in command line options if available
17760 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17761
17762 : add special variables
17763 $test -f $src/patchlevel.h && \
17764 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17765 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17766 echo "PERL_CONFIG_SH=true" >>config.sh
17767
17768 : propagate old symbols
17769 if $test -f UU/config.sh; then
17770         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17771         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17772         $sort | $uniq -u >UU/oldsyms
17773         set X `cat UU/oldsyms`
17774         shift
17775         case $# in
17776         0) ;;
17777         *)
17778                 cat <<EOM
17779 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17780 EOM
17781                 echo "# Variables propagated from previous config.sh file." >>config.sh
17782                 for sym in `cat UU/oldsyms`; do
17783                         echo "    Propagating $hint variable "'$'"$sym..."
17784                         eval 'tmp="$'"${sym}"'"'
17785                         echo "$tmp" | \
17786                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17787                 done
17788                 ;;
17789         esac
17790 fi
17791
17792 : Finish up by extracting the .SH files
17793 case "$alldone" in
17794 exit)
17795         $rm -rf UU
17796         echo "Extraction done."
17797         exit 0
17798         ;;
17799 cont)
17800         ;;
17801 '')
17802         dflt=''
17803         nostick=true
17804         $cat <<EOM
17805
17806 If you'd like to make any changes to the config.sh file before I begin
17807 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17808
17809 EOM
17810         rp="Press return or use a shell escape to edit config.sh:"
17811         . UU/myread
17812         nostick=''
17813         case "$ans" in
17814         '') ;;
17815         *) : in case they cannot read
17816                 sh 1>&4 -c "$ans";;
17817         esac
17818         ;;
17819 esac
17820
17821 : if this fails, just run all the .SH files by hand
17822 . ./config.sh
17823
17824 echo " "
17825 exec 1>&4
17826 pwd=`pwd`
17827 . ./UU/extract
17828 cd "$pwd"
17829
17830 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17831         dflt=y
17832         case "$silent" in
17833         true) ;;
17834         *)
17835                 $cat <<EOM
17836
17837 Now you need to generate make dependencies by running "$make depend".
17838 You might prefer to run it in background: "$make depend > makedepend.out &"
17839 It can take a while, so you might not want to run it right now.
17840
17841 EOM
17842                 ;;
17843         esac
17844         rp="Run $make depend now?"
17845         . UU/myread
17846         case "$ans" in
17847         y*)
17848                 $make depend && echo "Now you must run '$make'."
17849                 ;;
17850         *)
17851                 echo "You must run '$make depend' then '$make'."
17852                 ;;
17853         esac
17854 elif test -f [Mm]akefile; then
17855         echo " "
17856         echo "Now you must run a $make."
17857 else
17858         echo "Configure done."
17859 fi
17860
17861 if $test -f Policy.sh; then
17862     $cat <<EOM
17863
17864 If you compile $package on a different machine or from a different object
17865 directory, copy the Policy.sh file from this object directory to the
17866 new one before you run Configure -- this will help you with most of
17867 the policy defaults.
17868
17869 EOM
17870 fi
17871 if $test -f config.msg; then
17872     echo "Hmm.  I also noted the following information while running:"
17873     echo " "
17874     $cat config.msg >&4
17875     $rm -f config.msg
17876 fi
17877 $rm -f kit*isdone ark*isdone
17878 $rm -rf UU
17879
17880 : End of Configure
17881