EBCDIC: another "can't happen".
[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 Mon Feb 11 17:45:48 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 : Set executable suffix now -- needed before hints available
1040 : maybe Stratus VOS
1041 if test -f "/system/gnu_library/bin/ar.pm"; then
1042     _exe=".pm"
1043 fi
1044 : maybe dos djgpp
1045 if test -n "$DJGPP"; then
1046     _exe=".exe"
1047 fi
1048
1049 i_whoami=''
1050 ccname=''
1051 ccversion=''
1052 perllibs=''
1053 : set useposix=false in your hint file to disable the POSIX extension.
1054 useposix=true
1055 : set useopcode=false in your hint file to disable the Opcode extension.
1056 useopcode=true
1057 : Trailing extension.  Override this in a hint file, if needed.
1058 : Extra object files, if any, needed on this platform.
1059 archobjs=''
1060 archname=''
1061 : Possible local include directories to search.
1062 : Set locincpth to "" in a hint file to defeat local include searches.
1063 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1064 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1065 :
1066 : no include file wanted by default
1067 inclwanted=''
1068
1069 groupstype=''
1070 libnames=''
1071 : change the next line if compiling for Xenix/286 on Xenix/386
1072 xlibpth='/usr/lib/386 /lib/386'
1073 : Possible local library directories to search.
1074 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1075 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1076
1077 : general looking path for locating libraries
1078 glibpth="/lib /usr/lib $xlibpth"
1079 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1080 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1081 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1082
1083 : Private path used by Configure to find libraries.  Its value
1084 : is prepended to libpth. This variable takes care of special
1085 : machines, like the mips.  Usually, it should be empty.
1086 plibpth=''
1087
1088 : default library list
1089 libswanted=''
1090 : some systems want to use only the non-versioned libso:s
1091 ignore_versioned_solibs=''
1092 archname64=''
1093 ccflags_uselargefiles=''
1094 ldflags_uselargefiles=''
1095 libswanted_uselargefiles=''
1096 : set usemultiplicity on the Configure command line to enable multiplicity.
1097 : set usesocks on the Configure command line to enable socks.
1098 : set usethreads on the Configure command line to enable threads.
1099 usereentrant='undef'
1100 : full support for void wanted by default
1101 defvoidused=15
1102
1103 : List of libraries we want.
1104 : If anyone needs -lnet, put it in a hint file.
1105 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1106 libswanted="$libswanted dld ld sun m c cposix posix"
1107 libswanted="$libswanted ndir dir crypt sec"
1108 libswanted="$libswanted ucb bsd BSD PW x util"
1109 : We probably want to search /usr/shlib before most other libraries.
1110 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1111 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1112 glibpth="/usr/shlib $glibpth"
1113 : Do not use vfork unless overridden by a hint file.
1114 usevfork=false
1115
1116 : Find the basic shell for Bourne shell scripts
1117 case "$sh" in
1118 '')
1119         case "$SYSTYPE" in
1120         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1121         *) xxx='/bin/sh';;
1122         esac
1123         if test -f "$xxx"; then
1124                 sh="$xxx"
1125         else
1126                 : Build up a list and do a single loop so we can 'break' out.
1127                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1128                 for xxx in sh bash ksh pdksh ash; do
1129                         for p in $pth; do
1130                                 try="$try ${p}/${xxx}"
1131                         done
1132                 done
1133                 for xxx in $try; do
1134                         if test -f "$xxx"; then
1135                                 sh="$xxx";
1136                                 break
1137                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1138                                 sh="$xxx";
1139                                 break
1140                         elif test -f "$xxx.exe"; then
1141                                 sh="$xxx";
1142                                 break
1143                         fi
1144                 done
1145         fi
1146         ;;
1147 esac
1148
1149 case "$sh" in
1150 '')     cat >&2 <<EOM
1151 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1152
1153 Usually it's in /bin/sh.  How did you even get this far?
1154 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1155 we'll try to straighten this all out.
1156 EOM
1157         exit 1
1158         ;;
1159 esac
1160
1161 : see if sh knows # comments
1162 if `$sh -c '#' >/dev/null 2>&1`; then
1163         shsharp=true
1164         spitshell=cat
1165         xcat=/bin/cat
1166         test -f $xcat$_exe || xcat=/usr/bin/cat
1167         if test ! -f $xcat$_exe; then
1168                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1169                         if test -f $p/cat$_exe; then
1170                                 xcat=$p/cat
1171                                 break
1172                         fi
1173                 done
1174                 if test ! -f $xcat$_exe; then
1175                         echo "Can't find cat anywhere!"
1176                         exit 1
1177                 fi
1178         fi
1179         echo "#!$xcat" >sharp
1180         $eunicefix sharp
1181         chmod +x sharp
1182         ./sharp > today
1183         if test -s today; then
1184                 sharpbang='#!'
1185         else
1186                 echo "#! $xcat" > sharp
1187                 $eunicefix sharp
1188                 chmod +x sharp
1189                 ./sharp > today
1190                 if test -s today; then
1191                         sharpbang='#! '
1192                 else
1193                         sharpbang=': use '
1194                 fi
1195         fi
1196 else
1197         echo " "
1198         echo "Your $sh doesn't grok # comments--I will strip them later on."
1199         shsharp=false
1200         cd ..
1201         echo "exec grep -v '^[  ]*#'" >spitshell
1202         chmod +x spitshell
1203         $eunicefix spitshell
1204         spitshell=`pwd`/spitshell
1205         cd UU
1206         echo "I presume that if # doesn't work, #! won't work either!"
1207         sharpbang=': use '
1208 fi
1209 rm -f sharp today
1210
1211 : figure out how to guarantee sh startup
1212 case "$startsh" in
1213 '') startsh=${sharpbang}${sh} ;;
1214 *)
1215 esac
1216 cat >sharp <<EOSS
1217 $startsh
1218 set abc
1219 test "$?abc" != 1
1220 EOSS
1221
1222 chmod +x sharp
1223 $eunicefix sharp
1224 if ./sharp; then
1225         : echo "Yup, it does."
1226 else
1227         echo "Hmm... '$startsh' does not guarantee sh startup..."
1228         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1229 fi
1230 rm -f sharp
1231
1232
1233 : Save command line options in file UU/cmdline.opt for later use in
1234 : generating config.sh.
1235 cat > cmdline.opt <<EOSH
1236 # Configure command line arguments.
1237 config_arg0='$0'
1238 config_args='$*'
1239 config_argc=$#
1240 EOSH
1241 argn=1
1242 args_exp=''
1243 args_sep=''
1244 for arg in "$@"; do
1245         cat >>cmdline.opt <<EOSH
1246 config_arg$argn='$arg'
1247 EOSH
1248         # Extreme backslashitis: replace each ' by '"'"'
1249         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1250 $arg
1251 EOC
1252         arg_exp=`cat cmdl.opt`
1253         args_exp="$args_exp$args_sep'$arg_exp'"
1254         argn=`expr $argn + 1`
1255         args_sep=' '
1256 done
1257 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1258 # used by ./hints/os2.sh
1259 rm -f cmdl.opt
1260
1261 : produce awk script to parse command line options
1262 cat >options.awk <<'EOF'
1263 BEGIN {
1264         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1265
1266         len = length(optstr);
1267         for (i = 1; i <= len; i++) {
1268                 c = substr(optstr, i, 1);
1269                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1270                 if (a == ":") {
1271                         arg[c] = 1;
1272                         i++;
1273                 }
1274                 opt[c] = 1;
1275         }
1276 }
1277 {
1278         expect = 0;
1279         str = $0;
1280         if (substr(str, 1, 1) != "-") {
1281                 printf("'%s'\n", str);
1282                 next;
1283         }
1284         len = length($0);
1285         for (i = 2; i <= len; i++) {
1286                 c = substr(str, i, 1);
1287                 if (!opt[c]) {
1288                         printf("-%s\n", substr(str, i));
1289                         next;
1290                 }
1291                 printf("-%s\n", c);
1292                 if (arg[c]) {
1293                         if (i < len)
1294                                 printf("'%s'\n", substr(str, i + 1));
1295                         else
1296                                 expect = 1;
1297                         next;
1298                 }
1299         }
1300 }
1301 END {
1302         if (expect)
1303                 print "?";
1304 }
1305 EOF
1306
1307 : process the command line options
1308 set X `for arg in "$@"; do echo "X$arg"; done |
1309         sed -e s/X// | awk -f options.awk`
1310 eval "set $*"
1311 shift
1312 rm -f options.awk
1313
1314 : set up default values
1315 fastread=''
1316 reuseval=false
1317 config_sh=''
1318 alldone=''
1319 error=''
1320 silent=''
1321 extractsh=''
1322 override=''
1323 knowitall=''
1324 rm -f optdef.sh posthint.sh
1325 cat >optdef.sh <<EOS
1326 $startsh
1327 EOS
1328
1329
1330 : option parsing
1331 while test $# -gt 0; do
1332         case "$1" in
1333         -d) shift; fastread=yes;;
1334         -e) shift; alldone=cont;;
1335         -f)
1336                 shift
1337                 cd ..
1338                 if test -r "$1"; then
1339                         config_sh="$1"
1340                 else
1341                         echo "$me: cannot read config file $1." >&2
1342                         error=true
1343                 fi
1344                 cd UU
1345                 shift;;
1346         -h) shift; error=true;;
1347         -r) shift; reuseval=true;;
1348         -s) shift; silent=true; realsilent=true;;
1349         -E) shift; alldone=exit;;
1350         -K) shift; knowitall=true;;
1351         -O) shift; override=true;;
1352         -S) shift; silent=true; extractsh=true;;
1353         -D)
1354                 shift
1355                 case "$1" in
1356                 *=)
1357                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1358                         echo "$me: ignoring -D $1" >&2
1359                         ;;
1360                 *=*) echo "$1" | \
1361                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1362                 *) echo "$1='define'" >> optdef.sh;;
1363                 esac
1364                 shift
1365                 ;;
1366         -U)
1367                 shift
1368                 case "$1" in
1369                 *=) echo "$1" >> optdef.sh;;
1370                 *=*)
1371                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1372                         echo "$me: ignoring -U $1" >&2
1373                         ;;
1374                 *) echo "$1='undef'" >> optdef.sh;;
1375                 esac
1376                 shift
1377                 ;;
1378         -A)
1379             shift
1380             xxx=''
1381             yyy="$1"
1382             zzz=''
1383             uuu=undef
1384             case "$yyy" in
1385             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1386                  case "$zzz" in
1387                  *:*) zzz='' ;;
1388                  *)   xxx=append
1389                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1390                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1391                  esac
1392                  ;;
1393             esac
1394             case "$xxx" in
1395             '')  case "$yyy" in
1396                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1397                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1398                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1399                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1400                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1401                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1402                  esac
1403                  ;;       
1404             esac
1405             case "$xxx" in
1406             append)
1407                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1408             clear)
1409                 echo "$yyy=''"                  >> posthint.sh ;;
1410             define)
1411                 case "$zzz" in
1412                 '') zzz=define ;;
1413                 esac
1414                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1415             eval)
1416                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1417             prepend)
1418                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1419             undef)
1420                 case "$zzz" in
1421                 '') zzz="$uuu" ;;
1422                 esac
1423                 echo "$yyy=$zzz"                >> posthint.sh ;;
1424             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1425             esac
1426             shift
1427             ;;
1428         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1429             exit 0;;
1430         --) break;;
1431         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1432         *) break;;
1433         esac
1434 done
1435
1436 case "$error" in
1437 true)
1438         cat >&2 <<EOM
1439 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1440                  [-U symbol] [-U symbol=] [-A command:symbol...]
1441   -d : use defaults for all answers.
1442   -e : go on without questioning past the production of config.sh.
1443   -f : specify an alternate default configuration file.
1444   -h : print this help message and exit (with an error status).
1445   -r : reuse C symbols value if possible (skips costly nm extraction).
1446   -s : silent mode, only echoes questions and essential information.
1447   -D : define symbol to have some value:
1448          -D symbol         symbol gets the value 'define'
1449          -D symbol=value   symbol gets the value 'value'
1450   -E : stop at the end of questions, after having produced config.sh.
1451   -K : do not use unless you know what you are doing.
1452   -O : let -D and -U override definitions from loaded configuration file.
1453   -S : perform variable substitutions on all .SH files (can mix with -f)
1454   -U : undefine symbol:
1455          -U symbol    symbol gets the value 'undef'
1456          -U symbol=   symbol gets completely empty
1457   -A : manipulate symbol after the platform specific hints have been applied:
1458          -A symbol=value                append " "value to symbol
1459          -A append:symbol=value         append value to symbol
1460          -A define:symbol=value         define symbol to have value
1461          -A clear:symbol                define symbol to be ''
1462          -A define:symbol               define symbol to be 'define'
1463          -A eval:symbol=value           define symbol to be eval of value
1464          -A prepend:symbol=value        prepend value to symbol
1465          -A undef:symbol                define symbol to be 'undef'
1466          -A undef:symbol=               define symbol to be ''
1467   -V : print version number and exit (with a zero status).
1468 EOM
1469         exit 1
1470         ;;
1471 esac
1472
1473 : Sanity checks
1474 case "$fastread$alldone" in
1475 yescont|yesexit) ;;
1476 *)
1477         case "$extractsh" in
1478         true) ;;
1479         *)
1480                 if test ! -t 0; then
1481                         echo "Say 'sh Configure', not 'sh <Configure'"
1482                         exit 1
1483                 fi
1484                 ;;
1485         esac
1486         ;;
1487 esac
1488
1489 exec 4>&1
1490 case "$silent" in
1491 true) exec 1>/dev/null;;
1492 esac
1493
1494 : run the defines and the undefines, if any, but leave the file out there...
1495 touch optdef.sh
1496 . ./optdef.sh
1497 : create the posthint manipulation script and leave the file out there...
1498 touch posthint.sh
1499
1500 : set package name
1501 package=perl5
1502 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1503 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1504 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1505 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1506 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1507 esac
1508
1509 : Some greps do not return status, grrr.
1510 echo "grimblepritz" >grimble
1511 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1512         contains=contains
1513 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1514         contains=grep
1515 else
1516         contains=contains
1517 fi
1518 rm -f grimble
1519 : the following should work in any shell
1520 case "$contains" in
1521 contains*)
1522         echo " "
1523         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1524         cat >contains <<'EOSS'
1525 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1526 EOSS
1527 chmod +x contains
1528 esac
1529
1530 : Find the path to the source tree
1531 case "$src" in
1532 '') case "$0" in
1533     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1534          case "$src" in
1535          /*)    ;;
1536          .)     ;;
1537          *)     src=`cd ../$src && pwd` ;;
1538          esac
1539          ;;
1540     *)   src='.';;
1541     esac;;
1542 esac
1543 case "$src" in
1544 '')     src=/
1545         rsrc=/
1546         ;;
1547 /*) rsrc="$src";;
1548 *) rsrc="../$src";;
1549 esac
1550 if test -f $rsrc/Configure && \
1551         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1552 then
1553    : found it, so we are ok.
1554 else
1555         rsrc=''
1556         for src in . .. ../.. ../../.. ../../../..; do
1557                 if test -f ../$src/Configure && \
1558                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1559                 then
1560                         rsrc=../$src
1561                         break
1562                 fi
1563         done
1564 fi
1565 case "$rsrc" in
1566 '')
1567         cat <<EOM >&4
1568
1569 Sorry, I can't seem to locate the source dir for $package.  Please start
1570 Configure with an explicit path -- i.e. /some/path/Configure.
1571
1572 EOM
1573         exit 1
1574         ;;
1575 ../.)   rsrc='..';;
1576 *)
1577         echo " "
1578         echo "Sources for $package found in \"$src\"." >&4
1579         ;;
1580 esac
1581
1582 : script used to extract .SH files with variable substitutions
1583 cat >extract <<'EOS'
1584 PERL_CONFIG_SH=true
1585 echo "Doing variable substitutions on .SH files..."
1586 if test -f MANIFEST; then
1587         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1588 else
1589         echo "(Looking for .SH files under the source directory.)"
1590         set x `(cd "$src"; find . -name "*.SH" -print)`
1591 fi
1592 shift
1593 case $# in
1594 0) set x `(cd "$src"; echo *.SH)`; shift;;
1595 esac
1596 if test ! -f "$src/$1"; then
1597         shift
1598 fi
1599 mkdir_p='
1600 name=$1;
1601 create="";
1602 while test $name; do
1603         if test ! -d "$name"; then
1604                 create="$name $create";
1605                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1606                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1607         else
1608                 name="";
1609         fi;
1610 done;
1611 for file in $create; do
1612         mkdir $file;
1613 done
1614 '
1615 for file in $*; do
1616         case "$src" in
1617         ".")
1618                 case "$file" in
1619                 */*)
1620                         dir=`expr X$file : 'X\(.*\)/'`
1621                         file=`expr X$file : 'X.*/\(.*\)'`
1622                         (cd "$dir" && . ./$file)
1623                         ;;
1624                 *)
1625                         . ./$file
1626                         ;;
1627                 esac
1628                 ;;
1629         *)
1630                 case "$file" in
1631                 */*)
1632                         dir=`expr X$file : 'X\(.*\)/'`
1633                         file=`expr X$file : 'X.*/\(.*\)'`
1634                         (set x $dir; shift; eval $mkdir_p)
1635                         sh <"$src/$dir/$file"
1636                         ;;
1637                 *)
1638                         sh <"$src/$file"
1639                         ;;
1640                 esac
1641                 ;;
1642         esac
1643 done
1644 if test -f "$src/config_h.SH"; then
1645         if test ! -f config.h; then
1646         : oops, they left it out of MANIFEST, probably, so do it anyway.
1647         . "$src/config_h.SH"
1648         fi
1649 fi
1650 EOS
1651
1652 : extract files and exit if asked to do so
1653 case "$extractsh" in
1654 true)
1655         case "$realsilent" in
1656         true) ;;
1657         *) exec 1>&4;;
1658         esac
1659         case "$config_sh" in
1660         '') config_sh='config.sh';;
1661         esac
1662         echo " "
1663         echo "Fetching answers from $config_sh..."
1664         cd ..
1665         . $config_sh
1666         test "$override" && . ./optdef.sh
1667         echo " "
1668         . UU/extract
1669         rm -rf UU
1670         echo "Extraction done."
1671         exit 0
1672         ;;
1673 esac
1674
1675 : Eunice requires " " instead of "", can you believe it
1676 echo " "
1677 : Here we go...
1678 echo "Beginning of configuration questions for $package."
1679
1680 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1681
1682 : first determine how to suppress newline on echo command
1683 echo " "
1684 echo "Checking echo to see how to suppress newlines..."
1685 (echo "hi there\c" ; echo " ") >.echotmp
1686 if $contains c .echotmp >/dev/null 2>&1 ; then
1687         echo "...using -n."
1688         n='-n'
1689         c=''
1690 else
1691         cat <<'EOM'
1692 ...using \c
1693 EOM
1694         n=''
1695         c='\c'
1696 fi
1697 echo $n "The star should be here-->$c"
1698 echo '*'
1699 rm -f .echotmp
1700
1701 : Now test for existence of everything in MANIFEST
1702 echo " "
1703 if test -f "$rsrc/MANIFEST"; then
1704         echo "First let's make sure your kit is complete.  Checking..." >&4
1705         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | split -50
1706         rm -f missing
1707         tmppwd=`pwd`
1708         for filelist in x??; do
1709                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1710         done
1711         if test -s missing; then
1712                 cat missing >&4
1713                 cat >&4 <<'EOM'
1714
1715 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1716
1717 You have the option of continuing the configuration process, despite the
1718 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1719 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1720 and contact the author (perlbug@perl.org).
1721
1722 EOM
1723                 echo $n "Continue? [n] $c" >&4
1724                 read ans
1725                 case "$ans" in
1726                 y*)
1727                         echo "Continuing..." >&4
1728                         rm -f missing
1729                         ;;
1730                 *)
1731                         echo "ABORTING..." >&4
1732                         kill $$
1733                         ;;
1734                 esac
1735         else
1736                 echo "Looks good..."
1737         fi
1738 else
1739         echo "There is no MANIFEST file.  I hope your kit is complete !"
1740 fi
1741 rm -f missing x??
1742
1743 echo " "
1744 : Find the appropriate value for a newline for tr
1745 if test -n "$DJGPP"; then
1746        trnl='\012'
1747 fi
1748 if test X"$trnl" = X; then
1749         case "`echo foo|tr '\n' x 2>/dev/null`" in
1750         foox) trnl='\n' ;;
1751         esac
1752 fi
1753 if test X"$trnl" = X; then
1754         case "`echo foo|tr '\012' x 2>/dev/null`" in
1755         foox) trnl='\012' ;;
1756         esac
1757 fi
1758 if test X"$trnl" = X; then
1759         cat <<EOM >&2
1760
1761 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1762
1763 EOM
1764         exit 1
1765 fi
1766
1767 : compute the number of columns on the terminal for proper question formatting
1768 case "$COLUMNS" in
1769 '') COLUMNS='80';;
1770 esac
1771
1772 : set up the echo used in my read
1773 myecho="case \"\$xxxm\" in
1774 '') echo $n \"\$rp $c\" >&4;;
1775 *) case \"\$rp\" in
1776         '') echo $n \"[\$xxxm] $c\";;
1777         *)
1778                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1779                         echo \"\$rp\" >&4
1780                         echo $n \"[\$xxxm] $c\" >&4
1781                 else
1782                         echo $n \"\$rp [\$xxxm] $c\" >&4
1783                 fi
1784                 ;;
1785         esac;;
1786 esac"
1787
1788 : now set up to do reads with possible shell escape and default assignment
1789 cat <<EOSC >myread
1790 $startsh
1791 xxxm=\$dflt
1792 $myecho
1793 ans='!'
1794 case "\$fastread" in
1795 yes) case "\$dflt" in
1796         '') ;;
1797         *) ans='';
1798                 case "\$silent-\$rp" in
1799                 true-) ;;
1800                 *) echo " " >&4;;
1801                 esac;;
1802         esac;;
1803 *) case "\$silent" in
1804         true) case "\$rp" in
1805                 '') ans='';;
1806                 esac;;
1807         esac;;
1808 esac
1809 while expr "X\$ans" : "X!" >/dev/null; do
1810         read answ
1811         set x \$xxxm
1812         shift
1813         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1814         case  "\$answ" in
1815         "!")
1816                 sh 1>&4
1817                 echo " "
1818                 $myecho
1819                 ;;
1820         !*)
1821                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1822                 shift
1823                 sh 1>&4 -c "\$*"
1824                 echo " "
1825                 $myecho
1826                 ;;
1827         "\$ans")
1828                 case "\$ans" in
1829                 \\&*)
1830                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1831                         shift
1832                         case "\$1" in
1833                         -d)
1834                                 fastread=yes
1835                                 echo "(OK, I'll run with -d after this question.)" >&4
1836                                 ;;
1837                         -*)
1838                                 echo "*** Sorry, \$1 not supported yet." >&4
1839                                 ;;
1840                         esac
1841                         $myecho
1842                         ans=!
1843                         ;;
1844                 esac;;
1845         *)
1846                 case "\$aok" in
1847                 y)
1848                         echo "*** Substitution done -- please confirm."
1849                         xxxm="\$ans"
1850                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1851                         xxxm="\$ans"
1852                         ans=!
1853                         ;;
1854                 *)
1855                         echo "*** Error -- try again."
1856                         ans=!
1857                         ;;
1858                 esac
1859                 $myecho
1860                 ;;
1861         esac
1862         case "\$ans\$xxxm\$nostick" in
1863         '')
1864                 ans=!
1865                 $myecho
1866                 ;;
1867         esac
1868 done
1869 case "\$ans" in
1870 '') ans="\$xxxm";;
1871 esac
1872 EOSC
1873
1874 : create .config dir to save info across Configure sessions
1875 test -d ../.config || mkdir ../.config
1876 cat >../.config/README <<EOF
1877 This directory created by Configure to save information that should
1878 persist across sessions for $package.
1879
1880 You may safely delete it if you wish.
1881 EOF
1882
1883 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1884 case "$usedevel" in
1885 $define|true|[yY]*) ;;
1886 *) case "$xversion" in
1887    *[13579])
1888         cat >&4 <<EOH
1889 *** WHOA THERE!!! ***
1890
1891     This is an UNSTABLE DEVELOPMENT release.
1892     The version of this $package distribution is $xversion, that is, odd,
1893     (as opposed to even) and that signifies a development release.
1894     If you want a maintenance release, you want an even-numbered version.
1895
1896     Do ***NOT*** install this into production use.
1897     Data corruption and crashes are possible.
1898
1899     It is most seriously suggested that you do not continue any further
1900     unless you want to help in developing and debugging Perl.
1901
1902     If you *still* want to build perl, you can answer 'y' now,
1903     or pass -Dusedevel to Configure.
1904
1905 EOH
1906         rp='Do you really want to continue?'
1907         dflt='n'
1908         . ./myread
1909         case "$ans" in
1910         [yY]) echo >&4 "Okay, continuing."
1911               usedevel="$define" ;;
1912         *) echo >&4 "Okay, bye."
1913            exit 1
1914            ;;
1915         esac
1916         ;;
1917     esac
1918     ;;
1919 esac
1920 case "$usedevel" in
1921 $define|true|[yY]*)
1922         case "$versiononly" in
1923         '') versiononly="$define" ;;
1924         esac
1925         case "$installusrbinperl" in
1926         '') installusrbinperl="$undef" ;;
1927         esac
1928         ;;
1929 esac
1930
1931 : general instructions
1932 needman=true
1933 firsttime=true
1934 user=`(logname) 2>/dev/null`
1935 case "$user" in
1936 '') user=`whoami 2>&1`;;
1937 esac
1938 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1939         firsttime=false
1940         echo " "
1941         rp='Would you like to see the instructions?'
1942         dflt=n
1943         . ./myread
1944         case "$ans" in
1945         [yY]*) ;;
1946         *) needman=false;;
1947         esac
1948 fi
1949 if $needman; then
1950         cat <<EOH
1951
1952 This installation shell script will examine your system and ask you questions
1953 to determine how the perl5 package should be installed. If you get
1954 stuck on a question, you may use a ! shell escape to start a subshell or
1955 execute a command.  Many of the questions will have default answers in square
1956 brackets; typing carriage return will give you the default.
1957
1958 On some of the questions which ask for file or directory names you are allowed
1959 to use the ~name construct to specify the login directory belonging to "name",
1960 even if you don't have a shell which knows about that.  Questions where this is
1961 allowed will be marked "(~name ok)".
1962
1963 EOH
1964         rp=''
1965         dflt='Type carriage return to continue'
1966         . ./myread
1967         cat <<'EOH'
1968
1969 The prompter used in this script allows you to use shell variables and
1970 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1971 in the default answer, as if the default line was a set of arguments given to a
1972 script shell.  This means you may also use $* to repeat the whole default line,
1973 so you do not have to re-type everything to add something to the default.
1974
1975 Everytime there is a substitution, you will have to confirm.  If there is an
1976 error (e.g. an unmatched backtick), the default answer will remain unchanged
1977 and you will be prompted again.
1978
1979 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1980 the questions and use the computed defaults (or the previous answers if there
1981 was already a config.sh file). Type 'Configure -h' for a list of options.
1982 You may also start interactively and then answer '& -d' at any prompt to turn
1983 on the non-interactive behaviour for the remainder of the execution.
1984
1985 EOH
1986         . ./myread
1987         cat <<EOH
1988
1989 Much effort has been expended to ensure that this shell script will run on any
1990 Unix system.  If despite that it blows up on yours, your best bet is to edit
1991 Configure and run it again.  If you can't run Configure for some reason,
1992 you'll have to generate a config.sh file by hand.  Whatever problems you
1993 have, let me (perlbug@perl.org) know how I blew it.
1994
1995 This installation script affects things in two ways:
1996
1997 1) it may do direct variable substitutions on some of the files included
1998    in this kit.
1999 2) it builds a config.h file for inclusion in C programs.  You may edit
2000    any of these files as the need arises after running this script.
2001
2002 If you make a mistake on a question, there is no easy way to back up to it
2003 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2004 files.  Configure will offer to let you do this before it runs the SH files.
2005
2006 EOH
2007         dflt='Type carriage return to continue'
2008         . ./myread
2009         case "$firsttime" in
2010         true) echo $user >>../.config/instruct;;
2011         esac
2012 fi
2013
2014 : find out where common programs are
2015 echo " "
2016 echo "Locating common programs..." >&4
2017 cat <<EOSC >loc
2018 $startsh
2019 case \$# in
2020 0) exit 1;;
2021 esac
2022 thing=\$1
2023 shift
2024 dflt=\$1
2025 shift
2026 for dir in \$*; do
2027         case "\$thing" in
2028         .)
2029         if test -d \$dir/\$thing; then
2030                 echo \$dir
2031                 exit 0
2032         fi
2033         ;;
2034         *)
2035         for thisthing in \$dir/\$thing; do
2036                 : just loop through to pick last item
2037         done
2038         if test -f \$thisthing; then
2039                 echo \$thisthing
2040                 exit 0
2041         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2042                 echo \$thisthing
2043                 exit 0
2044         elif test -f \$dir/\$thing.exe; then
2045                 if test -n "$DJGPP"; then
2046                         echo \$dir/\$thing.exe
2047                 else
2048                         : on Eunice apparently
2049                         echo \$dir/\$thing
2050                 fi
2051                 exit 0
2052         fi
2053         ;;
2054         esac
2055 done
2056 echo \$dflt
2057 exit 1
2058 EOSC
2059 chmod +x loc
2060 $eunicefix loc
2061 loclist="
2062 awk
2063 cat
2064 chmod
2065 comm
2066 cp
2067 echo
2068 expr
2069 grep
2070 ls
2071 mkdir
2072 rm
2073 sed
2074 sort
2075 touch
2076 tr
2077 uniq
2078 "
2079 trylist="
2080 Mcc
2081 ar
2082 bison
2083 byacc
2084 cpp
2085 csh
2086 date
2087 egrep
2088 gmake
2089 gzip
2090 less
2091 ln
2092 make
2093 more
2094 nm
2095 nroff
2096 pg
2097 test
2098 uname
2099 zip
2100 "
2101 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2102 pth="$pth /lib /usr/lib"
2103 for file in $loclist; do
2104         eval xxx=\$$file
2105         case "$xxx" in
2106         /*|?:[\\/]*)
2107                 if test -f "$xxx"; then
2108                         : ok
2109                 else
2110                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2111                         xxx=`./loc $file $file $pth`
2112                 fi
2113                 ;;
2114         '') xxx=`./loc $file $file $pth`;;
2115         *) xxx=`./loc $xxx $xxx $pth`;;
2116         esac
2117         eval $file=$xxx$_exe
2118         eval _$file=$xxx
2119         case "$xxx" in
2120         /*)
2121                 echo $file is in $xxx.
2122                 ;;
2123         ?:[\\/]*)
2124                 echo $file is in $xxx.
2125                 ;;
2126         *)
2127                 echo "I don't know where '$file' is, and my life depends on it." >&4
2128                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2129                 exit 1
2130                 ;;
2131         esac
2132 done
2133 echo " "
2134 echo "Don't worry if any of the following aren't found..."
2135 say=offhand
2136 for file in $trylist; do
2137         eval xxx=\$$file
2138         case "$xxx" in
2139         /*|?:[\\/]*)
2140                 if test -f "$xxx"; then
2141                         : ok
2142                 else
2143                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2144                         xxx=`./loc $file $file $pth`
2145                 fi
2146                 ;;
2147         '') xxx=`./loc $file $file $pth`;;
2148         *) xxx=`./loc $xxx $xxx $pth`;;
2149         esac
2150         eval $file=$xxx$_exe
2151         eval _$file=$xxx
2152         case "$xxx" in
2153         /*)
2154                 echo $file is in $xxx.
2155                 ;;
2156         ?:[\\/]*)
2157                 echo $file is in $xxx.
2158                 ;;
2159         *)
2160                 echo "I don't see $file out there, $say."
2161                 say=either
2162                 ;;
2163         esac
2164 done
2165 case "$egrep" in
2166 egrep)
2167         echo "Substituting grep for egrep."
2168         egrep=$grep
2169         _egrep=$grep
2170         ;;
2171 esac
2172 case "$ln" in
2173 ln)
2174         echo "Substituting cp for ln."
2175         ln=$cp
2176         _ln=$cp
2177         ;;
2178 esac
2179 case "$make" in
2180 make)   
2181         case "$gmake" in
2182         gmake)
2183         echo "I can't find make or gmake, and my life depends on it." >&4
2184         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2185         exit 1
2186         ;;
2187         esac
2188         ;;
2189 esac    
2190 case "$gmake" in
2191 gmake)  ;;
2192 *)      # We can't have osname yet.
2193         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2194                 # Assume that gmake, if found, is definitely GNU make
2195                 # and prefer it over the system make.
2196                 echo "Substituting gmake for make."
2197                 make=$gmake
2198                 _make=$gmake
2199         fi
2200         ;;
2201 esac
2202 case "$test" in
2203 test)
2204         echo "Hopefully test is built into your sh."
2205         ;;
2206 *)
2207         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2208                 echo "Using the test built into your sh."
2209                 test=test
2210                 _test=test
2211         fi
2212         ;;
2213 esac
2214 case "$echo" in
2215 echo)
2216         echo "Hopefully echo is built into your sh."
2217         ;;
2218 '') ;;
2219 *)
2220         echo " "
2221 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2222         $echo $n "hi there$c" >foo1
2223         echo $n "hi there$c" >foo2
2224         if cmp foo1 foo2 >/dev/null 2>&1; then
2225                 echo "They are compatible.  In fact, they may be identical."
2226         else
2227                 case "$n" in
2228                 '-n') n='' c='\c';;
2229                 *) n='-n' c='';;
2230                 esac
2231                 cat <<FOO
2232 They are not compatible!  You are probably running ksh on a non-USG system.
2233 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2234 have echo built in and we may have to run some Bourne shell scripts.  That
2235 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2236
2237 FOO
2238                 $echo $n "The star should be here-->$c"
2239                 $echo "*"
2240         fi
2241         $rm -f foo1 foo2
2242         ;;
2243 esac
2244
2245 cat <<EOS >checkcc
2246 $startsh
2247 EOS
2248 cat <<'EOSC' >>checkcc
2249 case "$cc" in
2250 '') ;;
2251 *)  $rm -f try try.*
2252     $cat >try.c <<EOM
2253 int main(int argc, char *argv[]) {
2254   return 0;
2255 }
2256 EOM
2257     if $cc -o try $ccflags $ldflags try.c; then
2258        :
2259     else
2260         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2261         despair=yes
2262         trygcc=yes
2263         case "$cc" in
2264         *gcc*) trygcc=no ;;
2265         esac
2266         case "`$cc -v -c try.c 2>&1`" in
2267         *gcc*) trygcc=no ;;
2268         esac
2269         if $test X"$trygcc" = Xyes; then
2270             if gcc -o try -c try.c; then
2271                 echo " "
2272                 echo "You seem to have a working gcc, though." >&4
2273                 rp="Would you like to use it?"
2274                 dflt=y
2275                 if $test -f myread; then
2276                     . ./myread
2277                 else
2278                     if $test -f UU/myread; then
2279                         . ./UU/myread
2280                     else
2281                         echo "Cannot find myread, sorry.  Aborting." >&2
2282                         exit 1
2283                     fi
2284                 fi  
2285                 case "$ans" in
2286                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2287                 esac
2288             fi
2289         fi
2290         if $test X"$despair" = Xyes; then
2291             $cat >&4 <<EOM
2292 You need to find a working C compiler.
2293 Either (purchase and) install the C compiler supplied by your OS vendor,
2294 or for a free C compiler try http://gcc.gnu.org/
2295 I cannot continue any further, aborting.
2296 EOM
2297             exit 1
2298         fi
2299     fi
2300     $rm -f try try.*
2301     ;;
2302 esac
2303 EOSC
2304
2305 : determine whether symbolic links are supported
2306 echo " "
2307 $touch blurfl
2308 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2309         echo "Symbolic links are supported." >&4
2310         lns="$ln$_exe -s"
2311 else
2312         echo "Symbolic links are NOT supported." >&4
2313         lns="$ln"
2314 fi
2315 $rm -f blurfl sym
2316
2317 : determine whether symbolic links are supported
2318 echo " "
2319 case "$lns" in
2320 *"ln"*" -s")
2321         echo "Checking how to test for symbolic links..." >&4
2322         $lns blurfl sym
2323         if $test "X$issymlink" = X; then
2324                 case "$newsh" in
2325                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2326                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2327                 esac
2328                 if test $? = 0; then
2329                         issymlink="test -h"
2330                 else
2331                         echo "Your builtin 'test -h' may be broken." >&4
2332                         case "$test" in
2333                         /*)     ;;
2334                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2335                                 for p in $pth
2336                                 do
2337                                         if test -f "$p/$test"; then
2338                                                 test="$p/$test"
2339                                                 break
2340                                         fi
2341                                 done
2342                                 ;;
2343                         esac
2344                         case "$test" in
2345                         /*)
2346                                 echo "Trying external '$test -h'." >&4
2347                                 issymlink="$test -h"
2348                                 if $test ! -h sym >/dev/null 2>&1; then
2349                                         echo "External '$test -h' is broken, too." >&4
2350                                         issymlink=''
2351                                 fi
2352                                 ;;
2353                         *)      issymlink='' ;;
2354                         esac
2355                 fi              
2356         fi
2357         if $test "X$issymlink" = X; then
2358                 if $test -L sym 2>/dev/null; then
2359                         issymlink="$test -L"
2360                         echo "The builtin '$test -L' worked." >&4
2361                 fi
2362         fi
2363         if $test "X$issymlink" != X; then
2364                 echo "You can test for symbolic links with '$issymlink'." >&4
2365         else
2366                 echo "I do not know how you can test for symbolic links." >&4
2367         fi
2368         $rm -f blurfl sym
2369         ;;
2370 *)      echo "No symbolic links, so not testing for their testing..." >&4
2371         ;;
2372 esac
2373 echo " "
2374
2375
2376 case "$mksymlinks" in
2377 $define|true|[yY]*)
2378         case "$src" in
2379         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2380                 exit 1
2381                 ;;
2382         *)      case "$lns:$issymlink" in
2383                 *"ln -s:"*"test -"?)
2384                         echo "Creating the symbolic links..." >&4
2385                         echo "(First creating the subdirectories...)" >&4
2386                         cd ..
2387                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2388                                 read directory
2389                                 test -z "$directory" && break
2390                                 mkdir -p $directory
2391                         done
2392                         # Sanity check 1.
2393                         if test ! -d t/base; then
2394                                 echo "Failed to create the subdirectories.  Aborting." >&4
2395                                 exit 1
2396                         fi
2397                         echo "(Then creating the symlinks...)" >&4
2398                         awk '{print $1}' $src/MANIFEST | while true; do
2399                                 read filename
2400                                 test -z "$filename" && break
2401                                 if test -f $filename; then
2402                                         if $issymlink $filename; then
2403                                                 rm -f $filename
2404                                         fi
2405                                 fi
2406                                 if test -f $filename; then
2407                                         echo "$filename already exists, not symlinking."
2408                                 else
2409                                         ln -s $src/$filename $filename
2410                                 fi
2411                         done
2412                         # Sanity check 2.
2413                         if test ! -f t/base/lex.t; then
2414                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2415                                 exit 1
2416                         fi
2417                         cd UU
2418                         ;;
2419                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2420                         ;;
2421                 esac
2422                 ;;
2423         esac
2424         ;;
2425 esac
2426
2427
2428 case "$usecrosscompile" in
2429 $define|true|[yY]*)
2430         $echo "Cross-compiling..."
2431         croak=''
2432         case "$cc" in
2433         *-*-gcc) # A cross-compiling gcc, probably.
2434             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2435             ar=$targetarch-ar
2436             # leave out ld, choosing it is more complex
2437             nm=$targetarch-nm
2438             ranlib=$targetarch-ranlib
2439             $echo 'extern int foo;' > try.c
2440             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2441             shift
2442             if $test $# -gt 0; then
2443                 incpth="$incpth $*"
2444                 incpth="`$echo $incpth|$sed 's/^ //'`"
2445                 echo "Guessing incpth '$incpth'." >&4
2446                 for i in $*; do
2447                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2448                     if $test -d $j; then
2449                         libpth="$libpth $j"
2450                     fi
2451                 done   
2452                 libpth="`$echo $libpth|$sed 's/^ //'`"
2453                 echo "Guessing libpth '$libpth'." >&4
2454             fi
2455             $rm -f try.c
2456             ;;
2457         esac
2458         case "$targetarch" in
2459         '') echo "Targetarch not defined." >&4; croak=y ;;
2460         *)  echo "Using targetarch $targetarch." >&4 ;;
2461         esac
2462         case "$incpth" in
2463         '') echo "Incpth not defined." >&4; croak=y ;;
2464         *)  echo "Using incpth '$incpth'." >&4 ;;
2465         esac
2466         case "$libpth" in
2467         '') echo "Libpth not defined." >&4; croak=y ;;
2468         *)  echo "Using libpth '$libpth'." >&4 ;;
2469         esac
2470         case "$usrinc" in
2471         '') for i in $incpth; do
2472                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2473                     usrinc=$i
2474                     echo "Guessing usrinc $usrinc." >&4
2475                     break
2476                 fi
2477             done
2478             case "$usrinc" in
2479             '') echo "Usrinc not defined." >&4; croak=y ;;
2480             esac
2481             ;;
2482         *)  echo "Using usrinc $usrinc." >&4 ;;
2483         esac
2484         case "$targethost" in
2485         '') echo "Targethost not defined." >&4; croak=y ;;
2486         *)  echo "Using targethost $targethost." >&4
2487         esac
2488         locincpth=' '
2489         loclibpth=' '
2490         case "$croak" in
2491         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2492         esac
2493         case "$src" in
2494         /*) run=$src/Cross/run
2495             targetmkdir=$src/Cross/mkdir
2496             to=$src/Cross/to
2497             from=$src/Cross/from
2498             ;;
2499         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2500             run=$pwd/Cross/run
2501             targetmkdir=$pwd/Cross/mkdir
2502             to=$pwd/Cross/to
2503             from=$pwd/Cross/from
2504             ;;
2505         esac
2506         case "$targetrun" in
2507         '') targetrun=ssh ;;
2508         esac
2509         case "$targetto" in
2510         '') targetto=scp ;;
2511         esac
2512         case "$targetfrom" in
2513         '') targetfrom=scp ;;
2514         esac
2515         run=$run-$targetrun
2516         to=$to-$targetto
2517         from=$from-$targetfrom
2518         case "$targetdir" in
2519         '')  targetdir=/tmp
2520              echo "Guessing targetdir $targetdir." >&4
2521              ;;
2522         esac
2523         case "$targetuser" in
2524         '')  targetuser=root
2525              echo "Guessing targetuser $targetuser." >&4
2526              ;;
2527         esac
2528         case "$targetfrom" in
2529         scp)    q=-q ;;
2530         *)      q='' ;;
2531         esac
2532         case "$targetrun" in
2533         ssh|rsh)
2534             cat >$run <<EOF
2535 #!/bin/sh
2536 case "\$1" in
2537 -cwd)
2538   shift
2539   cwd=\$1
2540   shift
2541   ;;
2542 esac
2543 case "\$cwd" in
2544 '') cwd=$targetdir ;;
2545 esac
2546 exe=\$1
2547 shift
2548 if $test ! -f \$exe.xok; then
2549   $to \$exe
2550   $touch \$exe.xok
2551 fi
2552 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2553 EOF
2554             ;;
2555         *)  echo "Unknown targetrun '$targetrun'" >&4
2556             exit 1
2557             ;;
2558         esac
2559         case "$targetmkdir" in
2560         */Cross/mkdir)
2561             cat >$targetmkdir <<EOF
2562 #!/bin/sh
2563 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2564 EOF
2565             $chmod a+rx $targetmkdir
2566             ;;
2567         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2568             exit 1
2569             ;;
2570         esac
2571         case "$targetto" in
2572         scp|rcp)
2573             cat >$to <<EOF
2574 #!/bin/sh
2575 for f in \$@
2576 do
2577   case "\$f" in
2578   /*)
2579     $targetmkdir \`dirname \$f\`
2580     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2581     ;;
2582   *)
2583     $targetmkdir $targetdir/\`dirname \$f\`
2584     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2585     ;;
2586   esac
2587 done
2588 exit 0
2589 EOF
2590             ;;
2591         cp) cat >$to <<EOF
2592 #!/bin/sh
2593 for f in \$@
2594 do
2595   case "\$f" in
2596   /*)
2597     $mkdir -p $targetdir/\`dirname \$f\`
2598     $cp \$f $targetdir/\$f || exit 1
2599     ;;
2600   *)
2601     $targetmkdir $targetdir/\`dirname \$f\`
2602     $cp \$f $targetdir/\$f || exit 1
2603     ;;
2604   esac
2605 done
2606 exit 0
2607 EOF
2608             ;;
2609         *)  echo "Unknown targetto '$targetto'" >&4
2610             exit 1
2611             ;;
2612         esac
2613         case "$targetfrom" in
2614         scp|rcp)
2615           cat >$from <<EOF
2616 #!/bin/sh
2617 for f in \$@
2618 do
2619   $rm -f \$f
2620   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2621 done
2622 exit 0
2623 EOF
2624             ;;
2625         cp) cat >$from <<EOF
2626 #!/bin/sh
2627 for f in \$@
2628 do
2629   $rm -f \$f
2630   cp $targetdir/\$f . || exit 1
2631 done
2632 exit 0
2633 EOF
2634             ;;
2635         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2636             exit 1
2637             ;;
2638         esac
2639         if $test ! -f $run; then
2640             echo "Target 'run' script '$run' not found." >&4
2641         else
2642             $chmod a+rx $run
2643         fi
2644         if $test ! -f $to; then
2645             echo "Target 'to' script '$to' not found." >&4
2646         else
2647             $chmod a+rx $to
2648         fi
2649         if $test ! -f $from; then
2650             echo "Target 'from' script '$from' not found." >&4
2651         else
2652             $chmod a+rx $from
2653         fi
2654         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2655             exit 1
2656         fi
2657         cat >&4 <<EOF
2658 Using '$run' for remote execution,
2659 and '$from' and '$to'
2660 for remote file transfer.
2661 EOF
2662         ;;
2663 *)      run=''
2664         to=:
2665         from=:
2666         usecrosscompile='undef'
2667         targetarch=''
2668         ;;
2669 esac
2670
2671 : see whether [:lower:] and [:upper:] are supported character classes
2672 echo " "
2673 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2674 ABYZ)
2675         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2676         up='[:upper:]'
2677         low='[:lower:]'
2678         ;;
2679 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2680         # (0xc9 and 0xd1), therefore that is a nice testing point.
2681         if test "X$up" = X -o "X$low" = X; then
2682             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2683             ij) up='[A-Z]'
2684                 low='[a-z]'
2685                 ;;
2686             esac
2687         fi
2688         if test "X$up" = X -o "X$low" = X; then
2689             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2690             ij) up='A-Z'
2691                 low='a-z'
2692                 ;;
2693             esac
2694         fi
2695         if test "X$up" = X -o "X$low" = X; then
2696             case "`echo IJ | od -x 2>/dev/null`" in
2697             *C9D1*|*c9d1*)
2698                 echo "Hey, this might be EBCDIC." >&4
2699                 if test "X$up" = X -o "X$low" = X; then
2700                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2701                     ij) up='[A-IJ-RS-Z]'
2702                         low='[a-ij-rs-z]'
2703                         ;;
2704                     esac
2705                 fi
2706                 if test "X$up" = X -o "X$low" = X; then
2707                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2708                     ij) up='A-IJ-RS-Z'
2709                         low='a-ij-rs-z'
2710                         ;;
2711                     esac
2712                 fi
2713                 ;;
2714             esac
2715         fi
2716 esac
2717 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2718 ij)
2719     echo "Using $up and $low to convert case." >&4
2720     ;;
2721 *)
2722     echo "I don't know how to translate letters from upper to lower case." >&4
2723     echo "Your tr is not acting any way I know of." >&4
2724     exit 1
2725     ;;
2726 esac
2727 : set up the translation script tr, must be called with ./tr of course
2728 cat >tr <<EOSC
2729 $startsh
2730 case "\$1\$2" in
2731 '[A-Z][a-z]') exec $tr '$up' '$low';;
2732 '[a-z][A-Z]') exec $tr '$low' '$up';;
2733 esac
2734 exec $tr "\$@"
2735 EOSC
2736 chmod +x tr
2737 $eunicefix tr
2738
2739 : Try to determine whether config.sh was made on this system
2740 case "$config_sh" in
2741 '')
2742 myuname=`$uname -a 2>/dev/null`
2743 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2744 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2745 # because the A-Z/a-z are not consecutive.
2746 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2747         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2748 newmyuname="$myuname"
2749 dflt=n
2750 case "$knowitall" in
2751 '')
2752         if test -f ../config.sh; then
2753                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2754                         eval "`grep myuname= ../config.sh`"
2755                 fi
2756                 if test "X$myuname" = "X$newmyuname"; then
2757                         dflt=y
2758                 fi
2759         fi
2760         ;;
2761 *) dflt=y;;
2762 esac
2763
2764 : Get old answers from old config file if Configure was run on the
2765 : same system, otherwise use the hints.
2766 hint=default
2767 cd ..
2768 if test -f config.sh; then
2769         echo " "
2770         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2771         . UU/myread
2772         case "$ans" in
2773         n*|N*) echo "OK, I'll ignore it."
2774                 mv config.sh config.sh.old
2775                 myuname="$newmyuname"
2776                 ;;
2777         *)  echo "Fetching default answers from your old config.sh file..." >&4
2778                 tmp_n="$n"
2779                 tmp_c="$c"
2780                 tmp_sh="$sh"
2781                 . ./config.sh
2782                 cp config.sh UU
2783                 n="$tmp_n"
2784                 c="$tmp_c"
2785                 : Older versions did not always set $sh.  Catch re-use of such
2786                 : an old config.sh.
2787                 case "$sh" in
2788                 '') sh="$tmp_sh" ;;
2789                 esac
2790                 hint=previous
2791                 ;;
2792         esac
2793 fi
2794 . ./UU/checkcc
2795 if test ! -f config.sh; then
2796         $cat <<EOM
2797
2798 First time through, eh?  I have some defaults handy for some systems
2799 that need some extra help getting the Configure answers right:
2800
2801 EOM
2802         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2803         dflt=''
2804         : Half the following guesses are probably wrong... If you have better
2805         : tests or hints, please send them to perlbug@perl.org
2806         : The metaconfig authors would also appreciate a copy...
2807         $test -f /irix && osname=irix
2808         $test -f /xenix && osname=sco_xenix
2809         $test -f /dynix && osname=dynix
2810         $test -f /dnix && osname=dnix
2811         $test -f /lynx.os && osname=lynxos
2812         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2813         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2814         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2815         $test -f /bin/mips && /bin/mips && osname=mips
2816         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2817                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2818         $test -d /usr/apollo/bin && osname=apollo
2819         $test -f /etc/saf/_sactab && osname=svr4
2820         $test -d /usr/include/minix && osname=minix
2821         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2822         if $test -d /MachTen -o -d /MachTen_Folder; then
2823                 osname=machten
2824                 if $test -x /sbin/version; then
2825                         osvers=`/sbin/version | $awk '{print $2}' |
2826                         $sed -e 's/[A-Za-z]$//'`
2827                 elif $test -x /usr/etc/version; then
2828                         osvers=`/usr/etc/version | $awk '{print $2}' |
2829                         $sed -e 's/[A-Za-z]$//'`
2830                 else
2831                         osvers="$2.$3"
2832                 fi
2833         fi
2834
2835         $test -f /sys/posix.dll &&
2836                 $test -f /usr/bin/what &&
2837                 set X `/usr/bin/what /sys/posix.dll` &&
2838                 $test "$3" = UWIN &&
2839                 osname=uwin &&
2840                 osvers="$5"
2841
2842         if $test -f $uname; then
2843                 set X $myuname
2844                 shift
2845
2846                 case "$5" in
2847                 fps*) osname=fps ;;
2848                 mips*)
2849                         case "$4" in
2850                         umips) osname=umips ;;
2851                         *) osname=mips ;;
2852                         esac;;
2853                 [23]100) osname=mips ;;
2854                 next*) osname=next ;;
2855                 i386*)
2856                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2857                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2858                                 osname='sco'
2859                                 osvers=$tmp
2860                         elif $test -f /etc/kconfig; then
2861                                 osname=isc
2862                                 if test "$lns" = "$ln -s"; then
2863                                         osvers=4
2864                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2865                                         osvers=3
2866                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2867                                         osvers=2
2868                                 fi
2869                         fi
2870                         tmp=''
2871                         ;;
2872                 pc*)
2873                         if test -n "$DJGPP"; then
2874                                 osname=dos
2875                                 osvers=djgpp
2876                         fi
2877                         ;;
2878                 esac
2879
2880                 case "$1" in
2881                 aix) osname=aix
2882                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2883                         case "$tmp" in
2884                         'not found') osvers="$4"."$3" ;;
2885                         '<3240'|'<>3240') osvers=3.2.0 ;;
2886                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2887                         '=3250'|'>3250') osvers=3.2.5 ;;
2888                         *) osvers=$tmp;;
2889                         esac
2890                         ;;
2891                 bsd386) osname=bsd386
2892                         osvers=`$uname -r`
2893                         ;;
2894                 cygwin*) osname=cygwin
2895                         osvers="$3"
2896                         ;;
2897                 *dc.osx) osname=dcosx
2898                         osvers="$3"
2899                         ;;
2900                 dnix) osname=dnix
2901                         osvers="$3"
2902                         ;;
2903                 domainos) osname=apollo
2904                         osvers="$3"
2905                         ;;
2906                 dgux) osname=dgux 
2907                         osvers="$3"
2908                         ;;
2909                 dynixptx*) osname=dynixptx
2910                         osvers=`echo "$4"|sed 's/^v//'`
2911                         ;;
2912                 freebsd) osname=freebsd 
2913                         osvers="$3" ;;
2914                 genix) osname=genix ;;
2915                 hp*) osname=hpux 
2916                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2917                         ;;
2918                 irix*) osname=irix
2919                         case "$3" in
2920                         4*) osvers=4 ;;
2921                         5*) osvers=5 ;;
2922                         *)      osvers="$3" ;;
2923                         esac
2924                         ;;
2925                 linux) osname=linux
2926                         case "$3" in
2927                         *)      osvers="$3" ;;
2928                         esac
2929                         ;;
2930                 MiNT) osname=mint
2931                         ;;
2932                 netbsd*) osname=netbsd
2933                         osvers="$3"
2934                         ;;
2935                 news-os) osvers="$3"
2936                         case "$3" in
2937                         4*) osname=newsos4 ;;
2938                         *) osname=newsos ;;
2939                         esac
2940                         ;;
2941                 next*) osname=next ;;
2942                 nonstop-ux) osname=nonstopux ;;
2943                 POSIX-BC | posix-bc ) osname=posix-bc
2944                         osvers="$3"
2945                         ;;
2946                 powerux | power_ux | powermax_os | powermaxos | \
2947                 powerunix | power_unix) osname=powerux
2948                         osvers="$3"
2949                         ;;
2950                 qnx) osname=qnx
2951                         osvers="$4"
2952                         ;;
2953                 solaris) osname=solaris
2954                         case "$3" in
2955                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2956                         *)      osvers="$3" ;;
2957                         esac
2958                         ;;
2959                 sunos) osname=sunos
2960                         case "$3" in
2961                         5*) osname=solaris
2962                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2963                         *)      osvers="$3" ;;
2964                         esac
2965                         ;;
2966                 titanos) osname=titanos
2967                         case "$3" in
2968                         1*) osvers=1 ;;
2969                         2*) osvers=2 ;;
2970                         3*) osvers=3 ;;
2971                         4*) osvers=4 ;;
2972                         *)      osvers="$3" ;;
2973                         esac
2974                         ;;
2975                 ultrix) osname=ultrix
2976                         osvers="$3"
2977                         ;;
2978                 osf1|mls+)      case "$5" in
2979                                 alpha)
2980                                         osname=dec_osf
2981                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2982                                         case "$osvers" in
2983                                         [1-9].[0-9]*) ;;
2984                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2985                                         esac
2986                                         ;;
2987                         hp*)    osname=hp_osf1  ;;
2988                         mips)   osname=mips_osf1 ;;
2989                         esac
2990                         ;;
2991                 unixware) osname=svr5
2992                         osvers="$4"
2993                         ;;
2994                 uts)    osname=uts
2995                         osvers="$3"
2996                         ;;
2997                 vos) osvers="$3"
2998                         ;;
2999                 $2) case "$osname" in
3000                         *isc*) ;;
3001                         *freebsd*) ;;
3002                         svr*)
3003                                 : svr4.x or possibly later
3004                                 case "svr$3" in 
3005                                 ${osname}*)
3006                                         osname=svr$3
3007                                         osvers=$4
3008                                         ;;
3009                                 esac
3010                                 case "$osname" in
3011                                 svr4.0)
3012                                         : Check for ESIX
3013                                         if test -f /stand/boot ; then
3014                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3015                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3016                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3017                                                         if test -n "$isesix"; then
3018                                                                 osname=esix4
3019                                                         fi
3020                                                 fi
3021                                         fi
3022                                         ;;
3023                                 esac
3024                                 ;;
3025                         *)      if test -f /etc/systemid; then
3026                                         osname=sco
3027                                         set `echo $3 | $sed 's/\./ /g'` $4
3028                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3029                                                 osvers=$1.$2.$3
3030                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3031                                                 osvers=$1.$2
3032                                         elif $test -f $src/hints/sco_$1.sh; then
3033                                                 osvers=$1
3034                                         fi
3035                                 else
3036                                         case "$osname" in
3037                                         '') : Still unknown.  Probably a generic Sys V.
3038                                                 osname="sysv"
3039                                                 osvers="$3"
3040                                                 ;;
3041                                         esac
3042                                 fi
3043                                 ;;
3044                         esac
3045                         ;;
3046                 *)      case "$osname" in
3047                         '') : Still unknown.  Probably a generic BSD.
3048                                 osname="$1"
3049                                 osvers="$3"
3050                                 ;;
3051                         esac
3052                         ;;
3053                 esac
3054         else
3055                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3056                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3057                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3058                                 osname=news_os
3059                         fi
3060                         $rm -f UU/kernel.what
3061                 elif test -d c:/.; then
3062                         set X $myuname
3063                         osname=os2
3064                         osvers="$5"
3065                 fi
3066         fi
3067         
3068         case "$targetarch" in
3069         '') ;;
3070         *)  hostarch=$osname
3071             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3072             osvers=''
3073             ;;
3074         esac
3075
3076         : Now look for a hint file osname_osvers, unless one has been
3077         : specified already.
3078         case "$hintfile" in
3079         ''|' ')
3080                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3081                 : Also try without trailing minor version numbers.
3082                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3083                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3084                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3085                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3086                 case "$file" in
3087                 '') dflt=none ;;
3088                 *)  case "$osvers" in
3089                         '') dflt=$file
3090                                 ;;
3091                         *)  if $test -f $src/hints/$file.sh ; then
3092                                         dflt=$file
3093                                 elif $test -f $src/hints/$xfile.sh ; then
3094                                         dflt=$xfile
3095                                 elif $test -f $src/hints/$xxfile.sh ; then
3096                                         dflt=$xxfile
3097                                 elif $test -f $src/hints/$xxxfile.sh ; then
3098                                         dflt=$xxxfile
3099                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3100                                         dflt=$xxxxfile
3101                                 elif $test -f "$src/hints/${osname}.sh" ; then
3102                                         dflt="${osname}"
3103                                 else
3104                                         dflt=none
3105                                 fi
3106                                 ;;
3107                         esac
3108                         ;;
3109                 esac
3110                 if $test -f Policy.sh ; then
3111                         case "$dflt" in
3112                         *Policy*) ;;
3113                         none) dflt="Policy" ;;
3114                         *) dflt="Policy $dflt" ;;
3115                         esac
3116                 fi
3117                 ;;
3118         *)
3119                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3120                 ;;
3121         esac
3122
3123         if $test -f Policy.sh ; then
3124                 $cat <<EOM
3125
3126 There's also a Policy hint file available, which should make the
3127 site-specific (policy) questions easier to answer.
3128 EOM
3129
3130         fi
3131
3132         $cat <<EOM
3133
3134 You may give one or more space-separated answers, or "none" if appropriate.
3135 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3136 is a good thing.  DO NOT give a wrong version or a wrong OS.
3137
3138 EOM
3139
3140         rp="Which of these apply, if any?"
3141         . UU/myread
3142         tans=$ans
3143         for file in $tans; do
3144                 if $test X$file = XPolicy -a -f Policy.sh; then
3145                         . Policy.sh
3146                         $cat Policy.sh >> UU/config.sh
3147                 elif $test -f $src/hints/$file.sh; then
3148                         . $src/hints/$file.sh
3149                         $cat $src/hints/$file.sh >> UU/config.sh
3150                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3151                         : nothing
3152                 else
3153                         : Give one chance to correct a possible typo.
3154                         echo "$file.sh does not exist"
3155                         dflt=$file
3156                         rp="hint to use instead?"
3157                         . UU/myread
3158                         for file in $ans; do
3159                                 if $test -f "$src/hints/$file.sh"; then
3160                                         . $src/hints/$file.sh
3161                                         $cat $src/hints/$file.sh >> UU/config.sh
3162                                 elif $test X$ans = X -o X$ans = Xnone ; then
3163                                         : nothing
3164                                 else
3165                                         echo "$file.sh does not exist -- ignored."
3166                                 fi
3167                         done
3168                 fi
3169         done
3170
3171         hint=recommended
3172         : Remember our hint file for later.
3173         if $test -f "$src/hints/$file.sh" ; then
3174                 hintfile="$file"
3175         else
3176                 hintfile=''
3177         fi
3178 fi
3179 cd UU
3180 ;;
3181 *)
3182         echo " "
3183         echo "Fetching default answers from $config_sh..." >&4
3184         tmp_n="$n"
3185         tmp_c="$c"
3186         cd ..
3187         cp $config_sh config.sh 2>/dev/null
3188         chmod +w config.sh
3189         . ./config.sh
3190         cd UU
3191         cp ../config.sh .
3192         n="$tmp_n"
3193         c="$tmp_c"
3194         hint=previous
3195         ;;
3196 esac
3197 test "$override" && . ./optdef.sh
3198
3199 : Restore computed paths
3200 for file in $loclist $trylist; do
3201         eval $file="\$_$file"
3202 done
3203
3204 cat << EOM
3205
3206 Configure uses the operating system name and version to set some defaults.
3207 The default value is probably right if the name rings a bell. Otherwise,
3208 since spelling matters for me, either accept the default or answer "none"
3209 to leave it blank.
3210
3211 EOM
3212 case "$osname" in
3213         ''|' ')
3214                 case "$hintfile" in
3215                 ''|' '|none) dflt=none ;;
3216                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3217                 esac
3218                 ;;
3219         *) dflt="$osname" ;;
3220 esac
3221 rp="Operating system name?"
3222 . ./myread
3223 case "$ans" in
3224 none)  osname='' ;;
3225 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3226 esac
3227 echo " "
3228 case "$osvers" in
3229         ''|' ')
3230                 case "$hintfile" in
3231                 ''|' '|none) dflt=none ;;
3232                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3233                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3234                         case "$dflt" in
3235                         ''|' ') dflt=none ;;
3236                         esac
3237                         ;;
3238                 esac
3239                 ;;
3240         *) dflt="$osvers" ;;
3241 esac
3242 rp="Operating system version?"
3243 . ./myread
3244 case "$ans" in
3245 none)  osvers='' ;;
3246 *) osvers="$ans" ;;
3247 esac
3248
3249
3250 . ./posthint.sh
3251
3252 : who configured the system
3253 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3254 cf_by=`(logname) 2>/dev/null`
3255 case "$cf_by" in
3256 "")
3257         cf_by=`(whoami) 2>/dev/null`
3258         case "$cf_by" in
3259         "") cf_by=unknown ;;
3260         esac ;;
3261 esac
3262
3263 : set up the script used to warn in case of inconsistency
3264 cat <<EOS >whoa
3265 $startsh
3266 EOS
3267 cat <<'EOSC' >>whoa
3268 dflt=y
3269 echo " "
3270 echo "*** WHOA THERE!!! ***" >&4
3271 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3272 rp="    Keep the $hint value?"
3273 . ./myread
3274 case "$ans" in
3275 y) td=$was; tu=$was;;
3276 esac
3277 EOSC
3278
3279 : function used to set $1 to $val
3280 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3281 case "$val$was" in
3282 $define$undef) . ./whoa; eval "$var=\$td";;
3283 $undef$define) . ./whoa; eval "$var=\$tu";;
3284 *) eval "$var=$val";;
3285 esac'
3286
3287 case "$usethreads" in
3288 $define|true|[yY]*)     dflt='y';;
3289 *) dflt='n';;
3290 esac
3291 cat <<EOM
3292
3293 Perl can be built to take advantage of threads on some systems.
3294 To do so, Configure can be run with -Dusethreads.
3295
3296 Note that threading is a highly experimental feature, and
3297 some known race conditions still remain.  If you choose to try
3298 it, be very sure to not actually deploy it for production
3299 purposes.  README.threads has more details, and is required
3300 reading if you enable threads.
3301
3302 If this doesn't make any sense to you, just accept the default '$dflt'.
3303 EOM
3304 rp='Build a threading Perl?'
3305 . ./myread
3306 case "$ans" in
3307 y|Y)    val="$define" ;;
3308 *)      val="$undef" ;;
3309 esac
3310 set usethreads
3311 eval $setvar
3312
3313 case "$usethreads" in
3314 $define)
3315         $cat <<EOM
3316
3317 As of 5.5.640, Perl has two different internal threading implementations,
3318 the 5.005 version (5005threads) and an interpreter-based version
3319 (ithreads) that has one interpreter per thread.  Both are very 
3320 experimental.  This arrangement exists to help developers work out
3321 which one is better.
3322
3323 If you're a casual user, you probably don't want interpreter-threads
3324 at this time.  But if you do, the 'threads' module allows their use,
3325 and the 'Thread' module offers an interface to both 5005threads and
3326 ithreads (whichever has been configured).
3327 EOM
3328         : Default to ithreads unless overridden on command line or with
3329         : old config.sh
3330         dflt='y'
3331         case "$use5005threads" in
3332                 $define|true|[yY]*) dflt='n';;
3333         esac
3334         case "$useithreads" in
3335                 $undef|false|[nN]*) dflt='n';;
3336         esac
3337         rp='Use interpreter-based ithreads?'
3338         . ./myread
3339         case "$ans" in
3340         y|Y)    val="$define" ;;
3341         *)      val="$undef" ;;
3342         esac
3343         set useithreads
3344         eval $setvar
3345         : Now set use5005threads to the opposite value.
3346         case "$useithreads" in
3347         $define) val="$undef" ;;
3348         *) val="$define" ;;
3349         esac
3350         set use5005threads
3351         eval $setvar
3352         ;;
3353 *)
3354         useithreads="$undef"
3355         use5005threads="$undef"
3356         ;;
3357 esac
3358
3359 case "$useithreads$use5005threads" in
3360 "$define$define")
3361         $cat >&4 <<EOM
3362
3363 You cannot have both the ithreads and the 5.005 threads enabled
3364 at the same time.  Disabling the 5.005 threads since they are
3365 much less stable than the ithreads.
3366
3367 EOM
3368         use5005threads="$undef"
3369         ;;
3370 esac
3371
3372 case "$d_oldpthreads" in
3373 '')     : Configure tests would be welcome here.  For now, assume undef.
3374         val="$undef" ;;
3375 *)      val="$d_oldpthreads" ;;
3376 esac
3377 set d_oldpthreads
3378 eval $setvar
3379
3380
3381 case "$usethreads" in
3382 "$define"|true|[yY]*)
3383 : Look for a hint-file generated 'call-back-unit'.  If the
3384 : user has specified that a threading perl is to be built,
3385 : we may need to set or change some other defaults.
3386         if $test -f usethreads.cbu; then
3387                 echo "Your platform has some specific hints for threaded builds, using them..."
3388                 . ./usethreads.cbu
3389         else
3390                 $cat <<EOM
3391 (Your platform doesn't have any specific hints for threaded builds.
3392  Assuming POSIX threads, then.)
3393 EOM
3394         fi
3395         ;;
3396 esac
3397
3398 cat <<EOM
3399
3400 Perl can be built so that multiple Perl interpreters can coexist
3401 within the same Perl executable.
3402 EOM
3403
3404 case "$useithreads" in
3405 $define)
3406         cat <<EOM
3407 This multiple interpreter support is required for interpreter-based threads.
3408 EOM
3409         val="$define"
3410         ;;
3411 *)      case "$usemultiplicity" in
3412         $define|true|[yY]*)     dflt='y';;
3413         *) dflt='n';;
3414         esac
3415         echo " "
3416         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3417         rp='Build Perl for multiplicity?'
3418         . ./myread
3419         case "$ans" in
3420         y|Y)    val="$define" ;;
3421         *)      val="$undef" ;;
3422         esac
3423         ;;
3424 esac
3425 set usemultiplicity
3426 eval $setvar
3427
3428
3429 case "$usemorebits" in
3430 "$define"|true|[yY]*)
3431         use64bitint="$define"
3432         uselongdouble="$define"
3433         usemorebits="$define"
3434         ;;
3435 *)      usemorebits="$undef"
3436         ;;
3437 esac
3438
3439 : make some quick guesses about what we are up against
3440 echo " "
3441 $echo $n "Hmm...  $c"
3442 echo exit 1 >bsd
3443 echo exit 1 >usg
3444 echo exit 1 >v7
3445 echo exit 1 >osf1
3446 echo exit 1 >eunice
3447 echo exit 1 >xenix
3448 echo exit 1 >venix
3449 echo exit 1 >os2
3450 d_bsd="$undef"
3451 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3452 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3453 then
3454         echo "Looks kind of like an OSF/1 system, but we'll see..."
3455         echo exit 0 >osf1
3456 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3457         xxx=`./loc addbib blurfl $pth`
3458         if $test -f $xxx; then
3459         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3460                 echo exit 0 >bsd
3461                 echo exit 0 >usg
3462         else
3463                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3464                         echo "Looks kind of like an extended USG system, but we'll see..."
3465                 else
3466                         echo "Looks kind of like a USG system, but we'll see..."
3467                 fi
3468                 echo exit 0 >usg
3469         fi
3470 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3471         echo "Looks kind of like a BSD system, but we'll see..."
3472         d_bsd="$define"
3473         echo exit 0 >bsd
3474 else
3475         echo "Looks kind of like a Version 7 system, but we'll see..."
3476         echo exit 0 >v7
3477 fi
3478 case "$eunicefix" in
3479 *unixtovms*)
3480         $cat <<'EOI'
3481 There is, however, a strange, musty smell in the air that reminds me of
3482 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3483 EOI
3484         echo exit 0 >eunice
3485         d_eunice="$define"
3486 : it so happens the Eunice I know will not run shell scripts in Unix format
3487         ;;
3488 *)
3489         echo " "
3490         echo "Congratulations.  You aren't running Eunice."
3491         d_eunice="$undef"
3492         ;;
3493 esac
3494 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3495 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3496 : semicolon as a patch separator
3497 case "$p_" in
3498 :) ;;
3499 *)
3500         $cat <<'EOI'
3501 I have the feeling something is not exactly right, however...don't tell me...
3502 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3503 (Or you may be running DOS with DJGPP.)
3504 EOI
3505         echo exit 0 >os2
3506         ;;
3507 esac
3508 if test -f /xenix; then
3509         echo "Actually, this looks more like a XENIX system..."
3510         echo exit 0 >xenix
3511         d_xenix="$define"
3512 else
3513         echo " "
3514         echo "It's not Xenix..."
3515         d_xenix="$undef"
3516 fi
3517 chmod +x xenix
3518 $eunicefix xenix
3519 if test -f /venix; then
3520         echo "Actually, this looks more like a VENIX system..."
3521         echo exit 0 >venix
3522 else
3523         echo " "
3524         if ./xenix; then
3525                 : null
3526         else
3527                 echo "Nor is it Venix..."
3528         fi
3529 fi
3530 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3531 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3532 $rm -f foo
3533
3534 case "$cc" in
3535 '') dflt=cc;;
3536 *) dflt="$cc";;
3537 esac
3538 rp="Use which C compiler?"
3539 . ./myread
3540 cc="$ans"
3541 : Look for a hint-file generated 'call-back-unit'.  Now that the
3542 : user has specified the compiler, we may need to set or change some
3543 : other defaults.
3544 if $test -f cc.cbu; then
3545     . ./cc.cbu
3546 fi
3547 . ./checkcc
3548
3549 echo " "
3550 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3551 $cat >try.c <<EOM
3552 #include <stdio.h>
3553 int main() {
3554 #ifdef __GNUC__
3555 #ifdef __VERSION__
3556         printf("%s\n", __VERSION__);
3557 #else
3558         printf("%s\n", "1");
3559 #endif
3560 #endif
3561         exit(0);
3562 }
3563 EOM
3564 if $cc -o try $ccflags $ldflags try.c; then
3565         gccversion=`$run ./try`
3566         case "$gccversion" in
3567         '') echo "You are not using GNU cc." ;;
3568         *)  echo "You are using GNU cc $gccversion."
3569             ccname=gcc  
3570             ;;
3571         esac
3572 else
3573         echo " "
3574         echo "*** WHOA THERE!!! ***" >&4
3575         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3576         case "$knowitall" in
3577         '')
3578         echo "    You'd better start hunting for one and let me know about it." >&4
3579                 exit 1
3580                 ;;
3581         esac
3582 fi
3583 $rm -f try try.*
3584 case "$gccversion" in
3585 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3586 esac
3587 case "$gccversion" in
3588 '') gccosandvers='' ;;
3589 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3590    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3591    gccshortvers=''
3592    case "$gccosandvers" in
3593    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3594    $osname$osvers) ;; # looking good
3595    $osname*) cat <<EOM >&4
3596
3597 *** WHOA THERE!!! ***
3598
3599     Your gcc has not been compiled for the exact release of
3600     your operating system ($gccosandvers versus $osname$osvers).
3601
3602     In general it is a good idea to keep gcc synchronized with
3603     the operating system because otherwise serious problems
3604     may ensue when trying to compile software, like Perl.
3605
3606     I'm trying to be optimistic here, though, and will continue.
3607     If later during the configuration and build icky compilation
3608     problems appear (headerfile conflicts being the most common
3609     manifestation), I suggest reinstalling the gcc to match
3610     your operating system release.
3611
3612 EOM
3613       ;;
3614    *) gccosandvers='' ;; # failed to parse, better be silent
3615    esac
3616    ;;
3617 esac
3618 case "$ccname" in
3619 '') ccname="$cc" ;;
3620 esac
3621
3622
3623 : decide how portable to be.  Allow command line overrides.
3624 case "$d_portable" in
3625 "$undef") ;;
3626 *)      d_portable="$define" ;;
3627 esac
3628
3629 : set up shell script to do ~ expansion
3630 cat >filexp <<EOSS
3631 $startsh
3632 : expand filename
3633 case "\$1" in
3634  ~/*|~)
3635         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3636         ;;
3637  ~*)
3638         if $test -f /bin/csh; then
3639                 /bin/csh -f -c "glob \$1"
3640                 failed=\$?
3641                 echo ""
3642                 exit \$failed
3643         else
3644                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3645                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3646                 if $test ! -d "\$dir"; then
3647                         me=\`basename \$0\`
3648                         echo "\$me: can't locate home directory for: \$name" >&2
3649                         exit 1
3650                 fi
3651                 case "\$1" in
3652                 */*)
3653                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3654                         ;;
3655                 *)
3656                         echo \$dir
3657                         ;;
3658                 esac
3659         fi
3660         ;;
3661 *)
3662         echo \$1
3663         ;;
3664 esac
3665 EOSS
3666 chmod +x filexp
3667 $eunicefix filexp
3668
3669 : now set up to get a file name
3670 cat <<EOS >getfile
3671 $startsh
3672 EOS
3673 cat <<'EOSC' >>getfile
3674 tilde=''
3675 fullpath=''
3676 already=''
3677 skip=''
3678 none_ok=''
3679 exp_file=''
3680 nopath_ok=''
3681 orig_rp="$rp"
3682 orig_dflt="$dflt"
3683 case "$gfpth" in
3684 '') gfpth='.' ;;
3685 esac
3686
3687 case "$fn" in
3688 *\(*)
3689         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3690         fn=`echo $fn | sed 's/(.*)//'`
3691         ;;
3692 esac
3693
3694 case "$fn" in
3695 *:*)
3696         loc_file=`expr $fn : '.*:\(.*\)'`
3697         fn=`expr $fn : '\(.*\):.*'`
3698         ;;
3699 esac
3700
3701 case "$fn" in
3702 *~*) tilde=true;;
3703 esac
3704 case "$fn" in
3705 */*) fullpath=true;;
3706 esac
3707 case "$fn" in
3708 *+*) skip=true;;
3709 esac
3710 case "$fn" in
3711 *n*) none_ok=true;;
3712 esac
3713 case "$fn" in
3714 *e*) exp_file=true;;
3715 esac
3716 case "$fn" in
3717 *p*) nopath_ok=true;;
3718 esac
3719
3720 case "$fn" in
3721 *f*) type='File';;
3722 *d*) type='Directory';;
3723 *l*) type='Locate';;
3724 esac
3725
3726 what="$type"
3727 case "$what" in
3728 Locate) what='File';;
3729 esac
3730
3731 case "$exp_file" in
3732 '')
3733         case "$d_portable" in
3734         "$define") ;;
3735         *) exp_file=true;;
3736         esac
3737         ;;
3738 esac
3739
3740 cd ..
3741 while test "$type"; do
3742         redo=''
3743         rp="$orig_rp"
3744         dflt="$orig_dflt"
3745         case "$tilde" in
3746         true) rp="$rp (~name ok)";;
3747         esac
3748         . UU/myread
3749         if test -f UU/getfile.ok && \
3750                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3751         then
3752                 value="$ans"
3753                 ansexp="$ans"
3754                 break
3755         fi
3756         case "$ans" in
3757         none)
3758                 value=''
3759                 ansexp=''
3760                 case "$none_ok" in
3761                 true) type='';;
3762                 esac
3763                 ;;
3764         *)
3765                 case "$tilde" in
3766                 '') value="$ans"
3767                         ansexp="$ans";;
3768                 *)
3769                         value=`UU/filexp $ans`
3770                         case $? in
3771                         0)
3772                                 if test "$ans" != "$value"; then
3773                                         echo "(That expands to $value on this system.)"
3774                                 fi
3775                                 ;;
3776                         *) value="$ans";;
3777                         esac
3778                         ansexp="$value"
3779                         case "$exp_file" in
3780                         '') value="$ans";;
3781                         esac
3782                         ;;
3783                 esac
3784                 case "$fullpath" in
3785                 true)
3786                         case "$ansexp" in
3787                         /*) value="$ansexp" ;;
3788                         [a-zA-Z]:/*) value="$ansexp" ;;
3789                         *)
3790                                 redo=true
3791                                 case "$already" in
3792                                 true)
3793                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3794                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3795                                         ;;
3796                                 *)
3797                                 echo "Please give a full path name, starting with slash." >&4
3798                                         case "$tilde" in
3799                                         true)
3800                                 echo "Note that using ~name is ok provided it expands well." >&4
3801                                                 already=true
3802                                                 ;;
3803                                         esac
3804                                 esac
3805                                 ;;
3806                         esac
3807                         ;;
3808                 esac
3809                 case "$redo" in
3810                 '')
3811                         case "$type" in
3812                         File)
3813                                 for fp in $gfpth; do
3814                                         if test "X$fp" = X.; then
3815                                             pf="$ansexp"
3816                                         else    
3817                                             pf="$fp/$ansexp"
3818                                         fi
3819                                         if test -f "$pf"; then
3820                                                 type=''
3821                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3822                                         then
3823                                                 echo "($value is not a plain file, but that's ok.)"
3824                                                 type=''
3825                                         fi
3826                                         if test X"$type" = X; then
3827                                             value="$pf"
3828                                             break
3829                                         fi
3830                                 done
3831                                 ;;
3832                         Directory)
3833                                 for fp in $gfpth; do
3834                                         if test "X$fp" = X.; then
3835                                             dir="$ans"
3836                                             direxp="$ansexp"
3837                                         else    
3838                                             dir="$fp/$ansexp"
3839                                             direxp="$fp/$ansexp"
3840                                         fi
3841                                         if test -d "$direxp"; then
3842                                                 type=''
3843                                                 value="$dir"
3844                                                 break
3845                                         fi
3846                                 done
3847                                 ;;
3848                         Locate)
3849                                 if test -d "$ansexp"; then
3850                                         echo "(Looking for $loc_file in directory $value.)"
3851                                         value="$value/$loc_file"
3852                                         ansexp="$ansexp/$loc_file"
3853                                 fi
3854                                 if test -f "$ansexp"; then
3855                                         type=''
3856                                 fi
3857                                 case "$nopath_ok" in
3858                                 true)   case "$value" in
3859                                         */*) ;;
3860                                         *)      echo "Assuming $value will be in people's path."
3861                                                 type=''
3862                                                 ;;
3863                                         esac
3864                                         ;;
3865                                 esac
3866                                 ;;
3867                         esac
3868
3869                         case "$skip" in
3870                         true) type='';
3871                         esac
3872
3873                         case "$type" in
3874                         '') ;;
3875                         *)
3876                                 if test "$fastread" = yes; then
3877                                         dflt=y
3878                                 else
3879                                         dflt=n
3880                                 fi
3881                                 rp="$what $value doesn't exist.  Use that name anyway?"
3882                                 . UU/myread
3883                                 dflt=''
3884                                 case "$ans" in
3885                                 y*) type='';;
3886                                 *) echo " ";;
3887                                 esac
3888                                 ;;
3889                         esac
3890                         ;;
3891                 esac
3892                 ;;
3893         esac
3894 done
3895 cd UU
3896 ans="$value"
3897 rp="$orig_rp"
3898 dflt="$orig_dflt"
3899 rm -f getfile.ok
3900 test "X$gfpthkeep" != Xy && gfpth=""
3901 EOSC
3902
3903 : What should the include directory be ?
3904 echo " "
3905 $echo $n "Hmm...  $c"
3906 dflt='/usr/include'
3907 incpath=''
3908 mips_type=''
3909 if $test -f /bin/mips && /bin/mips; then
3910         echo "Looks like a MIPS system..."
3911         $cat >usr.c <<'EOCP'
3912 #ifdef SYSTYPE_BSD43
3913 /bsd43
3914 #endif
3915 EOCP
3916         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3917                 dflt='/bsd43/usr/include'
3918                 incpath='/bsd43'
3919                 mips_type='BSD 4.3'
3920         else
3921                 mips_type='System V'
3922         fi
3923         $rm -f usr.c usr.out
3924         echo "and you're compiling with the $mips_type compiler and libraries."
3925         xxx_prompt=y
3926         echo "exit 0" >mips
3927 else
3928         echo "Doesn't look like a MIPS system."
3929         xxx_prompt=n
3930         echo "exit 1" >mips
3931 fi
3932 chmod +x mips
3933 $eunicefix mips
3934 case "$usrinc" in
3935 '') ;;
3936 *) dflt="$usrinc";;
3937 esac
3938 case "$xxx_prompt" in
3939 y)      fn=d/
3940         echo " "
3941         rp='Where are the include files you want to use?'
3942         . ./getfile
3943         usrinc="$ans"
3944         ;;
3945 *)      usrinc="$dflt"
3946         ;;
3947 esac
3948
3949 : see how we invoke the C preprocessor
3950 echo " "
3951 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3952 cat <<'EOT' >testcpp.c
3953 #define ABC abc
3954 #define XYZ xyz
3955 ABC.XYZ
3956 EOT
3957 cd ..
3958 if test ! -f cppstdin; then
3959         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3960                 # AIX cc -E doesn't show the absolute headerfile
3961                 # locations but we'll cheat by using the -M flag.
3962                 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
3963         else
3964                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3965         fi
3966 else
3967         echo "Keeping your $hint cppstdin wrapper."
3968 fi
3969 chmod 755 cppstdin
3970 wrapper=`pwd`/cppstdin
3971 ok='false'
3972 cd UU
3973
3974 if $test "X$cppstdin" != "X" && \
3975         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3976         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3977 then
3978         echo "You used to use $cppstdin $cppminus so we'll use that again."
3979         case "$cpprun" in
3980         '') echo "But let's see if we can live without a wrapper..." ;;
3981         *)
3982                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3983                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3984                 then
3985                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3986                         ok='true'
3987                 else
3988                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3989                 fi
3990                 ;;
3991         esac
3992 else
3993         case "$cppstdin" in
3994         '') ;;
3995         *)
3996                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3997                 ;;
3998         esac
3999 fi
4000
4001 if $ok; then
4002         : nothing
4003 elif echo '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"' -E -" will work...'; \
4010         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4011         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4012         echo "Yup, it does."
4013         x_cpp="$cc -E"
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 "Yipee, that works!"
4019         x_cpp="$cc -P"
4020         x_minus='';
4021 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4022         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4023         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4024         echo "At long last!"
4025         x_cpp="$cc -P"
4026         x_minus='-';
4027 elif echo 'No such luck, 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 "It works!"
4031         x_cpp="$cpp"
4032         x_minus='';
4033 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4034         $cpp - <testcpp.c >testcpp.out 2>&1; \
4035         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4036         echo "Hooray, it works!  I was beginning to wonder."
4037         x_cpp="$cpp"
4038         x_minus='-';
4039 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4040         $wrapper <testcpp.c >testcpp.out 2>&1; \
4041         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4042         x_cpp="$wrapper"
4043         x_minus=''
4044         echo "Eureka!"
4045 else
4046         dflt=''
4047         rp="No dice.  I can't find a C preprocessor.  Name one:"
4048         . ./myread
4049         x_cpp="$ans"
4050         x_minus=''
4051         $x_cpp <testcpp.c >testcpp.out 2>&1
4052         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4053                 echo "OK, that will do." >&4
4054         else
4055 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4056                 exit 1
4057         fi
4058 fi
4059
4060 case "$ok" in
4061 false)
4062         cppstdin="$x_cpp"
4063         cppminus="$x_minus"
4064         cpprun="$x_cpp"
4065         cpplast="$x_minus"
4066         set X $x_cpp
4067         shift
4068         case "$1" in
4069         "$cpp")
4070                 echo "Perhaps can we force $cc -E using a wrapper..."
4071                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4072                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4073                 then
4074                         echo "Yup, we can."
4075                         cppstdin="$wrapper"
4076                         cppminus='';
4077                 else
4078                         echo "Nope, we'll have to live without it..."
4079                 fi
4080                 ;;
4081         esac
4082         case "$cpprun" in
4083         "$wrapper")
4084                 cpprun=''
4085                 cpplast=''
4086                 ;;
4087         esac
4088         ;;
4089 esac
4090
4091 case "$cppstdin" in
4092 "$wrapper"|'cppstdin') ;;
4093 *) $rm -f $wrapper;;
4094 esac
4095 $rm -f testcpp.c testcpp.out
4096
4097 : Set private lib path
4098 case "$plibpth" in
4099 '') if ./mips; then
4100                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4101         fi;;
4102 esac
4103 case "$libpth" in
4104 ' ') dlist='';;
4105 '') dlist="$loclibpth $plibpth $glibpth";;
4106 *) dlist="$libpth";;
4107 esac
4108
4109 : Now check and see which directories actually exist, avoiding duplicates
4110 libpth=''
4111 for xxx in $dlist
4112 do
4113     if $test -d $xxx; then
4114                 case " $libpth " in
4115                 *" $xxx "*) ;;
4116                 *) libpth="$libpth $xxx";;
4117                 esac
4118     fi
4119 done
4120 $cat <<'EOM'
4121
4122 Some systems have incompatible or broken versions of libraries.  Among
4123 the directories listed in the question below, please remove any you
4124 know not to be holding relevant libraries, and add any that are needed.
4125 Say "none" for none.
4126
4127 EOM
4128 case "$libpth" in
4129 '') dflt='none';;
4130 *)
4131         set X $libpth
4132         shift
4133         dflt=${1+"$@"}
4134         ;;
4135 esac
4136 rp="Directories to use for library searches?"
4137 . ./myread
4138 case "$ans" in
4139 none) libpth=' ';;
4140 *) libpth="$ans";;
4141 esac
4142
4143 : compute shared library extension
4144 case "$so" in
4145 '')
4146         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4147                 dflt='sl'
4148         else
4149                 dflt='so'
4150         fi
4151         ;;
4152 *) dflt="$so";;
4153 esac
4154 $cat <<EOM
4155
4156 On some systems, shared libraries may be available.  Answer 'none' if
4157 you want to suppress searching of shared libraries for the remainder
4158 of this configuration.
4159
4160 EOM
4161 rp='What is the file extension used for shared libraries?'
4162 . ./myread
4163 so="$ans"
4164
4165 : Define several unixisms.
4166 : Hints files or command line option can be used to override them.
4167 : The convoluted testing is in case hints files set either the old
4168 : or the new name.
4169 case "$_exe" in
4170 '')     case "$exe_ext" in
4171         '')     ;;
4172         *)      _exe="$exe_ext" ;;
4173         esac
4174         ;;
4175 esac
4176 case "$_a" in
4177 '')     case "$lib_ext" in
4178     '') _a='.a';;
4179         *)      _a="$lib_ext" ;;
4180         esac
4181         ;;
4182 esac
4183 case "$_o" in
4184 '') case "$obj_ext" in
4185         '')     _o='.o';;
4186         *)      _o="$obj_ext";;
4187         esac
4188         ;;
4189 esac
4190 case "$p_" in
4191 '') case "$path_sep" in
4192         '')     p_=':';;
4193         *)      p_="$path_sep";;
4194         esac
4195         ;;
4196 esac
4197 exe_ext=$_exe
4198 lib_ext=$_a
4199 obj_ext=$_o
4200 path_sep=$p_
4201
4202 : Which makefile gets called first.  This is used by make depend.
4203 case "$firstmakefile" in
4204 '') firstmakefile='makefile';;
4205 esac
4206
4207 case "$usesocks" in
4208 $define|true|[yY]*)     dflt='y';;
4209 *) dflt='n';;
4210 esac
4211 cat <<EOM
4212
4213 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4214 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4215 to use the PerlIO abstraction layer, this will be implicitly selected.
4216
4217 If this doesn't make any sense to you, just accept the default '$dflt'.
4218 EOM
4219 rp='Build Perl for SOCKS?'
4220 . ./myread
4221 case "$ans" in
4222 y|Y)    val="$define" ;;     
4223 *)      val="$undef" ;;
4224 esac
4225 set usesocks
4226 eval $setvar
4227
4228 case "$usesocks" in
4229 $define|true|[yY]*) useperlio="$define";;
4230 esac
4231
4232 : Looking for optional libraries
4233 echo " "
4234 echo "Checking for optional libraries..." >&4
4235 case "$libs" in
4236 ' '|'') dflt='';;
4237 *) dflt="$libs";;
4238 esac
4239 case "$libswanted" in
4240 '') libswanted='c_s';;
4241 esac
4242 case "$usesocks" in
4243 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4244 esac
4245 libsfound=''
4246 libsfiles=''
4247 libsdirs=''
4248 libspath=''
4249 for thisdir in $libpth $xlibpth; do
4250   test -d $thisdir && libspath="$libspath $thisdir"
4251 done
4252 for thislib in $libswanted; do
4253         for thisdir in $libspath; do
4254             xxx=''
4255             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4256                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4257                 $test -f "$xxx" && eval $libscheck
4258                 $test -f "$xxx" && libstyle=shared
4259             fi
4260             if test ! -f "$xxx"; then
4261                 xxx=$thisdir/lib$thislib.$so
4262                 $test -f "$xxx" && eval $libscheck
4263                 $test -f "$xxx" && libstyle=shared
4264             fi  
4265             if test ! -f "$xxx"; then
4266                 xxx=$thisdir/lib$thislib$_a
4267                 $test -f "$xxx" && eval $libscheck
4268                 $test -f "$xxx" && libstyle=static
4269             fi
4270             if test ! -f "$xxx"; then
4271                 xxx=$thisdir/$thislib$_a
4272                 $test -f "$xxx" && eval $libscheck
4273                 $test -f "$xxx" && libstyle=static
4274             fi
4275             if test ! -f "$xxx"; then
4276                 xxx=$thisdir/lib${thislib}_s$_a
4277                 $test -f "$xxx" && eval $libscheck
4278                 $test -f "$xxx" && libstyle=static
4279                 $test -f "$xxx" && thislib=${thislib}_s
4280             fi
4281             if test ! -f "$xxx"; then
4282                 xxx=$thisdir/Slib$thislib$_a
4283                 $test -f "$xxx" && eval $libscheck
4284                 $test -f "$xxx" && libstyle=static
4285             fi
4286             if $test -f "$xxx"; then
4287                 case "$libstyle" in
4288                 shared) echo "Found -l$thislib (shared)." ;;
4289                 static) echo "Found -l$thislib." ;;
4290                 *)      echo "Found -l$thislib ($libstyle)." ;;
4291                 esac
4292                 case " $dflt " in
4293                 *"-l$thislib "*);;
4294                 *) dflt="$dflt -l$thislib"
4295                    libsfound="$libsfound $xxx"
4296                    yyy=`basename $xxx`
4297                    libsfiles="$libsfiles $yyy"
4298                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4299                    case " $libsdirs " in
4300                    *" $yyy "*) ;;
4301                    *) libsdirs="$libsdirs $yyy" ;;
4302                    esac
4303                    ;;
4304                 esac
4305                 break
4306             fi  
4307         done
4308         if $test ! -f "$xxx"; then
4309             echo "No -l$thislib."
4310         fi
4311 done
4312 set X $dflt
4313 shift
4314 dflt="$*"
4315 case "$libs" in
4316 '') dflt="$dflt";;
4317 *) dflt="$libs";;
4318 esac
4319 case "$dflt" in
4320 ' '|'') dflt='none';;
4321 esac
4322
4323 $cat <<EOM
4324
4325 In order to compile $package on your machine, a number of libraries
4326 are usually needed.  Include any other special libraries here as well.
4327 Say "none" for none.  The default list is almost always right.
4328 EOM
4329
4330 echo " "
4331 rp="What libraries to use?"
4332 . ./myread
4333 case "$ans" in
4334 none) libs=' ';;
4335 *) libs="$ans";;
4336 esac
4337
4338 : determine optimization, if desired, or use for debug flag also
4339 case "$optimize" in
4340 ' '|$undef) dflt='none';;
4341 '') dflt='-O';;
4342 *) dflt="$optimize";;
4343 esac
4344 $cat <<EOH
4345
4346 By default, $package compiles with the -O flag to use the optimizer.
4347 Alternately, you might want to use the symbolic debugger, which uses
4348 the -g flag (on traditional Unix systems).  Either flag can be
4349 specified here.  To use neither flag, specify the word "none".
4350
4351 EOH
4352 rp="What optimizer/debugger flag should be used?"
4353 . ./myread
4354 optimize="$ans"
4355 case "$optimize" in
4356 'none') optimize=" ";;
4357 esac
4358
4359 dflt=''
4360 : We will not override a previous value, but we might want to
4361 : augment a hint file
4362 case "$hint" in
4363 default|recommended)
4364         case "$gccversion" in
4365         1*) dflt='-fpcc-struct-return' ;;
4366         esac
4367         case "$optimize" in
4368         *-g*) dflt="$dflt -DDEBUGGING";;
4369         esac
4370         case "$gccversion" in
4371         2*) if test -d /etc/conf/kconfig.d &&
4372                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4373                 then
4374                         dflt="$dflt -posix"
4375                 fi
4376                 ;;
4377         esac
4378         case "$gccversion" in
4379         1*) ;;
4380         2.[0-8]*) ;;
4381         ?*)     echo " "
4382                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4383                 echo 'int main(void) { return 0; }' > gcctest.c
4384                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4385                         echo "Yes, it does." 2>&1
4386                         case "$ccflags" in
4387                         *strict-aliasing*) 
4388                                 echo "Leaving current flags $ccflags alone." 2>&1
4389                                 ;;
4390                         *) dflt="$dflt -fno-strict-aliasing" ;;
4391                         esac
4392                 else
4393                         echo "Nope, it doesn't, but that's ok." 2>&1
4394                 fi
4395                 ;;
4396         esac
4397         ;;
4398 esac
4399
4400 case "$mips_type" in
4401 *BSD*|'') inclwanted="$locincpth $usrinc";;
4402 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4403 esac
4404 for thisincl in $inclwanted; do
4405         if $test -d $thisincl; then
4406                 if $test x$thisincl != x$usrinc; then
4407                         case "$dflt" in
4408                         *" -I$thisincl "*);;
4409                         *) dflt="$dflt -I$thisincl ";;
4410                         esac
4411                 fi
4412         fi
4413 done
4414
4415 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4416         xxx=true;
4417 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4418         xxx=true;
4419 else
4420         xxx=false;
4421 fi;
4422 if $xxx; then
4423         case "$dflt" in
4424         *$2*);;
4425         *) dflt="$dflt -D$2";;
4426         esac;
4427 fi'
4428
4429 set signal.h LANGUAGE_C; eval $inctest
4430
4431 case "$usesocks" in
4432 $define)
4433         ccflags="$ccflags -DSOCKS"
4434         ;;
4435 esac
4436
4437 case "$hint" in
4438 default|recommended) dflt="$ccflags $dflt" ;;
4439 *) dflt="$ccflags";;
4440 esac
4441
4442 case "$dflt" in
4443 ''|' ') dflt=none;;
4444 esac
4445
4446 $cat <<EOH
4447
4448 Your C compiler may want other flags.  For this question you should include
4449 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4450 but you should NOT include libraries or ld flags like -lwhatever.  If you
4451 want $package to honor its debug switch, you should include -DDEBUGGING here.
4452 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4453
4454 To use no flags, specify the word "none".
4455
4456 EOH
4457 set X $dflt
4458 shift
4459 dflt=${1+"$@"}
4460 rp="Any additional cc flags?"
4461 . ./myread
4462 case "$ans" in
4463 none) ccflags='';;
4464 *) ccflags="$ans";;
4465 esac
4466
4467 : the following weeds options from ccflags that are of no interest to cpp
4468 case "$cppflags" in
4469 '') cppflags="$ccflags" ;;
4470 *)  cppflags="$cppflags $ccflags" ;;
4471 esac
4472 case "$gccversion" in
4473 1*) cppflags="$cppflags -D__GNUC__"
4474 esac
4475 case "$mips_type" in
4476 '');;
4477 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4478 esac
4479 case "$cppflags" in
4480 '');;
4481 *)
4482         echo " "
4483         echo "Let me guess what the preprocessor flags are..." >&4
4484         set X $cppflags
4485         shift
4486         cppflags=''
4487         $cat >cpp.c <<'EOM'
4488 #define BLURFL foo
4489
4490 BLURFL xx LFRULB
4491 EOM
4492         previous=''
4493         for flag in $*
4494         do
4495                 case "$flag" in
4496                 -*) ftry="$flag";;
4497                 *) ftry="$previous $flag";;
4498                 esac
4499                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4500                         >cpp1.out 2>/dev/null && \
4501                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4502                         >cpp2.out 2>/dev/null && \
4503                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4504                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4505                 then
4506                         cppflags="$cppflags $ftry"
4507                         previous=''
4508                 else
4509                         previous="$flag"
4510                 fi
4511         done
4512         set X $cppflags
4513         shift
4514         cppflags=${1+"$@"}
4515         case "$cppflags" in
4516         *-*)  echo "They appear to be: $cppflags";;
4517         esac
4518         $rm -f cpp.c cpp?.out
4519         ;;
4520 esac
4521
4522 : flags used in final linking phase
4523 case "$ldflags" in
4524 '') if ./venix; then
4525                 dflt='-i -z'
4526         else
4527                 dflt=''
4528         fi
4529         case "$ccflags" in
4530         *-posix*) dflt="$dflt -posix" ;;
4531         esac
4532         ;;
4533 *) dflt="$ldflags";;
4534 esac
4535
4536 : Try to guess additional flags to pick up local libraries.
4537 for thislibdir in $libpth; do
4538         case " $loclibpth " in
4539         *" $thislibdir "*)
4540                 case "$dflt " in 
4541                 *"-L$thislibdir "*) ;;
4542                 *)  dflt="$dflt -L$thislibdir" ;;
4543                 esac
4544                 ;;
4545         esac
4546 done
4547
4548 case "$dflt" in
4549 '') dflt='none' ;;
4550 esac
4551
4552 $cat <<EOH
4553
4554 Your C linker may need flags.  For this question you should
4555 include -L/whatever and any other flags used by the C linker, but you
4556 should NOT include libraries like -lwhatever.
4557
4558 Make sure you include the appropriate -L/path flags if your C linker
4559 does not normally search all of the directories you specified above,
4560 namely
4561         $libpth
4562 To use no flags, specify the word "none".
4563
4564 EOH
4565
4566 rp="Any additional ld flags (NOT including libraries)?"
4567 . ./myread
4568 case "$ans" in
4569 none) ldflags='';;
4570 *) ldflags="$ans";;
4571 esac
4572 rmlist="$rmlist pdp11"
4573
4574 : coherency check
4575 echo " "
4576 echo "Checking your choice of C compiler and flags for coherency..." >&4
4577 $cat > try.c <<'EOF'
4578 #include <stdio.h>
4579 int main() { printf("Ok\n"); exit(0); }
4580 EOF
4581 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4582 shift
4583 $cat >try.msg <<'EOM'
4584 I've tried to compile and run the following simple program:
4585
4586 EOM
4587 $cat try.c >> try.msg
4588
4589 $cat >> try.msg <<EOM
4590
4591 I used the command:
4592
4593         $*
4594         $run ./try
4595
4596 and I got the following output:
4597
4598 EOM
4599 dflt=y
4600 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4601         if $sh -c "$run ./try" >>try.msg 2>&1; then
4602                 xxx=`$run ./try`
4603                 case "$xxx" in
4604                 "Ok") dflt=n ;;
4605                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4606                         case " $libs " in
4607                         *" -lsfio "*)
4608                                 cat >> try.msg <<'EOQS'
4609 If $libs contains -lsfio, and sfio is mis-configured, then it
4610 sometimes (apparently) runs and exits with a 0 status, but with no
4611 output!  It may have to do with sfio's use of _exit vs. exit.
4612
4613 EOQS
4614                                 rp="You have a big problem.  Shall I abort Configure"
4615                                 dflt=y
4616                                 ;;
4617                         esac
4618                         ;;
4619                 esac
4620         else
4621                 echo "The program compiled OK, but exited with status $?." >>try.msg
4622                 rp="You have a problem.  Shall I abort Configure"
4623                 dflt=y
4624         fi
4625 else
4626         echo "I can't compile the test program." >>try.msg
4627         rp="You have a BIG problem.  Shall I abort Configure"
4628         dflt=y
4629 fi
4630 case "$dflt" in
4631 y)
4632         $cat try.msg >&4
4633         case "$knowitall" in
4634         '')
4635                 echo "(The supplied flags or libraries might be incorrect.)"
4636                 ;;
4637         *) dflt=n;;
4638         esac
4639         echo " "
4640         . ./myread
4641         case "$ans" in
4642         n*|N*) ;;
4643         *)      echo "Ok.  Stopping Configure." >&4
4644                 exit 1
4645                 ;;
4646         esac
4647         ;;
4648 n) echo "OK, that should do.";;
4649 esac
4650 $rm -f try try.* core
4651
4652 : define a shorthand compile call
4653 compile='
4654 mc_file=$1;
4655 shift;
4656 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4657 : define a shorthand compile call for compilations that should be ok.
4658 compile_ok='
4659 mc_file=$1;
4660 shift;
4661 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4662
4663 : check for lengths of integral types
4664 echo " "
4665 case "$intsize" in
4666 '')
4667         echo "Checking to see how big your integers are..." >&4
4668         $cat >try.c <<'EOCP'
4669 #include <stdio.h>
4670 int main()
4671 {
4672         printf("intsize=%d;\n", (int)sizeof(int));
4673         printf("longsize=%d;\n", (int)sizeof(long));
4674         printf("shortsize=%d;\n", (int)sizeof(short));
4675         exit(0);
4676 }
4677 EOCP
4678         set try
4679         if eval $compile_ok && $run ./try > /dev/null; then
4680                 eval `$run ./try`
4681                 echo "Your integers are $intsize bytes long."
4682                 echo "Your long integers are $longsize bytes long."
4683                 echo "Your short integers are $shortsize bytes long."
4684         else
4685                 $cat >&4 <<EOM
4686 !
4687 Help! I can't compile and run the intsize test program: please enlighten me!
4688 (This is probably a misconfiguration in your system or libraries, and
4689 you really ought to fix it.  Still, I'll try anyway.)
4690 !
4691 EOM
4692                 dflt=4
4693                 rp="What is the size of an integer (in bytes)?"
4694                 . ./myread
4695                 intsize="$ans"
4696                 dflt=$intsize
4697                 rp="What is the size of a long integer (in bytes)?"
4698                 . ./myread
4699                 longsize="$ans"
4700                 dflt=2
4701                 rp="What is the size of a short integer (in bytes)?"
4702                 . ./myread
4703                 shortsize="$ans"
4704         fi
4705         ;;
4706 esac
4707 $rm -f try try.*
4708
4709 : check for void type
4710 echo " "
4711 echo "Checking to see how well your C compiler groks the void type..." >&4
4712 case "$voidflags" in
4713 '')
4714         $cat >try.c <<'EOCP'
4715 #if TRY & 1
4716 void sub() {
4717 #else
4718 sub() {
4719 #endif
4720         extern void moo();      /* function returning void */
4721         void (*goo)();          /* ptr to func returning void */
4722 #if TRY & 8
4723         void *hue;              /* generic ptr */
4724 #endif
4725 #if TRY & 2
4726         void (*foo[10])();
4727 #endif
4728
4729 #if TRY & 4
4730         if(goo == moo) {
4731                 exit(0);
4732         }
4733 #endif
4734         exit(0);
4735 }
4736 int main() { sub(); }
4737 EOCP
4738         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4739                 voidflags=$defvoidused
4740         echo "Good.  It appears to support void to the level $package wants.">&4
4741                 if $contains warning .out >/dev/null 2>&1; then
4742                         echo "However, you might get some warnings that look like this:"
4743                         $cat .out
4744                 fi
4745         else
4746 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4747                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4748                         echo "It supports 1..."
4749                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4750                                 echo "It also supports 2..."
4751                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4752                                         voidflags=7
4753                                         echo "And it supports 4 but not 8 definitely."
4754                                 else
4755                                         echo "It doesn't support 4..."
4756                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4757                                                 voidflags=11
4758                                                 echo "But it supports 8."
4759                                         else
4760                                                 voidflags=3
4761                                                 echo "Neither does it support 8."
4762                                         fi
4763                                 fi
4764                         else
4765                                 echo "It does not support 2..."
4766                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4767                                         voidflags=13
4768                                         echo "But it supports 4 and 8."
4769                                 else
4770                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4771                                                 voidflags=5
4772                                                 echo "And it supports 4 but has not heard about 8."
4773                                         else
4774                                                 echo "However it supports 8 but not 4."
4775                                         fi
4776                                 fi
4777                         fi
4778                 else
4779                         echo "There is no support at all for void."
4780                         voidflags=0
4781                 fi
4782         fi
4783 esac
4784 case "$voidflags" in
4785 "$defvoidused") ;;
4786 *)      $cat >&4 <<'EOM'
4787   Support flag bits are:
4788     1: basic void declarations.
4789     2: arrays of pointers to functions returning void.
4790     4: operations between pointers to and addresses of void functions.
4791     8: generic void pointers.
4792 EOM
4793         dflt="$voidflags";
4794         rp="Your void support flags add up to what?"
4795         . ./myread
4796         voidflags="$ans"
4797         ;;
4798 esac
4799 $rm -f try.* .out
4800
4801 : check for length of pointer
4802 echo " "
4803 case "$ptrsize" in
4804 '')
4805         echo "Checking to see how big your pointers are..." >&4
4806         if test "$voidflags" -gt 7; then
4807                 echo '#define VOID_PTR char *' > try.c
4808         else
4809                 echo '#define VOID_PTR void *' > try.c
4810         fi
4811         $cat >>try.c <<'EOCP'
4812 #include <stdio.h>
4813 int main()
4814 {
4815     printf("%d\n", (int)sizeof(VOID_PTR));
4816     exit(0);
4817 }
4818 EOCP
4819         set try
4820         if eval $compile_ok; then
4821                 ptrsize=`$run ./try`
4822                 echo "Your pointers are $ptrsize bytes long."
4823         else
4824                 dflt='4'
4825                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4826                 rp="What is the size of a pointer (in bytes)?"
4827                 . ./myread
4828                 ptrsize="$ans"
4829         fi
4830         ;;
4831 esac
4832 $rm -f try.c try
4833
4834 : check for long long
4835 echo " "
4836 echo "Checking to see if you have long long..." >&4
4837 echo 'int main() { long long x = 7; return 0; }' > try.c
4838 set try
4839 if eval $compile; then
4840         val="$define"
4841         echo "You have long long."
4842 else
4843         val="$undef"
4844         echo "You do not have long long."
4845 fi
4846 $rm try.*
4847 set d_longlong
4848 eval $setvar
4849
4850 : check for length of long long
4851 case "${d_longlong}${longlongsize}" in
4852 $define)
4853         echo " "
4854         echo "Checking to see how big your long longs are..." >&4
4855         $cat >try.c <<'EOCP'
4856 #include <stdio.h>
4857 int main()
4858 {
4859     printf("%d\n", (int)sizeof(long long));
4860     return(0);
4861 }
4862 EOCP
4863         set try
4864         if eval $compile_ok; then
4865                 longlongsize=`$run ./try`
4866                 echo "Your long longs are $longlongsize bytes long."
4867         else
4868                 dflt='8'
4869                 echo " "
4870                 echo "(I can't seem to compile the test program.  Guessing...)"
4871                 rp="What is the size of a long long (in bytes)?"
4872                 . ./myread
4873                 longlongsize="$ans"
4874         fi
4875         if $test "X$longsize" = "X$longlongsize"; then
4876                 echo "(That isn't any different from an ordinary long.)"
4877         fi      
4878         ;;
4879 esac
4880 $rm -f try.* try
4881
4882 : determine filename position in cpp output
4883 echo " "
4884 echo "Computing filename position in cpp output for #include directives..." >&4
4885 case "$osname" in
4886 vos) testaccess=-e ;;
4887 *)   testaccess=-r ;;
4888 esac
4889 echo '#include <stdio.h>' > foo.c
4890 $cat >fieldn <<EOF
4891 $startsh
4892 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4893 $grep '^[       ]*#.*stdio\.h' | \
4894 while read cline; do
4895         pos=1
4896         set \$cline
4897         while $test \$# -gt 0; do
4898                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4899                         echo "\$pos"
4900                         exit 0
4901                 fi
4902                 shift
4903                 pos=\`expr \$pos + 1\`
4904         done
4905 done
4906 EOF
4907 chmod +x fieldn
4908 fieldn=`./fieldn`
4909 $rm -f foo.c fieldn
4910 case $fieldn in
4911 '') pos='???';;
4912 1) pos=first;;
4913 2) pos=second;;
4914 3) pos=third;;
4915 *) pos="${fieldn}th";;
4916 esac
4917 echo "Your cpp writes the filename in the $pos field of the line."
4918
4919 case "$osname" in
4920 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4921 *)   cppfilter='' ;;
4922 esac
4923 : locate header file
4924 $cat >findhdr <<EOF
4925 $startsh
4926 wanted=\$1
4927 name=''
4928 for usrincdir in $usrinc
4929 do
4930         if test -f \$usrincdir/\$wanted; then
4931                 echo "\$usrincdir/\$wanted"
4932                 exit 0
4933         fi
4934 done
4935 awkprg='{ print \$$fieldn }'
4936 echo "#include <\$wanted>" > foo\$\$.c
4937 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4938 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4939 while read cline; do
4940         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4941         case "\$name" in
4942         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4943         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4944         *) exit 2;;
4945         esac;
4946 done;
4947 #
4948 # status = 0: grep returned 0 lines, case statement not executed
4949 # status = 1: headerfile found
4950 # status = 2: while loop executed, no headerfile found
4951 #
4952 status=\$?
4953 $rm -f foo\$\$.c;
4954 if test \$status -eq 1; then
4955         exit 0;
4956 fi
4957 exit 1
4958 EOF
4959 chmod +x findhdr
4960
4961 : define an alternate in-header-list? function
4962 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4963 cont=true; xxf="echo \"<\$1> found.\" >&4";
4964 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4965 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4966 esac;
4967 case $# in 4) instead=instead;; *) instead="at last";; esac;
4968 while $test "$cont"; do
4969         xxx=`./findhdr $1`
4970         var=$2; eval "was=\$$2";
4971         if $test "$xxx" && $test -r "$xxx";
4972         then eval $xxf;
4973         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4974                 cont="";
4975         else eval $xxnf;
4976         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4977         set $yyy; shift; shift; yyy=$@;
4978         case $# in 0) cont="";;
4979         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4980                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4981         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4982                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4983         esac;
4984 done;
4985 while $test "$yyy";
4986 do set $yyy; var=$2; eval "was=\$$2";
4987         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4988         set $yyy; shift; shift; yyy=$@;
4989 done'
4990
4991 : see if inttypes.h is available
4992 : we want a real compile instead of Inhdr because some systems
4993 : have an inttypes.h which includes non-existent headers
4994 echo " "
4995 $cat >try.c <<EOCP
4996 #include <inttypes.h>
4997 int main() {
4998         static int32_t foo32 = 0x12345678;
4999 }
5000 EOCP
5001 set try
5002 if eval $compile; then
5003         echo "<inttypes.h> found." >&4
5004         val="$define"
5005 else
5006         echo "<inttypes.h> NOT found." >&4
5007         val="$undef"
5008 fi
5009 $rm -f try.c try
5010 set i_inttypes
5011 eval $setvar
5012
5013 : check for int64_t
5014 echo " "
5015 echo "Checking to see if you have int64_t..." >&4
5016 $cat >try.c <<EOCP
5017 #include <sys/types.h>
5018 #$i_inttypes I_INTTYPES
5019 #ifdef I_INTTYPES
5020 #include <inttypes.h>
5021 #endif
5022 int main() { int64_t x = 7; }
5023 EOCP
5024 set try
5025 if eval $compile; then
5026         val="$define"
5027         echo "You have int64_t."
5028 else
5029         val="$undef"
5030         echo "You do not have int64_t."
5031 fi
5032 $rm -f try try.*
5033 set d_int64_t
5034 eval $setvar
5035
5036
5037 echo " "
5038 echo "Checking which 64-bit integer type we could use..." >&4
5039
5040 case "$intsize" in
5041 8) val=int
5042    set quadtype
5043    eval $setvar
5044    val='"unsigned int"'
5045    set uquadtype
5046    eval $setvar
5047    quadkind=1
5048    ;;
5049 *) case "$longsize" in
5050    8) val=long
5051       set quadtype
5052       eval $setvar
5053       val='"unsigned long"'
5054       set uquadtype
5055       eval $setvar
5056       quadkind=2
5057       ;;
5058    *) case "$d_longlong:$longlongsize" in
5059       define:8)
5060         val='"long long"'
5061         set quadtype
5062         eval $setvar
5063         val='"unsigned long long"'
5064         set uquadtype
5065         eval $setvar
5066         quadkind=3
5067         ;;
5068       *) case "$d_int64_t" in
5069          define)
5070            val=int64_t
5071            set quadtype
5072            eval $setvar
5073            val=uint64_t
5074            set uquadtype
5075            eval $setvar
5076            quadkind=4
5077            ;;
5078          esac
5079          ;;
5080       esac
5081       ;;
5082    esac
5083    ;;
5084 esac
5085
5086 case "$quadtype" in
5087 '')     echo "Alas, no 64-bit integer types in sight." >&4
5088         d_quad="$undef"
5089         ;;
5090 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5091         d_quad="$define"
5092         ;;
5093 esac
5094
5095
5096 case "$uselonglong" in
5097 "$define"|true|[yY]*)
5098         cat <<EOM >&4
5099
5100 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5101 EOM
5102         use64bitint="$define"
5103         ;;
5104 esac                          
5105 case "$use64bits" in
5106 "$define"|true|[yY]*)
5107         cat <<EOM >&4
5108
5109 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5110 EOM
5111         use64bitint="$define"
5112         ;;
5113 esac                          
5114 case "$use64bitints" in
5115 "$define"|true|[yY]*)
5116         cat <<EOM >&4
5117
5118 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5119 EOM
5120         use64bitint="$define"
5121         ;;
5122 esac                          
5123 case "$use64bitsint" in
5124 "$define"|true|[yY]*)
5125         cat <<EOM >&4
5126
5127 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5128 EOM
5129         use64bitint="$define"
5130         ;;
5131 esac                          
5132 case "$uselonglongs" in
5133 "$define"|true|[yY]*)
5134         cat <<EOM >&4
5135
5136 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5137 EOM
5138         use64bitint="$define"
5139         ;;
5140 esac                          
5141 case "$use64bitsall" in
5142 "$define"|true|[yY]*)
5143         cat <<EOM >&4
5144
5145 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5146 EOM
5147         use64bitall="$define"
5148         ;;
5149 esac                          
5150
5151 case "$ccflags" in
5152 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5153 esac
5154 case "$use64bitall" in
5155 "$define"|true|[yY]*) use64bitint="$define" ;;
5156 esac
5157
5158 case "$longsize" in
5159 8) cat <<EOM
5160
5161 You have natively 64-bit long integers.
5162 EOM
5163    val="$define"
5164    ;;
5165 *) case "$use64bitint" in
5166    "$define"|true|[yY]*) dflt='y';;
5167    *) dflt='n';;
5168    esac
5169    case "$d_quad" in
5170    "$define") ;;
5171    *) dflt='n' ;;
5172    esac
5173    cat <<EOM
5174
5175 Perl can be built to take advantage of 64-bit integer types
5176 on some systems.  To do so, Configure can be run with -Duse64bitint.
5177 Choosing this option will most probably introduce binary incompatibilities.
5178
5179 If this doesn't make any sense to you, just accept the default '$dflt'.
5180 (The default has been chosen based on your configuration.)
5181 EOM
5182    rp='Try to use 64-bit integers, if available?'
5183    . ./myread
5184    case "$ans" in
5185    [yY]*) val="$define" ;;
5186    *)     val="$undef"  ;;
5187    esac
5188    ;;
5189 esac
5190 set use64bitint
5191 eval $setvar
5192
5193 case "$use64bitall" in
5194 "$define"|true|[yY]*) dflt='y' ;;
5195 *) case "$longsize" in
5196    8) dflt='y' ;;
5197    *) dflt='n' ;;
5198    esac
5199    ;;
5200 esac    
5201 cat <<EOM
5202
5203 You may also choose to try maximal 64-bitness.  It means using as much
5204 64-bitness as possible on the platform.  This in turn means even more
5205 binary incompatibilities.  On the other hand, your platform may not
5206 have any more 64-bitness available than what you already have chosen.
5207
5208 If this doesn't make any sense to you, just accept the default '$dflt'.
5209 (The default has been chosen based on your configuration.)
5210 EOM
5211 rp='Try to use maximal 64-bit support, if available?'
5212 . ./myread
5213 case "$ans" in
5214 [yY]*) val="$define" ;;
5215 *)     val="$undef"  ;;
5216 esac
5217 set use64bitall
5218 eval $setvar
5219 case "$use64bitall" in
5220 "$define")
5221         case "$use64bitint" in
5222         "$undef")
5223                 cat <<EOM
5224
5225 Since you have chosen a maximally 64-bit build, I'm also turning on
5226 the use of 64-bit integers.
5227 EOM
5228                 use64bitint="$define" ;;
5229         esac
5230         ;;
5231 esac
5232
5233 case "$use64bitall" in
5234 "$define"|true|[yY]*)
5235         case "$ptrsize" in
5236         4)      cat <<EOM >&4
5237
5238 *** You have chosen a maximally 64-bit build, but your pointers
5239 *** are only 4 bytes wide, disabling maximal 64-bitness.
5240
5241 EOM
5242                 use64bitall="$undef"
5243                 case "$use64bitint" in
5244                 "$define"|true|[yY]*) ;;
5245                 *)      cat <<EOM >&4
5246
5247 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5248
5249 EOM
5250                         use64bitint="$define"
5251                         ;;
5252                 esac
5253                 ;;
5254         esac
5255         ;;
5256 esac
5257
5258 case "$use64bitint" in
5259 "$define"|true|[yY]*)
5260 : Look for a hint-file generated 'call-back-unit'.  If the
5261 : user has specified that a 64-bit perl is to be built,
5262 : we may need to set or change some other defaults.
5263         if $test -f use64bitint.cbu; then
5264                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5265                 . ./use64bitint.cbu
5266         fi
5267         case "$longsize" in
5268         4) case "$archname64" in
5269            '') archname64=64int ;;
5270            esac
5271            ;;
5272         esac
5273         ;;
5274 esac
5275
5276 case "$use64bitall" in
5277 "$define"|true|[yY]*)
5278 : Look for a hint-file generated 'call-back-unit'.  If the
5279 : user has specified that a maximally 64-bit perl is to be built,
5280 : we may need to set or change some other defaults.
5281         if $test -f use64bitall.cbu; then
5282                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5283                 . ./use64bitall.cbu
5284         fi
5285         case "$longsize" in
5286         4) case "$archname64" in
5287            ''|64int) archname64=64all ;;
5288            esac
5289            ;;
5290         esac
5291         ;;
5292 esac
5293
5294 echo " "
5295 echo "Checking for GNU C Library..." >&4
5296 cat >try.c <<EOM
5297 #include <stdio.h>
5298 int main()
5299 {
5300 #ifdef __GLIBC__
5301     exit(0);
5302 #else
5303     exit(1);
5304 #endif
5305 }
5306 EOM
5307 set try
5308 if eval $compile_ok && $run ./try; then
5309         val="$define"
5310         echo "You are using the GNU C Library"
5311 else
5312         val="$undef"
5313         echo "You are not using the GNU C Library"
5314 fi
5315 $rm -f try try.*
5316 set d_gnulibc
5317 eval $setvar
5318
5319 : see if nm is to be used to determine whether a symbol is defined or not
5320 case "$usenm" in
5321 '')
5322         dflt=''
5323         case "$d_gnulibc" in
5324         "$define")
5325                 echo " "
5326                 echo "nm probably won't work on the GNU C Library." >&4
5327                 dflt=n
5328                 ;;
5329         esac
5330         case "$dflt" in
5331         '') 
5332                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5333                         echo " "
5334                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5335                         echo "'nm' won't be sufficient on this sytem." >&4
5336                         dflt=n
5337                 fi
5338                 ;;
5339         esac
5340         case "$dflt" in
5341         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5342                 if $test $dflt -gt 20; then
5343                         dflt=y
5344                 else
5345                         dflt=n
5346                 fi
5347                 ;;
5348         esac
5349         ;;
5350 *)
5351         case "$usenm" in
5352         true|$define) dflt=y;;
5353         *) dflt=n;;
5354         esac
5355         ;;
5356 esac
5357 $cat <<EOM
5358
5359 I can use $nm to extract the symbols from your C libraries. This
5360 is a time consuming task which may generate huge output on the disk (up
5361 to 3 megabytes) but that should make the symbols extraction faster. The
5362 alternative is to skip the 'nm' extraction part and to compile a small
5363 test program instead to determine whether each symbol is present. If
5364 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5365 this may be the best solution.
5366
5367 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5368
5369 EOM
5370 rp="Shall I use $nm to extract C symbols from the libraries?"
5371 . ./myread
5372 case "$ans" in
5373 [Nn]*) usenm=false;;
5374 *) usenm=true;;
5375 esac
5376
5377 runnm=$usenm
5378 case "$reuseval" in
5379 true) runnm=false;;
5380 esac
5381
5382 : nm options which may be necessary
5383 case "$nm_opt" in
5384 '') if $test -f /mach_boot; then
5385                 nm_opt=''       # Mach
5386         elif $test -d /usr/ccs/lib; then
5387                 nm_opt='-p'     # Solaris (and SunOS?)
5388         elif $test -f /dgux; then
5389                 nm_opt='-p'     # DG-UX
5390         elif $test -f /lib64/rld; then
5391                 nm_opt='-p'     # 64-bit Irix
5392         else
5393                 nm_opt=''
5394         fi;;
5395 esac
5396
5397 : nm options which may be necessary for shared libraries but illegal
5398 : for archive libraries.  Thank you, Linux.
5399 case "$nm_so_opt" in
5400 '')     case "$myuname" in
5401         *linux*)
5402                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5403                         nm_so_opt='--dynamic'
5404                 fi
5405                 ;;
5406         esac
5407         ;;
5408 esac
5409
5410 case "$runnm" in
5411 true)
5412 : get list of predefined functions in a handy place
5413 echo " "
5414 case "$libc" in
5415 '') libc=unknown
5416         case "$libs" in
5417         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5418         esac
5419         ;;
5420 esac
5421 case "$libs" in
5422 '') ;;
5423 *)  for thislib in $libs; do
5424         case "$thislib" in
5425         -lc|-lc_s)
5426                 : Handle C library specially below.
5427                 ;;
5428         -l*)
5429                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5430                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5431                         :
5432                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5433                         :
5434                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5435                         :
5436                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5437                         :
5438                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5439                         :
5440                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5441                         :
5442                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5443                         :
5444                 else
5445                         try=''
5446                 fi
5447                 libnames="$libnames $try"
5448                 ;;
5449         *) libnames="$libnames $thislib" ;;
5450         esac
5451         done
5452         ;;
5453 esac
5454 xxx=normal
5455 case "$libc" in
5456 unknown)
5457         set /lib/libc.$so
5458         for xxx in $libpth; do
5459                 $test -r $1 || set $xxx/libc.$so
5460                 : The messy sed command sorts on library version numbers.
5461                 $test -r $1 || \
5462                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5463                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5464                                 h
5465                                 s/[0-9][0-9]*/0000&/g
5466                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5467                                 G
5468                                 s/\n/ /' | \
5469                          $sort | $sed -e 's/^.* //'`
5470                 eval set \$$#
5471         done
5472         $test -r $1 || set /usr/ccs/lib/libc.$so
5473         $test -r $1 || set /lib/libsys_s$_a
5474         ;;
5475 *)
5476         set blurfl
5477         ;;
5478 esac
5479 if $test -r "$1"; then
5480         echo "Your (shared) C library seems to be in $1."
5481         libc="$1"
5482 elif $test -r /lib/libc && $test -r /lib/clib; then
5483         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5484         xxx=apollo
5485         libc='/lib/clib /lib/libc'
5486         if $test -r /lib/syslib; then
5487                 echo "(Your math library is in /lib/syslib.)"
5488                 libc="$libc /lib/syslib"
5489         fi
5490 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5491         echo "Your C library seems to be in $libc, as you said before."
5492 elif $test -r $incpath/usr/lib/libc$_a; then
5493         libc=$incpath/usr/lib/libc$_a;
5494         echo "Your C library seems to be in $libc.  That's fine."
5495 elif $test -r /lib/libc$_a; then
5496         libc=/lib/libc$_a;
5497         echo "Your C library seems to be in $libc.  You're normal."
5498 else
5499         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5500                 :
5501         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5502                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5503         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5504                 :
5505         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5506                 :
5507         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5508                 :
5509         else
5510                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5511         fi
5512         if $test -r "$tans"; then
5513                 echo "Your C library seems to be in $tans, of all places."
5514                 libc=$tans
5515         else
5516                 libc='blurfl'
5517         fi
5518 fi
5519 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5520         dflt="$libc"
5521         cat <<EOM
5522
5523 If the guess above is wrong (which it might be if you're using a strange
5524 compiler, or your machine supports multiple models), you can override it here.
5525
5526 EOM
5527 else
5528         dflt=''
5529         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5530         cat >&4 <<EOM
5531 I can't seem to find your C library.  I've looked in the following places:
5532
5533 EOM
5534         $sed 's/^/      /' libpath
5535         cat <<EOM
5536
5537 None of these seems to contain your C library. I need to get its name...
5538
5539 EOM
5540 fi
5541 fn=f
5542 rp='Where is your C library?'
5543 . ./getfile
5544 libc="$ans"
5545
5546 echo " "
5547 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5548 set X `cat libnames`
5549 shift
5550 xxx=files
5551 case $# in 1) xxx=file; esac
5552 echo "Extracting names from the following $xxx for later perusal:" >&4
5553 echo " "
5554 $sed 's/^/      /' libnames >&4
5555 echo " "
5556 $echo $n "This may take a while...$c" >&4
5557
5558 for file in $*; do
5559         case $file in
5560         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5561         *) $nm $nm_opt $file 2>/dev/null;;
5562         esac
5563 done >libc.tmp
5564
5565 $echo $n ".$c"
5566 $grep fprintf libc.tmp > libc.ptf
5567 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5568 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5569 xxx='[ADTSIW]'
5570 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5571         eval $xscan;\
5572         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5573                 eval $xrun
5574 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5575         eval $xscan;\
5576         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5577                 eval $xrun
5578 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5579         eval $xscan;\
5580         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5581                 eval $xrun
5582 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5583         eval $xscan;\
5584         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5585                 eval $xrun
5586 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5587         eval $xscan;\
5588         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5589                 eval $xrun
5590 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5591         eval $xscan;\
5592         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5593                 eval $xrun
5594 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5595                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5596         eval $xscan;\
5597         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5598                 eval $xrun
5599 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5600         eval $xscan;\
5601         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5602                 eval $xrun
5603 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5604         eval $xscan;\
5605         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5606                 eval $xrun
5607 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5608         eval $xscan;\
5609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5610                 eval $xrun
5611 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5612         eval $xscan;\
5613         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5614                 eval $xrun
5615 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5616         eval $xscan;\
5617         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5618                 eval $xrun
5619 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5620         eval $xscan;\
5621         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5622                 eval $xrun
5623 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5624         eval $xscan;\
5625         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5626                 eval $xrun
5627 else
5628         $nm -p $* 2>/dev/null >libc.tmp
5629         $grep fprintf libc.tmp > libc.ptf
5630         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5631                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5632         then
5633                 nm_opt='-p'
5634                 eval $xrun
5635         else
5636                 echo " "
5637                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5638                 com=''
5639                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5640                         for thisname in $libnames $libc; do
5641                                 $ar t $thisname >>libc.tmp
5642                         done
5643                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5644                         echo "Ok." >&4
5645                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5646                         # Repeat libc to extract forwarders to DLL entries too
5647                         for thisname in $libnames $libc; do
5648                                 $ar tv $thisname >>libc.tmp
5649                                 # Revision 50 of EMX has bug in $ar.
5650                                 # it will not extract forwarders to DLL entries
5651                                 # Use emximp which will extract exactly them.
5652                                 emximp -o tmp.imp $thisname \
5653                                     2>/dev/null && \
5654                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5655                                     < tmp.imp >>libc.tmp
5656                                 $rm tmp.imp
5657                         done
5658                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5659                         echo "Ok." >&4
5660                 else
5661                         echo "$ar didn't seem to work right." >&4
5662                         echo "Maybe this is a Cray...trying bld instead..." >&4
5663                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5664                         then
5665                                 for thisname in $libnames; do
5666                                         bld t $libnames | \
5667                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5668                                         $ar t $thisname >>libc.tmp
5669                                 done
5670                                 echo "Ok." >&4
5671                         else
5672                                 echo "That didn't work either.  Giving up." >&4
5673                                 exit 1
5674                         fi
5675                 fi
5676         fi
5677 fi
5678 nm_extract="$com"
5679 if $test -f /lib/syscalls.exp; then
5680         echo " "
5681         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5682         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5683 fi
5684 ;;
5685 esac
5686 $rm -f libnames libpath
5687
5688 : is a C symbol defined?
5689 csym='tlook=$1;
5690 case "$3" in
5691 -v) tf=libc.tmp; tc=""; tdc="";;
5692 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5693 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5694 esac;
5695 tx=yes;
5696 case "$reuseval-$4" in
5697 true-) ;;
5698 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5699 esac;
5700 case "$tx" in
5701 yes)
5702         case "$runnm" in
5703         true)
5704                 if $contains $tlook $tf >/dev/null 2>&1;
5705                 then tval=true;
5706                 else tval=false;
5707                 fi;;
5708         *)
5709                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5710                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5711                 then tval=true;
5712                 else tval=false;
5713                 fi;
5714                 $rm -f t t.c;;
5715         esac;;
5716 *)
5717         case "$tval" in
5718         $define) tval=true;;
5719         *) tval=false;;
5720         esac;;
5721 esac;
5722 eval "$2=$tval"'
5723
5724 : define an is-in-libc? function
5725 inlibc='echo " "; td=$define; tu=$undef;
5726 sym=$1; var=$2; eval "was=\$$2";
5727 tx=yes;
5728 case "$reuseval$was" in
5729 true) ;;
5730 true*) tx=no;;
5731 esac;
5732 case "$tx" in
5733 yes)
5734         set $sym tres -f;
5735         eval $csym;
5736         case "$tres" in
5737         true)
5738                 echo "$sym() found." >&4;
5739                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5740         *)
5741                 echo "$sym() NOT found." >&4;
5742                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5743         esac;;
5744 *)
5745         case "$was" in
5746         $define) echo "$sym() found." >&4;;
5747         *) echo "$sym() NOT found." >&4;;
5748         esac;;
5749 esac'
5750
5751 : see if sqrtl exists
5752 set sqrtl d_sqrtl
5753 eval $inlibc
5754
5755 : check for length of double
5756 echo " "
5757 case "$doublesize" in
5758 '')
5759         echo "Checking to see how big your double precision numbers are..." >&4
5760         $cat >try.c <<'EOCP'
5761 #include <stdio.h>
5762 int main()
5763 {
5764     printf("%d\n", (int)sizeof(double));
5765     exit(0);
5766 }
5767 EOCP
5768         set try
5769         if eval $compile_ok; then
5770                 doublesize=`$run ./try`
5771                 echo "Your double is $doublesize bytes long."
5772         else
5773                 dflt='8'
5774                 echo "(I can't seem to compile the test program.  Guessing...)"
5775                 rp="What is the size of a double precision number (in bytes)?"
5776                 . ./myread
5777                 doublesize="$ans"
5778         fi
5779         ;;
5780 esac
5781 $rm -f try.c try
5782
5783 : check for long doubles
5784 echo " "
5785 echo "Checking to see if you have long double..." >&4
5786 echo 'int main() { long double x = 7.0; }' > try.c
5787 set try
5788 if eval $compile; then
5789         val="$define"
5790         echo "You have long double."
5791 else
5792         val="$undef"
5793         echo "You do not have long double."
5794 fi
5795 $rm try.*
5796 set d_longdbl
5797 eval $setvar
5798
5799 : check for length of long double
5800 case "${d_longdbl}${longdblsize}" in
5801 $define)
5802         echo " "
5803         echo "Checking to see how big your long doubles are..." >&4
5804         $cat >try.c <<'EOCP'
5805 #include <stdio.h>
5806 int main()
5807 {
5808         printf("%d\n", sizeof(long double));
5809 }
5810 EOCP
5811         set try
5812         set try
5813         if eval $compile; then
5814                 longdblsize=`$run ./try`
5815                 echo "Your long doubles are $longdblsize bytes long."
5816         else
5817                 dflt='8'
5818                 echo " "
5819                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5820                 rp="What is the size of a long double (in bytes)?"
5821                 . ./myread
5822                 longdblsize="$ans"
5823         fi
5824         if $test "X$doublesize" = "X$longdblsize"; then
5825                 echo "(That isn't any different from an ordinary double.)"
5826         fi      
5827         ;;
5828 esac
5829 $rm -f try.* try
5830
5831 echo " "
5832
5833 if $test X"$d_longdbl" = X"$define"; then
5834
5835 echo "Checking how to print long doubles..." >&4
5836
5837 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5838         $cat >try.c <<'EOCP'
5839 #include <sys/types.h>
5840 #include <stdio.h>
5841 int main() {
5842   double d = 123.456;
5843   printf("%.3f\n", d);
5844 }
5845 EOCP
5846         set try
5847         if eval $compile; then
5848                 yyy=`$run ./try`
5849                 case "$yyy" in
5850                 123.456)
5851                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5852                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5853                         echo "We will use %f."
5854                         ;;
5855                 esac
5856         fi
5857 fi
5858
5859 if $test X"$sPRIfldbl" = X; then
5860         $cat >try.c <<'EOCP'
5861 #include <sys/types.h>
5862 #include <stdio.h>
5863 int main() {
5864   long double d = 123.456;
5865   printf("%.3Lf\n", d);
5866 }
5867 EOCP
5868         set try
5869         if eval $compile; then
5870                 yyy=`$run ./try`
5871                 case "$yyy" in
5872                 123.456)
5873                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5874                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5875                         echo "We will use %Lf."
5876                         ;;
5877                 esac
5878         fi
5879 fi
5880
5881 if $test X"$sPRIfldbl" = X; then
5882         $cat >try.c <<'EOCP'
5883 #include <sys/types.h>
5884 #include <stdio.h>
5885 int main() {
5886   long double d = 123.456;
5887   printf("%.3llf\n", d);
5888 }
5889 EOCP
5890         set try
5891         if eval $compile; then
5892                 yyy=`$run ./try`
5893                 case "$yyy" in
5894                 123.456)
5895                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5896                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5897                         echo "We will use %llf."
5898                         ;;
5899                 esac
5900         fi
5901 fi
5902
5903 if $test X"$sPRIfldbl" = X; then
5904         $cat >try.c <<'EOCP'
5905 #include <sys/types.h>
5906 #include <stdio.h>
5907 int main() {
5908   long double d = 123.456;
5909   printf("%.3lf\n", d);
5910 }
5911 EOCP
5912         set try
5913         if eval $compile; then
5914                 yyy=`$run ./try`
5915                 case "$yyy" in
5916                 123.456)
5917                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5918                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5919                         echo "We will use %lf."
5920                         ;;
5921                 esac
5922         fi
5923 fi
5924
5925 if $test X"$sPRIfldbl" = X; then
5926         echo "Cannot figure out how to print long doubles." >&4
5927 else
5928         sSCNfldbl=$sPRIfldbl    # expect consistency
5929 fi
5930
5931 $rm -f try try.*
5932
5933 fi # d_longdbl
5934
5935 case "$sPRIfldbl" in
5936 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5937         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5938         d_SCNfldbl="$undef";
5939         ;;
5940 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5941         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5942         d_SCNfldbl="$define";
5943         ;;
5944 esac
5945
5946 : see if modfl exists
5947 set modfl d_modfl
5948 eval $inlibc
5949
5950 d_modfl_pow32_bug="$undef"
5951
5952 case "$d_longdbl$d_modfl" in
5953 $define$define)
5954         $cat <<EOM
5955 Checking to see whether your modfl() is okay for large values...
5956 EOM
5957 $cat >try.c <<EOCP
5958 #include <math.h> 
5959 #include <stdio.h>
5960 int main() {
5961     long double nv = 4294967303.15;
5962     long double v, w;
5963     v = modfl(nv, &w);         
5964 #ifdef __GLIBC__
5965     printf("glibc");
5966 #endif
5967     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
5968     return 0;
5969 }
5970 EOCP
5971         case "$osname:$gccversion" in
5972         aix:)   saveccflags="$ccflags"
5973                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
5974         esac
5975         set try
5976         if eval $compile; then
5977                 foo=`$run ./try`
5978                 case "$foo" in
5979                 *" 4294967303.150000 1.150000 4294967302.000000")
5980                         echo >&4 "Your modfl() is broken for large values."
5981                         d_modfl_pow32_bug="$define"
5982                         case "$foo" in
5983                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
5984                         ;;
5985                         esac
5986                         ;;
5987                 *" 4294967303.150000 0.150000 4294967303.000000")
5988                         echo >&4 "Your modfl() seems okay for large values."
5989                         ;;
5990                 *)      echo >&4 "I don't understand your modfl() at all."
5991                         d_modfl="$undef"
5992                         ;;
5993                 esac
5994                 $rm -f try.* try core core.try.*
5995         else
5996                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
5997                 d_modfl="$undef"
5998         fi
5999         case "$osname:$gccversion" in
6000         aix:)   ccflags="$saveccflags" ;; # restore
6001         esac
6002         ;;
6003 esac
6004
6005 case "$ccflags" in
6006 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6007 esac
6008
6009 case "$uselongdouble" in
6010 $define|true|[yY]*)     dflt='y';;
6011 *) dflt='n';;
6012 esac
6013 cat <<EOM
6014
6015 Perl can be built to take advantage of long doubles which
6016 (if available) may give more accuracy and range for floating point numbers.
6017
6018 If this doesn't make any sense to you, just accept the default '$dflt'.
6019 EOM
6020 rp='Try to use long doubles if available?'
6021 . ./myread
6022 case "$ans" in
6023 y|Y)    val="$define"   ;;
6024 *)      val="$undef"    ;;
6025 esac
6026 set uselongdouble
6027 eval $setvar
6028
6029 case "$uselongdouble" in
6030 true|[yY]*) uselongdouble="$define" ;;
6031 esac
6032
6033 case "$uselongdouble" in
6034 $define)
6035 : Look for a hint-file generated 'call-back-unit'.  If the
6036 : user has specified that long doubles should be used,
6037 : we may need to set or change some other defaults.
6038         if $test -f uselongdouble.cbu; then
6039                 echo "Your platform has some specific hints for long doubles, using them..."
6040                 . ./uselongdouble.cbu
6041         else
6042                 $cat <<EOM
6043 (Your platform doesn't have any specific hints for long doubles.)
6044 EOM
6045         fi
6046         ;;
6047 esac
6048
6049 message=X
6050 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6051 $define:$define:$define)
6052         : You have both
6053         ;;
6054 $define:$define:$undef)
6055         message="I could not find modfl"
6056         ;;
6057 $define:$undef:$define)
6058         message="I could not find sqrtl"
6059         ;;
6060 $define:$undef:$undef)
6061         message="I found neither sqrtl nor modfl"
6062         ;;
6063 esac
6064
6065 if $test "$message" != X; then
6066         $cat <<EOM >&4
6067
6068 *** You requested the use of long doubles but you do not seem to have
6069 *** the mathematic functions for long doubles.
6070 *** ($message)
6071 *** I'm disabling the use of long doubles.
6072
6073 EOM
6074
6075         uselongdouble=$undef
6076 fi
6077
6078 case "$useperlio" in
6079 $define|true|[yY]*|'')  dflt='y';;
6080 *) dflt='n';;
6081 esac
6082 cat <<EOM
6083
6084 Previous version of $package used the standard IO mechanisms as
6085 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6086 alternate IO mechanisms via the PerlIO abstraction layer, but the
6087 stdio mechanism is still available if needed.  The abstraction layer
6088 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6089 Using PerlIO with sfio may cause problems with some extension modules.
6090
6091 If this doesn't make any sense to you, just accept the default '$dflt'.
6092 EOM
6093 rp='Use the PerlIO abstraction layer?'
6094 . ./myread
6095 case "$ans" in
6096 y|Y) 
6097         val="$define"
6098         ;;
6099 *)      
6100         echo "Ok, doing things the stdio way."
6101         val="$undef"
6102         ;;
6103 esac
6104 set useperlio
6105 eval $setvar 
6106
6107 case "$usesocks" in
6108 $define|true|[yY]*)
6109         case "$useperlio" in
6110         $define|true|[yY]*) ;;
6111         *)      cat >&4 <<EOM
6112
6113 You are using the SOCKS proxy protocol library which means that you
6114 should also use the PerlIO layer.  You may be headed for trouble.
6115
6116 EOM
6117                 ;;
6118         esac
6119         ;;
6120 esac
6121
6122         
6123 : determine the architecture name
6124 echo " "
6125 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6126         tarch=`arch`"-$osname"
6127 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6128         if uname -m > tmparch 2>&1 ; then
6129                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6130                         -e 's/$/'"-$osname/" tmparch`
6131         else
6132                 tarch="$osname"
6133         fi
6134         $rm -f tmparch
6135 else
6136         tarch="$osname"
6137 fi
6138 case "$myarchname" in
6139 ''|"$tarch") ;;
6140 *)
6141         echo "(Your architecture name used to be $myarchname.)"
6142         archname=''
6143         ;;
6144 esac
6145 case "$targetarch" in
6146 '') ;;
6147 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6148 esac
6149 myarchname="$tarch"
6150 case "$archname" in
6151 '') dflt="$tarch";;
6152 *) dflt="$archname";;
6153 esac
6154 rp='What is your architecture name'
6155 . ./myread
6156 archname="$ans"
6157 case "$usethreads" in
6158 $define)
6159         echo "Threads selected." >&4
6160         case "$archname" in
6161         *-thread*) echo "...and architecture name already has -thread." >&4
6162                 ;;
6163         *)      archname="$archname-thread"
6164                 echo "...setting architecture name to $archname." >&4
6165                 ;;
6166         esac
6167         ;;
6168 esac
6169 case "$usemultiplicity" in
6170 $define)
6171         echo "Multiplicity selected." >&4
6172         case "$archname" in
6173         *-multi*) echo "...and architecture name already has -multi." >&4
6174                 ;;
6175         *)      archname="$archname-multi"
6176                 echo "...setting architecture name to $archname." >&4
6177                 ;;
6178         esac
6179         ;;
6180 esac
6181 case "$use64bitint$use64bitall" in
6182 *"$define"*)
6183         case "$archname64" in
6184         '')
6185                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6186                 ;;
6187         *)
6188                 case "$use64bitint" in
6189                 "$define") echo "64 bit integers selected." >&4 ;;
6190                 esac
6191                 case "$use64bitall" in
6192                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6193                 esac
6194                 case "$archname" in
6195                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6196                         ;;
6197                 *)      archname="$archname-$archname64"
6198                         echo "...setting architecture name to $archname." >&4
6199                         ;;
6200                 esac
6201                 ;;
6202         esac
6203 esac
6204 case "$uselongdouble" in
6205 $define)
6206         echo "Long doubles selected." >&4
6207         case "$longdblsize" in
6208         $doublesize)
6209                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6210                 ;;
6211         *)
6212                 case "$archname" in
6213                 *-ld*) echo "...and architecture name already has -ld." >&4
6214                         ;;
6215                 *)      archname="$archname-ld"
6216                         echo "...setting architecture name to $archname." >&4
6217                         ;;
6218                 esac
6219                 ;;
6220         esac
6221         ;;
6222 esac
6223 case "$useperlio" in
6224 $define)
6225         echo "Perlio selected." >&4
6226         ;;
6227 *)
6228         echo "Perlio not selected, using stdio." >&4
6229         case "$archname" in
6230         *-stdio*) echo "...and architecture name already has -stdio." >&4
6231                 ;;
6232         *)      archname="$archname-stdio"
6233                 echo "...setting architecture name to $archname." >&4
6234                 ;;
6235         esac
6236         ;;
6237 esac
6238
6239 : determine root of directory hierarchy where package will be installed.
6240 case "$prefix" in
6241 '')
6242         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6243         ;;
6244 *)
6245         dflt="$prefix"
6246         ;;
6247 esac
6248 $cat <<EOM
6249
6250 By default, $package will be installed in $dflt/bin, manual pages
6251 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6252 installation directories. Typically this is something like /usr/local.
6253 If you wish to have binaries under /usr/bin but other parts of the
6254 installation under /usr/local, that's ok: you will be prompted
6255 separately for each of the installation directories, the prefix being
6256 only used to set the defaults.
6257
6258 EOM
6259 fn=d~
6260 rp='Installation prefix to use?'
6261 . ./getfile
6262 oldprefix=''
6263 case "$prefix" in
6264 '') ;;
6265 *)
6266         case "$ans" in
6267         "$prefix") ;;
6268         *) oldprefix="$prefix";;
6269         esac
6270         ;;
6271 esac
6272 prefix="$ans"
6273 prefixexp="$ansexp"
6274
6275 case "$afsroot" in
6276 '')     afsroot=/afs ;;
6277 *)      afsroot=$afsroot ;;
6278 esac
6279
6280 : is AFS running?
6281 echo " "
6282 case "$afs" in
6283 $define|true)   afs=true ;;
6284 $undef|false)   afs=false ;;
6285 *)      if test -d $afsroot; then
6286                 afs=true
6287         else
6288                 afs=false
6289         fi
6290         ;;
6291 esac
6292 if $afs; then
6293         echo "AFS may be running... I'll be extra cautious then..." >&4
6294 else
6295         echo "AFS does not seem to be running..." >&4
6296 fi
6297
6298 : determine installation prefix for where package is to be installed.
6299 if $afs; then 
6300 $cat <<EOM
6301
6302 Since you are running AFS, I need to distinguish the directory in which
6303 files will reside from the directory in which they are installed (and from
6304 which they are presumably copied to the former directory by occult means).
6305
6306 EOM
6307         case "$installprefix" in
6308         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6309         *) dflt="$installprefix";;
6310         esac
6311 else
6312 $cat <<EOM
6313
6314 In some special cases, particularly when building $package for distribution,
6315 it is convenient to distinguish between the directory in which files should 
6316 be installed from the directory ($prefix) in which they 
6317 will eventually reside.  For most users, these two directories are the same.
6318
6319 EOM
6320         case "$installprefix" in
6321         '') dflt=$prefix ;;
6322         *) dflt=$installprefix;;
6323         esac
6324 fi
6325 fn=d~
6326 rp='What installation prefix should I use for installing files?'
6327 . ./getfile
6328 installprefix="$ans"
6329 installprefixexp="$ansexp"
6330
6331 : set the prefixit variable, to compute a suitable default value
6332 prefixit='case "$3" in
6333 ""|none)
6334         case "$oldprefix" in
6335         "") eval "$1=\"\$$2\"";;
6336         *)
6337                 case "$3" in
6338                 "") eval "$1=";;
6339                 none)
6340                         eval "tp=\"\$$2\"";
6341                         case "$tp" in
6342                         ""|" ") eval "$1=\"\$$2\"";;
6343                         *) eval "$1=";;
6344                         esac;;
6345                 esac;;
6346         esac;;
6347 *)
6348         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6349         case "$tp" in
6350         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6351         /*-$oldprefix/*|\~*-$oldprefix/*)
6352                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6353         *) eval "$1=\"\$$2\"";;
6354         esac;;
6355 esac'
6356
6357 : get the patchlevel
6358 echo " "
6359 echo "Getting the current patchlevel..." >&4
6360 if $test -r $rsrc/patchlevel.h;then
6361         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6362         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6363         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6364         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6365         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6366         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6367        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6368 else
6369         revision=0
6370         patchlevel=0
6371         subversion=0
6372         api_revision=0
6373         api_version=0
6374         api_subversion=0
6375         perl_patchlevel=0
6376         $echo "(You do not have patchlevel.h.  Eek.)"
6377 fi
6378 if $test -r $rsrc/.patch ; then  
6379         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6380                 perl_patchlevel=`cat $rsrc/.patch`
6381         fi
6382 fi
6383 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6384 version_patchlevel_string="version $patchlevel subversion $subversion"
6385 case "$perl_patchlevel" in
6386 0|'') ;;
6387 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6388 esac
6389
6390 $echo "(You have $package $version_patchlevel_string.)"
6391
6392 case "$osname" in
6393 dos|vms)
6394         : XXX Should be a Configure test for double-dots in filenames.
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 *)
6401         version=`echo $revision $patchlevel $subversion | \
6402                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6403         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6404                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6405         ;;
6406 esac
6407 : Special case the 5.005_xx maintenance series, which used 5.005
6408 : without any subversion label as a subdirectory in $sitelib
6409 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6410         api_versionstring='5.005'
6411 fi
6412
6413 : determine installation style
6414 : For now, try to deduce it from prefix unless it is already set.
6415 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6416 case "$installstyle" in
6417 '')     case "$prefix" in
6418                 *perl*) dflt='lib';;
6419                 *) dflt='lib/perl5' ;;
6420         esac
6421         ;;
6422 *)      dflt="$installstyle" ;;
6423 esac
6424 : Probably not worth prompting for this since we prompt for all
6425 : the directories individually, and the prompt would be too long and
6426 : confusing anyway.
6427 installstyle=$dflt
6428
6429 : determine where private library files go
6430 : Usual default is /usr/local/lib/perl5/$version.
6431 : Also allow things like /opt/perl/lib/$version, since 
6432 : /opt/perl/lib/perl5... would be redundant.
6433 : The default "style" setting is made in installstyle.U
6434 case "$installstyle" in
6435 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6436 *)       set dflt privlib lib/$version ;;
6437 esac
6438 eval $prefixit
6439 $cat <<EOM
6440
6441 There are some auxiliary files for $package that need to be put into a
6442 private library directory that is accessible by everyone.
6443
6444 EOM
6445 fn=d~+
6446 rp='Pathname where the private library files will reside?'
6447 . ./getfile
6448 privlib="$ans"
6449 privlibexp="$ansexp"
6450 : Change installation prefix, if necessary.
6451 if $test X"$prefix" != X"$installprefix"; then
6452         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6453 else
6454         installprivlib="$privlibexp"
6455 fi
6456
6457 : set the prefixup variable, to restore leading tilda escape
6458 prefixup='case "$prefixexp" in
6459 "$prefix") ;;
6460 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6461 esac'
6462
6463 : determine where public architecture dependent libraries go
6464 set archlib archlib
6465 eval $prefixit
6466 : privlib default is /usr/local/lib/$package/$version
6467 : archlib default is /usr/local/lib/$package/$version/$archname
6468 : privlib may have an optional trailing /share.
6469 tdflt=`echo $privlib | $sed 's,/share$,,'`
6470 tdflt=$tdflt/$archname
6471 case "$archlib" in
6472 '')     dflt=$tdflt
6473         ;;
6474 *)      dflt="$archlib"
6475     ;;
6476 esac
6477 $cat <<EOM
6478
6479 $spackage contains architecture-dependent library files.  If you are
6480 sharing libraries in a heterogeneous environment, you might store
6481 these files in a separate location.  Otherwise, you can just include
6482 them with the rest of the public library files.
6483
6484 EOM
6485 fn=d+~
6486 rp='Where do you want to put the public architecture-dependent libraries?'
6487 . ./getfile
6488 archlib="$ans"
6489 archlibexp="$ansexp"
6490 if $test X"$archlib" = X"$privlib"; then
6491         d_archlib="$undef"
6492 else
6493         d_archlib="$define"
6494 fi
6495 : Change installation prefix, if necessary.
6496 if $test X"$prefix" != X"$installprefix"; then
6497         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6498 else
6499         installarchlib="$archlibexp"
6500 fi
6501
6502
6503 : Binary compatibility with 5.005 is not possible for builds
6504 : with advanced features
6505 case "$usethreads$usemultiplicity" in
6506 *define*)
6507         bincompat5005="$undef"
6508         d_bincompat5005="$undef"
6509         ;;
6510 *)      $cat <<EOM
6511
6512 This version of Perl can be compiled for binary compatibility with 5.005.
6513 If you decide to do so, you will be able to continue using most of the
6514 extensions that were compiled for Perl 5.005.
6515
6516 EOM
6517         case "$bincompat5005$d_bincompat5005" in
6518         *"$undef"*) dflt=n ;;
6519         *) dflt=y ;;
6520         esac
6521         rp='Binary compatibility with Perl 5.005?'
6522         . ./myread
6523         case "$ans" in
6524         y*) val="$define" ;;
6525         *)  val="$undef" ;;
6526         esac
6527         set d_bincompat5005
6528         eval $setvar
6529         case "$d_bincompat5005" in
6530         "$define")
6531                 bincompat5005="$define"
6532                 ;;
6533         *)      bincompat5005="$undef"
6534                 d_bincompat5005="$undef"
6535                 ;;
6536         esac
6537         ;;
6538 esac
6539
6540
6541 : see if setuid scripts can be secure
6542 $cat <<EOM
6543
6544 Some kernels have a bug that prevents setuid #! scripts from being
6545 secure.  Some sites have disabled setuid #! scripts because of this.
6546
6547 First let's decide if your kernel supports secure setuid #! scripts.
6548 (If setuid #! scripts would be secure but have been disabled anyway,
6549 don't say that they are secure if asked.)
6550
6551 EOM
6552
6553 val="$undef"
6554 if $test -d /dev/fd; then
6555         echo "#!$ls" >reflect
6556         chmod +x,u+s reflect
6557         ./reflect >flect 2>&1
6558         if $contains "/dev/fd" flect >/dev/null; then
6559                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6560                 val="$define"
6561         else
6562                 $cat <<EOM
6563 If you are not sure if they are secure, I can check but I'll need a
6564 username and password different from the one you are using right now.
6565 If you don't have such a username or don't want me to test, simply
6566 enter 'none'.
6567
6568 EOM
6569                 rp='Other username to test security of setuid scripts with?'
6570                 dflt='none'
6571                 . ./myread
6572                 case "$ans" in
6573                 n|none)
6574                         case "$d_suidsafe" in
6575                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6576                                 dflt=n;;
6577                         "$undef")
6578                                 echo "Well, the $hint value is *not* secure." >&4
6579                                 dflt=n;;
6580                         *)      echo "Well, the $hint value *is* secure." >&4
6581                                 dflt=y;;
6582                         esac
6583                         ;;
6584                 *)
6585                         $rm -f reflect flect
6586                         echo "#!$ls" >reflect
6587                         chmod +x,u+s reflect
6588                         echo >flect
6589                         chmod a+w flect
6590                         echo '"su" will (probably) prompt you for '"$ans's password."
6591                         su $ans -c './reflect >flect'
6592                         if $contains "/dev/fd" flect >/dev/null; then
6593                                 echo "Okay, it looks like setuid scripts are secure." >&4
6594                                 dflt=y
6595                         else
6596                                 echo "I don't think setuid scripts are secure." >&4
6597                                 dflt=n
6598                         fi
6599                         ;;
6600                 esac
6601                 rp='Does your kernel have *secure* setuid scripts?'
6602                 . ./myread
6603                 case "$ans" in
6604                 [yY]*)  val="$define";;
6605                 *)      val="$undef";;
6606                 esac
6607         fi
6608 else
6609         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6610         echo "(That's for file descriptors, not floppy disks.)"
6611         val="$undef"
6612 fi
6613 set d_suidsafe
6614 eval $setvar
6615
6616 $rm -f reflect flect
6617
6618 : now see if they want to do setuid emulation
6619 echo " "
6620 val="$undef"
6621 case "$d_suidsafe" in
6622 "$define")
6623         val="$undef"
6624         echo "No need to emulate SUID scripts since they are secure here." >&4
6625         ;;
6626 *)
6627         $cat <<EOM
6628 Some systems have disabled setuid scripts, especially systems where
6629 setuid scripts cannot be secure.  On systems where setuid scripts have
6630 been disabled, the setuid/setgid bits on scripts are currently
6631 useless.  It is possible for $package to detect those bits and emulate
6632 setuid/setgid in a secure fashion.  This emulation will only work if
6633 setuid scripts have been disabled in your kernel.
6634
6635 EOM
6636         case "$d_dosuid" in
6637         "$define") dflt=y ;;
6638         *) dflt=n ;;
6639         esac
6640         rp="Do you want to do setuid/setgid emulation?"
6641         . ./myread
6642         case "$ans" in
6643         [yY]*)  val="$define";;
6644         *)      val="$undef";;
6645         esac
6646         ;;
6647 esac
6648 set d_dosuid
6649 eval $setvar
6650
6651 : see if this is a malloc.h system
6652 set malloc.h i_malloc
6653 eval $inhdr
6654
6655 : see if stdlib is available
6656 set stdlib.h i_stdlib
6657 eval $inhdr
6658
6659 : determine which malloc to compile in
6660 echo " "
6661 case "$usemymalloc" in
6662 [yY]*|true|$define)     dflt='y' ;;
6663 [nN]*|false|$undef)     dflt='n' ;;
6664 *)      case "$ptrsize" in
6665         4) dflt='y' ;;
6666         *) dflt='n' ;;
6667         esac
6668         ;;
6669 esac
6670 rp="Do you wish to attempt to use the malloc that comes with $package?"
6671 . ./myread
6672 usemymalloc="$ans"
6673 case "$ans" in
6674 y*|true)
6675         usemymalloc='y'
6676         mallocsrc='malloc.c'
6677         mallocobj="malloc$_o"
6678         d_mymalloc="$define"
6679         case "$libs" in
6680         *-lmalloc*)
6681                 : Remove malloc from list of libraries to use
6682                 echo "Removing unneeded -lmalloc from library list" >&4
6683                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6684                 shift
6685                 libs="$*"
6686                 echo "libs = $libs" >&4
6687                 ;;
6688         esac
6689         ;;
6690 *)
6691         usemymalloc='n'
6692         mallocsrc=''
6693         mallocobj=''
6694         d_mymalloc="$undef"
6695         ;;
6696 esac
6697
6698 : compute the return types of malloc and free
6699 echo " "
6700 $cat >malloc.c <<END
6701 #$i_malloc I_MALLOC
6702 #$i_stdlib I_STDLIB
6703 #include <stdio.h>
6704 #include <sys/types.h>
6705 #ifdef I_MALLOC
6706 #include <malloc.h>
6707 #endif
6708 #ifdef I_STDLIB
6709 #include <stdlib.h>
6710 #endif
6711 #ifdef TRY_MALLOC
6712 void *malloc();
6713 #endif
6714 #ifdef TRY_FREE
6715 void free();
6716 #endif
6717 END
6718 case "$malloctype" in
6719 '')
6720         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6721                 malloctype='void *'
6722         else
6723                 malloctype='char *'
6724         fi
6725         ;;
6726 esac
6727 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6728
6729 case "$freetype" in
6730 '')
6731         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6732                 freetype='void'
6733         else
6734                 freetype='int'
6735         fi
6736         ;;
6737 esac
6738 echo "Your system uses $freetype free(), it would seem." >&4
6739 $rm -f malloc.[co]
6740 $cat <<EOM
6741
6742 After $package is installed, you may wish to install various
6743 add-on modules and utilities.  Typically, these add-ons will
6744 be installed under $prefix with the rest
6745 of this package.  However, you may wish to install such add-ons
6746 elsewhere under a different prefix.
6747
6748 If you do not wish to put everything under a single prefix, that's
6749 ok.  You will be prompted for the individual locations; this siteprefix
6750 is only used to suggest the defaults.
6751
6752 The default should be fine for most people.
6753
6754 EOM
6755 fn=d~+
6756 rp='Installation prefix to use for add-on modules and utilities?'
6757 : XXX Here might be another good place for an installstyle setting.
6758 case "$siteprefix" in
6759 '') dflt=$prefix ;;
6760 *)  dflt=$siteprefix ;;
6761 esac
6762 . ./getfile
6763 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6764 oldsiteprefix=''
6765 case "$siteprefix" in
6766 '') ;;
6767 *)      case "$ans" in
6768         "$prefix") ;;
6769         *) oldsiteprefix="$prefix";;
6770         esac
6771         ;;
6772 esac
6773 siteprefix="$ans"
6774 siteprefixexp="$ansexp"
6775
6776 : determine where site specific libraries go.
6777 : Usual default is /usr/local/lib/perl5/site_perl/$version
6778 : The default "style" setting is made in installstyle.U
6779 : XXX No longer works with Prefixit stuff.
6780 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6781 case "$sitelib" in
6782 '') case "$installstyle" in
6783         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6784         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6785         esac
6786         ;;
6787 *)      dflt="$sitelib"
6788         ;;
6789 esac
6790 $cat <<EOM
6791
6792 The installation process will create a directory for
6793 site-specific extensions and modules.  Most users find it convenient
6794 to place all site-specific files in this directory rather than in the
6795 main distribution directory.
6796
6797 EOM
6798 fn=d~+
6799 rp='Pathname for the site-specific library files?'
6800 . ./getfile
6801 sitelib="$ans"
6802 sitelibexp="$ansexp"
6803 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6804 : Change installation prefix, if necessary.
6805 if $test X"$prefix" != X"$installprefix"; then
6806         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6807 else
6808         installsitelib="$sitelibexp"
6809 fi
6810
6811 : determine where site specific architecture-dependent libraries go.
6812 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6813 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6814 : sitelib may have an optional trailing /share.
6815 case "$sitearch" in
6816 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6817         dflt="$dflt/$archname"
6818         ;;
6819 *)      dflt="$sitearch"
6820         ;;
6821 esac
6822 set sitearch sitearch none
6823 eval $prefixit
6824 $cat <<EOM
6825
6826 The installation process will also create a directory for
6827 architecture-dependent site-specific extensions and modules.
6828
6829 EOM
6830 fn=d~+
6831 rp='Pathname for the site-specific architecture-dependent library files?'
6832 . ./getfile
6833 sitearch="$ans"
6834 sitearchexp="$ansexp"
6835 : Change installation prefix, if necessary.
6836 if $test X"$prefix" != X"$installprefix"; then
6837         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6838 else
6839         installsitearch="$sitearchexp"
6840 fi
6841
6842 $cat <<EOM
6843
6844 The installation process will also create a directory for
6845 vendor-supplied add-ons.  Vendors who supply perl with their system
6846 may find it convenient to place all vendor-supplied files in this
6847 directory rather than in the main distribution directory.  This will
6848 ease upgrades between binary-compatible maintenance versions of perl.
6849
6850 Of course you may also use these directories in whatever way you see
6851 fit.  For example, you might use them to access modules shared over a
6852 company-wide network.
6853
6854 The default answer should be fine for most people.
6855 This causes further questions about vendor add-ons to be skipped
6856 and no vendor-specific directories will be configured for perl.
6857
6858 EOM
6859 rp='Do you want to configure vendor-specific add-on directories?'
6860 case "$usevendorprefix" in
6861 define|true|[yY]*) dflt=y ;;
6862 *)      : User may have set vendorprefix directly on Configure command line.
6863         case "$vendorprefix" in
6864         ''|' ') dflt=n ;;
6865         *)      dflt=y ;;
6866         esac
6867         ;;
6868 esac
6869 . ./myread
6870 case "$ans" in
6871 [yY]*)  fn=d~+
6872         rp='Installation prefix to use for vendor-supplied add-ons?'
6873         case "$vendorprefix" in
6874         '') dflt='' ;;
6875         *)  dflt=$vendorprefix ;;
6876         esac
6877         . ./getfile
6878         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6879         oldvendorprefix=''
6880         case "$vendorprefix" in
6881         '') ;;
6882         *)      case "$ans" in
6883                 "$prefix") ;;
6884                 *) oldvendorprefix="$prefix";;
6885                 esac
6886                 ;;
6887         esac
6888         usevendorprefix="$define"
6889         vendorprefix="$ans"
6890         vendorprefixexp="$ansexp"
6891         ;;
6892 *)      usevendorprefix="$undef"
6893         vendorprefix=''
6894         vendorprefixexp=''
6895         ;;
6896 esac
6897
6898 case "$vendorprefix" in
6899 '')     d_vendorlib="$undef"
6900         vendorlib=''
6901         vendorlibexp=''
6902         ;;
6903 *)      d_vendorlib="$define"
6904         : determine where vendor-supplied modules go.
6905         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6906         case "$vendorlib" in
6907         '')
6908                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6909                 case "$installstyle" in
6910                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6911                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6912                 esac
6913                 ;;
6914         *)      dflt="$vendorlib"
6915                 ;;
6916         esac
6917         fn=d~+
6918         rp='Pathname for the vendor-supplied library files?'
6919         . ./getfile
6920         vendorlib="$ans"
6921         vendorlibexp="$ansexp"
6922         ;;
6923 esac
6924 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6925 : Change installation prefix, if necessary.
6926 if $test X"$prefix" != X"$installprefix"; then
6927         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6928 else
6929         installvendorlib="$vendorlibexp"
6930 fi
6931
6932 case "$vendorprefix" in
6933 '')     d_vendorarch="$undef"
6934         vendorarch=''
6935         vendorarchexp=''
6936         ;;
6937 *)      d_vendorarch="$define"
6938         : determine where vendor-supplied architecture-dependent libraries go.
6939         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6940         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6941         : vendorlib may have an optional trailing /share.
6942         case "$vendorarch" in
6943         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6944                 dflt="$dflt/$archname"
6945                 ;;
6946         *)      dflt="$vendorarch" ;;
6947         esac
6948         fn=d~+
6949         rp='Pathname for vendor-supplied architecture-dependent files?'
6950         . ./getfile
6951         vendorarch="$ans"
6952         vendorarchexp="$ansexp"
6953         ;;
6954 esac
6955 : Change installation prefix, if necessary.
6956 if $test X"$prefix" != X"$installprefix"; then
6957         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6958 else
6959         installvendorarch="$vendorarchexp"
6960 fi
6961
6962 : Final catch-all directories to search
6963 $cat <<EOM
6964
6965 Lastly, you can have perl look in other directories for extensions and
6966 modules in addition to those already specified.
6967 These directories will be searched after 
6968         $sitearch 
6969         $sitelib 
6970 EOM
6971 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6972 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6973 echo ' '
6974 case "$otherlibdirs" in
6975 ''|' ') dflt='none' ;;
6976 *)      dflt="$otherlibdirs" ;;
6977 esac
6978 $cat <<EOM
6979 Enter a colon-separated set of extra paths to include in perl's @INC
6980 search path, or enter 'none' for no extra paths.
6981
6982 EOM
6983
6984 rp='Colon-separated list of additional directories for perl to search?'
6985 . ./myread
6986 case "$ans" in
6987 ' '|''|none)    otherlibdirs=' ' ;;     
6988 *)      otherlibdirs="$ans" ;;
6989 esac
6990 case "$otherlibdirs" in
6991 ' ') val=$undef ;;
6992 *)      val=$define ;;
6993 esac
6994 set d_perl_otherlibdirs
6995 eval $setvar
6996
6997 : Cruising for prototypes
6998 echo " "
6999 echo "Checking out function prototypes..." >&4
7000 $cat >prototype.c <<'EOCP'
7001 int main(int argc, char *argv[]) {
7002         exit(0);}
7003 EOCP
7004 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
7005         echo "Your C compiler appears to support function prototypes."
7006         val="$define"
7007 else
7008         echo "Your C compiler doesn't seem to understand function prototypes."
7009         val="$undef"
7010 fi
7011 set prototype
7012 eval $setvar
7013 $rm -f prototype*
7014
7015 case "$prototype" in
7016 "$define") ;;
7017 *)      ansi2knr='ansi2knr'
7018         echo " "
7019         cat <<EOM >&4
7020
7021 $me:  FATAL ERROR:
7022 This version of $package can only be compiled by a compiler that 
7023 understands function prototypes.  Unfortunately, your C compiler 
7024         $cc $ccflags
7025 doesn't seem to understand them.  Sorry about that.
7026
7027 If GNU cc is available for your system, perhaps you could try that instead.  
7028
7029 Eventually, we hope to support building Perl with pre-ANSI compilers.
7030 If you would like to help in that effort, please contact <perlbug@perl.org>.
7031
7032 Aborting Configure now.
7033 EOM
7034         exit 2
7035         ;;
7036 esac
7037
7038 : determine where public executables go
7039 echo " "
7040 set dflt bin bin
7041 eval $prefixit
7042 fn=d~
7043 rp='Pathname where the public executables will reside?'
7044 . ./getfile
7045 if $test "X$ansexp" != "X$binexp"; then
7046         installbin=''
7047 fi
7048 bin="$ans"
7049 binexp="$ansexp"
7050 : Change installation prefix, if necessary.
7051 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7052 if $test X"$prefix" != X"$installprefix"; then
7053         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7054 else
7055         installbin="$binexp"
7056 fi
7057
7058 echo " "
7059 case "$extras" in
7060 '') dflt='n';;
7061 *) dflt='y';;
7062 esac
7063 cat <<EOM
7064 Perl can be built with extra modules or bundles of modules which
7065 will be fetched from the CPAN and installed alongside Perl.
7066
7067 Notice that you will need access to the CPAN; either via the Internet,
7068 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7069 be asked later to configure the CPAN.pm module which will in turn do
7070 the installation of the rest of the extra modules or bundles.)
7071
7072 Notice also that if the modules require any external software such as
7073 libraries and headers (the libz library and the zlib.h header for the
7074 Compress::Zlib module, for example) you MUST have any such software
7075 already installed, this configuration process will NOT install such
7076 things for you.
7077
7078 If this doesn't make any sense to you, just accept the default '$dflt'.
7079 EOM
7080 rp='Install any extra modules (y or n)?'
7081 . ./myread
7082 case "$ans" in
7083 y|Y)
7084         cat <<EOM
7085
7086 Please list any extra modules or bundles to be installed from CPAN,
7087 with spaces between the names.  The names can be in any format the
7088 'install' command of CPAN.pm will understand.  (Answer 'none',
7089 without the quotes, to install no extra modules or bundles.)
7090 EOM
7091         rp='Extras?'
7092         dflt="$extras"
7093         . ./myread
7094         extras="$ans"
7095 esac
7096 case "$extras" in
7097 ''|'none')
7098         val=''
7099         $rm -f ../extras.lst
7100         ;;
7101 *)      echo "(Saving the list of extras for later...)"
7102         echo "$extras" > ../extras.lst
7103         val="'$extras'"
7104         ;;
7105 esac
7106 set extras
7107 eval $setvar
7108 echo " "
7109
7110 : Find perl5.005 or later.
7111 echo "Looking for a previously installed perl5.005 or later... "
7112 case "$perl5" in
7113 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7114                 : Check if this perl is recent and can load a simple module
7115                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7116                         perl5=$tdir/perl
7117                         break;
7118                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7119                         perl5=$tdir/perl5
7120                         break;
7121                 fi
7122         done
7123         ;;
7124 *)      perl5="$perl5"
7125         ;;
7126 esac
7127 case "$perl5" in
7128 '')     echo "None found.  That's ok.";;
7129 *)      echo "Using $perl5." ;;
7130 esac
7131
7132 : Determine list of previous versions to include in @INC
7133 $cat > getverlist <<EOPL
7134 #!$perl5 -w
7135 use File::Basename;
7136 \$api_versionstring = "$api_versionstring";
7137 \$version = "$version";
7138 \$stem = "$sitelib_stem";
7139 \$archname = "$archname";
7140 EOPL
7141         $cat >> getverlist <<'EOPL'
7142 # Can't have leading @ because metaconfig interprets it as a command!
7143 ;@inc_version_list=();
7144 # XXX Redo to do opendir/readdir? 
7145 if (-d $stem) {
7146     chdir($stem);
7147     ;@candidates = glob("5.*");
7148 }
7149 else {
7150     ;@candidates = ();
7151 }
7152
7153 # XXX ToDo:  These comparisons must be reworked when two-digit
7154 # subversions come along, so that 5.7.10 compares as greater than
7155 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7156 # widespread that we can use the built-in version vectors rather
7157 # than reinventing them here.  For 5.6.0, however, we must
7158 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7159 foreach $d (@candidates) {
7160     if ($d lt $version) {
7161         if ($d ge $api_versionstring) {
7162             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7163         }
7164         elsif ($d ge "5.005") {
7165             unshift(@inc_version_list, grep { -d } $d);
7166         }
7167     }
7168     else {
7169         # Skip newer version.  I.e. don't look in
7170         # 5.7.0 if we're installing 5.6.1.
7171     }
7172 }
7173
7174 if (@inc_version_list) {
7175     print join(' ', @inc_version_list);
7176 }
7177 else {
7178     # Blank space to preserve value for next Configure run.
7179     print " ";
7180 }
7181 EOPL
7182 chmod +x getverlist
7183 case "$inc_version_list" in
7184 '')     if test -x "$perl5$exe_ext"; then
7185                 dflt=`$perl5 getverlist`
7186         else
7187                 dflt='none'
7188         fi
7189         ;;
7190 $undef) dflt='none' ;;
7191 *)  eval dflt=\"$inc_version_list\" ;;
7192 esac
7193 case "$dflt" in
7194 ''|' ') dflt=none ;;
7195 esac
7196 case "$dflt" in
7197 5.005) case "$bincompat5005" in
7198        $define|true|[yY]*) ;;
7199        *) dflt=none ;;
7200        esac
7201        ;;
7202 esac
7203 $cat <<'EOM'
7204
7205 In order to ease the process of upgrading, this version of perl 
7206 can be configured to use modules built and installed with earlier 
7207 versions of perl that were installed under $prefix.  Specify here
7208 the list of earlier versions that this version of perl should check.
7209 If Configure detected no earlier versions of perl installed under
7210 $prefix, then the list will be empty.  Answer 'none' to tell perl
7211 to not search earlier versions.
7212
7213 The default should almost always be sensible, so if you're not sure,
7214 just accept the default.
7215 EOM
7216
7217 rp='List of earlier versions to include in @INC?'
7218 . ./myread
7219 case "$ans" in
7220 [Nn]one|''|' ') inc_version_list=' ' ;;
7221 *) inc_version_list="$ans" ;;
7222 esac
7223 case "$inc_version_list" in
7224 ''|' ') 
7225         inc_version_list_init='0';;
7226 *)      inc_version_list_init=`echo $inc_version_list |
7227                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7228         ;;
7229 esac
7230 $rm -f getverlist
7231
7232 : determine whether to install perl also as /usr/bin/perl
7233
7234 echo " "
7235 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7236         $cat <<EOM
7237 Many scripts expect perl to be installed as /usr/bin/perl.
7238 I can install the perl you are about to compile also as /usr/bin/perl
7239 (in addition to $installbin/perl).
7240 EOM
7241         case "$installusrbinperl" in
7242         "$undef"|[nN]*) dflt='n';;
7243         *)              dflt='y';;
7244         esac
7245         rp="Do you want to install perl as /usr/bin/perl?"
7246         . ./myread
7247         case "$ans" in
7248         [yY]*)  val="$define";;
7249         *)      val="$undef" ;;
7250         esac
7251 else
7252         val="$undef"
7253 fi
7254 set installusrbinperl
7255 eval $setvar
7256
7257 : see if dld is available
7258 set dld.h i_dld
7259 eval $inhdr
7260
7261 : see if dlopen exists
7262 xxx_runnm="$runnm"
7263 runnm=false
7264 set dlopen d_dlopen
7265 eval $inlibc
7266 runnm="$xxx_runnm"
7267
7268 : determine which dynamic loading, if any, to compile in
7269 echo " "
7270 dldir="ext/DynaLoader"
7271 case "$usedl" in
7272 $define|y|true)
7273         dflt='y'
7274         usedl="$define"
7275         ;;
7276 $undef|n|false)
7277         dflt='n'
7278         usedl="$undef"
7279         ;;
7280 *) 
7281         dflt='n'
7282         case "$d_dlopen" in
7283             $define) dflt='y' ;;
7284         esac
7285         case "$i_dld" in
7286             $define) dflt='y' ;;
7287         esac
7288         : Does a dl_xxx.xs file exist for this operating system
7289         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7290         ;;
7291 esac
7292 rp="Do you wish to use dynamic loading?"
7293 . ./myread
7294 usedl="$ans"
7295 case "$ans" in
7296 y*) usedl="$define"
7297         case "$dlsrc" in
7298         '')
7299                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7300                         dflt="$dldir/dl_${osname}.xs"
7301                 elif $test "$d_dlopen" = "$define" ; then
7302                         dflt="$dldir/dl_dlopen.xs"
7303                 elif $test "$i_dld" = "$define" ; then
7304                         dflt="$dldir/dl_dld.xs"
7305                 else
7306                         dflt=''
7307                 fi
7308                 ;;
7309         *)      dflt="$dldir/$dlsrc"
7310                 ;;
7311         esac
7312     echo "The following dynamic loading files are available:"
7313         : Can not go over to $dldir because getfile has path hard-coded in.
7314         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7315         rp="Source file to use for dynamic loading"
7316         fn="fne"
7317         gfpth="$src"
7318         . ./getfile
7319         usedl="$define"
7320         : emulate basename
7321         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7322
7323         $cat << EOM
7324
7325 Some systems may require passing special flags to $cc -c to
7326 compile modules that will be used to create a shared library.
7327 To use no flags, say "none".
7328
7329 EOM
7330     case "$cccdlflags" in
7331     '') case "$gccversion" in
7332                 '') case "$osname" in
7333                         hpux)   dflt='+z' ;;
7334                         next)   dflt='none' ;;
7335                         irix*)  dflt='-KPIC' ;;
7336                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7337                         sunos)  dflt='-pic' ;;
7338                         *)      dflt='none' ;;
7339                     esac
7340                         ;;
7341                 *)  case "$osname" in
7342                         darwin) dflt='none' ;;
7343                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7344                         *)      dflt='-fpic' ;;
7345                     esac ;;
7346             esac ;;
7347         ' ') dflt='none' ;;
7348     *)  dflt="$cccdlflags" ;;
7349     esac
7350     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7351     . ./myread
7352     case "$ans" in
7353     none) cccdlflags=' ' ;;
7354     *) cccdlflags="$ans" ;;
7355     esac
7356
7357     cat << EOM
7358
7359 Some systems use ld to create libraries that can be dynamically loaded,
7360 while other systems (such as those using ELF) use $cc.
7361
7362 EOM
7363         case "$ld" in
7364         '')     $cat >try.c <<'EOM'
7365 /* Test for whether ELF binaries are produced */
7366 #include <fcntl.h>
7367 #include <stdlib.h>
7368 int main() {
7369         char b[4];
7370         int i = open("a.out",O_RDONLY);
7371         if(i == -1) 
7372                 exit(1); /* fail */
7373         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7374                 exit(0); /* succeed (yes, it's ELF) */
7375         else
7376                 exit(1); /* fail */
7377 }
7378 EOM
7379                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7380                         cat <<EOM
7381 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7382 EOM
7383                         dflt="$cc"
7384                 else
7385                         echo "I'll use ld to build dynamic libraries."
7386                         dflt='ld'
7387                 fi
7388                 rm -f try.c a.out
7389                 ;;
7390         *)      dflt="$ld"
7391                 ;;
7392         esac
7393
7394     rp="What command should be used to create dynamic libraries?"
7395     . ./myread
7396         ld="$ans"
7397
7398     cat << EOM
7399
7400 Some systems may require passing special flags to $ld to create a
7401 library that can be dynamically loaded.  If your ld flags include
7402 -L/other/path options to locate libraries outside your loader's normal
7403 search path, you may need to specify those -L options here as well.  To
7404 use no flags, say "none".
7405
7406 EOM
7407     case "$lddlflags" in
7408     '') case "$osname" in
7409                         beos) dflt='-nostart' ;;
7410                         hpux) dflt='-b';
7411                               case "$gccversion" in
7412                               '') dflt="$dflt +vnocompatwarnings" ;;
7413                               esac
7414                               ;;        
7415                         linux|irix*)    dflt='-shared' ;;
7416                         next)  dflt='none' ;;
7417                         solaris) dflt='-G' ;;
7418                         sunos) dflt='-assert nodefinitions' ;;
7419                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7420                 *)     dflt='none' ;;
7421                         esac
7422                         ;;
7423     *) dflt="$lddlflags" ;;
7424     esac
7425
7426         : Try to guess additional flags to pick up local libraries.
7427         : Be careful not to append to a plain 'none'
7428         case "$dflt" in
7429         none) dflt='' ;;
7430         esac
7431         for thisflag in $ldflags; do
7432                 case "$thisflag" in
7433                 -L*|-R*|-Wl,-R*)
7434                         case " $dflt " in
7435                         *" $thisflag "*) ;;
7436                         *) dflt="$dflt $thisflag" ;;
7437                         esac
7438                         ;;
7439                 esac
7440         done
7441
7442         case "$dflt" in
7443         ''|' ') dflt='none' ;;
7444         esac
7445
7446     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7447     . ./myread
7448     case "$ans" in
7449     none) lddlflags=' ' ;;
7450     *) lddlflags="$ans" ;;
7451     esac
7452
7453         cat <<EOM
7454
7455 Some systems may require passing special flags to $cc to indicate that
7456 the resulting executable will use dynamic linking.  To use no flags,
7457 say "none".
7458
7459 EOM
7460     case "$ccdlflags" in
7461     '') case "$osname" in
7462                 hpux)   dflt='-Wl,-E' ;;
7463                 linux)  dflt='-rdynamic' ;;
7464                 next)   dflt='none' ;;
7465                 sunos)  dflt='none' ;;
7466                 *)      dflt='none' ;;
7467             esac ;;
7468     ' ')  dflt='none' ;;
7469     *)  dflt="$ccdlflags" ;;
7470     esac
7471     rp="Any special flags to pass to $cc to use dynamic linking?"
7472     . ./myread
7473     case "$ans" in
7474     none) ccdlflags=' ' ;;
7475     *) ccdlflags="$ans" ;;
7476     esac
7477     ;;
7478 *)  usedl="$undef"
7479         ld='ld'
7480     dlsrc='dl_none.xs'
7481     lddlflags=''
7482     ccdlflags=''
7483     ;;
7484 esac
7485
7486 also=''
7487 case "$usedl" in
7488 $undef)
7489         # No dynamic loading being used, so don't bother even to prompt.
7490         useshrplib='false'
7491         ;;
7492 *)      case "$useshrplib" in
7493         '')     case "$osname" in
7494                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7495                         dflt=y
7496                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7497                         ;;
7498                 next*)
7499                         case "$osvers" in
7500                         4*)     dflt=y
7501                                 also='Building a shared libperl is needed for MAB support.'
7502                                 ;;
7503                         *)      dflt=n
7504                                 ;;
7505                         esac
7506                         ;;
7507                 *)      dflt=n
7508                         ;;
7509                 esac
7510                 ;;
7511         $define|true|[Yy]*)
7512                 dflt=y
7513                 ;;
7514         *)      dflt=n
7515                 ;;
7516         esac
7517         $cat << EOM
7518
7519 The perl executable is normally obtained by linking perlmain.c with
7520 libperl${_a}, any static extensions (usually just DynaLoader), and
7521 any other libraries needed on this system (such as -lm, etc.).  Since
7522 your system supports dynamic loading, it is probably possible to build
7523 a shared libperl.$so.  If you will have more than one executable linked
7524 to libperl.$so, this will significantly reduce the size of each
7525 executable, but it may have a noticeable affect on performance.  The
7526 default is probably sensible for your system.
7527 $also
7528
7529 EOM
7530         rp="Build a shared libperl.$so (y/n)"
7531         . ./myread
7532         case "$ans" in
7533         true|$define|[Yy]*)
7534                 useshrplib='true'  ;;
7535         *)      useshrplib='false' ;;
7536         esac
7537         ;;
7538 esac
7539
7540 case "$useshrplib" in
7541 true)
7542         case "$libperl" in
7543         '')
7544                 # Figure out a good name for libperl.so.  Since it gets stored in
7545                 # a version-specific architecture-dependent library, the version
7546                 # number isn't really that important, except for making cc/ld happy.
7547                 #
7548                 # A name such as libperl.so.3.1
7549                 majmin="libperl.$so.$patchlevel.$subversion"
7550                 # A name such as libperl.so.301
7551                 majonly=`echo $patchlevel $subversion |
7552                         $awk '{printf "%d%02d", $1, $2}'`
7553                 majonly=libperl.$so.$majonly
7554                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7555                 # rely on figuring it out from the naming of libc.
7556                 case "${osname}${osvers}" in
7557                 next4*)
7558                         dflt=libperl.5.$so
7559                         # XXX How handle the --version stuff for MAB?
7560                         ;;
7561                 linux*)  # ld won't link with a bare -lperl otherwise.
7562                         dflt=libperl.$so
7563                         ;;
7564                 cygwin*) # ld links against an importlib
7565                         dflt=libperl$lib_ext
7566                         ;;
7567                 *)      # Try to guess based on whether libc has major.minor.
7568                         case "$libc" in
7569                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7570                         *libc.$so.[0-9]*) dflt=$majonly ;;
7571                         *)      dflt=libperl.$so ;;
7572                         esac
7573                         ;;
7574                 esac
7575                 ;;
7576         *)      dflt=$libperl
7577                 ;;
7578         esac
7579         cat << EOM
7580
7581 I need to select a good name for the shared libperl.  If your system uses
7582 library names with major and minor numbers, then you might want something
7583 like $majmin.  Alternatively, if your system uses a single version
7584 number for shared libraries, then you might want to use $majonly.
7585 Or, your system might be quite happy with a simple libperl.$so.
7586
7587 Since the shared libperl will get installed into a version-specific
7588 architecture-dependent directory, the version number of the shared perl
7589 library probably isn't important, so the default should be o.k.
7590
7591 EOM
7592         rp='What name do you want to give to the shared libperl?'
7593         . ./myread
7594         libperl=$ans
7595         echo "Ok, I'll use $libperl"
7596         ;;
7597 *)
7598         libperl="libperl${_a}"
7599         ;;
7600 esac
7601
7602 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7603 case "$shrpdir" in
7604 '') ;;
7605 *)      $cat >&4 <<EOM
7606 WARNING:  Use of the shrpdir variable for the installation location of
7607 the shared $libperl is not supported.  It was never documented and
7608 will not work in this version.  Let me (perlbug@perl.org)
7609 know of any problems this may cause.
7610
7611 EOM
7612         case "$shrpdir" in
7613         "$archlibexp/CORE")
7614                 $cat >&4 <<EOM
7615 But your current setting of $shrpdir is
7616 the default anyway, so it's harmless.
7617 EOM
7618                 ;;
7619         *)
7620                 $cat >&4 <<EOM
7621 Further, your current attempted setting of $shrpdir
7622 conflicts with the value of $archlibexp/CORE
7623 that installperl will use.
7624 EOM
7625                 ;;
7626         esac
7627         ;;
7628 esac
7629
7630 # How will the perl executable find the installed shared $libperl?
7631 # Add $xxx to ccdlflags.
7632 # If we can't figure out a command-line option, use $shrpenv to
7633 # set env LD_RUN_PATH.  The main perl makefile uses this.
7634 shrpdir=$archlibexp/CORE
7635 xxx=''
7636 tmp_shrpenv=''
7637 if "$useshrplib"; then
7638     case "$osname" in 
7639         aix)
7640                 # We'll set it in Makefile.SH...
7641                 ;;
7642         solaris)
7643                 xxx="-R $shrpdir"
7644                 ;;
7645         freebsd|netbsd)
7646                 xxx="-Wl,-R$shrpdir"
7647                 ;;
7648         bsdos|linux|irix*|dec_osf)
7649                 xxx="-Wl,-rpath,$shrpdir"
7650                 ;;
7651         next)
7652                 # next doesn't like the default...
7653                 ;;
7654         beos)
7655                 # beos doesn't like the default, either.
7656                 ;;
7657         hpux*)
7658                 # hpux doesn't like the default, either.
7659                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7660                 ;;
7661         *)
7662                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7663                 ;;
7664         esac
7665         case "$xxx" in
7666         '') ;;
7667         *)      
7668                 # Only add $xxx if it isn't already in ccdlflags.
7669                 case " $ccdlflags " in
7670                 *" $xxx "*)     ;;
7671                 *)      ccdlflags="$ccdlflags $xxx"
7672                         cat <<EOM >&4
7673
7674 Adding $xxx to the flags
7675 passed to $ld so that the perl executable will find the 
7676 installed shared $libperl.
7677
7678 EOM
7679                         ;;
7680                 esac
7681                 ;;
7682         esac
7683 fi
7684 # Fix ccdlflags in AIX for building external extensions.
7685 # (For building Perl itself bare -bE:perl.exp is needed,
7686 #  Makefile.SH takes care of this.)
7687 case "$osname" in
7688 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7689 esac
7690 # Respect a hint or command-line value.
7691 case "$shrpenv" in
7692 '') shrpenv="$tmp_shrpenv" ;;
7693 esac
7694 case "$ldlibpthname" in
7695 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7696 none)   ldlibpthname='' ;;
7697 esac
7698
7699 : determine where manual pages are on this system
7700 echo " "
7701 case "$sysman" in
7702 '') 
7703         syspath='/usr/share/man/man1 /usr/man/man1'
7704         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7705         syspath="$syspath /usr/man/u_man/man1"
7706         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7707         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7708         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7709         sysman=`./loc . /usr/man/man1 $syspath`
7710         ;;
7711 esac
7712 if $test -d "$sysman"; then
7713         echo "System manual is in $sysman." >&4
7714 else
7715         echo "Could not find manual pages in source form." >&4
7716 fi
7717
7718 : determine where manual pages go
7719 set man1dir man1dir none
7720 eval $prefixit
7721 $cat <<EOM
7722
7723 $spackage has manual pages available in source form.
7724 EOM
7725 case "$nroff" in
7726 nroff)
7727         echo "However, you don't have nroff, so they're probably useless to you."
7728         case "$man1dir" in
7729         '') man1dir="none";;
7730         esac;;
7731 esac
7732 echo "If you don't want the manual sources installed, answer 'none'."
7733 case "$man1dir" in
7734 ' ') dflt=none
7735         ;;
7736 '')
7737         lookpath="$prefixexp/share/man/man1"
7738         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7739         lookpath="$lookpath $prefixexp/man/p_man/man1"
7740         lookpath="$lookpath $prefixexp/man/u_man/man1"
7741         lookpath="$lookpath $prefixexp/man/man.1"
7742         case "$sysman" in
7743         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7744         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7745         esac
7746         set dflt
7747         eval $prefixup
7748         ;;
7749 *)  dflt="$man1dir"
7750         ;;
7751 esac
7752 echo " "
7753 fn=dn+~
7754 rp="Where do the main $spackage manual pages (source) go?"
7755 . ./getfile
7756 if $test "X$man1direxp" != "X$ansexp"; then
7757         installman1dir=''
7758 fi
7759 man1dir="$ans"
7760 man1direxp="$ansexp"
7761 case "$man1dir" in
7762 '')     man1dir=' '
7763         installman1dir='';;
7764 esac
7765
7766 : Change installation prefix, if necessary.
7767 if $test X"$prefix" != X"$installprefix"; then
7768         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7769 else
7770         installman1dir="$man1direxp"
7771 fi
7772
7773 : What suffix to use on installed man pages
7774
7775 case "$man1dir" in
7776 ' ')
7777         man1ext='0'
7778         ;;
7779 *)
7780         rp="What suffix should be used for the main $spackage man pages?"
7781         case "$man1ext" in
7782         '')     case "$man1dir" in
7783                 *1)  dflt=1 ;;
7784                 *1p) dflt=1p ;;
7785                 *1pm) dflt=1pm ;;
7786                 *l) dflt=l;;
7787                 *n) dflt=n;;
7788                 *o) dflt=o;;
7789                 *p) dflt=p;;
7790                 *C) dflt=C;;
7791                 *L) dflt=L;;
7792                 *L1) dflt=L1;;
7793                 *) dflt=1;;
7794                 esac
7795                 ;;
7796         *)      dflt="$man1ext";;
7797         esac
7798         . ./myread
7799         man1ext="$ans"
7800         ;;
7801 esac
7802
7803 : see if we can have long filenames
7804 echo " "
7805 first=123456789abcdef
7806 $rm -f $first
7807 if (echo hi >$first) 2>/dev/null; then
7808         if $test -f 123456789abcde; then
7809                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7810                 val="$undef"
7811         else
7812                 echo 'You can have filenames longer than 14 characters.'>&4
7813                 val="$define"
7814         fi
7815 else
7816         $cat <<'EOM'
7817 You can't have filenames longer than 14 chars.
7818 You can't even think about them!
7819 EOM
7820         val="$undef"
7821 fi 
7822 set d_flexfnam
7823 eval $setvar
7824 $rm -rf 123456789abcde*
7825
7826 : determine where library module manual pages go
7827 set man3dir man3dir none
7828 eval $prefixit
7829 $cat <<EOM
7830
7831 $spackage has manual pages for many of the library modules.
7832 EOM
7833
7834 case "$nroff" in
7835 nroff)
7836         $cat <<'EOM'
7837 However, you don't have nroff, so they're probably useless to you.
7838 EOM
7839         case "$man3dir" in
7840         '') man3dir="none";;
7841         esac;;
7842 esac
7843
7844 case "$d_flexfnam" in
7845 undef)
7846         $cat <<'EOM'
7847 However, your system can't handle the long file names like File::Basename.3. 
7848 EOM
7849         case "$man3dir" in
7850         '') man3dir="none";;
7851         esac;;
7852 esac
7853
7854 echo "If you don't want the manual sources installed, answer 'none'."
7855 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7856 case "$man3dir" in
7857 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7858         if $test -d "$privlib/man/man3"; then
7859                 cat <<EOM >&4
7860
7861 WARNING:  Previous versions of perl installed man3 pages into
7862 $privlib/man/man3.  This version will suggest a 
7863 new default of $dflt.  
7864 EOM
7865                 tdflt=$dflt
7866                 dflt='n'
7867                 rp='Do you wish to preserve the old behavior?(y/n)'
7868                 . ./myread
7869                 case "$ans" in
7870                 y*) dflt="$privlib/man/man3" ;;
7871                 *)  dflt=$tdflt ;;
7872                 esac
7873     fi
7874         ;;
7875 *)      dflt="$man3dir" ;;
7876 esac
7877 case "$dflt" in
7878 ' ') dflt=none ;;
7879 esac
7880 echo " "
7881 fn=dn+~
7882 rp="Where do the $package library man pages (source) go?"
7883 . ./getfile
7884 man3dir="$ans"
7885 man3direxp="$ansexp"
7886 case "$man3dir" in
7887 '')     man3dir=' '
7888         installman3dir='';;
7889 esac
7890
7891 : Change installation prefix, if necessary.
7892 if $test X"$prefix" != X"$installprefix"; then
7893         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7894 else
7895         installman3dir="$man3direxp"
7896 fi
7897
7898 : What suffix to use on installed man pages
7899 case "$man3dir" in
7900 ' ')
7901         man3ext='0'
7902         ;;
7903 *)
7904         rp="What suffix should be used for the $package library man pages?"
7905         case "$man3ext" in
7906         '')     case "$man3dir" in
7907                 *3)  dflt=3 ;;
7908                 *3p) dflt=3p ;;
7909                 *3pm) dflt=3pm ;;
7910                 *l) dflt=l;;
7911                 *n) dflt=n;;
7912                 *o) dflt=o;;
7913                 *p) dflt=p;;
7914                 *C) dflt=C;;
7915                 *L) dflt=L;;
7916                 *L3) dflt=L3;;
7917                 *) dflt=3;;
7918                 esac
7919                 ;;
7920         *)      dflt="$man3ext";;
7921         esac
7922         . ./myread
7923         man3ext="$ans"
7924         ;;
7925 esac
7926
7927 : see if we have to deal with yellow pages, now NIS.
7928 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7929         if $test -f /usr/etc/nibindd; then
7930                 echo " "
7931                 echo "I'm fairly confident you're on a NeXT."
7932                 echo " "
7933                 rp='Do you get the hosts file via NetInfo?'
7934                 dflt=y
7935                 case "$hostcat" in
7936                 nidump*) ;;
7937                 '') ;;
7938                 *) dflt=n;;
7939                 esac
7940                 . ./myread
7941                 case "$ans" in
7942                 y*) hostcat='nidump hosts .';;
7943                 *)      case "$hostcat" in
7944                         nidump*) hostcat='';;
7945                         esac
7946                         ;;
7947                 esac
7948         fi
7949         case "$hostcat" in
7950         nidump*) ;;
7951         *)
7952                 case "$hostcat" in
7953                 *ypcat*) dflt=y;;
7954                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7955                                 dflt=y
7956                         else
7957                                 dflt=n
7958                         fi;;
7959                 *) dflt=n;;
7960                 esac
7961                 echo " "
7962                 rp='Are you getting the hosts file via yellow pages?'
7963                 . ./myread
7964                 case "$ans" in
7965                 y*) hostcat='ypcat hosts';;
7966                 *) hostcat='cat /etc/hosts';;
7967                 esac
7968                 ;;
7969         esac
7970 fi
7971 case "$hostcat" in
7972 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7973 esac
7974 case "$groupcat" in
7975 '') test -f /etc/group && groupcat='cat /etc/group';;
7976 esac
7977 case "$passcat" in
7978 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7979 esac
7980
7981 : now get the host name
7982 echo " "
7983 echo "Figuring out host name..." >&4
7984 case "$myhostname" in
7985 '') cont=true
7986         echo 'Maybe "hostname" will work...'
7987         if tans=`sh -c hostname 2>&1` ; then
7988                 myhostname=$tans
7989                 phostname=hostname
7990                 cont=''
7991         fi
7992         ;;
7993 *) cont='';;
7994 esac
7995 if $test "$cont"; then
7996         if ./xenix; then
7997                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7998                 if tans=`cat /etc/systemid 2>&1` ; then
7999                         myhostname=$tans
8000                         phostname='cat /etc/systemid'
8001                         echo "Whadyaknow.  Xenix always was a bit strange..."
8002                         cont=''
8003                 fi
8004         elif $test -r /etc/systemid; then
8005                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8006         fi
8007 fi
8008 if $test "$cont"; then
8009         echo 'No, maybe "uuname -l" will work...'
8010         if tans=`sh -c 'uuname -l' 2>&1` ; then
8011                 myhostname=$tans
8012                 phostname='uuname -l'
8013         else
8014                 echo 'Strange.  Maybe "uname -n" will work...'
8015                 if tans=`sh -c 'uname -n' 2>&1` ; then
8016                         myhostname=$tans
8017                         phostname='uname -n'
8018                 else
8019                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8020                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8021                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8022                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8023                         else
8024                                 case "$myhostname" in
8025                                 '') echo "Does this machine have an identity crisis or something?"
8026                                         phostname='';;
8027                                 *)
8028                                         echo "Well, you said $myhostname before..."
8029                                         phostname='echo $myhostname';;
8030                                 esac
8031                         fi
8032                 fi
8033         fi
8034 fi
8035 case "$myhostname" in
8036 '') myhostname=noname ;;
8037 esac
8038 : you do not want to know about this
8039 set $myhostname
8040 myhostname=$1
8041
8042 : verify guess
8043 if $test "$myhostname" ; then
8044         dflt=y
8045         rp='Your host name appears to be "'$myhostname'".'" Right?"
8046         . ./myread
8047         case "$ans" in
8048         y*) ;;
8049         *) myhostname='';;
8050         esac
8051 fi
8052
8053 : bad guess or no guess
8054 while $test "X$myhostname" = X ; do
8055         dflt=''
8056         rp="Please type the (one word) name of your host:"
8057         . ./myread
8058         myhostname="$ans"
8059 done
8060
8061 : translate upper to lower if necessary
8062 case "$myhostname" in
8063 *[A-Z]*)
8064         echo "(Normalizing case in your host name)"
8065         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8066         ;;
8067 esac
8068
8069 case "$myhostname" in
8070 *.*)
8071         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8072         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8073         echo "(Trimming domain name from host name--host name is now $myhostname)"
8074         ;;
8075 *) case "$mydomain" in
8076         '')
8077                 {
8078                         test "X$hostcat" = "Xypcat hosts" &&
8079                         ypmatch "$myhostname" hosts 2>/dev/null |\
8080                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8081                         $test -s hosts
8082                 } || {
8083                         test "X$hostcat" != "X" &&
8084                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8085                                         /[       ]$myhostname[  . ]/p" > hosts
8086                 }
8087                 tmp_re="[       . ]"
8088                 if $test -f hosts; then
8089                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8090                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8091                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8092                                 hosts | $sort | $uniq | \
8093                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8094                         case `$echo X$dflt` in
8095                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8096                                 dflt=.
8097                                 ;;
8098                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8099                                 ;;
8100                         esac
8101                 else
8102                         echo "(I cannot locate a hosts database anywhere)"
8103                         dflt=.
8104                 fi
8105                 case "$dflt" in
8106                 .)
8107                         tans=`./loc resolv.conf X /etc /usr/etc`
8108                         if $test -f "$tans"; then
8109                                 echo "(Attempting domain name extraction from $tans)"
8110                                 dflt=.`$sed -n -e 's/   / /g' \
8111                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8112                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8113                                 case "$dflt" in
8114                                 .) dflt=.`$sed -n -e 's/        / /g' \
8115                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8116                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8117                                         ;;
8118                                 esac
8119                         fi
8120                         ;;
8121                 esac
8122                 case "$dflt" in
8123                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8124                         dflt=.`sh -c domainname 2>/dev/null`
8125                         case "$dflt" in
8126                         '') dflt='.';;
8127                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8128                         esac
8129                         ;;
8130                 esac
8131                 case "$dflt$osname" in
8132                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8133                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8134                         ;;
8135                 esac
8136                 case "$dflt" in
8137                 .) echo "(Lost all hope -- silly guess then)"
8138                         dflt='.nonet'
8139                         ;;
8140                 esac
8141                 $rm -f hosts
8142                 ;;
8143         *) dflt="$mydomain";;
8144         esac;;
8145 esac
8146 echo " "
8147 rp="What is your domain name?"
8148 . ./myread
8149 tans="$ans"
8150 case "$ans" in
8151 '') ;;
8152 .*) ;;
8153 *) tans=".$tans";;
8154 esac
8155 mydomain="$tans"
8156
8157 : translate upper to lower if necessary
8158 case "$mydomain" in
8159 *[A-Z]*)
8160         echo "(Normalizing case in your domain name)"
8161         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8162         ;;
8163 esac
8164
8165 : a little sanity check here
8166 case "$phostname" in
8167 '') ;;
8168 *)
8169         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8170         $myhostname$mydomain|$myhostname) ;;
8171         *)
8172                 case "$phostname" in
8173                 sed*)
8174                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8175                         ;;
8176                 *)
8177                         echo "(That doesn't agree with your $phostname command, by the way.)"
8178                         ;;
8179                 esac
8180         ;;
8181         esac
8182         ;;
8183 esac
8184
8185 $cat <<EOM
8186
8187 I need to get your e-mail address in Internet format if possible, i.e.
8188 something like user@host.domain. Please answer accurately since I have
8189 no easy means to double check it. The default value provided below
8190 is most probably close to reality but may not be valid from outside
8191 your organization...
8192
8193 EOM
8194 cont=x
8195 while test "$cont"; do
8196         case "$cf_email" in
8197         '') dflt="$cf_by@$myhostname$mydomain";;
8198         *) dflt="$cf_email";;
8199         esac
8200         rp='What is your e-mail address?'
8201         . ./myread
8202         cf_email="$ans"
8203         case "$cf_email" in
8204         *@*.*) cont='' ;;
8205         *)
8206                 rp='Address does not look like an Internet one.  Use it anyway?'
8207                 case "$fastread" in
8208                 yes) dflt=y ;;
8209                 *) dflt=n ;;
8210                 esac
8211                 . ./myread
8212                 case "$ans" in
8213                 y*) cont='' ;;
8214                 *) echo " " ;;
8215                 esac
8216                 ;;
8217         esac
8218 done
8219
8220 $cat <<EOM
8221
8222 If you or somebody else will be maintaining perl at your site, please
8223 fill in the correct e-mail address here so that they may be contacted
8224 if necessary. Currently, the "perlbug" program included with perl
8225 will send mail to this address in addition to perlbug@perl.org. You may
8226 enter "none" for no administrator.
8227
8228 EOM
8229 case "$perladmin" in
8230 '') dflt="$cf_email";;
8231 *) dflt="$perladmin";;
8232 esac
8233 rp='Perl administrator e-mail address'
8234 . ./myread
8235 perladmin="$ans"
8236
8237 : determine whether to only install version-specific parts.
8238 echo " "
8239 $cat <<EOM
8240 Do you want to install only the version-specific parts of the perl
8241 distribution?  Usually you do *not* want to do this.
8242 EOM
8243 case "$versiononly" in
8244 "$define"|[Yy]*|true) dflt='y' ;;
8245 *) dflt='n';
8246 esac
8247 rp="Do you want to install only the version-specific parts of perl?"
8248 . ./myread
8249 case "$ans" in
8250 [yY]*)  val="$define";;
8251 *)      val="$undef" ;;
8252 esac
8253 set versiononly
8254 eval $setvar
8255
8256 : figure out how to guarantee perl startup
8257 case "$startperl" in
8258 '')
8259         case "$sharpbang" in
8260         *!)
8261                 $cat <<EOH
8262
8263 I can use the #! construct to start perl on your system. This will
8264 make startup of perl scripts faster, but may cause problems if you
8265 want to share those scripts and perl is not in a standard place
8266 ($binexp/perl) on all your platforms. The alternative is to force
8267 a shell by starting the script with a single ':' character.
8268
8269 EOH
8270                 case "$versiononly" in
8271                 "$define")      dflt="$binexp/perl$version";;  
8272                 *)              dflt="$binexp/perl";;
8273                 esac
8274                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8275                 . ./myread
8276                 case "$ans" in
8277                 none)   startperl=": # use perl";;
8278                 *)      startperl="#!$ans"
8279                         if $test 30 -lt `echo "$ans" | wc -c`; then
8280                                 $cat >&4 <<EOM
8281
8282 WARNING:  Some systems limit the #! command to 32 characters.
8283 If you experience difficulty running Perl scripts with #!, try
8284 installing Perl in a directory with a shorter pathname.
8285
8286 EOM
8287                         fi ;;
8288                 esac
8289                 ;;
8290         *) startperl=": # use perl"
8291                 ;;
8292         esac
8293         ;;
8294 esac
8295 echo "I'll use $startperl to start perl scripts."
8296
8297 : figure best path for perl in scripts
8298 case "$perlpath" in
8299 '')
8300         case "$versiononly" in
8301         "$define")      perlpath="$binexp/perl$version";;
8302         *)              perlpath="$binexp/perl";;
8303         esac
8304         case "$startperl" in
8305         *!*) ;;
8306         *)
8307                 $cat <<EOH
8308
8309 I will use the "eval 'exec'" idiom to start Perl on your system.
8310 I can use the full path of your Perl binary for this purpose, but
8311 doing so may cause problems if you want to share those scripts and
8312 Perl is not always in a standard place ($binexp/perl).
8313
8314 EOH
8315                 dflt="$binexp/perl"
8316                 rp="What path shall I use in \"eval 'exec'\"?"
8317                 . ./myread
8318                 perlpath="$ans"
8319                 ;;
8320         esac
8321         ;;
8322 esac
8323 case "$startperl" in
8324 *!*)    ;;
8325 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8326 esac
8327
8328 : determine where public executable scripts go
8329 set scriptdir scriptdir
8330 eval $prefixit
8331 case "$scriptdir" in
8332 '')
8333         dflt="$bin"
8334         : guess some guesses
8335         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8336         $test -d /usr/share/bin     && dflt=/usr/share/bin
8337         $test -d /usr/local/script  && dflt=/usr/local/script
8338         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8339         $test -d $prefixexp/script  && dflt=$prefixexp/script
8340         set dflt
8341         eval $prefixup
8342         ;;
8343 *)  dflt="$scriptdir"
8344         ;;
8345 esac
8346 $cat <<EOM
8347  
8348 Some installations have a separate directory just for executable scripts so
8349 that they can mount it across multiple architectures but keep the scripts in
8350 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8351 Or you might just lump your scripts in with all your other executables.
8352  
8353 EOM
8354 fn=d~
8355 rp='Where do you keep publicly executable scripts?'
8356 . ./getfile
8357 if $test "X$ansexp" != "X$scriptdirexp"; then
8358         installscript=''
8359 fi
8360 scriptdir="$ans"
8361 scriptdirexp="$ansexp"
8362 : Change installation prefix, if necessary.
8363 if $test X"$prefix" != X"$installprefix"; then
8364         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8365 else
8366         installscript="$scriptdirexp"
8367 fi
8368
8369 : determine where add-on public executables go
8370 case "$sitebin" in
8371 '')     dflt=$siteprefix/bin ;;
8372 *)      dflt=$sitebin ;;
8373 esac
8374 fn=d~
8375 rp='Pathname where the add-on public executables should be installed?'
8376 . ./getfile
8377 sitebin="$ans"
8378 sitebinexp="$ansexp"
8379 : Change installation prefix, if necessary.
8380 if $test X"$prefix" != X"$installprefix"; then
8381         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8382 else
8383         installsitebin="$sitebinexp"
8384 fi
8385
8386 : define an is-a-typedef? function
8387 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8388 case "$inclist" in
8389 "") inclist="sys/types.h";;
8390 esac;
8391 eval "varval=\$$var";
8392 case "$varval" in
8393 "")
8394         $rm -f temp.c;
8395         for inc in $inclist; do
8396                 echo "#include <$inc>" >>temp.c;
8397         done;
8398         echo "#ifdef $type" >> temp.c;
8399         echo "printf(\"We have $type\");" >> temp.c;
8400         echo "#endif" >> temp.c;
8401         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8402         if $contains $type temp.E >/dev/null 2>&1; then
8403                 eval "$var=\$type";
8404         else
8405                 eval "$var=\$def";
8406         fi;
8407         $rm -f temp.?;;
8408 *) eval "$var=\$varval";;
8409 esac'
8410
8411 : define an is-a-typedef? function that prompts if the type is not available.
8412 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8413 case "$inclist" in
8414 "") inclist="sys/types.h";;
8415 esac;
8416 eval "varval=\$$var";
8417 case "$varval" in
8418 "")
8419         $rm -f temp.c;
8420         for inc in $inclist; do
8421                 echo "#include <$inc>" >>temp.c;
8422         done;
8423         echo "#ifdef $type" >> temp.c;
8424         echo "printf(\"We have $type\");" >> temp.c;
8425         echo "#endif" >> temp.c;
8426         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8427         echo " " ;
8428         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8429         if $contains $type temp.E >/dev/null 2>&1; then
8430                 echo "$type found." >&4;
8431                 eval "$var=\$type";
8432         else
8433                 echo "$type NOT found." >&4;
8434                 dflt="$def";
8435                 . ./myread ;
8436                 eval "$var=\$ans";
8437         fi;
8438         $rm -f temp.?;;
8439 *) eval "$var=\$varval";;
8440 esac'
8441
8442 : see what type lseek is declared as in the kernel
8443 rp="What is the type used for lseek's offset on this system?"
8444 set off_t lseektype long stdio.h sys/types.h
8445 eval $typedef_ask
8446
8447 echo " "
8448 echo "Checking to see how big your file offsets are..." >&4
8449 $cat >try.c <<EOCP
8450 #include <sys/types.h>
8451 #include <stdio.h>
8452 int main()
8453 {
8454     printf("%d\n", (int)sizeof($lseektype));
8455     return(0); 
8456 }
8457 EOCP
8458 set try
8459 if eval $compile_ok; then
8460         lseeksize=`$run ./try`
8461         echo "Your file offsets are $lseeksize bytes long."
8462 else
8463         dflt=$longsize
8464         echo " "
8465         echo "(I can't seem to compile the test program.  Guessing...)"
8466         rp="What is the size of your file offsets (in bytes)?"
8467         . ./myread
8468         lseeksize="$ans"
8469 fi
8470 $rm -f try.c try
8471
8472 : see what type file positions are declared as in the library
8473 rp="What is the type for file position used by fsetpos()?"
8474 set fpos_t fpostype long stdio.h sys/types.h
8475 eval $typedef_ask
8476
8477 echo " "
8478 case "$fpostype" in
8479 *_t) zzz="$fpostype"    ;;
8480 *)   zzz="fpos_t"       ;;
8481 esac
8482 echo "Checking the size of $zzz..." >&4 
8483 cat > try.c <<EOCP
8484 #include <sys/types.h>
8485 #include <stdio.h>
8486 int main() {
8487     printf("%d\n", (int)sizeof($fpostype));
8488     exit(0);
8489 }
8490 EOCP
8491 set try
8492 if eval $compile_ok; then
8493         yyy=`$run ./try`
8494         case "$yyy" in
8495         '')     fpossize=4
8496                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8497                 ;;
8498         *)      fpossize=$yyy
8499                 echo "Your $zzz is $fpossize bytes long."
8500                 ;;
8501         esac
8502 else
8503         dflt="$longsize"
8504         echo " " >&4
8505         echo "(I can't compile the test program.  Guessing...)" >&4
8506         rp="What is the size of your file positions (in bytes)?"
8507         . ./myread
8508         fpossize="$ans"
8509 fi
8510
8511
8512
8513 # Backward compatibility (uselfs is deprecated).
8514 case "$uselfs" in
8515 "$define"|true|[yY]*)
8516         cat <<EOM >&4
8517
8518 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8519 EOM
8520         uselargefiles="$define"
8521         ;;
8522 esac                          
8523
8524 case "$lseeksize:$fpossize" in
8525 8:8) cat <<EOM
8526
8527 You can have files larger than 2 gigabytes.
8528 EOM
8529    val="$define" ;;
8530 *)    case "$uselargefiles" in
8531    "$undef"|false|[nN]*) dflt='n' ;;
8532    *)   dflt='y' ;;
8533    esac
8534    cat <<EOM
8535
8536 Perl can be built to understand large files (files larger than 2 gigabytes)
8537 on some systems.  To do so, Configure can be run with -Duselargefiles.
8538
8539 If this doesn't make any sense to you, just accept the default '$dflt'.
8540 EOM
8541    rp='Try to understand large files, if available?'
8542    . ./myread
8543    case "$ans" in
8544    y|Y)         val="$define" ;;
8545    *)           val="$undef"  ;;
8546    esac
8547    ;;
8548 esac
8549 set uselargefiles
8550 eval $setvar
8551 case "$uselargefiles" in
8552 "$define")
8553 : Look for a hint-file generated 'call-back-unit'.  If the
8554 : user has specified that a large files perl is to be built,
8555 : we may need to set or change some other defaults.
8556         if $test -f uselargefiles.cbu; then
8557                 echo "Your platform has some specific hints for large file builds, using them..."
8558                 . ./uselargefiles.cbu
8559                 echo " "
8560                 echo "Rechecking to see how big your file offsets are..." >&4
8561                 $cat >try.c <<EOCP
8562 #include <sys/types.h>
8563 #include <stdio.h>
8564 int main()
8565 {
8566     printf("%d\n", (int)sizeof($lseektype));
8567     return(0); 
8568 }
8569 EOCP
8570                 set try
8571                 if eval $compile_ok; then
8572                         lseeksize=`$run ./try`
8573                         $echo "Your file offsets are now $lseeksize bytes long."
8574                 else
8575                         dflt="$lseeksize"
8576                         echo " "
8577                         echo "(I can't seem to compile the test program.  Guessing...)"
8578                         rp="What is the size of your file offsets (in bytes)?"
8579                         . ./myread
8580                         lseeksize="$ans"
8581                 fi
8582                 case "$fpostype" in
8583                 *_t) zzz="$fpostype"    ;;
8584                 *)   zzz="fpos_t"       ;;
8585                 esac
8586                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8587                 $cat > try.c <<EOCP
8588 #include <sys/types.h>
8589 #include <stdio.h>
8590 int main() {
8591     printf("%d\n", (int)sizeof($fpostype));
8592     exit(0);
8593 }
8594 EOCP
8595                 set try
8596                 if eval $compile_ok; then
8597                         yyy=`$run ./try`
8598                         dflt="$lseeksize"
8599                         case "$yyy" in
8600                         '')     echo " "
8601                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8602                                 ;;
8603                         *)      fpossize=$yyy
8604                                 echo " $fpossize bytes." >&4
8605                                 ;;
8606                         esac
8607                 else
8608                         dflt="$fpossize"
8609                         echo " "
8610                         echo "(I can't compile the test program.  Guessing...)" >&4
8611                         rp="What is the size of your file positions (in bytes)?"
8612                         . ./myread
8613                         fpossize="$ans"
8614                 fi
8615                 $rm -f try.c try
8616         fi
8617         ;;
8618 esac
8619
8620 case "$vendorprefix" in
8621 '')     d_vendorbin="$undef"
8622         vendorbin=''
8623         vendorbinexp=''
8624         ;;
8625 *)      d_vendorbin="$define"
8626         : determine where vendor-supplied executables go.
8627         case "$vendorbin" in
8628         '') dflt=$vendorprefix/bin ;;
8629         *)      dflt="$vendorbin" ;;
8630         esac
8631         fn=d~+
8632         rp='Pathname for the vendor-supplied executables directory?'
8633         . ./getfile
8634         vendorbin="$ans"
8635         vendorbinexp="$ansexp"
8636         ;;
8637 esac
8638 : Change installation prefix, if necessary.
8639 if $test X"$prefix" != X"$installprefix"; then
8640         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8641 else
8642         installvendorbin="$vendorbinexp"
8643 fi
8644
8645 : see if qgcvt exists
8646 set qgcvt d_qgcvt
8647 eval $inlibc
8648
8649 : Check how to convert floats to strings.
8650 echo " "
8651 echo "Checking for an efficient way to convert floats to strings."
8652 echo " " > try.c
8653 case "$uselongdouble" in
8654 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8655 esac
8656 case "$d_longdbl" in
8657 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8658 esac
8659 case "$d_PRIgldbl" in
8660 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8661 esac
8662 $cat >>try.c <<EOP
8663 #ifdef TRY_gconvert
8664 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8665 char *myname = "gconvert";
8666 #endif
8667 #ifdef TRY_gcvt
8668 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8669 char *myname = "gcvt";
8670 #endif
8671 #ifdef TRY_qgcvt
8672 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8673 char *myname = "qgcvt";
8674 #define DOUBLETYPE long double
8675 #endif
8676 #ifdef TRY_sprintf
8677 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8678 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8679 #else
8680 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8681 #endif
8682 char *myname = "sprintf";
8683 #endif
8684
8685 #ifndef DOUBLETYPE
8686 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8687 #define DOUBLETYPE long double
8688 #else
8689 #define DOUBLETYPE double
8690 #endif
8691 #endif
8692
8693 #include <stdio.h>
8694
8695 #define I_STDLIB $i_stdlib
8696 #ifdef I_STDLIB
8697 #include <stdlib.h>
8698 #endif
8699
8700 int
8701 checkit(expect, got)
8702 char *expect;
8703 char *got;
8704 {
8705     if (strcmp(expect, got)) {
8706                 printf("%s oddity:  Expected %s, got %s\n",
8707                         myname, expect, got);
8708                 exit(1);
8709         }
8710 }
8711
8712 int main()
8713
8714         char buf[64]; 
8715         buf[63] = '\0';
8716
8717         /* This must be 1st test on (which?) platform */
8718         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8719         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8720         checkit("0.1", buf);
8721
8722         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8723         checkit("1", buf);
8724
8725         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8726         checkit("1.1", buf);
8727
8728         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8729         checkit("1.01", buf);
8730
8731         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8732         checkit("1.001", buf);
8733
8734         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8735         checkit("1.0001", buf);
8736
8737         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8738         checkit("1.00001", buf);
8739
8740         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8741         checkit("1.000001", buf);
8742
8743         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8744         checkit("0", buf);
8745
8746         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8747         checkit("-1", buf);
8748
8749         /* Some Linux gcvt's give 1.e+5 here. */
8750         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8751         checkit("100000", buf);
8752         
8753         /* Some Linux gcvt's give -1.e+5 here. */
8754         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8755         checkit("-100000", buf);
8756
8757         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8758         checkit("123.456", buf);
8759
8760         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8761         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8762         if (strlen(buf) > 5)
8763             checkit("1e+030", buf); /* for Microsoft */
8764         else
8765             checkit("1e+30", buf);
8766
8767         exit(0);
8768 }
8769 EOP
8770 case "$d_Gconvert" in
8771 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8772 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8773 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8774 *) xxx_list='gconvert gcvt sprintf' ;;
8775 esac
8776
8777 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8778 "$define$define$define")
8779     # for long doubles prefer first qgcvt, then sprintf
8780     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8781     xxx_list="sprintf $xxx_list"
8782     case "$d_qgcvt" in
8783     "$define") xxx_list="qgcvt $xxx_list" ;;
8784     esac
8785     ;;
8786 esac
8787
8788 for xxx_convert in $xxx_list; do
8789         echo "Trying $xxx_convert..."
8790         $rm -f try try$_o
8791         set try -DTRY_$xxx_convert
8792         if eval $compile; then
8793                 echo "$xxx_convert() found." >&4
8794                 if $run ./try; then
8795                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8796                         break;
8797                 else
8798                         echo "...But $xxx_convert didn't work as I expected."
8799                 fi
8800         else
8801                 echo "$xxx_convert NOT found." >&4
8802         fi
8803 done
8804         
8805 case "$xxx_convert" in
8806 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8807 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8808 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8809 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8810    "$define$define$define")
8811       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8812    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8813    esac
8814    ;;  
8815 esac
8816
8817 : see if _fwalk exists
8818 set fwalk d__fwalk
8819 eval $inlibc
8820
8821 : Initialize h_fcntl
8822 h_fcntl=false
8823
8824 : Initialize h_sysfile
8825 h_sysfile=false
8826
8827 : access call always available on UNIX
8828 set access d_access
8829 eval $inlibc
8830
8831 : locate the flags for 'access()'
8832 case "$d_access" in
8833 "$define")
8834         echo " "
8835         $cat >access.c <<'EOCP'
8836 #include <sys/types.h>
8837 #ifdef I_FCNTL
8838 #include <fcntl.h>
8839 #endif
8840 #ifdef I_SYS_FILE
8841 #include <sys/file.h>
8842 #endif
8843 #ifdef I_UNISTD
8844 #include <unistd.h>
8845 #endif
8846 int main() {
8847         exit(R_OK);
8848 }
8849 EOCP
8850         : check sys/file.h first, no particular reason here
8851         if $test `./findhdr sys/file.h` && \
8852                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8853                 h_sysfile=true;
8854                 echo "<sys/file.h> defines the *_OK access constants." >&4
8855         elif $test `./findhdr fcntl.h` && \
8856                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8857                 h_fcntl=true;
8858                 echo "<fcntl.h> defines the *_OK access constants." >&4
8859         elif $test `./findhdr unistd.h` && \
8860                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8861                 echo "<unistd.h> defines the *_OK access constants." >&4
8862         else
8863                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8864         fi
8865         ;;
8866 esac
8867 $rm -f access*
8868
8869 : see if accessx exists
8870 set accessx d_accessx
8871 eval $inlibc
8872
8873 : see if alarm exists
8874 set alarm d_alarm
8875 eval $inlibc
8876
8877 : see if atolf exists
8878 set atolf d_atolf
8879 eval $inlibc
8880
8881 : see if atoll exists
8882 set atoll d_atoll
8883 eval $inlibc
8884
8885 : Look for GNU-cc style attribute checking
8886 echo " "
8887 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8888 $cat >attrib.c <<'EOCP'
8889 #include <stdio.h>
8890 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8891 EOCP
8892 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8893         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8894                 echo "Your C compiler doesn't fully support __attribute__."
8895                 val="$undef"
8896         else
8897                 echo "Your C compiler supports __attribute__."
8898                 val="$define"
8899         fi
8900 else
8901         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8902         val="$undef"
8903 fi
8904 set d_attribut
8905 eval $setvar
8906 $rm -f attrib*
8907
8908 : see if bcmp exists
8909 set bcmp d_bcmp
8910 eval $inlibc
8911
8912 : see if bcopy exists
8913 set bcopy d_bcopy
8914 eval $inlibc
8915
8916 : see if this is a unistd.h system
8917 set unistd.h i_unistd
8918 eval $inhdr
8919
8920 : see if getpgrp exists
8921 set getpgrp d_getpgrp
8922 eval $inlibc
8923
8924 case "$d_getpgrp" in
8925 "$define")
8926         echo " "
8927         echo "Checking to see which flavor of getpgrp is in use..."
8928         $cat >try.c <<EOP
8929 #$i_unistd I_UNISTD
8930 #include <sys/types.h>
8931 #ifdef I_UNISTD
8932 #  include <unistd.h>
8933 #endif
8934 int main()
8935 {
8936         if (getuid() == 0) {
8937                 printf("(I see you are running Configure as super-user...)\n");
8938                 setuid(1);
8939         }
8940 #ifdef TRY_BSD_PGRP
8941         if (getpgrp(1) == 0)
8942                 exit(0);
8943 #else
8944         if (getpgrp() > 0)
8945                 exit(0);
8946 #endif
8947         exit(1);
8948 }
8949 EOP
8950         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8951                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8952                 val="$define"
8953         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8954                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8955                 val="$undef"
8956         else
8957                 echo "I can't seem to compile and run the test program."
8958                 if ./usg; then
8959                         xxx="a USG one, i.e. you use getpgrp()."
8960                 else
8961                         # SVR4 systems can appear rather BSD-ish.
8962                         case "$i_unistd" in
8963                         $undef)
8964                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8965                                 val="$define"
8966                                 ;;
8967                         $define)
8968                                 xxx="probably a USG one, i.e. you use getpgrp()."
8969                                 val="$undef"
8970                                 ;;
8971                         esac
8972                 fi
8973                 echo "Assuming your getpgrp is $xxx" >&4
8974         fi
8975         ;;
8976 *) val="$undef";;
8977 esac
8978 set d_bsdgetpgrp
8979 eval $setvar
8980 $rm -f try try.*
8981
8982 : see if setpgrp exists
8983 set setpgrp d_setpgrp
8984 eval $inlibc
8985
8986 case "$d_setpgrp" in
8987 "$define")
8988         echo " "
8989         echo "Checking to see which flavor of setpgrp is in use..."
8990         $cat >try.c <<EOP
8991 #$i_unistd I_UNISTD
8992 #include <sys/types.h>
8993 #ifdef I_UNISTD
8994 #  include <unistd.h>
8995 #endif
8996 int main()
8997 {
8998         if (getuid() == 0) {
8999                 printf("(I see you are running Configure as super-user...)\n");
9000                 setuid(1);
9001         }
9002 #ifdef TRY_BSD_PGRP
9003         if (-1 == setpgrp(1, 1))
9004                 exit(0);
9005 #else
9006         if (setpgrp() != -1)
9007                 exit(0);
9008 #endif
9009         exit(1);
9010 }
9011 EOP
9012         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9013                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9014                 val="$define"
9015         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9016                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9017                 val="$undef"
9018         else
9019                 echo "(I can't seem to compile and run the test program.)"
9020                 if ./usg; then
9021                         xxx="a USG one, i.e. you use setpgrp()."
9022                 else
9023                         # SVR4 systems can appear rather BSD-ish.
9024                         case "$i_unistd" in
9025                         $undef)
9026                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9027                                 val="$define"
9028                                 ;;
9029                         $define)
9030                                 xxx="probably a USG one, i.e. you use setpgrp()."
9031                                 val="$undef"
9032                                 ;;
9033                         esac
9034                 fi
9035                 echo "Assuming your setpgrp is $xxx" >&4
9036         fi
9037         ;;
9038 *) val="$undef";;
9039 esac
9040 set d_bsdsetpgrp
9041 eval $setvar
9042 $rm -f try try.*
9043 : see if bzero exists
9044 set bzero d_bzero
9045 eval $inlibc
9046
9047 : see if signal is declared as pointer to function returning int or void
9048 echo " "
9049 xxx=`./findhdr signal.h`
9050 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9051 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9052         echo "You have int (*signal())() instead of void." >&4
9053         val="$undef"
9054 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9055         echo "You have void (*signal())()." >&4
9056         val="$define"
9057 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9058         echo "You have int (*signal())() instead of void." >&4
9059         val="$undef"
9060 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9061         echo "You have void (*signal())()." >&4
9062         val="$define"
9063 else
9064         case "$d_voidsig" in
9065         '')
9066         echo "I can't determine whether signal handler returns void or int..." >&4
9067                 dflt=void
9068                 rp="What type does your signal handler return?"
9069                 . ./myread
9070                 case "$ans" in
9071                 v*) val="$define";;
9072                 *) val="$undef";;
9073                 esac;;
9074         "$define")
9075                 echo "As you already told me, signal handler returns void." >&4
9076                 val="$define"
9077                 ;;
9078         *)      echo "As you already told me, signal handler returns int." >&4
9079                 val="$undef"
9080                 ;;
9081         esac
9082 fi
9083 set d_voidsig
9084 eval $setvar
9085 case "$d_voidsig" in
9086 "$define") signal_t="void";;
9087 *) signal_t="int";;
9088 esac
9089 $rm -f $$.tmp
9090
9091 : check for ability to cast large floats to 32-bit ints.
9092 echo " "
9093 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9094 if $test "$intsize" -ge 4; then
9095         xxx=int
9096 else
9097         xxx=long
9098 fi
9099 $cat >try.c <<EOCP
9100 #include <stdio.h>
9101 #include <sys/types.h>
9102 #include <signal.h>
9103 $signal_t blech(s) int s; { exit(3); }
9104 int main()
9105 {
9106         $xxx i32;
9107         double f, g;
9108         int result = 0;
9109         char str[16];
9110         signal(SIGFPE, blech);
9111
9112         /* Don't let compiler optimize the test away.  Store the number 
9113            in a writable string for gcc to pass to sscanf under HP/UX.
9114         */
9115         sprintf(str, "2147483647");
9116         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9117         g = 10 * f;
9118         i32  = ($xxx) g;
9119
9120         /* x86 processors will probably give 0x8000 0000, which is a
9121        sign change.  We don't want that.  We want to mimic SPARC
9122            behavior here, which is to preserve the sign and give
9123            back 0x7fff ffff.
9124         */
9125         if (i32 != ($xxx) f)
9126                 result |= 1;
9127         exit(result);
9128 }
9129 EOCP
9130 set try
9131 if eval $compile_ok; then
9132         $run ./try
9133         yyy=$?
9134 else
9135         echo "(I can't seem to compile the test program--assuming it can't)"
9136         yyy=1
9137 fi
9138 case "$yyy" in
9139 0)      val="$define"
9140         echo "Yup, it can."
9141         ;;
9142 *)      val="$undef"
9143         echo "Nope, it can't."
9144         ;;
9145 esac
9146 set d_casti32
9147 eval $setvar
9148 $rm -f try try.*
9149
9150 : check for ability to cast negative floats to unsigned
9151 echo " "
9152 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9153 $cat >try.c <<EOCP
9154 #include <stdio.h>
9155 #include <sys/types.h>
9156 #include <signal.h>
9157 $signal_t blech(s) int s; { exit(7); }
9158 $signal_t blech_in_list(s) int s; { exit(4); }
9159 unsigned long dummy_long(p) unsigned long p; { return p; }
9160 unsigned int dummy_int(p) unsigned int p; { return p; }
9161 unsigned short dummy_short(p) unsigned short p; { return p; }
9162 int main()
9163 {
9164         double f;
9165         unsigned long along;
9166         unsigned int aint;
9167         unsigned short ashort;
9168         int result = 0;
9169         char str[16];
9170         
9171         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9172            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9173            optimized the whole file away
9174         */
9175         /* Store the number in a writable string for gcc to pass to 
9176            sscanf under HP/UX.
9177         */
9178         sprintf(str, "-123");
9179         sscanf(str, "%lf", &f);  /* f = -123.; */
9180
9181         signal(SIGFPE, blech);
9182         along = (unsigned long)f;
9183         aint = (unsigned int)f;
9184         ashort = (unsigned short)f;
9185         if (along != (unsigned long)-123)
9186                 result |= 1;
9187         if (aint != (unsigned int)-123)
9188                 result |= 1;
9189         if (ashort != (unsigned short)-123)
9190                 result |= 1;
9191         sprintf(str, "1073741824.");
9192         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9193         f = f + f;
9194         along = 0;
9195         along = (unsigned long)f;
9196         if (along != 0x80000000)
9197                 result |= 2;
9198         f -= 1.;
9199         along = 0;
9200         along = (unsigned long)f;
9201         if (along != 0x7fffffff)
9202                 result |= 1;
9203         f += 2.;
9204         along = 0;
9205         along = (unsigned long)f;
9206         if (along != 0x80000001)
9207                 result |= 2;
9208         if (result)
9209                 exit(result);
9210         signal(SIGFPE, blech_in_list);
9211         sprintf(str, "123.");
9212         sscanf(str, "%lf", &f);  /* f = 123.; */
9213         along = dummy_long((unsigned long)f);
9214         aint = dummy_int((unsigned int)f);
9215         ashort = dummy_short((unsigned short)f);
9216         if (along != (unsigned long)123)
9217                 result |= 4;
9218         if (aint != (unsigned int)123)
9219                 result |= 4;
9220         if (ashort != (unsigned short)123)
9221                 result |= 4;
9222         exit(result);
9223
9224 }
9225 EOCP
9226 set try
9227 if eval $compile_ok; then
9228         $run ./try
9229         castflags=$?
9230 else
9231         echo "(I can't seem to compile the test program--assuming it can't)"
9232         castflags=7
9233 fi
9234 case "$castflags" in
9235 0)      val="$define"
9236         echo "Yup, it can."
9237         ;;
9238 *)      val="$undef"
9239         echo "Nope, it can't."
9240         ;;
9241 esac
9242 set d_castneg
9243 eval $setvar
9244 $rm -f try.*
9245
9246 : see if vprintf exists
9247 echo " "
9248 if set vprintf val -f d_vprintf; eval $csym; $val; then
9249         echo 'vprintf() found.' >&4
9250         val="$define"
9251         $cat >try.c <<'EOF'
9252 #include <varargs.h>
9253
9254 int main() { xxx("foo"); }
9255
9256 xxx(va_alist)
9257 va_dcl
9258 {
9259         va_list args;
9260         char buf[10];
9261
9262         va_start(args);
9263         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9264 }
9265 EOF
9266         set try
9267         if eval $compile && $run ./try; then
9268                 echo "Your vsprintf() returns (int)." >&4
9269                 val2="$undef"
9270         else
9271                 echo "Your vsprintf() returns (char*)." >&4
9272                 val2="$define"
9273         fi
9274 else
9275         echo 'vprintf() NOT found.' >&4
9276                 val="$undef"
9277                 val2="$undef"
9278 fi
9279 $rm -f try try.*
9280 set d_vprintf
9281 eval $setvar
9282 val=$val2
9283 set d_charvspr
9284 eval $setvar
9285
9286 : see if chown exists
9287 set chown d_chown
9288 eval $inlibc
9289
9290 : see if chroot exists
9291 set chroot d_chroot
9292 eval $inlibc
9293
9294 : see if chsize exists
9295 set chsize d_chsize
9296 eval $inlibc
9297
9298 : see if class exists
9299 set class d_class
9300 eval $inlibc
9301
9302 hasstruct='varname=$1; struct=$2; shift; shift;
9303 while $test $# -ge 2; do
9304         case "$1" in
9305         $define) echo "#include <$2>";;
9306         esac ;
9307     shift 2;
9308 done > try.c;
9309 echo "int main () { struct $struct foo; }" >> try.c;
9310 set try;
9311 if eval $compile; then
9312         val="$define";
9313 else
9314         val="$undef";
9315 fi;
9316 set $varname;
9317 eval $setvar;
9318 $rm -f try.c try.o'
9319
9320 : see if sys/types.h has to be included
9321 set sys/types.h i_systypes
9322 eval $inhdr
9323
9324 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9325 while $test $# -ge 2; do
9326         case "$1" in
9327         $define) echo "#include <$2>";;
9328         esac ;
9329     shift 2;
9330 done > try.c;
9331 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9332 set try;
9333 if eval $compile; then
9334         val="$define";
9335 else
9336         val="$undef";
9337 fi;
9338 set $varname;
9339 eval $setvar;
9340 $rm -f try.c try.o'
9341
9342 socketlib=''
9343 sockethdr=''
9344 : see whether socket exists
9345 echo " "
9346 $echo $n "Hmm... $c" >&4
9347 if set socket val -f d_socket; eval $csym; $val; then
9348         echo "Looks like you have Berkeley networking support." >&4
9349         d_socket="$define"
9350         if set setsockopt val -f; eval $csym; $val; then
9351                 d_oldsock="$undef"
9352         else
9353                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9354                 d_oldsock="$define"
9355         fi
9356 else
9357         if $contains socklib libc.list >/dev/null 2>&1; then
9358                 echo "Looks like you have Berkeley networking support." >&4
9359                 d_socket="$define"
9360                 : we will have to assume that it supports the 4.2 BSD interface
9361                 d_oldsock="$undef"
9362         else
9363                 echo "You don't have Berkeley networking in libc$_a..." >&4
9364                 if test "X$d_socket" = "X$define"; then
9365                    echo "...but you seem to believe that you have sockets." >&4
9366                 else
9367                         for net in net socket
9368                         do
9369                                 if test -f /usr/lib/lib$net$_a; then
9370                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9371                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9372                                         if $contains socket libc.list >/dev/null 2>&1; then
9373                                                 d_socket="$define"
9374                                                 socketlib="-l$net"
9375                                                 case "$net" in
9376                                                 net)
9377                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9378                                                         sockethdr="-I/usr/netinclude"
9379                                                         ;;
9380                                                 esac
9381                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9382                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9383                                                         d_oldsock="$undef"
9384                                                 else
9385                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9386                                                         d_oldsock="$define"
9387                                                 fi
9388                                                 break
9389                                         fi
9390                                 fi
9391                         done
9392                         if test "X$d_socket" != "X$define"; then
9393                            echo "or anywhere else I see." >&4
9394                            d_socket="$undef"
9395                            d_oldsock="$undef"
9396                         fi
9397                 fi
9398         fi
9399 fi
9400
9401 : see if socketpair exists
9402 set socketpair d_sockpair
9403 eval $inlibc
9404
9405
9406 echo " "
9407 echo "Checking the availability of certain socket constants..." >&4
9408 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9409         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9410         $cat >try.c <<EOF
9411 #include <sys/types.h>
9412 #include <sys/socket.h>
9413 int main() {
9414     int i = $ENUM;
9415 }
9416 EOF
9417         val="$undef"
9418         set try; if eval $compile; then
9419                 val="$define"
9420         fi
9421         set d_${enum}; eval $setvar
9422         $rm -f try.c try
9423 done
9424
9425 : see if this is a sys/uio.h system
9426 set sys/uio.h i_sysuio
9427 eval $inhdr
9428
9429
9430 echo " "
9431 echo "Checking to see if your system supports struct cmsghdr..." >&4
9432 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9433 eval $hasstruct
9434 case "$d_cmsghdr_s" in
9435 "$define")      echo "Yes, it does."   ;;
9436 *)              echo "No, it doesn't." ;;
9437 esac
9438
9439
9440 : check for const keyword
9441 echo " "
9442 echo 'Checking to see if your C compiler knows about "const"...' >&4
9443 $cat >const.c <<'EOCP'
9444 typedef struct spug { int drokk; } spug;
9445 int main()
9446 {
9447         const char *foo;
9448         const spug y;
9449 }
9450 EOCP
9451 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9452         val="$define"
9453         echo "Yup, it does."
9454 else
9455         val="$undef"
9456         echo "Nope, it doesn't."
9457 fi
9458 set d_const
9459 eval $setvar
9460
9461 : see if crypt exists
9462 echo " "
9463 set crypt d_crypt
9464 eval $inlibc
9465 case "$d_crypt" in
9466 $define) cryptlib='' ;;
9467 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9468                 echo 'crypt() found.' >&4
9469                 val="$define"
9470                 cryptlib=''
9471         else
9472                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9473                 if $test -z "$cryptlib"; then
9474                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9475                 else
9476                         cryptlib=-lcrypt
9477                 fi
9478                 if $test -z "$cryptlib"; then
9479                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9480                 else
9481                         cryptlib=-lcrypt
9482                 fi
9483                 if $test -z "$cryptlib"; then
9484                         cryptlib=`./loc libcrypt$_a "" $libpth`
9485                 else
9486                         cryptlib=-lcrypt
9487                 fi
9488                 if $test -z "$cryptlib"; then
9489                         echo 'crypt() NOT found.' >&4
9490                         val="$undef"
9491                 else
9492                         val="$define"
9493                 fi
9494         fi
9495         set d_crypt
9496         eval $setvar
9497         ;;
9498 esac
9499
9500 : get csh whereabouts
9501 case "$csh" in
9502 'csh') val="$undef" ;;
9503 *) val="$define" ;;
9504 esac
9505 set d_csh
9506 eval $setvar
9507 : Respect a hint or command line value for full_csh.
9508 case "$full_csh" in
9509 '') full_csh=$csh ;;
9510 esac
9511
9512 : see if cuserid exists
9513 set cuserid d_cuserid
9514 eval $inlibc
9515
9516 : see if this is a limits.h system
9517 set limits.h i_limits
9518 eval $inhdr
9519
9520 : see if this is a float.h system
9521 set float.h i_float
9522 eval $inhdr
9523
9524 : See if number of significant digits in a double precision number is known
9525 echo " "
9526 $cat >dbl_dig.c <<EOM
9527 #$i_limits I_LIMITS
9528 #$i_float I_FLOAT
9529 #ifdef I_LIMITS
9530 #include <limits.h>
9531 #endif
9532 #ifdef I_FLOAT
9533 #include <float.h>
9534 #endif
9535 #ifdef DBL_DIG
9536 printf("Contains DBL_DIG");
9537 #endif
9538 EOM
9539 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9540 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9541         echo "DBL_DIG found." >&4
9542         val="$define"
9543 else
9544         echo "DBL_DIG NOT found." >&4
9545         val="$undef"
9546 fi
9547 $rm -f dbl_dig.?
9548 set d_dbl_dig
9549 eval $setvar
9550
9551 hasproto='varname=$1; func=$2; shift; shift;
9552 while $test $# -ge 2; do
9553         case "$1" in
9554         $define) echo "#include <$2>";;
9555         esac ;
9556     shift 2;
9557 done > try.c;
9558 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9559 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9560         echo "$func() prototype found.";
9561         val="$define";
9562 else
9563         echo "$func() prototype NOT found.";
9564         val="$undef";
9565 fi;
9566 set $varname;
9567 eval $setvar;
9568 $rm -f try.c tryout.c'
9569
9570 : see if dbm.h is available
9571 : see if dbmclose exists
9572 set dbmclose d_dbmclose
9573 eval $inlibc
9574
9575 case "$d_dbmclose" in
9576 $define)
9577         set dbm.h i_dbm
9578         eval $inhdr
9579         case "$i_dbm" in
9580         $define)
9581                 val="$undef"
9582                 set i_rpcsvcdbm
9583                 eval $setvar
9584                 ;;
9585         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9586                 eval $inhdr
9587                 ;;
9588         esac
9589         ;;
9590 *)      echo "We won't be including <dbm.h>"
9591         val="$undef"
9592         set i_dbm
9593         eval $setvar
9594         val="$undef"
9595         set i_rpcsvcdbm
9596         eval $setvar
9597         ;;
9598 esac
9599
9600 : see if prototype for dbminit is available
9601 echo " "
9602 set d_dbminitproto dbminit $i_dbm dbm.h
9603 eval $hasproto
9604
9605 : see if difftime exists
9606 set difftime d_difftime
9607 eval $inlibc
9608
9609 : see if this is a dirent system
9610 echo " "
9611 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9612         val="$define"
9613         echo "<dirent.h> found." >&4
9614 else
9615         val="$undef"
9616         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9617                 echo "<sys/dir.h> found." >&4
9618                 echo " "
9619         else
9620                 xinc=`./findhdr sys/ndir.h`
9621         fi
9622         echo "<dirent.h> NOT found." >&4
9623 fi
9624 set i_dirent
9625 eval $setvar
9626
9627 : Look for type of directory structure.
9628 echo " "
9629 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9630
9631 case "$direntrytype" in
9632 ''|' ')
9633         case "$i_dirent" in
9634         $define) guess1='struct dirent' ;;
9635         *) guess1='struct direct'  ;;
9636         esac
9637         ;;
9638 *)      guess1="$direntrytype"
9639         ;;
9640 esac
9641
9642 case "$guess1" in
9643 'struct dirent') guess2='struct direct' ;;
9644 *) guess2='struct dirent' ;;
9645 esac
9646                 
9647 if $contains "$guess1" try.c >/dev/null 2>&1; then
9648         direntrytype="$guess1"
9649         echo "Your directory entries are $direntrytype." >&4
9650 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9651         direntrytype="$guess2"
9652         echo "Your directory entries seem to be $direntrytype." >&4
9653 else
9654         echo "I don't recognize your system's directory entries." >&4
9655         rp="What type is used for directory entries on this system?"
9656         dflt="$guess1"
9657         . ./myread
9658         direntrytype="$ans"
9659 fi
9660 $rm -f try.c
9661
9662
9663 : see if the directory entry stores field length
9664 echo " "
9665 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9666 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9667         echo "Good, your directory entry keeps length information in d_namlen." >&4
9668         val="$define"
9669 else
9670         echo "Your directory entry does not know about the d_namlen field." >&4
9671         val="$undef"
9672 fi
9673 set d_dirnamlen
9674 eval $setvar
9675 $rm -f try.c
9676
9677 : see if this is an sysdir system
9678 set sys/dir.h i_sysdir
9679 eval $inhdr
9680
9681 : see if this is an sysndir system
9682 set sys/ndir.h i_sysndir
9683 eval $inhdr
9684
9685 : Look for dirfd
9686 echo " "
9687 $cat >dirfd.c <<EOM
9688 #include <stdio.h>
9689 #$i_dirent I_DIRENT             /**/
9690 #$i_sysdir I_SYS_DIR            /**/
9691 #$i_sysndir I_SYS_NDIR          /**/
9692 #$i_systypes I_SYS_TYPES        /**/
9693 #if defined(I_SYS_TYPES)
9694 #include <sys/types.h>
9695 #endif
9696 #if defined(I_DIRENT)
9697 #include <dirent.h>
9698 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9699 #include <sys/dir.h>
9700 #endif
9701 #else
9702 #ifdef I_SYS_NDIR
9703 #include <sys/ndir.h>
9704 #else
9705 #ifdef I_SYS_DIR
9706 #ifdef hp9000s500
9707 #include <ndir.h>       /* may be wrong in the future */
9708 #else
9709 #include <sys/dir.h>
9710 #endif
9711 #endif
9712 #endif
9713 #endif 
9714 int main() {
9715         DIR *dirp = opendir(".");
9716         if (dirfd(dirp) >= 0)
9717                 exit(0);
9718         else
9719                 exit(1);
9720 }
9721 EOM
9722 set dirfd
9723 if eval $compile; then
9724         val="$define"
9725 fi
9726 case "$val" in
9727 $define)        echo "dirfd() found." >&4       ;;
9728 *)              echo "dirfd() NOT found." >&4   ;;
9729 esac
9730 set d_dirfd
9731 eval $setvar
9732 $rm -f dirfd*
9733
9734 : see if dlerror exists
9735 xxx_runnm="$runnm"
9736 runnm=false
9737 set dlerror d_dlerror
9738 eval $inlibc
9739 runnm="$xxx_runnm"
9740
9741 : see if dlfcn is available
9742 set dlfcn.h i_dlfcn
9743 eval $inhdr
9744
9745 case "$usedl" in
9746 $define|y|true)
9747         $cat << EOM
9748
9749 On a few systems, the dynamically loaded modules that perl generates and uses
9750 will need a different extension than shared libs. The default will probably
9751 be appropriate.
9752
9753 EOM
9754         case "$dlext" in
9755         '')     dflt="$so" ;;
9756         *)      dflt="$dlext" ;;
9757         esac
9758         rp='What is the extension of dynamically loaded modules'
9759         . ./myread
9760         dlext="$ans"
9761         ;;
9762 *)
9763         dlext="none"
9764         ;;
9765 esac
9766
9767 : Check if dlsym need a leading underscore
9768 echo " "
9769 val="$undef"
9770
9771 case "$dlsrc" in
9772 dl_dlopen.xs)
9773         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9774         $cat >dyna.c <<'EOM'
9775 fred () { }
9776 EOM
9777
9778 $cat >fred.c<<EOM
9779
9780 #include <stdio.h>
9781 #$i_dlfcn I_DLFCN
9782 #ifdef I_DLFCN
9783 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9784 #else
9785 #include <sys/types.h>
9786 #include <nlist.h>
9787 #include <link.h>
9788 #endif
9789
9790 extern int fred() ;
9791
9792 int main()
9793 {
9794     void * handle ;
9795     void * symbol ;
9796 #ifndef RTLD_LAZY
9797     int mode = 1 ;
9798 #else
9799     int mode = RTLD_LAZY ;
9800 #endif
9801     handle = dlopen("./dyna.$dlext", mode) ;
9802     if (handle == NULL) {
9803         printf ("1\n") ;
9804         fflush (stdout) ;
9805         exit(0);
9806     }
9807     symbol = dlsym(handle, "fred") ;
9808     if (symbol == NULL) {
9809         /* try putting a leading underscore */
9810         symbol = dlsym(handle, "_fred") ;
9811         if (symbol == NULL) {
9812             printf ("2\n") ;
9813             fflush (stdout) ;
9814             exit(0);
9815         }
9816         printf ("3\n") ;
9817     }
9818     else
9819         printf ("4\n") ;
9820     fflush (stdout) ;
9821     exit(0);
9822 }
9823 EOM
9824         : Call the object file tmp-dyna.o in case dlext=o.
9825         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9826                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9827                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9828                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9829                 xxx=`$run ./fred`
9830                 case $xxx in
9831                 1)      echo "Test program failed using dlopen." >&4
9832                         echo "Perhaps you should not use dynamic loading." >&4;;
9833                 2)      echo "Test program failed using dlsym." >&4
9834                         echo "Perhaps you should not use dynamic loading." >&4;;
9835                 3)      echo "dlsym needs a leading underscore" >&4
9836                         val="$define" ;;
9837                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9838                 esac
9839         else
9840                 echo "I can't compile and run the test program." >&4
9841                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9842         fi
9843         ;;
9844 esac
9845                 
9846 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9847
9848 set d_dlsymun
9849 eval $setvar
9850
9851 : see if prototype for drand48 is available
9852 echo " "
9853 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9854 eval $hasproto
9855
9856 : see if dup2 exists
9857 set dup2 d_dup2
9858 eval $inlibc
9859
9860 : see if eaccess exists
9861 set eaccess d_eaccess
9862 eval $inlibc
9863
9864 : see if endgrent exists
9865 set endgrent d_endgrent
9866 eval $inlibc
9867
9868 : see if endhostent exists
9869 set endhostent d_endhent
9870 eval $inlibc
9871
9872 : see if endnetent exists
9873 set endnetent d_endnent
9874 eval $inlibc
9875
9876 : see if endprotoent exists
9877 set endprotoent d_endpent
9878 eval $inlibc
9879
9880 : see if endpwent exists
9881 set endpwent d_endpwent
9882 eval $inlibc
9883
9884 : see if endservent exists
9885 set endservent d_endsent
9886 eval $inlibc
9887
9888 : Locate the flags for 'open()'
9889 echo " "
9890 $cat >try.c <<'EOCP'
9891 #include <sys/types.h>
9892 #ifdef I_FCNTL
9893 #include <fcntl.h>
9894 #endif
9895 #ifdef I_SYS_FILE
9896 #include <sys/file.h>
9897 #endif
9898 int main() {
9899         if(O_RDONLY);
9900 #ifdef O_TRUNC
9901         exit(0);
9902 #else
9903         exit(1);
9904 #endif
9905 }
9906 EOCP
9907 : check sys/file.h first to get FREAD on Sun
9908 if $test `./findhdr sys/file.h` && \
9909                 set try -DI_SYS_FILE && eval $compile; then
9910         h_sysfile=true;
9911         echo "<sys/file.h> defines the O_* constants..." >&4
9912         if $run ./try; then
9913                 echo "and you have the 3 argument form of open()." >&4
9914                 val="$define"
9915         else
9916                 echo "but not the 3 argument form of open().  Oh, well." >&4
9917                 val="$undef"
9918         fi
9919 elif $test `./findhdr fcntl.h` && \
9920                 set try -DI_FCNTL && eval $compile; then
9921         h_fcntl=true;
9922         echo "<fcntl.h> defines the O_* constants..." >&4
9923         if $run ./try; then
9924                 echo "and you have the 3 argument form of open()." >&4
9925                 val="$define"
9926         else
9927                 echo "but not the 3 argument form of open().  Oh, well." >&4
9928                 val="$undef"
9929         fi
9930 else
9931         val="$undef"
9932         echo "I can't find the O_* constant definitions!  You got problems." >&4
9933 fi
9934 set d_open3
9935 eval $setvar
9936 $rm -f try try.*
9937
9938 : see which of string.h or strings.h is needed
9939 echo " "
9940 strings=`./findhdr string.h`
9941 if $test "$strings" && $test -r "$strings"; then
9942         echo "Using <string.h> instead of <strings.h>." >&4
9943         val="$define"
9944 else
9945         val="$undef"
9946         strings=`./findhdr strings.h`
9947         if $test "$strings" && $test -r "$strings"; then
9948                 echo "Using <strings.h> instead of <string.h>." >&4
9949         else
9950                 echo "No string header found -- You'll surely have problems." >&4
9951         fi
9952 fi
9953 set i_string
9954 eval $setvar
9955 case "$i_string" in
9956 "$undef") strings=`./findhdr strings.h`;;
9957 *)        strings=`./findhdr string.h`;;
9958 esac
9959
9960 : see if this is a sys/file.h system
9961 val=''
9962 set sys/file.h val
9963 eval $inhdr
9964
9965 : do we need to include sys/file.h ?
9966 case "$val" in
9967 "$define")
9968         echo " "
9969         if $h_sysfile; then
9970                 val="$define"
9971                 echo "We'll be including <sys/file.h>." >&4
9972         else
9973                 val="$undef"
9974                 echo "We won't be including <sys/file.h>." >&4
9975         fi
9976         ;;
9977 *)
9978         h_sysfile=false
9979         ;;
9980 esac
9981 set i_sysfile
9982 eval $setvar
9983
9984 : see if fcntl.h is there
9985 val=''
9986 set fcntl.h val
9987 eval $inhdr
9988
9989 : see if we can include fcntl.h
9990 case "$val" in
9991 "$define")
9992         echo " "
9993         if $h_fcntl; then
9994                 val="$define"
9995                 echo "We'll be including <fcntl.h>." >&4
9996         else
9997                 val="$undef"
9998                 if $h_sysfile; then
9999         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
10000                 else
10001                         echo "We won't be including <fcntl.h>." >&4
10002                 fi
10003         fi
10004         ;;
10005 *)
10006         h_fcntl=false
10007         val="$undef"
10008         ;;
10009 esac
10010 set i_fcntl
10011 eval $setvar
10012
10013 : check for non-blocking I/O stuff
10014 case "$h_sysfile" in
10015 true) echo "#include <sys/file.h>" > head.c;;
10016 *)
10017        case "$h_fcntl" in
10018        true) echo "#include <fcntl.h>" > head.c;;
10019        *) echo "#include <sys/fcntl.h>" > head.c;;
10020        esac
10021        ;;
10022 esac
10023 echo " "
10024 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10025 case "$o_nonblock" in
10026 '')
10027         $cat head.c > try.c
10028         $cat >>try.c <<EOCP
10029 #include <stdio.h>
10030 #include <stdlib.h>
10031 #$i_fcntl I_FCNTL
10032 #ifdef I_FCNTL
10033 #include <fcntl.h>
10034 #endif
10035 int main() {
10036 #ifdef O_NONBLOCK
10037         printf("O_NONBLOCK\n");
10038         exit(0);
10039 #endif
10040 #ifdef O_NDELAY
10041         printf("O_NDELAY\n");
10042         exit(0);
10043 #endif
10044 #ifdef FNDELAY
10045         printf("FNDELAY\n");
10046         exit(0);
10047 #endif
10048         exit(0);
10049 }
10050 EOCP
10051         set try
10052         if eval $compile_ok; then
10053                 o_nonblock=`$run ./try`
10054                 case "$o_nonblock" in
10055                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10056                 *) echo "Seems like we can use $o_nonblock.";;
10057                 esac
10058         else
10059                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10060         fi
10061         ;;
10062 *) echo "Using $hint value $o_nonblock.";;
10063 esac
10064 $rm -f try try.* .out core
10065
10066 echo " "
10067 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10068 case "$eagain" in
10069 '')
10070         $cat head.c > try.c
10071         $cat >>try.c <<EOCP
10072 #include <errno.h>
10073 #include <sys/types.h>
10074 #include <signal.h>
10075 #include <stdio.h> 
10076 #include <stdlib.h> 
10077 #$i_fcntl I_FCNTL
10078 #ifdef I_FCNTL
10079 #include <fcntl.h>
10080 #endif
10081 #define MY_O_NONBLOCK $o_nonblock
10082 #ifndef errno  /* XXX need better Configure test */
10083 extern int errno;
10084 #endif
10085 #$i_unistd I_UNISTD
10086 #ifdef I_UNISTD
10087 #include <unistd.h>
10088 #endif
10089 #$i_string I_STRING
10090 #ifdef I_STRING
10091 #include <string.h>
10092 #else
10093 #include <strings.h>
10094 #endif
10095 $signal_t blech(x) int x; { exit(3); }
10096 EOCP
10097         $cat >> try.c <<'EOCP'
10098 int main()
10099 {
10100         int pd[2];
10101         int pu[2];
10102         char buf[1];
10103         char string[100];
10104
10105         pipe(pd);       /* Down: child -> parent */
10106         pipe(pu);       /* Up: parent -> child */
10107         if (0 != fork()) {
10108                 int ret;
10109                 close(pd[1]);   /* Parent reads from pd[0] */
10110                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10111 #ifdef F_SETFL
10112                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10113                         exit(1);
10114 #else
10115                 exit(4);
10116 #endif
10117                 signal(SIGALRM, blech);
10118                 alarm(5);
10119                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10120                         exit(2);
10121                 sprintf(string, "%d\n", ret);
10122                 write(2, string, strlen(string));
10123                 alarm(0);
10124 #ifdef EAGAIN
10125                 if (errno == EAGAIN) {
10126                         printf("EAGAIN\n");
10127                         goto ok;
10128                 }
10129 #endif
10130 #ifdef EWOULDBLOCK
10131                 if (errno == EWOULDBLOCK)
10132                         printf("EWOULDBLOCK\n");
10133 #endif
10134         ok:
10135                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10136                 sleep(2);                               /* Give it time to close our pipe */
10137                 alarm(5);
10138                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10139                 alarm(0);
10140                 sprintf(string, "%d\n", ret);
10141                 write(4, string, strlen(string));
10142                 exit(0);
10143         }
10144
10145         close(pd[0]);                   /* We write to pd[1] */
10146         close(pu[1]);                   /* We read from pu[0] */
10147         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10148         close(pd[1]);                   /* Pipe pd is now fully closed! */
10149         exit(0);                                /* Bye bye, thank you for playing! */
10150 }
10151 EOCP
10152         set try
10153         if eval $compile_ok; then
10154                 echo "$startsh" >mtry
10155                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10156                 chmod +x mtry
10157                 ./mtry >/dev/null 2>&1
10158                 case $? in
10159                 0) eagain=`$cat try.out`;;
10160                 1) echo "Could not perform non-blocking setting!";;
10161                 2) echo "I did a successful read() for something that was not there!";;
10162                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10163                 4) echo "Could not find F_SETFL!";;
10164                 *) echo "Something terribly wrong happened during testing.";;
10165                 esac
10166                 rd_nodata=`$cat try.ret`
10167                 echo "A read() system call with no data present returns $rd_nodata."
10168                 case "$rd_nodata" in
10169                 0|-1) ;;
10170                 *)
10171                         echo "(That's peculiar, fixing that to be -1.)"
10172                         rd_nodata=-1
10173                         ;;
10174                 esac
10175                 case "$eagain" in
10176                 '')
10177                         echo "Forcing errno EAGAIN on read() with no data available."
10178                         eagain=EAGAIN
10179                         ;;
10180                 *)
10181                         echo "Your read() sets errno to $eagain when no data is available."
10182                         ;;
10183                 esac
10184                 status=`$cat try.err`
10185                 case "$status" in
10186                 0) echo "And it correctly returns 0 to signal EOF.";;
10187                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10188                 *) echo "However, your read() returns '$status' on EOF??";;
10189                 esac
10190                 val="$define"
10191                 if test "$status" = "$rd_nodata"; then
10192                         echo "WARNING: you can't distinguish between EOF and no data!"
10193                         val="$undef"
10194                 fi
10195         else
10196                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10197                 eagain=EAGAIN
10198         fi
10199         set d_eofnblk
10200         eval $setvar
10201         ;;
10202 *)
10203         echo "Using $hint value $eagain."
10204         echo "Your read() returns $rd_nodata when no data is present."
10205         case "$d_eofnblk" in
10206         "$define") echo "And you can see EOF because read() returns 0.";;
10207         "$undef") echo "But you can't see EOF status from read() returned value.";;
10208         *)
10209                 echo "(Assuming you can't see EOF status from read anyway.)"
10210                 d_eofnblk=$undef
10211                 ;;
10212         esac
10213         ;;
10214 esac
10215 $rm -f try try.* .out core head.c mtry
10216
10217 : see if fchdir exists
10218 set fchdir d_fchdir
10219 eval $inlibc
10220
10221 : see if fchmod exists
10222 set fchmod d_fchmod
10223 eval $inlibc
10224
10225 : see if fchown exists
10226 set fchown d_fchown
10227 eval $inlibc
10228
10229 : see if this is an fcntl system
10230 set fcntl d_fcntl
10231 eval $inlibc
10232
10233 echo " "
10234 : See if fcntl-based locking works.
10235 $cat >try.c <<EOCP
10236 #include <stdlib.h>
10237 #include <unistd.h>
10238 #include <fcntl.h>
10239 #include <signal.h>
10240 $signal_t blech(x) int x; { exit(3); }
10241 int main() {
10242 #if defined(F_SETLK) && defined(F_SETLKW)
10243      struct flock flock;
10244      int retval, fd;
10245      fd = open("try.c", O_RDONLY);
10246      flock.l_type = F_RDLCK;
10247      flock.l_whence = SEEK_SET;
10248      flock.l_start = flock.l_len = 0;
10249      signal(SIGALRM, blech);
10250      alarm(10);
10251      retval = fcntl(fd, F_SETLK, &flock);
10252      close(fd);
10253      (retval < 0 ? exit(2) : exit(0));
10254 #else
10255      exit(2);
10256 #endif
10257 }
10258 EOCP
10259 echo "Checking if fcntl-based file locking works... "
10260 case "$d_fcntl" in
10261 "$define")
10262         set try
10263         if eval $compile_ok; then
10264                 if $run ./try; then
10265                         echo "Yes, it seems to work."
10266                         val="$define"
10267                 else
10268                         echo "Nope, it didn't work."
10269                         val="$undef"
10270                         case "$?" in
10271                         3) $cat >&4 <<EOM
10272 ***
10273 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10274 *** This is (almost) impossible.
10275 *** If your NFS lock daemons are not feeling well, something like
10276 *** this may happen, please investigate.  Cannot continue, aborting.
10277 ***
10278 EOM
10279                                 exit 1
10280                                 ;;
10281                         esac
10282                 fi
10283         else
10284                 echo "I'm unable to compile the test program, so I'll assume not."
10285                 val="$undef"
10286         fi
10287         ;;
10288 *) val="$undef";
10289         echo "Nope, since you don't even have fcntl()."
10290         ;;
10291 esac
10292 set d_fcntl_can_lock
10293 eval $setvar
10294 $rm -f try*
10295
10296
10297 : see if sys/select.h has to be included
10298 set sys/select.h i_sysselct
10299 eval $inhdr
10300
10301 : see if we should include time.h, sys/time.h, or both
10302 echo " "
10303 if test "X$timeincl" = X; then
10304         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10305         $echo $n "I'm now running the test program...$c"
10306         $cat >try.c <<'EOCP'
10307 #include <sys/types.h>
10308 #ifdef I_TIME
10309 #include <time.h>
10310 #endif
10311 #ifdef I_SYSTIME
10312 #ifdef SYSTIMEKERNEL
10313 #define KERNEL
10314 #endif
10315 #include <sys/time.h>
10316 #endif
10317 #ifdef I_SYSSELECT
10318 #include <sys/select.h>
10319 #endif
10320 int main()
10321 {
10322         struct tm foo;
10323 #ifdef S_TIMEVAL
10324         struct timeval bar;
10325 #endif
10326 #ifdef S_TIMEZONE
10327         struct timezone tzp;
10328 #endif
10329         if (foo.tm_sec == foo.tm_sec)
10330                 exit(0);
10331 #ifdef S_TIMEVAL
10332         if (bar.tv_sec == bar.tv_sec)
10333                 exit(0);
10334 #endif
10335         exit(1);
10336 }
10337 EOCP
10338         flags=''
10339         for s_timezone in '-DS_TIMEZONE' ''; do
10340         sysselect=''
10341         for s_timeval in '-DS_TIMEVAL' ''; do
10342         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10343         for i_time in '' '-DI_TIME'; do
10344         for i_systime in '-DI_SYSTIME' ''; do
10345                 case "$flags" in
10346                 '') $echo $n ".$c"
10347                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10348                         if eval $compile; then
10349                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10350                                 shift
10351                                 flags="$*"
10352                                 echo " "
10353                                 $echo $n "Succeeded with $flags$c"
10354                         fi
10355                         ;;
10356                 esac
10357         done
10358         done
10359         done
10360         done
10361         done
10362         timeincl=''
10363         echo " "
10364         case "$flags" in
10365         *SYSTIMEKERNEL*) i_systimek="$define"
10366                 timeincl=`./findhdr sys/time.h`
10367                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10368         *) i_systimek="$undef";;
10369         esac
10370         case "$flags" in
10371         *I_TIME*) i_time="$define"
10372                 timeincl=`./findhdr time.h`" $timeincl"
10373                 echo "We'll include <time.h>." >&4;;
10374         *) i_time="$undef";;
10375         esac
10376         case "$flags" in
10377         *I_SYSTIME*) i_systime="$define"
10378                 timeincl=`./findhdr sys/time.h`" $timeincl"
10379                 echo "We'll include <sys/time.h>." >&4;;
10380         *) i_systime="$undef";;
10381         esac
10382         $rm -f try.c try
10383 fi
10384
10385 : check for fd_set items
10386 $cat <<EOM
10387
10388 Checking to see how well your C compiler handles fd_set and friends ...
10389 EOM
10390 $cat >try.c <<EOCP
10391 #$i_systime I_SYS_TIME
10392 #$i_sysselct I_SYS_SELECT
10393 #$d_socket HAS_SOCKET
10394 #include <sys/types.h>
10395 #ifdef HAS_SOCKET
10396 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10397 #endif
10398 #ifdef I_SYS_TIME
10399 #include <sys/time.h>
10400 #endif
10401 #ifdef I_SYS_SELECT
10402 #include <sys/select.h>
10403 #endif
10404 int main() {
10405         fd_set fds;
10406
10407 #ifdef TRYBITS
10408         if(fds.fds_bits);
10409 #endif
10410
10411 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10412         exit(0);
10413 #else
10414         exit(1);
10415 #endif
10416 }
10417 EOCP
10418 set try -DTRYBITS
10419 if eval $compile; then
10420         d_fds_bits="$define"
10421         d_fd_set="$define"
10422         echo "Well, your system knows about the normal fd_set typedef..." >&4
10423         if $run ./try; then
10424                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10425                 d_fd_macros="$define"
10426         else
10427                 $cat >&4 <<'EOM'
10428 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10429 EOM
10430                 d_fd_macros="$undef"
10431         fi
10432 else
10433         $cat <<'EOM'
10434 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10435 EOM
10436         set try
10437         if eval $compile; then
10438                 d_fds_bits="$undef"
10439                 d_fd_set="$define"
10440                 echo "Well, your system has some sort of fd_set available..." >&4
10441                 if $run ./try; then
10442                         echo "and you have the normal fd_set macros." >&4
10443                         d_fd_macros="$define"
10444                 else
10445                         $cat <<'EOM'
10446 but not the normal fd_set macros!  Gross!  More work for me...
10447 EOM
10448                         d_fd_macros="$undef"
10449                 fi
10450         else
10451         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10452                 d_fd_set="$undef"
10453                 d_fds_bits="$undef"
10454                 d_fd_macros="$undef"
10455         fi
10456 fi
10457 $rm -f try try.*
10458
10459 : see if fgetpos exists
10460 set fgetpos d_fgetpos
10461 eval $inlibc
10462
10463 : see if finite exists
10464 set finite d_finite
10465 eval $inlibc
10466
10467 : see if finitel exists
10468 set finitel d_finitel
10469 eval $inlibc
10470
10471 : see if flock exists
10472 set flock d_flock
10473 eval $inlibc
10474
10475 : see if prototype for flock is available
10476 echo " "
10477 set d_flockproto flock $i_sysfile sys/file.h
10478 eval $hasproto
10479
10480 : see if fork exists
10481 set fork d_fork
10482 eval $inlibc
10483
10484 : see if fp_class exists
10485 set fp_class d_fp_class
10486 eval $inlibc
10487
10488 : see if pathconf exists
10489 set pathconf d_pathconf
10490 eval $inlibc
10491
10492 : see if fpathconf exists
10493 set fpathconf d_fpathconf
10494 eval $inlibc
10495
10496 : see if fpclass exists
10497 set fpclass d_fpclass
10498 eval $inlibc
10499
10500 : see if fpclassify exists
10501 set fpclassify d_fpclassify
10502 eval $inlibc
10503
10504 : see if fpclassl exists
10505 set fpclassl d_fpclassl
10506 eval $inlibc
10507
10508
10509 : check for fpos64_t
10510 echo " "
10511 echo "Checking to see if you have fpos64_t..." >&4
10512 $cat >try.c <<EOCP
10513 #include <stdio.h>
10514 int main() { fpos64_t x = 7; }
10515 EOCP
10516 set try
10517 if eval $compile; then
10518         val="$define"
10519         echo "You have fpos64_t."
10520 else
10521         val="$undef"
10522         echo "You do not have fpos64_t."
10523         case "$fpossize" in
10524         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10525         esac
10526 fi
10527 $rm -f try.* try
10528 set d_fpos64_t
10529 eval $setvar
10530
10531 : see if frexpl exists
10532 set frexpl d_frexpl
10533 eval $inlibc
10534
10535 : see if this is a sys/param system
10536 set sys/param.h i_sysparam
10537 eval $inhdr
10538
10539 : see if this is a sys/mount.h system
10540 set sys/mount.h i_sysmount
10541 eval $inhdr
10542
10543
10544 echo " "
10545 echo "Checking to see if your system supports struct fs_data..." >&4
10546 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10547 eval $hasstruct
10548 case "$d_fs_data_s" in
10549 "$define")      echo "Yes, it does."   ;;
10550 *)              echo "No, it doesn't." ;;
10551 esac
10552
10553 : see if fseeko exists
10554 set fseeko d_fseeko
10555 eval $inlibc
10556 case "$longsize" in
10557 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10558 esac
10559
10560 : see if fsetpos exists
10561 set fsetpos d_fsetpos
10562 eval $inlibc
10563
10564
10565 : see if fstatfs exists
10566 set fstatfs d_fstatfs
10567 eval $inlibc
10568
10569
10570 : see if statvfs exists
10571 set statvfs d_statvfs
10572 eval $inlibc
10573
10574 : see if fstatvfs exists
10575 set fstatvfs d_fstatvfs
10576 eval $inlibc
10577
10578
10579 : see if fsync exists
10580 set fsync d_fsync
10581 eval $inlibc
10582
10583 : see if ftello exists
10584 set ftello d_ftello
10585 eval $inlibc
10586 case "$longsize" in
10587 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10588 esac
10589
10590 : see if getcwd exists
10591 set getcwd d_getcwd
10592 eval $inlibc
10593
10594 : see if getespwnam exists
10595 set getespwnam d_getespwnam
10596 eval $inlibc
10597
10598
10599 : see if getfsstat exists
10600 set getfsstat d_getfsstat
10601 eval $inlibc
10602
10603 : see if getgrent exists
10604 set getgrent d_getgrent
10605 eval $inlibc
10606
10607 : see if gethostbyaddr exists
10608 set gethostbyaddr d_gethbyaddr
10609 eval $inlibc
10610
10611 : see if gethostbyname exists
10612 set gethostbyname d_gethbyname
10613 eval $inlibc
10614
10615 : see if gethostent exists
10616 set gethostent d_gethent
10617 eval $inlibc
10618
10619 : see how we will look up host name
10620 echo " "
10621 call=''
10622 if set gethostname val -f d_gethname; eval $csym; $val; then
10623         echo 'gethostname() found.' >&4
10624         d_gethname="$define"
10625         call=gethostname
10626 fi
10627 if set uname val -f d_uname; eval $csym; $val; then
10628         if ./xenix; then
10629                 $cat <<'EOM'
10630 uname() was found, but you're running xenix, and older versions of xenix
10631 have a broken uname(). If you don't really know whether your xenix is old
10632 enough to have a broken system call, use the default answer.
10633
10634 EOM
10635                 dflt=y
10636                 case "$d_uname" in
10637                 "$define") dflt=n;;
10638                 esac
10639                 rp='Is your uname() broken?'
10640                 . ./myread
10641                 case "$ans" in
10642                 n*) d_uname="$define"; call=uname;;
10643                 esac
10644         else
10645                 echo 'uname() found.' >&4
10646                 d_uname="$define"
10647                 case "$call" in
10648                 '') call=uname ;;
10649                 esac
10650         fi
10651 fi
10652 case "$d_gethname" in
10653 '') d_gethname="$undef";;
10654 esac
10655 case "$d_uname" in
10656 '') d_uname="$undef";;
10657 esac
10658 case "$d_uname$d_gethname" in
10659 *define*)
10660         dflt=n
10661         cat <<EOM
10662  
10663 Every now and then someone has a $call() that lies about the hostname
10664 but can't be fixed for political or economic reasons.  If you wish, I can
10665 pretend $call() isn't there and maybe compute hostname at run-time
10666 thanks to the '$phostname' command.
10667
10668 EOM
10669         rp="Shall I ignore $call() from now on?"
10670         . ./myread
10671         case "$ans" in
10672         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10673         esac;;
10674 esac
10675 case "$phostname" in
10676 '') aphostname='';;
10677 *) case "$aphostname" in
10678         /*) ;;
10679         *) set X $phostname
10680                 shift
10681                 file=$1
10682                 shift
10683                 file=`./loc $file $file $pth`
10684                 aphostname=`echo $file $*`
10685                 ;;
10686         esac
10687         ;;
10688 esac
10689 case "$d_uname$d_gethname" in
10690 *define*) ;;
10691 *)
10692         case "$phostname" in
10693         '')
10694                 echo "There will be no way for $package to get your hostname." >&4;;
10695         *)
10696         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10697                 ;;
10698         esac;;
10699 esac
10700 case "$d_phostname" in
10701 '') d_phostname="$undef";;
10702 esac
10703
10704 : see if this is a netdb.h system
10705 set netdb.h i_netdb
10706 eval $inhdr
10707
10708 : see if prototypes for various gethostxxx netdb.h functions are available
10709 echo " "
10710 set d_gethostprotos gethostent $i_netdb netdb.h
10711 eval $hasproto
10712
10713 : see if getitimer exists
10714 set getitimer d_getitimer
10715 eval $inlibc
10716
10717 : see if getlogin exists
10718 set getlogin d_getlogin
10719 eval $inlibc
10720
10721 : see if getmnt exists
10722 set getmnt d_getmnt
10723 eval $inlibc
10724
10725 : see if getmntent exists
10726 set getmntent d_getmntent
10727 eval $inlibc
10728
10729 : see if getnetbyaddr exists
10730 set getnetbyaddr d_getnbyaddr
10731 eval $inlibc
10732
10733 : see if getnetbyname exists
10734 set getnetbyname d_getnbyname
10735 eval $inlibc
10736
10737 : see if getnetent exists
10738 set getnetent d_getnent
10739 eval $inlibc
10740
10741 : see if prototypes for various getnetxxx netdb.h functions are available
10742 echo " "
10743 set d_getnetprotos getnetent $i_netdb netdb.h
10744 eval $hasproto
10745
10746 : see if getpagesize exists
10747 set getpagesize d_getpagsz
10748 eval $inlibc
10749
10750
10751 : see if getprotobyname exists
10752 set getprotobyname d_getpbyname
10753 eval $inlibc
10754
10755 : see if getprotobynumber exists
10756 set getprotobynumber d_getpbynumber
10757 eval $inlibc
10758
10759 : see if getprotoent exists
10760 set getprotoent d_getpent
10761 eval $inlibc
10762
10763 : see if getpgid exists
10764 set getpgid d_getpgid
10765 eval $inlibc
10766
10767 : see if getpgrp2 exists
10768 set getpgrp2 d_getpgrp2
10769 eval $inlibc
10770
10771 : see if getppid exists
10772 set getppid d_getppid
10773 eval $inlibc
10774
10775 : see if getpriority exists
10776 set getpriority d_getprior
10777 eval $inlibc
10778
10779 : see if prototypes for various getprotoxxx netdb.h functions are available
10780 echo " "
10781 set d_getprotoprotos getprotoent $i_netdb netdb.h
10782 eval $hasproto
10783
10784 : see if getprpwnam exists
10785 set getprpwnam d_getprpwnam
10786 eval $inlibc
10787
10788 : see if getpwent exists
10789 set getpwent d_getpwent
10790 eval $inlibc
10791
10792
10793 : see if getservbyname exists
10794 set getservbyname d_getsbyname
10795 eval $inlibc
10796
10797 : see if getservbyport exists
10798 set getservbyport d_getsbyport
10799 eval $inlibc
10800
10801 : see if getservent exists
10802 set getservent d_getsent
10803 eval $inlibc
10804
10805 : see if prototypes for various getservxxx netdb.h functions are available
10806 echo " "
10807 set d_getservprotos getservent $i_netdb netdb.h
10808 eval $hasproto
10809
10810 : see if getspnam exists
10811 set getspnam d_getspnam
10812 eval $inlibc
10813
10814 : see if gettimeofday or ftime exists
10815 set gettimeofday d_gettimeod
10816 eval $inlibc
10817 case "$d_gettimeod" in
10818 "$undef")
10819         set ftime d_ftime 
10820         eval $inlibc
10821         ;;
10822 *)
10823         val="$undef"; set d_ftime; eval $setvar
10824         ;;
10825 esac
10826 case "$d_gettimeod$d_ftime" in
10827 "$undef$undef")
10828         echo " "
10829         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10830         ;;
10831 esac
10832
10833 : see if this is an grp system
10834 set grp.h i_grp
10835 eval $inhdr
10836
10837 case "$i_grp" in
10838 $define)
10839         xxx=`./findhdr grp.h`
10840         $cppstdin $cppflags $cppminus < $xxx >$$.h
10841
10842         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10843                 val="$define"
10844         else
10845                 val="$undef"
10846         fi
10847         set d_grpasswd
10848         eval $setvar
10849
10850         $rm -f $$.h
10851         ;;
10852 *)
10853         val="$undef";
10854         set d_grpasswd; eval $setvar
10855         ;;
10856 esac
10857
10858 : see if hasmntopt exists
10859 set hasmntopt d_hasmntopt
10860 eval $inlibc
10861
10862 : see if this is a netinet/in.h or sys/in.h system
10863 set netinet/in.h i_niin sys/in.h i_sysin
10864 eval $inhdr
10865
10866 : see if arpa/inet.h has to be included
10867 set arpa/inet.h i_arpainet
10868 eval $inhdr
10869
10870 : see if htonl --and friends-- exists
10871 val=''
10872 set htonl val
10873 eval $inlibc
10874
10875 : Maybe they are macros.
10876 case "$val" in
10877 $undef)
10878         $cat >htonl.c <<EOM
10879 #include <stdio.h>
10880 #include <sys/types.h>
10881 #$i_niin I_NETINET_IN
10882 #$i_sysin I_SYS_IN
10883 #$i_arpainet I_ARPA_INET
10884 #ifdef I_NETINET_IN
10885 #include <netinet/in.h>
10886 #endif
10887 #ifdef I_SYS_IN
10888 #include <sys/in.h>
10889 #endif
10890 #ifdef I_ARPA_INET
10891 #include <arpa/inet.h>
10892 #endif
10893 #ifdef htonl
10894 printf("Defined as a macro.");
10895 #endif
10896 EOM
10897         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10898         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10899                 val="$define"
10900                 echo "But it seems to be defined as a macro." >&4
10901         fi
10902         $rm -f htonl.?
10903         ;;
10904 esac
10905 set d_htonl
10906 eval $setvar
10907
10908 : index or strchr
10909 echo " "
10910 if set index val -f; eval $csym; $val; then
10911         if set strchr val -f d_strchr; eval $csym; $val; then
10912                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10913                         val="$define"
10914                         vali="$undef"
10915                         echo "strchr() found." >&4
10916                 else
10917                         val="$undef"
10918                         vali="$define"
10919                         echo "index() found." >&4
10920                 fi
10921         else
10922                 val="$undef"
10923                 vali="$define"
10924                 echo "index() found." >&4
10925         fi
10926 else
10927         if set strchr val -f d_strchr; eval $csym; $val; then
10928                 val="$define"
10929                 vali="$undef"
10930                 echo "strchr() found." >&4
10931         else
10932                 echo "No index() or strchr() found!" >&4
10933                 val="$undef"
10934                 vali="$undef"
10935         fi
10936 fi
10937 set d_strchr; eval $setvar
10938 val="$vali"
10939 set d_index; eval $setvar
10940
10941 : check whether inet_aton exists
10942 set inet_aton d_inetaton
10943 eval $inlibc
10944
10945 : Look for isascii
10946 echo " "
10947 $cat >isascii.c <<'EOCP'
10948 #include <stdio.h>
10949 #include <ctype.h>
10950 int main() {
10951         int c = 'A';
10952         if (isascii(c))
10953                 exit(0);
10954         else
10955                 exit(1);
10956 }
10957 EOCP
10958 set isascii
10959 if eval $compile; then
10960         echo "isascii() found." >&4
10961         val="$define"
10962 else
10963         echo "isascii() NOT found." >&4
10964         val="$undef"
10965 fi
10966 set d_isascii
10967 eval $setvar
10968 $rm -f isascii*
10969
10970 : see if isfinite exists
10971 set isfinite d_isfinite
10972 eval $inlibc
10973
10974 : see if isinf exists
10975 set isinf d_isinf
10976 eval $inlibc
10977
10978 : see if isnan exists
10979 set isnan d_isnan
10980 eval $inlibc
10981
10982 : see if isnanl exists
10983 set isnanl d_isnanl
10984 eval $inlibc
10985
10986 : see if killpg exists
10987 set killpg d_killpg
10988 eval $inlibc
10989
10990 : see if lchown exists
10991 echo " "
10992 $cat > try.c <<'EOCP'
10993 /* System header to define __stub macros and hopefully few prototypes,
10994     which can conflict with char lchown(); below.  */
10995 #include <assert.h>
10996 /* Override any gcc2 internal prototype to avoid an error.  */
10997 /* We use char because int might match the return type of a gcc2
10998    builtin and then its argument prototype would still apply.  */
10999 char lchown();
11000 int main() {
11001     /*  The GNU C library defines this for functions which it implements
11002         to always fail with ENOSYS.  Some functions are actually named
11003         something starting with __ and the normal name is an alias.  */
11004 #if defined (__stub_lchown) || defined (__stub___lchown)
11005 choke me
11006 #else
11007 lchown();
11008 #endif
11009 ; return 0; }
11010 EOCP
11011 set try
11012 if eval $compile; then
11013     $echo "lchown() found." >&4
11014     val="$define"
11015 else
11016     $echo "lchown() NOT found." >&4
11017     val="$undef"
11018 fi
11019 set d_lchown
11020 eval $setvar
11021
11022 : See if number of significant digits in a double precision number is known
11023 echo " "
11024 $cat >ldbl_dig.c <<EOM
11025 #$i_limits I_LIMITS
11026 #$i_float I_FLOAT
11027 #ifdef I_LIMITS
11028 #include <limits.h>
11029 #endif
11030 #ifdef I_FLOAT
11031 #include <float.h>
11032 #endif
11033 #ifdef LDBL_DIG
11034 printf("Contains LDBL_DIG");
11035 #endif
11036 EOM
11037 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11038 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11039         echo "LDBL_DIG found." >&4
11040         val="$define"
11041 else
11042         echo "LDBL_DIG NOT found." >&4
11043         val="$undef"
11044 fi
11045 $rm -f ldbl_dig.?
11046 set d_ldbl_dig
11047 eval $setvar
11048
11049 : see if link exists
11050 set link d_link
11051 eval $inlibc
11052
11053 : see if localeconv exists
11054 set localeconv d_locconv
11055 eval $inlibc
11056
11057 : see if lockf exists
11058 set lockf d_lockf
11059 eval $inlibc
11060
11061 : see if prototype for lseek is available
11062 echo " "
11063 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11064 eval $hasproto
11065
11066 : see if lstat exists
11067 set lstat d_lstat
11068 eval $inlibc
11069
11070 : see if madvise exists
11071 set madvise d_madvise
11072 eval $inlibc
11073
11074 : see if mblen exists
11075 set mblen d_mblen
11076 eval $inlibc
11077
11078 : see if mbstowcs exists
11079 set mbstowcs d_mbstowcs
11080 eval $inlibc
11081
11082 : see if mbtowc exists
11083 set mbtowc d_mbtowc
11084 eval $inlibc
11085
11086 : see if memchr exists
11087 set memchr d_memchr
11088 eval $inlibc
11089
11090 : see if memcmp exists
11091 set memcmp d_memcmp
11092 eval $inlibc
11093
11094 : see if memcpy exists
11095 set memcpy d_memcpy
11096 eval $inlibc
11097
11098 : see if memmove exists
11099 set memmove d_memmove
11100 eval $inlibc
11101
11102 : see if memset exists
11103 set memset d_memset
11104 eval $inlibc
11105
11106 : see if mkdir exists
11107 set mkdir d_mkdir
11108 eval $inlibc
11109
11110 : see if mkdtemp exists
11111 set mkdtemp d_mkdtemp
11112 eval $inlibc
11113
11114 : see if mkfifo exists
11115 set mkfifo d_mkfifo
11116 eval $inlibc
11117
11118 : see if mkstemp exists
11119 set mkstemp d_mkstemp
11120 eval $inlibc
11121
11122 : see if mkstemps exists
11123 set mkstemps d_mkstemps
11124 eval $inlibc
11125
11126 : see if mktime exists
11127 set mktime d_mktime
11128 eval $inlibc
11129
11130 : see if this is a sys/mman.h system
11131 set sys/mman.h i_sysmman
11132 eval $inhdr
11133
11134 : see if mmap exists
11135 set mmap d_mmap
11136 eval $inlibc
11137 : see what shmat returns
11138 : default to something harmless
11139 mmaptype='void *'
11140 case "$i_sysmman$d_mmap" in
11141 "$define$define")
11142         $cat >mmap.c <<'END'
11143 #include <sys/mman.h>
11144 void *mmap();
11145 END
11146         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11147                 mmaptype='void *'
11148         else
11149                 mmaptype='caddr_t'
11150         fi
11151         echo "and it returns ($mmaptype)." >&4
11152         ;;
11153 esac
11154
11155
11156
11157 : see if mprotect exists
11158 set mprotect d_mprotect
11159 eval $inlibc
11160
11161 : see if msgctl exists
11162 set msgctl d_msgctl
11163 eval $inlibc
11164
11165 : see if msgget exists
11166 set msgget d_msgget
11167 eval $inlibc
11168
11169 : see if msgsnd exists
11170 set msgsnd d_msgsnd
11171 eval $inlibc
11172
11173 : see if msgrcv exists
11174 set msgrcv d_msgrcv
11175 eval $inlibc
11176
11177 : see how much of the 'msg*(2)' library is present.
11178 h_msg=true
11179 echo " "
11180 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11181 *"$undef"*) h_msg=false;;
11182 esac
11183 case "$osname" in
11184 freebsd)
11185     case "`ipcs 2>&1`" in
11186     "SVID messages"*"not configured"*)
11187         echo "Your $osname does not have the msg*(2) configured." >&4
11188         h_msg=false
11189         val="$undef"
11190         set msgctl d_msgctl
11191         eval $setvar
11192         set msgget d_msgget
11193         eval $setvar
11194         set msgsnd d_msgsnd
11195         eval $setvar
11196         set msgrcv d_msgrcv
11197         eval $setvar
11198         ;;
11199     esac
11200     ;;
11201 esac
11202 : we could also check for sys/ipc.h ...
11203 if $h_msg && $test `./findhdr sys/msg.h`; then
11204         echo "You have the full msg*(2) library." >&4
11205         val="$define"
11206 else
11207         echo "You don't have the full msg*(2) library." >&4
11208         val="$undef"
11209 fi
11210 set d_msg
11211 eval $setvar
11212
11213
11214 echo " "
11215 echo "Checking to see if your system supports struct msghdr..." >&4
11216 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11217 eval $hasstruct
11218 case "$d_msghdr_s" in
11219 "$define")      echo "Yes, it does."   ;;
11220 *)              echo "No, it doesn't." ;;
11221 esac
11222
11223
11224 : see if msync exists
11225 set msync d_msync
11226 eval $inlibc
11227
11228 : see if munmap exists
11229 set munmap d_munmap
11230 eval $inlibc
11231
11232 : see if nice exists
11233 set nice d_nice
11234 eval $inlibc
11235
11236 : see if this is a langinfo.h system
11237 set langinfo.h i_langinfo
11238 eval $inhdr
11239
11240 : see if nl_langinfo exists
11241 set nl_langinfo d_nl_langinfo
11242 eval $inlibc
11243
11244 : check for length of character
11245 echo " "
11246 case "$charsize" in
11247 '')
11248         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11249         $cat >try.c <<'EOCP'
11250 #include <stdio.h>
11251 int main()
11252 {
11253     printf("%d\n", (int)sizeof(char));
11254     exit(0);
11255 }
11256 EOCP
11257         set try
11258         if eval $compile_ok; then
11259                 dflt=`$run ./try`
11260         else
11261                 dflt='1'
11262                 echo "(I can't seem to compile the test program.  Guessing...)"
11263         fi
11264         ;;
11265 *)
11266         dflt="$charsize"
11267         ;;
11268 esac
11269 rp="What is the size of a character (in bytes)?"
11270 . ./myread
11271 charsize="$ans"
11272 $rm -f try.c try
11273
11274 : check for volatile keyword
11275 echo " "
11276 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11277 $cat >try.c <<'EOCP'
11278 int main()
11279 {
11280         typedef struct _goo_struct goo_struct;
11281         goo_struct * volatile goo = ((goo_struct *)0);
11282         struct _goo_struct {
11283                 long long_int;
11284                 int reg_int;
11285                 char char_var;
11286         };
11287         typedef unsigned short foo_t;
11288         char *volatile foo;
11289         volatile int bar;
11290         volatile foo_t blech;
11291         foo = foo;
11292 }
11293 EOCP
11294 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11295         val="$define"
11296         echo "Yup, it does."
11297 else
11298         val="$undef"
11299         echo "Nope, it doesn't."
11300 fi
11301 set d_volatile
11302 eval $setvar
11303 $rm -f try.*
11304
11305
11306 echo " "
11307 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11308
11309 case "$use64bitint:$d_quad:$quadtype" in
11310 define:define:?*)
11311         ivtype="$quadtype"
11312         uvtype="$uquadtype"
11313         ivsize=8
11314         uvsize=8
11315         ;;
11316 *)      ivtype="long"
11317         uvtype="unsigned long"
11318         ivsize=$longsize
11319         uvsize=$longsize
11320         ;;
11321 esac
11322
11323 case "$uselongdouble:$d_longdbl" in
11324 define:define)
11325         nvtype="long double"
11326         nvsize=$longdblsize
11327         ;;
11328 *)      nvtype=double
11329         nvsize=$doublesize
11330         ;;
11331 esac
11332
11333 $echo "(IV will be "$ivtype", $ivsize bytes)"
11334 $echo "(UV will be "$uvtype", $uvsize bytes)"
11335 $echo "(NV will be "$nvtype", $nvsize bytes)"
11336
11337 $cat >try.c <<EOCP
11338 #$i_inttypes I_INTTYPES
11339 #ifdef I_INTTYPES
11340 #include <inttypes.h>
11341 #endif
11342 #include <stdio.h>
11343 int main() {
11344 #ifdef INT8
11345    int8_t i =  INT8_MAX;
11346   uint8_t u = UINT8_MAX;
11347   printf("int8_t\n");
11348 #endif
11349 #ifdef INT16
11350    int16_t i =  INT16_MAX;
11351   uint16_t i = UINT16_MAX;
11352   printf("int16_t\n");
11353 #endif
11354 #ifdef INT32
11355    int32_t i =  INT32_MAX;
11356   uint32_t u = UINT32_MAX;
11357   printf("int32_t\n");
11358 #endif
11359 }
11360 EOCP
11361
11362 case "$i8type" in
11363 '')     case "$charsize" in
11364         1)      i8type=char
11365                 u8type="unsigned char"
11366                 i8size=$charsize
11367                 u8size=$charsize
11368                 ;;
11369         esac
11370         ;;
11371 esac
11372 case "$i8type" in
11373 '')     set try -DINT8
11374         if eval $compile; then
11375                 case "`$run ./try`" in
11376                 int8_t) i8type=int8_t
11377                         u8type=uint8_t
11378                         i8size=1
11379                         u8size=1
11380                         ;;
11381                 esac
11382         fi
11383         ;;
11384 esac
11385 case "$i8type" in
11386 '')     if $test $charsize -ge 1; then
11387                 i8type=char
11388                 u8type="unsigned char"
11389                 i8size=$charsize
11390                 u8size=$charsize
11391         fi
11392         ;;
11393 esac
11394
11395 case "$i16type" in
11396 '')     case "$shortsize" in
11397         2)      i16type=short
11398                 u16type="unsigned short"
11399                 i16size=$shortsize
11400                 u16size=$shortsize
11401                 ;;
11402         esac
11403         ;;
11404 esac
11405 case "$i16type" in
11406 '')     set try -DINT16
11407         if eval $compile; then
11408                 case "`$run ./try`" in
11409                 int16_t)
11410                         i16type=int16_t
11411                         u16type=uint16_t
11412                         i16size=2
11413                         u16size=2
11414                         ;;
11415                 esac
11416         fi
11417         ;;
11418 esac
11419 case "$i16type" in
11420 '')     if $test $shortsize -ge 2; then
11421                 i16type=short
11422                 u16type="unsigned short"
11423                 i16size=$shortsize
11424                 u16size=$shortsize
11425         fi
11426         ;;
11427 esac
11428
11429 case "$i32type" in
11430 '')     case "$longsize" in
11431         4)      i32type=long
11432                 u32type="unsigned long"
11433                 i32size=$longsize
11434                 u32size=$longsize
11435                 ;;
11436         *)      case "$intsize" in
11437                 4)      i32type=int
11438                         u32type="unsigned int"
11439                         i32size=$intsize
11440                         u32size=$intsize
11441                         ;;
11442                 esac
11443                 ;;
11444         esac
11445         ;;
11446 esac
11447 case "$i32type" in
11448 '')     set try -DINT32
11449         if eval $compile; then
11450                 case "`$run ./try`" in
11451                 int32_t)
11452                         i32type=int32_t
11453                         u32type=uint32_t
11454                         i32size=4
11455                         u32size=4
11456                         ;;
11457                 esac
11458         fi
11459         ;;
11460 esac
11461 case "$i32type" in
11462 '')     if $test $intsize -ge 4; then
11463                 i32type=int
11464                 u32type="unsigned int"
11465                 i32size=$intsize
11466                 u32size=$intsize
11467         fi
11468         ;;
11469 esac
11470
11471 case "$i64type" in
11472 '')     case "$d_quad:$quadtype" in
11473         define:?*)
11474                 i64type="$quadtype"
11475                 u64type="$uquadtype"
11476                 i64size=8
11477                 u64size=8
11478                 ;;
11479         esac
11480         ;;
11481 esac
11482
11483 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11484 : volatile so that the compiler has to store it out to memory.
11485 if test X"$d_volatile" = X"$define"; then
11486         volatile=volatile
11487 fi
11488 $cat <<EOP >try.c
11489 #include <stdio.h>
11490 #include <sys/types.h>
11491 #include <signal.h>
11492 #ifdef SIGFPE
11493 $volatile int bletched = 0;
11494 $signal_t blech(s) int s; { bletched = 1; }
11495 #endif
11496 int main() {
11497     $uvtype u = 0;
11498     $nvtype d;
11499     int     n = 8 * $uvsize;
11500     int     i;
11501 #ifdef SIGFPE
11502     signal(SIGFPE, blech);
11503 #endif
11504
11505     for (i = 0; i < n; i++) {
11506       u = u << 1 | ($uvtype)1;
11507       d = ($nvtype)u;
11508       if (($uvtype)d != u)
11509         break;
11510       if (d <= 0)
11511         break;
11512       d = ($nvtype)(u - 1);
11513       if (($uvtype)d != (u - 1))
11514         break;
11515 #ifdef SIGFPE
11516       if (bletched) {
11517         break;
11518 #endif
11519       } 
11520     }
11521     printf("%d\n", ((i == n) ? -n : i));
11522     exit(0);
11523 }
11524 EOP
11525 set try
11526
11527 d_nv_preserves_uv="$undef"
11528 if eval $compile; then
11529         d_nv_preserves_uv_bits="`$run ./try`"
11530 fi
11531 case "$d_nv_preserves_uv_bits" in
11532 \-[1-9]*)       
11533         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11534         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11535         d_nv_preserves_uv="$define"
11536         ;;
11537 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11538         d_nv_preserves_uv="$undef" ;;
11539 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11540         d_nv_preserves_uv_bits="$undef" ;;
11541 esac
11542
11543 $rm -f try.* try
11544
11545
11546 : check for off64_t
11547 echo " "
11548 echo "Checking to see if you have off64_t..." >&4
11549 $cat >try.c <<EOCP
11550 #include <sys/types.h>
11551 #include <unistd.h>
11552 int main() { off64_t x = 7; }
11553 EOCP
11554 set try
11555 if eval $compile; then
11556         val="$define"
11557         echo "You have off64_t."
11558 else
11559         val="$undef"
11560         echo "You do not have off64_t."
11561         case "$lseeksize" in
11562         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11563         esac
11564 fi
11565 $rm -f try.* try
11566 set d_off64_t
11567 eval $setvar
11568
11569 : see if POSIX threads are available
11570 set pthread.h i_pthread
11571 eval $inhdr
11572
11573
11574
11575
11576 : how to create joinable pthreads
11577 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11578         echo " "
11579         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11580         $cat >try.c <<'EOCP'
11581 #include <pthread.h>
11582 int main() {
11583     int detachstate = JOINABLE;
11584 }
11585 EOCP
11586         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11587         if eval $compile; then
11588                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11589                 val="$undef" # Yes, undef.
11590                 set d_old_pthread_create_joinable
11591                 eval $setvar
11592                 val=""
11593                 set old_pthread_create_joinable
11594                 eval $setvar
11595         else
11596                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11597                 if eval $compile; then
11598                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11599                         val="$define"
11600                         set d_old_pthread_create_joinable
11601                         eval $setvar
11602                         val=PTHREAD_CREATE_UNDETACHED
11603                         set old_pthread_create_joinable
11604                         eval $setvar
11605                 else            
11606                         set try -DJOINABLE=__UNDETACHED
11607                         if eval $compile; then
11608                                 echo "You seem to use __UNDETACHED." >&4
11609                                 val="$define"
11610                                 set d_old_pthread_create_joinable
11611                                 eval $setvar
11612                                 val=__UNDETACHED
11613                                 set old_pthread_create_joinable
11614                                 eval $setvar
11615                         else
11616                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11617                                 val="$define"
11618                                 set d_old_pthread_create_joinable
11619                                 eval $setvar
11620                                 val=0
11621                                 set old_pthread_create_joinable
11622                                 eval $setvar
11623                         fi
11624                 fi
11625         fi
11626         $rm -f try try.*
11627 else
11628     d_old_pthread_create_joinable="$undef"
11629     old_pthread_create_joinable=""
11630 fi
11631
11632 : see if pause exists
11633 set pause d_pause
11634 eval $inlibc
11635
11636 : see if pipe exists
11637 set pipe d_pipe
11638 eval $inlibc
11639
11640 : see if poll exists
11641 set poll d_poll
11642 eval $inlibc
11643
11644 : see if readlink exists
11645 set readlink d_readlink
11646 eval $inlibc
11647
11648 echo " "
11649 procselfexe=''
11650 val="$undef"
11651 case "$d_readlink" in
11652 "$define")
11653         if $issymlink /proc/self/exe ; then
11654                 $ls -l /proc/self/exe > reflect
11655                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11656                         echo "You have Linux-like /proc/self/exe."
11657                         procselfexe='"/proc/self/exe"'
11658                         val="$define"
11659                 fi
11660         fi
11661         if $issymlink /proc/curproc/file ; then
11662                 $ls -l /proc/curproc/file > reflect
11663                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11664                         echo "You have BSD-like /proc/curproc/file."
11665                         procselfexe='"/proc/curproc/file"'
11666                         val="$define"
11667                 fi
11668         fi
11669         ;;
11670 esac
11671 $rm -f reflect
11672 set d_procselfexe
11673 eval $setvar
11674
11675 : see if pthread_atfork exists
11676 set pthread_atfork d_pthread_atfork
11677 eval $inlibc
11678
11679
11680 : see whether the various POSIXish _yields exist
11681 $cat >try.c <<EOP
11682 #include <pthread.h>
11683 #include <stdio.h>
11684 int main() {
11685 #ifdef SCHED_YIELD
11686         sched_yield();
11687 #else
11688 #ifdef PTHREAD_YIELD
11689         pthread_yield();
11690 #else
11691 #ifdef PTHREAD_YIELD_NULL
11692         pthread_yield(NULL);
11693 #endif
11694 #endif
11695 #endif
11696 }
11697 EOP
11698 : see if sched_yield exists
11699 set try -DSCHED_YIELD
11700 if eval $compile; then
11701     val="$define"
11702     sched_yield='sched_yield()'
11703 else
11704     val="$undef"
11705 fi
11706 case "$usethreads" in
11707 $define)
11708         case "$val" in
11709         $define) echo 'sched_yield() found.' >&4        ;;
11710         *)       echo 'sched_yield() NOT found.' >&4    ;;
11711         esac
11712 esac
11713 set d_sched_yield
11714 eval $setvar
11715
11716 : see if pthread_yield exists
11717 set try -DPTHREAD_YIELD
11718 if eval $compile; then
11719     val="$define"
11720     case "$sched_yield" in
11721     '') sched_yield='pthread_yield()' ;;
11722     esac
11723 else
11724     set try -DPTHREAD_YIELD_NULL
11725     if eval $compile; then
11726         val="$define"
11727         case "$sched_yield" in
11728         '') sched_yield='pthread_yield(NULL)' ;;
11729         esac
11730     else
11731         val="$undef"
11732     fi
11733 fi
11734 case "$usethreads" in
11735 $define)
11736         case "$val" in
11737         $define) echo 'pthread_yield() found.' >&4      ;;
11738         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11739         esac
11740         ;;
11741 esac
11742 set d_pthread_yield
11743 eval $setvar
11744
11745 case "$sched_yield" in
11746 '') sched_yield=undef ;;
11747 esac
11748
11749 $rm -f try try.*
11750
11751 : see if this is a pwd.h system
11752 set pwd.h i_pwd
11753 eval $inhdr
11754
11755 case "$i_pwd" in
11756 $define)
11757         xxx=`./findhdr pwd.h`
11758         $cppstdin $cppflags $cppminus < $xxx >$$.h
11759
11760         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11761                 val="$define"
11762         else
11763                 val="$undef"
11764         fi
11765         set d_pwquota
11766         eval $setvar
11767
11768         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11769                 val="$define"
11770         else
11771                 val="$undef"
11772         fi
11773         set d_pwage
11774         eval $setvar
11775
11776         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11777                 val="$define"
11778         else
11779                 val="$undef"
11780         fi
11781         set d_pwchange
11782         eval $setvar
11783
11784         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11785                 val="$define"
11786         else
11787                 val="$undef"
11788         fi
11789         set d_pwclass
11790         eval $setvar
11791
11792         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11793                 val="$define"
11794         else
11795                 val="$undef"
11796         fi
11797         set d_pwexpire
11798         eval $setvar
11799
11800         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11801                 val="$define"
11802         else
11803                 val="$undef"
11804         fi
11805         set d_pwcomment
11806         eval $setvar
11807
11808         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11809                 val="$define"
11810         else
11811                 val="$undef"
11812         fi
11813         set d_pwgecos
11814         eval $setvar
11815
11816         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11817                 val="$define"
11818         else
11819                 val="$undef"
11820         fi
11821         set d_pwpasswd
11822         eval $setvar
11823
11824         $rm -f $$.h
11825         ;;
11826 *)
11827         val="$undef"; 
11828         set d_pwquota; eval $setvar
11829         set d_pwage; eval $setvar
11830         set d_pwchange; eval $setvar
11831         set d_pwclass; eval $setvar
11832         set d_pwexpire; eval $setvar
11833         set d_pwcomment; eval $setvar
11834         set d_pwgecos; eval $setvar
11835         set d_pwpasswd; eval $setvar
11836         ;;
11837 esac
11838
11839 : see if readdir and friends exist
11840 set readdir d_readdir
11841 eval $inlibc
11842 set seekdir d_seekdir
11843 eval $inlibc
11844 set telldir d_telldir
11845 eval $inlibc
11846 set rewinddir d_rewinddir
11847 eval $inlibc
11848
11849 : see if readv exists
11850 set readv d_readv
11851 eval $inlibc
11852
11853 : see if recvmsg exists
11854 set recvmsg d_recvmsg
11855 eval $inlibc
11856
11857 : see if rename exists
11858 set rename d_rename
11859 eval $inlibc
11860
11861 : see if rmdir exists
11862 set rmdir d_rmdir
11863 eval $inlibc
11864
11865 : see if memory.h is available.
11866 val=''
11867 set memory.h val
11868 eval $inhdr
11869
11870 : See if it conflicts with string.h
11871 case "$val" in
11872 $define)
11873         case "$strings" in
11874         '') ;;
11875         *)
11876                 $cppstdin $cppflags $cppminus < $strings > mem.h
11877                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11878                         echo " "
11879                         echo "We won't be including <memory.h>."
11880                         val="$undef"
11881                 fi
11882                 $rm -f mem.h
11883                 ;;
11884         esac
11885 esac
11886 set i_memory
11887 eval $setvar
11888
11889 : can bcopy handle overlapping blocks?
11890 echo " "
11891 val="$undef"
11892 case "$d_memmove" in
11893 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11894 *)      case "$d_bcopy" in
11895         "$define")
11896                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11897                 $cat >try.c <<EOCP
11898 #$i_memory I_MEMORY
11899 #$i_stdlib I_STDLIB
11900 #$i_string I_STRING
11901 #$i_unistd I_UNISTD
11902 EOCP
11903         $cat >>try.c <<'EOCP'
11904 #include <stdio.h>
11905 #ifdef I_MEMORY
11906 #  include <memory.h>
11907 #endif
11908 #ifdef I_STDLIB
11909 #  include <stdlib.h>
11910 #endif
11911 #ifdef I_STRING
11912 #  include <string.h>
11913 #else
11914 #  include <strings.h>
11915 #endif
11916 #ifdef I_UNISTD
11917 #  include <unistd.h>  /* Needed for NetBSD */
11918 #endif
11919 int main()
11920 {
11921 char buf[128], abc[128];
11922 char *b;
11923 int len;
11924 int off;
11925 int align;
11926
11927 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11928    try to store the string in read-only memory. */
11929 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11930
11931 for (align = 7; align >= 0; align--) {
11932         for (len = 36; len; len--) {
11933                 b = buf+align;
11934                 bcopy(abc, b, len);
11935                 for (off = 1; off <= len; off++) {
11936                         bcopy(b, b+off, len);
11937                         bcopy(b+off, b, len);
11938                         if (bcmp(b, abc, len))
11939                                 exit(1);
11940                 }
11941         }
11942 }
11943 exit(0);
11944 }
11945 EOCP
11946                 set try
11947                 if eval $compile_ok; then
11948                         if ./try 2>/dev/null; then
11949                                 echo "Yes, it can."
11950                                 val="$define"
11951                         else
11952                                 echo "It can't, sorry."
11953                         fi
11954                 else
11955                         echo "(I can't compile the test program, so we'll assume not...)"
11956                 fi
11957                 ;;
11958         esac
11959         $rm -f try.* try core
11960         ;;
11961 esac
11962 set d_safebcpy
11963 eval $setvar
11964
11965 : can memcpy handle overlapping blocks?
11966 echo " "
11967 val="$undef"
11968 case "$d_memmove" in
11969 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11970 *)      case "$d_memcpy" in
11971         "$define")
11972                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11973                 $cat >try.c <<EOCP
11974 #$i_memory I_MEMORY
11975 #$i_stdlib I_STDLIB
11976 #$i_string I_STRING
11977 #$i_unistd I_UNISTD
11978 EOCP
11979         $cat >>try.c <<'EOCP'
11980 #include <stdio.h>
11981 #ifdef I_MEMORY
11982 #  include <memory.h>
11983 #endif
11984 #ifdef I_STDLIB
11985 #  include <stdlib.h>
11986 #endif
11987 #ifdef I_STRING
11988 #  include <string.h>
11989 #else
11990 #  include <strings.h>
11991 #endif
11992 #ifdef I_UNISTD
11993 #  include <unistd.h>  /* Needed for NetBSD */
11994 #endif
11995 int main()
11996 {
11997 char buf[128], abc[128];
11998 char *b;
11999 int len;
12000 int off;
12001 int align;
12002
12003 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12004    try to store the string in read-only memory. */
12005 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
12006
12007 for (align = 7; align >= 0; align--) {
12008         for (len = 36; len; len--) {
12009                 b = buf+align;
12010                 memcpy(b, abc, len);
12011                 for (off = 1; off <= len; off++) {
12012                         memcpy(b+off, b, len);
12013                         memcpy(b, b+off, len);
12014                         if (memcmp(b, abc, len))
12015                                 exit(1);
12016                 }
12017         }
12018 }
12019 exit(0);
12020 }
12021 EOCP
12022                 set try
12023                 if eval $compile_ok; then
12024                         if ./try 2>/dev/null; then
12025                                 echo "Yes, it can."
12026                                 val="$define"
12027                         else
12028                                 echo "It can't, sorry."
12029                         fi
12030                 else
12031                         echo "(I can't compile the test program, so we'll assume not...)"
12032                 fi
12033                 ;;
12034         esac
12035         $rm -f try.* try core
12036         ;;
12037 esac
12038 set d_safemcpy
12039 eval $setvar
12040
12041 : can memcmp be trusted to compare relative magnitude?
12042 val="$undef"
12043 case "$d_memcmp" in
12044 "$define")
12045         echo " "
12046         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12047         $cat >try.c <<EOCP
12048 #$i_memory I_MEMORY
12049 #$i_stdlib I_STDLIB
12050 #$i_string I_STRING
12051 #$i_unistd I_UNISTD
12052 EOCP
12053         $cat >>try.c <<'EOCP'
12054 #include <stdio.h>
12055 #ifdef I_MEMORY
12056 #  include <memory.h>
12057 #endif
12058 #ifdef I_STDLIB
12059 #  include <stdlib.h>
12060 #endif
12061 #ifdef I_STRING
12062 #  include <string.h>
12063 #else
12064 #  include <strings.h>
12065 #endif
12066 #ifdef I_UNISTD
12067 #  include <unistd.h>  /* Needed for NetBSD */
12068 #endif
12069 int main()
12070 {
12071 char a = -1;
12072 char b = 0;
12073 if ((a < b) && memcmp(&a, &b, 1) < 0)
12074         exit(1);
12075 exit(0);
12076 }
12077 EOCP
12078         set try
12079         if eval $compile_ok; then
12080                 if $run ./try 2>/dev/null; then
12081                         echo "Yes, it can."
12082                         val="$define"
12083                 else
12084                         echo "No, it can't (it uses signed chars)."
12085                 fi
12086         else
12087                 echo "(I can't compile the test program, so we'll assume not...)"
12088         fi
12089         ;;
12090 esac
12091 $rm -f try.* try core
12092 set d_sanemcmp
12093 eval $setvar
12094
12095 : see if prototype for sbrk is available
12096 echo " "
12097 set d_sbrkproto sbrk $i_unistd unistd.h
12098 eval $hasproto
12099
12100 : see if select exists
12101 set select d_select
12102 eval $inlibc
12103
12104 : see if semctl exists
12105 set semctl d_semctl
12106 eval $inlibc
12107
12108 : see if semget exists
12109 set semget d_semget
12110 eval $inlibc
12111
12112 : see if semop exists
12113 set semop d_semop
12114 eval $inlibc
12115
12116 : see how much of the 'sem*(2)' library is present.
12117 h_sem=true
12118 echo " "
12119 case "$d_semctl$d_semget$d_semop" in
12120 *"$undef"*) h_sem=false;;
12121 esac
12122 case "$osname" in
12123 freebsd)
12124     case "`ipcs 2>&1`" in
12125     "SVID messages"*"not configured"*)
12126         echo "Your $osname does not have the sem*(2) configured." >&4
12127         h_sem=false
12128         val="$undef"
12129         set semctl d_semctl
12130         eval $setvar
12131         set semget d_semget
12132         eval $setvar
12133         set semop d_semop
12134         eval $setvar
12135         ;;
12136     esac
12137     ;;
12138 esac
12139 : we could also check for sys/ipc.h ...
12140 if $h_sem && $test `./findhdr sys/sem.h`; then
12141         echo "You have the full sem*(2) library." >&4
12142         val="$define"
12143 else
12144         echo "You don't have the full sem*(2) library." >&4
12145         val="$undef"
12146 fi
12147 set d_sem
12148 eval $setvar
12149
12150 : see whether sys/sem.h defines union semun
12151 echo " "
12152 $cat > try.c <<'END'
12153 #include <sys/types.h>
12154 #include <sys/ipc.h>
12155 #include <sys/sem.h>
12156 int main () { union semun semun; semun.buf = 0; }
12157 END
12158 set try
12159 if eval $compile; then
12160     echo "You have union semun in <sys/sem.h>." >&4
12161     val="$define"
12162 else
12163     echo "You do not have union semun in <sys/sem.h>." >&4
12164     val="$undef"
12165 fi
12166 $rm -f try try.c try.h
12167 set d_union_semun
12168 eval $setvar
12169
12170 : see how to do semctl IPC_STAT
12171 case "$d_sem" in
12172 $define)
12173     : see whether semctl IPC_STAT can use union semun
12174     echo " "
12175     $cat > try.h <<END
12176 #ifndef S_IRUSR
12177 #   ifdef S_IREAD
12178 #       define S_IRUSR S_IREAD
12179 #       define S_IWUSR S_IWRITE
12180 #       define S_IXUSR S_IEXEC
12181 #   else
12182 #       define S_IRUSR 0400
12183 #       define S_IWUSR 0200
12184 #       define S_IXUSR 0100
12185 #   endif
12186 #   define S_IRGRP (S_IRUSR>>3)
12187 #   define S_IWGRP (S_IWUSR>>3)
12188 #   define S_IXGRP (S_IXUSR>>3)
12189 #   define S_IROTH (S_IRUSR>>6)
12190 #   define S_IWOTH (S_IWUSR>>6)
12191 #   define S_IXOTH (S_IXUSR>>6)
12192 #endif
12193 #ifndef S_IRWXU
12194 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12195 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12196 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12197 #endif
12198 END
12199
12200     $cat > try.c <<END
12201 #include <sys/types.h>
12202 #include <sys/ipc.h>
12203 #include <sys/sem.h>
12204 #include <sys/stat.h>
12205 #include <stdio.h>
12206 #include <errno.h>
12207 #include "try.h"
12208 #ifndef errno
12209 extern int errno;
12210 #endif
12211 #$d_union_semun HAS_UNION_SEMUN
12212 int main() {
12213     union semun
12214 #ifndef HAS_UNION_SEMUN
12215     {
12216         int val;
12217         struct semid_ds *buf;
12218         unsigned short *array;
12219     }
12220 #endif
12221     arg;
12222     int sem, st;
12223
12224 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12225     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12226     if (sem > -1) {
12227         struct semid_ds argbuf;
12228         arg.buf = &argbuf;
12229 #       ifdef IPC_STAT
12230         st = semctl(sem, 0, IPC_STAT, arg);
12231         if (st == 0)
12232             printf("semun\n");
12233         else
12234 #       endif /* IPC_STAT */
12235             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12236 #       ifdef IPC_RMID
12237         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12238 #       endif /* IPC_RMID */
12239             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12240     } else
12241 #endif /* IPC_PRIVATE && ... */
12242         printf("semget failed: errno = %d\n", errno);
12243   return 0;
12244 }
12245 END
12246     val="$undef"
12247     set try
12248     if eval $compile; then
12249         xxx=`$run ./try`
12250         case "$xxx" in
12251         semun) val="$define" ;;
12252         esac
12253     fi
12254     $rm -f try try.c
12255     set d_semctl_semun
12256     eval $setvar
12257     case "$d_semctl_semun" in
12258     $define)
12259         echo "You can use union semun for semctl IPC_STAT." >&4
12260         also='also'
12261         ;;
12262     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12263         also=''
12264         ;;
12265     esac
12266
12267     : see whether semctl IPC_STAT can use struct semid_ds pointer
12268     $cat > try.c <<'END'
12269 #include <sys/types.h>
12270 #include <sys/ipc.h>
12271 #include <sys/sem.h>
12272 #include <sys/stat.h>
12273 #include "try.h"
12274 #include <stdio.h>
12275 #include <errno.h>
12276 #ifndef errno
12277 extern int errno;
12278 #endif
12279 int main() {
12280     struct semid_ds arg;
12281     int sem, st;
12282
12283 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12284     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12285     if (sem > -1) {
12286 #       ifdef IPC_STAT
12287         st = semctl(sem, 0, IPC_STAT, &arg);
12288         if (st == 0)
12289             printf("semid_ds\n");
12290         else
12291 #       endif /* IPC_STAT */
12292             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12293 #       ifdef IPC_RMID
12294         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12295 #       endif /* IPC_RMID */
12296             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12297     } else
12298 #endif /* IPC_PRIVATE && ... */
12299         printf("semget failed: errno = %d\n", errno);
12300
12301     return 0;
12302 }
12303 END
12304     val="$undef"
12305     set try
12306     if eval $compile; then
12307         xxx=`$run ./try`
12308         case "$xxx" in
12309         semid_ds) val="$define" ;;
12310         esac
12311     fi
12312     $rm -f try try.c
12313     set d_semctl_semid_ds
12314     eval $setvar
12315     case "$d_semctl_semid_ds" in
12316     $define)
12317         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12318         ;;
12319     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12320         ;;
12321     esac
12322     $rm -f try.h
12323     ;;
12324 *)  val="$undef"
12325
12326     # We do not have the full sem*(2) library, so assume we can not
12327     # use either.
12328
12329     set d_semctl_semun
12330     eval $setvar
12331
12332     set d_semctl_semid_ds
12333     eval $setvar
12334     ;;
12335 esac
12336
12337 : see if sendmsg exists
12338 set sendmsg d_sendmsg
12339 eval $inlibc
12340
12341 : see if setegid exists
12342 set setegid d_setegid
12343 eval $inlibc
12344
12345 : see if seteuid exists
12346 set seteuid d_seteuid
12347 eval $inlibc
12348
12349 : see if setgrent exists
12350 set setgrent d_setgrent
12351 eval $inlibc
12352
12353 : see if sethostent exists
12354 set sethostent d_sethent
12355 eval $inlibc
12356
12357 : see if setitimer exists
12358 set setitimer d_setitimer
12359 eval $inlibc
12360
12361 : see if setlinebuf exists
12362 set setlinebuf d_setlinebuf
12363 eval $inlibc
12364
12365 : see if setlocale exists
12366 set setlocale d_setlocale
12367 eval $inlibc
12368
12369 : see if setnetent exists
12370 set setnetent d_setnent
12371 eval $inlibc
12372
12373 : see if setprotoent exists
12374 set setprotoent d_setpent
12375 eval $inlibc
12376
12377 : see if setpgid exists
12378 set setpgid d_setpgid
12379 eval $inlibc
12380
12381 : see if setpgrp2 exists
12382 set setpgrp2 d_setpgrp2
12383 eval $inlibc
12384
12385 : see if setpriority exists
12386 set setpriority d_setprior
12387 eval $inlibc
12388
12389 : see if setproctitle exists
12390 set setproctitle d_setproctitle
12391 eval $inlibc
12392
12393 : see if setpwent exists
12394 set setpwent d_setpwent
12395 eval $inlibc
12396
12397 : see if setregid exists
12398 set setregid d_setregid
12399 eval $inlibc
12400 set setresgid d_setresgid
12401 eval $inlibc
12402
12403 : see if setreuid exists
12404 set setreuid d_setreuid
12405 eval $inlibc
12406 set setresuid d_setresuid
12407 eval $inlibc
12408
12409 : see if setrgid exists
12410 set setrgid d_setrgid
12411 eval $inlibc
12412
12413 : see if setruid exists
12414 set setruid d_setruid
12415 eval $inlibc
12416
12417 : see if setservent exists
12418 set setservent d_setsent
12419 eval $inlibc
12420
12421 : see if setsid exists
12422 set setsid d_setsid
12423 eval $inlibc
12424
12425 : see if setvbuf exists
12426 set setvbuf d_setvbuf
12427 eval $inlibc
12428
12429 : see if sfio.h is available
12430 set sfio.h i_sfio
12431 eval $inhdr
12432
12433
12434 : see if sfio library is available
12435 case "$i_sfio" in
12436 $define)
12437         val=''
12438         set sfreserve val
12439         eval $inlibc
12440         ;;
12441 *)
12442         val="$undef"
12443         ;;
12444 esac
12445 : Ok, but do we want to use it.
12446 case "$val" in
12447 $define)
12448         case "$usesfio" in
12449         true|$define|[yY]*) dflt='y';;
12450         *) dflt='n';;
12451         esac
12452         echo "$package can use the sfio library, but it is experimental."
12453         case "$useperlio" in
12454         "$undef")
12455             echo "For sfio also the PerlIO abstraction layer is needed."
12456             echo "Earlier you said you wouldn't want that."
12457             ;;
12458         esac
12459         rp="You seem to have sfio available, do you want to try using it?"
12460         . ./myread
12461         case "$ans" in
12462         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12463                 useperlio="$define"
12464                 val="$define"
12465                 ;;
12466         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12467                 val="$undef"
12468                 ;;
12469         esac
12470         ;;
12471 *)      case "$usesfio" in
12472         true|$define|[yY]*)
12473                 echo "Sorry, cannot find sfio on this machine." >&4
12474                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12475                 val="$undef"
12476                 ;;
12477         esac
12478         ;;
12479 esac
12480 set d_sfio
12481 eval $setvar
12482 case "$d_sfio" in
12483 $define) usesfio='true';;
12484 *) usesfio='false';;
12485 esac
12486 case "$d_sfio" in
12487 $define) ;;
12488 *)      : Remove sfio from list of libraries to use
12489         case "$libs" in
12490         *-lsfio*)
12491                 echo "Removing unneeded -lsfio from library list" >&4
12492                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12493                 shift
12494                 libs="$*"
12495                 echo "libs = $libs" >&4
12496                 ;;
12497         esac
12498 ;;
12499 esac
12500
12501
12502 : see if shmctl exists
12503 set shmctl d_shmctl
12504 eval $inlibc
12505
12506 : see if shmget exists
12507 set shmget d_shmget
12508 eval $inlibc
12509
12510 : see if shmat exists
12511 set shmat d_shmat
12512 eval $inlibc
12513 : see what shmat returns
12514 case "$d_shmat" in
12515 "$define")
12516         $cat >shmat.c <<'END'
12517 #include <sys/shm.h>
12518 void *shmat();
12519 END
12520         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12521                 shmattype='void *'
12522         else
12523                 shmattype='char *'
12524         fi
12525         echo "and it returns ($shmattype)." >&4
12526         : see if a prototype for shmat is available
12527         xxx=`./findhdr sys/shm.h`
12528         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12529         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12530                 val="$define"
12531         else
12532                 val="$undef"
12533         fi
12534         $rm -f shmat.[co]
12535         ;;
12536 *)
12537         val="$undef"
12538         ;;
12539 esac
12540 set d_shmatprototype
12541 eval $setvar
12542
12543 : see if shmdt exists
12544 set shmdt d_shmdt
12545 eval $inlibc
12546
12547 : see how much of the 'shm*(2)' library is present.
12548 h_shm=true
12549 echo " "
12550 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12551 *"$undef"*) h_shm=false;;
12552 esac
12553 case "$osname" in
12554 freebsd)
12555     case "`ipcs 2>&1`" in
12556     "SVID shared memory"*"not configured"*)
12557         echo "Your $osname does not have the shm*(2) configured." >&4
12558         h_shm=false
12559         val="$undef"
12560         set shmctl d_shmctl
12561         evat $setvar
12562         set shmget d_shmget
12563         evat $setvar
12564         set shmat d_shmat
12565         evat $setvar
12566         set shmdt d_shmdt
12567         evat $setvar
12568         ;;
12569     esac
12570     ;;
12571 esac
12572 : we could also check for sys/ipc.h ...
12573 if $h_shm && $test `./findhdr sys/shm.h`; then
12574         echo "You have the full shm*(2) library." >&4
12575         val="$define"
12576 else
12577         echo "You don't have the full shm*(2) library." >&4
12578         val="$undef"
12579 fi
12580 set d_shm
12581 eval $setvar
12582
12583 echo " "
12584 : see if we have sigaction
12585 if set sigaction val -f d_sigaction; eval $csym; $val; then
12586         echo 'sigaction() found.' >&4
12587         $cat > try.c <<'EOP'
12588 #include <stdio.h>
12589 #include <sys/types.h>
12590 #include <signal.h>
12591 int main()
12592 {
12593     struct sigaction act, oact;
12594     act.sa_flags = 0;
12595     oact.sa_handler = 0;
12596     /* so that act and oact are used */
12597     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12598 }
12599 EOP
12600         set try
12601         if eval $compile_ok; then
12602                 val="$define"
12603         else
12604                 echo "But you don't seem to have a useable struct sigaction." >&4
12605                 val="$undef"
12606         fi
12607 else
12608         echo 'sigaction NOT found.' >&4
12609         val="$undef"
12610 fi
12611 set d_sigaction; eval $setvar
12612 $rm -f try try$_o try.c
12613
12614 : see if sigprocmask exists
12615 set sigprocmask d_sigprocmask
12616 eval $inlibc
12617
12618 : see if sigsetjmp exists
12619 echo " "
12620 case "$d_sigsetjmp" in
12621 '')
12622         $cat >try.c <<'EOP'
12623 #include <setjmp.h>
12624 sigjmp_buf env;
12625 int set = 1;
12626 int main()
12627 {
12628         if (sigsetjmp(env,1))
12629                 exit(set);
12630         set = 0;
12631         siglongjmp(env, 1);
12632         exit(1);
12633 }
12634 EOP
12635         set try
12636         if eval $compile; then
12637                 if $run ./try >/dev/null 2>&1; then
12638                         echo "POSIX sigsetjmp found." >&4
12639                         val="$define"
12640                 else
12641                         $cat >&4 <<EOM
12642 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12643 I'll ignore them.
12644 EOM
12645                         val="$undef"
12646                 fi
12647         else
12648                 echo "sigsetjmp not found." >&4
12649                 val="$undef"
12650         fi
12651         ;;
12652 *) val="$d_sigsetjmp"
12653         case "$d_sigsetjmp" in
12654         $define) echo "POSIX sigsetjmp found." >&4;;
12655         $undef) echo "sigsetjmp not found." >&4;;
12656         esac
12657         ;;
12658 esac
12659 set d_sigsetjmp
12660 eval $setvar
12661 $rm -f try.c try
12662
12663 : see if sockatmark exists
12664 set sockatmark d_sockatmark
12665 eval $inlibc
12666
12667 : see if prototype for sockatmark is available
12668 echo " "
12669 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12670 eval $hasproto
12671
12672 : see if socks5_init exists
12673 set socks5_init d_socks5_init
12674 eval $inlibc
12675
12676 : see if prototype for setresgid is available
12677 echo " "
12678 set d_sresgproto setresgid $i_unistd unistd.h
12679 eval $hasproto
12680
12681 : see if prototype for setresuid is available
12682 echo " "
12683 set d_sresuproto setresuid $i_unistd unistd.h
12684 eval $hasproto
12685
12686 : see if sys/stat.h is available
12687 set sys/stat.h i_sysstat
12688 eval $inhdr
12689
12690
12691 : see if stat knows about block sizes
12692 echo " "
12693 echo "Checking to see if your struct stat has st_blocks field..." >&4
12694 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12695 eval $hasfield
12696
12697
12698 : see if this is a sys/vfs.h system
12699 set sys/vfs.h i_sysvfs
12700 eval $inhdr
12701
12702
12703 : see if this is a sys/statfs.h system
12704 set sys/statfs.h i_sysstatfs
12705 eval $inhdr
12706
12707
12708 echo " "
12709 echo "Checking to see if your system supports struct statfs..." >&4
12710 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
12711 eval $hasstruct
12712 case "$d_statfs_s" in
12713 "$define")      echo "Yes, it does."   ;;
12714 *)              echo "No, it doesn't." ;;
12715 esac
12716
12717
12718
12719 : see if struct statfs knows about f_flags
12720 case "$d_statfs_s" in
12721 define) 
12722         echo " "
12723         echo "Checking to see if your struct statfs has f_flags field..." >&4
12724         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
12725         eval $hasfield
12726         ;;
12727 *)      val="$undef"
12728         set d_statfs_f_flags
12729         eval $setvar
12730         ;;
12731 esac
12732 case "$d_statfs_f_flags" in
12733 "$define")      echo "Yes, it does."   ;;
12734 *)              echo "No, it doesn't." ;;
12735 esac
12736
12737 : see if _ptr and _cnt from stdio act std
12738 echo " "
12739
12740 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12741         echo "(Looks like you have stdio.h from BSD.)"
12742         case "$stdio_ptr" in
12743         '') stdio_ptr='((fp)->_p)'
12744                 ptr_lval=$define
12745                 ;;
12746         *)      ptr_lval=$d_stdio_ptr_lval;;
12747         esac
12748         case "$stdio_cnt" in
12749         '') stdio_cnt='((fp)->_r)'
12750                 cnt_lval=$define
12751                 ;;
12752         *)      cnt_lval=$d_stdio_cnt_lval;;
12753         esac
12754         case "$stdio_base" in
12755         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12756         esac
12757         case "$stdio_bufsiz" in
12758         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12759         esac
12760 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12761         echo "(Looks like you have stdio.h from Linux.)"
12762         case "$stdio_ptr" in
12763         '') stdio_ptr='((fp)->_IO_read_ptr)'
12764                 ptr_lval=$define
12765                 ;;
12766         *)      ptr_lval=$d_stdio_ptr_lval;;
12767         esac
12768         case "$stdio_cnt" in
12769         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12770                 cnt_lval=$undef
12771                 ;;
12772         *)      cnt_lval=$d_stdio_cnt_lval;;
12773         esac
12774         case "$stdio_base" in
12775         '') stdio_base='((fp)->_IO_read_base)';;
12776         esac
12777         case "$stdio_bufsiz" in
12778         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12779         esac
12780 else
12781         case "$stdio_ptr" in
12782         '') stdio_ptr='((fp)->_ptr)'
12783                 ptr_lval=$define
12784                 ;;
12785         *)      ptr_lval=$d_stdio_ptr_lval;;
12786         esac
12787         case "$stdio_cnt" in
12788         '') stdio_cnt='((fp)->_cnt)'
12789                 cnt_lval=$define
12790                 ;;
12791         *)      cnt_lval=$d_stdio_cnt_lval;;
12792         esac
12793         case "$stdio_base" in
12794         '') stdio_base='((fp)->_base)';;
12795         esac
12796         case "$stdio_bufsiz" in
12797         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12798         esac
12799 fi
12800
12801 : test whether _ptr and _cnt really work
12802 echo "Checking how std your stdio is..." >&4
12803 $cat >try.c <<EOP
12804 #include <stdio.h>
12805 #define FILE_ptr(fp)    $stdio_ptr
12806 #define FILE_cnt(fp)    $stdio_cnt
12807 int main() {
12808         FILE *fp = fopen("try.c", "r");
12809         char c = getc(fp);
12810         if (
12811                 18 <= FILE_cnt(fp) &&
12812                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12813         )
12814                 exit(0);
12815         exit(1);
12816 }
12817 EOP
12818 val="$undef"
12819 set try
12820 if eval $compile && $to try.c; then
12821         if $run ./try; then
12822                 echo "Your stdio acts pretty std."
12823                 val="$define"
12824         else
12825                 echo "Your stdio isn't very std."
12826         fi
12827 else
12828         echo "Your stdio doesn't appear very std."
12829 fi
12830 $rm -f try.c try
12831 set d_stdstdio
12832 eval $setvar
12833
12834 : Can _ptr be used as an lvalue?
12835 case "$d_stdstdio$ptr_lval" in
12836 $define$define) val=$define ;;
12837 *) val=$undef ;;
12838 esac
12839 set d_stdio_ptr_lval
12840 eval $setvar
12841
12842 : Can _cnt be used as an lvalue?
12843 case "$d_stdstdio$cnt_lval" in
12844 $define$define) val=$define ;;
12845 *) val=$undef ;;
12846 esac
12847 set d_stdio_cnt_lval
12848 eval $setvar
12849
12850
12851 : test whether setting _ptr sets _cnt as a side effect
12852 d_stdio_ptr_lval_sets_cnt="$undef"
12853 d_stdio_ptr_lval_nochange_cnt="$undef"
12854 case "$d_stdio_ptr_lval$d_stdstdio" in
12855 $define$define)
12856         echo "Checking to see what happens if we set the stdio ptr..." >&4
12857 $cat >try.c <<EOP
12858 #include <stdio.h>
12859 /* Can we scream? */
12860 /* Eat dust sed :-) */
12861 /* In the buffer space, no one can hear you scream. */
12862 #define FILE_ptr(fp)    $stdio_ptr
12863 #define FILE_cnt(fp)    $stdio_cnt
12864 #include <sys/types.h>
12865 int main() {
12866         FILE *fp = fopen("try.c", "r");
12867         int c;
12868         char *ptr;
12869         size_t cnt;
12870         if (!fp) {
12871             puts("Fail even to read");
12872             exit(1);
12873         }
12874         c = getc(fp); /* Read away the first # */
12875         if (c == EOF) {
12876             puts("Fail even to read");
12877             exit(1);
12878         }
12879         if (!(
12880                 18 <= FILE_cnt(fp) &&
12881                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12882         )) {
12883                 puts("Fail even to read");
12884                 exit (1);
12885         }
12886         ptr = (char*) FILE_ptr(fp);
12887         cnt = (size_t)FILE_cnt(fp);
12888
12889         FILE_ptr(fp) += 42;
12890
12891         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12892                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12893                 exit (1);
12894         }
12895         if (FILE_cnt(fp) <= 20) {
12896                 printf ("Fail (<20 chars to test)");
12897                 exit (1);
12898         }
12899         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12900                 puts("Fail compare");
12901                 exit (1);
12902         }
12903         if (cnt == FILE_cnt(fp)) {
12904                 puts("Pass_unchanged");
12905                 exit (0);
12906         }       
12907         if (FILE_cnt(fp) == (cnt - 42)) {
12908                 puts("Pass_changed");
12909                 exit (0);
12910         }
12911         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12912         return 1;
12913
12914 }
12915 EOP
12916         set try
12917         if eval $compile && $to try.c; then
12918                 case `$run ./try` in
12919                 Pass_changed)
12920                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12921                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12922                 Pass_unchanged)
12923                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12924                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12925                 Fail*)
12926                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12927                 *)
12928                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12929         esac
12930         else
12931                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12932         fi
12933         $rm -f try.c try
12934         ;;
12935 esac
12936
12937 : see if _base is also standard
12938 val="$undef"
12939 case "$d_stdstdio" in
12940 $define)
12941         $cat >try.c <<EOP
12942 #include <stdio.h>
12943 #define FILE_base(fp)   $stdio_base
12944 #define FILE_bufsiz(fp) $stdio_bufsiz
12945 int main() {
12946         FILE *fp = fopen("try.c", "r");
12947         char c = getc(fp);
12948         if (
12949                 19 <= FILE_bufsiz(fp) &&
12950                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12951         )
12952                 exit(0);
12953         exit(1);
12954 }
12955 EOP
12956         set try
12957         if eval $compile && $to try.c; then
12958                 if $run ./try; then
12959                         echo "And its _base field acts std."
12960                         val="$define"
12961                 else
12962                         echo "But its _base field isn't std."
12963                 fi
12964         else
12965                 echo "However, it seems to be lacking the _base field."
12966         fi
12967         $rm -f try.c try
12968         ;;
12969 esac
12970 set d_stdiobase
12971 eval $setvar
12972
12973 $cat >&4 <<EOM
12974 Checking how to access stdio streams by file descriptor number...
12975 EOM
12976 case "$stdio_stream_array" in
12977 '')     $cat >try.c <<EOCP
12978 #include <stdio.h>
12979 int main() {
12980   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12981     printf("yes\n");
12982 }
12983 EOCP
12984         for s in _iob __iob __sF
12985         do
12986                 set try -DSTDIO_STREAM_ARRAY=$s
12987                 if eval $compile; then
12988                         case "`$run ./try`" in
12989                         yes)    stdio_stream_array=$s; break ;;
12990                         esac
12991                 fi
12992         done
12993         $rm -f try.* try$exe_ext
12994 esac
12995 case "$stdio_stream_array" in
12996 '')     $cat >&4 <<EOM
12997 I can't figure out how to access stdio streams by file descriptor number.
12998 EOM
12999         d_stdio_stream_array="$undef"
13000         ;;
13001 *)      $cat >&4 <<EOM
13002 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
13003 EOM
13004         d_stdio_stream_array="$define"
13005         ;;
13006 esac
13007
13008 : see if strcoll exists
13009 set strcoll d_strcoll
13010 eval $inlibc
13011
13012 : check for structure copying
13013 echo " "
13014 echo "Checking to see if your C compiler can copy structs..." >&4
13015 $cat >try.c <<'EOCP'
13016 int main()
13017 {
13018         struct blurfl {
13019                 int dyick;
13020         } foo, bar;
13021
13022         foo = bar;
13023 }
13024 EOCP
13025 if $cc -c try.c >/dev/null 2>&1 ; then
13026         val="$define"
13027         echo "Yup, it can."
13028 else
13029         val="$undef"
13030         echo "Nope, it can't."
13031 fi
13032 set d_strctcpy
13033 eval $setvar
13034 $rm -f try.*
13035
13036 : see if strerror and/or sys_errlist[] exist
13037 echo " "
13038 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13039     if set strerror val -f d_strerror; eval $csym; $val; then
13040                 echo 'strerror() found.' >&4
13041                 d_strerror="$define"
13042                 d_strerrm='strerror(e)'
13043                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13044                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13045                         d_syserrlst="$define"
13046                 else
13047                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13048                         d_syserrlst="$undef"
13049                 fi
13050     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13051                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13052                 echo 'strerror() found in string header.' >&4
13053                 d_strerror="$define"
13054                 d_strerrm='strerror(e)'
13055                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13056                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13057                                 d_syserrlst="$define"
13058                 else
13059                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13060                         d_syserrlst="$undef"
13061                 fi
13062     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13063                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13064                 d_strerror="$undef"
13065                 d_syserrlst="$define"
13066                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13067     else
13068                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13069                 d_strerror="$undef"
13070                 d_syserrlst="$undef"
13071                 d_strerrm='"unknown"'
13072     fi
13073 fi
13074
13075 : see if strftime exists
13076 set strftime d_strftime
13077 eval $inlibc
13078
13079 : see if strtod exists
13080 set strtod d_strtod
13081 eval $inlibc
13082
13083 : see if strtol exists
13084 set strtol d_strtol
13085 eval $inlibc
13086
13087 : see if strtold exists
13088 set strtold d_strtold
13089 eval $inlibc
13090
13091 : see if strtoll exists
13092 set strtoll d_strtoll
13093 eval $inlibc
13094
13095 case "$d_longlong-$d_strtoll" in
13096 "$define-$define")
13097         $cat <<EOM
13098 Checking whether your strtoll() works okay...
13099 EOM
13100         $cat >try.c <<'EOCP'
13101 #include <errno.h>
13102 #ifdef __hpux
13103 #define strtoll __strtoll
13104 #endif
13105 #ifdef __EMX__
13106 #define strtoll _strtoll
13107 #endif
13108 #include <stdio.h>
13109 extern long long int strtoll(char *s, char **, int); 
13110 static int bad = 0;
13111 int check(char *s, long long ell, int een) {
13112         long long gll;
13113         errno = 0;
13114         gll = strtoll(s, 0, 10);
13115         if (!((gll == ell) && (errno == een)))
13116                 bad++;
13117 }
13118 int main() {
13119         check(" 1",                                      1LL, 0);
13120         check(" 0",                                      0LL, 0);
13121         check("-1",                                     -1LL, 0);
13122         check("-9223372036854775808", -9223372036854775808LL, 0);
13123         check("-9223372036854775808", -9223372036854775808LL, 0);
13124         check(" 9223372036854775807",  9223372036854775807LL, 0);
13125         check("-9223372036854775808", -9223372036854775808LL, 0);
13126         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13127         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13128         if (!bad)
13129                 printf("ok\n");
13130 }
13131 EOCP
13132         set try
13133         if eval $compile; then
13134                 yyy=`$run ./try`
13135                 case "$yyy" in
13136                 ok) echo "Your strtoll() seems to be working okay." ;;
13137                 *) cat <<EOM >&4
13138 Your strtoll() doesn't seem to be working okay.
13139 EOM
13140                    d_strtoll="$undef"
13141                    ;;
13142                 esac
13143         else
13144                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13145                 d_strtoll="$undef"
13146         fi
13147         ;;
13148 esac
13149
13150 : see if strtoq exists
13151 set strtoq d_strtoq
13152 eval $inlibc
13153
13154 : see if strtoul exists
13155 set strtoul d_strtoul
13156 eval $inlibc
13157
13158 case "$d_strtoul" in
13159 "$define")
13160         $cat <<EOM
13161 Checking whether your strtoul() works okay...
13162 EOM
13163         $cat >try.c <<'EOCP'
13164 #include <errno.h>
13165 #include <stdio.h>
13166 extern unsigned long int strtoul(char *s, char **, int); 
13167 static int bad = 0;
13168 void check(char *s, unsigned long eul, int een) {
13169         unsigned long gul;
13170         errno = 0;
13171         gul = strtoul(s, 0, 10);
13172         if (!((gul == eul) && (errno == een)))
13173                 bad++;
13174 }
13175 int main() {
13176         check(" 1", 1L, 0);
13177         check(" 0", 0L, 0);
13178 EOCP
13179         case "$longsize" in
13180         8)
13181             $cat >>try.c <<'EOCP'
13182         check("18446744073709551615", 18446744073709551615UL, 0);
13183         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13184 #if 0 /* strtoul() for /^-/ strings is undefined. */
13185         check("-1", 18446744073709551615UL, 0);
13186         check("-18446744073709551614", 2, 0);
13187         check("-18446744073709551615", 1, 0);
13188         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13189         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13190 #endif
13191 EOCP
13192                 ;;
13193         4)
13194                     $cat >>try.c <<'EOCP'
13195         check("4294967295", 4294967295UL, 0);
13196         check("4294967296", 4294967295UL, ERANGE);
13197 #if 0 /* strtoul() for /^-/ strings is undefined. */
13198         check("-1", 4294967295UL, 0);
13199         check("-4294967294", 2, 0);
13200         check("-4294967295", 1, 0);
13201         check("-4294967296", 4294967295UL, ERANGE);
13202         check("-4294967297", 4294967295UL, ERANGE);
13203 #endif
13204 EOCP
13205                 ;;
13206         *)
13207 : Should we write these tests to be more portable by sprintf-ing
13208 : ~0 and then manipulating that char string as input for strtol?
13209                 ;;
13210         esac
13211         $cat >>try.c <<'EOCP'
13212         if (!bad)
13213                 printf("ok\n");
13214         return 0;
13215 }
13216 EOCP
13217         set try
13218         if eval $compile; then
13219                 case "`$run ./try`" in
13220                 ok) echo "Your strtoul() seems to be working okay." ;;
13221                 *) cat <<EOM >&4
13222 Your strtoul() doesn't seem to be working okay.
13223 EOM
13224                    d_strtoul="$undef"
13225                    ;;
13226                 esac
13227         fi
13228         ;;
13229 esac
13230
13231 : see if strtoull exists
13232 set strtoull d_strtoull
13233 eval $inlibc
13234
13235 case "$d_longlong-$d_strtoull" in
13236 "$define-$define")
13237         $cat <<EOM
13238 Checking whether your strtoull() works okay...
13239 EOM
13240         $cat >try.c <<'EOCP'
13241 #include <errno.h>
13242 #ifdef __hpux
13243 #define strtoull __strtoull
13244 #endif
13245 #include <stdio.h>
13246 extern unsigned long long int strtoull(char *s, char **, int); 
13247 static int bad = 0;
13248 int check(char *s, long long eull, int een) {
13249         long long gull;
13250         errno = 0;
13251         gull = strtoull(s, 0, 10);
13252         if (!((gull == eull) && (errno == een)))
13253                 bad++;
13254 }
13255 int main() {
13256         check(" 1",                                        1LL, 0);
13257         check(" 0",                                        0LL, 0);
13258         check("18446744073709551615",  18446744073709551615ULL, 0);
13259         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13260 #if 0 /* strtoull() for /^-/ strings is undefined. */
13261         check("-1",                    18446744073709551615ULL, 0);
13262         check("-18446744073709551614",                     2LL, 0);
13263         check("-18446744073709551615",                     1LL, 0);
13264         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13265         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13266 #endif
13267         if (!bad)
13268                 printf("ok\n");
13269 }
13270 EOCP
13271         set try
13272         if eval $compile; then
13273                 case "`$run ./try`" in
13274                 ok) echo "Your strtoull() seems to be working okay." ;;
13275                 *) cat <<EOM >&4
13276 Your strtoull() doesn't seem to be working okay.
13277 EOM
13278                    d_strtoull="$undef"
13279                    ;;
13280                 esac
13281         fi
13282         ;;
13283 esac
13284
13285 : see if strtouq exists
13286 set strtouq d_strtouq
13287 eval $inlibc
13288
13289 case "$d_strtouq" in
13290 "$define")
13291         $cat <<EOM
13292 Checking whether your strtouq() works okay...
13293 EOM
13294         $cat >try.c <<'EOCP'
13295 #include <errno.h>
13296 #include <stdio.h>
13297 extern unsigned long long int strtouq(char *s, char **, int); 
13298 static int bad = 0;
13299 void check(char *s, unsigned long long eull, int een) {
13300         unsigned long long gull;
13301         errno = 0;
13302         gull = strtouq(s, 0, 10);
13303         if (!((gull == eull) && (errno == een)))
13304                 bad++;
13305 }
13306 int main() {
13307         check(" 1",                                        1LL, 0);
13308         check(" 0",                                        0LL, 0);
13309         check("18446744073709551615",  18446744073709551615ULL, 0);
13310         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13311 #if 0 /* strtouq() for /^-/ strings is undefined. */
13312         check("-1",                    18446744073709551615ULL, 0);
13313         check("-18446744073709551614",                     2LL, 0);
13314         check("-18446744073709551615",                     1LL, 0);
13315         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13316         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13317 #endif
13318         if (!bad)
13319                 printf("ok\n");
13320         return 0;
13321 }
13322 EOCP
13323         set try
13324         if eval $compile; then
13325                 case "`$run ./try`" in
13326                 ok) echo "Your strtouq() seems to be working okay." ;;
13327                 *) cat <<EOM >&4
13328 Your strtouq() doesn't seem to be working okay.
13329 EOM
13330                    d_strtouq="$undef"
13331                    ;;
13332                 esac
13333         fi
13334         ;;
13335 esac
13336
13337 : see if strxfrm exists
13338 set strxfrm d_strxfrm
13339 eval $inlibc
13340
13341 : see if symlink exists
13342 set symlink d_symlink
13343 eval $inlibc
13344
13345 : see if syscall exists
13346 set syscall d_syscall
13347 eval $inlibc
13348
13349 : see if prototype for syscall is available
13350 echo " "
13351 set d_syscallproto syscall $i_unistd unistd.h
13352 eval $hasproto
13353
13354 : see if sysconf exists
13355 set sysconf d_sysconf
13356 eval $inlibc
13357
13358 : see if system exists
13359 set system d_system
13360 eval $inlibc
13361
13362 : see if tcgetpgrp exists
13363 set tcgetpgrp d_tcgetpgrp
13364 eval $inlibc
13365
13366 : see if tcsetpgrp exists
13367 set tcsetpgrp d_tcsetpgrp
13368 eval $inlibc
13369
13370 : see if prototype for telldir is available
13371 echo " "
13372 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13373 eval $hasproto
13374
13375 : see if this is a sys/times.h system
13376 set sys/times.h i_systimes
13377 eval $inhdr
13378
13379 : see if times exists
13380 echo " "
13381 if set times val -f d_times; eval $csym; $val; then
13382         echo 'times() found.' >&4
13383         d_times="$define"
13384         inc=''
13385         case "$i_systimes" in
13386         "$define") inc='sys/times.h';;
13387         esac
13388         rp="What is the type returned by times() on this system?"
13389         set clock_t clocktype long stdio.h sys/types.h $inc
13390         eval $typedef_ask
13391 else
13392         echo 'times() NOT found, hope that will do.' >&4
13393         d_times="$undef"
13394         clocktype='int'
13395 fi
13396
13397 : see if truncate exists
13398 set truncate d_truncate
13399 eval $inlibc
13400
13401 : see if tzname[] exists
13402 echo " "
13403 if set tzname val -a d_tzname; eval $csym; $val; then
13404         val="$define"
13405         echo 'tzname[] found.' >&4
13406 else
13407         val="$undef"
13408         echo 'tzname[] NOT found.' >&4
13409 fi
13410 set d_tzname
13411 eval $setvar
13412
13413 case "$osname" in
13414 next|rhapsody|darwin) multiarch="$define" ;;
13415 esac
13416 case "$multiarch" in
13417 ''|[nN]*) multiarch="$undef" ;;
13418 esac
13419
13420 : check for ordering of bytes in a long
13421 echo " "
13422 case "$usecrosscompile$multiarch" in
13423 *$define*)
13424         $cat <<EOM
13425 You seem to be either cross-compiling or doing a multiarchitecture build,
13426 skipping the byteorder check.
13427
13428 EOM
13429         byteorder='ffff'
13430         ;;
13431 *)
13432         case "$byteorder" in
13433         '')
13434                 $cat <<'EOM'
13435 In the following, larger digits indicate more significance.  A big-endian
13436 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13437 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13438 machines may have weird orders like 3412.  A Cray will report 87654321,
13439 an Alpha will report 12345678. If the test program works the default is
13440 probably right.
13441 I'm now running the test program...
13442 EOM
13443                 $cat >try.c <<'EOCP'
13444 #include <stdio.h>
13445 int main()
13446 {
13447         int i;
13448         union {
13449                 unsigned long l;
13450                 char c[sizeof(long)];
13451         } u;
13452
13453         if (sizeof(long) > 4)
13454                 u.l = (0x08070605L << 32) | 0x04030201L;
13455         else
13456                 u.l = 0x04030201L;
13457         for (i = 0; i < sizeof(long); i++)
13458                 printf("%c", u.c[i]+'0');
13459         printf("\n");
13460         exit(0);
13461 }
13462 EOCP
13463                 xxx_prompt=y
13464                 set try
13465                 if eval $compile && ./try > /dev/null; then
13466                         dflt=`$run ./try`
13467                         case "$dflt" in
13468                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13469                                 echo "(The test program ran ok.)"
13470                                 echo "byteorder=$dflt"
13471                                 xxx_prompt=n
13472                         ;;
13473                         ????|????????) echo "(The test program ran ok.)" ;;
13474                         *) echo "(The test program didn't run right for some reason.)" ;;
13475                         esac
13476                 else
13477                         dflt='4321'
13478                         cat <<'EOM'
13479 (I can't seem to compile the test program.  Guessing big-endian...)
13480 EOM
13481                 fi
13482                 case "$xxx_prompt" in
13483                 y)
13484                         rp="What is the order of bytes in a long?"
13485                         . ./myread
13486                         byteorder="$ans"
13487                         ;;
13488                 *)      byteorder=$dflt
13489                         ;;
13490                 esac
13491                 ;;
13492         esac
13493         $rm -f try.c try
13494         ;;
13495 esac
13496
13497
13498 $cat <<EOM
13499
13500 Checking to see whether you can access character data unalignedly...
13501 EOM
13502 case "$d_u32align" in
13503 '')   $cat >try.c <<EOCP
13504 #include <stdio.h>
13505 #define U32 $u32type
13506 #define BYTEORDER 0x$byteorder
13507 #define U8 $u8type
13508 #include <signal.h>
13509 #ifdef SIGBUS
13510 $signal_t bletch(s) int s; { exit(4); }
13511 #endif
13512 int main() {
13513 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13514     U8 buf[8];
13515     U32 *up;
13516     int i;
13517
13518     if (sizeof(U32) != 4) {
13519         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13520         exit(1);
13521     }
13522
13523     fflush(stdout);
13524
13525 #ifdef SIGBUS
13526     signal(SIGBUS, bletch);
13527 #endif
13528
13529     buf[0] = 0;
13530     buf[1] = 0;
13531     buf[2] = 0;
13532     buf[3] = 1;
13533     buf[5] = 0;
13534     buf[6] = 0;
13535     buf[7] = 0;
13536     buf[8] = 1;
13537
13538     for (i = 0; i < 4; i++) {
13539         up = (U32*)(buf + i);
13540         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13541                (*up == 1 << (8*(3-i)))  /* little-endian */
13542               )
13543            )
13544         {
13545             printf("read failed (%x)\n", *up);
13546             exit(2);
13547         }
13548     }
13549
13550     /* write test */
13551     for (i = 0; i < 4; i++) {
13552         up = (U32*)(buf + i);
13553         *up = 0xBeef;
13554         if (*up != 0xBeef) {
13555             printf("write failed (%x)\n", *up);
13556             exit(3);
13557         }
13558     }
13559
13560     exit(0);
13561 #else
13562     printf("1\n");
13563     exit(1);
13564 #endif
13565     return 0;
13566 }
13567 EOCP
13568 set try
13569 if eval $compile_ok; then
13570         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13571         $run ./try 2>&1 >/dev/null
13572         case "$?" in
13573         0)      cat >&4 <<EOM
13574 You can access character data pretty unalignedly.
13575 EOM
13576                 d_u32align="$undef"
13577                 ;;
13578         *)      cat >&4 <<EOM
13579 It seems that you must access character data in an aligned manner.
13580 EOM
13581                 d_u32align="$define"
13582                 ;;
13583         esac
13584 else
13585         rp='Can you access character data at unaligned addresses?'
13586         dflt='n'
13587         . ./myread
13588         case "$ans" in
13589         [yY]*)  d_u32align="$undef"  ;;
13590         *)      d_u32align="$define" ;;
13591         esac
13592 fi
13593 $rm -f core core.try.* try.core
13594 ;;
13595 esac
13596
13597 : see if ualarm exists
13598 set ualarm d_ualarm
13599 eval $inlibc
13600
13601 : see if umask exists
13602 set umask d_umask
13603 eval $inlibc
13604
13605 : see if unordered exists
13606 set unordered d_unordered
13607 eval $inlibc
13608
13609 : see if usleep exists
13610 set usleep d_usleep
13611 eval $inlibc
13612
13613 : see if prototype for usleep is available
13614 echo " "
13615 set d_usleepproto usleep $i_unistd unistd.h
13616 eval $hasproto
13617
13618 : see if ustat exists
13619 set ustat d_ustat
13620 eval $inlibc
13621
13622 : backward compatibility for d_hvfork
13623 if test X$d_hvfork != X; then
13624         d_vfork="$d_hvfork"
13625         d_hvfork=''
13626 fi
13627 : see if there is a vfork
13628 val=''
13629 set vfork val
13630 eval $inlibc
13631
13632 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13633 : perl on Solaris 2.x, and probably elsewhere.
13634 case "$val" in
13635 $define)
13636         echo " "
13637         case "$usevfork" in
13638         false) dflt='n';;
13639         *) dflt='y';;
13640         esac
13641         cat <<'EOM'
13642  
13643 Perl can only use a vfork() that doesn't suffer from strict
13644 restrictions on calling functions or modifying global data in
13645 the child.  For example, glibc-2.1 contains such a vfork()
13646 that is unsuitable.  If your system provides a proper fork()
13647 call, chances are that you do NOT want perl to use vfork().
13648
13649 EOM
13650         rp="Do you still want to use vfork()?"
13651         . ./myread
13652         case "$ans" in
13653         y|Y) ;;
13654         *)
13655                 echo "Ok, we won't use vfork()."
13656                 val="$undef"
13657                 ;;
13658         esac
13659         ;;
13660 esac
13661 set d_vfork
13662 eval $setvar
13663 case "$d_vfork" in
13664 $define) usevfork='true';;
13665 *) usevfork='false';;
13666 esac
13667
13668 : see if closedir exists
13669 set closedir d_closedir
13670 eval $inlibc
13671
13672 case "$d_closedir" in
13673 "$define")
13674         echo " "
13675         echo "Checking whether closedir() returns a status..." >&4
13676         cat > try.c <<EOM
13677 #$i_dirent I_DIRENT             /**/
13678 #$i_sysdir I_SYS_DIR            /**/
13679 #$i_sysndir I_SYS_NDIR          /**/
13680 #$i_systypes I_SYS_TYPES        /**/
13681
13682 #if defined(I_SYS_TYPES)
13683 #include <sys/types.h>
13684 #endif
13685 #if defined(I_DIRENT)
13686 #include <dirent.h>
13687 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13688 #include <sys/dir.h>
13689 #endif
13690 #else
13691 #ifdef I_SYS_NDIR
13692 #include <sys/ndir.h>
13693 #else
13694 #ifdef I_SYS_DIR
13695 #ifdef hp9000s500
13696 #include <ndir.h>       /* may be wrong in the future */
13697 #else
13698 #include <sys/dir.h>
13699 #endif
13700 #endif
13701 #endif
13702 #endif 
13703 int main() { return closedir(opendir(".")); }
13704 EOM
13705         set try
13706         if eval $compile_ok; then
13707                 if $run ./try > /dev/null 2>&1 ; then
13708                         echo "Yes, it does."
13709                         val="$undef"
13710                 else
13711                         echo "No, it doesn't."
13712                         val="$define"
13713                 fi
13714         else
13715                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13716                 val="$define"
13717         fi
13718         ;;
13719 *)
13720         val="$undef";
13721         ;;
13722 esac
13723 set d_void_closedir
13724 eval $setvar
13725 $rm -f try try.*
13726 : see if there is a wait4
13727 set wait4 d_wait4
13728 eval $inlibc
13729
13730 : see if waitpid exists
13731 set waitpid d_waitpid
13732 eval $inlibc
13733
13734 : see if wcstombs exists
13735 set wcstombs d_wcstombs
13736 eval $inlibc
13737
13738 : see if wctomb exists
13739 set wctomb d_wctomb
13740 eval $inlibc
13741
13742 : see if writev exists
13743 set writev d_writev
13744 eval $inlibc
13745
13746 : preserve RCS keywords in files with variable substitution, grrr
13747 Date='$Date'
13748 Id='$Id'
13749 Log='$Log'
13750 RCSfile='$RCSfile'
13751 Revision='$Revision'
13752
13753 : check for alignment requirements
13754 echo " "
13755 case "$usecrosscompile$multiarch" in
13756 *$define*)
13757         $cat <<EOM
13758 You seem to be either cross-compiling or doing a multiarchitecture build,
13759 skipping the memory alignment check.
13760
13761 EOM
13762         case "$alignbytes" in
13763         '') alignbytes=8 ;;
13764         esac
13765         ;;
13766 *)
13767         case "$alignbytes" in
13768         '') echo "Checking alignment constraints..." >&4
13769                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13770                         $cat >try.c <<'EOCP'
13771 typedef long double NV;
13772 EOCP
13773                 else
13774                         $cat >try.c <<'EOCP'
13775 typedef double NV;
13776 EOCP
13777                 fi
13778                 $cat >>try.c <<'EOCP'
13779 #include <stdio.h>
13780 struct foobar {
13781         char foo;
13782         NV bar;
13783 } try_algn;
13784 int main()
13785 {
13786     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13787     return(0);
13788 }
13789 EOCP
13790                 set try
13791                 if eval $compile_ok; then
13792                         dflt=`$run ./try`
13793                 else
13794                         dflt='8'
13795                         echo "(I can't seem to compile the test program...)"
13796                 fi
13797                 ;;
13798         *) dflt="$alignbytes"
13799                 ;;
13800         esac
13801         rp="Doubles must be aligned on a how-many-byte boundary?"
13802         . ./myread
13803         alignbytes="$ans"
13804         $rm -f try.c try
13805         ;;
13806 esac
13807
13808
13809 : set the base revision
13810 baserev=5.0
13811
13812 : how do we catenate cpp tokens here?
13813 echo " "
13814 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13815 $cat >cpp_stuff.c <<'EOCP'
13816 #define RCAT(a,b)a/**/b
13817 #define ACAT(a,b)a ## b
13818 RCAT(Rei,ser)
13819 ACAT(Cir,cus)
13820 EOCP
13821 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13822 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13823         echo "Oh!  Smells like ANSI's been here." >&4
13824         echo "We can catify or stringify, separately or together!"
13825         cpp_stuff=42
13826 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13827         echo "Ah, yes!  The good old days!" >&4
13828         echo "However, in the good old days we don't know how to stringify and"
13829         echo "catify at the same time."
13830         cpp_stuff=1
13831 else
13832         $cat >&4 <<EOM
13833 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13834 to have to edit the values of CAT[2-5] in config.h...
13835 EOM
13836         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13837 fi
13838 $rm -f cpp_stuff.*
13839
13840 : see if this is a db.h system
13841 set db.h i_db
13842 eval $inhdr
13843
13844 case "$i_db" in
13845 $define)
13846         : Check db version.
13847         echo " "
13848         echo "Checking Berkeley DB version ..." >&4
13849         $cat >try.c <<EOCP
13850 #$d_const HASCONST
13851 #ifndef HASCONST
13852 #define const
13853 #endif
13854 #include <sys/types.h>
13855 #include <stdio.h>
13856 #include <db.h>
13857 int main(int argc, char *argv[])
13858 {
13859 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13860     int Major, Minor, Patch ;
13861     unsigned long Version ;
13862     (void)db_version(&Major, &Minor, &Patch) ;
13863     if (argc == 2) {
13864         printf("%d %d %d %d %d %d\n",
13865                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13866                Major, Minor, Patch);
13867         exit(0);
13868     }
13869     printf("You have Berkeley DB Version 2 or greater.\n");
13870
13871     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13872                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13873     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13874                 Major, Minor, Patch) ;
13875
13876     /* check that db.h & libdb are compatible */
13877     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13878         printf("db.h and libdb are incompatible.\n") ;
13879         exit(3);        
13880     }
13881
13882     printf("db.h and libdb are compatible.\n") ;
13883
13884     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13885                 + DB_VERSION_PATCH ;
13886
13887     /* needs to be >= 2.3.4 */
13888     if (Version < 2003004) {
13889     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13890         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13891         exit(2);        
13892     }
13893
13894     exit(0);
13895 #else
13896 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13897     if (argc == 2) {
13898         printf("1 0 0\n");
13899         exit(0);
13900     }
13901     printf("You have Berkeley DB Version 1.\n");
13902     exit(0);    /* DB version < 2: the coast is clear. */
13903 #else
13904     exit(1);    /* <db.h> not Berkeley DB? */
13905 #endif
13906 #endif
13907 }
13908 EOCP
13909         set try
13910         if eval $compile_ok && $run ./try; then
13911                 echo 'Looks OK.' >&4
13912                 set `$run ./try 1`
13913                 db_version_major=$1
13914                 db_version_minor=$2
13915                 db_version_patch=$3
13916         else
13917                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13918                 i_db=$undef
13919                 case " $libs " in
13920                 *"-ldb "*)
13921                         : Remove db from list of libraries to use
13922                         echo "Removing unusable -ldb from library list" >&4
13923                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13924                         shift
13925                         libs="$*"
13926                         echo "libs = $libs" >&4
13927                         ;;
13928                 esac
13929         fi
13930         $rm -f try.*
13931         ;;
13932 esac
13933
13934 case "$i_db" in
13935 define)
13936         : Check the return type needed for hash 
13937         echo " "
13938         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13939         $cat >try.c <<EOCP
13940 #$d_const HASCONST
13941 #ifndef HASCONST
13942 #define const
13943 #endif
13944 #include <sys/types.h>
13945 #include <db.h>
13946
13947 #ifndef DB_VERSION_MAJOR
13948 u_int32_t hash_cb (ptr, size)
13949 const void *ptr;
13950 size_t size;
13951 {
13952 }
13953 HASHINFO info;
13954 int main()
13955 {
13956         info.hash = hash_cb;
13957 }
13958 #endif
13959 EOCP
13960         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13961                 if $contains warning try.out >>/dev/null 2>&1 ; then
13962                         db_hashtype='int'
13963                 else
13964                         db_hashtype='u_int32_t'
13965                 fi
13966         else
13967                 : XXX Maybe we should just give up here.
13968                 db_hashtype=u_int32_t
13969                 $cat try.out >&4
13970                 echo "Help:  I can't seem to compile the db test program." >&4
13971                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13972         fi
13973         $rm -f try.*
13974         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13975         ;;
13976 *)      db_hashtype=u_int32_t
13977         ;;
13978 esac
13979 case "$i_db" in
13980 define)
13981         : Check the return type needed for prefix 
13982         echo " "
13983         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13984         cat >try.c <<EOCP
13985 #$d_const HASCONST
13986 #ifndef HASCONST
13987 #define const
13988 #endif
13989 #include <sys/types.h>
13990 #include <db.h>
13991
13992 #ifndef DB_VERSION_MAJOR
13993 size_t prefix_cb (key1, key2)
13994 const DBT *key1;
13995 const DBT *key2;
13996 {
13997 }
13998 BTREEINFO info;
13999 int main()
14000 {
14001         info.prefix = prefix_cb;
14002 }
14003 #endif
14004 EOCP
14005         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
14006                 if $contains warning try.out >>/dev/null 2>&1 ; then
14007                         db_prefixtype='int'
14008                 else
14009                         db_prefixtype='size_t'
14010                 fi
14011         else
14012                 db_prefixtype='size_t'
14013                 : XXX Maybe we should just give up here.
14014                 $cat try.out >&4
14015                 echo "Help:  I can't seem to compile the db test program." >&4
14016                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
14017         fi
14018         $rm -f try.*
14019         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
14020         ;;
14021 *)      db_prefixtype='size_t'
14022         ;;
14023 esac
14024
14025
14026 : How can we generate normalized random numbers ?
14027 echo " "
14028 echo "Looking for a random number function..." >&4
14029 case "$randfunc" in
14030 '')
14031         if set drand48 val -f; eval $csym; $val; then
14032                 dflt="drand48"
14033                 echo "Good, found drand48()." >&4
14034         elif set random val -f; eval $csym; $val; then
14035                 dflt="random"
14036                 echo "OK, found random()." >&4
14037         else
14038                 dflt="rand"
14039                 echo "Yick, looks like I have to use rand()." >&4
14040         fi
14041         echo " "
14042         ;;
14043 *)
14044         dflt="$randfunc"
14045         ;;
14046 esac
14047 cont=true
14048
14049 case "$ccflags" in
14050 *-Dmy_rand=*|*-Dmy_srand=*)
14051         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14052         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14053         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14054         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14055         ;;
14056 esac
14057
14058 while $test "$cont"; do
14059         rp="Use which function to generate random numbers?"
14060         . ./myread
14061         if $test "$ans" = "$dflt"; then
14062                 : null
14063         else
14064                 randbits=''
14065         fi
14066         randfunc="$ans"
14067         if set $ans val -f; eval $csym; $val; then
14068                 cont=''
14069         else
14070                 dflt=y
14071                 rp="I cannot find function $ans. Use that name anyway?"
14072                 . ./myread
14073                 dflt=rand
14074                 case "$ans" in
14075                         [yY]*) cont='';;
14076                 esac
14077         fi
14078         case "$cont" in
14079         '')
14080                 case "$randfunc" in
14081                 drand48)
14082                         drand01="drand48()"
14083                         seedfunc="srand48"
14084                         randbits=48
14085                         randseedtype=long
14086                         ;;
14087                 rand|random)
14088                         case "$randbits" in
14089                         '')
14090 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14091                                 $cat >try.c <<EOCP
14092 #$i_unistd I_UNISTD
14093 #$i_stdlib I_STDLIB
14094 #include <stdio.h>
14095 #ifdef I_UNISTD
14096 #  include <unistd.h>
14097 #endif
14098 #ifdef I_STDLIB
14099 #  include <stdlib.h>
14100 #endif
14101 int main()
14102 {
14103         register int i;
14104         register unsigned long tmp;
14105         register unsigned long max = 0L;
14106
14107         for (i = 1000; i; i--) {
14108                 tmp = (unsigned long) $randfunc();
14109                 if (tmp > max) max = tmp;
14110         }
14111         for (i = 0; max; i++)
14112                 max /= 2;
14113         printf("%d\n",i);
14114 }
14115 EOCP
14116                                 set try
14117                                 if eval $compile_ok; then
14118                                         dflt=`try`
14119                                 else
14120                                         dflt='?'
14121                                         echo "(I can't seem to compile the test program...)"
14122                                 fi
14123                                 ;;
14124                         *)
14125                                 dflt="$randbits"
14126                                 ;;
14127                         esac
14128                         rp="How many bits does your $randfunc() function produce?"
14129                         . ./myread
14130                         randbits="$ans"
14131                         $rm -f try.c try
14132                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14133                         seedfunc="s$randfunc"
14134                         randseedtype=unsigned
14135                         ;;
14136                 *)
14137                         dflt="31"
14138                         rp="How many bits does your $randfunc() function produce?"
14139                         . ./myread
14140                         randbits="$ans"
14141                         seedfunc="s$randfunc"
14142                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14143                         if set $seedfunc val -f; eval $csym; $val; then
14144                                 echo "(Using $seedfunc() to seed random generator)"
14145                         else
14146                                 echo "(Warning: no $seedfunc() to seed random generator)"
14147                                 seedfunc=rand
14148                         fi
14149                         randseedtype=unsigned
14150                         ;;
14151                 esac
14152                 ;;
14153         esac
14154 done
14155
14156 echo " "
14157 echo "Determining whether or not we are on an EBCDIC system..." >&4
14158 $cat >try.c <<'EOM'
14159 int main()
14160 {
14161   if ('M'==0xd4) return 0;
14162   return 1;
14163 }
14164 EOM
14165
14166 val=$undef
14167 set try
14168 if eval $compile_ok; then
14169         if $run ./try; then
14170                 echo "You seem to speak EBCDIC." >&4
14171                 val="$define"
14172         else
14173                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14174         fi
14175 else
14176         echo "I'm unable to compile the test program." >&4
14177         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14178 fi
14179 $rm -f try try.*
14180 set ebcdic
14181 eval $setvar
14182
14183 echo " "
14184 $cat >&4 <<EOM
14185 Checking how to flush all pending stdio output...
14186 EOM
14187 # I only know how to find the first 32 possibly open files on SunOS.
14188 # See also hints/sunos_4_1.sh and util.c  --AD
14189 case "$osname" in
14190 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14191 esac
14192 $cat >>try.c <<EOCP
14193 #include <stdio.h>
14194 #$i_unistd I_UNISTD
14195 #ifdef I_UNISTD
14196 # include <unistd.h>
14197 #endif
14198 #$d_sysconf HAS_SYSCONF
14199 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14200 #ifdef HAS_STDIO_STREAM_ARRAY
14201 # define STDIO_STREAM_ARRAY $stdio_stream_array
14202 #endif
14203 int main() {
14204   FILE* p;
14205   unlink("try.out");
14206   p = fopen("try.out", "w");
14207 #ifdef TRY_FPUTC
14208   fputc('x', p);
14209 #else
14210 # ifdef TRY_FPRINTF
14211   fprintf(p, "x");
14212 # endif
14213 #endif
14214 #ifdef TRY_FFLUSH_NULL
14215   fflush(NULL);
14216 #endif
14217 #ifdef TRY_FFLUSH_ALL
14218   {
14219     long open_max = -1;
14220 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14221     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14222 # else
14223 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14224     open_max = sysconf(_SC_OPEN_MAX);
14225 #  else
14226 #   ifdef FOPEN_MAX
14227     open_max = FOPEN_MAX;
14228 #   else
14229 #    ifdef OPEN_MAX
14230     open_max = OPEN_MAX;
14231 #    else
14232 #     ifdef _NFILE
14233     open_max = _NFILE;
14234 #     endif
14235 #    endif
14236 #   endif
14237 #  endif
14238 # endif 
14239 # ifdef HAS_STDIO_STREAM_ARRAY
14240     if (open_max > 0) {
14241       long i;
14242       for (i = 0; i < open_max; i++)
14243             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14244                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14245                 STDIO_STREAM_ARRAY[i]._flag)
14246                 fflush(&STDIO_STREAM_ARRAY[i]);
14247     }   
14248   }
14249 # endif
14250 #endif
14251   _exit(42);
14252 }
14253 EOCP
14254 : first we have to find out how _not_ to flush
14255 $to try.c
14256 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14257     output=''
14258     set try -DTRY_FPUTC
14259     if eval $compile; then
14260             $run ./try 2>/dev/null
14261             code="$?"
14262             $from try.out
14263             if $test ! -s try.out -a "X$code" = X42; then
14264                 output=-DTRY_FPUTC
14265             fi
14266     fi
14267     case "$output" in
14268     '')
14269             set try -DTRY_FPRINTF
14270             if eval $compile; then
14271                     $run ./try 2>/dev/null
14272                     code="$?"
14273                     $from try.out
14274                     if $test ! -s try.out -a "X$code" = X42; then
14275                         output=-DTRY_FPRINTF
14276                     fi
14277             fi
14278         ;;
14279     esac
14280 fi
14281 : check for fflush NULL behaviour
14282 case "$fflushNULL" in
14283 '')     set try -DTRY_FFLUSH_NULL $output
14284         if eval $compile; then
14285                 $run ./try 2>/dev/null
14286                 code="$?"
14287                 $from try.out
14288                 if $test -s try.out -a "X$code" = X42; then
14289                         fflushNULL="`$cat try.out`"
14290                 else
14291                         if $test "X$code" != X42; then
14292                                 $cat >&4 <<EOM
14293 (If this test failed, don't worry, we'll try another method shortly.)
14294 EOM
14295                         fi
14296                 fi
14297         fi
14298         $rm -f core try.core core.try.*
14299         case "$fflushNULL" in
14300         x)      $cat >&4 <<EOM
14301 Your fflush(NULL) works okay for output streams.
14302 Let's see if it clobbers input pipes...
14303 EOM
14304 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14305 # bug that improperly flushes the input end of pipes.  So we avoid the
14306 # autoflush on fork/system/exec support for now. :-(
14307 $cat >tryp.c <<EOCP
14308 #include <stdio.h>
14309 int
14310 main(int argc, char **argv)
14311 {
14312     char buf[1024];
14313     int i;
14314     char *bp = buf;
14315     while (1) {
14316         while ((i = getc(stdin)) != -1
14317                && (*bp++ = i) != '\n'
14318                && bp < &buf[1024])
14319         /* DO NOTHING */ ;
14320         *bp = '\0';
14321         fprintf(stdout, "%s", buf);
14322         fflush(NULL);
14323         if (i == -1)
14324             return 0;
14325         bp = buf;
14326     }
14327 }
14328 EOCP
14329                 fflushNULL="$define"
14330                 set tryp
14331                 if eval $compile; then
14332                     $rm -f tryp.out
14333                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14334                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14335                        $cat >&4 <<EOM
14336 fflush(NULL) seems to behave okay with input streams.
14337 EOM
14338                         fflushNULL="$define"
14339                     else
14340                         $cat >&4 <<EOM
14341 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14342 EOM
14343                         fflushNULL="$undef"
14344                     fi
14345                 fi
14346                 $rm -f core tryp.c tryp.core core.tryp.*
14347                 ;;
14348         '')     $cat >&4 <<EOM
14349 Your fflush(NULL) isn't working (contrary to ANSI C).
14350 EOM
14351                 fflushNULL="$undef"
14352                 ;;
14353         *)      $cat >&4 <<EOM
14354 Cannot figure out whether your fflush(NULL) works or not.
14355 I'm assuming it doesn't (contrary to ANSI C).
14356 EOM
14357                 fflushNULL="$undef"
14358                 ;;
14359         esac
14360         ;;
14361 $define|true|[yY]*)
14362         fflushNULL="$define"
14363         ;;
14364 *)
14365         fflushNULL="$undef"
14366         ;;
14367 esac
14368 : check explicit looping only if NULL did not work, and if the pipe
14369 : bug does not show up on an explicit flush too
14370 case "$fflushNULL" in
14371 "$undef")
14372         $cat >tryp.c <<EOCP
14373 #include <stdio.h>
14374 int
14375 main(int argc, char **argv)
14376 {
14377     char buf[1024];
14378     int i;
14379     char *bp = buf;
14380     while (1) {
14381         while ((i = getc(stdin)) != -1
14382                && (*bp++ = i) != '\n'
14383                && bp < &buf[1024])
14384         /* DO NOTHING */ ;
14385         *bp = '\0';
14386         fprintf(stdout, "%s", buf);
14387         fflush(stdin);
14388         if (i == -1)
14389             return 0;
14390         bp = buf;
14391     }
14392 }
14393 EOCP
14394         set tryp
14395         if eval $compile; then
14396             $rm -f tryp.out
14397             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14398             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14399                $cat >&4 <<EOM
14400 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14401 EOM
14402                 : now check for fflushall behaviour
14403                 case "$fflushall" in
14404                 '')     set try -DTRY_FFLUSH_ALL $output
14405                         if eval $compile; then
14406                                 $cat >&4 <<EOM
14407 (Now testing the other method--but note that this also may fail.)
14408 EOM
14409                                 $run ./try 2>/dev/null
14410                                 code=$?
14411                                 $from try.out
14412                                 if $test -s try.out -a "X$code" = X42; then
14413                                         fflushall="`$cat try.out`"
14414                                 fi
14415                         fi
14416                         $rm -f core try.core core.try.*
14417                         case "$fflushall" in
14418                         x)      $cat >&4 <<EOM
14419 Whew. Flushing explicitly all the stdio streams works.
14420 EOM
14421                                 fflushall="$define"
14422                                 ;;
14423                         '')     $cat >&4 <<EOM
14424 Sigh. Flushing explicitly all the stdio streams doesn't work.
14425 EOM
14426                                 fflushall="$undef"
14427                                 ;;
14428                         *)      $cat >&4 <<EOM
14429 Cannot figure out whether flushing stdio streams explicitly works or not.
14430 I'm assuming it doesn't.
14431 EOM
14432                                 fflushall="$undef"
14433                                 ;;
14434                         esac
14435                         ;;
14436                 "$define"|true|[yY]*)
14437                         fflushall="$define"
14438                         ;;
14439                 *)
14440                         fflushall="$undef"
14441                         ;;
14442                 esac
14443             else
14444                 $cat >&4 <<EOM
14445 All is futile.  Even fflush(stdin) clobbers input pipes!
14446 EOM
14447                 fflushall="$undef"
14448             fi
14449         else
14450             fflushall="$undef"
14451         fi
14452         $rm -f core tryp.c tryp.core core.tryp.*
14453         ;;
14454 *)      fflushall="$undef"
14455         ;;
14456 esac
14457
14458 case "$fflushNULL$fflushall" in
14459 undefundef)
14460         $cat <<EOM
14461 OK, I give up.  I cannot figure out how to flush pending stdio output.
14462 We won't be flushing handles at all before fork/exec/popen.
14463 EOM
14464         ;;
14465 esac
14466 $rm -f try.* try$exe_ext
14467
14468 : Store the full pathname to the ar program for use in the C program
14469 : Respect a hint or command line value for full_ar.
14470 case "$full_ar" in
14471 '') full_ar=$ar ;;
14472 esac
14473
14474 : Store the full pathname to the sed program for use in the C program
14475 full_sed=$sed
14476
14477 : see what type gids are declared as in the kernel
14478 echo " "
14479 echo "Looking for the type for group ids returned by getgid()."
14480 set gid_t gidtype xxx stdio.h sys/types.h
14481 eval $typedef
14482 case "$gidtype" in
14483 xxx)
14484         xxx=`./findhdr sys/user.h`
14485         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14486         case $1 in
14487         unsigned) dflt="$1 $2" ;;
14488         *) dflt="$1" ;;
14489         esac
14490         ;;
14491 *) dflt="$gidtype";;
14492 esac
14493 case "$gidtype" in
14494 gid_t) echo "gid_t found." ;;
14495 *)      rp="What is the type for group ids returned by getgid()?"
14496         . ./myread
14497         gidtype="$ans"
14498         ;;
14499 esac
14500
14501 echo " "
14502 case "$gidtype" in
14503 *_t) zzz="$gidtype"     ;;
14504 *)   zzz="gid"          ;;
14505 esac
14506 echo "Checking the size of $zzz..." >&4 
14507 cat > try.c <<EOCP
14508 #include <sys/types.h>
14509 #include <stdio.h>
14510 int main() {
14511     printf("%d\n", (int)sizeof($gidtype));
14512     exit(0);
14513 }
14514 EOCP
14515 set try
14516 if eval $compile_ok; then
14517         yyy=`$run ./try`
14518         case "$yyy" in
14519         '')     gidsize=4
14520                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14521                 ;;
14522         *)      gidsize=$yyy
14523                 echo "Your $zzz is $gidsize bytes long."
14524                 ;;
14525         esac
14526 else
14527         gidsize=4
14528         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14529 fi
14530
14531
14532 echo " "
14533 case "$gidtype" in
14534 *_t) zzz="$gidtype"     ;;
14535 *)   zzz="gid"          ;;
14536 esac
14537 echo "Checking the sign of $zzz..." >&4 
14538 cat > try.c <<EOCP
14539 #include <sys/types.h>
14540 #include <stdio.h>
14541 int main() {
14542         $gidtype foo = -1;
14543         if (foo < 0)
14544                 printf("-1\n");
14545         else
14546                 printf("1\n");
14547 }
14548 EOCP
14549 set try
14550 if eval $compile; then
14551         yyy=`$run ./try`
14552         case "$yyy" in
14553         '')     gidsign=1
14554                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14555                 ;;
14556         *)      gidsign=$yyy
14557                 case "$gidsign" in
14558                  1) echo "Your $zzz is unsigned." ;;
14559                 -1) echo "Your $zzz is signed."   ;;
14560                 esac
14561                 ;;
14562         esac
14563 else
14564         gidsign=1
14565         echo "(I can't compile the test program--guessing unsigned.)" >&4
14566 fi
14567
14568
14569 echo " "
14570
14571 if $test X"$quadtype" != X; then
14572
14573 echo "Checking how to print 64-bit integers..." >&4
14574
14575 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14576         $cat >try.c <<'EOCP'
14577 #include <sys/types.h>
14578 #include <stdio.h>
14579 int main() {
14580   int q = 12345678901;
14581   printf("%ld\n", q);
14582 }
14583 EOCP
14584         set try
14585         if eval $compile; then
14586                 yyy=`$run ./try`
14587                 case "$yyy" in
14588                 12345678901)
14589                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14590                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14591                         echo "We will use %d."
14592                         ;;
14593                 esac
14594         fi
14595 fi
14596
14597 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14598         $cat >try.c <<'EOCP'
14599 #include <sys/types.h>
14600 #include <stdio.h>
14601 int main() {
14602   long q = 12345678901;
14603   printf("%ld\n", q);
14604 }
14605 EOCP
14606         set try
14607         if eval $compile; then
14608                 yyy=`$run ./try`
14609                 case "$yyy" in
14610                 12345678901)
14611                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14612                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14613                         echo "We will use %ld."
14614                         ;;
14615                 esac
14616         fi
14617 fi
14618
14619 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14620         $cat >try.c <<'EOCP'
14621 #include <sys/types.h>
14622 #include <inttypes.h>
14623 #include <stdio.h>
14624 int main() {
14625   int64_t q = 12345678901;
14626   printf("%" PRId64 "\n", q);
14627 }
14628 EOCP
14629         set try
14630         if eval $compile; then
14631                 yyy=`$run ./try`
14632                 case "$yyy" in
14633                 12345678901)
14634                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14635                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14636                         echo "We will use the C9X style."
14637                         ;;
14638                 esac
14639         fi
14640 fi
14641
14642 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14643         $cat >try.c <<EOCP
14644 #include <sys/types.h>
14645 #include <stdio.h>
14646 int main() {
14647   $quadtype q = 12345678901;
14648   printf("%Ld\n", q);
14649 }
14650 EOCP
14651         set try
14652         if eval $compile; then
14653                 yyy=`$run ./try`
14654                 case "$yyy" in
14655                 12345678901)
14656                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14657                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14658                         echo "We will use %Ld."
14659                         ;;
14660                 esac
14661         fi
14662 fi
14663
14664 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14665         $cat >try.c <<'EOCP'
14666 #include <sys/types.h>
14667 #include <stdio.h>
14668 int main() {
14669   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14670   printf("%lld\n", q);
14671 }
14672 EOCP
14673         set try
14674         if eval $compile; then
14675                 yyy=`$run ./try`
14676                 case "$yyy" in
14677                 12345678901)
14678                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14679                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14680                         echo "We will use the %lld style."
14681                         ;;
14682                 esac
14683         fi
14684 fi
14685
14686 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14687         $cat >try.c <<EOCP
14688 #include <sys/types.h>
14689 #include <stdio.h>
14690 int main() {
14691   $quadtype q = 12345678901;
14692   printf("%qd\n", q);
14693 }
14694 EOCP
14695         set try
14696         if eval $compile; then
14697                 yyy=`$run ./try`
14698                 case "$yyy" in
14699                 12345678901)
14700                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14701                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14702                         echo "We will use %qd."
14703                         ;;
14704                 esac
14705         fi
14706 fi
14707
14708 if $test X"$sPRId64" = X; then
14709         echo "Cannot figure out how to print 64-bit integers." >&4
14710 fi
14711
14712 $rm -f try try.*
14713
14714 fi
14715
14716 case "$sPRId64" in
14717 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14718         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14719         ;;
14720 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14721         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14722         ;;
14723 esac
14724
14725
14726 echo " "
14727 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14728
14729 if $test X"$ivsize" = X8; then
14730         ivdformat="$sPRId64"
14731         uvuformat="$sPRIu64"
14732         uvoformat="$sPRIo64"
14733         uvxformat="$sPRIx64"
14734         uvXUformat="$sPRIXU64"
14735 else
14736         if $test X"$ivsize" = X"$longsize"; then
14737                 ivdformat='"ld"'
14738                 uvuformat='"lu"'
14739                 uvoformat='"lo"'
14740                 uvxformat='"lx"'
14741                 uvXUformat='"lX"'
14742         else
14743                 if $test X"$ivsize" = X"$intsize"; then
14744                         ivdformat='"d"'
14745                         uvuformat='"u"'
14746                         uvoformat='"o"'
14747                         uvxformat='"x"'
14748                         uvXUformat='"X"'
14749                 else
14750                         : far out
14751                         if $test X"$ivsize" = X"$shortsize"; then
14752                                 ivdformat='"hd"'
14753                                 uvuformat='"hu"'
14754                                 uvoformat='"ho"'
14755                                 uvxformat='"hx"'
14756                                 uvXUformat='"hX"'
14757                         fi
14758                 fi
14759         fi
14760 fi
14761
14762 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14763         nveformat="$sPRIeldbl"
14764         nvfformat="$sPRIfldbl"
14765         nvgformat="$sPRIgldbl"
14766         nvEUformat="$sPRIEUldbl"
14767         nvFUformat="$sPRIFUldbl"
14768         nvGUformat="$sPRIGUldbl"
14769 else
14770         nveformat='"e"'
14771         nvfformat='"f"'
14772         nvgformat='"g"'
14773         nvEUformat='"E"'
14774         nvFUformat='"F"'
14775         nvGUformat='"G"'
14776 fi
14777
14778 case "$ivdformat" in
14779 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14780     exit 1
14781     ;;
14782 esac
14783
14784
14785 echo " "
14786 $echo "Checking the format string to be used for gids..." >&4
14787
14788 case "$gidsign" in
14789 -1)     if $test X"$gidsize" = X"$ivsize"; then
14790                 gidformat="$ivdformat"
14791         else
14792                 if $test X"$gidsize" = X"$longsize"; then
14793                         gidformat='"ld"'
14794                 else
14795                         if $test X"$gidsize" = X"$intsize"; then
14796                                 gidformat='"d"'
14797                         else
14798                                 if $test X"$gidsize" = X"$shortsize"; then
14799                                         gidformat='"hd"'
14800                                 fi
14801                         fi
14802                 fi
14803         fi
14804         ;;
14805 *)      if $test X"$gidsize" = X"$uvsize"; then
14806                 gidformat="$uvuformat"
14807         else
14808                 if $test X"$gidsize" = X"$longsize"; then
14809                         gidformat='"lu"'
14810                 else
14811                         if $test X"$gidsize" = X"$intsize"; then
14812                                 gidformat='"u"'
14813                         else
14814                                 if $test X"$gidsize" = X"$shortsize"; then
14815                                         gidformat='"hu"'
14816                                 fi
14817                         fi
14818                 fi
14819         fi
14820         ;;
14821 esac
14822
14823 : see if getgroups exists
14824 set getgroups d_getgrps
14825 eval $inlibc
14826
14827 : see if setgroups exists
14828 set setgroups d_setgrps
14829 eval $inlibc
14830
14831
14832 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14833 echo " "
14834 case "$d_getgrps$d_setgrps" in
14835 *define*)
14836         case "$groupstype" in
14837         '') dflt="$gidtype" ;;
14838         *)  dflt="$groupstype" ;;
14839         esac
14840         $cat <<EOM
14841 What type of pointer is the second argument to getgroups() and setgroups()?
14842 Usually this is the same as group ids, $gidtype, but not always.
14843
14844 EOM
14845         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14846         . ./myread
14847         groupstype="$ans"
14848         ;;
14849 *)  groupstype="$gidtype";;
14850 esac
14851
14852 echo " "
14853 echo "Checking if your $make program sets \$(MAKE)..." >&4
14854 case "$make_set_make" in
14855 '')
14856         $sed 's/^X //' > testmake.mak << 'EOF'
14857 Xall:
14858 X       @echo 'maketemp="$(MAKE)"'
14859 EOF
14860         case "`$make -f testmake.mak 2>/dev/null`" in
14861         *maketemp=*) make_set_make='#' ;;
14862         *)      make_set_make="MAKE=$make" ;;
14863         esac
14864         $rm -f testmake.mak
14865         ;;
14866 esac
14867 case "$make_set_make" in
14868 '#') echo "Yup, it does.";;
14869 *) echo "Nope, it doesn't.";;
14870 esac
14871
14872 : see what type is used for mode_t
14873 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14874 set mode_t modetype int stdio.h sys/types.h
14875 eval $typedef_ask
14876
14877 : see if stdarg is available
14878 echo " "
14879 if $test `./findhdr stdarg.h`; then
14880         echo "<stdarg.h> found." >&4
14881         valstd="$define"
14882 else
14883         echo "<stdarg.h> NOT found." >&4
14884         valstd="$undef"
14885 fi
14886
14887 : see if varags is available
14888 echo " "
14889 if $test `./findhdr varargs.h`; then
14890         echo "<varargs.h> found." >&4
14891 else
14892         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14893 fi
14894
14895 : set up the varargs testing programs
14896 $cat > varargs.c <<EOP
14897 #ifdef I_STDARG
14898 #include <stdarg.h>
14899 #endif
14900 #ifdef I_VARARGS
14901 #include <varargs.h>
14902 #endif
14903
14904 #ifdef I_STDARG
14905 int f(char *p, ...)
14906 #else
14907 int f(va_alist)
14908 va_dcl
14909 #endif
14910 {
14911         va_list ap;
14912 #ifndef I_STDARG
14913         char *p;
14914 #endif
14915 #ifdef I_STDARG
14916         va_start(ap,p);
14917 #else
14918         va_start(ap);
14919         p = va_arg(ap, char *);
14920 #endif
14921         va_end(ap);
14922 }
14923 EOP
14924 $cat > varargs <<EOP
14925 $startsh
14926 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14927         echo "true"
14928 else
14929         echo "false"
14930 fi
14931 $rm -f varargs$_o
14932 EOP
14933 chmod +x varargs
14934
14935 : now check which varargs header should be included
14936 echo " "
14937 i_varhdr=''
14938 case "$valstd" in
14939 "$define")
14940         if `./varargs I_STDARG`; then
14941                 val='stdarg.h'
14942         elif `./varargs I_VARARGS`; then
14943                 val='varargs.h'
14944         fi
14945         ;;
14946 *)
14947         if `./varargs I_VARARGS`; then
14948                 val='varargs.h'
14949         fi
14950         ;;
14951 esac
14952 case "$val" in
14953 '')
14954 echo "I could not find the definition for va_dcl... You have problems..." >&4
14955         val="$undef"; set i_stdarg; eval $setvar
14956         val="$undef"; set i_varargs; eval $setvar
14957         ;;
14958 *) 
14959         set i_varhdr
14960         eval $setvar
14961         case "$i_varhdr" in
14962         stdarg.h)
14963                 val="$define"; set i_stdarg; eval $setvar
14964                 val="$undef"; set i_varargs; eval $setvar
14965                 ;;
14966         varargs.h)
14967                 val="$undef"; set i_stdarg; eval $setvar
14968                 val="$define"; set i_varargs; eval $setvar
14969                 ;;
14970         esac
14971         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14972 esac
14973 $rm -f varargs*
14974
14975 : see if we need va_copy
14976 echo " "
14977 case "$i_stdarg" in
14978 "$define")
14979         $cat >try.c <<EOCP
14980 #include <stdarg.h>
14981 #include <stdio.h>
14982 #$i_stdlib I_STDLIB
14983 #ifdef I_STDLIB
14984 #include <stdlib.h>
14985 #endif
14986 #include <signal.h>
14987
14988 int
14989 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14990 {
14991   return vfprintf(f, fmt, *valp);
14992 }
14993  
14994 int    
14995 myvfprintf(FILE *f, const  char *fmt, va_list val)
14996 {
14997   return ivfprintf(f, fmt, &val);
14998 }
14999       
15000 int
15001 myprintf(char *fmt, ...) 
15002 {
15003   va_list val;
15004   va_start(val, fmt);
15005   return myvfprintf(stdout, fmt, val); 
15006 }         
15007
15008 int
15009 main(int ac, char **av)
15010 {
15011   signal(SIGSEGV, exit);
15012
15013   myprintf("%s%cs all right, then\n", "that", '\'');                            
15014   exit(0);      
15015 }
15016 EOCP
15017         set try
15018         if eval $compile && $run ./try 2>&1 >/dev/null; then
15019                 case "`$run ./try`" in
15020                 "that's all right, then")
15021                         okay=yes
15022                         ;;
15023                 esac
15024         fi
15025         case "$okay" in
15026         yes)    echo "It seems that you don't need va_copy()." >&4
15027                 need_va_copy="$undef"
15028                 ;;
15029         *)      echo "It seems that va_copy() or similar will be needed." >&4
15030                 need_va_copy="$define"
15031                 ;;
15032         esac
15033         $rm -f try.* core core.* *.core *.core.*
15034         ;;
15035 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15036         ;;
15037 esac
15038
15039 : define a fucntion to check prototypes
15040 $cat > protochk <<EOSH
15041 $startsh
15042 cc="$cc"
15043 optimize="$optimize"
15044 ccflags="$ccflags"
15045 prototype="$prototype"
15046 define="$define"
15047 rm=$rm
15048 EOSH
15049
15050 $cat >> protochk <<'EOSH'
15051
15052 $rm -f try.c
15053 foo="$1"
15054 shift
15055 while test $# -ge 2; do
15056         case "$1" in
15057                 $define) echo "#include <$2>" >> try.c ;;
15058                 literal) echo "$2" >> try.c ;;
15059         esac
15060     shift 2
15061 done
15062 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15063 cat >> try.c <<'EOCP'
15064 #ifdef CAN_PROTOTYPE
15065 #define _(args) args
15066 #else
15067 #define _(args) ()
15068 #endif
15069 EOCP
15070 echo "$foo" >> try.c
15071 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15072 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15073 status=$?
15074 $rm -f try.[co]
15075 exit $status
15076 EOSH
15077 chmod +x protochk
15078 $eunicefix protochk
15079
15080 : see what type is used for size_t
15081 rp="What is the type used for the length parameter for string functions?"
15082 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15083 eval $typedef_ask
15084
15085 : check for type of arguments to gethostbyaddr. 
15086 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15087         case "$d_gethbyaddr" in
15088         $define)
15089                 $cat <<EOM
15090
15091 Checking to see what type of arguments are accepted by gethostbyaddr().
15092 EOM
15093                 hdrs="$define sys/types.h
15094                         $d_socket sys/socket.h 
15095                         $i_niin netinet/in.h 
15096                         $i_netdb netdb.h
15097                         $i_unistd unistd.h"
15098                 : The first arg can 'char *' or 'void *'
15099                 : The second arg is some of integral type
15100                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15101                         for yyy in size_t long int; do
15102                                 case "$netdb_host_type" in
15103                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15104                                         if ./protochk "$try" $hdrs; then
15105                                                 echo "Your system accepts $xxx for the first arg."
15106                                                 echo "...and $yyy for the second arg."
15107                                                 netdb_host_type="$xxx"
15108                                                 netdb_hlen_type="$yyy"
15109                                         fi
15110                                         ;;
15111                                 esac
15112                         done
15113                 done
15114                 : In case none of those worked, prompt the user.
15115                 case "$netdb_host_type" in
15116                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15117                         dflt='char *'
15118                         . ./myread
15119                         netdb_host_type=$ans
15120                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15121                         dflt="$sizetype"
15122                         . ./myread
15123                         netdb_hlen_type=$ans
15124                         ;;
15125                 esac
15126                 ;;
15127         *)      : no gethostbyaddr, so pick harmless defaults
15128                 netdb_host_type='char *'
15129                 netdb_hlen_type="$sizetype"
15130                 ;;
15131         esac
15132         # Remove the "const" if needed. -- but then we'll have a 
15133         # prototype clash!
15134         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15135 fi
15136
15137 : check for type of argument to gethostbyname. 
15138 if test "X$netdb_name_type" = X ; then
15139         case "$d_gethbyname" in
15140         $define)
15141                 $cat <<EOM
15142
15143 Checking to see what type of argument is accepted by gethostbyname().
15144 EOM
15145                 hdrs="$define sys/types.h
15146                         $d_socket sys/socket.h 
15147                         $i_niin netinet/in.h 
15148                         $i_netdb netdb.h
15149                         $i_unistd unistd.h"
15150                 for xxx in "const char *" "char *"; do
15151                         case "$netdb_name_type" in
15152                         '')     try="extern struct hostent *gethostbyname($xxx);"
15153                                 if ./protochk "$try" $hdrs; then
15154                                         echo "Your system accepts $xxx."
15155                                         netdb_name_type="$xxx"
15156                                 fi
15157                                 ;;
15158                         esac
15159                 done
15160                 : In case none of those worked, prompt the user.
15161                 case "$netdb_name_type" in
15162                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15163                         dflt='char *'
15164                         . ./myread
15165                         netdb_name_type=$ans
15166                         ;;
15167                 esac
15168                 ;;
15169         *)      : no gethostbyname, so pick harmless default
15170                 netdb_name_type='char *'
15171                 ;;
15172         esac
15173 fi
15174
15175 : check for type of 1st argument to getnetbyaddr. 
15176 if test "X$netdb_net_type" = X ; then
15177         case "$d_getnbyaddr" in
15178         $define)
15179                 $cat <<EOM
15180
15181 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15182 EOM
15183                 hdrs="$define sys/types.h
15184                         $d_socket sys/socket.h 
15185                         $i_niin netinet/in.h 
15186                         $i_netdb netdb.h
15187                         $i_unistd unistd.h"
15188                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15189                         case "$netdb_net_type" in
15190                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15191                                 if ./protochk "$try" $hdrs; then
15192                                         echo "Your system accepts $xxx."
15193                                         netdb_net_type="$xxx"
15194                                 fi
15195                                 ;;
15196                         esac
15197                 done
15198                 : In case none of those worked, prompt the user.
15199                 case "$netdb_net_type" in
15200                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15201                         dflt='long'
15202                         . ./myread
15203                         netdb_net_type=$ans
15204                         ;;
15205                 esac
15206                 ;;
15207         *)      : no getnetbyaddr, so pick harmless default
15208                 netdb_net_type='long'
15209                 ;;
15210         esac
15211 fi
15212 : locate the preferred pager for this system
15213 case "$pager" in
15214 '')
15215         dflt=''
15216         case "$pg" in
15217         /*) dflt=$pg;;
15218         [a-zA-Z]:/*) dflt=$pg;;
15219         esac
15220         case "$more" in
15221         /*) dflt=$more;;
15222         [a-zA-Z]:/*) dflt=$more;;
15223         esac
15224         case "$less" in
15225         /*) dflt=$less;;
15226         [a-zA-Z]:/*) dflt=$less;;
15227         esac
15228         case "$dflt" in
15229         '') dflt=/usr/ucb/more;;
15230         esac
15231         ;;
15232 *) dflt="$pager";;
15233 esac
15234 echo " "
15235 fn=f/
15236 rp='What pager is used on your system?'
15237 . ./getfile
15238 pager="$ans"
15239
15240 : see what type pids are declared as in the kernel
15241 rp="What is the type of process ids on this system?"
15242 set pid_t pidtype int stdio.h sys/types.h
15243 eval $typedef_ask
15244
15245 : Find earliest binary compatible site_perl subdirectory perl can use.
15246 case "$bincompat5005" in
15247 "$define") xs_apiversion='5.005' ;;
15248 *) xs_apiversion=$version ;;   # The current site_perl version.
15249 esac
15250 : Find earliest pure perl site_perl subdirectory perl can use.
15251 : The versioned directories started at 5.005.
15252 pm_apiversion='5.005'
15253
15254 : see if ar generates random libraries by itself
15255 echo " "
15256 echo "Checking how to generate random libraries on your machine..." >&4
15257 echo 'int bar1() { return bar2(); }' > bar1.c
15258 echo 'int bar2() { return 2; }' > bar2.c
15259 $cat > foo.c <<'EOP'
15260 int main() { printf("%d\n", bar1()); exit(0); }
15261 EOP
15262 $cc $ccflags -c bar1.c >/dev/null 2>&1
15263 $cc $ccflags -c bar2.c >/dev/null 2>&1
15264 $cc $ccflags -c foo.c >/dev/null 2>&1
15265 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15266 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15267         $run ./foobar >/dev/null 2>&1; then
15268         echo "$ar appears to generate random libraries itself."
15269         orderlib=false
15270         ranlib=":"
15271 elif $ar ts bar$_a >/dev/null 2>&1 &&
15272         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15273         $run ./foobar >/dev/null 2>&1; then
15274                 echo "a table of contents needs to be added with '$ar ts'."
15275                 orderlib=false
15276                 ranlib="$ar ts"
15277 else
15278         case "$ranlib" in
15279         :) ranlib='';;
15280         '')
15281                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15282                 $test -f $ranlib || ranlib=''
15283                 ;;
15284         esac
15285         if $test -n "$ranlib"; then
15286                 echo "your system has '$ranlib'; we'll use that."
15287                 orderlib=false
15288         else
15289                 echo "your system doesn't seem to support random libraries"
15290                 echo "so we'll use lorder and tsort to order the libraries."
15291                 orderlib=true
15292                 ranlib=":"
15293         fi
15294 fi
15295 $rm -f foo* bar* 
15296
15297 : check for type of arguments to select. 
15298 case "$selecttype" in
15299 '') case "$d_select" in
15300         $define)
15301                 echo " "
15302                 $cat <<EOM
15303 Checking to see what type of arguments are accepted by select().
15304 EOM
15305                 hdrs="$define sys/types.h
15306                         $i_systime sys/time.h 
15307                         $i_sysselct sys/select.h
15308                         $d_socket sys/socket.h"
15309                 : The first arg can be int, unsigned, or size_t
15310                 : The last arg may or may not be 'const'
15311                 val=''
15312                 : void pointer has been seen but using that
15313                 : breaks the selectminbits test
15314                 for xxx in 'fd_set *' 'int *'; do
15315                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15316                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15317                                         case "$val" in
15318                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15319                                                 if ./protochk "$try" $hdrs; then
15320                                                         echo "Your system accepts $xxx."
15321                                                         val="$xxx"
15322                                                 fi
15323                                                 ;;
15324                                         esac
15325                                 done
15326                         done
15327                 done
15328                 case "$val" in
15329                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15330                         case "$d_fd_set" in
15331                                 $define) dflt="fd_set *" ;;
15332                                 *)              dflt="int *" ;;
15333                         esac
15334                         . ./myread
15335                         val=$ans
15336                         ;;
15337                 esac
15338                 selecttype="$val"
15339                 ;;
15340         *)      : no select, so pick a harmless default
15341                 selecttype='int *'
15342                 ;;
15343         esac
15344         ;;
15345 esac
15346
15347 : check for the select 'width'
15348 case "$selectminbits" in
15349 '') case "$d_select" in
15350         $define)
15351                 $cat <<EOM
15352
15353 Checking to see on how many bits at a time your select() operates...
15354 EOM
15355                 $cat >try.c <<EOCP
15356 #include <sys/types.h>
15357 #$i_time I_TIME
15358 #$i_systime I_SYS_TIME
15359 #$i_systimek I_SYS_TIME_KERNEL
15360 #ifdef I_TIME
15361 #   include <time.h>
15362 #endif
15363 #ifdef I_SYS_TIME
15364 #   ifdef I_SYS_TIME_KERNEL
15365 #       define KERNEL
15366 #   endif
15367 #   include <sys/time.h>
15368 #   ifdef I_SYS_TIME_KERNEL
15369 #       undef KERNEL
15370 #   endif
15371 #endif
15372 #$i_sysselct I_SYS_SELECT
15373 #ifdef I_SYS_SELECT
15374 #include <sys/select.h>
15375 #endif
15376 #$d_socket HAS_SOCKET
15377 #ifdef HAS_SOCKET
15378 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15379 #endif
15380 #include <stdio.h>
15381 $selecttype b;
15382 #define S sizeof(*(b))
15383 #define MINBITS 64
15384 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15385 #define NBITS  (NBYTES * 8)
15386 int main() {
15387     char s[NBYTES];
15388     struct timeval t;
15389     int i;
15390     FILE* fp;
15391     int fd;
15392
15393     fclose(stdin);
15394     fp = fopen("try.c", "r");
15395     if (fp == 0)
15396       exit(1);
15397     fd = fileno(fp);
15398     if (fd < 0)
15399       exit(2);
15400     b = ($selecttype)s;
15401     for (i = 0; i < NBITS; i++)
15402         FD_SET(i, b);
15403     t.tv_sec  = 0;
15404     t.tv_usec = 0;
15405     select(fd + 1, b, 0, 0, &t);
15406     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15407     printf("%d\n", i + 1);
15408     return 0;
15409 }
15410 EOCP
15411                 set try
15412                 if eval $compile_ok; then
15413                         selectminbits=`$run ./try`
15414                         case "$selectminbits" in
15415                         '')     cat >&4 <<EOM
15416 Cannot figure out on how many bits at a time your select() operates.
15417 I'll play safe and guess it is 32 bits.
15418 EOM
15419                                 selectminbits=32
15420                                 bits="32 bits"
15421                                 ;;
15422                         1)      bits="1 bit" ;;
15423                         *)      bits="$selectminbits bits" ;;
15424                         esac
15425                         echo "Your select() operates on $bits at a time." >&4
15426                 else
15427                         rp='What is the minimum number of bits your select() operates on?'
15428                         case "$byteorder" in
15429                         1234|12345678)  dflt=32 ;;
15430                         *)              dflt=1  ;;
15431                         esac
15432                         . ./myread
15433                         val=$ans
15434                         selectminbits="$val"
15435                 fi
15436                 $rm -f try.* try
15437                 ;;
15438         *)      : no select, so pick a harmless default
15439                 selectminbits='32'
15440                 ;;
15441         esac
15442         ;;
15443 esac
15444
15445 : Trace out the files included by signal.h, then look for SIGxxx names.
15446 : Remove SIGARRAYSIZE used by HPUX.
15447 : Remove SIGSTKSIZE used by Linux.
15448 : Remove SIGSTKSZ used by Posix.
15449 : Remove SIGTYP void lines used by OS2.
15450 : Some cpps, like os390, dont give the file name anywhere
15451 if [ "X$fieldn" = X ]; then
15452         : Just make some guesses.  We check them later.
15453         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15454 else
15455         xxx=`echo '#include <signal.h>' |
15456         $cppstdin $cppminus $cppflags 2>/dev/null |
15457         $grep '^[       ]*#.*include' | 
15458         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15459 fi
15460 : Check this list of files to be sure we have parsed the cpp output ok.
15461 : This will also avoid potentially non-existent files, such 
15462 : as ../foo/bar.h
15463 xxxfiles=''
15464 for xx in $xxx /dev/null ; do
15465         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15466 done
15467 : If we have found no files, at least try signal.h
15468 case "$xxxfiles" in
15469 '')     xxxfiles=`./findhdr signal.h` ;;
15470 esac
15471 xxx=`awk '
15472 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15473         print substr($2, 4, 20)
15474 }
15475 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15476         print substr($3, 4, 20)
15477 }' $xxxfiles`
15478 : Append some common names just in case the awk scan failed.
15479 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15480 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15481 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15482 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15483 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15484
15485 : generate a few handy files for later
15486 $cat > signal.c <<'EOCP'
15487 #include <sys/types.h>
15488 #include <signal.h>
15489 #include <stdio.h>
15490 int main() {
15491
15492 /* Strange style to avoid deeply-nested #if/#else/#endif */
15493 #ifndef NSIG
15494 #  ifdef _NSIG
15495 #    define NSIG (_NSIG)
15496 #  endif
15497 #endif
15498
15499 #ifndef NSIG
15500 #  ifdef SIGMAX
15501 #    define NSIG (SIGMAX+1)
15502 #  endif
15503 #endif
15504
15505 #ifndef NSIG
15506 #  ifdef SIG_MAX
15507 #    define NSIG (SIG_MAX+1)
15508 #  endif
15509 #endif
15510
15511 #ifndef NSIG
15512 #  ifdef MAXSIG
15513 #    define NSIG (MAXSIG+1)
15514 #  endif
15515 #endif
15516
15517 #ifndef NSIG
15518 #  ifdef MAX_SIG
15519 #    define NSIG (MAX_SIG+1)
15520 #  endif
15521 #endif
15522
15523 #ifndef NSIG
15524 #  ifdef SIGARRAYSIZE
15525 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15526 #  endif
15527 #endif
15528
15529 #ifndef NSIG
15530 #  ifdef _sys_nsig
15531 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15532 #  endif
15533 #endif
15534
15535 /* Default to some arbitrary number that's big enough to get most
15536    of the common signals.
15537 */
15538 #ifndef NSIG
15539 #    define NSIG 50
15540 #endif
15541
15542 printf("NSIG %d\n", NSIG);
15543
15544 #ifndef JUST_NSIG
15545
15546 EOCP
15547
15548 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15549 {
15550         printf "#ifdef SIG"; printf $1; printf "\n"
15551         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15552         printf $1; printf ");\n"
15553         printf "#endif\n"
15554 }
15555 END {
15556         printf "#endif /* JUST_NSIG */\n";
15557         printf "exit(0);\n}\n";
15558 }
15559 ' >>signal.c
15560 $cat >signal.awk <<'EOP'
15561 BEGIN { ndups = 0 }
15562 $1 ~ /^NSIG$/ { nsig = $2 }
15563 ($1 !~ /^NSIG$/) && (NF == 2) {
15564     if ($2 > maxsig) { maxsig = $2 }
15565     if (sig_name[$2]) {
15566         dup_name[ndups] = $1
15567         dup_num[ndups] = $2
15568         ndups++ 
15569     }
15570     else {
15571         sig_name[$2] = $1
15572         sig_num[$2] = $2
15573     }
15574 }
15575 END { 
15576     if (nsig == 0) {
15577         nsig = maxsig + 1
15578     }
15579     printf("NSIG %d\n", nsig);
15580     for (n = 1; n < nsig; n++) {
15581         if (sig_name[n]) {
15582             printf("%s %d\n", sig_name[n], sig_num[n])
15583         }
15584         else {
15585             printf("NUM%d %d\n", n, n) 
15586         }
15587     }
15588     for (n = 0; n < ndups; n++) {
15589         printf("%s %d\n", dup_name[n], dup_num[n])
15590     }
15591 }
15592 EOP
15593 $cat >signal_cmd <<EOS
15594 $startsh
15595 if $test -s signal.lst; then
15596     echo "Using your existing signal.lst file"
15597         exit 0
15598 fi
15599 xxx="$xxx"
15600 EOS
15601 $cat >>signal_cmd <<'EOS'
15602
15603 set signal
15604 if eval $compile_ok; then
15605         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15606 else
15607         echo "(I can't seem be able to compile the whole test program)" >&4
15608         echo "(I'll try it in little pieces.)" >&4
15609         set signal -DJUST_NSIG
15610         if eval $compile_ok; then
15611                 $run ./signal$_exe > signal.nsg
15612                 $cat signal.nsg
15613         else
15614                 echo "I can't seem to figure out how many signals you have." >&4
15615                 echo "Guessing 50." >&4
15616                 echo 'NSIG 50' > signal.nsg
15617         fi
15618         : Now look at all the signal names, one at a time.
15619         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15620                 $cat > signal.c <<EOCP
15621 #include <sys/types.h>
15622 #include <signal.h>
15623 #include <stdio.h>
15624 int main() {
15625 printf("$xx %d\n", SIG${xx});
15626 return 0;
15627 }
15628 EOCP
15629                 set signal
15630                 if eval $compile; then
15631                         echo "SIG${xx} found."
15632                         $run ./signal$_exe  >> signal.ls1
15633                 else
15634                         echo "SIG${xx} NOT found."
15635                 fi
15636         done
15637         if $test -s signal.ls1; then
15638                 $cat signal.nsg signal.ls1 |
15639                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15640         fi
15641
15642 fi
15643 if $test -s signal.lst; then
15644         :
15645 else
15646         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15647         echo 'kill -l' >signal
15648         set X `csh -f <signal`
15649         $rm -f signal
15650         shift
15651         case $# in
15652         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15653         esac
15654         echo $@ | $tr ' ' $trnl | \
15655             $awk '{ printf "%s %d\n", $1, ++s; }
15656                   END { printf "NSIG %d\n", ++s }' >signal.lst
15657 fi
15658 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15659 EOS
15660 chmod a+x signal_cmd
15661 $eunicefix signal_cmd
15662
15663 : generate list of signal names
15664 echo " "
15665 case "$sig_name_init" in
15666 '') doinit=yes ;;
15667 *)  case "$sig_num_init" in
15668     ''|*,*) doinit=yes ;;
15669     esac ;;
15670 esac
15671 case "$doinit" in
15672 yes)
15673         echo "Generating a list of signal names and numbers..." >&4
15674         . ./signal_cmd
15675         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15676         sig_name=`$awk 'BEGIN { printf "ZERO " }
15677                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15678         sig_num=`$awk  'BEGIN { printf "0 " }
15679                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15680         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15681                              !/^NSIG/   { printf "\"%s\", ", $1 }
15682                              END        { printf "0\n" }' signal.lst`
15683         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15684                              !/^NSIG/   { printf "%d, ", $2}
15685                              END        { printf "0\n"}' signal.lst`
15686         ;;
15687 esac
15688 echo "The following $sig_count signals are available:"
15689 echo " "
15690 echo $sig_name | $awk \
15691 'BEGIN { linelen = 0 }
15692 {
15693         for (i = 1; i <= NF; i++) {
15694                 name = "SIG" $i " "
15695                 linelen = linelen + length(name)
15696                 if (linelen > 70) {
15697                         printf "\n"
15698                         linelen = length(name)
15699                 }
15700                 printf "%s", name
15701         }
15702         printf "\n"
15703 }'
15704 sig_size=`echo $sig_name | awk '{print NF}'`
15705 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15706
15707 echo " "
15708 case "$sizetype" in
15709 *_t) zzz="$sizetype"    ;;
15710 *)   zzz="filesize"     ;;
15711 esac
15712 echo "Checking the size of $zzz..." >&4 
15713 cat > try.c <<EOCP
15714 #include <sys/types.h>
15715 #include <stdio.h>
15716 int main() {
15717     printf("%d\n", (int)sizeof($sizetype));
15718     exit(0);
15719 }
15720 EOCP
15721 set try
15722 if eval $compile_ok; then
15723         yyy=`$run ./try`
15724         case "$yyy" in
15725         '')     sizesize=4
15726                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15727                 ;;
15728         *)      sizesize=$yyy
15729                 echo "Your $zzz size is $sizesize bytes."
15730                 ;;
15731         esac
15732 else
15733         sizesize=4
15734         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15735 fi
15736
15737
15738 : check for socklen_t
15739 echo " "
15740 echo "Checking to see if you have socklen_t..." >&4
15741 $cat >try.c <<EOCP
15742 #include <sys/types.h>
15743 #$d_socket HAS_SOCKET
15744 #ifdef HAS_SOCKET
15745 #include <sys/socket.h>
15746 #endif
15747 int main() { socklen_t x = 16; }
15748 EOCP
15749 set try
15750 if eval $compile; then
15751         val="$define"
15752         echo "You have socklen_t."
15753 else
15754         val="$undef"
15755         echo "You do not have socklen_t."
15756         case "$sizetype" in
15757         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15758         esac
15759 fi
15760 $rm -f try try.*
15761 set d_socklen_t
15762 eval $setvar
15763
15764 : see if this is a socks.h system
15765 set socks.h i_socks
15766 eval $inhdr
15767
15768 : check for type of the size argument to socket calls
15769 case "$d_socket" in
15770 "$define")
15771         $cat <<EOM
15772
15773 Checking to see what type is the last argument of accept().
15774 EOM
15775         yyy=''
15776         case "$d_socklen_t" in
15777         "$define") yyy="$yyy socklen_t"
15778         esac
15779         yyy="$yyy $sizetype int long unsigned"
15780         for xxx in $yyy; do
15781                 case "$socksizetype" in
15782                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15783                         case "$usesocks" in
15784                         "$define")
15785                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15786                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15787                                         socksizetype="$xxx"
15788                                 fi
15789                                 ;;
15790                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15791                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15792                                         socksizetype="$xxx"
15793                                 fi
15794                                 ;;
15795                         esac
15796                         ;;
15797                 esac
15798         done
15799 : In case none of those worked, prompt the user.
15800         case "$socksizetype" in
15801         '')     rp='What is the type for socket address structure sizes?'
15802                 dflt='int'
15803                 . ./myread
15804                 socksizetype=$ans
15805                 ;;
15806         esac
15807         ;;
15808 *)      : no sockets, so pick relatively harmless default
15809         socksizetype='int'
15810         ;;
15811 esac
15812
15813 : see what type is used for signed size_t
15814 set ssize_t ssizetype int stdio.h sys/types.h
15815 eval $typedef
15816 dflt="$ssizetype"
15817 $cat > try.c <<EOM
15818 #include <stdio.h>
15819 #include <sys/types.h>
15820 #define Size_t $sizetype
15821 #define SSize_t $dflt
15822 int main()
15823 {
15824         if (sizeof(Size_t) == sizeof(SSize_t))
15825                 printf("$dflt\n");
15826         else if (sizeof(Size_t) == sizeof(int))
15827                 printf("int\n");
15828         else 
15829                 printf("long\n");
15830         exit(0);
15831 }
15832 EOM
15833 echo " "
15834 set try
15835 if eval $compile_ok && $run ./try > /dev/null; then
15836         ssizetype=`$run ./try`
15837         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15838 else
15839         $cat >&4 <<EOM
15840 Help! I can't compile and run the ssize_t test program: please enlighten me!
15841 (This is probably a misconfiguration in your system or libraries, and
15842 you really ought to fix it.  Still, I'll try anyway.)
15843
15844 I need a type that is the same size as $sizetype, but is guaranteed to
15845 be signed.  Common values are ssize_t, int and long.
15846
15847 EOM
15848         rp="What signed type is the same size as $sizetype?"
15849         . ./myread
15850         ssizetype="$ans"
15851 fi
15852 $rm -f try try.*
15853
15854 : see what type of char stdio uses.
15855 echo " "
15856 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15857 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15858         echo "Your stdio uses unsigned chars." >&4
15859         stdchar="unsigned char"
15860 else
15861         echo "Your stdio uses signed chars." >&4
15862         stdchar="char"
15863 fi
15864 $rm -f stdioh
15865
15866
15867
15868 : see if time exists
15869 echo " "
15870 if test "X$d_time" = X -o X"$timetype" = X; then
15871     if set time val -f d_time; eval $csym; $val; then
15872                 echo 'time() found.' >&4
15873                 val="$define"
15874                 rp="What is the type returned by time() on this system?"
15875                 set time_t timetype long stdio.h sys/types.h
15876                 eval $typedef_ask
15877     else
15878                 echo 'time() not found, hope that will do.' >&4
15879                 val="$undef"
15880                 timetype='int';
15881     fi
15882     set d_time
15883     eval $setvar
15884 fi
15885
15886 : see what type uids are declared as in the kernel
15887 echo " "
15888 echo "Looking for the type for user ids returned by getuid()."
15889 set uid_t uidtype xxx stdio.h sys/types.h
15890 eval $typedef
15891 case "$uidtype" in
15892 xxx)
15893         xxx=`./findhdr sys/user.h`
15894         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15895         case $1 in
15896         unsigned) dflt="$1 $2" ;;
15897         *) dflt="$1" ;;
15898         esac
15899         ;;
15900 *) dflt="$uidtype";;
15901 esac
15902 case "$uidtype" in
15903 uid_t)  echo "uid_t found." ;;
15904 *)      rp="What is the type for user ids returned by getuid()?"
15905         . ./myread
15906         uidtype="$ans"
15907         ;;
15908 esac
15909
15910 echo " "
15911 case "$uidtype" in
15912 *_t) zzz="$uidtype"     ;;
15913 *)   zzz="uid"          ;;
15914 esac
15915 echo "Checking the size of $zzz..." >&4 
15916 cat > try.c <<EOCP
15917 #include <sys/types.h>
15918 #include <stdio.h>
15919 int main() {
15920     printf("%d\n", (int)sizeof($uidtype));
15921     exit(0);
15922 }
15923 EOCP
15924 set try
15925 if eval $compile_ok; then
15926         yyy=`$run ./try`
15927         case "$yyy" in
15928         '')     uidsize=4
15929                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15930                 ;;
15931         *)      uidsize=$yyy
15932                 echo "Your $zzz is $uidsize bytes long."
15933                 ;;
15934         esac
15935 else
15936         uidsize=4
15937         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15938 fi
15939
15940 echo " "
15941 case "$uidtype" in
15942 *_t) zzz="$uidtype"     ;;
15943 *)   zzz="uid"          ;;
15944 esac
15945 echo "Checking the sign of $zzz..." >&4
15946 cat > try.c <<EOCP
15947 #include <sys/types.h>
15948 #include <stdio.h>
15949 int main() {
15950         $uidtype foo = -1;
15951         if (foo < 0)
15952                 printf("-1\n");
15953         else
15954                 printf("1\n");
15955 }
15956 EOCP
15957 set try
15958 if eval $compile; then
15959         yyy=`$run ./try`
15960         case "$yyy" in
15961         '')     uidsign=1
15962                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15963                 ;;
15964         *)      uidsign=$yyy
15965                 case "$uidsign" in
15966                  1) echo "Your $zzz is unsigned." ;;
15967                 -1) echo "Your $zzz is signed."   ;;
15968                 esac
15969                 ;;
15970         esac
15971 else
15972         uidsign=1
15973         echo "(I can't compile the test program--guessing unsigned.)" >&4
15974 fi
15975
15976
15977
15978 echo " "
15979 $echo "Checking the format string to be used for uids..." >&4
15980
15981 case "$uidsign" in
15982 -1)     if $test X"$uidsize" = X"$ivsize"; then
15983                 uidformat="$ivdformat"
15984         else
15985                 if $test X"$uidsize" = X"$longsize"; then
15986                         uidformat='"ld"'
15987                 else
15988                         if $test X"$uidsize" = X"$intsize"; then
15989                                 uidformat='"d"'
15990                         else
15991                                 if $test X"$uidsize" = X"$shortsize"; then
15992                                         uidformat='"hd"'
15993                                 fi
15994                         fi
15995                 fi
15996         fi
15997         ;;
15998 *)      if $test X"$uidsize" = X"$uvsize"; then
15999                 uidformat="$uvuformat"
16000         else
16001                 if $test X"$uidsize" = X"$longsize"; then
16002                         uidformat='"lu"'
16003                 else
16004                         if $test X"$uidsize" = X"$intsize"; then
16005                                 uidformat='"u"'
16006                         else
16007                                 if $test X"$uidsize" = X"$shortsize"; then
16008                                         uidformat='"hu"'
16009                                 fi
16010                         fi
16011                 fi
16012         fi
16013         ;;
16014 esac
16015
16016 : determine compiler compiler
16017 case "$yacc" in
16018 '')
16019         dflt=yacc;;
16020 *)
16021         dflt="$yacc";;
16022 esac
16023 echo " "
16024 comp='yacc'
16025 if $test -f "$byacc$_exe"; then
16026         dflt="$byacc"
16027         comp="byacc or $comp"
16028 fi
16029 if $test -f "$bison$_exe"; then
16030         comp="$comp or bison -y"
16031 fi
16032 rp="Which compiler compiler ($comp) shall I use?"
16033 . ./myread
16034 yacc="$ans"
16035 case "$yacc" in
16036 *bis*)
16037         case "$yacc" in
16038         *-y*) ;;
16039         *)
16040                 yacc="$yacc -y"
16041                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16042                 ;;
16043         esac
16044         ;;
16045 esac
16046
16047 : see if this is a fp.h system
16048 set fp.h i_fp
16049 eval $inhdr
16050
16051 : see if this is a fp_class.h system
16052 set fp_class.h i_fp_class
16053 eval $inhdr
16054
16055 : see if this is a ieeefp.h system
16056 case "$i_ieeefp" in
16057 '' ) set ieeefp.h i_ieeefp
16058      eval $inhdr
16059      ;;
16060 esac
16061
16062 : see if this is a libutil.h system
16063 set libutil.h i_libutil
16064 eval $inhdr
16065
16066 : see if locale.h is available
16067 set locale.h i_locale
16068 eval $inhdr
16069
16070 : see if mach cthreads are available
16071 if test "X$usethreads" = "X$define"; then
16072         set mach/cthreads.h i_machcthr
16073         eval $inhdr
16074 else
16075         i_machcthr="$undef"
16076 fi
16077
16078
16079
16080 : see if this is a math.h system
16081 set math.h i_math
16082 eval $inhdr
16083
16084 : see if this is a mntent.h system
16085 set mntent.h i_mntent
16086 eval $inhdr
16087
16088 : see if ndbm.h is available
16089 set ndbm.h t_ndbm
16090 eval $inhdr
16091
16092 case "$t_ndbm" in
16093 $undef)
16094     # Some Linux distributions such as RedHat 7.1 put the
16095     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16096     if $test -f /usr/include/gdbm/ndbm.h; then
16097         echo '<gdbm/ndbm.h> found.'
16098         ccflags="$ccflags -I/usr/include/gdbm"
16099         cppflags="$cppflags -I/usr/include/gdbm"
16100         t_ndbm=$define
16101     fi
16102     ;;
16103 esac
16104
16105 case "$t_ndbm" in
16106 $define)
16107         : see if dbm_open exists
16108         set dbm_open d_dbm_open
16109         eval $inlibc
16110         case "$d_dbm_open" in
16111         $undef)
16112                 t_ndbm="$undef"
16113                 echo "We won't be including <ndbm.h>"
16114                 ;;
16115         esac
16116         ;;
16117 esac
16118 val="$t_ndbm"
16119 set i_ndbm
16120 eval $setvar
16121
16122 : see if net/errno.h is available
16123 val=''
16124 set net/errno.h val
16125 eval $inhdr
16126
16127 : Unfortunately, it causes problems on some systems.  Arrgh.
16128 case "$val" in
16129 $define)
16130         cat > try.c <<'EOM'
16131 #include <stdio.h>
16132 #include <errno.h>
16133 #include <net/errno.h>
16134 int func()
16135 {
16136         return ENOTSOCK;
16137 }
16138 EOM
16139         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16140                 echo "We'll be including <net/errno.h>." >&4
16141         else
16142                 echo "We won't be including <net/errno.h>." >&4
16143                 val="$undef"
16144         fi
16145         $rm -f try.* try
16146         ;;
16147 esac
16148 set i_neterrno
16149 eval $setvar
16150
16151 : see if netinet/tcp.h is available
16152 set netinet/tcp.h i_netinettcp
16153 eval $inhdr
16154
16155 : see if this is a poll.h system
16156 set poll.h i_poll
16157 eval $inhdr
16158
16159 : see if this is a prot.h system
16160 set prot.h i_prot
16161 eval $inhdr
16162
16163 echo " "
16164 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16165 $cat <<'EOSH' > Cppsym.know
16166 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16167 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16168 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16169 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16170 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16171 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16172 bull c cadmus clipper CMU COFF COMPILER_VERSION
16173 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16174 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16175 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16176 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16177 GLIBC GLIBC_MINOR
16178 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16179 H3050R H3050RX hbullx20 hcx host_mips
16180 hp200 hp300 hp700 HP700 hp800 hp9000
16181 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16182 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16183 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16184 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16185 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16186 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16187 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16188 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16189 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16190 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16191 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16192 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16193 MATH_HAS_NO_SIDE_EFFECTS
16194 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16195 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16196 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16197 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16198 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16199 NetBSD news1500 news1700 news1800 news1900 news3700
16200 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16201 ns32016 ns32332 ns32k nsc32000
16202 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16203 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16204 pc532 pdp11 PGC PIC plexus PORTAR posix
16205 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16206 POSIX_C_SOURCE POSIX_SOURCE POWER
16207 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16208 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16209 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16210 sony sony_news sonyrisc sparc sparclite spectrum
16211 stardent stdc STDC_EXT stratos sun sun3 sun386
16212 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16213 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16214 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16215 sysV68 sysV88 Tek4132 Tek4300 titan
16216 TM3200 TM5400 TM5600
16217 tower tower32 tower32_200 tower32_600 tower32_700
16218 tower32_800 tower32_850 tss
16219 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16220 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16221 unix UNIX95 UNIX99 unixpc unos
16222 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16223 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16224 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16225 USGr4 USGr4_2
16226 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16227 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16228 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16229 z8000
16230 EOSH
16231 # Maybe put other stuff here too.
16232 cat <<EOSH >>Cppsym.know
16233 $osname
16234 EOSH
16235 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16236 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16237 $cat Cppsym.know > Cppsym.c
16238 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16239 $rm -f Cppsym.a Cppsym.b Cppsym.c
16240 cat <<EOSH > Cppsym
16241 $startsh
16242 if $test \$# -gt 0; then
16243     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16244     if $test -s Cppsym.got; then
16245         $rm -f Cppsym.got
16246         exit 0
16247     fi
16248     $rm -f Cppsym.got
16249     exit 1
16250 else
16251     $tr " " "$trnl" | ./Cppsym.try
16252     exit 0
16253 fi
16254 EOSH
16255 chmod +x Cppsym
16256 $eunicefix Cppsym
16257 cat <<EOSH > Cppsym.try
16258 $startsh
16259 cat <<'EOCP' > try.c
16260 #include <stdio.h>
16261 int main() {
16262 EOCP
16263 $awk \\
16264 EOSH
16265 cat <<'EOSH' >> Cppsym.try
16266 'length($1) > 0 {
16267     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
16268     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
16269     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
16270     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
16271 }'       >> try.c
16272 echo 'return 0;}' >> try.c
16273 EOSH
16274 cat <<EOSH >> Cppsym.try
16275 ccflags="$ccflags"
16276 case "$osname-$gccversion" in
16277 irix-) ccflags="\$ccflags -woff 1178" ;;
16278 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16279 esac
16280 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16281 EOSH
16282 chmod +x Cppsym.try
16283 $eunicefix Cppsym.try
16284 ./Cppsym < Cppsym.know > Cppsym.true
16285 : now check the C compiler for additional symbols
16286 postprocess_cc_v=''
16287 case "$osname" in
16288 aix) postprocess_cc_v="|$tr , ' '" ;;
16289 esac
16290 $cat >ccsym <<EOS
16291 $startsh
16292 $cat >tmp.c <<EOF
16293 extern int foo;
16294 EOF
16295 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16296 do
16297         case "\$i" in
16298         -D*) echo "\$i" | $sed 's/^-D//';;
16299         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16300         esac
16301 done
16302 $rm -f try.c
16303 EOS
16304 postprocess_cc_v=''
16305 chmod +x ccsym
16306 $eunicefix ccsym
16307 ./ccsym > ccsym1.raw
16308 if $test -s ccsym1.raw; then
16309        $sort ccsym1.raw | $uniq >ccsym.raw
16310 else
16311        mv ccsym1.raw ccsym.raw
16312 fi
16313
16314 $awk '/\=/ { print $0; next }
16315         { print $0"=1" }' ccsym.raw >ccsym.list
16316 $awk '/\=/ { print $0; next }
16317         { print $0"=1" }' Cppsym.true >ccsym.true
16318 $comm -13 ccsym.true ccsym.list >ccsym.own
16319 $comm -12 ccsym.true ccsym.list >ccsym.com
16320 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16321 also=''
16322 if $test -z ccsym.raw; then
16323         echo "Your C compiler doesn't seem to define any symbols!" >&4
16324         echo " "
16325         echo "However, your C preprocessor defines the following symbols:"
16326         $cat Cppsym.true
16327         ccsymbols=''
16328         cppsymbols=`$cat Cppsym.true`
16329         cppsymbols=`echo $cppsymbols`
16330         cppccsymbols="$cppsymbols"
16331 else
16332         if $test -s ccsym.com; then
16333                 echo "Your C compiler and pre-processor define these symbols:"
16334                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16335                 also='also '
16336                 symbols='ones'
16337                 cppccsymbols=`$cat ccsym.com`
16338                 cppccsymbols=`echo $cppccsymbols`
16339                 $test "$silent" || sleep 1
16340         fi
16341         if $test -s ccsym.cpp; then
16342                 $test "$also" && echo " "
16343                 echo "Your C pre-processor ${also}defines the following symbols:"
16344                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16345                 also='further '
16346                 cppsymbols=`$cat ccsym.cpp`
16347                 cppsymbols=`echo $cppsymbols`
16348                 $test "$silent" || sleep 1
16349         fi
16350         if $test -s ccsym.own; then
16351                 $test "$also" && echo " "
16352                 echo "Your C compiler ${also}defines the following cpp symbols:"
16353                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16354                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16355                 ccsymbols=`$cat ccsym.own`
16356                 ccsymbols=`echo $ccsymbols`
16357                 $test "$silent" || sleep 1
16358         fi
16359 fi
16360
16361 : see if this is a termio system
16362 val="$undef"
16363 val2="$undef"
16364 val3="$undef"
16365 if $test `./findhdr termios.h`; then
16366         set tcsetattr i_termios
16367         eval $inlibc
16368         val3="$i_termios"
16369 fi
16370 echo " "
16371 case "$val3" in
16372 "$define") echo "You have POSIX termios.h... good!" >&4;;
16373 *) if ./Cppsym pyr; then
16374                 case "`/bin/universe`" in
16375                 ucb) if $test `./findhdr sgtty.h`; then
16376                                 val2="$define"
16377                                 echo "<sgtty.h> found." >&4
16378                         else
16379                                 echo "System is pyramid with BSD universe."
16380                                 echo "<sgtty.h> not found--you could have problems." >&4
16381                         fi;;
16382                 *) if $test `./findhdr termio.h`; then
16383                                 val="$define"
16384                                 echo "<termio.h> found." >&4
16385                         else
16386                                 echo "System is pyramid with USG universe."
16387                                 echo "<termio.h> not found--you could have problems." >&4
16388                         fi;;
16389                 esac
16390         elif ./usg; then
16391                 if $test `./findhdr termio.h`; then
16392                         echo "<termio.h> found." >&4
16393                         val="$define"
16394                 elif $test `./findhdr sgtty.h`; then
16395                         echo "<sgtty.h> found." >&4
16396                         val2="$define"
16397                 else
16398 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16399                 fi
16400         else
16401                 if $test `./findhdr sgtty.h`; then
16402                         echo "<sgtty.h> found." >&4
16403                         val2="$define"
16404                 elif $test `./findhdr termio.h`; then
16405                         echo "<termio.h> found." >&4
16406                         val="$define"
16407                 else
16408 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16409                 fi
16410         fi;;
16411 esac
16412 set i_termio; eval $setvar
16413 val=$val2; set i_sgtty; eval $setvar
16414 val=$val3; set i_termios; eval $setvar
16415
16416 : see if this is a shadow.h system
16417 set shadow.h i_shadow
16418 eval $inhdr
16419
16420 : see if stddef is available
16421 set stddef.h i_stddef
16422 eval $inhdr
16423
16424 : see if this is a sunmath.h system
16425 set sunmath.h i_sunmath
16426 eval $inhdr
16427
16428 : see if sys/access.h is available
16429 set sys/access.h i_sysaccess
16430 eval $inhdr
16431
16432 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16433 set sys/filio.h i_sysfilio
16434 eval $inhdr
16435 echo " "
16436 if $test `./findhdr sys/ioctl.h`; then
16437         val="$define"
16438         echo '<sys/ioctl.h> found.' >&4
16439 else
16440         val="$undef"
16441         if $test $i_sysfilio = "$define"; then
16442             echo '<sys/ioctl.h> NOT found.' >&4
16443         else
16444                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16445                 $test $i_termio = "$define" && xxx="termio.h"
16446                 $test $i_termios = "$define" && xxx="termios.h"
16447 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16448         fi
16449 fi
16450 set i_sysioctl
16451 eval $setvar
16452
16453 : see if socket ioctl defs are in sys/sockio.h
16454 echo " "
16455 xxx=`./findhdr sys/sockio.h`
16456 if $test "$xxx"; then
16457         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16458                 val="$define"
16459                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16460         else
16461                 val="$undef"
16462                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16463         fi
16464 else
16465         val="$undef"
16466         $cat <<EOM
16467 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16468 EOM
16469 fi
16470 set i_syssockio
16471 eval $setvar
16472
16473
16474 : see if this is a syslog.h system
16475 set syslog.h i_syslog
16476 eval $inhdr
16477
16478
16479 : see if this is a sys/mode.h system
16480 set sys/mode.h i_sysmode
16481 eval $inhdr
16482
16483 : see if sys/resource.h has to be included
16484 set sys/resource.h i_sysresrc
16485 eval $inhdr
16486
16487 : see if sys/security.h is available
16488 set sys/security.h i_syssecrt
16489 eval $inhdr
16490
16491 : see if this is a sys/statvfs.h system
16492 set sys/statvfs.h i_sysstatvfs
16493 eval $inhdr
16494
16495 : see if this is a sys/un.h system
16496 set sys/un.h i_sysun
16497 eval $inhdr
16498
16499
16500 : see if this is a sys/utsname.h system
16501 set sys/utsname.h i_sysutsname
16502 eval $inhdr
16503
16504 : see if this is a syswait system
16505 set sys/wait.h i_syswait
16506 eval $inhdr
16507
16508 : see if this is a ustat.h system
16509 set ustat.h i_ustat
16510 eval $inhdr
16511
16512 : see if this is an utime system
16513 set utime.h i_utime
16514 eval $inhdr
16515
16516 : see if this is a values.h system
16517 set values.h i_values
16518 eval $inhdr
16519
16520 : see if this is a vfork system
16521 case "$d_vfork" in
16522 "$define")
16523         set vfork.h i_vfork
16524         eval $inhdr
16525         ;;
16526 *)
16527         i_vfork="$undef"
16528         ;;
16529 esac
16530
16531 : see if gdbm.h is available
16532 set gdbm.h t_gdbm
16533 eval $inhdr
16534 case "$t_gdbm" in
16535 $define)
16536         : see if gdbm_open exists
16537         set gdbm_open d_gdbm_open
16538         eval $inlibc
16539         case "$d_gdbm_open" in
16540         $undef)
16541                 t_gdbm="$undef"
16542                 echo "We won't be including <gdbm.h>"
16543                 ;;
16544         esac
16545         ;;
16546 esac
16547 val="$t_gdbm"
16548 set i_gdbm
16549 eval $setvar
16550
16551 echo " "
16552 echo "Looking for extensions..." >&4
16553 : If we are using the old config.sh, known_extensions may contain
16554 : old or inaccurate or duplicate values.
16555 known_extensions=''
16556 nonxs_extensions=''
16557 : We do not use find because it might not be available.
16558 : We do not just use MANIFEST because the user may have dropped
16559 : some additional extensions into the source tree and expect them
16560 : to be built.
16561
16562 : Function to recursively find available extensions, ignoring DynaLoader
16563 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16564 find_extensions='
16565     for xxx in *; do
16566        case "$xxx" in
16567            DynaLoader|dynaload) ;;
16568            *)
16569            if $test -f $xxx/$xxx.xs; then
16570                known_extensions="$known_extensions $1$xxx";
16571            elif $test -f $xxx/Makefile.PL; then
16572                nonxs_extensions="$nonxs_extensions $1$xxx";
16573            else
16574                if $test -d $xxx -a $# -lt 10; then
16575                    set $1$xxx/ $*;
16576                    cd "$xxx";
16577                    eval $find_extensions;
16578                    cd ..;
16579                    shift;
16580                fi;
16581            fi
16582            ;;
16583        esac;
16584     done'
16585 tdir=`pwd`
16586 cd "$rsrc/ext"
16587 set X
16588 shift
16589 eval $find_extensions
16590 # Special case:  Add in threads/shared since it is not picked up by the
16591 # recursive find above (and adding in general recursive finding breaks
16592 # SDBM_File/sdbm).  A.D.  10/25/2001.
16593 known_extensions="$known_extensions threads/shared"
16594 set X $nonxs_extensions
16595 shift
16596 nonxs_extensions="$*"
16597 set X $known_extensions
16598 shift
16599 known_extensions="$*"
16600 cd "$tdir"
16601
16602 : Now see which are supported on this system.
16603 avail_ext=''
16604 for xxx in $known_extensions ; do
16605         case "$xxx" in
16606         DB_File|db_file)
16607                 case "$i_db" in
16608                 $define) avail_ext="$avail_ext $xxx" ;;
16609                 esac
16610                 ;;
16611         GDBM_File|gdbm_fil)
16612                 case "$i_gdbm" in 
16613                 $define) avail_ext="$avail_ext $xxx" ;;
16614                 esac
16615                 ;;
16616         I18N/Langinfo|i18n_lan)
16617                 case "$i_langinfo$d_nl_langinfo" in 
16618                 $define$define) avail_ext="$avail_ext $xxx" ;;
16619                 esac
16620                 ;;
16621         NDBM_File|ndbm_fil)
16622                 case "$i_ndbm" in
16623                 $define)
16624                     case "$osname-$use64bitint" in
16625                     cygwin-*|hpux-define)
16626                         case "$libs" in
16627                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16628                         esac
16629                         ;;
16630                     *) avail_ext="$avail_ext $xxx" ;;
16631                     esac
16632                     ;;
16633                 esac
16634                 ;;
16635         ODBM_File|odbm_fil) 
16636                 case "${i_dbm}${i_rpcsvcdbm}" in
16637                 *"${define}"*)
16638                     case "$osname-$use64bitint" in
16639                     cygwin-*|hpux-define)
16640                         case "$libs" in
16641                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16642                         esac
16643                         ;;
16644                     *) avail_ext="$avail_ext $xxx" ;;
16645                     esac
16646                     ;;
16647                 esac
16648                 ;;
16649         POSIX|posix)
16650                 case "$useposix" in
16651                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16652                 esac
16653                 ;;
16654         Opcode|opcode)
16655                 case "$useopcode" in
16656                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16657                 esac
16658                 ;;
16659         Socket|socket)
16660                 case "$d_socket" in 
16661                 true|$define|y)
16662                     case "$osname" in
16663                     beos) ;; # not unless BONE
16664                     *) avail_ext="$avail_ext $xxx" ;;
16665                     esac
16666                     ;;
16667                 esac
16668                 ;;
16669         Sys/Syslog|sys/syslog)
16670                 : XXX syslog requires socket
16671                 case "$d_socket" in 
16672                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16673                 esac
16674                 ;;
16675         Thread|thread)
16676                 case "$usethreads" in
16677                 true|$define|y)
16678                         case "$useithreads" in
16679                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16680                         esac
16681                 esac
16682                 ;;
16683         threads|threads/shared)
16684                 case "$usethreads" in
16685                 true|$define|y)
16686                         case "$useithreads" in
16687                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16688                         esac
16689                 esac
16690                 ;;
16691         IPC/SysV|ipc/sysv)
16692                 : XXX Do we need a useipcsysv variable here
16693                 case "${d_msg}${d_sem}${d_shm}" in 
16694                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16695                 esac
16696                 ;;
16697         *)      avail_ext="$avail_ext $xxx"
16698                 ;;
16699         esac
16700 done
16701
16702 set X $avail_ext
16703 shift
16704 avail_ext="$*"
16705
16706 : Now see which nonxs extensions are supported on this system.
16707 : For now assume all are.
16708 nonxs_ext=''
16709 for xxx in $nonxs_extensions ; do
16710         case "$xxx" in
16711         *)      nonxs_ext="$nonxs_ext $xxx"
16712                 ;;
16713         esac
16714 done
16715
16716 set X $nonxs_ext
16717 shift
16718 nonxs_ext="$*"
16719
16720 case $usedl in
16721 $define)
16722         $cat <<EOM
16723 A number of extensions are supplied with $package.  You may choose to
16724 compile these extensions for dynamic loading (the default), compile
16725 them into the $package executable (static loading), or not include
16726 them at all.  Answer "none" to include no extensions.
16727 Note that DynaLoader is always built and need not be mentioned here.
16728
16729 EOM
16730         case "$dynamic_ext" in
16731         '') dflt="$avail_ext" ;;
16732         *)      dflt="$dynamic_ext"
16733                 # Perhaps we are reusing an old out-of-date config.sh.
16734                 case "$hint" in
16735                 previous)
16736                         if test X"$dynamic_ext" != X"$avail_ext"; then
16737                                 $cat <<EOM
16738 NOTICE:  Your previous config.sh list may be incorrect. 
16739 The extensions now available to you are 
16740         ${avail_ext}
16741 but the default list from your previous config.sh is
16742         ${dynamic_ext} 
16743
16744 EOM
16745                         fi
16746                         ;;
16747                 esac
16748                 ;;
16749         esac
16750         case "$dflt" in
16751         '')     dflt=none;;
16752         esac
16753         rp="What extensions do you wish to load dynamically?"
16754         . ./myread
16755         case "$ans" in
16756         none) dynamic_ext=' ' ;;
16757         *) dynamic_ext="$ans" ;;
16758         esac
16759
16760         case "$static_ext" in
16761         '')
16762                 : Exclude those already listed in dynamic linking
16763                 dflt=''
16764                 for xxx in $avail_ext; do
16765                         case " $dynamic_ext " in
16766                         *" $xxx "*) ;;
16767                         *) dflt="$dflt $xxx" ;;
16768                         esac
16769                 done
16770                 set X $dflt
16771                 shift
16772                 dflt="$*"
16773                 ;;
16774         *)  dflt="$static_ext" 
16775                 ;;
16776         esac
16777
16778         case "$dflt" in
16779         '')     dflt=none;;
16780         esac
16781         rp="What extensions do you wish to load statically?"
16782         . ./myread
16783         case "$ans" in
16784         none) static_ext=' ' ;;
16785         *) static_ext="$ans" ;;
16786         esac
16787         ;;
16788 *)
16789         $cat <<EOM
16790 A number of extensions are supplied with $package.  Answer "none" 
16791 to include no extensions. 
16792 Note that DynaLoader is always built and need not be mentioned here.
16793
16794 EOM
16795         case "$static_ext" in
16796         '') dflt="$avail_ext" ;;
16797         *)      dflt="$static_ext"
16798                 # Perhaps we are reusing an old out-of-date config.sh.
16799                 case "$hint" in
16800                 previous)
16801                         if test X"$static_ext" != X"$avail_ext"; then
16802                                 $cat <<EOM
16803 NOTICE:  Your previous config.sh list may be incorrect. 
16804 The extensions now available to you are 
16805         ${avail_ext}
16806 but the default list from your previous config.sh is
16807         ${static_ext} 
16808
16809 EOM
16810                         fi
16811                         ;;
16812                 esac
16813                 ;;
16814         esac
16815         : Exclude those that are not xs extensions
16816         case "$dflt" in
16817         '')     dflt=none;;
16818         esac
16819         rp="What extensions do you wish to include?"
16820         . ./myread
16821         case "$ans" in
16822         none) static_ext=' ' ;;
16823         *) static_ext="$ans" ;;
16824         esac
16825         ;;
16826 esac
16827
16828 set X $dynamic_ext $static_ext $nonxs_ext
16829 shift
16830 extensions="$*"
16831
16832 : Remove libraries needed only for extensions
16833 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16834 : The exception is SunOS 4.x, which needs them.
16835 case "${osname}X${osvers}" in
16836 sunos*X4*)
16837     perllibs="$libs"
16838     ;;
16839 *) case "$usedl" in
16840     $define|true|[yY]*)
16841             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16842             shift
16843             perllibs="$*"
16844             ;;
16845     *)  perllibs="$libs"
16846             ;;
16847     esac
16848     ;;
16849 esac
16850
16851 : Remove build directory name from cppstdin so it can be used from
16852 : either the present location or the final installed location.
16853 echo " "
16854 : Get out of the UU directory to get correct path name.
16855 cd ..
16856 case "$cppstdin" in
16857 `pwd`/cppstdin)
16858         echo "Stripping down cppstdin path name"
16859         cppstdin=cppstdin
16860         ;;
16861 esac
16862 cd UU
16863
16864 : end of configuration questions
16865 echo " "
16866 echo "End of configuration questions."
16867 echo " "
16868
16869 : back to where it started
16870 if test -d ../UU; then
16871         cd ..
16872 fi
16873
16874 : configuration may be patched via a 'config.arch' file
16875 if $test -f config.arch; then
16876         echo "I see a config.arch file, loading it."
16877         . ./config.arch
16878 fi
16879
16880 : configuration may be patched via a 'config.over' file
16881 if $test -f config.over; then
16882         echo " "
16883         dflt=y
16884         rp='I see a config.over file.  Do you wish to load it?'
16885         . UU/myread
16886         case "$ans" in
16887         n*) echo "OK, I'll ignore it.";;
16888         *)      . ./config.over
16889                 echo "Configuration override changes have been loaded."
16890                 ;;
16891         esac
16892 fi
16893
16894 : in case they want portability, strip down executable paths
16895 case "$d_portable" in
16896 "$define")
16897         echo " "
16898         echo "Stripping down executable paths..." >&4
16899         for file in $loclist $trylist; do
16900                 eval temp=\$$file
16901                 eval $file=`basename $temp`
16902         done
16903         ;;
16904 esac
16905
16906 : create config.sh file
16907 echo " "
16908 echo "Creating config.sh..." >&4
16909 $spitshell <<EOT >config.sh
16910 $startsh
16911 #
16912 # This file was produced by running the Configure script. It holds all the
16913 # definitions figured out by Configure. Should you modify one of these values,
16914 # do not forget to propagate your changes by running "Configure -der". You may
16915 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16916 #
16917
16918 # Package name      : $package
16919 # Source directory  : $src
16920 # Configuration time: $cf_time
16921 # Configured by     : $cf_by
16922 # Target system     : $myuname
16923
16924 Author='$Author'
16925 Date='$Date'
16926 Header='$Header'
16927 Id='$Id'
16928 Locker='$Locker'
16929 Log='$Log'
16930 Mcc='$Mcc'
16931 RCSfile='$RCSfile'
16932 Revision='$Revision'
16933 Source='$Source'
16934 State='$State'
16935 _a='$_a'
16936 _exe='$_exe'
16937 _o='$_o'
16938 afs='$afs'
16939 afsroot='$afsroot'
16940 alignbytes='$alignbytes'
16941 ansi2knr='$ansi2knr'
16942 aphostname='$aphostname'
16943 api_revision='$api_revision'
16944 api_subversion='$api_subversion'
16945 api_version='$api_version'
16946 api_versionstring='$api_versionstring'
16947 ar='$ar'
16948 archlib='$archlib'
16949 archlibexp='$archlibexp'
16950 archname64='$archname64'
16951 archname='$archname'
16952 archobjs='$archobjs'
16953 awk='$awk'
16954 baserev='$baserev'
16955 bash='$bash'
16956 bin='$bin'
16957 bincompat5005='$bincompat5005'
16958 binexp='$binexp'
16959 bison='$bison'
16960 byacc='$byacc'
16961 byteorder='$byteorder'
16962 c='$c'
16963 castflags='$castflags'
16964 cat='$cat'
16965 cc='$cc'
16966 cccdlflags='$cccdlflags'
16967 ccdlflags='$ccdlflags'
16968 ccflags='$ccflags'
16969 ccflags_uselargefiles='$ccflags_uselargefiles'
16970 ccname='$ccname'
16971 ccsymbols='$ccsymbols'
16972 ccversion='$ccversion'
16973 cf_by='$cf_by'
16974 cf_email='$cf_email'
16975 cf_time='$cf_time'
16976 charsize='$charsize'
16977 chgrp='$chgrp'
16978 chmod='$chmod'
16979 chown='$chown'
16980 clocktype='$clocktype'
16981 comm='$comm'
16982 compress='$compress'
16983 contains='$contains'
16984 cp='$cp'
16985 cpio='$cpio'
16986 cpp='$cpp'
16987 cpp_stuff='$cpp_stuff'
16988 cppccsymbols='$cppccsymbols'
16989 cppflags='$cppflags'
16990 cpplast='$cpplast'
16991 cppminus='$cppminus'
16992 cpprun='$cpprun'
16993 cppstdin='$cppstdin'
16994 cppsymbols='$cppsymbols'
16995 cryptlib='$cryptlib'
16996 csh='$csh'
16997 d_Gconvert='$d_Gconvert'
16998 d_PRIEUldbl='$d_PRIEUldbl'
16999 d_PRIFUldbl='$d_PRIFUldbl'
17000 d_PRIGUldbl='$d_PRIGUldbl'
17001 d_PRIXU64='$d_PRIXU64'
17002 d_PRId64='$d_PRId64'
17003 d_PRIeldbl='$d_PRIeldbl'
17004 d_PRIfldbl='$d_PRIfldbl'
17005 d_PRIgldbl='$d_PRIgldbl'
17006 d_PRIi64='$d_PRIi64'
17007 d_PRIo64='$d_PRIo64'
17008 d_PRIu64='$d_PRIu64'
17009 d_PRIx64='$d_PRIx64'
17010 d_SCNfldbl='$d_SCNfldbl'
17011 d__fwalk='$d__fwalk'
17012 d_access='$d_access'
17013 d_accessx='$d_accessx'
17014 d_alarm='$d_alarm'
17015 d_archlib='$d_archlib'
17016 d_atolf='$d_atolf'
17017 d_atoll='$d_atoll'
17018 d_attribut='$d_attribut'
17019 d_bcmp='$d_bcmp'
17020 d_bcopy='$d_bcopy'
17021 d_bincompat5005='$d_bincompat5005'
17022 d_bsd='$d_bsd'
17023 d_bsdgetpgrp='$d_bsdgetpgrp'
17024 d_bsdsetpgrp='$d_bsdsetpgrp'
17025 d_bzero='$d_bzero'
17026 d_casti32='$d_casti32'
17027 d_castneg='$d_castneg'
17028 d_charvspr='$d_charvspr'
17029 d_chown='$d_chown'
17030 d_chroot='$d_chroot'
17031 d_chsize='$d_chsize'
17032 d_class='$d_class'
17033 d_closedir='$d_closedir'
17034 d_cmsghdr_s='$d_cmsghdr_s'
17035 d_const='$d_const'
17036 d_crypt='$d_crypt'
17037 d_csh='$d_csh'
17038 d_cuserid='$d_cuserid'
17039 d_dbl_dig='$d_dbl_dig'
17040 d_dbminitproto='$d_dbminitproto'
17041 d_difftime='$d_difftime'
17042 d_dirfd='$d_dirfd'
17043 d_dirnamlen='$d_dirnamlen'
17044 d_dlerror='$d_dlerror'
17045 d_dlopen='$d_dlopen'
17046 d_dlsymun='$d_dlsymun'
17047 d_dosuid='$d_dosuid'
17048 d_drand48proto='$d_drand48proto'
17049 d_dup2='$d_dup2'
17050 d_eaccess='$d_eaccess'
17051 d_endgrent='$d_endgrent'
17052 d_endhent='$d_endhent'
17053 d_endnent='$d_endnent'
17054 d_endpent='$d_endpent'
17055 d_endpwent='$d_endpwent'
17056 d_endsent='$d_endsent'
17057 d_eofnblk='$d_eofnblk'
17058 d_eunice='$d_eunice'
17059 d_fchdir='$d_fchdir'
17060 d_fchmod='$d_fchmod'
17061 d_fchown='$d_fchown'
17062 d_fcntl='$d_fcntl'
17063 d_fcntl_can_lock='$d_fcntl_can_lock'
17064 d_fd_macros='$d_fd_macros'
17065 d_fd_set='$d_fd_set'
17066 d_fds_bits='$d_fds_bits'
17067 d_fgetpos='$d_fgetpos'
17068 d_finite='$d_finite'
17069 d_finitel='$d_finitel'
17070 d_flexfnam='$d_flexfnam'
17071 d_flock='$d_flock'
17072 d_flockproto='$d_flockproto'
17073 d_fork='$d_fork'
17074 d_fp_class='$d_fp_class'
17075 d_fpathconf='$d_fpathconf'
17076 d_fpclass='$d_fpclass'
17077 d_fpclassify='$d_fpclassify'
17078 d_fpclassl='$d_fpclassl'
17079 d_fpos64_t='$d_fpos64_t'
17080 d_frexpl='$d_frexpl'
17081 d_fs_data_s='$d_fs_data_s'
17082 d_fseeko='$d_fseeko'
17083 d_fsetpos='$d_fsetpos'
17084 d_fstatfs='$d_fstatfs'
17085 d_fstatvfs='$d_fstatvfs'
17086 d_fsync='$d_fsync'
17087 d_ftello='$d_ftello'
17088 d_ftime='$d_ftime'
17089 d_getcwd='$d_getcwd'
17090 d_getespwnam='$d_getespwnam'
17091 d_getfsstat='$d_getfsstat'
17092 d_getgrent='$d_getgrent'
17093 d_getgrps='$d_getgrps'
17094 d_gethbyaddr='$d_gethbyaddr'
17095 d_gethbyname='$d_gethbyname'
17096 d_gethent='$d_gethent'
17097 d_gethname='$d_gethname'
17098 d_gethostprotos='$d_gethostprotos'
17099 d_getitimer='$d_getitimer'
17100 d_getlogin='$d_getlogin'
17101 d_getmnt='$d_getmnt'
17102 d_getmntent='$d_getmntent'
17103 d_getnbyaddr='$d_getnbyaddr'
17104 d_getnbyname='$d_getnbyname'
17105 d_getnent='$d_getnent'
17106 d_getnetprotos='$d_getnetprotos'
17107 d_getpagsz='$d_getpagsz'
17108 d_getpbyname='$d_getpbyname'
17109 d_getpbynumber='$d_getpbynumber'
17110 d_getpent='$d_getpent'
17111 d_getpgid='$d_getpgid'
17112 d_getpgrp2='$d_getpgrp2'
17113 d_getpgrp='$d_getpgrp'
17114 d_getppid='$d_getppid'
17115 d_getprior='$d_getprior'
17116 d_getprotoprotos='$d_getprotoprotos'
17117 d_getprpwnam='$d_getprpwnam'
17118 d_getpwent='$d_getpwent'
17119 d_getsbyname='$d_getsbyname'
17120 d_getsbyport='$d_getsbyport'
17121 d_getsent='$d_getsent'
17122 d_getservprotos='$d_getservprotos'
17123 d_getspnam='$d_getspnam'
17124 d_gettimeod='$d_gettimeod'
17125 d_gnulibc='$d_gnulibc'
17126 d_grpasswd='$d_grpasswd'
17127 d_hasmntopt='$d_hasmntopt'
17128 d_htonl='$d_htonl'
17129 d_index='$d_index'
17130 d_inetaton='$d_inetaton'
17131 d_int64_t='$d_int64_t'
17132 d_isascii='$d_isascii'
17133 d_isfinite='$d_isfinite'
17134 d_isinf='$d_isinf'
17135 d_isnan='$d_isnan'
17136 d_isnanl='$d_isnanl'
17137 d_killpg='$d_killpg'
17138 d_lchown='$d_lchown'
17139 d_ldbl_dig='$d_ldbl_dig'
17140 d_link='$d_link'
17141 d_locconv='$d_locconv'
17142 d_lockf='$d_lockf'
17143 d_longdbl='$d_longdbl'
17144 d_longlong='$d_longlong'
17145 d_lseekproto='$d_lseekproto'
17146 d_lstat='$d_lstat'
17147 d_madvise='$d_madvise'
17148 d_mblen='$d_mblen'
17149 d_mbstowcs='$d_mbstowcs'
17150 d_mbtowc='$d_mbtowc'
17151 d_memchr='$d_memchr'
17152 d_memcmp='$d_memcmp'
17153 d_memcpy='$d_memcpy'
17154 d_memmove='$d_memmove'
17155 d_memset='$d_memset'
17156 d_mkdir='$d_mkdir'
17157 d_mkdtemp='$d_mkdtemp'
17158 d_mkfifo='$d_mkfifo'
17159 d_mkstemp='$d_mkstemp'
17160 d_mkstemps='$d_mkstemps'
17161 d_mktime='$d_mktime'
17162 d_mmap='$d_mmap'
17163 d_modfl='$d_modfl'
17164 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17165 d_mprotect='$d_mprotect'
17166 d_msg='$d_msg'
17167 d_msg_ctrunc='$d_msg_ctrunc'
17168 d_msg_dontroute='$d_msg_dontroute'
17169 d_msg_oob='$d_msg_oob'
17170 d_msg_peek='$d_msg_peek'
17171 d_msg_proxy='$d_msg_proxy'
17172 d_msgctl='$d_msgctl'
17173 d_msgget='$d_msgget'
17174 d_msghdr_s='$d_msghdr_s'
17175 d_msgrcv='$d_msgrcv'
17176 d_msgsnd='$d_msgsnd'
17177 d_msync='$d_msync'
17178 d_munmap='$d_munmap'
17179 d_mymalloc='$d_mymalloc'
17180 d_nice='$d_nice'
17181 d_nl_langinfo='$d_nl_langinfo'
17182 d_nv_preserves_uv='$d_nv_preserves_uv'
17183 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17184 d_off64_t='$d_off64_t'
17185 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17186 d_oldpthreads='$d_oldpthreads'
17187 d_oldsock='$d_oldsock'
17188 d_open3='$d_open3'
17189 d_pathconf='$d_pathconf'
17190 d_pause='$d_pause'
17191 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17192 d_phostname='$d_phostname'
17193 d_pipe='$d_pipe'
17194 d_poll='$d_poll'
17195 d_portable='$d_portable'
17196 d_procselfexe='$d_procselfexe'
17197 d_pthread_atfork='$d_pthread_atfork'
17198 d_pthread_yield='$d_pthread_yield'
17199 d_pwage='$d_pwage'
17200 d_pwchange='$d_pwchange'
17201 d_pwclass='$d_pwclass'
17202 d_pwcomment='$d_pwcomment'
17203 d_pwexpire='$d_pwexpire'
17204 d_pwgecos='$d_pwgecos'
17205 d_pwpasswd='$d_pwpasswd'
17206 d_pwquota='$d_pwquota'
17207 d_qgcvt='$d_qgcvt'
17208 d_quad='$d_quad'
17209 d_readdir='$d_readdir'
17210 d_readlink='$d_readlink'
17211 d_readv='$d_readv'
17212 d_recvmsg='$d_recvmsg'
17213 d_rename='$d_rename'
17214 d_rewinddir='$d_rewinddir'
17215 d_rmdir='$d_rmdir'
17216 d_safebcpy='$d_safebcpy'
17217 d_safemcpy='$d_safemcpy'
17218 d_sanemcmp='$d_sanemcmp'
17219 d_sbrkproto='$d_sbrkproto'
17220 d_sched_yield='$d_sched_yield'
17221 d_scm_rights='$d_scm_rights'
17222 d_seekdir='$d_seekdir'
17223 d_select='$d_select'
17224 d_sem='$d_sem'
17225 d_semctl='$d_semctl'
17226 d_semctl_semid_ds='$d_semctl_semid_ds'
17227 d_semctl_semun='$d_semctl_semun'
17228 d_semget='$d_semget'
17229 d_semop='$d_semop'
17230 d_sendmsg='$d_sendmsg'
17231 d_setegid='$d_setegid'
17232 d_seteuid='$d_seteuid'
17233 d_setgrent='$d_setgrent'
17234 d_setgrps='$d_setgrps'
17235 d_sethent='$d_sethent'
17236 d_setitimer='$d_setitimer'
17237 d_setlinebuf='$d_setlinebuf'
17238 d_setlocale='$d_setlocale'
17239 d_setnent='$d_setnent'
17240 d_setpent='$d_setpent'
17241 d_setpgid='$d_setpgid'
17242 d_setpgrp2='$d_setpgrp2'
17243 d_setpgrp='$d_setpgrp'
17244 d_setprior='$d_setprior'
17245 d_setproctitle='$d_setproctitle'
17246 d_setpwent='$d_setpwent'
17247 d_setregid='$d_setregid'
17248 d_setresgid='$d_setresgid'
17249 d_setresuid='$d_setresuid'
17250 d_setreuid='$d_setreuid'
17251 d_setrgid='$d_setrgid'
17252 d_setruid='$d_setruid'
17253 d_setsent='$d_setsent'
17254 d_setsid='$d_setsid'
17255 d_setvbuf='$d_setvbuf'
17256 d_sfio='$d_sfio'
17257 d_shm='$d_shm'
17258 d_shmat='$d_shmat'
17259 d_shmatprototype='$d_shmatprototype'
17260 d_shmctl='$d_shmctl'
17261 d_shmdt='$d_shmdt'
17262 d_shmget='$d_shmget'
17263 d_sigaction='$d_sigaction'
17264 d_sigprocmask='$d_sigprocmask'
17265 d_sigsetjmp='$d_sigsetjmp'
17266 d_sockatmark='$d_sockatmark'
17267 d_sockatmarkproto='$d_sockatmarkproto'
17268 d_socket='$d_socket'
17269 d_socklen_t='$d_socklen_t'
17270 d_sockpair='$d_sockpair'
17271 d_socks5_init='$d_socks5_init'
17272 d_sqrtl='$d_sqrtl'
17273 d_sresgproto='$d_sresgproto'
17274 d_sresuproto='$d_sresuproto'
17275 d_statblks='$d_statblks'
17276 d_statfs_f_flags='$d_statfs_f_flags'
17277 d_statfs_s='$d_statfs_s'
17278 d_statvfs='$d_statvfs'
17279 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17280 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17281 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17282 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17283 d_stdio_stream_array='$d_stdio_stream_array'
17284 d_stdiobase='$d_stdiobase'
17285 d_stdstdio='$d_stdstdio'
17286 d_strchr='$d_strchr'
17287 d_strcoll='$d_strcoll'
17288 d_strctcpy='$d_strctcpy'
17289 d_strerrm='$d_strerrm'
17290 d_strerror='$d_strerror'
17291 d_strftime='$d_strftime'
17292 d_strtod='$d_strtod'
17293 d_strtol='$d_strtol'
17294 d_strtold='$d_strtold'
17295 d_strtoll='$d_strtoll'
17296 d_strtoq='$d_strtoq'
17297 d_strtoul='$d_strtoul'
17298 d_strtoull='$d_strtoull'
17299 d_strtouq='$d_strtouq'
17300 d_strxfrm='$d_strxfrm'
17301 d_suidsafe='$d_suidsafe'
17302 d_symlink='$d_symlink'
17303 d_syscall='$d_syscall'
17304 d_syscallproto='$d_syscallproto'
17305 d_sysconf='$d_sysconf'
17306 d_sysernlst='$d_sysernlst'
17307 d_syserrlst='$d_syserrlst'
17308 d_system='$d_system'
17309 d_tcgetpgrp='$d_tcgetpgrp'
17310 d_tcsetpgrp='$d_tcsetpgrp'
17311 d_telldir='$d_telldir'
17312 d_telldirproto='$d_telldirproto'
17313 d_time='$d_time'
17314 d_times='$d_times'
17315 d_truncate='$d_truncate'
17316 d_tzname='$d_tzname'
17317 d_u32align='$d_u32align'
17318 d_ualarm='$d_ualarm'
17319 d_umask='$d_umask'
17320 d_uname='$d_uname'
17321 d_union_semun='$d_union_semun'
17322 d_unordered='$d_unordered'
17323 d_usleep='$d_usleep'
17324 d_usleepproto='$d_usleepproto'
17325 d_ustat='$d_ustat'
17326 d_vendorarch='$d_vendorarch'
17327 d_vendorbin='$d_vendorbin'
17328 d_vendorlib='$d_vendorlib'
17329 d_vfork='$d_vfork'
17330 d_void_closedir='$d_void_closedir'
17331 d_voidsig='$d_voidsig'
17332 d_voidtty='$d_voidtty'
17333 d_volatile='$d_volatile'
17334 d_vprintf='$d_vprintf'
17335 d_wait4='$d_wait4'
17336 d_waitpid='$d_waitpid'
17337 d_wcstombs='$d_wcstombs'
17338 d_wctomb='$d_wctomb'
17339 d_writev='$d_writev'
17340 d_xenix='$d_xenix'
17341 date='$date'
17342 db_hashtype='$db_hashtype'
17343 db_prefixtype='$db_prefixtype'
17344 db_version_major='$db_version_major'
17345 db_version_minor='$db_version_minor'
17346 db_version_patch='$db_version_patch'
17347 defvoidused='$defvoidused'
17348 direntrytype='$direntrytype'
17349 dlext='$dlext'
17350 dlsrc='$dlsrc'
17351 doublesize='$doublesize'
17352 drand01='$drand01'
17353 dynamic_ext='$dynamic_ext'
17354 eagain='$eagain'
17355 ebcdic='$ebcdic'
17356 echo='$echo'
17357 egrep='$egrep'
17358 emacs='$emacs'
17359 eunicefix='$eunicefix'
17360 exe_ext='$exe_ext'
17361 expr='$expr'
17362 extensions='$extensions'
17363 extras='$extras'
17364 fflushNULL='$fflushNULL'
17365 fflushall='$fflushall'
17366 find='$find'
17367 firstmakefile='$firstmakefile'
17368 flex='$flex'
17369 fpossize='$fpossize'
17370 fpostype='$fpostype'
17371 freetype='$freetype'
17372 from='$from'
17373 full_ar='$full_ar'
17374 full_csh='$full_csh'
17375 full_sed='$full_sed'
17376 gccosandvers='$gccosandvers'
17377 gccversion='$gccversion'
17378 gidformat='$gidformat'
17379 gidsign='$gidsign'
17380 gidsize='$gidsize'
17381 gidtype='$gidtype'
17382 glibpth='$glibpth'
17383 gmake='$gmake'
17384 grep='$grep'
17385 groupcat='$groupcat'
17386 groupstype='$groupstype'
17387 gzip='$gzip'
17388 h_fcntl='$h_fcntl'
17389 h_sysfile='$h_sysfile'
17390 hint='$hint'
17391 hostcat='$hostcat'
17392 i16size='$i16size'
17393 i16type='$i16type'
17394 i32size='$i32size'
17395 i32type='$i32type'
17396 i64size='$i64size'
17397 i64type='$i64type'
17398 i8size='$i8size'
17399 i8type='$i8type'
17400 i_arpainet='$i_arpainet'
17401 i_bsdioctl='$i_bsdioctl'
17402 i_db='$i_db'
17403 i_dbm='$i_dbm'
17404 i_dirent='$i_dirent'
17405 i_dld='$i_dld'
17406 i_dlfcn='$i_dlfcn'
17407 i_fcntl='$i_fcntl'
17408 i_float='$i_float'
17409 i_fp='$i_fp'
17410 i_fp_class='$i_fp_class'
17411 i_gdbm='$i_gdbm'
17412 i_grp='$i_grp'
17413 i_ieeefp='$i_ieeefp'
17414 i_inttypes='$i_inttypes'
17415 i_langinfo='$i_langinfo'
17416 i_libutil='$i_libutil'
17417 i_limits='$i_limits'
17418 i_locale='$i_locale'
17419 i_machcthr='$i_machcthr'
17420 i_malloc='$i_malloc'
17421 i_math='$i_math'
17422 i_memory='$i_memory'
17423 i_mntent='$i_mntent'
17424 i_ndbm='$i_ndbm'
17425 i_netdb='$i_netdb'
17426 i_neterrno='$i_neterrno'
17427 i_netinettcp='$i_netinettcp'
17428 i_niin='$i_niin'
17429 i_poll='$i_poll'
17430 i_prot='$i_prot'
17431 i_pthread='$i_pthread'
17432 i_pwd='$i_pwd'
17433 i_rpcsvcdbm='$i_rpcsvcdbm'
17434 i_sfio='$i_sfio'
17435 i_sgtty='$i_sgtty'
17436 i_shadow='$i_shadow'
17437 i_socks='$i_socks'
17438 i_stdarg='$i_stdarg'
17439 i_stddef='$i_stddef'
17440 i_stdlib='$i_stdlib'
17441 i_string='$i_string'
17442 i_sunmath='$i_sunmath'
17443 i_sysaccess='$i_sysaccess'
17444 i_sysdir='$i_sysdir'
17445 i_sysfile='$i_sysfile'
17446 i_sysfilio='$i_sysfilio'
17447 i_sysin='$i_sysin'
17448 i_sysioctl='$i_sysioctl'
17449 i_syslog='$i_syslog'
17450 i_sysmman='$i_sysmman'
17451 i_sysmode='$i_sysmode'
17452 i_sysmount='$i_sysmount'
17453 i_sysndir='$i_sysndir'
17454 i_sysparam='$i_sysparam'
17455 i_sysresrc='$i_sysresrc'
17456 i_syssecrt='$i_syssecrt'
17457 i_sysselct='$i_sysselct'
17458 i_syssockio='$i_syssockio'
17459 i_sysstat='$i_sysstat'
17460 i_sysstatfs='$i_sysstatfs'
17461 i_sysstatvfs='$i_sysstatvfs'
17462 i_systime='$i_systime'
17463 i_systimek='$i_systimek'
17464 i_systimes='$i_systimes'
17465 i_systypes='$i_systypes'
17466 i_sysuio='$i_sysuio'
17467 i_sysun='$i_sysun'
17468 i_sysutsname='$i_sysutsname'
17469 i_sysvfs='$i_sysvfs'
17470 i_syswait='$i_syswait'
17471 i_termio='$i_termio'
17472 i_termios='$i_termios'
17473 i_time='$i_time'
17474 i_unistd='$i_unistd'
17475 i_ustat='$i_ustat'
17476 i_utime='$i_utime'
17477 i_values='$i_values'
17478 i_varargs='$i_varargs'
17479 i_varhdr='$i_varhdr'
17480 i_vfork='$i_vfork'
17481 ignore_versioned_solibs='$ignore_versioned_solibs'
17482 inc_version_list='$inc_version_list'
17483 inc_version_list_init='$inc_version_list_init'
17484 incpath='$incpath'
17485 inews='$inews'
17486 installarchlib='$installarchlib'
17487 installbin='$installbin'
17488 installman1dir='$installman1dir'
17489 installman3dir='$installman3dir'
17490 installprefix='$installprefix'
17491 installprefixexp='$installprefixexp'
17492 installprivlib='$installprivlib'
17493 installscript='$installscript'
17494 installsitearch='$installsitearch'
17495 installsitebin='$installsitebin'
17496 installsitelib='$installsitelib'
17497 installstyle='$installstyle'
17498 installusrbinperl='$installusrbinperl'
17499 installvendorarch='$installvendorarch'
17500 installvendorbin='$installvendorbin'
17501 installvendorlib='$installvendorlib'
17502 intsize='$intsize'
17503 issymlink='$issymlink'
17504 ivdformat='$ivdformat'
17505 ivsize='$ivsize'
17506 ivtype='$ivtype'
17507 known_extensions='$known_extensions'
17508 ksh='$ksh'
17509 ld='$ld'
17510 lddlflags='$lddlflags'
17511 ldflags='$ldflags'
17512 ldflags_uselargefiles='$ldflags_uselargefiles'
17513 ldlibpthname='$ldlibpthname'
17514 less='$less'
17515 lib_ext='$lib_ext'
17516 libc='$libc'
17517 libperl='$libperl'
17518 libpth='$libpth'
17519 libs='$libs'
17520 libsdirs='$libsdirs'
17521 libsfiles='$libsfiles'
17522 libsfound='$libsfound'
17523 libspath='$libspath'
17524 libswanted='$libswanted'
17525 libswanted_uselargefiles='$libswanted_uselargefiles'
17526 line='$line'
17527 lint='$lint'
17528 lkflags='$lkflags'
17529 ln='$ln'
17530 lns='$lns'
17531 locincpth='$locincpth'
17532 loclibpth='$loclibpth'
17533 longdblsize='$longdblsize'
17534 longlongsize='$longlongsize'
17535 longsize='$longsize'
17536 lp='$lp'
17537 lpr='$lpr'
17538 ls='$ls'
17539 lseeksize='$lseeksize'
17540 lseektype='$lseektype'
17541 mail='$mail'
17542 mailx='$mailx'
17543 make='$make'
17544 make_set_make='$make_set_make'
17545 mallocobj='$mallocobj'
17546 mallocsrc='$mallocsrc'
17547 malloctype='$malloctype'
17548 man1dir='$man1dir'
17549 man1direxp='$man1direxp'
17550 man1ext='$man1ext'
17551 man3dir='$man3dir'
17552 man3direxp='$man3direxp'
17553 man3ext='$man3ext'
17554 mips_type='$mips_type'
17555 mkdir='$mkdir'
17556 mmaptype='$mmaptype'
17557 modetype='$modetype'
17558 more='$more'
17559 multiarch='$multiarch'
17560 mv='$mv'
17561 myarchname='$myarchname'
17562 mydomain='$mydomain'
17563 myhostname='$myhostname'
17564 myuname='$myuname'
17565 n='$n'
17566 need_va_copy='$need_va_copy'
17567 netdb_hlen_type='$netdb_hlen_type'
17568 netdb_host_type='$netdb_host_type'
17569 netdb_name_type='$netdb_name_type'
17570 netdb_net_type='$netdb_net_type'
17571 nm='$nm'
17572 nm_opt='$nm_opt'
17573 nm_so_opt='$nm_so_opt'
17574 nonxs_ext='$nonxs_ext'
17575 nroff='$nroff'
17576 nvEUformat='$nvEUformat'
17577 nvFUformat='$nvFUformat'
17578 nvGUformat='$nvGUformat'
17579 nveformat='$nveformat'
17580 nvfformat='$nvfformat'
17581 nvgformat='$nvgformat'
17582 nvsize='$nvsize'
17583 nvtype='$nvtype'
17584 o_nonblock='$o_nonblock'
17585 obj_ext='$obj_ext'
17586 old_pthread_create_joinable='$old_pthread_create_joinable'
17587 optimize='$optimize'
17588 orderlib='$orderlib'
17589 osname='$osname'
17590 osvers='$osvers'
17591 otherlibdirs='$otherlibdirs'
17592 package='$package'
17593 pager='$pager'
17594 passcat='$passcat'
17595 patchlevel='$patchlevel'
17596 path_sep='$path_sep'
17597 perl5='$perl5'
17598 perl='$perl'
17599 perl_patchlevel='$perl_patchlevel'
17600 perladmin='$perladmin'
17601 perllibs='$perllibs'
17602 perlpath='$perlpath'
17603 pg='$pg'
17604 phostname='$phostname'
17605 pidtype='$pidtype'
17606 plibpth='$plibpth'
17607 pm_apiversion='$pm_apiversion'
17608 pmake='$pmake'
17609 pr='$pr'
17610 prefix='$prefix'
17611 prefixexp='$prefixexp'
17612 privlib='$privlib'
17613 privlibexp='$privlibexp'
17614 procselfexe='$procselfexe'
17615 prototype='$prototype'
17616 ptrsize='$ptrsize'
17617 quadkind='$quadkind'
17618 quadtype='$quadtype'
17619 randbits='$randbits'
17620 randfunc='$randfunc'
17621 randseedtype='$randseedtype'
17622 ranlib='$ranlib'
17623 rd_nodata='$rd_nodata'
17624 revision='$revision'
17625 rm='$rm'
17626 rmail='$rmail'
17627 run='$run'
17628 runnm='$runnm'
17629 sPRIEUldbl='$sPRIEUldbl'
17630 sPRIFUldbl='$sPRIFUldbl'
17631 sPRIGUldbl='$sPRIGUldbl'
17632 sPRIXU64='$sPRIXU64'
17633 sPRId64='$sPRId64'
17634 sPRIeldbl='$sPRIeldbl'
17635 sPRIfldbl='$sPRIfldbl'
17636 sPRIgldbl='$sPRIgldbl'
17637 sPRIi64='$sPRIi64'
17638 sPRIo64='$sPRIo64'
17639 sPRIu64='$sPRIu64'
17640 sPRIx64='$sPRIx64'
17641 sSCNfldbl='$sSCNfldbl'
17642 sched_yield='$sched_yield'
17643 scriptdir='$scriptdir'
17644 scriptdirexp='$scriptdirexp'
17645 sed='$sed'
17646 seedfunc='$seedfunc'
17647 selectminbits='$selectminbits'
17648 selecttype='$selecttype'
17649 sendmail='$sendmail'
17650 sh='$sh'
17651 shar='$shar'
17652 sharpbang='$sharpbang'
17653 shmattype='$shmattype'
17654 shortsize='$shortsize'
17655 shrpenv='$shrpenv'
17656 shsharp='$shsharp'
17657 sig_count='$sig_count'
17658 sig_name='$sig_name'
17659 sig_name_init='$sig_name_init'
17660 sig_num='$sig_num'
17661 sig_num_init='$sig_num_init'
17662 sig_size='$sig_size'
17663 signal_t='$signal_t'
17664 sitearch='$sitearch'
17665 sitearchexp='$sitearchexp'
17666 sitebin='$sitebin'
17667 sitebinexp='$sitebinexp'
17668 sitelib='$sitelib'
17669 sitelib_stem='$sitelib_stem'
17670 sitelibexp='$sitelibexp'
17671 siteprefix='$siteprefix'
17672 siteprefixexp='$siteprefixexp'
17673 sizesize='$sizesize'
17674 sizetype='$sizetype'
17675 sleep='$sleep'
17676 smail='$smail'
17677 so='$so'
17678 sockethdr='$sockethdr'
17679 socketlib='$socketlib'
17680 socksizetype='$socksizetype'
17681 sort='$sort'
17682 spackage='$spackage'
17683 spitshell='$spitshell'
17684 src='$src'
17685 ssizetype='$ssizetype'
17686 startperl='$startperl'
17687 startsh='$startsh'
17688 static_ext='$static_ext'
17689 stdchar='$stdchar'
17690 stdio_base='$stdio_base'
17691 stdio_bufsiz='$stdio_bufsiz'
17692 stdio_cnt='$stdio_cnt'
17693 stdio_filbuf='$stdio_filbuf'
17694 stdio_ptr='$stdio_ptr'
17695 stdio_stream_array='$stdio_stream_array'
17696 strings='$strings'
17697 submit='$submit'
17698 subversion='$subversion'
17699 sysman='$sysman'
17700 tail='$tail'
17701 tar='$tar'
17702 targetarch='$targetarch'
17703 tbl='$tbl'
17704 tee='$tee'
17705 test='$test'
17706 timeincl='$timeincl'
17707 timetype='$timetype'
17708 to='$to'
17709 touch='$touch'
17710 tr='$tr'
17711 trnl='$trnl'
17712 troff='$troff'
17713 u16size='$u16size'
17714 u16type='$u16type'
17715 u32size='$u32size'
17716 u32type='$u32type'
17717 u64size='$u64size'
17718 u64type='$u64type'
17719 u8size='$u8size'
17720 u8type='$u8type'
17721 uidformat='$uidformat'
17722 uidsign='$uidsign'
17723 uidsize='$uidsize'
17724 uidtype='$uidtype'
17725 uname='$uname'
17726 uniq='$uniq'
17727 uquadtype='$uquadtype'
17728 use5005threads='$use5005threads'
17729 use64bitall='$use64bitall'
17730 use64bitint='$use64bitint'
17731 usecrosscompile='$usecrosscompile'
17732 usedl='$usedl'
17733 useithreads='$useithreads'
17734 uselargefiles='$uselargefiles'
17735 uselongdouble='$uselongdouble'
17736 usemorebits='$usemorebits'
17737 usemultiplicity='$usemultiplicity'
17738 usemymalloc='$usemymalloc'
17739 usenm='$usenm'
17740 useopcode='$useopcode'
17741 useperlio='$useperlio'
17742 useposix='$useposix'
17743 usereentrant='$usereentrant'
17744 usesfio='$usesfio'
17745 useshrplib='$useshrplib'
17746 usesocks='$usesocks'
17747 usethreads='$usethreads'
17748 usevendorprefix='$usevendorprefix'
17749 usevfork='$usevfork'
17750 usrinc='$usrinc'
17751 uuname='$uuname'
17752 uvXUformat='$uvXUformat'
17753 uvoformat='$uvoformat'
17754 uvsize='$uvsize'
17755 uvtype='$uvtype'
17756 uvuformat='$uvuformat'
17757 uvxformat='$uvxformat'
17758 vendorarch='$vendorarch'
17759 vendorarchexp='$vendorarchexp'
17760 vendorbin='$vendorbin'
17761 vendorbinexp='$vendorbinexp'
17762 vendorlib='$vendorlib'
17763 vendorlib_stem='$vendorlib_stem'
17764 vendorlibexp='$vendorlibexp'
17765 vendorprefix='$vendorprefix'
17766 vendorprefixexp='$vendorprefixexp'
17767 version='$version'
17768 version_patchlevel_string='$version_patchlevel_string'
17769 versiononly='$versiononly'
17770 vi='$vi'
17771 voidflags='$voidflags'
17772 xlibpth='$xlibpth'
17773 xs_apiversion='$xs_apiversion'
17774 yacc='$yacc'
17775 yaccflags='$yaccflags'
17776 zcat='$zcat'
17777 zip='$zip'
17778 EOT
17779
17780 : Add in command line options if available
17781 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17782
17783 : add special variables
17784 $test -f $src/patchlevel.h && \
17785 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17786 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17787 echo "PERL_CONFIG_SH=true" >>config.sh
17788
17789 : propagate old symbols
17790 if $test -f UU/config.sh; then
17791         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17792         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17793         $sort | $uniq -u >UU/oldsyms
17794         set X `cat UU/oldsyms`
17795         shift
17796         case $# in
17797         0) ;;
17798         *)
17799                 cat <<EOM
17800 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17801 EOM
17802                 echo "# Variables propagated from previous config.sh file." >>config.sh
17803                 for sym in `cat UU/oldsyms`; do
17804                         echo "    Propagating $hint variable "'$'"$sym..."
17805                         eval 'tmp="$'"${sym}"'"'
17806                         echo "$tmp" | \
17807                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17808                 done
17809                 ;;
17810         esac
17811 fi
17812
17813 : Finish up by extracting the .SH files
17814 case "$alldone" in
17815 exit)
17816         $rm -rf UU
17817         echo "Extraction done."
17818         exit 0
17819         ;;
17820 cont)
17821         ;;
17822 '')
17823         dflt=''
17824         nostick=true
17825         $cat <<EOM
17826
17827 If you'd like to make any changes to the config.sh file before I begin
17828 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17829
17830 EOM
17831         rp="Press return or use a shell escape to edit config.sh:"
17832         . UU/myread
17833         nostick=''
17834         case "$ans" in
17835         '') ;;
17836         *) : in case they cannot read
17837                 sh 1>&4 -c "$ans";;
17838         esac
17839         ;;
17840 esac
17841
17842 : if this fails, just run all the .SH files by hand
17843 . ./config.sh
17844
17845 echo " "
17846 exec 1>&4
17847 pwd=`pwd`
17848 . ./UU/extract
17849 cd "$pwd"
17850
17851 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17852         dflt=y
17853         case "$silent" in
17854         true) ;;
17855         *)
17856                 $cat <<EOM
17857
17858 Now you need to generate make dependencies by running "$make depend".
17859 You might prefer to run it in background: "$make depend > makedepend.out &"
17860 It can take a while, so you might not want to run it right now.
17861
17862 EOM
17863                 ;;
17864         esac
17865         rp="Run $make depend now?"
17866         . UU/myread
17867         case "$ans" in
17868         y*)
17869                 $make depend && echo "Now you must run '$make'."
17870                 ;;
17871         *)
17872                 echo "You must run '$make depend' then '$make'."
17873                 ;;
17874         esac
17875 elif test -f [Mm]akefile; then
17876         echo " "
17877         echo "Now you must run a $make."
17878 else
17879         echo "Configure done."
17880 fi
17881
17882 if $test -f Policy.sh; then
17883     $cat <<EOM
17884
17885 If you compile $package on a different machine or from a different object
17886 directory, copy the Policy.sh file from this object directory to the
17887 new one before you run Configure -- this will help you with most of
17888 the policy defaults.
17889
17890 EOM
17891 fi
17892 if $test -f config.msg; then
17893     echo "Hmm.  I also noted the following information while running:"
17894     echo " "
17895     $cat config.msg >&4
17896     $rm -f config.msg
17897 fi
17898 $rm -f kit*isdone ark*isdone
17899 $rm -rf UU
17900
17901 : End of Configure
17902