Copyright++. (Not all the toplevel *.h have one, it seems.)
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Wed Jan 23 06:47:20 EET 2002 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 i_systime=''
760 i_systimek=''
761 i_time=''
762 timeincl=''
763 i_unistd=''
764 i_ustat=''
765 i_utime=''
766 i_values=''
767 i_stdarg=''
768 i_varargs=''
769 i_varhdr=''
770 i_vfork=''
771 inc_version_list=''
772 inc_version_list_init=''
773 installprefix=''
774 installprefixexp=''
775 installstyle=''
776 installusrbinperl=''
777 intsize=''
778 longsize=''
779 shortsize=''
780 issymlink=''
781 libc=''
782 ldlibpthname=''
783 libperl=''
784 shrpenv=''
785 useshrplib=''
786 glibpth=''
787 libpth=''
788 loclibpth=''
789 plibpth=''
790 xlibpth=''
791 ignore_versioned_solibs=''
792 libs=''
793 libsdirs=''
794 libsfiles=''
795 libsfound=''
796 libspath=''
797 lns=''
798 d_PRIEUldbl=''
799 d_PRIFUldbl=''
800 d_PRIGUldbl=''
801 d_PRIeldbl=''
802 d_PRIfldbl=''
803 d_PRIgldbl=''
804 d_SCNfldbl=''
805 sPRIEUldbl=''
806 sPRIFUldbl=''
807 sPRIGUldbl=''
808 sPRIeldbl=''
809 sPRIfldbl=''
810 sPRIgldbl=''
811 sSCNfldbl=''
812 lseeksize=''
813 lseektype=''
814 make_set_make=''
815 d_mymalloc=''
816 freetype=''
817 mallocobj=''
818 mallocsrc=''
819 malloctype=''
820 usemymalloc=''
821 installman1dir=''
822 man1dir=''
823 man1direxp=''
824 man1ext=''
825 installman3dir=''
826 man3dir=''
827 man3direxp=''
828 man3ext=''
829 modetype=''
830 multiarch=''
831 mydomain=''
832 myhostname=''
833 phostname=''
834 c=''
835 n=''
836 d_eofnblk=''
837 eagain=''
838 o_nonblock=''
839 rd_nodata=''
840 need_va_copy=''
841 netdb_hlen_type=''
842 netdb_host_type=''
843 netdb_name_type=''
844 netdb_net_type=''
845 groupcat=''
846 hostcat=''
847 passcat=''
848 orderlib=''
849 ranlib=''
850 d_perl_otherlibdirs=''
851 otherlibdirs=''
852 package=''
853 spackage=''
854 pager=''
855 api_revision=''
856 api_subversion=''
857 api_version=''
858 api_versionstring=''
859 patchlevel=''
860 perl_patchlevel=''
861 revision=''
862 subversion=''
863 version=''
864 version_patchlevel_string=''
865 perl5=''
866 perladmin=''
867 perlpath=''
868 d_nv_preserves_uv=''
869 d_nv_preserves_uv_bits=''
870 i16size=''
871 i16type=''
872 i32size=''
873 i32type=''
874 i64size=''
875 i64type=''
876 i8size=''
877 i8type=''
878 ivsize=''
879 ivtype=''
880 nvsize=''
881 nvtype=''
882 u16size=''
883 u16type=''
884 u32size=''
885 u32type=''
886 u64size=''
887 u64type=''
888 u8size=''
889 u8type=''
890 uvsize=''
891 uvtype=''
892 ivdformat=''
893 nvEUformat=''
894 nvFUformat=''
895 nvGUformat=''
896 nveformat=''
897 nvfformat=''
898 nvgformat=''
899 uvXUformat=''
900 uvoformat=''
901 uvuformat=''
902 uvxformat=''
903 pidtype=''
904 prefix=''
905 prefixexp=''
906 installprivlib=''
907 privlib=''
908 privlibexp=''
909 prototype=''
910 ptrsize=''
911 d_PRIXU64=''
912 d_PRId64=''
913 d_PRIi64=''
914 d_PRIo64=''
915 d_PRIu64=''
916 d_PRIx64=''
917 sPRIXU64=''
918 sPRId64=''
919 sPRIi64=''
920 sPRIo64=''
921 sPRIu64=''
922 sPRIx64=''
923 d_quad=''
924 quadkind=''
925 quadtype=''
926 uquadtype=''
927 drand01=''
928 randbits=''
929 randfunc=''
930 randseedtype=''
931 seedfunc=''
932 installscript=''
933 scriptdir=''
934 scriptdirexp=''
935 selectminbits=''
936 selecttype=''
937 sh=''
938 sig_count=''
939 sig_name=''
940 sig_name_init=''
941 sig_num=''
942 sig_num_init=''
943 sig_size=''
944 installsitearch=''
945 sitearch=''
946 sitearchexp=''
947 installsitebin=''
948 sitebin=''
949 sitebinexp=''
950 installsitelib=''
951 sitelib=''
952 sitelib_stem=''
953 sitelibexp=''
954 siteprefix=''
955 siteprefixexp=''
956 sizesize=''
957 sizetype=''
958 so=''
959 socksizetype=''
960 sharpbang=''
961 shsharp=''
962 spitshell=''
963 src=''
964 ssizetype=''
965 startperl=''
966 startsh=''
967 stdchar=''
968 d_stdio_stream_array=''
969 stdio_stream_array=''
970 sysman=''
971 trnl=''
972 uidformat=''
973 uidsign=''
974 uidsize=''
975 uidtype=''
976 archname64=''
977 use64bitall=''
978 use64bitint=''
979 ccflags_uselargefiles=''
980 ldflags_uselargefiles=''
981 libswanted_uselargefiles=''
982 uselargefiles=''
983 uselongdouble=''
984 usemorebits=''
985 usemultiplicity=''
986 nm_opt=''
987 nm_so_opt=''
988 runnm=''
989 usenm=''
990 useperlio=''
991 usesocks=''
992 d_oldpthreads=''
993 use5005threads=''
994 useithreads=''
995 usereentrant=''
996 usethreads=''
997 incpath=''
998 mips_type=''
999 usrinc=''
1000 d_vendorarch=''
1001 installvendorarch=''
1002 vendorarch=''
1003 vendorarchexp=''
1004 d_vendorbin=''
1005 installvendorbin=''
1006 vendorbin=''
1007 vendorbinexp=''
1008 d_vendorlib=''
1009 installvendorlib=''
1010 vendorlib=''
1011 vendorlib_stem=''
1012 vendorlibexp=''
1013 usevendorprefix=''
1014 vendorprefix=''
1015 vendorprefixexp=''
1016 versiononly=''
1017 defvoidused=''
1018 voidflags=''
1019 pm_apiversion=''
1020 xs_apiversion=''
1021 yacc=''
1022 yaccflags=''
1023 CONFIG=''
1024
1025 define='define'
1026 undef='undef'
1027 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1028 rmlist=''
1029
1030 : We must find out about Eunice early
1031 eunicefix=':'
1032 if test -f /etc/unixtovms; then
1033         eunicefix=/etc/unixtovms
1034 fi
1035 if test -f /etc/unixtovms.exe; then
1036         eunicefix=/etc/unixtovms.exe
1037 fi
1038
1039 if test -f "/system/gnu_library/bin/ar.pm"; then
1040      _exe=".pm"
1041 fi
1042
1043 i_whoami=''
1044 ccname=''
1045 ccversion=''
1046 perllibs=''
1047 : set useposix=false in your hint file to disable the POSIX extension.
1048 useposix=true
1049 : set useopcode=false in your hint file to disable the Opcode extension.
1050 useopcode=true
1051 : Trailing extension.  Override this in a hint file, if needed.
1052 : Extra object files, if any, needed on this platform.
1053 archobjs=''
1054 archname=''
1055 : Possible local include directories to search.
1056 : Set locincpth to "" in a hint file to defeat local include searches.
1057 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1058 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1059 :
1060 : no include file wanted by default
1061 inclwanted=''
1062
1063 groupstype=''
1064 libnames=''
1065 : change the next line if compiling for Xenix/286 on Xenix/386
1066 xlibpth='/usr/lib/386 /lib/386'
1067 : Possible local library directories to search.
1068 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1069 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1070
1071 : general looking path for locating libraries
1072 glibpth="/lib /usr/lib $xlibpth"
1073 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1074 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1075 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1076
1077 : Private path used by Configure to find libraries.  Its value
1078 : is prepended to libpth. This variable takes care of special
1079 : machines, like the mips.  Usually, it should be empty.
1080 plibpth=''
1081
1082 : default library list
1083 libswanted=''
1084 : some systems want to use only the non-versioned libso:s
1085 ignore_versioned_solibs=''
1086 archname64=''
1087 ccflags_uselargefiles=''
1088 ldflags_uselargefiles=''
1089 libswanted_uselargefiles=''
1090 : set usemultiplicity on the Configure command line to enable multiplicity.
1091 : set usesocks on the Configure command line to enable socks.
1092 : set usethreads on the Configure command line to enable threads.
1093 usereentrant='undef'
1094 : full support for void wanted by default
1095 defvoidused=15
1096
1097 : List of libraries we want.
1098 : If anyone needs -lnet, put it in a hint file.
1099 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1100 libswanted="$libswanted dld ld sun m c cposix posix"
1101 libswanted="$libswanted ndir dir crypt sec"
1102 libswanted="$libswanted ucb bsd BSD PW x util"
1103 : We probably want to search /usr/shlib before most other libraries.
1104 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1105 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1106 glibpth="/usr/shlib $glibpth"
1107 : Do not use vfork unless overridden by a hint file.
1108 usevfork=false
1109
1110 : Find the basic shell for Bourne shell scripts
1111 case "$sh" in
1112 '')
1113         case "$SYSTYPE" in
1114         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1115         *) xxx='/bin/sh';;
1116         esac
1117         if test -f "$xxx"; then
1118                 sh="$xxx"
1119         else
1120                 : Build up a list and do a single loop so we can 'break' out.
1121                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1122                 for xxx in sh bash ksh pdksh ash; do
1123                         for p in $pth; do
1124                                 try="$try ${p}/${xxx}"
1125                         done
1126                 done
1127                 for xxx in $try; do
1128                         if test -f "$xxx"; then
1129                                 sh="$xxx";
1130                                 break
1131                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1132                                 sh="$xxx";
1133                                 break
1134                         elif test -f "$xxx.exe"; then
1135                                 sh="$xxx";
1136                                 break
1137                         fi
1138                 done
1139         fi
1140         ;;
1141 esac
1142
1143 case "$sh" in
1144 '')     cat >&2 <<EOM
1145 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1146
1147 Usually it's in /bin/sh.  How did you even get this far?
1148 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1149 we'll try to straighten this all out.
1150 EOM
1151         exit 1
1152         ;;
1153 esac
1154
1155 : see if sh knows # comments
1156 if `$sh -c '#' >/dev/null 2>&1`; then
1157         shsharp=true
1158         spitshell=cat
1159         xcat=/bin/cat
1160         test -f $xcat$_exe || xcat=/usr/bin/cat
1161         if test ! -f $xcat$_exe; then
1162                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1163                         if test -f $p/cat$_exe; then
1164                                 xcat=$p/cat
1165                                 break
1166                         fi
1167                 done
1168                 if test ! -f $xcat$_exe; then
1169                         echo "Can't find cat anywhere!"
1170                         exit 1
1171                 fi
1172         fi
1173         echo "#!$xcat" >sharp
1174         $eunicefix sharp
1175         chmod +x sharp
1176         ./sharp > today
1177         if test -s today; then
1178                 sharpbang='#!'
1179         else
1180                 echo "#! $xcat" > sharp
1181                 $eunicefix sharp
1182                 chmod +x sharp
1183                 ./sharp > today
1184                 if test -s today; then
1185                         sharpbang='#! '
1186                 else
1187                         sharpbang=': use '
1188                 fi
1189         fi
1190 else
1191         echo " "
1192         echo "Your $sh doesn't grok # comments--I will strip them later on."
1193         shsharp=false
1194         cd ..
1195         echo "exec grep -v '^[  ]*#'" >spitshell
1196         chmod +x spitshell
1197         $eunicefix spitshell
1198         spitshell=`pwd`/spitshell
1199         cd UU
1200         echo "I presume that if # doesn't work, #! won't work either!"
1201         sharpbang=': use '
1202 fi
1203 rm -f sharp today
1204
1205 : figure out how to guarantee sh startup
1206 case "$startsh" in
1207 '') startsh=${sharpbang}${sh} ;;
1208 *)
1209 esac
1210 cat >sharp <<EOSS
1211 $startsh
1212 set abc
1213 test "$?abc" != 1
1214 EOSS
1215
1216 chmod +x sharp
1217 $eunicefix sharp
1218 if ./sharp; then
1219         : echo "Yup, it does."
1220 else
1221         echo "Hmm... '$startsh' does not guarantee sh startup..."
1222         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1223 fi
1224 rm -f sharp
1225
1226
1227 : Save command line options in file UU/cmdline.opt for later use in
1228 : generating config.sh.
1229 cat > cmdline.opt <<EOSH
1230 # Configure command line arguments.
1231 config_arg0='$0'
1232 config_args='$*'
1233 config_argc=$#
1234 EOSH
1235 argn=1
1236 args_exp=''
1237 args_sep=''
1238 for arg in "$@"; do
1239         cat >>cmdline.opt <<EOSH
1240 config_arg$argn='$arg'
1241 EOSH
1242         # Extreme backslashitis: replace each ' by '"'"'
1243         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1244 $arg
1245 EOC
1246         arg_exp=`cat cmdl.opt`
1247         args_exp="$args_exp$args_sep'$arg_exp'"
1248         argn=`expr $argn + 1`
1249         args_sep=' '
1250 done
1251 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1252 # used by ./hints/os2.sh
1253 rm -f cmdl.opt
1254
1255 : produce awk script to parse command line options
1256 cat >options.awk <<'EOF'
1257 BEGIN {
1258         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1259
1260         len = length(optstr);
1261         for (i = 1; i <= len; i++) {
1262                 c = substr(optstr, i, 1);
1263                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1264                 if (a == ":") {
1265                         arg[c] = 1;
1266                         i++;
1267                 }
1268                 opt[c] = 1;
1269         }
1270 }
1271 {
1272         expect = 0;
1273         str = $0;
1274         if (substr(str, 1, 1) != "-") {
1275                 printf("'%s'\n", str);
1276                 next;
1277         }
1278         len = length($0);
1279         for (i = 2; i <= len; i++) {
1280                 c = substr(str, i, 1);
1281                 if (!opt[c]) {
1282                         printf("-%s\n", substr(str, i));
1283                         next;
1284                 }
1285                 printf("-%s\n", c);
1286                 if (arg[c]) {
1287                         if (i < len)
1288                                 printf("'%s'\n", substr(str, i + 1));
1289                         else
1290                                 expect = 1;
1291                         next;
1292                 }
1293         }
1294 }
1295 END {
1296         if (expect)
1297                 print "?";
1298 }
1299 EOF
1300
1301 : process the command line options
1302 set X `for arg in "$@"; do echo "X$arg"; done |
1303         sed -e s/X// | awk -f options.awk`
1304 eval "set $*"
1305 shift
1306 rm -f options.awk
1307
1308 : set up default values
1309 fastread=''
1310 reuseval=false
1311 config_sh=''
1312 alldone=''
1313 error=''
1314 silent=''
1315 extractsh=''
1316 override=''
1317 knowitall=''
1318 rm -f optdef.sh posthint.sh
1319 cat >optdef.sh <<EOS
1320 $startsh
1321 EOS
1322
1323
1324 : option parsing
1325 while test $# -gt 0; do
1326         case "$1" in
1327         -d) shift; fastread=yes;;
1328         -e) shift; alldone=cont;;
1329         -f)
1330                 shift
1331                 cd ..
1332                 if test -r "$1"; then
1333                         config_sh="$1"
1334                 else
1335                         echo "$me: cannot read config file $1." >&2
1336                         error=true
1337                 fi
1338                 cd UU
1339                 shift;;
1340         -h) shift; error=true;;
1341         -r) shift; reuseval=true;;
1342         -s) shift; silent=true; realsilent=true;;
1343         -E) shift; alldone=exit;;
1344         -K) shift; knowitall=true;;
1345         -O) shift; override=true;;
1346         -S) shift; silent=true; extractsh=true;;
1347         -D)
1348                 shift
1349                 case "$1" in
1350                 *=)
1351                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1352                         echo "$me: ignoring -D $1" >&2
1353                         ;;
1354                 *=*) echo "$1" | \
1355                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1356                 *) echo "$1='define'" >> optdef.sh;;
1357                 esac
1358                 shift
1359                 ;;
1360         -U)
1361                 shift
1362                 case "$1" in
1363                 *=) echo "$1" >> optdef.sh;;
1364                 *=*)
1365                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1366                         echo "$me: ignoring -U $1" >&2
1367                         ;;
1368                 *) echo "$1='undef'" >> optdef.sh;;
1369                 esac
1370                 shift
1371                 ;;
1372         -A)
1373             shift
1374             xxx=''
1375             yyy="$1"
1376             zzz=''
1377             uuu=undef
1378             case "$yyy" in
1379             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1380                  case "$zzz" in
1381                  *:*) zzz='' ;;
1382                  *)   xxx=append
1383                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1384                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1385                  esac
1386                  ;;
1387             esac
1388             case "$xxx" in
1389             '')  case "$yyy" in
1390                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1391                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1392                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1393                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1394                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1395                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1396                  esac
1397                  ;;       
1398             esac
1399             case "$xxx" in
1400             append)
1401                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1402             clear)
1403                 echo "$yyy=''"                  >> posthint.sh ;;
1404             define)
1405                 case "$zzz" in
1406                 '') zzz=define ;;
1407                 esac
1408                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1409             eval)
1410                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1411             prepend)
1412                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1413             undef)
1414                 case "$zzz" in
1415                 '') zzz="$uuu" ;;
1416                 esac
1417                 echo "$yyy=$zzz"                >> posthint.sh ;;
1418             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1419             esac
1420             shift
1421             ;;
1422         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1423             exit 0;;
1424         --) break;;
1425         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1426         *) break;;
1427         esac
1428 done
1429
1430 case "$error" in
1431 true)
1432         cat >&2 <<EOM
1433 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1434                  [-U symbol] [-U symbol=] [-A command:symbol...]
1435   -d : use defaults for all answers.
1436   -e : go on without questioning past the production of config.sh.
1437   -f : specify an alternate default configuration file.
1438   -h : print this help message and exit (with an error status).
1439   -r : reuse C symbols value if possible (skips costly nm extraction).
1440   -s : silent mode, only echoes questions and essential information.
1441   -D : define symbol to have some value:
1442          -D symbol         symbol gets the value 'define'
1443          -D symbol=value   symbol gets the value 'value'
1444   -E : stop at the end of questions, after having produced config.sh.
1445   -K : do not use unless you know what you are doing.
1446   -O : let -D and -U override definitions from loaded configuration file.
1447   -S : perform variable substitutions on all .SH files (can mix with -f)
1448   -U : undefine symbol:
1449          -U symbol    symbol gets the value 'undef'
1450          -U symbol=   symbol gets completely empty
1451   -A : manipulate symbol after the platform specific hints have been applied:
1452          -A symbol=value                append " "value to symbol
1453          -A append:symbol=value         append value to symbol
1454          -A define:symbol=value         define symbol to have value
1455          -A clear:symbol                define symbol to be ''
1456          -A define:symbol               define symbol to be 'define'
1457          -A eval:symbol=value           define symbol to be eval of value
1458          -A prepend:symbol=value        prepend value to symbol
1459          -A undef:symbol                define symbol to be 'undef'
1460          -A undef:symbol=               define symbol to be ''
1461   -V : print version number and exit (with a zero status).
1462 EOM
1463         exit 1
1464         ;;
1465 esac
1466
1467 : Sanity checks
1468 case "$fastread$alldone" in
1469 yescont|yesexit) ;;
1470 *)
1471         case "$extractsh" in
1472         true) ;;
1473         *)
1474                 if test ! -t 0; then
1475                         echo "Say 'sh Configure', not 'sh <Configure'"
1476                         exit 1
1477                 fi
1478                 ;;
1479         esac
1480         ;;
1481 esac
1482
1483 exec 4>&1
1484 case "$silent" in
1485 true) exec 1>/dev/null;;
1486 esac
1487
1488 : run the defines and the undefines, if any, but leave the file out there...
1489 touch optdef.sh
1490 . ./optdef.sh
1491 : create the posthint manipulation script and leave the file out there...
1492 touch posthint.sh
1493
1494 : set package name
1495 package=perl5
1496 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1497 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1498 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1499 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1500 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1501 esac
1502
1503 : Some greps do not return status, grrr.
1504 echo "grimblepritz" >grimble
1505 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1506         contains=contains
1507 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1508         contains=grep
1509 else
1510         contains=contains
1511 fi
1512 rm -f grimble
1513 : the following should work in any shell
1514 case "$contains" in
1515 contains*)
1516         echo " "
1517         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1518         cat >contains <<'EOSS'
1519 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1520 EOSS
1521 chmod +x contains
1522 esac
1523
1524 : Find the path to the source tree
1525 case "$src" in
1526 '') case "$0" in
1527     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1528          case "$src" in
1529          /*)    ;;
1530          .)     ;;
1531          *)     src=`cd ../$src && pwd` ;;
1532          esac
1533          ;;
1534     *)   src='.';;
1535     esac;;
1536 esac
1537 case "$src" in
1538 '')     src=/
1539         rsrc=/
1540         ;;
1541 /*) rsrc="$src";;
1542 *) rsrc="../$src";;
1543 esac
1544 if test -f $rsrc/Configure && \
1545         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1546 then
1547    : found it, so we are ok.
1548 else
1549         rsrc=''
1550         for src in . .. ../.. ../../.. ../../../..; do
1551                 if test -f ../$src/Configure && \
1552                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1553                 then
1554                         rsrc=../$src
1555                         break
1556                 fi
1557         done
1558 fi
1559 case "$rsrc" in
1560 '')
1561         cat <<EOM >&4
1562
1563 Sorry, I can't seem to locate the source dir for $package.  Please start
1564 Configure with an explicit path -- i.e. /some/path/Configure.
1565
1566 EOM
1567         exit 1
1568         ;;
1569 ../.)   rsrc='..';;
1570 *)
1571         echo " "
1572         echo "Sources for $package found in \"$src\"." >&4
1573         ;;
1574 esac
1575
1576 : script used to extract .SH files with variable substitutions
1577 cat >extract <<'EOS'
1578 PERL_CONFIG_SH=true
1579 echo "Doing variable substitutions on .SH files..."
1580 if test -f MANIFEST; then
1581         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1582 else
1583         echo "(Looking for .SH files under the source directory.)"
1584         set x `(cd "$src"; find . -name "*.SH" -print)`
1585 fi
1586 shift
1587 case $# in
1588 0) set x `(cd "$src"; echo *.SH)`; shift;;
1589 esac
1590 if test ! -f "$src/$1"; then
1591         shift
1592 fi
1593 mkdir_p='
1594 name=$1;
1595 create="";
1596 while test $name; do
1597         if test ! -d "$name"; then
1598                 create="$name $create";
1599                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1600                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1601         else
1602                 name="";
1603         fi;
1604 done;
1605 for file in $create; do
1606         mkdir $file;
1607 done
1608 '
1609 for file in $*; do
1610         case "$src" in
1611         ".")
1612                 case "$file" in
1613                 */*)
1614                         dir=`expr X$file : 'X\(.*\)/'`
1615                         file=`expr X$file : 'X.*/\(.*\)'`
1616                         (cd "$dir" && . ./$file)
1617                         ;;
1618                 *)
1619                         . ./$file
1620                         ;;
1621                 esac
1622                 ;;
1623         *)
1624                 case "$file" in
1625                 */*)
1626                         dir=`expr X$file : 'X\(.*\)/'`
1627                         file=`expr X$file : 'X.*/\(.*\)'`
1628                         (set x $dir; shift; eval $mkdir_p)
1629                         sh <"$src/$dir/$file"
1630                         ;;
1631                 *)
1632                         sh <"$src/$file"
1633                         ;;
1634                 esac
1635                 ;;
1636         esac
1637 done
1638 if test -f "$src/config_h.SH"; then
1639         if test ! -f config.h; then
1640         : oops, they left it out of MANIFEST, probably, so do it anyway.
1641         . "$src/config_h.SH"
1642         fi
1643 fi
1644 EOS
1645
1646 : extract files and exit if asked to do so
1647 case "$extractsh" in
1648 true)
1649         case "$realsilent" in
1650         true) ;;
1651         *) exec 1>&4;;
1652         esac
1653         case "$config_sh" in
1654         '') config_sh='config.sh';;
1655         esac
1656         echo " "
1657         echo "Fetching answers from $config_sh..."
1658         cd ..
1659         . $config_sh
1660         test "$override" && . ./optdef.sh
1661         echo " "
1662         . UU/extract
1663         rm -rf UU
1664         echo "Extraction done."
1665         exit 0
1666         ;;
1667 esac
1668
1669 : Eunice requires " " instead of "", can you believe it
1670 echo " "
1671 : Here we go...
1672 echo "Beginning of configuration questions for $package."
1673
1674 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1675
1676 : first determine how to suppress newline on echo command
1677 echo " "
1678 echo "Checking echo to see how to suppress newlines..."
1679 (echo "hi there\c" ; echo " ") >.echotmp
1680 if $contains c .echotmp >/dev/null 2>&1 ; then
1681         echo "...using -n."
1682         n='-n'
1683         c=''
1684 else
1685         cat <<'EOM'
1686 ...using \c
1687 EOM
1688         n=''
1689         c='\c'
1690 fi
1691 echo $n "The star should be here-->$c"
1692 echo '*'
1693 rm -f .echotmp
1694
1695 : Now test for existence of everything in MANIFEST
1696 echo " "
1697 if test -f "$rsrc/MANIFEST"; then
1698         echo "First let's make sure your kit is complete.  Checking..." >&4
1699         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | split -50
1700         rm -f missing
1701         tmppwd=`pwd`
1702         for filelist in x??; do
1703                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1704         done
1705         if test -s missing; then
1706                 cat missing >&4
1707                 cat >&4 <<'EOM'
1708
1709 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1710
1711 You have the option of continuing the configuration process, despite the
1712 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1713 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1714 and contact the author (perlbug@perl.org).
1715
1716 EOM
1717                 echo $n "Continue? [n] $c" >&4
1718                 read ans
1719                 case "$ans" in
1720                 y*)
1721                         echo "Continuing..." >&4
1722                         rm -f missing
1723                         ;;
1724                 *)
1725                         echo "ABORTING..." >&4
1726                         kill $$
1727                         ;;
1728                 esac
1729         else
1730                 echo "Looks good..."
1731         fi
1732 else
1733         echo "There is no MANIFEST file.  I hope your kit is complete !"
1734 fi
1735 rm -f missing x??
1736
1737 echo " "
1738 : Find the appropriate value for a newline for tr
1739 if test -n "$DJGPP"; then
1740        trnl='\012'
1741 fi
1742 if test X"$trnl" = X; then
1743         case "`echo foo|tr '\n' x 2>/dev/null`" in
1744         foox) trnl='\n' ;;
1745         esac
1746 fi
1747 if test X"$trnl" = X; then
1748         case "`echo foo|tr '\012' x 2>/dev/null`" in
1749         foox) trnl='\012' ;;
1750         esac
1751 fi
1752 if test X"$trnl" = X; then
1753         cat <<EOM >&2
1754
1755 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1756
1757 EOM
1758         exit 1
1759 fi
1760
1761 : compute the number of columns on the terminal for proper question formatting
1762 case "$COLUMNS" in
1763 '') COLUMNS='80';;
1764 esac
1765
1766 : set up the echo used in my read
1767 myecho="case \"\$xxxm\" in
1768 '') echo $n \"\$rp $c\" >&4;;
1769 *) case \"\$rp\" in
1770         '') echo $n \"[\$xxxm] $c\";;
1771         *)
1772                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1773                         echo \"\$rp\" >&4
1774                         echo $n \"[\$xxxm] $c\" >&4
1775                 else
1776                         echo $n \"\$rp [\$xxxm] $c\" >&4
1777                 fi
1778                 ;;
1779         esac;;
1780 esac"
1781
1782 : now set up to do reads with possible shell escape and default assignment
1783 cat <<EOSC >myread
1784 $startsh
1785 xxxm=\$dflt
1786 $myecho
1787 ans='!'
1788 case "\$fastread" in
1789 yes) case "\$dflt" in
1790         '') ;;
1791         *) ans='';
1792                 case "\$silent-\$rp" in
1793                 true-) ;;
1794                 *) echo " " >&4;;
1795                 esac;;
1796         esac;;
1797 *) case "\$silent" in
1798         true) case "\$rp" in
1799                 '') ans='';;
1800                 esac;;
1801         esac;;
1802 esac
1803 while expr "X\$ans" : "X!" >/dev/null; do
1804         read answ
1805         set x \$xxxm
1806         shift
1807         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1808         case  "\$answ" in
1809         "!")
1810                 sh 1>&4
1811                 echo " "
1812                 $myecho
1813                 ;;
1814         !*)
1815                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1816                 shift
1817                 sh 1>&4 -c "\$*"
1818                 echo " "
1819                 $myecho
1820                 ;;
1821         "\$ans")
1822                 case "\$ans" in
1823                 \\&*)
1824                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1825                         shift
1826                         case "\$1" in
1827                         -d)
1828                                 fastread=yes
1829                                 echo "(OK, I'll run with -d after this question.)" >&4
1830                                 ;;
1831                         -*)
1832                                 echo "*** Sorry, \$1 not supported yet." >&4
1833                                 ;;
1834                         esac
1835                         $myecho
1836                         ans=!
1837                         ;;
1838                 esac;;
1839         *)
1840                 case "\$aok" in
1841                 y)
1842                         echo "*** Substitution done -- please confirm."
1843                         xxxm="\$ans"
1844                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1845                         xxxm="\$ans"
1846                         ans=!
1847                         ;;
1848                 *)
1849                         echo "*** Error -- try again."
1850                         ans=!
1851                         ;;
1852                 esac
1853                 $myecho
1854                 ;;
1855         esac
1856         case "\$ans\$xxxm\$nostick" in
1857         '')
1858                 ans=!
1859                 $myecho
1860                 ;;
1861         esac
1862 done
1863 case "\$ans" in
1864 '') ans="\$xxxm";;
1865 esac
1866 EOSC
1867
1868 : create .config dir to save info across Configure sessions
1869 test -d ../.config || mkdir ../.config
1870 cat >../.config/README <<EOF
1871 This directory created by Configure to save information that should
1872 persist across sessions for $package.
1873
1874 You may safely delete it if you wish.
1875 EOF
1876
1877 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1878 case "$usedevel" in
1879 $define|true|[yY]*) ;;
1880 *) case "$xversion" in
1881    *[13579])
1882         cat >&4 <<EOH
1883 *** WHOA THERE!!! ***
1884
1885     This is an UNSTABLE DEVELOPMENT release.
1886     The version of this $package distribution is $xversion, that is, odd,
1887     (as opposed to even) and that signifies a development release.
1888     If you want a maintenance release, you want an even-numbered version.
1889
1890     Do ***NOT*** install this into production use.
1891     Data corruption and crashes are possible.
1892
1893     It is most seriously suggested that you do not continue any further
1894     unless you want to help in developing and debugging Perl.
1895
1896     If you *still* want to build perl, you can answer 'y' now,
1897     or pass -Dusedevel to Configure.
1898
1899 EOH
1900         rp='Do you really want to continue?'
1901         dflt='n'
1902         . ./myread
1903         case "$ans" in
1904         [yY]) echo >&4 "Okay, continuing."
1905               usedevel="$define" ;;
1906         *) echo >&4 "Okay, bye."
1907            exit 1
1908            ;;
1909         esac
1910         ;;
1911     esac
1912     ;;
1913 esac
1914 case "$usedevel" in
1915 $define|true|[yY]*)
1916         case "$versiononly" in
1917         '') versiononly="$define" ;;
1918         esac
1919         case "$installusrbinperl" in
1920         '') installusrbinperl="$undef" ;;
1921         esac
1922         ;;
1923 esac
1924
1925 : general instructions
1926 needman=true
1927 firsttime=true
1928 user=`(logname) 2>/dev/null`
1929 case "$user" in
1930 '') user=`whoami 2>&1`;;
1931 esac
1932 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1933         firsttime=false
1934         echo " "
1935         rp='Would you like to see the instructions?'
1936         dflt=n
1937         . ./myread
1938         case "$ans" in
1939         [yY]*) ;;
1940         *) needman=false;;
1941         esac
1942 fi
1943 if $needman; then
1944         cat <<EOH
1945
1946 This installation shell script will examine your system and ask you questions
1947 to determine how the perl5 package should be installed. If you get
1948 stuck on a question, you may use a ! shell escape to start a subshell or
1949 execute a command.  Many of the questions will have default answers in square
1950 brackets; typing carriage return will give you the default.
1951
1952 On some of the questions which ask for file or directory names you are allowed
1953 to use the ~name construct to specify the login directory belonging to "name",
1954 even if you don't have a shell which knows about that.  Questions where this is
1955 allowed will be marked "(~name ok)".
1956
1957 EOH
1958         rp=''
1959         dflt='Type carriage return to continue'
1960         . ./myread
1961         cat <<'EOH'
1962
1963 The prompter used in this script allows you to use shell variables and
1964 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1965 in the default answer, as if the default line was a set of arguments given to a
1966 script shell.  This means you may also use $* to repeat the whole default line,
1967 so you do not have to re-type everything to add something to the default.
1968
1969 Everytime there is a substitution, you will have to confirm.  If there is an
1970 error (e.g. an unmatched backtick), the default answer will remain unchanged
1971 and you will be prompted again.
1972
1973 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1974 the questions and use the computed defaults (or the previous answers if there
1975 was already a config.sh file). Type 'Configure -h' for a list of options.
1976 You may also start interactively and then answer '& -d' at any prompt to turn
1977 on the non-interactive behaviour for the remainder of the execution.
1978
1979 EOH
1980         . ./myread
1981         cat <<EOH
1982
1983 Much effort has been expended to ensure that this shell script will run on any
1984 Unix system.  If despite that it blows up on yours, your best bet is to edit
1985 Configure and run it again.  If you can't run Configure for some reason,
1986 you'll have to generate a config.sh file by hand.  Whatever problems you
1987 have, let me (perlbug@perl.org) know how I blew it.
1988
1989 This installation script affects things in two ways:
1990
1991 1) it may do direct variable substitutions on some of the files included
1992    in this kit.
1993 2) it builds a config.h file for inclusion in C programs.  You may edit
1994    any of these files as the need arises after running this script.
1995
1996 If you make a mistake on a question, there is no easy way to back up to it
1997 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1998 files.  Configure will offer to let you do this before it runs the SH files.
1999
2000 EOH
2001         dflt='Type carriage return to continue'
2002         . ./myread
2003         case "$firsttime" in
2004         true) echo $user >>../.config/instruct;;
2005         esac
2006 fi
2007
2008 : find out where common programs are
2009 echo " "
2010 echo "Locating common programs..." >&4
2011 cat <<EOSC >loc
2012 $startsh
2013 case \$# in
2014 0) exit 1;;
2015 esac
2016 thing=\$1
2017 shift
2018 dflt=\$1
2019 shift
2020 for dir in \$*; do
2021         case "\$thing" in
2022         .)
2023         if test -d \$dir/\$thing; then
2024                 echo \$dir
2025                 exit 0
2026         fi
2027         ;;
2028         *)
2029         for thisthing in \$dir/\$thing; do
2030                 : just loop through to pick last item
2031         done
2032         if test -f \$thisthing; then
2033                 echo \$thisthing
2034                 exit 0
2035         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2036                 echo \$thisthing
2037                 exit 0
2038         elif test -f \$dir/\$thing.exe; then
2039                 if test -n "$DJGPP"; then
2040                         echo \$dir/\$thing.exe
2041                 else
2042                         : on Eunice apparently
2043                         echo \$dir/\$thing
2044                 fi
2045                 exit 0
2046         fi
2047         ;;
2048         esac
2049 done
2050 echo \$dflt
2051 exit 1
2052 EOSC
2053 chmod +x loc
2054 $eunicefix loc
2055 loclist="
2056 awk
2057 cat
2058 chmod
2059 comm
2060 cp
2061 echo
2062 expr
2063 grep
2064 ls
2065 mkdir
2066 rm
2067 sed
2068 sort
2069 touch
2070 tr
2071 uniq
2072 "
2073 trylist="
2074 Mcc
2075 ar
2076 bison
2077 byacc
2078 cpp
2079 csh
2080 date
2081 egrep
2082 gmake
2083 gzip
2084 less
2085 ln
2086 make
2087 more
2088 nm
2089 nroff
2090 pg
2091 test
2092 uname
2093 zip
2094 "
2095 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2096 pth="$pth /lib /usr/lib"
2097 for file in $loclist; do
2098         eval xxx=\$$file
2099         case "$xxx" in
2100         /*|?:[\\/]*)
2101                 if test -f "$xxx"; then
2102                         : ok
2103                 else
2104                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2105                         xxx=`./loc $file $file $pth`
2106                 fi
2107                 ;;
2108         '') xxx=`./loc $file $file $pth`;;
2109         *) xxx=`./loc $xxx $xxx $pth`;;
2110         esac
2111         eval $file=$xxx$_exe
2112         eval _$file=$xxx
2113         case "$xxx" in
2114         /*)
2115                 echo $file is in $xxx.
2116                 ;;
2117         ?:[\\/]*)
2118                 echo $file is in $xxx.
2119                 ;;
2120         *)
2121                 echo "I don't know where '$file' is, and my life depends on it." >&4
2122                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2123                 exit 1
2124                 ;;
2125         esac
2126 done
2127 echo " "
2128 echo "Don't worry if any of the following aren't found..."
2129 say=offhand
2130 for file in $trylist; do
2131         eval xxx=\$$file
2132         case "$xxx" in
2133         /*|?:[\\/]*)
2134                 if test -f "$xxx"; then
2135                         : ok
2136                 else
2137                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2138                         xxx=`./loc $file $file $pth`
2139                 fi
2140                 ;;
2141         '') xxx=`./loc $file $file $pth`;;
2142         *) xxx=`./loc $xxx $xxx $pth`;;
2143         esac
2144         eval $file=$xxx
2145         eval _$file=$xxx
2146         case "$xxx" in
2147         /*)
2148                 echo $file is in $xxx.
2149                 ;;
2150         ?:[\\/]*)
2151                 echo $file is in $xxx.
2152                 ;;
2153         *)
2154                 echo "I don't see $file out there, $say."
2155                 say=either
2156                 ;;
2157         esac
2158 done
2159 case "$egrep" in
2160 egrep)
2161         echo "Substituting grep for egrep."
2162         egrep=$grep
2163         _egrep=$grep
2164         ;;
2165 esac
2166 case "$ln" in
2167 ln)
2168         echo "Substituting cp for ln."
2169         ln=$cp
2170         _ln=$cp
2171         ;;
2172 esac
2173 case "$make" in
2174 make)   
2175         case "$gmake" in
2176         gmake)
2177         echo "I can't find make or gmake, and my life depends on it." >&4
2178         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2179         exit 1
2180         ;;
2181         esac
2182         ;;
2183 esac    
2184 case "$gmake" in
2185 gmake)  ;;
2186 *)      # We can't have osname yet.
2187         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2188                 # Assume that gmake, if found, is definitely GNU make
2189                 # and prefer it over the system make.
2190                 echo "Substituting gmake for make."
2191                 make=$gmake
2192                 _make=$gmake
2193         fi
2194         ;;
2195 esac
2196 case "$test" in
2197 test)
2198         echo "Hopefully test is built into your sh."
2199         ;;
2200 *)
2201         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2202                 echo "Using the test built into your sh."
2203                 test=test
2204                 _test=test
2205         fi
2206         ;;
2207 esac
2208 case "$echo" in
2209 echo)
2210         echo "Hopefully echo is built into your sh."
2211         ;;
2212 '') ;;
2213 *)
2214         echo " "
2215 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2216         $echo $n "hi there$c" >foo1
2217         echo $n "hi there$c" >foo2
2218         if cmp foo1 foo2 >/dev/null 2>&1; then
2219                 echo "They are compatible.  In fact, they may be identical."
2220         else
2221                 case "$n" in
2222                 '-n') n='' c='\c';;
2223                 *) n='-n' c='';;
2224                 esac
2225                 cat <<FOO
2226 They are not compatible!  You are probably running ksh on a non-USG system.
2227 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2228 have echo built in and we may have to run some Bourne shell scripts.  That
2229 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2230
2231 FOO
2232                 $echo $n "The star should be here-->$c"
2233                 $echo "*"
2234         fi
2235         $rm -f foo1 foo2
2236         ;;
2237 esac
2238
2239 cat <<EOS >checkcc
2240 $startsh
2241 EOS
2242 cat <<'EOSC' >>checkcc
2243 case "$cc" in
2244 '') ;;
2245 *)  $rm -f try try.*
2246     $cat >try.c <<EOM
2247 int main(int argc, char *argv[]) {
2248   return 0;
2249 }
2250 EOM
2251     if $cc -o try $ccflags $ldflags try.c; then
2252        :
2253     else
2254         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2255         despair=yes
2256         trygcc=yes
2257         case "$cc" in
2258         *gcc*) trygcc=no ;;
2259         esac
2260         case "`$cc -v -c try.c 2>&1`" in
2261         *gcc*) trygcc=no ;;
2262         esac
2263         if $test X"$trygcc" = Xyes; then
2264             if gcc -o try -c try.c; then
2265                 echo " "
2266                 echo "You seem to have a working gcc, though." >&4
2267                 rp="Would you like to use it?"
2268                 dflt=y
2269                 if $test -f myread; then
2270                     . ./myread
2271                 else
2272                     if $test -f UU/myread; then
2273                         . ./UU/myread
2274                     else
2275                         echo "Cannot find myread, sorry.  Aborting." >&2
2276                         exit 1
2277                     fi
2278                 fi  
2279                 case "$ans" in
2280                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2281                 esac
2282             fi
2283         fi
2284         if $test X"$despair" = Xyes; then
2285             $cat >&4 <<EOM
2286 You need to find a working C compiler.
2287 Either (purchase and) install the C compiler supplied by your OS vendor,
2288 or for a free C compiler try http://gcc.gnu.org/
2289 I cannot continue any further, aborting.
2290 EOM
2291             exit 1
2292         fi
2293     fi
2294     $rm -f try try.*
2295     ;;
2296 esac
2297 EOSC
2298
2299 : determine whether symbolic links are supported
2300 echo " "
2301 $touch blurfl
2302 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2303         echo "Symbolic links are supported." >&4
2304         lns="$ln -s"
2305 else
2306         echo "Symbolic links are NOT supported." >&4
2307         lns="$ln"
2308 fi
2309 $rm -f blurfl sym
2310
2311 : determine whether symbolic links are supported
2312 echo " "
2313 case "$lns" in
2314 *"ln -s")
2315         echo "Checking how to test for symbolic links..." >&4
2316         $lns blurfl sym
2317         if $test "X$issymlink" = X; then
2318                 case "$newsh" in
2319                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2320                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2321                 esac
2322                 if test $? = 0; then
2323                         issymlink="test -h"
2324                 else
2325                         echo "Your builtin 'test -h' may be broken." >&4
2326                         case "$test" in
2327                         /*)     ;;
2328                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2329                                 for p in $pth
2330                                 do
2331                                         if test -f "$p/$test"; then
2332                                                 test="$p/$test"
2333                                                 break
2334                                         fi
2335                                 done
2336                                 ;;
2337                         esac
2338                         case "$test" in
2339                         /*)
2340                                 echo "Trying external '$test -h'." >&4
2341                                 issymlink="$test -h"
2342                                 if $test ! -h sym >/dev/null 2>&1; then
2343                                         echo "External '$test -h' is broken, too." >&4
2344                                         issymlink=''
2345                                 fi
2346                                 ;;
2347                         *)      issymlink='' ;;
2348                         esac
2349                 fi              
2350         fi
2351         if $test "X$issymlink" = X; then
2352                 if $test -L sym 2>/dev/null; then
2353                         issymlink="$test -L"
2354                         echo "The builtin '$test -L' worked." >&4
2355                 fi
2356         fi
2357         if $test "X$issymlink" != X; then
2358                 echo "You can test for symbolic links with '$issymlink'." >&4
2359         else
2360                 echo "I do not know how you can test for symbolic links." >&4
2361         fi
2362         $rm -f blurfl sym
2363         ;;
2364 *)      echo "No symbolic links, so not testing for their testing..." >&4
2365         ;;
2366 esac
2367 echo " "
2368
2369
2370 case "$mksymlinks" in
2371 $define|true|[yY]*)
2372         case "$src" in
2373         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2374                 exit 1
2375                 ;;
2376         *)      case "$lns:$issymlink" in
2377                 *"ln -s:"*"test -"?)
2378                         echo "Creating the symbolic links..." >&4
2379                         echo "(First creating the subdirectories...)" >&4
2380                         cd ..
2381                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2382                                 read directory
2383                                 test -z "$directory" && break
2384                                 mkdir -p $directory
2385                         done
2386                         # Sanity check 1.
2387                         if test ! -d t/base; then
2388                                 echo "Failed to create the subdirectories.  Aborting." >&4
2389                                 exit 1
2390                         fi
2391                         echo "(Then creating the symlinks...)" >&4
2392                         awk '{print $1}' $src/MANIFEST | while true; do
2393                                 read filename
2394                                 test -z "$filename" && break
2395                                 if test -f $filename; then
2396                                         if $issymlink $filename; then
2397                                                 rm -f $filename
2398                                         fi
2399                                 fi
2400                                 if test -f $filename; then
2401                                         echo "$filename already exists, not symlinking."
2402                                 else
2403                                         ln -s $src/$filename $filename
2404                                 fi
2405                         done
2406                         # Sanity check 2.
2407                         if test ! -f t/base/lex.t; then
2408                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2409                                 exit 1
2410                         fi
2411                         cd UU
2412                         ;;
2413                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2414                         ;;
2415                 esac
2416                 ;;
2417         esac
2418         ;;
2419 esac
2420
2421
2422 case "$usecrosscompile" in
2423 $define|true|[yY]*)
2424         $echo "Cross-compiling..."
2425         croak=''
2426         case "$cc" in
2427         *-*-gcc) # A cross-compiling gcc, probably.
2428             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2429             ar=$targetarch-ar
2430             # leave out ld, choosing it is more complex
2431             nm=$targetarch-nm
2432             ranlib=$targetarch-ranlib
2433             $echo 'extern int foo;' > try.c
2434             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2435             shift
2436             if $test $# -gt 0; then
2437                 incpth="$incpth $*"
2438                 incpth="`$echo $incpth|$sed 's/^ //'`"
2439                 echo "Guessing incpth '$incpth'." >&4
2440                 for i in $*; do
2441                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2442                     if $test -d $j; then
2443                         libpth="$libpth $j"
2444                     fi
2445                 done   
2446                 libpth="`$echo $libpth|$sed 's/^ //'`"
2447                 echo "Guessing libpth '$libpth'." >&4
2448             fi
2449             $rm -f try.c
2450             ;;
2451         esac
2452         case "$targetarch" in
2453         '') echo "Targetarch not defined." >&4; croak=y ;;
2454         *)  echo "Using targetarch $targetarch." >&4 ;;
2455         esac
2456         case "$incpth" in
2457         '') echo "Incpth not defined." >&4; croak=y ;;
2458         *)  echo "Using incpth '$incpth'." >&4 ;;
2459         esac
2460         case "$libpth" in
2461         '') echo "Libpth not defined." >&4; croak=y ;;
2462         *)  echo "Using libpth '$libpth'." >&4 ;;
2463         esac
2464         case "$usrinc" in
2465         '') for i in $incpth; do
2466                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2467                     usrinc=$i
2468                     echo "Guessing usrinc $usrinc." >&4
2469                     break
2470                 fi
2471             done
2472             case "$usrinc" in
2473             '') echo "Usrinc not defined." >&4; croak=y ;;
2474             esac
2475             ;;
2476         *)  echo "Using usrinc $usrinc." >&4 ;;
2477         esac
2478         case "$targethost" in
2479         '') echo "Targethost not defined." >&4; croak=y ;;
2480         *)  echo "Using targethost $targethost." >&4
2481         esac
2482         locincpth=' '
2483         loclibpth=' '
2484         case "$croak" in
2485         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2486         esac
2487         case "$src" in
2488         /*) run=$src/Cross/run
2489             targetmkdir=$src/Cross/mkdir
2490             to=$src/Cross/to
2491             from=$src/Cross/from
2492             ;;
2493         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2494             run=$pwd/Cross/run
2495             targetmkdir=$pwd/Cross/mkdir
2496             to=$pwd/Cross/to
2497             from=$pwd/Cross/from
2498             ;;
2499         esac
2500         case "$targetrun" in
2501         '') targetrun=ssh ;;
2502         esac
2503         case "$targetto" in
2504         '') targetto=scp ;;
2505         esac
2506         case "$targetfrom" in
2507         '') targetfrom=scp ;;
2508         esac
2509         run=$run-$targetrun
2510         to=$to-$targetto
2511         from=$from-$targetfrom
2512         case "$targetdir" in
2513         '')  targetdir=/tmp
2514              echo "Guessing targetdir $targetdir." >&4
2515              ;;
2516         esac
2517         case "$targetuser" in
2518         '')  targetuser=root
2519              echo "Guessing targetuser $targetuser." >&4
2520              ;;
2521         esac
2522         case "$targetfrom" in
2523         scp)    q=-q ;;
2524         *)      q='' ;;
2525         esac
2526         case "$targetrun" in
2527         ssh|rsh)
2528             cat >$run <<EOF
2529 #!/bin/sh
2530 case "\$1" in
2531 -cwd)
2532   shift
2533   cwd=\$1
2534   shift
2535   ;;
2536 esac
2537 case "\$cwd" in
2538 '') cwd=$targetdir ;;
2539 esac
2540 exe=\$1
2541 shift
2542 if $test ! -f \$exe.xok; then
2543   $to \$exe
2544   $touch \$exe.xok
2545 fi
2546 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2547 EOF
2548             ;;
2549         *)  echo "Unknown targetrun '$targetrun'" >&4
2550             exit 1
2551             ;;
2552         esac
2553         case "$targetmkdir" in
2554         */Cross/mkdir)
2555             cat >$targetmkdir <<EOF
2556 #!/bin/sh
2557 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2558 EOF
2559             $chmod a+rx $targetmkdir
2560             ;;
2561         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2562             exit 1
2563             ;;
2564         esac
2565         case "$targetto" in
2566         scp|rcp)
2567             cat >$to <<EOF
2568 #!/bin/sh
2569 for f in \$@
2570 do
2571   case "\$f" in
2572   /*)
2573     $targetmkdir \`dirname \$f\`
2574     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2575     ;;
2576   *)
2577     $targetmkdir $targetdir/\`dirname \$f\`
2578     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2579     ;;
2580   esac
2581 done
2582 exit 0
2583 EOF
2584             ;;
2585         cp) cat >$to <<EOF
2586 #!/bin/sh
2587 for f in \$@
2588 do
2589   case "\$f" in
2590   /*)
2591     $mkdir -p $targetdir/\`dirname \$f\`
2592     $cp \$f $targetdir/\$f || exit 1
2593     ;;
2594   *)
2595     $targetmkdir $targetdir/\`dirname \$f\`
2596     $cp \$f $targetdir/\$f || exit 1
2597     ;;
2598   esac
2599 done
2600 exit 0
2601 EOF
2602             ;;
2603         *)  echo "Unknown targetto '$targetto'" >&4
2604             exit 1
2605             ;;
2606         esac
2607         case "$targetfrom" in
2608         scp|rcp)
2609           cat >$from <<EOF
2610 #!/bin/sh
2611 for f in \$@
2612 do
2613   $rm -f \$f
2614   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2615 done
2616 exit 0
2617 EOF
2618             ;;
2619         cp) cat >$from <<EOF
2620 #!/bin/sh
2621 for f in \$@
2622 do
2623   $rm -f \$f
2624   cp $targetdir/\$f . || exit 1
2625 done
2626 exit 0
2627 EOF
2628             ;;
2629         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2630             exit 1
2631             ;;
2632         esac
2633         if $test ! -f $run; then
2634             echo "Target 'run' script '$run' not found." >&4
2635         else
2636             $chmod a+rx $run
2637         fi
2638         if $test ! -f $to; then
2639             echo "Target 'to' script '$to' not found." >&4
2640         else
2641             $chmod a+rx $to
2642         fi
2643         if $test ! -f $from; then
2644             echo "Target 'from' script '$from' not found." >&4
2645         else
2646             $chmod a+rx $from
2647         fi
2648         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2649             exit 1
2650         fi
2651         cat >&4 <<EOF
2652 Using '$run' for remote execution,
2653 and '$from' and '$to'
2654 for remote file transfer.
2655 EOF
2656         ;;
2657 *)      run=''
2658         to=:
2659         from=:
2660         usecrosscompile='undef'
2661         targetarch=''
2662         ;;
2663 esac
2664
2665 : see whether [:lower:] and [:upper:] are supported character classes
2666 echo " "
2667 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2668 ABYZ)
2669         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2670         up='[:upper:]'
2671         low='[:lower:]'
2672         ;;
2673 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2674         # (0xc9 and 0xd1), therefore that is a nice testing point.
2675         if test "X$up" = X -o "X$low" = X; then
2676             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2677             ij) up='[A-Z]'
2678                 low='[a-z]'
2679                 ;;
2680             esac
2681         fi
2682         if test "X$up" = X -o "X$low" = X; then
2683             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2684             ij) up='A-Z'
2685                 low='a-z'
2686                 ;;
2687             esac
2688         fi
2689         if test "X$up" = X -o "X$low" = X; then
2690             case "`echo IJ | od -x 2>/dev/null`" in
2691             *C9D1*|*c9d1*)
2692                 echo "Hey, this might be EBCDIC." >&4
2693                 if test "X$up" = X -o "X$low" = X; then
2694                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2695                     ij) up='[A-IJ-RS-Z]'
2696                         low='[a-ij-rs-z]'
2697                         ;;
2698                     esac
2699                 fi
2700                 if test "X$up" = X -o "X$low" = X; then
2701                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2702                     ij) up='A-IJ-RS-Z'
2703                         low='a-ij-rs-z'
2704                         ;;
2705                     esac
2706                 fi
2707                 ;;
2708             esac
2709         fi
2710 esac
2711 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2712 ij)
2713     echo "Using $up and $low to convert case." >&4
2714     ;;
2715 *)
2716     echo "I don't know how to translate letters from upper to lower case." >&4
2717     echo "Your tr is not acting any way I know of." >&4
2718     exit 1
2719     ;;
2720 esac
2721 : set up the translation script tr, must be called with ./tr of course
2722 cat >tr <<EOSC
2723 $startsh
2724 case "\$1\$2" in
2725 '[A-Z][a-z]') exec $tr '$up' '$low';;
2726 '[a-z][A-Z]') exec $tr '$low' '$up';;
2727 esac
2728 exec $tr "\$@"
2729 EOSC
2730 chmod +x tr
2731 $eunicefix tr
2732
2733 : Try to determine whether config.sh was made on this system
2734 case "$config_sh" in
2735 '')
2736 myuname=`$uname -a 2>/dev/null`
2737 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2738 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2739 # because the A-Z/a-z are not consecutive.
2740 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2741         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2742 newmyuname="$myuname"
2743 dflt=n
2744 case "$knowitall" in
2745 '')
2746         if test -f ../config.sh; then
2747                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2748                         eval "`grep myuname= ../config.sh`"
2749                 fi
2750                 if test "X$myuname" = "X$newmyuname"; then
2751                         dflt=y
2752                 fi
2753         fi
2754         ;;
2755 *) dflt=y;;
2756 esac
2757
2758 : Get old answers from old config file if Configure was run on the
2759 : same system, otherwise use the hints.
2760 hint=default
2761 cd ..
2762 if test -f config.sh; then
2763         echo " "
2764         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2765         . UU/myread
2766         case "$ans" in
2767         n*|N*) echo "OK, I'll ignore it."
2768                 mv config.sh config.sh.old
2769                 myuname="$newmyuname"
2770                 ;;
2771         *)  echo "Fetching default answers from your old config.sh file..." >&4
2772                 tmp_n="$n"
2773                 tmp_c="$c"
2774                 tmp_sh="$sh"
2775                 . ./config.sh
2776                 cp config.sh UU
2777                 n="$tmp_n"
2778                 c="$tmp_c"
2779                 : Older versions did not always set $sh.  Catch re-use of such
2780                 : an old config.sh.
2781                 case "$sh" in
2782                 '') sh="$tmp_sh" ;;
2783                 esac
2784                 hint=previous
2785                 ;;
2786         esac
2787 fi
2788 . ./UU/checkcc
2789 if test ! -f config.sh; then
2790         $cat <<EOM
2791
2792 First time through, eh?  I have some defaults handy for some systems
2793 that need some extra help getting the Configure answers right:
2794
2795 EOM
2796         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2797         dflt=''
2798         : Half the following guesses are probably wrong... If you have better
2799         : tests or hints, please send them to perlbug@perl.org
2800         : The metaconfig authors would also appreciate a copy...
2801         $test -f /irix && osname=irix
2802         $test -f /xenix && osname=sco_xenix
2803         $test -f /dynix && osname=dynix
2804         $test -f /dnix && osname=dnix
2805         $test -f /lynx.os && osname=lynxos
2806         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2807         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2808         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2809         $test -f /bin/mips && /bin/mips && osname=mips
2810         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2811                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2812         $test -d /usr/apollo/bin && osname=apollo
2813         $test -f /etc/saf/_sactab && osname=svr4
2814         $test -d /usr/include/minix && osname=minix
2815         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2816         if $test -d /MachTen -o -d /MachTen_Folder; then
2817                 osname=machten
2818                 if $test -x /sbin/version; then
2819                         osvers=`/sbin/version | $awk '{print $2}' |
2820                         $sed -e 's/[A-Za-z]$//'`
2821                 elif $test -x /usr/etc/version; then
2822                         osvers=`/usr/etc/version | $awk '{print $2}' |
2823                         $sed -e 's/[A-Za-z]$//'`
2824                 else
2825                         osvers="$2.$3"
2826                 fi
2827         fi
2828
2829         $test -f /sys/posix.dll &&
2830                 $test -f /usr/bin/what &&
2831                 set X `/usr/bin/what /sys/posix.dll` &&
2832                 $test "$3" = UWIN &&
2833                 osname=uwin &&
2834                 osvers="$5"
2835
2836         if $test -f $uname; then
2837                 set X $myuname
2838                 shift
2839
2840                 case "$5" in
2841                 fps*) osname=fps ;;
2842                 mips*)
2843                         case "$4" in
2844                         umips) osname=umips ;;
2845                         *) osname=mips ;;
2846                         esac;;
2847                 [23]100) osname=mips ;;
2848                 next*) osname=next ;;
2849                 i386*)
2850                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2851                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2852                                 osname='sco'
2853                                 osvers=$tmp
2854                         elif $test -f /etc/kconfig; then
2855                                 osname=isc
2856                                 if test "$lns" = "$ln -s"; then
2857                                         osvers=4
2858                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2859                                         osvers=3
2860                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2861                                         osvers=2
2862                                 fi
2863                         fi
2864                         tmp=''
2865                         ;;
2866                 pc*)
2867                         if test -n "$DJGPP"; then
2868                                 osname=dos
2869                                 osvers=djgpp
2870                         fi
2871                         ;;
2872                 esac
2873
2874                 case "$1" in
2875                 aix) osname=aix
2876                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2877                         case "$tmp" in
2878                         'not found') osvers="$4"."$3" ;;
2879                         '<3240'|'<>3240') osvers=3.2.0 ;;
2880                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2881                         '=3250'|'>3250') osvers=3.2.5 ;;
2882                         *) osvers=$tmp;;
2883                         esac
2884                         ;;
2885                 bsd386) osname=bsd386
2886                         osvers=`$uname -r`
2887                         ;;
2888                 cygwin*) osname=cygwin
2889                         osvers="$3"
2890                         ;;
2891                 *dc.osx) osname=dcosx
2892                         osvers="$3"
2893                         ;;
2894                 dnix) osname=dnix
2895                         osvers="$3"
2896                         ;;
2897                 domainos) osname=apollo
2898                         osvers="$3"
2899                         ;;
2900                 dgux) osname=dgux 
2901                         osvers="$3"
2902                         ;;
2903                 dynixptx*) osname=dynixptx
2904                         osvers=`echo "$4"|sed 's/^v//'`
2905                         ;;
2906                 freebsd) osname=freebsd 
2907                         osvers="$3" ;;
2908                 genix) osname=genix ;;
2909                 hp*) osname=hpux 
2910                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2911                         ;;
2912                 irix*) osname=irix
2913                         case "$3" in
2914                         4*) osvers=4 ;;
2915                         5*) osvers=5 ;;
2916                         *)      osvers="$3" ;;
2917                         esac
2918                         ;;
2919                 linux) osname=linux
2920                         case "$3" in
2921                         *)      osvers="$3" ;;
2922                         esac
2923                         ;;
2924                 MiNT) osname=mint
2925                         ;;
2926                 netbsd*) osname=netbsd
2927                         osvers="$3"
2928                         ;;
2929                 news-os) osvers="$3"
2930                         case "$3" in
2931                         4*) osname=newsos4 ;;
2932                         *) osname=newsos ;;
2933                         esac
2934                         ;;
2935                 next*) osname=next ;;
2936                 nonstop-ux) osname=nonstopux ;;
2937                 POSIX-BC | posix-bc ) osname=posix-bc
2938                         osvers="$3"
2939                         ;;
2940                 powerux | power_ux | powermax_os | powermaxos | \
2941                 powerunix | power_unix) osname=powerux
2942                         osvers="$3"
2943                         ;;
2944                 qnx) osname=qnx
2945                         osvers="$4"
2946                         ;;
2947                 solaris) osname=solaris
2948                         case "$3" in
2949                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2950                         *)      osvers="$3" ;;
2951                         esac
2952                         ;;
2953                 sunos) osname=sunos
2954                         case "$3" in
2955                         5*) osname=solaris
2956                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2957                         *)      osvers="$3" ;;
2958                         esac
2959                         ;;
2960                 titanos) osname=titanos
2961                         case "$3" in
2962                         1*) osvers=1 ;;
2963                         2*) osvers=2 ;;
2964                         3*) osvers=3 ;;
2965                         4*) osvers=4 ;;
2966                         *)      osvers="$3" ;;
2967                         esac
2968                         ;;
2969                 ultrix) osname=ultrix
2970                         osvers="$3"
2971                         ;;
2972                 osf1|mls+)      case "$5" in
2973                                 alpha)
2974                                         osname=dec_osf
2975                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2976                                         case "$osvers" in
2977                                         [1-9].[0-9]*) ;;
2978                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2979                                         esac
2980                                         ;;
2981                         hp*)    osname=hp_osf1  ;;
2982                         mips)   osname=mips_osf1 ;;
2983                         esac
2984                         ;;
2985                 unixware) osname=svr5
2986                         osvers="$4"
2987                         ;;
2988                 uts)    osname=uts
2989                         osvers="$3"
2990                         ;;
2991                 vos) osvers="$3"
2992                         ;;
2993                 $2) case "$osname" in
2994                         *isc*) ;;
2995                         *freebsd*) ;;
2996                         svr*)
2997                                 : svr4.x or possibly later
2998                                 case "svr$3" in 
2999                                 ${osname}*)
3000                                         osname=svr$3
3001                                         osvers=$4
3002                                         ;;
3003                                 esac
3004                                 case "$osname" in
3005                                 svr4.0)
3006                                         : Check for ESIX
3007                                         if test -f /stand/boot ; then
3008                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3009                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3010                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3011                                                         if test -n "$isesix"; then
3012                                                                 osname=esix4
3013                                                         fi
3014                                                 fi
3015                                         fi
3016                                         ;;
3017                                 esac
3018                                 ;;
3019                         *)      if test -f /etc/systemid; then
3020                                         osname=sco
3021                                         set `echo $3 | $sed 's/\./ /g'` $4
3022                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3023                                                 osvers=$1.$2.$3
3024                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3025                                                 osvers=$1.$2
3026                                         elif $test -f $src/hints/sco_$1.sh; then
3027                                                 osvers=$1
3028                                         fi
3029                                 else
3030                                         case "$osname" in
3031                                         '') : Still unknown.  Probably a generic Sys V.
3032                                                 osname="sysv"
3033                                                 osvers="$3"
3034                                                 ;;
3035                                         esac
3036                                 fi
3037                                 ;;
3038                         esac
3039                         ;;
3040                 *)      case "$osname" in
3041                         '') : Still unknown.  Probably a generic BSD.
3042                                 osname="$1"
3043                                 osvers="$3"
3044                                 ;;
3045                         esac
3046                         ;;
3047                 esac
3048         else
3049                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3050                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3051                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3052                                 osname=news_os
3053                         fi
3054                         $rm -f UU/kernel.what
3055                 elif test -d c:/.; then
3056                         set X $myuname
3057                         osname=os2
3058                         osvers="$5"
3059                 fi
3060         fi
3061         
3062         case "$targetarch" in
3063         '') ;;
3064         *)  hostarch=$osname
3065             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3066             osvers=''
3067             ;;
3068         esac
3069
3070         : Now look for a hint file osname_osvers, unless one has been
3071         : specified already.
3072         case "$hintfile" in
3073         ''|' ')
3074                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3075                 : Also try without trailing minor version numbers.
3076                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3077                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3078                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3079                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3080                 case "$file" in
3081                 '') dflt=none ;;
3082                 *)  case "$osvers" in
3083                         '') dflt=$file
3084                                 ;;
3085                         *)  if $test -f $src/hints/$file.sh ; then
3086                                         dflt=$file
3087                                 elif $test -f $src/hints/$xfile.sh ; then
3088                                         dflt=$xfile
3089                                 elif $test -f $src/hints/$xxfile.sh ; then
3090                                         dflt=$xxfile
3091                                 elif $test -f $src/hints/$xxxfile.sh ; then
3092                                         dflt=$xxxfile
3093                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3094                                         dflt=$xxxxfile
3095                                 elif $test -f "$src/hints/${osname}.sh" ; then
3096                                         dflt="${osname}"
3097                                 else
3098                                         dflt=none
3099                                 fi
3100                                 ;;
3101                         esac
3102                         ;;
3103                 esac
3104                 if $test -f Policy.sh ; then
3105                         case "$dflt" in
3106                         *Policy*) ;;
3107                         none) dflt="Policy" ;;
3108                         *) dflt="Policy $dflt" ;;
3109                         esac
3110                 fi
3111                 ;;
3112         *)
3113                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3114                 ;;
3115         esac
3116
3117         if $test -f Policy.sh ; then
3118                 $cat <<EOM
3119
3120 There's also a Policy hint file available, which should make the
3121 site-specific (policy) questions easier to answer.
3122 EOM
3123
3124         fi
3125
3126         $cat <<EOM
3127
3128 You may give one or more space-separated answers, or "none" if appropriate.
3129 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3130 is a good thing.  DO NOT give a wrong version or a wrong OS.
3131
3132 EOM
3133
3134         rp="Which of these apply, if any?"
3135         . UU/myread
3136         tans=$ans
3137         for file in $tans; do
3138                 if $test X$file = XPolicy -a -f Policy.sh; then
3139                         . Policy.sh
3140                         $cat Policy.sh >> UU/config.sh
3141                 elif $test -f $src/hints/$file.sh; then
3142                         . $src/hints/$file.sh
3143                         $cat $src/hints/$file.sh >> UU/config.sh
3144                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3145                         : nothing
3146                 else
3147                         : Give one chance to correct a possible typo.
3148                         echo "$file.sh does not exist"
3149                         dflt=$file
3150                         rp="hint to use instead?"
3151                         . UU/myread
3152                         for file in $ans; do
3153                                 if $test -f "$src/hints/$file.sh"; then
3154                                         . $src/hints/$file.sh
3155                                         $cat $src/hints/$file.sh >> UU/config.sh
3156                                 elif $test X$ans = X -o X$ans = Xnone ; then
3157                                         : nothing
3158                                 else
3159                                         echo "$file.sh does not exist -- ignored."
3160                                 fi
3161                         done
3162                 fi
3163         done
3164
3165         hint=recommended
3166         : Remember our hint file for later.
3167         if $test -f "$src/hints/$file.sh" ; then
3168                 hintfile="$file"
3169         else
3170                 hintfile=''
3171         fi
3172 fi
3173 cd UU
3174 ;;
3175 *)
3176         echo " "
3177         echo "Fetching default answers from $config_sh..." >&4
3178         tmp_n="$n"
3179         tmp_c="$c"
3180         cd ..
3181         cp $config_sh config.sh 2>/dev/null
3182         chmod +w config.sh
3183         . ./config.sh
3184         cd UU
3185         cp ../config.sh .
3186         n="$tmp_n"
3187         c="$tmp_c"
3188         hint=previous
3189         ;;
3190 esac
3191 test "$override" && . ./optdef.sh
3192
3193 : Restore computed paths
3194 for file in $loclist $trylist; do
3195         eval $file="\$_$file"
3196 done
3197
3198 cat << EOM
3199
3200 Configure uses the operating system name and version to set some defaults.
3201 The default value is probably right if the name rings a bell. Otherwise,
3202 since spelling matters for me, either accept the default or answer "none"
3203 to leave it blank.
3204
3205 EOM
3206 case "$osname" in
3207         ''|' ')
3208                 case "$hintfile" in
3209                 ''|' '|none) dflt=none ;;
3210                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3211                 esac
3212                 ;;
3213         *) dflt="$osname" ;;
3214 esac
3215 rp="Operating system name?"
3216 . ./myread
3217 case "$ans" in
3218 none)  osname='' ;;
3219 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3220 esac
3221 echo " "
3222 case "$osvers" in
3223         ''|' ')
3224                 case "$hintfile" in
3225                 ''|' '|none) dflt=none ;;
3226                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3227                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3228                         case "$dflt" in
3229                         ''|' ') dflt=none ;;
3230                         esac
3231                         ;;
3232                 esac
3233                 ;;
3234         *) dflt="$osvers" ;;
3235 esac
3236 rp="Operating system version?"
3237 . ./myread
3238 case "$ans" in
3239 none)  osvers='' ;;
3240 *) osvers="$ans" ;;
3241 esac
3242
3243
3244 . ./posthint.sh
3245
3246 : who configured the system
3247 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3248 cf_by=`(logname) 2>/dev/null`
3249 case "$cf_by" in
3250 "")
3251         cf_by=`(whoami) 2>/dev/null`
3252         case "$cf_by" in
3253         "") cf_by=unknown ;;
3254         esac ;;
3255 esac
3256
3257 : set up the script used to warn in case of inconsistency
3258 cat <<EOS >whoa
3259 $startsh
3260 EOS
3261 cat <<'EOSC' >>whoa
3262 dflt=y
3263 echo " "
3264 echo "*** WHOA THERE!!! ***" >&4
3265 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3266 rp="    Keep the $hint value?"
3267 . ./myread
3268 case "$ans" in
3269 y) td=$was; tu=$was;;
3270 esac
3271 EOSC
3272
3273 : function used to set $1 to $val
3274 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3275 case "$val$was" in
3276 $define$undef) . ./whoa; eval "$var=\$td";;
3277 $undef$define) . ./whoa; eval "$var=\$tu";;
3278 *) eval "$var=$val";;
3279 esac'
3280
3281 case "$usethreads" in
3282 $define|true|[yY]*)     dflt='y';;
3283 *) dflt='n';;
3284 esac
3285 cat <<EOM
3286
3287 Perl can be built to take advantage of threads on some systems.
3288 To do so, Configure can be run with -Dusethreads.
3289
3290 Note that threading is a highly experimental feature, and
3291 some known race conditions still remain.  If you choose to try
3292 it, be very sure to not actually deploy it for production
3293 purposes.  README.threads has more details, and is required
3294 reading if you enable threads.
3295
3296 If this doesn't make any sense to you, just accept the default '$dflt'.
3297 EOM
3298 rp='Build a threading Perl?'
3299 . ./myread
3300 case "$ans" in
3301 y|Y)    val="$define" ;;
3302 *)      val="$undef" ;;
3303 esac
3304 set usethreads
3305 eval $setvar
3306
3307 case "$usethreads" in
3308 $define)
3309         $cat <<EOM
3310
3311 As of 5.5.640, Perl has two different internal threading implementations,
3312 the 5.005 version (5005threads) and an interpreter-based version
3313 (ithreads) that has one interpreter per thread.  Both are very 
3314 experimental.  This arrangement exists to help developers work out
3315 which one is better.
3316
3317 If you're a casual user, you probably don't want interpreter-threads
3318 at this time.  But if you do, the 'threads' module allows their use,
3319 and the 'Thread' module offers an interface to both 5005threads and
3320 ithreads (whichever has been configured).
3321 EOM
3322         : Default to ithreads unless overridden on command line or with
3323         : old config.sh
3324         dflt='y'
3325         case "$use5005threads" in
3326                 $define|true|[yY]*) dflt='n';;
3327         esac
3328         case "$useithreads" in
3329                 $undef|false|[nN]*) dflt='n';;
3330         esac
3331         rp='Use interpreter-based ithreads?'
3332         . ./myread
3333         case "$ans" in
3334         y|Y)    val="$define" ;;
3335         *)      val="$undef" ;;
3336         esac
3337         set useithreads
3338         eval $setvar
3339         : Now set use5005threads to the opposite value.
3340         case "$useithreads" in
3341         $define) val="$undef" ;;
3342         *) val="$define" ;;
3343         esac
3344         set use5005threads
3345         eval $setvar
3346         ;;
3347 *)
3348         useithreads="$undef"
3349         use5005threads="$undef"
3350         ;;
3351 esac
3352
3353 case "$useithreads$use5005threads" in
3354 "$define$define")
3355         $cat >&4 <<EOM
3356
3357 You cannot have both the ithreads and the 5.005 threads enabled
3358 at the same time.  Disabling the 5.005 threads since they are
3359 much less stable than the ithreads.
3360
3361 EOM
3362         use5005threads="$undef"
3363         ;;
3364 esac
3365
3366 case "$d_oldpthreads" in
3367 '')     : Configure tests would be welcome here.  For now, assume undef.
3368         val="$undef" ;;
3369 *)      val="$d_oldpthreads" ;;
3370 esac
3371 set d_oldpthreads
3372 eval $setvar
3373
3374
3375 case "$usethreads" in
3376 "$define"|true|[yY]*)
3377 : Look for a hint-file generated 'call-back-unit'.  If the
3378 : user has specified that a threading perl is to be built,
3379 : we may need to set or change some other defaults.
3380         if $test -f usethreads.cbu; then
3381                 echo "Your platform has some specific hints for threaded builds, using them..."
3382                 . ./usethreads.cbu
3383         else
3384                 $cat <<EOM
3385 (Your platform doesn't have any specific hints for threaded builds.
3386  Assuming POSIX threads, then.)
3387 EOM
3388         fi
3389         ;;
3390 esac
3391
3392 cat <<EOM
3393
3394 Perl can be built so that multiple Perl interpreters can coexist
3395 within the same Perl executable.
3396 EOM
3397
3398 case "$useithreads" in
3399 $define)
3400         cat <<EOM
3401 This multiple interpreter support is required for interpreter-based threads.
3402 EOM
3403         val="$define"
3404         ;;
3405 *)      case "$usemultiplicity" in
3406         $define|true|[yY]*)     dflt='y';;
3407         *) dflt='n';;
3408         esac
3409         echo " "
3410         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3411         rp='Build Perl for multiplicity?'
3412         . ./myread
3413         case "$ans" in
3414         y|Y)    val="$define" ;;
3415         *)      val="$undef" ;;
3416         esac
3417         ;;
3418 esac
3419 set usemultiplicity
3420 eval $setvar
3421
3422
3423 case "$usemorebits" in
3424 "$define"|true|[yY]*)
3425         use64bitint="$define"
3426         uselongdouble="$define"
3427         usemorebits="$define"
3428         ;;
3429 *)      usemorebits="$undef"
3430         ;;
3431 esac
3432
3433 : make some quick guesses about what we are up against
3434 echo " "
3435 $echo $n "Hmm...  $c"
3436 echo exit 1 >bsd
3437 echo exit 1 >usg
3438 echo exit 1 >v7
3439 echo exit 1 >osf1
3440 echo exit 1 >eunice
3441 echo exit 1 >xenix
3442 echo exit 1 >venix
3443 echo exit 1 >os2
3444 d_bsd="$undef"
3445 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3446 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3447 then
3448         echo "Looks kind of like an OSF/1 system, but we'll see..."
3449         echo exit 0 >osf1
3450 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3451         xxx=`./loc addbib blurfl $pth`
3452         if $test -f $xxx; then
3453         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3454                 echo exit 0 >bsd
3455                 echo exit 0 >usg
3456         else
3457                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3458                         echo "Looks kind of like an extended USG system, but we'll see..."
3459                 else
3460                         echo "Looks kind of like a USG system, but we'll see..."
3461                 fi
3462                 echo exit 0 >usg
3463         fi
3464 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3465         echo "Looks kind of like a BSD system, but we'll see..."
3466         d_bsd="$define"
3467         echo exit 0 >bsd
3468 else
3469         echo "Looks kind of like a Version 7 system, but we'll see..."
3470         echo exit 0 >v7
3471 fi
3472 case "$eunicefix" in
3473 *unixtovms*)
3474         $cat <<'EOI'
3475 There is, however, a strange, musty smell in the air that reminds me of
3476 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3477 EOI
3478         echo exit 0 >eunice
3479         d_eunice="$define"
3480 : it so happens the Eunice I know will not run shell scripts in Unix format
3481         ;;
3482 *)
3483         echo " "
3484         echo "Congratulations.  You aren't running Eunice."
3485         d_eunice="$undef"
3486         ;;
3487 esac
3488 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3489 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3490 : semicolon as a patch separator
3491 case "$p_" in
3492 :) ;;
3493 *)
3494         $cat <<'EOI'
3495 I have the feeling something is not exactly right, however...don't tell me...
3496 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3497 (Or you may be running DOS with DJGPP.)
3498 EOI
3499         echo exit 0 >os2
3500         ;;
3501 esac
3502 if test -f /xenix; then
3503         echo "Actually, this looks more like a XENIX system..."
3504         echo exit 0 >xenix
3505         d_xenix="$define"
3506 else
3507         echo " "
3508         echo "It's not Xenix..."
3509         d_xenix="$undef"
3510 fi
3511 chmod +x xenix
3512 $eunicefix xenix
3513 if test -f /venix; then
3514         echo "Actually, this looks more like a VENIX system..."
3515         echo exit 0 >venix
3516 else
3517         echo " "
3518         if ./xenix; then
3519                 : null
3520         else
3521                 echo "Nor is it Venix..."
3522         fi
3523 fi
3524 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3525 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3526 $rm -f foo
3527
3528 case "$cc" in
3529 '') dflt=cc;;
3530 *) dflt="$cc";;
3531 esac
3532 rp="Use which C compiler?"
3533 . ./myread
3534 cc="$ans"
3535 : Look for a hint-file generated 'call-back-unit'.  Now that the
3536 : user has specified the compiler, we may need to set or change some
3537 : other defaults.
3538 if $test -f cc.cbu; then
3539     . ./cc.cbu
3540 fi
3541 . ./checkcc
3542
3543 echo " "
3544 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3545 $cat >try.c <<EOM
3546 #include <stdio.h>
3547 int main() {
3548 #ifdef __GNUC__
3549 #ifdef __VERSION__
3550         printf("%s\n", __VERSION__);
3551 #else
3552         printf("%s\n", "1");
3553 #endif
3554 #endif
3555         exit(0);
3556 }
3557 EOM
3558 if $cc -o try $ccflags $ldflags try.c; then
3559         gccversion=`$run ./try`
3560         case "$gccversion" in
3561         '') echo "You are not using GNU cc." ;;
3562         *)  echo "You are using GNU cc $gccversion."
3563             ccname=gcc  
3564             ;;
3565         esac
3566 else
3567         echo " "
3568         echo "*** WHOA THERE!!! ***" >&4
3569         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3570         case "$knowitall" in
3571         '')
3572         echo "    You'd better start hunting for one and let me know about it." >&4
3573                 exit 1
3574                 ;;
3575         esac
3576 fi
3577 $rm -f try try.*
3578 case "$gccversion" in
3579 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3580 esac
3581 case "$gccversion" in
3582 '') gccosandvers='' ;;
3583 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3584    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3585    gccshortvers=''
3586    case "$gccosandvers" in
3587    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3588    $osname$osvers) ;; # looking good
3589    $osname*) cat <<EOM >&4
3590
3591 *** WHOA THERE!!! ***
3592
3593     Your gcc has not been compiled for the exact release of
3594     your operating system ($gccosandvers versus $osname$osvers).
3595
3596     In general it is a good idea to keep gcc synchronized with
3597     the operating system because otherwise serious problems
3598     may ensue when trying to compile software, like Perl.
3599
3600     I'm trying to be optimistic here, though, and will continue.
3601     If later during the configuration and build icky compilation
3602     problems appear (headerfile conflicts being the most common
3603     manifestation), I suggest reinstalling the gcc to match
3604     your operating system release.
3605
3606 EOM
3607       ;;
3608    *) gccosandvers='' ;; # failed to parse, better be silent
3609    esac
3610    ;;
3611 esac
3612 case "$ccname" in
3613 '') ccname="$cc" ;;
3614 esac
3615
3616
3617 : decide how portable to be.  Allow command line overrides.
3618 case "$d_portable" in
3619 "$undef") ;;
3620 *)      d_portable="$define" ;;
3621 esac
3622
3623 : set up shell script to do ~ expansion
3624 cat >filexp <<EOSS
3625 $startsh
3626 : expand filename
3627 case "\$1" in
3628  ~/*|~)
3629         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3630         ;;
3631  ~*)
3632         if $test -f /bin/csh; then
3633                 /bin/csh -f -c "glob \$1"
3634                 failed=\$?
3635                 echo ""
3636                 exit \$failed
3637         else
3638                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3639                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3640                 if $test ! -d "\$dir"; then
3641                         me=\`basename \$0\`
3642                         echo "\$me: can't locate home directory for: \$name" >&2
3643                         exit 1
3644                 fi
3645                 case "\$1" in
3646                 */*)
3647                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3648                         ;;
3649                 *)
3650                         echo \$dir
3651                         ;;
3652                 esac
3653         fi
3654         ;;
3655 *)
3656         echo \$1
3657         ;;
3658 esac
3659 EOSS
3660 chmod +x filexp
3661 $eunicefix filexp
3662
3663 : now set up to get a file name
3664 cat <<EOS >getfile
3665 $startsh
3666 EOS
3667 cat <<'EOSC' >>getfile
3668 tilde=''
3669 fullpath=''
3670 already=''
3671 skip=''
3672 none_ok=''
3673 exp_file=''
3674 nopath_ok=''
3675 orig_rp="$rp"
3676 orig_dflt="$dflt"
3677 case "$gfpth" in
3678 '') gfpth='.' ;;
3679 esac
3680
3681 case "$fn" in
3682 *\(*)
3683         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3684         fn=`echo $fn | sed 's/(.*)//'`
3685         ;;
3686 esac
3687
3688 case "$fn" in
3689 *:*)
3690         loc_file=`expr $fn : '.*:\(.*\)'`
3691         fn=`expr $fn : '\(.*\):.*'`
3692         ;;
3693 esac
3694
3695 case "$fn" in
3696 *~*) tilde=true;;
3697 esac
3698 case "$fn" in
3699 */*) fullpath=true;;
3700 esac
3701 case "$fn" in
3702 *+*) skip=true;;
3703 esac
3704 case "$fn" in
3705 *n*) none_ok=true;;
3706 esac
3707 case "$fn" in
3708 *e*) exp_file=true;;
3709 esac
3710 case "$fn" in
3711 *p*) nopath_ok=true;;
3712 esac
3713
3714 case "$fn" in
3715 *f*) type='File';;
3716 *d*) type='Directory';;
3717 *l*) type='Locate';;
3718 esac
3719
3720 what="$type"
3721 case "$what" in
3722 Locate) what='File';;
3723 esac
3724
3725 case "$exp_file" in
3726 '')
3727         case "$d_portable" in
3728         "$define") ;;
3729         *) exp_file=true;;
3730         esac
3731         ;;
3732 esac
3733
3734 cd ..
3735 while test "$type"; do
3736         redo=''
3737         rp="$orig_rp"
3738         dflt="$orig_dflt"
3739         case "$tilde" in
3740         true) rp="$rp (~name ok)";;
3741         esac
3742         . UU/myread
3743         if test -f UU/getfile.ok && \
3744                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3745         then
3746                 value="$ans"
3747                 ansexp="$ans"
3748                 break
3749         fi
3750         case "$ans" in
3751         none)
3752                 value=''
3753                 ansexp=''
3754                 case "$none_ok" in
3755                 true) type='';;
3756                 esac
3757                 ;;
3758         *)
3759                 case "$tilde" in
3760                 '') value="$ans"
3761                         ansexp="$ans";;
3762                 *)
3763                         value=`UU/filexp $ans`
3764                         case $? in
3765                         0)
3766                                 if test "$ans" != "$value"; then
3767                                         echo "(That expands to $value on this system.)"
3768                                 fi
3769                                 ;;
3770                         *) value="$ans";;
3771                         esac
3772                         ansexp="$value"
3773                         case "$exp_file" in
3774                         '') value="$ans";;
3775                         esac
3776                         ;;
3777                 esac
3778                 case "$fullpath" in
3779                 true)
3780                         case "$ansexp" in
3781                         /*) value="$ansexp" ;;
3782                         [a-zA-Z]:/*) value="$ansexp" ;;
3783                         *)
3784                                 redo=true
3785                                 case "$already" in
3786                                 true)
3787                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3788                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3789                                         ;;
3790                                 *)
3791                                 echo "Please give a full path name, starting with slash." >&4
3792                                         case "$tilde" in
3793                                         true)
3794                                 echo "Note that using ~name is ok provided it expands well." >&4
3795                                                 already=true
3796                                                 ;;
3797                                         esac
3798                                 esac
3799                                 ;;
3800                         esac
3801                         ;;
3802                 esac
3803                 case "$redo" in
3804                 '')
3805                         case "$type" in
3806                         File)
3807                                 for fp in $gfpth; do
3808                                         if test "X$fp" = X.; then
3809                                             pf="$ansexp"
3810                                         else    
3811                                             pf="$fp/$ansexp"
3812                                         fi
3813                                         if test -f "$pf"; then
3814                                                 type=''
3815                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3816                                         then
3817                                                 echo "($value is not a plain file, but that's ok.)"
3818                                                 type=''
3819                                         fi
3820                                         if test X"$type" = X; then
3821                                             value="$pf"
3822                                             break
3823                                         fi
3824                                 done
3825                                 ;;
3826                         Directory)
3827                                 for fp in $gfpth; do
3828                                         if test "X$fp" = X.; then
3829                                             dir="$ans"
3830                                             direxp="$ansexp"
3831                                         else    
3832                                             dir="$fp/$ansexp"
3833                                             direxp="$fp/$ansexp"
3834                                         fi
3835                                         if test -d "$direxp"; then
3836                                                 type=''
3837                                                 value="$dir"
3838                                                 break
3839                                         fi
3840                                 done
3841                                 ;;
3842                         Locate)
3843                                 if test -d "$ansexp"; then
3844                                         echo "(Looking for $loc_file in directory $value.)"
3845                                         value="$value/$loc_file"
3846                                         ansexp="$ansexp/$loc_file"
3847                                 fi
3848                                 if test -f "$ansexp"; then
3849                                         type=''
3850                                 fi
3851                                 case "$nopath_ok" in
3852                                 true)   case "$value" in
3853                                         */*) ;;
3854                                         *)      echo "Assuming $value will be in people's path."
3855                                                 type=''
3856                                                 ;;
3857                                         esac
3858                                         ;;
3859                                 esac
3860                                 ;;
3861                         esac
3862
3863                         case "$skip" in
3864                         true) type='';
3865                         esac
3866
3867                         case "$type" in
3868                         '') ;;
3869                         *)
3870                                 if test "$fastread" = yes; then
3871                                         dflt=y
3872                                 else
3873                                         dflt=n
3874                                 fi
3875                                 rp="$what $value doesn't exist.  Use that name anyway?"
3876                                 . UU/myread
3877                                 dflt=''
3878                                 case "$ans" in
3879                                 y*) type='';;
3880                                 *) echo " ";;
3881                                 esac
3882                                 ;;
3883                         esac
3884                         ;;
3885                 esac
3886                 ;;
3887         esac
3888 done
3889 cd UU
3890 ans="$value"
3891 rp="$orig_rp"
3892 dflt="$orig_dflt"
3893 rm -f getfile.ok
3894 test "X$gfpthkeep" != Xy && gfpth=""
3895 EOSC
3896
3897 : What should the include directory be ?
3898 echo " "
3899 $echo $n "Hmm...  $c"
3900 dflt='/usr/include'
3901 incpath=''
3902 mips_type=''
3903 if $test -f /bin/mips && /bin/mips; then
3904         echo "Looks like a MIPS system..."
3905         $cat >usr.c <<'EOCP'
3906 #ifdef SYSTYPE_BSD43
3907 /bsd43
3908 #endif
3909 EOCP
3910         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3911                 dflt='/bsd43/usr/include'
3912                 incpath='/bsd43'
3913                 mips_type='BSD 4.3'
3914         else
3915                 mips_type='System V'
3916         fi
3917         $rm -f usr.c usr.out
3918         echo "and you're compiling with the $mips_type compiler and libraries."
3919         xxx_prompt=y
3920         echo "exit 0" >mips
3921 else
3922         echo "Doesn't look like a MIPS system."
3923         xxx_prompt=n
3924         echo "exit 1" >mips
3925 fi
3926 chmod +x mips
3927 $eunicefix mips
3928 case "$usrinc" in
3929 '') ;;
3930 *) dflt="$usrinc";;
3931 esac
3932 case "$xxx_prompt" in
3933 y)      fn=d/
3934         echo " "
3935         rp='Where are the include files you want to use?'
3936         . ./getfile
3937         usrinc="$ans"
3938         ;;
3939 *)      usrinc="$dflt"
3940         ;;
3941 esac
3942
3943 : see how we invoke the C preprocessor
3944 echo " "
3945 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3946 cat <<'EOT' >testcpp.c
3947 #define ABC abc
3948 #define XYZ xyz
3949 ABC.XYZ
3950 EOT
3951 cd ..
3952 if test ! -f cppstdin; then
3953         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3954                 # AIX cc -E doesn't show the absolute headerfile
3955                 # locations but we'll cheat by using the -M flag.
3956                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3957         else
3958                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3959         fi
3960 else
3961         echo "Keeping your $hint cppstdin wrapper."
3962 fi
3963 chmod 755 cppstdin
3964 wrapper=`pwd`/cppstdin
3965 ok='false'
3966 cd UU
3967
3968 if $test "X$cppstdin" != "X" && \
3969         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3970         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3971 then
3972         echo "You used to use $cppstdin $cppminus so we'll use that again."
3973         case "$cpprun" in
3974         '') echo "But let's see if we can live without a wrapper..." ;;
3975         *)
3976                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3977                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3978                 then
3979                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3980                         ok='true'
3981                 else
3982                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3983                 fi
3984                 ;;
3985         esac
3986 else
3987         case "$cppstdin" in
3988         '') ;;
3989         *)
3990                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3991                 ;;
3992         esac
3993 fi
3994
3995 if $ok; then
3996         : nothing
3997 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3998         $cc -E <testcpp.c >testcpp.out 2>&1; \
3999         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4000         echo "Yup, it does."
4001         x_cpp="$cc -E"
4002         x_minus='';
4003 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4004         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4005         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4006         echo "Yup, it does."
4007         x_cpp="$cc -E"
4008         x_minus='-';
4009 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4010         $cc -P <testcpp.c >testcpp.out 2>&1; \
4011         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4012         echo "Yipee, that works!"
4013         x_cpp="$cc -P"
4014         x_minus='';
4015 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4016         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4017         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4018         echo "At long last!"
4019         x_cpp="$cc -P"
4020         x_minus='-';
4021 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4022         $cpp <testcpp.c >testcpp.out 2>&1; \
4023         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4024         echo "It works!"
4025         x_cpp="$cpp"
4026         x_minus='';
4027 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4028         $cpp - <testcpp.c >testcpp.out 2>&1; \
4029         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4030         echo "Hooray, it works!  I was beginning to wonder."
4031         x_cpp="$cpp"
4032         x_minus='-';
4033 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4034         $wrapper <testcpp.c >testcpp.out 2>&1; \
4035         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4036         x_cpp="$wrapper"
4037         x_minus=''
4038         echo "Eureka!"
4039 else
4040         dflt=''
4041         rp="No dice.  I can't find a C preprocessor.  Name one:"
4042         . ./myread
4043         x_cpp="$ans"
4044         x_minus=''
4045         $x_cpp <testcpp.c >testcpp.out 2>&1
4046         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4047                 echo "OK, that will do." >&4
4048         else
4049 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4050                 exit 1
4051         fi
4052 fi
4053
4054 case "$ok" in
4055 false)
4056         cppstdin="$x_cpp"
4057         cppminus="$x_minus"
4058         cpprun="$x_cpp"
4059         cpplast="$x_minus"
4060         set X $x_cpp
4061         shift
4062         case "$1" in
4063         "$cpp")
4064                 echo "Perhaps can we force $cc -E using a wrapper..."
4065                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4066                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4067                 then
4068                         echo "Yup, we can."
4069                         cppstdin="$wrapper"
4070                         cppminus='';
4071                 else
4072                         echo "Nope, we'll have to live without it..."
4073                 fi
4074                 ;;
4075         esac
4076         case "$cpprun" in
4077         "$wrapper")
4078                 cpprun=''
4079                 cpplast=''
4080                 ;;
4081         esac
4082         ;;
4083 esac
4084
4085 case "$cppstdin" in
4086 "$wrapper"|'cppstdin') ;;
4087 *) $rm -f $wrapper;;
4088 esac
4089 $rm -f testcpp.c testcpp.out
4090
4091 : Set private lib path
4092 case "$plibpth" in
4093 '') if ./mips; then
4094                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4095         fi;;
4096 esac
4097 case "$libpth" in
4098 ' ') dlist='';;
4099 '') dlist="$loclibpth $plibpth $glibpth";;
4100 *) dlist="$libpth";;
4101 esac
4102
4103 : Now check and see which directories actually exist, avoiding duplicates
4104 libpth=''
4105 for xxx in $dlist
4106 do
4107     if $test -d $xxx; then
4108                 case " $libpth " in
4109                 *" $xxx "*) ;;
4110                 *) libpth="$libpth $xxx";;
4111                 esac
4112     fi
4113 done
4114 $cat <<'EOM'
4115
4116 Some systems have incompatible or broken versions of libraries.  Among
4117 the directories listed in the question below, please remove any you
4118 know not to be holding relevant libraries, and add any that are needed.
4119 Say "none" for none.
4120
4121 EOM
4122 case "$libpth" in
4123 '') dflt='none';;
4124 *)
4125         set X $libpth
4126         shift
4127         dflt=${1+"$@"}
4128         ;;
4129 esac
4130 rp="Directories to use for library searches?"
4131 . ./myread
4132 case "$ans" in
4133 none) libpth=' ';;
4134 *) libpth="$ans";;
4135 esac
4136
4137 : compute shared library extension
4138 case "$so" in
4139 '')
4140         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4141                 dflt='sl'
4142         else
4143                 dflt='so'
4144         fi
4145         ;;
4146 *) dflt="$so";;
4147 esac
4148 $cat <<EOM
4149
4150 On some systems, shared libraries may be available.  Answer 'none' if
4151 you want to suppress searching of shared libraries for the remainder
4152 of this configuration.
4153
4154 EOM
4155 rp='What is the file extension used for shared libraries?'
4156 . ./myread
4157 so="$ans"
4158
4159 : Define several unixisms.
4160 : Hints files or command line option can be used to override them.
4161 : The convoluted testing is in case hints files set either the old
4162 : or the new name.
4163 case "$_exe" in
4164 '')     case "$exe_ext" in
4165         '')     ;;
4166         *)      _exe="$exe_ext" ;;
4167         esac
4168         ;;
4169 esac
4170 case "$_a" in
4171 '')     case "$lib_ext" in
4172     '') _a='.a';;
4173         *)      _a="$lib_ext" ;;
4174         esac
4175         ;;
4176 esac
4177 case "$_o" in
4178 '') case "$obj_ext" in
4179         '')     _o='.o';;
4180         *)      _o="$obj_ext";;
4181         esac
4182         ;;
4183 esac
4184 case "$p_" in
4185 '') case "$path_sep" in
4186         '')     p_=':';;
4187         *)      p_="$path_sep";;
4188         esac
4189         ;;
4190 esac
4191 exe_ext=$_exe
4192 lib_ext=$_a
4193 obj_ext=$_o
4194 path_sep=$p_
4195
4196 : Which makefile gets called first.  This is used by make depend.
4197 case "$firstmakefile" in
4198 '') firstmakefile='makefile';;
4199 esac
4200
4201 case "$usesocks" in
4202 $define|true|[yY]*)     dflt='y';;
4203 *) dflt='n';;
4204 esac
4205 cat <<EOM
4206
4207 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4208 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4209 to use the PerlIO abstraction layer, this will be implicitly selected.
4210
4211 If this doesn't make any sense to you, just accept the default '$dflt'.
4212 EOM
4213 rp='Build Perl for SOCKS?'
4214 . ./myread
4215 case "$ans" in
4216 y|Y)    val="$define" ;;     
4217 *)      val="$undef" ;;
4218 esac
4219 set usesocks
4220 eval $setvar
4221
4222 case "$usesocks" in
4223 $define|true|[yY]*) useperlio="$define";;
4224 esac
4225
4226 : Looking for optional libraries
4227 echo " "
4228 echo "Checking for optional libraries..." >&4
4229 case "$libs" in
4230 ' '|'') dflt='';;
4231 *) dflt="$libs";;
4232 esac
4233 case "$libswanted" in
4234 '') libswanted='c_s';;
4235 esac
4236 case "$usesocks" in
4237 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4238 esac
4239 libsfound=''
4240 libsfiles=''
4241 libsdirs=''
4242 libspath=''
4243 for thisdir in $libpth $xlibpth; do
4244   test -d $thisdir && libspath="$libspath $thisdir"
4245 done
4246 for thislib in $libswanted; do
4247         for thisdir in $libspath; do
4248             xxx=''
4249             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4250                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4251                 $test -f "$xxx" && eval $libscheck
4252                 $test -f "$xxx" && libstyle=shared
4253             fi
4254             if test ! -f "$xxx"; then
4255                 xxx=$thisdir/lib$thislib.$so
4256                 $test -f "$xxx" && eval $libscheck
4257                 $test -f "$xxx" && libstyle=shared
4258             fi  
4259             if test ! -f "$xxx"; then
4260                 xxx=$thisdir/lib$thislib$_a
4261                 $test -f "$xxx" && eval $libscheck
4262                 $test -f "$xxx" && libstyle=static
4263             fi
4264             if test ! -f "$xxx"; then
4265                 xxx=$thisdir/$thislib$_a
4266                 $test -f "$xxx" && eval $libscheck
4267                 $test -f "$xxx" && libstyle=static
4268             fi
4269             if test ! -f "$xxx"; then
4270                 xxx=$thisdir/lib${thislib}_s$_a
4271                 $test -f "$xxx" && eval $libscheck
4272                 $test -f "$xxx" && libstyle=static
4273                 $test -f "$xxx" && thislib=${thislib}_s
4274             fi
4275             if test ! -f "$xxx"; then
4276                 xxx=$thisdir/Slib$thislib$_a
4277                 $test -f "$xxx" && eval $libscheck
4278                 $test -f "$xxx" && libstyle=static
4279             fi
4280             if $test -f "$xxx"; then
4281                 case "$libstyle" in
4282                 shared) echo "Found -l$thislib (shared)." ;;
4283                 static) echo "Found -l$thislib." ;;
4284                 *)      echo "Found -l$thislib ($libstyle)." ;;
4285                 esac
4286                 case " $dflt " in
4287                 *"-l$thislib "*);;
4288                 *) dflt="$dflt -l$thislib"
4289                    libsfound="$libsfound $xxx"
4290                    yyy=`basename $xxx`
4291                    libsfiles="$libsfiles $yyy"
4292                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4293                    case " $libsdirs " in
4294                    *" $yyy "*) ;;
4295                    *) libsdirs="$libsdirs $yyy" ;;
4296                    esac
4297                    ;;
4298                 esac
4299                 break
4300             fi  
4301         done
4302         if $test ! -f "$xxx"; then
4303             echo "No -l$thislib."
4304         fi
4305 done
4306 set X $dflt
4307 shift
4308 dflt="$*"
4309 case "$libs" in
4310 '') dflt="$dflt";;
4311 *) dflt="$libs";;
4312 esac
4313 case "$dflt" in
4314 ' '|'') dflt='none';;
4315 esac
4316
4317 $cat <<EOM
4318
4319 In order to compile $package on your machine, a number of libraries
4320 are usually needed.  Include any other special libraries here as well.
4321 Say "none" for none.  The default list is almost always right.
4322 EOM
4323
4324 echo " "
4325 rp="What libraries to use?"
4326 . ./myread
4327 case "$ans" in
4328 none) libs=' ';;
4329 *) libs="$ans";;
4330 esac
4331
4332 : determine optimization, if desired, or use for debug flag also
4333 case "$optimize" in
4334 ' '|$undef) dflt='none';;
4335 '') dflt='-O';;
4336 *) dflt="$optimize";;
4337 esac
4338 $cat <<EOH
4339
4340 By default, $package compiles with the -O flag to use the optimizer.
4341 Alternately, you might want to use the symbolic debugger, which uses
4342 the -g flag (on traditional Unix systems).  Either flag can be
4343 specified here.  To use neither flag, specify the word "none".
4344
4345 EOH
4346 rp="What optimizer/debugger flag should be used?"
4347 . ./myread
4348 optimize="$ans"
4349 case "$optimize" in
4350 'none') optimize=" ";;
4351 esac
4352
4353 dflt=''
4354 : We will not override a previous value, but we might want to
4355 : augment a hint file
4356 case "$hint" in
4357 default|recommended)
4358         case "$gccversion" in
4359         1*) dflt='-fpcc-struct-return' ;;
4360         esac
4361         case "$optimize" in
4362         *-g*) dflt="$dflt -DDEBUGGING";;
4363         esac
4364         case "$gccversion" in
4365         2*) if test -d /etc/conf/kconfig.d &&
4366                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4367                 then
4368                         dflt="$dflt -posix"
4369                 fi
4370                 ;;
4371         esac
4372         case "$gccversion" in
4373         1*) ;;
4374         2.[0-8]*) ;;
4375         ?*)     echo " "
4376                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4377                 echo 'int main(void) { return 0; }' > gcctest.c
4378                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4379                         echo "Yes, it does." 2>&1
4380                         case "$ccflags" in
4381                         *strict-aliasing*) 
4382                                 echo "Leaving current flags $ccflags alone." 2>&1
4383                                 ;;
4384                         *) dflt="$dflt -fno-strict-aliasing" ;;
4385                         esac
4386                 else
4387                         echo "Nope, it doesn't, but that's ok." 2>&1
4388                 fi
4389                 ;;
4390         esac
4391         ;;
4392 esac
4393
4394 case "$mips_type" in
4395 *BSD*|'') inclwanted="$locincpth $usrinc";;
4396 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4397 esac
4398 for thisincl in $inclwanted; do
4399         if $test -d $thisincl; then
4400                 if $test x$thisincl != x$usrinc; then
4401                         case "$dflt" in
4402                         *" -I$thisincl "*);;
4403                         *) dflt="$dflt -I$thisincl ";;
4404                         esac
4405                 fi
4406         fi
4407 done
4408
4409 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4410         xxx=true;
4411 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4412         xxx=true;
4413 else
4414         xxx=false;
4415 fi;
4416 if $xxx; then
4417         case "$dflt" in
4418         *$2*);;
4419         *) dflt="$dflt -D$2";;
4420         esac;
4421 fi'
4422
4423 set signal.h LANGUAGE_C; eval $inctest
4424
4425 case "$usesocks" in
4426 $define)
4427         ccflags="$ccflags -DSOCKS"
4428         ;;
4429 esac
4430
4431 case "$hint" in
4432 default|recommended) dflt="$ccflags $dflt" ;;
4433 *) dflt="$ccflags";;
4434 esac
4435
4436 case "$dflt" in
4437 ''|' ') dflt=none;;
4438 esac
4439
4440 $cat <<EOH
4441
4442 Your C compiler may want other flags.  For this question you should include
4443 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4444 but you should NOT include libraries or ld flags like -lwhatever.  If you
4445 want $package to honor its debug switch, you should include -DDEBUGGING here.
4446 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4447
4448 To use no flags, specify the word "none".
4449
4450 EOH
4451 set X $dflt
4452 shift
4453 dflt=${1+"$@"}
4454 rp="Any additional cc flags?"
4455 . ./myread
4456 case "$ans" in
4457 none) ccflags='';;
4458 *) ccflags="$ans";;
4459 esac
4460
4461 : the following weeds options from ccflags that are of no interest to cpp
4462 case "$cppflags" in
4463 '') cppflags="$ccflags" ;;
4464 *)  cppflags="$cppflags $ccflags" ;;
4465 esac
4466 case "$gccversion" in
4467 1*) cppflags="$cppflags -D__GNUC__"
4468 esac
4469 case "$mips_type" in
4470 '');;
4471 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4472 esac
4473 case "$cppflags" in
4474 '');;
4475 *)
4476         echo " "
4477         echo "Let me guess what the preprocessor flags are..." >&4
4478         set X $cppflags
4479         shift
4480         cppflags=''
4481         $cat >cpp.c <<'EOM'
4482 #define BLURFL foo
4483
4484 BLURFL xx LFRULB
4485 EOM
4486         previous=''
4487         for flag in $*
4488         do
4489                 case "$flag" in
4490                 -*) ftry="$flag";;
4491                 *) ftry="$previous $flag";;
4492                 esac
4493                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4494                         >cpp1.out 2>/dev/null && \
4495                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4496                         >cpp2.out 2>/dev/null && \
4497                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4498                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4499                 then
4500                         cppflags="$cppflags $ftry"
4501                         previous=''
4502                 else
4503                         previous="$flag"
4504                 fi
4505         done
4506         set X $cppflags
4507         shift
4508         cppflags=${1+"$@"}
4509         case "$cppflags" in
4510         *-*)  echo "They appear to be: $cppflags";;
4511         esac
4512         $rm -f cpp.c cpp?.out
4513         ;;
4514 esac
4515
4516 : flags used in final linking phase
4517 case "$ldflags" in
4518 '') if ./venix; then
4519                 dflt='-i -z'
4520         else
4521                 dflt=''
4522         fi
4523         case "$ccflags" in
4524         *-posix*) dflt="$dflt -posix" ;;
4525         esac
4526         ;;
4527 *) dflt="$ldflags";;
4528 esac
4529
4530 : Try to guess additional flags to pick up local libraries.
4531 for thislibdir in $libpth; do
4532         case " $loclibpth " in
4533         *" $thislibdir "*)
4534                 case "$dflt " in 
4535                 *"-L$thislibdir "*) ;;
4536                 *)  dflt="$dflt -L$thislibdir" ;;
4537                 esac
4538                 ;;
4539         esac
4540 done
4541
4542 case "$dflt" in
4543 '') dflt='none' ;;
4544 esac
4545
4546 $cat <<EOH
4547
4548 Your C linker may need flags.  For this question you should
4549 include -L/whatever and any other flags used by the C linker, but you
4550 should NOT include libraries like -lwhatever.
4551
4552 Make sure you include the appropriate -L/path flags if your C linker
4553 does not normally search all of the directories you specified above,
4554 namely
4555         $libpth
4556 To use no flags, specify the word "none".
4557
4558 EOH
4559
4560 rp="Any additional ld flags (NOT including libraries)?"
4561 . ./myread
4562 case "$ans" in
4563 none) ldflags='';;
4564 *) ldflags="$ans";;
4565 esac
4566 rmlist="$rmlist pdp11"
4567
4568 : coherency check
4569 echo " "
4570 echo "Checking your choice of C compiler and flags for coherency..." >&4
4571 $cat > try.c <<'EOF'
4572 #include <stdio.h>
4573 int main() { printf("Ok\n"); exit(0); }
4574 EOF
4575 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4576 shift
4577 $cat >try.msg <<'EOM'
4578 I've tried to compile and run the following simple program:
4579
4580 EOM
4581 $cat try.c >> try.msg
4582
4583 $cat >> try.msg <<EOM
4584
4585 I used the command:
4586
4587         $*
4588         $run ./try
4589
4590 and I got the following output:
4591
4592 EOM
4593 dflt=y
4594 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4595         if $sh -c "$run ./try" >>try.msg 2>&1; then
4596                 xxx=`$run ./try`
4597                 case "$xxx" in
4598                 "Ok") dflt=n ;;
4599                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4600                         case " $libs " in
4601                         *" -lsfio "*)
4602                                 cat >> try.msg <<'EOQS'
4603 If $libs contains -lsfio, and sfio is mis-configured, then it
4604 sometimes (apparently) runs and exits with a 0 status, but with no
4605 output!  It may have to do with sfio's use of _exit vs. exit.
4606
4607 EOQS
4608                                 rp="You have a big problem.  Shall I abort Configure"
4609                                 dflt=y
4610                                 ;;
4611                         esac
4612                         ;;
4613                 esac
4614         else
4615                 echo "The program compiled OK, but exited with status $?." >>try.msg
4616                 rp="You have a problem.  Shall I abort Configure"
4617                 dflt=y
4618         fi
4619 else
4620         echo "I can't compile the test program." >>try.msg
4621         rp="You have a BIG problem.  Shall I abort Configure"
4622         dflt=y
4623 fi
4624 case "$dflt" in
4625 y)
4626         $cat try.msg >&4
4627         case "$knowitall" in
4628         '')
4629                 echo "(The supplied flags or libraries might be incorrect.)"
4630                 ;;
4631         *) dflt=n;;
4632         esac
4633         echo " "
4634         . ./myread
4635         case "$ans" in
4636         n*|N*) ;;
4637         *)      echo "Ok.  Stopping Configure." >&4
4638                 exit 1
4639                 ;;
4640         esac
4641         ;;
4642 n) echo "OK, that should do.";;
4643 esac
4644 $rm -f try try.* core
4645
4646 : define a shorthand compile call
4647 compile='
4648 mc_file=$1;
4649 shift;
4650 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4651 : define a shorthand compile call for compilations that should be ok.
4652 compile_ok='
4653 mc_file=$1;
4654 shift;
4655 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4656
4657 : check for lengths of integral types
4658 echo " "
4659 case "$intsize" in
4660 '')
4661         echo "Checking to see how big your integers are..." >&4
4662         $cat >try.c <<'EOCP'
4663 #include <stdio.h>
4664 int main()
4665 {
4666         printf("intsize=%d;\n", (int)sizeof(int));
4667         printf("longsize=%d;\n", (int)sizeof(long));
4668         printf("shortsize=%d;\n", (int)sizeof(short));
4669         exit(0);
4670 }
4671 EOCP
4672         set try
4673         if eval $compile_ok && $run ./try > /dev/null; then
4674                 eval `$run ./try`
4675                 echo "Your integers are $intsize bytes long."
4676                 echo "Your long integers are $longsize bytes long."
4677                 echo "Your short integers are $shortsize bytes long."
4678         else
4679                 $cat >&4 <<EOM
4680 !
4681 Help! I can't compile and run the intsize test program: please enlighten me!
4682 (This is probably a misconfiguration in your system or libraries, and
4683 you really ought to fix it.  Still, I'll try anyway.)
4684 !
4685 EOM
4686                 dflt=4
4687                 rp="What is the size of an integer (in bytes)?"
4688                 . ./myread
4689                 intsize="$ans"
4690                 dflt=$intsize
4691                 rp="What is the size of a long integer (in bytes)?"
4692                 . ./myread
4693                 longsize="$ans"
4694                 dflt=2
4695                 rp="What is the size of a short integer (in bytes)?"
4696                 . ./myread
4697                 shortsize="$ans"
4698         fi
4699         ;;
4700 esac
4701 $rm -f try try.*
4702
4703 : check for void type
4704 echo " "
4705 echo "Checking to see how well your C compiler groks the void type..." >&4
4706 case "$voidflags" in
4707 '')
4708         $cat >try.c <<'EOCP'
4709 #if TRY & 1
4710 void sub() {
4711 #else
4712 sub() {
4713 #endif
4714         extern void moo();      /* function returning void */
4715         void (*goo)();          /* ptr to func returning void */
4716 #if TRY & 8
4717         void *hue;              /* generic ptr */
4718 #endif
4719 #if TRY & 2
4720         void (*foo[10])();
4721 #endif
4722
4723 #if TRY & 4
4724         if(goo == moo) {
4725                 exit(0);
4726         }
4727 #endif
4728         exit(0);
4729 }
4730 int main() { sub(); }
4731 EOCP
4732         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4733                 voidflags=$defvoidused
4734         echo "Good.  It appears to support void to the level $package wants.">&4
4735                 if $contains warning .out >/dev/null 2>&1; then
4736                         echo "However, you might get some warnings that look like this:"
4737                         $cat .out
4738                 fi
4739         else
4740 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4741                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4742                         echo "It supports 1..."
4743                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4744                                 echo "It also supports 2..."
4745                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4746                                         voidflags=7
4747                                         echo "And it supports 4 but not 8 definitely."
4748                                 else
4749                                         echo "It doesn't support 4..."
4750                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4751                                                 voidflags=11
4752                                                 echo "But it supports 8."
4753                                         else
4754                                                 voidflags=3
4755                                                 echo "Neither does it support 8."
4756                                         fi
4757                                 fi
4758                         else
4759                                 echo "It does not support 2..."
4760                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4761                                         voidflags=13
4762                                         echo "But it supports 4 and 8."
4763                                 else
4764                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4765                                                 voidflags=5
4766                                                 echo "And it supports 4 but has not heard about 8."
4767                                         else
4768                                                 echo "However it supports 8 but not 4."
4769                                         fi
4770                                 fi
4771                         fi
4772                 else
4773                         echo "There is no support at all for void."
4774                         voidflags=0
4775                 fi
4776         fi
4777 esac
4778 case "$voidflags" in
4779 "$defvoidused") ;;
4780 *)      $cat >&4 <<'EOM'
4781   Support flag bits are:
4782     1: basic void declarations.
4783     2: arrays of pointers to functions returning void.
4784     4: operations between pointers to and addresses of void functions.
4785     8: generic void pointers.
4786 EOM
4787         dflt="$voidflags";
4788         rp="Your void support flags add up to what?"
4789         . ./myread
4790         voidflags="$ans"
4791         ;;
4792 esac
4793 $rm -f try.* .out
4794
4795 : check for length of pointer
4796 echo " "
4797 case "$ptrsize" in
4798 '')
4799         echo "Checking to see how big your pointers are..." >&4
4800         if test "$voidflags" -gt 7; then
4801                 echo '#define VOID_PTR char *' > try.c
4802         else
4803                 echo '#define VOID_PTR void *' > try.c
4804         fi
4805         $cat >>try.c <<'EOCP'
4806 #include <stdio.h>
4807 int main()
4808 {
4809     printf("%d\n", (int)sizeof(VOID_PTR));
4810     exit(0);
4811 }
4812 EOCP
4813         set try
4814         if eval $compile_ok; then
4815                 ptrsize=`$run ./try`
4816                 echo "Your pointers are $ptrsize bytes long."
4817         else
4818                 dflt='4'
4819                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4820                 rp="What is the size of a pointer (in bytes)?"
4821                 . ./myread
4822                 ptrsize="$ans"
4823         fi
4824         ;;
4825 esac
4826 $rm -f try.c try
4827
4828 : check for long long
4829 echo " "
4830 echo "Checking to see if you have long long..." >&4
4831 echo 'int main() { long long x = 7; return 0; }' > try.c
4832 set try
4833 if eval $compile; then
4834         val="$define"
4835         echo "You have long long."
4836 else
4837         val="$undef"
4838         echo "You do not have long long."
4839 fi
4840 $rm try.*
4841 set d_longlong
4842 eval $setvar
4843
4844 : check for length of long long
4845 case "${d_longlong}${longlongsize}" in
4846 $define)
4847         echo " "
4848         echo "Checking to see how big your long longs are..." >&4
4849         $cat >try.c <<'EOCP'
4850 #include <stdio.h>
4851 int main()
4852 {
4853     printf("%d\n", (int)sizeof(long long));
4854     return(0);
4855 }
4856 EOCP
4857         set try
4858         if eval $compile_ok; then
4859                 longlongsize=`$run ./try`
4860                 echo "Your long longs are $longlongsize bytes long."
4861         else
4862                 dflt='8'
4863                 echo " "
4864                 echo "(I can't seem to compile the test program.  Guessing...)"
4865                 rp="What is the size of a long long (in bytes)?"
4866                 . ./myread
4867                 longlongsize="$ans"
4868         fi
4869         if $test "X$longsize" = "X$longlongsize"; then
4870                 echo "(That isn't any different from an ordinary long.)"
4871         fi      
4872         ;;
4873 esac
4874 $rm -f try.* try
4875
4876 : determine filename position in cpp output
4877 echo " "
4878 echo "Computing filename position in cpp output for #include directives..." >&4
4879 case "$osname" in
4880 vos) testaccess=-e ;;
4881 *)   testaccess=-r ;;
4882 esac
4883 echo '#include <stdio.h>' > foo.c
4884 $cat >fieldn <<EOF
4885 $startsh
4886 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4887 $grep '^[       ]*#.*stdio\.h' | \
4888 while read cline; do
4889         pos=1
4890         set \$cline
4891         while $test \$# -gt 0; do
4892                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4893                         echo "\$pos"
4894                         exit 0
4895                 fi
4896                 shift
4897                 pos=\`expr \$pos + 1\`
4898         done
4899 done
4900 EOF
4901 chmod +x fieldn
4902 fieldn=`./fieldn`
4903 $rm -f foo.c fieldn
4904 case $fieldn in
4905 '') pos='???';;
4906 1) pos=first;;
4907 2) pos=second;;
4908 3) pos=third;;
4909 *) pos="${fieldn}th";;
4910 esac
4911 echo "Your cpp writes the filename in the $pos field of the line."
4912
4913 case "$osname" in
4914 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4915 *)   cppfilter='' ;;
4916 esac
4917 : locate header file
4918 $cat >findhdr <<EOF
4919 $startsh
4920 wanted=\$1
4921 name=''
4922 for usrincdir in $usrinc
4923 do
4924         if test -f \$usrincdir/\$wanted; then
4925                 echo "\$usrincdir/\$wanted"
4926                 exit 0
4927         fi
4928 done
4929 awkprg='{ print \$$fieldn }'
4930 echo "#include <\$wanted>" > foo\$\$.c
4931 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4932 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4933 while read cline; do
4934         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4935         case "\$name" in
4936         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4937         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4938         *) exit 2;;
4939         esac;
4940 done;
4941 #
4942 # status = 0: grep returned 0 lines, case statement not executed
4943 # status = 1: headerfile found
4944 # status = 2: while loop executed, no headerfile found
4945 #
4946 status=\$?
4947 $rm -f foo\$\$.c;
4948 if test \$status -eq 1; then
4949         exit 0;
4950 fi
4951 exit 1
4952 EOF
4953 chmod +x findhdr
4954
4955 : define an alternate in-header-list? function
4956 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4957 cont=true; xxf="echo \"<\$1> found.\" >&4";
4958 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4959 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4960 esac;
4961 case $# in 4) instead=instead;; *) instead="at last";; esac;
4962 while $test "$cont"; do
4963         xxx=`./findhdr $1`
4964         var=$2; eval "was=\$$2";
4965         if $test "$xxx" && $test -r "$xxx";
4966         then eval $xxf;
4967         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4968                 cont="";
4969         else eval $xxnf;
4970         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4971         set $yyy; shift; shift; yyy=$@;
4972         case $# in 0) cont="";;
4973         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4974                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4975         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4976                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4977         esac;
4978 done;
4979 while $test "$yyy";
4980 do set $yyy; var=$2; eval "was=\$$2";
4981         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4982         set $yyy; shift; shift; yyy=$@;
4983 done'
4984
4985 : see if inttypes.h is available
4986 : we want a real compile instead of Inhdr because some systems
4987 : have an inttypes.h which includes non-existent headers
4988 echo " "
4989 $cat >try.c <<EOCP
4990 #include <inttypes.h>
4991 int main() {
4992         static int32_t foo32 = 0x12345678;
4993 }
4994 EOCP
4995 set try
4996 if eval $compile; then
4997         echo "<inttypes.h> found." >&4
4998         val="$define"
4999 else
5000         echo "<inttypes.h> NOT found." >&4
5001         val="$undef"
5002 fi
5003 $rm -f try.c try
5004 set i_inttypes
5005 eval $setvar
5006
5007 : check for int64_t
5008 echo " "
5009 echo "Checking to see if you have int64_t..." >&4
5010 $cat >try.c <<EOCP
5011 #include <sys/types.h>
5012 #$i_inttypes I_INTTYPES
5013 #ifdef I_INTTYPES
5014 #include <inttypes.h>
5015 #endif
5016 int main() { int64_t x = 7; }
5017 EOCP
5018 set try
5019 if eval $compile; then
5020         val="$define"
5021         echo "You have int64_t."
5022 else
5023         val="$undef"
5024         echo "You do not have int64_t."
5025 fi
5026 $rm -f try try.*
5027 set d_int64_t
5028 eval $setvar
5029
5030
5031 echo " "
5032 echo "Checking which 64-bit integer type we could use..." >&4
5033
5034 case "$intsize" in
5035 8) val=int
5036    set quadtype
5037    eval $setvar
5038    val='"unsigned int"'
5039    set uquadtype
5040    eval $setvar
5041    quadkind=1
5042    ;;
5043 *) case "$longsize" in
5044    8) val=long
5045       set quadtype
5046       eval $setvar
5047       val='"unsigned long"'
5048       set uquadtype
5049       eval $setvar
5050       quadkind=2
5051       ;;
5052    *) case "$d_longlong:$longlongsize" in
5053       define:8)
5054         val='"long long"'
5055         set quadtype
5056         eval $setvar
5057         val='"unsigned long long"'
5058         set uquadtype
5059         eval $setvar
5060         quadkind=3
5061         ;;
5062       *) case "$d_int64_t" in
5063          define)
5064            val=int64_t
5065            set quadtype
5066            eval $setvar
5067            val=uint64_t
5068            set uquadtype
5069            eval $setvar
5070            quadkind=4
5071            ;;
5072          esac
5073          ;;
5074       esac
5075       ;;
5076    esac
5077    ;;
5078 esac
5079
5080 case "$quadtype" in
5081 '')     echo "Alas, no 64-bit integer types in sight." >&4
5082         d_quad="$undef"
5083         ;;
5084 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5085         d_quad="$define"
5086         ;;
5087 esac
5088
5089
5090 case "$uselonglong" in
5091 "$define"|true|[yY]*)
5092         cat <<EOM >&4
5093
5094 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5095 EOM
5096         use64bitint="$define"
5097         ;;
5098 esac                          
5099 case "$use64bits" in
5100 "$define"|true|[yY]*)
5101         cat <<EOM >&4
5102
5103 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5104 EOM
5105         use64bitint="$define"
5106         ;;
5107 esac                          
5108 case "$use64bitints" in
5109 "$define"|true|[yY]*)
5110         cat <<EOM >&4
5111
5112 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5113 EOM
5114         use64bitint="$define"
5115         ;;
5116 esac                          
5117 case "$use64bitsint" in
5118 "$define"|true|[yY]*)
5119         cat <<EOM >&4
5120
5121 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5122 EOM
5123         use64bitint="$define"
5124         ;;
5125 esac                          
5126 case "$uselonglongs" in
5127 "$define"|true|[yY]*)
5128         cat <<EOM >&4
5129
5130 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5131 EOM
5132         use64bitint="$define"
5133         ;;
5134 esac                          
5135 case "$use64bitsall" in
5136 "$define"|true|[yY]*)
5137         cat <<EOM >&4
5138
5139 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5140 EOM
5141         use64bitall="$define"
5142         ;;
5143 esac                          
5144
5145 case "$ccflags" in
5146 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5147 esac
5148 case "$use64bitall" in
5149 "$define"|true|[yY]*) use64bitint="$define" ;;
5150 esac
5151
5152 case "$longsize" in
5153 8) cat <<EOM
5154
5155 You have natively 64-bit long integers.
5156 EOM
5157    val="$define"
5158    ;;
5159 *) case "$use64bitint" in
5160    "$define"|true|[yY]*) dflt='y';;
5161    *) dflt='n';;
5162    esac
5163    case "$d_quad" in
5164    "$define") ;;
5165    *) dflt='n' ;;
5166    esac
5167    cat <<EOM
5168
5169 Perl can be built to take advantage of 64-bit integer types
5170 on some systems.  To do so, Configure can be run with -Duse64bitint.
5171 Choosing this option will most probably introduce binary incompatibilities.
5172
5173 If this doesn't make any sense to you, just accept the default '$dflt'.
5174 (The default has been chosen based on your configuration.)
5175 EOM
5176    rp='Try to use 64-bit integers, if available?'
5177    . ./myread
5178    case "$ans" in
5179    [yY]*) val="$define" ;;
5180    *)     val="$undef"  ;;
5181    esac
5182    ;;
5183 esac
5184 set use64bitint
5185 eval $setvar
5186
5187 case "$use64bitall" in
5188 "$define"|true|[yY]*) dflt='y' ;;
5189 *) case "$longsize" in
5190    8) dflt='y' ;;
5191    *) dflt='n' ;;
5192    esac
5193    ;;
5194 esac    
5195 cat <<EOM
5196
5197 You may also choose to try maximal 64-bitness.  It means using as much
5198 64-bitness as possible on the platform.  This in turn means even more
5199 binary incompatibilities.  On the other hand, your platform may not
5200 have any more 64-bitness available than what you already have chosen.
5201
5202 If this doesn't make any sense to you, just accept the default '$dflt'.
5203 (The default has been chosen based on your configuration.)
5204 EOM
5205 rp='Try to use maximal 64-bit support, if available?'
5206 . ./myread
5207 case "$ans" in
5208 [yY]*) val="$define" ;;
5209 *)     val="$undef"  ;;
5210 esac
5211 set use64bitall
5212 eval $setvar
5213 case "$use64bitall" in
5214 "$define")
5215         case "$use64bitint" in
5216         "$undef")
5217                 cat <<EOM
5218
5219 Since you have chosen a maximally 64-bit build, I'm also turning on
5220 the use of 64-bit integers.
5221 EOM
5222                 use64bitint="$define" ;;
5223         esac
5224         ;;
5225 esac
5226
5227 case "$use64bitall" in
5228 "$define"|true|[yY]*)
5229         case "$ptrsize" in
5230         4)      cat <<EOM >&4
5231
5232 *** You have chosen a maximally 64-bit build, but your pointers
5233 *** are only 4 bytes wide, disabling maximal 64-bitness.
5234
5235 EOM
5236                 use64bitall="$undef"
5237                 case "$use64bitint" in
5238                 "$define"|true|[yY]*) ;;
5239                 *)      cat <<EOM >&4
5240
5241 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5242
5243 EOM
5244                         use64bitint="$define"
5245                         ;;
5246                 esac
5247                 ;;
5248         esac
5249         ;;
5250 esac
5251
5252 case "$use64bitint" in
5253 "$define"|true|[yY]*)
5254 : Look for a hint-file generated 'call-back-unit'.  If the
5255 : user has specified that a 64-bit perl is to be built,
5256 : we may need to set or change some other defaults.
5257         if $test -f use64bitint.cbu; then
5258                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5259                 . ./use64bitint.cbu
5260         fi
5261         case "$longsize" in
5262         4) case "$archname64" in
5263            '') archname64=64int ;;
5264            esac
5265            ;;
5266         esac
5267         ;;
5268 esac
5269
5270 case "$use64bitall" in
5271 "$define"|true|[yY]*)
5272 : Look for a hint-file generated 'call-back-unit'.  If the
5273 : user has specified that a maximally 64-bit perl is to be built,
5274 : we may need to set or change some other defaults.
5275         if $test -f use64bitall.cbu; then
5276                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5277                 . ./use64bitall.cbu
5278         fi
5279         case "$longsize" in
5280         4) case "$archname64" in
5281            ''|64int) archname64=64all ;;
5282            esac
5283            ;;
5284         esac
5285         ;;
5286 esac
5287
5288 echo " "
5289 echo "Checking for GNU C Library..." >&4
5290 cat >try.c <<EOM
5291 #include <stdio.h>
5292 int main()
5293 {
5294 #ifdef __GLIBC__
5295     exit(0);
5296 #else
5297     exit(1);
5298 #endif
5299 }
5300 EOM
5301 set try
5302 if eval $compile_ok && $run ./try; then
5303         val="$define"
5304         echo "You are using the GNU C Library"
5305 else
5306         val="$undef"
5307         echo "You are not using the GNU C Library"
5308 fi
5309 $rm -f try try.*
5310 set d_gnulibc
5311 eval $setvar
5312
5313 : see if nm is to be used to determine whether a symbol is defined or not
5314 case "$usenm" in
5315 '')
5316         dflt=''
5317         case "$d_gnulibc" in
5318         "$define")
5319                 echo " "
5320                 echo "nm probably won't work on the GNU C Library." >&4
5321                 dflt=n
5322                 ;;
5323         esac
5324         case "$dflt" in
5325         '') 
5326                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5327                         echo " "
5328                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5329                         echo "'nm' won't be sufficient on this sytem." >&4
5330                         dflt=n
5331                 fi
5332                 ;;
5333         esac
5334         case "$dflt" in
5335         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5336                 if $test $dflt -gt 20; then
5337                         dflt=y
5338                 else
5339                         dflt=n
5340                 fi
5341                 ;;
5342         esac
5343         ;;
5344 *)
5345         case "$usenm" in
5346         true|$define) dflt=y;;
5347         *) dflt=n;;
5348         esac
5349         ;;
5350 esac
5351 $cat <<EOM
5352
5353 I can use $nm to extract the symbols from your C libraries. This
5354 is a time consuming task which may generate huge output on the disk (up
5355 to 3 megabytes) but that should make the symbols extraction faster. The
5356 alternative is to skip the 'nm' extraction part and to compile a small
5357 test program instead to determine whether each symbol is present. If
5358 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5359 this may be the best solution.
5360
5361 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5362
5363 EOM
5364 rp="Shall I use $nm to extract C symbols from the libraries?"
5365 . ./myread
5366 case "$ans" in
5367 [Nn]*) usenm=false;;
5368 *) usenm=true;;
5369 esac
5370
5371 runnm=$usenm
5372 case "$reuseval" in
5373 true) runnm=false;;
5374 esac
5375
5376 : nm options which may be necessary
5377 case "$nm_opt" in
5378 '') if $test -f /mach_boot; then
5379                 nm_opt=''       # Mach
5380         elif $test -d /usr/ccs/lib; then
5381                 nm_opt='-p'     # Solaris (and SunOS?)
5382         elif $test -f /dgux; then
5383                 nm_opt='-p'     # DG-UX
5384         elif $test -f /lib64/rld; then
5385                 nm_opt='-p'     # 64-bit Irix
5386         else
5387                 nm_opt=''
5388         fi;;
5389 esac
5390
5391 : nm options which may be necessary for shared libraries but illegal
5392 : for archive libraries.  Thank you, Linux.
5393 case "$nm_so_opt" in
5394 '')     case "$myuname" in
5395         *linux*)
5396                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5397                         nm_so_opt='--dynamic'
5398                 fi
5399                 ;;
5400         esac
5401         ;;
5402 esac
5403
5404 case "$runnm" in
5405 true)
5406 : get list of predefined functions in a handy place
5407 echo " "
5408 case "$libc" in
5409 '') libc=unknown
5410         case "$libs" in
5411         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5412         esac
5413         ;;
5414 esac
5415 case "$libs" in
5416 '') ;;
5417 *)  for thislib in $libs; do
5418         case "$thislib" in
5419         -lc|-lc_s)
5420                 : Handle C library specially below.
5421                 ;;
5422         -l*)
5423                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5424                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5425                         :
5426                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5427                         :
5428                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5429                         :
5430                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5431                         :
5432                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5433                         :
5434                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5435                         :
5436                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5437                         :
5438                 else
5439                         try=''
5440                 fi
5441                 libnames="$libnames $try"
5442                 ;;
5443         *) libnames="$libnames $thislib" ;;
5444         esac
5445         done
5446         ;;
5447 esac
5448 xxx=normal
5449 case "$libc" in
5450 unknown)
5451         set /lib/libc.$so
5452         for xxx in $libpth; do
5453                 $test -r $1 || set $xxx/libc.$so
5454                 : The messy sed command sorts on library version numbers.
5455                 $test -r $1 || \
5456                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5457                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5458                                 h
5459                                 s/[0-9][0-9]*/0000&/g
5460                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5461                                 G
5462                                 s/\n/ /' | \
5463                          $sort | $sed -e 's/^.* //'`
5464                 eval set \$$#
5465         done
5466         $test -r $1 || set /usr/ccs/lib/libc.$so
5467         $test -r $1 || set /lib/libsys_s$_a
5468         ;;
5469 *)
5470         set blurfl
5471         ;;
5472 esac
5473 if $test -r "$1"; then
5474         echo "Your (shared) C library seems to be in $1."
5475         libc="$1"
5476 elif $test -r /lib/libc && $test -r /lib/clib; then
5477         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5478         xxx=apollo
5479         libc='/lib/clib /lib/libc'
5480         if $test -r /lib/syslib; then
5481                 echo "(Your math library is in /lib/syslib.)"
5482                 libc="$libc /lib/syslib"
5483         fi
5484 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5485         echo "Your C library seems to be in $libc, as you said before."
5486 elif $test -r $incpath/usr/lib/libc$_a; then
5487         libc=$incpath/usr/lib/libc$_a;
5488         echo "Your C library seems to be in $libc.  That's fine."
5489 elif $test -r /lib/libc$_a; then
5490         libc=/lib/libc$_a;
5491         echo "Your C library seems to be in $libc.  You're normal."
5492 else
5493         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5494                 :
5495         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5496                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5497         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5498                 :
5499         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5500                 :
5501         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5502                 :
5503         else
5504                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5505         fi
5506         if $test -r "$tans"; then
5507                 echo "Your C library seems to be in $tans, of all places."
5508                 libc=$tans
5509         else
5510                 libc='blurfl'
5511         fi
5512 fi
5513 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5514         dflt="$libc"
5515         cat <<EOM
5516
5517 If the guess above is wrong (which it might be if you're using a strange
5518 compiler, or your machine supports multiple models), you can override it here.
5519
5520 EOM
5521 else
5522         dflt=''
5523         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5524         cat >&4 <<EOM
5525 I can't seem to find your C library.  I've looked in the following places:
5526
5527 EOM
5528         $sed 's/^/      /' libpath
5529         cat <<EOM
5530
5531 None of these seems to contain your C library. I need to get its name...
5532
5533 EOM
5534 fi
5535 fn=f
5536 rp='Where is your C library?'
5537 . ./getfile
5538 libc="$ans"
5539
5540 echo " "
5541 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5542 set X `cat libnames`
5543 shift
5544 xxx=files
5545 case $# in 1) xxx=file; esac
5546 echo "Extracting names from the following $xxx for later perusal:" >&4
5547 echo " "
5548 $sed 's/^/      /' libnames >&4
5549 echo " "
5550 $echo $n "This may take a while...$c" >&4
5551
5552 for file in $*; do
5553         case $file in
5554         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5555         *) $nm $nm_opt $file 2>/dev/null;;
5556         esac
5557 done >libc.tmp
5558
5559 $echo $n ".$c"
5560 $grep fprintf libc.tmp > libc.ptf
5561 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5562 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5563 xxx='[ADTSIW]'
5564 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5565         eval $xscan;\
5566         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5567                 eval $xrun
5568 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5569         eval $xscan;\
5570         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5571                 eval $xrun
5572 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5573         eval $xscan;\
5574         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5575                 eval $xrun
5576 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5577         eval $xscan;\
5578         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5579                 eval $xrun
5580 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5581         eval $xscan;\
5582         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5583                 eval $xrun
5584 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5585         eval $xscan;\
5586         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5587                 eval $xrun
5588 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5589                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5590         eval $xscan;\
5591         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5592                 eval $xrun
5593 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5594         eval $xscan;\
5595         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5596                 eval $xrun
5597 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5598         eval $xscan;\
5599         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5600                 eval $xrun
5601 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5602         eval $xscan;\
5603         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5604                 eval $xrun
5605 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5606         eval $xscan;\
5607         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5608                 eval $xrun
5609 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5610         eval $xscan;\
5611         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5612                 eval $xrun
5613 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5614         eval $xscan;\
5615         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5616                 eval $xrun
5617 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5618         eval $xscan;\
5619         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5620                 eval $xrun
5621 else
5622         $nm -p $* 2>/dev/null >libc.tmp
5623         $grep fprintf libc.tmp > libc.ptf
5624         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5625                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5626         then
5627                 nm_opt='-p'
5628                 eval $xrun
5629         else
5630                 echo " "
5631                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5632                 com=''
5633                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5634                         for thisname in $libnames $libc; do
5635                                 $ar t $thisname >>libc.tmp
5636                         done
5637                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5638                         echo "Ok." >&4
5639                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5640                         # Repeat libc to extract forwarders to DLL entries too
5641                         for thisname in $libnames $libc; do
5642                                 $ar tv $thisname >>libc.tmp
5643                                 # Revision 50 of EMX has bug in $ar.
5644                                 # it will not extract forwarders to DLL entries
5645                                 # Use emximp which will extract exactly them.
5646                                 emximp -o tmp.imp $thisname \
5647                                     2>/dev/null && \
5648                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5649                                     < tmp.imp >>libc.tmp
5650                                 $rm tmp.imp
5651                         done
5652                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5653                         echo "Ok." >&4
5654                 else
5655                         echo "$ar didn't seem to work right." >&4
5656                         echo "Maybe this is a Cray...trying bld instead..." >&4
5657                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5658                         then
5659                                 for thisname in $libnames; do
5660                                         bld t $libnames | \
5661                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5662                                         $ar t $thisname >>libc.tmp
5663                                 done
5664                                 echo "Ok." >&4
5665                         else
5666                                 echo "That didn't work either.  Giving up." >&4
5667                                 exit 1
5668                         fi
5669                 fi
5670         fi
5671 fi
5672 nm_extract="$com"
5673 if $test -f /lib/syscalls.exp; then
5674         echo " "
5675         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5676         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5677 fi
5678 ;;
5679 esac
5680 $rm -f libnames libpath
5681
5682 : is a C symbol defined?
5683 csym='tlook=$1;
5684 case "$3" in
5685 -v) tf=libc.tmp; tc=""; tdc="";;
5686 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5687 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5688 esac;
5689 tx=yes;
5690 case "$reuseval-$4" in
5691 true-) ;;
5692 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5693 esac;
5694 case "$tx" in
5695 yes)
5696         case "$runnm" in
5697         true)
5698                 if $contains $tlook $tf >/dev/null 2>&1;
5699                 then tval=true;
5700                 else tval=false;
5701                 fi;;
5702         *)
5703                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5704                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5705                 then tval=true;
5706                 else tval=false;
5707                 fi;
5708                 $rm -f t t.c;;
5709         esac;;
5710 *)
5711         case "$tval" in
5712         $define) tval=true;;
5713         *) tval=false;;
5714         esac;;
5715 esac;
5716 eval "$2=$tval"'
5717
5718 : define an is-in-libc? function
5719 inlibc='echo " "; td=$define; tu=$undef;
5720 sym=$1; var=$2; eval "was=\$$2";
5721 tx=yes;
5722 case "$reuseval$was" in
5723 true) ;;
5724 true*) tx=no;;
5725 esac;
5726 case "$tx" in
5727 yes)
5728         set $sym tres -f;
5729         eval $csym;
5730         case "$tres" in
5731         true)
5732                 echo "$sym() found." >&4;
5733                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5734         *)
5735                 echo "$sym() NOT found." >&4;
5736                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5737         esac;;
5738 *)
5739         case "$was" in
5740         $define) echo "$sym() found." >&4;;
5741         *) echo "$sym() NOT found." >&4;;
5742         esac;;
5743 esac'
5744
5745 : see if sqrtl exists
5746 set sqrtl d_sqrtl
5747 eval $inlibc
5748
5749 : check for length of double
5750 echo " "
5751 case "$doublesize" in
5752 '')
5753         echo "Checking to see how big your double precision numbers are..." >&4
5754         $cat >try.c <<'EOCP'
5755 #include <stdio.h>
5756 int main()
5757 {
5758     printf("%d\n", (int)sizeof(double));
5759     exit(0);
5760 }
5761 EOCP
5762         set try
5763         if eval $compile_ok; then
5764                 doublesize=`$run ./try`
5765                 echo "Your double is $doublesize bytes long."
5766         else
5767                 dflt='8'
5768                 echo "(I can't seem to compile the test program.  Guessing...)"
5769                 rp="What is the size of a double precision number (in bytes)?"
5770                 . ./myread
5771                 doublesize="$ans"
5772         fi
5773         ;;
5774 esac
5775 $rm -f try.c try
5776
5777 : check for long doubles
5778 echo " "
5779 echo "Checking to see if you have long double..." >&4
5780 echo 'int main() { long double x = 7.0; }' > try.c
5781 set try
5782 if eval $compile; then
5783         val="$define"
5784         echo "You have long double."
5785 else
5786         val="$undef"
5787         echo "You do not have long double."
5788 fi
5789 $rm try.*
5790 set d_longdbl
5791 eval $setvar
5792
5793 : check for length of long double
5794 case "${d_longdbl}${longdblsize}" in
5795 $define)
5796         echo " "
5797         echo "Checking to see how big your long doubles are..." >&4
5798         $cat >try.c <<'EOCP'
5799 #include <stdio.h>
5800 int main()
5801 {
5802         printf("%d\n", sizeof(long double));
5803 }
5804 EOCP
5805         set try
5806         set try
5807         if eval $compile; then
5808                 longdblsize=`$run ./try`
5809                 echo "Your long doubles are $longdblsize bytes long."
5810         else
5811                 dflt='8'
5812                 echo " "
5813                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5814                 rp="What is the size of a long double (in bytes)?"
5815                 . ./myread
5816                 longdblsize="$ans"
5817         fi
5818         if $test "X$doublesize" = "X$longdblsize"; then
5819                 echo "(That isn't any different from an ordinary double.)"
5820         fi      
5821         ;;
5822 esac
5823 $rm -f try.* try
5824
5825 echo " "
5826
5827 if $test X"$d_longdbl" = X"$define"; then
5828
5829 echo "Checking how to print long doubles..." >&4
5830
5831 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5832         $cat >try.c <<'EOCP'
5833 #include <sys/types.h>
5834 #include <stdio.h>
5835 int main() {
5836   double d = 123.456;
5837   printf("%.3f\n", d);
5838 }
5839 EOCP
5840         set try
5841         if eval $compile; then
5842                 yyy=`$run ./try`
5843                 case "$yyy" in
5844                 123.456)
5845                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5846                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5847                         echo "We will use %f."
5848                         ;;
5849                 esac
5850         fi
5851 fi
5852
5853 if $test X"$sPRIfldbl" = X; then
5854         $cat >try.c <<'EOCP'
5855 #include <sys/types.h>
5856 #include <stdio.h>
5857 int main() {
5858   long double d = 123.456;
5859   printf("%.3Lf\n", d);
5860 }
5861 EOCP
5862         set try
5863         if eval $compile; then
5864                 yyy=`$run ./try`
5865                 case "$yyy" in
5866                 123.456)
5867                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5868                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5869                         echo "We will use %Lf."
5870                         ;;
5871                 esac
5872         fi
5873 fi
5874
5875 if $test X"$sPRIfldbl" = X; then
5876         $cat >try.c <<'EOCP'
5877 #include <sys/types.h>
5878 #include <stdio.h>
5879 int main() {
5880   long double d = 123.456;
5881   printf("%.3llf\n", d);
5882 }
5883 EOCP
5884         set try
5885         if eval $compile; then
5886                 yyy=`$run ./try`
5887                 case "$yyy" in
5888                 123.456)
5889                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5890                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5891                         echo "We will use %llf."
5892                         ;;
5893                 esac
5894         fi
5895 fi
5896
5897 if $test X"$sPRIfldbl" = X; then
5898         $cat >try.c <<'EOCP'
5899 #include <sys/types.h>
5900 #include <stdio.h>
5901 int main() {
5902   long double d = 123.456;
5903   printf("%.3lf\n", d);
5904 }
5905 EOCP
5906         set try
5907         if eval $compile; then
5908                 yyy=`$run ./try`
5909                 case "$yyy" in
5910                 123.456)
5911                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5912                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5913                         echo "We will use %lf."
5914                         ;;
5915                 esac
5916         fi
5917 fi
5918
5919 if $test X"$sPRIfldbl" = X; then
5920         echo "Cannot figure out how to print long doubles." >&4
5921 else
5922         sSCNfldbl=$sPRIfldbl    # expect consistency
5923 fi
5924
5925 $rm -f try try.*
5926
5927 fi # d_longdbl
5928
5929 case "$sPRIfldbl" in
5930 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5931         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5932         d_SCNfldbl="$undef";
5933         ;;
5934 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5935         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5936         d_SCNfldbl="$define";
5937         ;;
5938 esac
5939
5940 : see if modfl exists
5941 set modfl d_modfl
5942 eval $inlibc
5943
5944 d_modfl_pow32_bug="$undef"
5945
5946 case "$d_longdbl$d_modfl" in
5947 $define$define)
5948         $cat <<EOM
5949 Checking to see whether your modfl() is okay for large values...
5950 EOM
5951 $cat >try.c <<EOCP
5952 #include <math.h> 
5953 #include <stdio.h>
5954 int main() {
5955     long double nv = 4294967303.15;
5956     long double v, w;
5957     v = modfl(nv, &w);         
5958 #ifdef __GLIBC__
5959     printf("glibc");
5960 #endif
5961     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
5962     return 0;
5963 }
5964 EOCP
5965         case "$osname:$gccversion" in
5966         aix:)   saveccflags="$ccflags"
5967                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
5968         esac
5969         set try
5970         if eval $compile; then
5971                 foo=`$run ./try`
5972                 case "$foo" in
5973                 *" 4294967303.150000 1.150000 4294967302.000000")
5974                         echo >&4 "Your modfl() is broken for large values."
5975                         d_modfl_pow32_bug="$define"
5976                         case "$foo" in
5977                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
5978                         ;;
5979                         esac
5980                         ;;
5981                 *" 4294967303.150000 0.150000 4294967303.000000")
5982                         echo >&4 "Your modfl() seems okay for large values."
5983                         ;;
5984                 *)      echo >&4 "I don't understand your modfl() at all."
5985                         d_modfl="$undef"
5986                         ;;
5987                 esac
5988                 $rm -f try.* try core core.try.*
5989         else
5990                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
5991                 d_modfl="$undef"
5992         fi
5993         case "$osname:$gccversion" in
5994         aix:)   ccflags="$saveccflags" ;; # restore
5995         esac
5996         ;;
5997 esac
5998
5999 case "$ccflags" in
6000 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6001 esac
6002
6003 case "$uselongdouble" in
6004 $define|true|[yY]*)     dflt='y';;
6005 *) dflt='n';;
6006 esac
6007 cat <<EOM
6008
6009 Perl can be built to take advantage of long doubles which
6010 (if available) may give more accuracy and range for floating point numbers.
6011
6012 If this doesn't make any sense to you, just accept the default '$dflt'.
6013 EOM
6014 rp='Try to use long doubles if available?'
6015 . ./myread
6016 case "$ans" in
6017 y|Y)    val="$define"   ;;
6018 *)      val="$undef"    ;;
6019 esac
6020 set uselongdouble
6021 eval $setvar
6022
6023 case "$uselongdouble" in
6024 true|[yY]*) uselongdouble="$define" ;;
6025 esac
6026
6027 case "$uselongdouble" in
6028 $define)
6029 : Look for a hint-file generated 'call-back-unit'.  If the
6030 : user has specified that long doubles should be used,
6031 : we may need to set or change some other defaults.
6032         if $test -f uselongdouble.cbu; then
6033                 echo "Your platform has some specific hints for long doubles, using them..."
6034                 . ./uselongdouble.cbu
6035         else
6036                 $cat <<EOM
6037 (Your platform doesn't have any specific hints for long doubles.)
6038 EOM
6039         fi
6040         ;;
6041 esac
6042
6043 message=X
6044 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6045 $define:$define:$define)
6046         : You have both
6047         ;;
6048 $define:$define:$undef)
6049         message="I could not find modfl"
6050         ;;
6051 $define:$undef:$define)
6052         message="I could not find sqrtl"
6053         ;;
6054 $define:$undef:$undef)
6055         message="I found neither sqrtl nor modfl"
6056         ;;
6057 esac
6058
6059 if $test "$message" != X; then
6060         $cat <<EOM >&4
6061
6062 *** You requested the use of long doubles but you do not seem to have
6063 *** the mathematic functions for long doubles.
6064 *** ($message)
6065 *** I'm disabling the use of long doubles.
6066
6067 EOM
6068
6069         uselongdouble=$undef
6070 fi
6071
6072 case "$useperlio" in
6073 $define|true|[yY]*|'')  dflt='y';;
6074 *) dflt='n';;
6075 esac
6076 cat <<EOM
6077
6078 Previous version of $package used the standard IO mechanisms as
6079 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6080 alternate IO mechanisms via the PerlIO abstraction layer, but the
6081 stdio mechanism is still available if needed.  The abstraction layer
6082 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6083 Using PerlIO with sfio may cause problems with some extension modules.
6084
6085 If this doesn't make any sense to you, just accept the default '$dflt'.
6086 EOM
6087 rp='Use the PerlIO abstraction layer?'
6088 . ./myread
6089 case "$ans" in
6090 y|Y) 
6091         val="$define"
6092         ;;
6093 *)      
6094         echo "Ok, doing things the stdio way."
6095         val="$undef"
6096         ;;
6097 esac
6098 set useperlio
6099 eval $setvar 
6100
6101 case "$usesocks" in
6102 $define|true|[yY]*)
6103         case "$useperlio" in
6104         $define|true|[yY]*) ;;
6105         *)      cat >&4 <<EOM
6106
6107 You are using the SOCKS proxy protocol library which means that you
6108 should also use the PerlIO layer.  You may be headed for trouble.
6109
6110 EOM
6111                 ;;
6112         esac
6113         ;;
6114 esac
6115
6116         
6117 : determine the architecture name
6118 echo " "
6119 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6120         tarch=`arch`"-$osname"
6121 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6122         if uname -m > tmparch 2>&1 ; then
6123                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6124                         -e 's/$/'"-$osname/" tmparch`
6125         else
6126                 tarch="$osname"
6127         fi
6128         $rm -f tmparch
6129 else
6130         tarch="$osname"
6131 fi
6132 case "$myarchname" in
6133 ''|"$tarch") ;;
6134 *)
6135         echo "(Your architecture name used to be $myarchname.)"
6136         archname=''
6137         ;;
6138 esac
6139 case "$targetarch" in
6140 '') ;;
6141 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6142 esac
6143 myarchname="$tarch"
6144 case "$archname" in
6145 '') dflt="$tarch";;
6146 *) dflt="$archname";;
6147 esac
6148 rp='What is your architecture name'
6149 . ./myread
6150 archname="$ans"
6151 case "$usethreads" in
6152 $define)
6153         echo "Threads selected." >&4
6154         case "$archname" in
6155         *-thread*) echo "...and architecture name already has -thread." >&4
6156                 ;;
6157         *)      archname="$archname-thread"
6158                 echo "...setting architecture name to $archname." >&4
6159                 ;;
6160         esac
6161         ;;
6162 esac
6163 case "$usemultiplicity" in
6164 $define)
6165         echo "Multiplicity selected." >&4
6166         case "$archname" in
6167         *-multi*) echo "...and architecture name already has -multi." >&4
6168                 ;;
6169         *)      archname="$archname-multi"
6170                 echo "...setting architecture name to $archname." >&4
6171                 ;;
6172         esac
6173         ;;
6174 esac
6175 case "$use64bitint$use64bitall" in
6176 *"$define"*)
6177         case "$archname64" in
6178         '')
6179                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6180                 ;;
6181         *)
6182                 case "$use64bitint" in
6183                 "$define") echo "64 bit integers selected." >&4 ;;
6184                 esac
6185                 case "$use64bitall" in
6186                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6187                 esac
6188                 case "$archname" in
6189                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6190                         ;;
6191                 *)      archname="$archname-$archname64"
6192                         echo "...setting architecture name to $archname." >&4
6193                         ;;
6194                 esac
6195                 ;;
6196         esac
6197 esac
6198 case "$uselongdouble" in
6199 $define)
6200         echo "Long doubles selected." >&4
6201         case "$longdblsize" in
6202         $doublesize)
6203                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6204                 ;;
6205         *)
6206                 case "$archname" in
6207                 *-ld*) echo "...and architecture name already has -ld." >&4
6208                         ;;
6209                 *)      archname="$archname-ld"
6210                         echo "...setting architecture name to $archname." >&4
6211                         ;;
6212                 esac
6213                 ;;
6214         esac
6215         ;;
6216 esac
6217 case "$useperlio" in
6218 $define)
6219         echo "Perlio selected." >&4
6220         ;;
6221 *)
6222         echo "Perlio not selected, using stdio." >&4
6223         case "$archname" in
6224         *-stdio*) echo "...and architecture name already has -stdio." >&4
6225                 ;;
6226         *)      archname="$archname-stdio"
6227                 echo "...setting architecture name to $archname." >&4
6228                 ;;
6229         esac
6230         ;;
6231 esac
6232
6233 : determine root of directory hierarchy where package will be installed.
6234 case "$prefix" in
6235 '')
6236         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6237         ;;
6238 *)
6239         dflt="$prefix"
6240         ;;
6241 esac
6242 $cat <<EOM
6243
6244 By default, $package will be installed in $dflt/bin, manual pages
6245 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6246 installation directories. Typically this is something like /usr/local.
6247 If you wish to have binaries under /usr/bin but other parts of the
6248 installation under /usr/local, that's ok: you will be prompted
6249 separately for each of the installation directories, the prefix being
6250 only used to set the defaults.
6251
6252 EOM
6253 fn=d~
6254 rp='Installation prefix to use?'
6255 . ./getfile
6256 oldprefix=''
6257 case "$prefix" in
6258 '') ;;
6259 *)
6260         case "$ans" in
6261         "$prefix") ;;
6262         *) oldprefix="$prefix";;
6263         esac
6264         ;;
6265 esac
6266 prefix="$ans"
6267 prefixexp="$ansexp"
6268
6269 case "$afsroot" in
6270 '')     afsroot=/afs ;;
6271 *)      afsroot=$afsroot ;;
6272 esac
6273
6274 : is AFS running?
6275 echo " "
6276 case "$afs" in
6277 $define|true)   afs=true ;;
6278 $undef|false)   afs=false ;;
6279 *)      if test -d $afsroot; then
6280                 afs=true
6281         else
6282                 afs=false
6283         fi
6284         ;;
6285 esac
6286 if $afs; then
6287         echo "AFS may be running... I'll be extra cautious then..." >&4
6288 else
6289         echo "AFS does not seem to be running..." >&4
6290 fi
6291
6292 : determine installation prefix for where package is to be installed.
6293 if $afs; then 
6294 $cat <<EOM
6295
6296 Since you are running AFS, I need to distinguish the directory in which
6297 files will reside from the directory in which they are installed (and from
6298 which they are presumably copied to the former directory by occult means).
6299
6300 EOM
6301         case "$installprefix" in
6302         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6303         *) dflt="$installprefix";;
6304         esac
6305 else
6306 $cat <<EOM
6307
6308 In some special cases, particularly when building $package for distribution,
6309 it is convenient to distinguish between the directory in which files should 
6310 be installed from the directory ($prefix) in which they 
6311 will eventually reside.  For most users, these two directories are the same.
6312
6313 EOM
6314         case "$installprefix" in
6315         '') dflt=$prefix ;;
6316         *) dflt=$installprefix;;
6317         esac
6318 fi
6319 fn=d~
6320 rp='What installation prefix should I use for installing files?'
6321 . ./getfile
6322 installprefix="$ans"
6323 installprefixexp="$ansexp"
6324
6325 : set the prefixit variable, to compute a suitable default value
6326 prefixit='case "$3" in
6327 ""|none)
6328         case "$oldprefix" in
6329         "") eval "$1=\"\$$2\"";;
6330         *)
6331                 case "$3" in
6332                 "") eval "$1=";;
6333                 none)
6334                         eval "tp=\"\$$2\"";
6335                         case "$tp" in
6336                         ""|" ") eval "$1=\"\$$2\"";;
6337                         *) eval "$1=";;
6338                         esac;;
6339                 esac;;
6340         esac;;
6341 *)
6342         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6343         case "$tp" in
6344         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6345         /*-$oldprefix/*|\~*-$oldprefix/*)
6346                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6347         *) eval "$1=\"\$$2\"";;
6348         esac;;
6349 esac'
6350
6351 : get the patchlevel
6352 echo " "
6353 echo "Getting the current patchlevel..." >&4
6354 if $test -r $rsrc/patchlevel.h;then
6355         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6356         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6357         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6358         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6359         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6360         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6361        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6362 else
6363         revision=0
6364         patchlevel=0
6365         subversion=0
6366         api_revision=0
6367         api_version=0
6368         api_subversion=0
6369         perl_patchlevel=0
6370         $echo "(You do not have patchlevel.h.  Eek.)"
6371 fi
6372 if $test -r $rsrc/.patch ; then  
6373         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6374                 perl_patchlevel=`cat $rsrc/.patch`
6375         fi
6376 fi
6377 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6378 version_patchlevel_string="version $patchlevel subversion $subversion"
6379 case "$perl_patchlevel" in
6380 0|'') ;;
6381 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6382 esac
6383
6384 $echo "(You have $package $version_patchlevel_string.)"
6385
6386 case "$osname" in
6387 dos|vms)
6388         : XXX Should be a Configure test for double-dots in filenames.
6389         version=`echo $revision $patchlevel $subversion | \
6390                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6391         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6392                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6393         ;;
6394 *)
6395         version=`echo $revision $patchlevel $subversion | \
6396                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6397         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6398                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6399         ;;
6400 esac
6401 : Special case the 5.005_xx maintenance series, which used 5.005
6402 : without any subversion label as a subdirectory in $sitelib
6403 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6404         api_versionstring='5.005'
6405 fi
6406
6407 : determine installation style
6408 : For now, try to deduce it from prefix unless it is already set.
6409 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6410 case "$installstyle" in
6411 '')     case "$prefix" in
6412                 *perl*) dflt='lib';;
6413                 *) dflt='lib/perl5' ;;
6414         esac
6415         ;;
6416 *)      dflt="$installstyle" ;;
6417 esac
6418 : Probably not worth prompting for this since we prompt for all
6419 : the directories individually, and the prompt would be too long and
6420 : confusing anyway.
6421 installstyle=$dflt
6422
6423 : determine where private library files go
6424 : Usual default is /usr/local/lib/perl5/$version.
6425 : Also allow things like /opt/perl/lib/$version, since 
6426 : /opt/perl/lib/perl5... would be redundant.
6427 : The default "style" setting is made in installstyle.U
6428 case "$installstyle" in
6429 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6430 *)       set dflt privlib lib/$version ;;
6431 esac
6432 eval $prefixit
6433 $cat <<EOM
6434
6435 There are some auxiliary files for $package that need to be put into a
6436 private library directory that is accessible by everyone.
6437
6438 EOM
6439 fn=d~+
6440 rp='Pathname where the private library files will reside?'
6441 . ./getfile
6442 privlib="$ans"
6443 privlibexp="$ansexp"
6444 : Change installation prefix, if necessary.
6445 if $test X"$prefix" != X"$installprefix"; then
6446         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6447 else
6448         installprivlib="$privlibexp"
6449 fi
6450
6451 : set the prefixup variable, to restore leading tilda escape
6452 prefixup='case "$prefixexp" in
6453 "$prefix") ;;
6454 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6455 esac'
6456
6457 : determine where public architecture dependent libraries go
6458 set archlib archlib
6459 eval $prefixit
6460 : privlib default is /usr/local/lib/$package/$version
6461 : archlib default is /usr/local/lib/$package/$version/$archname
6462 : privlib may have an optional trailing /share.
6463 tdflt=`echo $privlib | $sed 's,/share$,,'`
6464 tdflt=$tdflt/$archname
6465 case "$archlib" in
6466 '')     dflt=$tdflt
6467         ;;
6468 *)      dflt="$archlib"
6469     ;;
6470 esac
6471 $cat <<EOM
6472
6473 $spackage contains architecture-dependent library files.  If you are
6474 sharing libraries in a heterogeneous environment, you might store
6475 these files in a separate location.  Otherwise, you can just include
6476 them with the rest of the public library files.
6477
6478 EOM
6479 fn=d+~
6480 rp='Where do you want to put the public architecture-dependent libraries?'
6481 . ./getfile
6482 archlib="$ans"
6483 archlibexp="$ansexp"
6484 if $test X"$archlib" = X"$privlib"; then
6485         d_archlib="$undef"
6486 else
6487         d_archlib="$define"
6488 fi
6489 : Change installation prefix, if necessary.
6490 if $test X"$prefix" != X"$installprefix"; then
6491         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6492 else
6493         installarchlib="$archlibexp"
6494 fi
6495
6496
6497 : Binary compatibility with 5.005 is not possible for builds
6498 : with advanced features
6499 case "$usethreads$usemultiplicity" in
6500 *define*)
6501         bincompat5005="$undef"
6502         d_bincompat5005="$undef"
6503         ;;
6504 *)      $cat <<EOM
6505
6506 This version of Perl can be compiled for binary compatibility with 5.005.
6507 If you decide to do so, you will be able to continue using most of the
6508 extensions that were compiled for Perl 5.005.
6509
6510 EOM
6511         case "$bincompat5005$d_bincompat5005" in
6512         *"$undef"*) dflt=n ;;
6513         *) dflt=y ;;
6514         esac
6515         rp='Binary compatibility with Perl 5.005?'
6516         . ./myread
6517         case "$ans" in
6518         y*) val="$define" ;;
6519         *)  val="$undef" ;;
6520         esac
6521         set d_bincompat5005
6522         eval $setvar
6523         case "$d_bincompat5005" in
6524         "$define")
6525                 bincompat5005="$define"
6526                 ;;
6527         *)      bincompat5005="$undef"
6528                 d_bincompat5005="$undef"
6529                 ;;
6530         esac
6531         ;;
6532 esac
6533
6534
6535 : see if setuid scripts can be secure
6536 $cat <<EOM
6537
6538 Some kernels have a bug that prevents setuid #! scripts from being
6539 secure.  Some sites have disabled setuid #! scripts because of this.
6540
6541 First let's decide if your kernel supports secure setuid #! scripts.
6542 (If setuid #! scripts would be secure but have been disabled anyway,
6543 don't say that they are secure if asked.)
6544
6545 EOM
6546
6547 val="$undef"
6548 if $test -d /dev/fd; then
6549         echo "#!$ls" >reflect
6550         chmod +x,u+s reflect
6551         ./reflect >flect 2>&1
6552         if $contains "/dev/fd" flect >/dev/null; then
6553                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6554                 val="$define"
6555         else
6556                 $cat <<EOM
6557 If you are not sure if they are secure, I can check but I'll need a
6558 username and password different from the one you are using right now.
6559 If you don't have such a username or don't want me to test, simply
6560 enter 'none'.
6561
6562 EOM
6563                 rp='Other username to test security of setuid scripts with?'
6564                 dflt='none'
6565                 . ./myread
6566                 case "$ans" in
6567                 n|none)
6568                         case "$d_suidsafe" in
6569                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6570                                 dflt=n;;
6571                         "$undef")
6572                                 echo "Well, the $hint value is *not* secure." >&4
6573                                 dflt=n;;
6574                         *)      echo "Well, the $hint value *is* secure." >&4
6575                                 dflt=y;;
6576                         esac
6577                         ;;
6578                 *)
6579                         $rm -f reflect flect
6580                         echo "#!$ls" >reflect
6581                         chmod +x,u+s reflect
6582                         echo >flect
6583                         chmod a+w flect
6584                         echo '"su" will (probably) prompt you for '"$ans's password."
6585                         su $ans -c './reflect >flect'
6586                         if $contains "/dev/fd" flect >/dev/null; then
6587                                 echo "Okay, it looks like setuid scripts are secure." >&4
6588                                 dflt=y
6589                         else
6590                                 echo "I don't think setuid scripts are secure." >&4
6591                                 dflt=n
6592                         fi
6593                         ;;
6594                 esac
6595                 rp='Does your kernel have *secure* setuid scripts?'
6596                 . ./myread
6597                 case "$ans" in
6598                 [yY]*)  val="$define";;
6599                 *)      val="$undef";;
6600                 esac
6601         fi
6602 else
6603         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6604         echo "(That's for file descriptors, not floppy disks.)"
6605         val="$undef"
6606 fi
6607 set d_suidsafe
6608 eval $setvar
6609
6610 $rm -f reflect flect
6611
6612 : now see if they want to do setuid emulation
6613 echo " "
6614 val="$undef"
6615 case "$d_suidsafe" in
6616 "$define")
6617         val="$undef"
6618         echo "No need to emulate SUID scripts since they are secure here." >&4
6619         ;;
6620 *)
6621         $cat <<EOM
6622 Some systems have disabled setuid scripts, especially systems where
6623 setuid scripts cannot be secure.  On systems where setuid scripts have
6624 been disabled, the setuid/setgid bits on scripts are currently
6625 useless.  It is possible for $package to detect those bits and emulate
6626 setuid/setgid in a secure fashion.  This emulation will only work if
6627 setuid scripts have been disabled in your kernel.
6628
6629 EOM
6630         case "$d_dosuid" in
6631         "$define") dflt=y ;;
6632         *) dflt=n ;;
6633         esac
6634         rp="Do you want to do setuid/setgid emulation?"
6635         . ./myread
6636         case "$ans" in
6637         [yY]*)  val="$define";;
6638         *)      val="$undef";;
6639         esac
6640         ;;
6641 esac
6642 set d_dosuid
6643 eval $setvar
6644
6645 : see if this is a malloc.h system
6646 set malloc.h i_malloc
6647 eval $inhdr
6648
6649 : see if stdlib is available
6650 set stdlib.h i_stdlib
6651 eval $inhdr
6652
6653 : determine which malloc to compile in
6654 echo " "
6655 case "$usemymalloc" in
6656 [yY]*|true|$define)     dflt='y' ;;
6657 [nN]*|false|$undef)     dflt='n' ;;
6658 *)      case "$ptrsize" in
6659         4) dflt='y' ;;
6660         *) dflt='n' ;;
6661         esac
6662         ;;
6663 esac
6664 rp="Do you wish to attempt to use the malloc that comes with $package?"
6665 . ./myread
6666 usemymalloc="$ans"
6667 case "$ans" in
6668 y*|true)
6669         usemymalloc='y'
6670         mallocsrc='malloc.c'
6671         mallocobj="malloc$_o"
6672         d_mymalloc="$define"
6673         case "$libs" in
6674         *-lmalloc*)
6675                 : Remove malloc from list of libraries to use
6676                 echo "Removing unneeded -lmalloc from library list" >&4
6677                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6678                 shift
6679                 libs="$*"
6680                 echo "libs = $libs" >&4
6681                 ;;
6682         esac
6683         ;;
6684 *)
6685         usemymalloc='n'
6686         mallocsrc=''
6687         mallocobj=''
6688         d_mymalloc="$undef"
6689         ;;
6690 esac
6691
6692 : compute the return types of malloc and free
6693 echo " "
6694 $cat >malloc.c <<END
6695 #$i_malloc I_MALLOC
6696 #$i_stdlib I_STDLIB
6697 #include <stdio.h>
6698 #include <sys/types.h>
6699 #ifdef I_MALLOC
6700 #include <malloc.h>
6701 #endif
6702 #ifdef I_STDLIB
6703 #include <stdlib.h>
6704 #endif
6705 #ifdef TRY_MALLOC
6706 void *malloc();
6707 #endif
6708 #ifdef TRY_FREE
6709 void free();
6710 #endif
6711 END
6712 case "$malloctype" in
6713 '')
6714         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6715                 malloctype='void *'
6716         else
6717                 malloctype='char *'
6718         fi
6719         ;;
6720 esac
6721 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6722
6723 case "$freetype" in
6724 '')
6725         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6726                 freetype='void'
6727         else
6728                 freetype='int'
6729         fi
6730         ;;
6731 esac
6732 echo "Your system uses $freetype free(), it would seem." >&4
6733 $rm -f malloc.[co]
6734 $cat <<EOM
6735
6736 After $package is installed, you may wish to install various
6737 add-on modules and utilities.  Typically, these add-ons will
6738 be installed under $prefix with the rest
6739 of this package.  However, you may wish to install such add-ons
6740 elsewhere under a different prefix.
6741
6742 If you do not wish to put everything under a single prefix, that's
6743 ok.  You will be prompted for the individual locations; this siteprefix
6744 is only used to suggest the defaults.
6745
6746 The default should be fine for most people.
6747
6748 EOM
6749 fn=d~+
6750 rp='Installation prefix to use for add-on modules and utilities?'
6751 : XXX Here might be another good place for an installstyle setting.
6752 case "$siteprefix" in
6753 '') dflt=$prefix ;;
6754 *)  dflt=$siteprefix ;;
6755 esac
6756 . ./getfile
6757 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6758 oldsiteprefix=''
6759 case "$siteprefix" in
6760 '') ;;
6761 *)      case "$ans" in
6762         "$prefix") ;;
6763         *) oldsiteprefix="$prefix";;
6764         esac
6765         ;;
6766 esac
6767 siteprefix="$ans"
6768 siteprefixexp="$ansexp"
6769
6770 : determine where site specific libraries go.
6771 : Usual default is /usr/local/lib/perl5/site_perl/$version
6772 : The default "style" setting is made in installstyle.U
6773 : XXX No longer works with Prefixit stuff.
6774 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6775 case "$sitelib" in
6776 '') case "$installstyle" in
6777         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6778         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6779         esac
6780         ;;
6781 *)      dflt="$sitelib"
6782         ;;
6783 esac
6784 $cat <<EOM
6785
6786 The installation process will create a directory for
6787 site-specific extensions and modules.  Most users find it convenient
6788 to place all site-specific files in this directory rather than in the
6789 main distribution directory.
6790
6791 EOM
6792 fn=d~+
6793 rp='Pathname for the site-specific library files?'
6794 . ./getfile
6795 sitelib="$ans"
6796 sitelibexp="$ansexp"
6797 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6798 : Change installation prefix, if necessary.
6799 if $test X"$prefix" != X"$installprefix"; then
6800         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6801 else
6802         installsitelib="$sitelibexp"
6803 fi
6804
6805 : determine where site specific architecture-dependent libraries go.
6806 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6807 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6808 : sitelib may have an optional trailing /share.
6809 case "$sitearch" in
6810 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6811         dflt="$dflt/$archname"
6812         ;;
6813 *)      dflt="$sitearch"
6814         ;;
6815 esac
6816 set sitearch sitearch none
6817 eval $prefixit
6818 $cat <<EOM
6819
6820 The installation process will also create a directory for
6821 architecture-dependent site-specific extensions and modules.
6822
6823 EOM
6824 fn=d~+
6825 rp='Pathname for the site-specific architecture-dependent library files?'
6826 . ./getfile
6827 sitearch="$ans"
6828 sitearchexp="$ansexp"
6829 : Change installation prefix, if necessary.
6830 if $test X"$prefix" != X"$installprefix"; then
6831         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6832 else
6833         installsitearch="$sitearchexp"
6834 fi
6835
6836 $cat <<EOM
6837
6838 The installation process will also create a directory for
6839 vendor-supplied add-ons.  Vendors who supply perl with their system
6840 may find it convenient to place all vendor-supplied files in this
6841 directory rather than in the main distribution directory.  This will
6842 ease upgrades between binary-compatible maintenance versions of perl.
6843
6844 Of course you may also use these directories in whatever way you see
6845 fit.  For example, you might use them to access modules shared over a
6846 company-wide network.
6847
6848 The default answer should be fine for most people.
6849 This causes further questions about vendor add-ons to be skipped
6850 and no vendor-specific directories will be configured for perl.
6851
6852 EOM
6853 rp='Do you want to configure vendor-specific add-on directories?'
6854 case "$usevendorprefix" in
6855 define|true|[yY]*) dflt=y ;;
6856 *)      : User may have set vendorprefix directly on Configure command line.
6857         case "$vendorprefix" in
6858         ''|' ') dflt=n ;;
6859         *)      dflt=y ;;
6860         esac
6861         ;;
6862 esac
6863 . ./myread
6864 case "$ans" in
6865 [yY]*)  fn=d~+
6866         rp='Installation prefix to use for vendor-supplied add-ons?'
6867         case "$vendorprefix" in
6868         '') dflt='' ;;
6869         *)  dflt=$vendorprefix ;;
6870         esac
6871         . ./getfile
6872         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6873         oldvendorprefix=''
6874         case "$vendorprefix" in
6875         '') ;;
6876         *)      case "$ans" in
6877                 "$prefix") ;;
6878                 *) oldvendorprefix="$prefix";;
6879                 esac
6880                 ;;
6881         esac
6882         usevendorprefix="$define"
6883         vendorprefix="$ans"
6884         vendorprefixexp="$ansexp"
6885         ;;
6886 *)      usevendorprefix="$undef"
6887         vendorprefix=''
6888         vendorprefixexp=''
6889         ;;
6890 esac
6891
6892 case "$vendorprefix" in
6893 '')     d_vendorlib="$undef"
6894         vendorlib=''
6895         vendorlibexp=''
6896         ;;
6897 *)      d_vendorlib="$define"
6898         : determine where vendor-supplied modules go.
6899         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6900         case "$vendorlib" in
6901         '')
6902                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6903                 case "$installstyle" in
6904                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6905                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6906                 esac
6907                 ;;
6908         *)      dflt="$vendorlib"
6909                 ;;
6910         esac
6911         fn=d~+
6912         rp='Pathname for the vendor-supplied library files?'
6913         . ./getfile
6914         vendorlib="$ans"
6915         vendorlibexp="$ansexp"
6916         ;;
6917 esac
6918 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6919 : Change installation prefix, if necessary.
6920 if $test X"$prefix" != X"$installprefix"; then
6921         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6922 else
6923         installvendorlib="$vendorlibexp"
6924 fi
6925
6926 case "$vendorprefix" in
6927 '')     d_vendorarch="$undef"
6928         vendorarch=''
6929         vendorarchexp=''
6930         ;;
6931 *)      d_vendorarch="$define"
6932         : determine where vendor-supplied architecture-dependent libraries go.
6933         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6934         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6935         : vendorlib may have an optional trailing /share.
6936         case "$vendorarch" in
6937         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6938                 dflt="$dflt/$archname"
6939                 ;;
6940         *)      dflt="$vendorarch" ;;
6941         esac
6942         fn=d~+
6943         rp='Pathname for vendor-supplied architecture-dependent files?'
6944         . ./getfile
6945         vendorarch="$ans"
6946         vendorarchexp="$ansexp"
6947         ;;
6948 esac
6949 : Change installation prefix, if necessary.
6950 if $test X"$prefix" != X"$installprefix"; then
6951         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6952 else
6953         installvendorarch="$vendorarchexp"
6954 fi
6955
6956 : Final catch-all directories to search
6957 $cat <<EOM
6958
6959 Lastly, you can have perl look in other directories for extensions and
6960 modules in addition to those already specified.
6961 These directories will be searched after 
6962         $sitearch 
6963         $sitelib 
6964 EOM
6965 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6966 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6967 echo ' '
6968 case "$otherlibdirs" in
6969 ''|' ') dflt='none' ;;
6970 *)      dflt="$otherlibdirs" ;;
6971 esac
6972 $cat <<EOM
6973 Enter a colon-separated set of extra paths to include in perl's @INC
6974 search path, or enter 'none' for no extra paths.
6975
6976 EOM
6977
6978 rp='Colon-separated list of additional directories for perl to search?'
6979 . ./myread
6980 case "$ans" in
6981 ' '|''|none)    otherlibdirs=' ' ;;     
6982 *)      otherlibdirs="$ans" ;;
6983 esac
6984 case "$otherlibdirs" in
6985 ' ') val=$undef ;;
6986 *)      val=$define ;;
6987 esac
6988 set d_perl_otherlibdirs
6989 eval $setvar
6990
6991 : Cruising for prototypes
6992 echo " "
6993 echo "Checking out function prototypes..." >&4
6994 $cat >prototype.c <<'EOCP'
6995 int main(int argc, char *argv[]) {
6996         exit(0);}
6997 EOCP
6998 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6999         echo "Your C compiler appears to support function prototypes."
7000         val="$define"
7001 else
7002         echo "Your C compiler doesn't seem to understand function prototypes."
7003         val="$undef"
7004 fi
7005 set prototype
7006 eval $setvar
7007 $rm -f prototype*
7008
7009 case "$prototype" in
7010 "$define") ;;
7011 *)      ansi2knr='ansi2knr'
7012         echo " "
7013         cat <<EOM >&4
7014
7015 $me:  FATAL ERROR:
7016 This version of $package can only be compiled by a compiler that 
7017 understands function prototypes.  Unfortunately, your C compiler 
7018         $cc $ccflags
7019 doesn't seem to understand them.  Sorry about that.
7020
7021 If GNU cc is available for your system, perhaps you could try that instead.  
7022
7023 Eventually, we hope to support building Perl with pre-ANSI compilers.
7024 If you would like to help in that effort, please contact <perlbug@perl.org>.
7025
7026 Aborting Configure now.
7027 EOM
7028         exit 2
7029         ;;
7030 esac
7031
7032 : determine where public executables go
7033 echo " "
7034 set dflt bin bin
7035 eval $prefixit
7036 fn=d~
7037 rp='Pathname where the public executables will reside?'
7038 . ./getfile
7039 if $test "X$ansexp" != "X$binexp"; then
7040         installbin=''
7041 fi
7042 bin="$ans"
7043 binexp="$ansexp"
7044 : Change installation prefix, if necessary.
7045 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7046 if $test X"$prefix" != X"$installprefix"; then
7047         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7048 else
7049         installbin="$binexp"
7050 fi
7051
7052 echo " "
7053 case "$extras" in
7054 '') dflt='n';;
7055 *) dflt='y';;
7056 esac
7057 cat <<EOM
7058 Perl can be built with extra modules or bundles of modules which
7059 will be fetched from the CPAN and installed alongside Perl.
7060
7061 Notice that you will need access to the CPAN; either via the Internet,
7062 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7063 be asked later to configure the CPAN.pm module which will in turn do
7064 the installation of the rest of the extra modules or bundles.)
7065
7066 Notice also that if the modules require any external software such as
7067 libraries and headers (the libz library and the zlib.h header for the
7068 Compress::Zlib module, for example) you MUST have any such software
7069 already installed, this configuration process will NOT install such
7070 things for you.
7071
7072 If this doesn't make any sense to you, just accept the default '$dflt'.
7073 EOM
7074 rp='Install any extra modules (y or n)?'
7075 . ./myread
7076 case "$ans" in
7077 y|Y)
7078         cat <<EOM
7079
7080 Please list any extra modules or bundles to be installed from CPAN,
7081 with spaces between the names.  The names can be in any format the
7082 'install' command of CPAN.pm will understand.  (Answer 'none',
7083 without the quotes, to install no extra modules or bundles.)
7084 EOM
7085         rp='Extras?'
7086         dflt="$extras"
7087         . ./myread
7088         extras="$ans"
7089 esac
7090 case "$extras" in
7091 ''|'none')
7092         val=''
7093         $rm -f ../extras.lst
7094         ;;
7095 *)      echo "(Saving the list of extras for later...)"
7096         echo "$extras" > ../extras.lst
7097         val="'$extras'"
7098         ;;
7099 esac
7100 set extras
7101 eval $setvar
7102 echo " "
7103
7104 : Find perl5.005 or later.
7105 echo "Looking for a previously installed perl5.005 or later... "
7106 case "$perl5" in
7107 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7108                 : Check if this perl is recent and can load a simple module
7109                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7110                         perl5=$tdir/perl
7111                         break;
7112                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7113                         perl5=$tdir/perl5
7114                         break;
7115                 fi
7116         done
7117         ;;
7118 *)      perl5="$perl5"
7119         ;;
7120 esac
7121 case "$perl5" in
7122 '')     echo "None found.  That's ok.";;
7123 *)      echo "Using $perl5." ;;
7124 esac
7125
7126 : Determine list of previous versions to include in @INC
7127 $cat > getverlist <<EOPL
7128 #!$perl5 -w
7129 use File::Basename;
7130 \$api_versionstring = "$api_versionstring";
7131 \$version = "$version";
7132 \$stem = "$sitelib_stem";
7133 \$archname = "$archname";
7134 EOPL
7135         $cat >> getverlist <<'EOPL'
7136 # Can't have leading @ because metaconfig interprets it as a command!
7137 ;@inc_version_list=();
7138 # XXX Redo to do opendir/readdir? 
7139 if (-d $stem) {
7140     chdir($stem);
7141     ;@candidates = glob("5.*");
7142 }
7143 else {
7144     ;@candidates = ();
7145 }
7146
7147 # XXX ToDo:  These comparisons must be reworked when two-digit
7148 # subversions come along, so that 5.7.10 compares as greater than
7149 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7150 # widespread that we can use the built-in version vectors rather
7151 # than reinventing them here.  For 5.6.0, however, we must
7152 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7153 foreach $d (@candidates) {
7154     if ($d lt $version) {
7155         if ($d ge $api_versionstring) {
7156             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7157         }
7158         elsif ($d ge "5.005") {
7159             unshift(@inc_version_list, grep { -d } $d);
7160         }
7161     }
7162     else {
7163         # Skip newer version.  I.e. don't look in
7164         # 5.7.0 if we're installing 5.6.1.
7165     }
7166 }
7167
7168 if (@inc_version_list) {
7169     print join(' ', @inc_version_list);
7170 }
7171 else {
7172     # Blank space to preserve value for next Configure run.
7173     print " ";
7174 }
7175 EOPL
7176 chmod +x getverlist
7177 case "$inc_version_list" in
7178 '')     if test -x "$perl5$exe_ext"; then
7179                 dflt=`$perl5 getverlist`
7180         else
7181                 dflt='none'
7182         fi
7183         ;;
7184 $undef) dflt='none' ;;
7185 *)  eval dflt=\"$inc_version_list\" ;;
7186 esac
7187 case "$dflt" in
7188 ''|' ') dflt=none ;;
7189 esac
7190 case "$dflt" in
7191 5.005) case "$bincompat5005" in
7192        $define|true|[yY]*) ;;
7193        *) dflt=none ;;
7194        esac
7195        ;;
7196 esac
7197 $cat <<'EOM'
7198
7199 In order to ease the process of upgrading, this version of perl 
7200 can be configured to use modules built and installed with earlier 
7201 versions of perl that were installed under $prefix.  Specify here
7202 the list of earlier versions that this version of perl should check.
7203 If Configure detected no earlier versions of perl installed under
7204 $prefix, then the list will be empty.  Answer 'none' to tell perl
7205 to not search earlier versions.
7206
7207 The default should almost always be sensible, so if you're not sure,
7208 just accept the default.
7209 EOM
7210
7211 rp='List of earlier versions to include in @INC?'
7212 . ./myread
7213 case "$ans" in
7214 [Nn]one|''|' ') inc_version_list=' ' ;;
7215 *) inc_version_list="$ans" ;;
7216 esac
7217 case "$inc_version_list" in
7218 ''|' ') 
7219         inc_version_list_init='0';;
7220 *)      inc_version_list_init=`echo $inc_version_list |
7221                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7222         ;;
7223 esac
7224 $rm -f getverlist
7225
7226 : determine whether to install perl also as /usr/bin/perl
7227
7228 echo " "
7229 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7230         $cat <<EOM
7231 Many scripts expect perl to be installed as /usr/bin/perl.
7232 I can install the perl you are about to compile also as /usr/bin/perl
7233 (in addition to $installbin/perl).
7234 EOM
7235         case "$installusrbinperl" in
7236         "$undef"|[nN]*) dflt='n';;
7237         *)              dflt='y';;
7238         esac
7239         rp="Do you want to install perl as /usr/bin/perl?"
7240         . ./myread
7241         case "$ans" in
7242         [yY]*)  val="$define";;
7243         *)      val="$undef" ;;
7244         esac
7245 else
7246         val="$undef"
7247 fi
7248 set installusrbinperl
7249 eval $setvar
7250
7251 : see if dld is available
7252 set dld.h i_dld
7253 eval $inhdr
7254
7255 : see if dlopen exists
7256 xxx_runnm="$runnm"
7257 runnm=false
7258 set dlopen d_dlopen
7259 eval $inlibc
7260 runnm="$xxx_runnm"
7261
7262 : determine which dynamic loading, if any, to compile in
7263 echo " "
7264 dldir="ext/DynaLoader"
7265 case "$usedl" in
7266 $define|y|true)
7267         dflt='y'
7268         usedl="$define"
7269         ;;
7270 $undef|n|false)
7271         dflt='n'
7272         usedl="$undef"
7273         ;;
7274 *) 
7275         dflt='n'
7276         case "$d_dlopen" in
7277             $define) dflt='y' ;;
7278         esac
7279         case "$i_dld" in
7280             $define) dflt='y' ;;
7281         esac
7282         : Does a dl_xxx.xs file exist for this operating system
7283         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7284         ;;
7285 esac
7286 rp="Do you wish to use dynamic loading?"
7287 . ./myread
7288 usedl="$ans"
7289 case "$ans" in
7290 y*) usedl="$define"
7291         case "$dlsrc" in
7292         '')
7293                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7294                         dflt="$dldir/dl_${osname}.xs"
7295                 elif $test "$d_dlopen" = "$define" ; then
7296                         dflt="$dldir/dl_dlopen.xs"
7297                 elif $test "$i_dld" = "$define" ; then
7298                         dflt="$dldir/dl_dld.xs"
7299                 else
7300                         dflt=''
7301                 fi
7302                 ;;
7303         *)      dflt="$dldir/$dlsrc"
7304                 ;;
7305         esac
7306     echo "The following dynamic loading files are available:"
7307         : Can not go over to $dldir because getfile has path hard-coded in.
7308         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7309         rp="Source file to use for dynamic loading"
7310         fn="fne"
7311         gfpth="$src"
7312         . ./getfile
7313         usedl="$define"
7314         : emulate basename
7315         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7316
7317         $cat << EOM
7318
7319 Some systems may require passing special flags to $cc -c to
7320 compile modules that will be used to create a shared library.
7321 To use no flags, say "none".
7322
7323 EOM
7324     case "$cccdlflags" in
7325     '') case "$gccversion" in
7326                 '') case "$osname" in
7327                         hpux)   dflt='+z' ;;
7328                         next)   dflt='none' ;;
7329                         irix*)  dflt='-KPIC' ;;
7330                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7331                         sunos)  dflt='-pic' ;;
7332                         *)      dflt='none' ;;
7333                     esac
7334                         ;;
7335                 *)  case "$osname" in
7336                         darwin) dflt='none' ;;
7337                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7338                         *)      dflt='-fpic' ;;
7339                     esac ;;
7340             esac ;;
7341         ' ') dflt='none' ;;
7342     *)  dflt="$cccdlflags" ;;
7343     esac
7344     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7345     . ./myread
7346     case "$ans" in
7347     none) cccdlflags=' ' ;;
7348     *) cccdlflags="$ans" ;;
7349     esac
7350
7351     cat << EOM
7352
7353 Some systems use ld to create libraries that can be dynamically loaded,
7354 while other systems (such as those using ELF) use $cc.
7355
7356 EOM
7357         case "$ld" in
7358         '')     $cat >try.c <<'EOM'
7359 /* Test for whether ELF binaries are produced */
7360 #include <fcntl.h>
7361 #include <stdlib.h>
7362 int main() {
7363         char b[4];
7364         int i = open("a.out",O_RDONLY);
7365         if(i == -1) 
7366                 exit(1); /* fail */
7367         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7368                 exit(0); /* succeed (yes, it's ELF) */
7369         else
7370                 exit(1); /* fail */
7371 }
7372 EOM
7373                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7374                         cat <<EOM
7375 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7376 EOM
7377                         dflt="$cc"
7378                 else
7379                         echo "I'll use ld to build dynamic libraries."
7380                         dflt='ld'
7381                 fi
7382                 rm -f try.c a.out
7383                 ;;
7384         *)      dflt="$ld"
7385                 ;;
7386         esac
7387
7388     rp="What command should be used to create dynamic libraries?"
7389     . ./myread
7390         ld="$ans"
7391
7392     cat << EOM
7393
7394 Some systems may require passing special flags to $ld to create a
7395 library that can be dynamically loaded.  If your ld flags include
7396 -L/other/path options to locate libraries outside your loader's normal
7397 search path, you may need to specify those -L options here as well.  To
7398 use no flags, say "none".
7399
7400 EOM
7401     case "$lddlflags" in
7402     '') case "$osname" in
7403                         beos) dflt='-nostart' ;;
7404                         hpux) dflt='-b';
7405                               case "$gccversion" in
7406                               '') dflt="$dflt +vnocompatwarnings" ;;
7407                               esac
7408                               ;;        
7409                         linux|irix*)    dflt='-shared' ;;
7410                         next)  dflt='none' ;;
7411                         solaris) dflt='-G' ;;
7412                         sunos) dflt='-assert nodefinitions' ;;
7413                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7414                 *)     dflt='none' ;;
7415                         esac
7416                         ;;
7417     *) dflt="$lddlflags" ;;
7418     esac
7419
7420         : Try to guess additional flags to pick up local libraries.
7421         : Be careful not to append to a plain 'none'
7422         case "$dflt" in
7423         none) dflt='' ;;
7424         esac
7425         for thisflag in $ldflags; do
7426                 case "$thisflag" in
7427                 -L*|-R*|-Wl,-R*)
7428                         case " $dflt " in
7429                         *" $thisflag "*) ;;
7430                         *) dflt="$dflt $thisflag" ;;
7431                         esac
7432                         ;;
7433                 esac
7434         done
7435
7436         case "$dflt" in
7437         ''|' ') dflt='none' ;;
7438         esac
7439
7440     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7441     . ./myread
7442     case "$ans" in
7443     none) lddlflags=' ' ;;
7444     *) lddlflags="$ans" ;;
7445     esac
7446
7447         cat <<EOM
7448
7449 Some systems may require passing special flags to $cc to indicate that
7450 the resulting executable will use dynamic linking.  To use no flags,
7451 say "none".
7452
7453 EOM
7454     case "$ccdlflags" in
7455     '') case "$osname" in
7456                 hpux)   dflt='-Wl,-E' ;;
7457                 linux)  dflt='-rdynamic' ;;
7458                 next)   dflt='none' ;;
7459                 sunos)  dflt='none' ;;
7460                 *)      dflt='none' ;;
7461             esac ;;
7462     ' ')  dflt='none' ;;
7463     *)  dflt="$ccdlflags" ;;
7464     esac
7465     rp="Any special flags to pass to $cc to use dynamic linking?"
7466     . ./myread
7467     case "$ans" in
7468     none) ccdlflags=' ' ;;
7469     *) ccdlflags="$ans" ;;
7470     esac
7471     ;;
7472 *)  usedl="$undef"
7473         ld='ld'
7474     dlsrc='dl_none.xs'
7475     lddlflags=''
7476     ccdlflags=''
7477     ;;
7478 esac
7479
7480 also=''
7481 case "$usedl" in
7482 $undef)
7483         # No dynamic loading being used, so don't bother even to prompt.
7484         useshrplib='false'
7485         ;;
7486 *)      case "$useshrplib" in
7487         '')     case "$osname" in
7488                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7489                         dflt=y
7490                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7491                         ;;
7492                 next*)
7493                         case "$osvers" in
7494                         4*)     dflt=y
7495                                 also='Building a shared libperl is needed for MAB support.'
7496                                 ;;
7497                         *)      dflt=n
7498                                 ;;
7499                         esac
7500                         ;;
7501                 *)      dflt=n
7502                         ;;
7503                 esac
7504                 ;;
7505         $define|true|[Yy]*)
7506                 dflt=y
7507                 ;;
7508         *)      dflt=n
7509                 ;;
7510         esac
7511         $cat << EOM
7512
7513 The perl executable is normally obtained by linking perlmain.c with
7514 libperl${_a}, any static extensions (usually just DynaLoader), and
7515 any other libraries needed on this system (such as -lm, etc.).  Since
7516 your system supports dynamic loading, it is probably possible to build
7517 a shared libperl.$so.  If you will have more than one executable linked
7518 to libperl.$so, this will significantly reduce the size of each
7519 executable, but it may have a noticeable affect on performance.  The
7520 default is probably sensible for your system.
7521 $also
7522
7523 EOM
7524         rp="Build a shared libperl.$so (y/n)"
7525         . ./myread
7526         case "$ans" in
7527         true|$define|[Yy]*)
7528                 useshrplib='true'  ;;
7529         *)      useshrplib='false' ;;
7530         esac
7531         ;;
7532 esac
7533
7534 case "$useshrplib" in
7535 true)
7536         case "$libperl" in
7537         '')
7538                 # Figure out a good name for libperl.so.  Since it gets stored in
7539                 # a version-specific architecture-dependent library, the version
7540                 # number isn't really that important, except for making cc/ld happy.
7541                 #
7542                 # A name such as libperl.so.3.1
7543                 majmin="libperl.$so.$patchlevel.$subversion"
7544                 # A name such as libperl.so.301
7545                 majonly=`echo $patchlevel $subversion |
7546                         $awk '{printf "%d%02d", $1, $2}'`
7547                 majonly=libperl.$so.$majonly
7548                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7549                 # rely on figuring it out from the naming of libc.
7550                 case "${osname}${osvers}" in
7551                 next4*)
7552                         dflt=libperl.5.$so
7553                         # XXX How handle the --version stuff for MAB?
7554                         ;;
7555                 linux*)  # ld won't link with a bare -lperl otherwise.
7556                         dflt=libperl.$so
7557                         ;;
7558                 cygwin*) # include version
7559                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7560                         ;;
7561                 *)      # Try to guess based on whether libc has major.minor.
7562                         case "$libc" in
7563                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7564                         *libc.$so.[0-9]*) dflt=$majonly ;;
7565                         *)      dflt=libperl.$so ;;
7566                         esac
7567                         ;;
7568                 esac
7569                 ;;
7570         *)      dflt=$libperl
7571                 ;;
7572         esac
7573         cat << EOM
7574
7575 I need to select a good name for the shared libperl.  If your system uses
7576 library names with major and minor numbers, then you might want something
7577 like $majmin.  Alternatively, if your system uses a single version
7578 number for shared libraries, then you might want to use $majonly.
7579 Or, your system might be quite happy with a simple libperl.$so.
7580
7581 Since the shared libperl will get installed into a version-specific
7582 architecture-dependent directory, the version number of the shared perl
7583 library probably isn't important, so the default should be o.k.
7584
7585 EOM
7586         rp='What name do you want to give to the shared libperl?'
7587         . ./myread
7588         libperl=$ans
7589         echo "Ok, I'll use $libperl"
7590         ;;
7591 *)
7592         libperl="libperl${_a}"
7593         ;;
7594 esac
7595
7596 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7597 case "$shrpdir" in
7598 '') ;;
7599 *)      $cat >&4 <<EOM
7600 WARNING:  Use of the shrpdir variable for the installation location of
7601 the shared $libperl is not supported.  It was never documented and
7602 will not work in this version.  Let me (perlbug@perl.org)
7603 know of any problems this may cause.
7604
7605 EOM
7606         case "$shrpdir" in
7607         "$archlibexp/CORE")
7608                 $cat >&4 <<EOM
7609 But your current setting of $shrpdir is
7610 the default anyway, so it's harmless.
7611 EOM
7612                 ;;
7613         *)
7614                 $cat >&4 <<EOM
7615 Further, your current attempted setting of $shrpdir
7616 conflicts with the value of $archlibexp/CORE
7617 that installperl will use.
7618 EOM
7619                 ;;
7620         esac
7621         ;;
7622 esac
7623
7624 # How will the perl executable find the installed shared $libperl?
7625 # Add $xxx to ccdlflags.
7626 # If we can't figure out a command-line option, use $shrpenv to
7627 # set env LD_RUN_PATH.  The main perl makefile uses this.
7628 shrpdir=$archlibexp/CORE
7629 xxx=''
7630 tmp_shrpenv=''
7631 if "$useshrplib"; then
7632     case "$osname" in 
7633         aix)
7634                 # We'll set it in Makefile.SH...
7635                 ;;
7636         solaris)
7637                 xxx="-R $shrpdir"
7638                 ;;
7639         freebsd|netbsd)
7640                 xxx="-Wl,-R$shrpdir"
7641                 ;;
7642         linux|irix*|dec_osf)
7643                 xxx="-Wl,-rpath,$shrpdir"
7644                 ;;
7645         next)
7646                 # next doesn't like the default...
7647                 ;;
7648         beos)
7649                 # beos doesn't like the default, either.
7650                 ;;
7651         hpux*)
7652                 # hpux doesn't like the default, either.
7653                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7654                 ;;
7655         *)
7656                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7657                 ;;
7658         esac
7659         case "$xxx" in
7660         '') ;;
7661         *)      
7662                 # Only add $xxx if it isn't already in ccdlflags.
7663                 case " $ccdlflags " in
7664                 *" $xxx "*)     ;;
7665                 *)      ccdlflags="$ccdlflags $xxx"
7666                         cat <<EOM >&4
7667
7668 Adding $xxx to the flags
7669 passed to $ld so that the perl executable will find the 
7670 installed shared $libperl.
7671
7672 EOM
7673                         ;;
7674                 esac
7675                 ;;
7676         esac
7677 fi
7678 # Fix ccdlflags in AIX for building external extensions.
7679 # (For building Perl itself bare -bE:perl.exp is needed,
7680 #  Makefile.SH takes care of this.)
7681 case "$osname" in
7682 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7683 esac
7684 # Respect a hint or command-line value.
7685 case "$shrpenv" in
7686 '') shrpenv="$tmp_shrpenv" ;;
7687 esac
7688 case "$ldlibpthname" in
7689 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7690 none)   ldlibpthname='' ;;
7691 esac
7692
7693 : determine where manual pages are on this system
7694 echo " "
7695 case "$sysman" in
7696 '') 
7697         syspath='/usr/share/man/man1 /usr/man/man1'
7698         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7699         syspath="$syspath /usr/man/u_man/man1"
7700         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7701         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7702         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7703         sysman=`./loc . /usr/man/man1 $syspath`
7704         ;;
7705 esac
7706 if $test -d "$sysman"; then
7707         echo "System manual is in $sysman." >&4
7708 else
7709         echo "Could not find manual pages in source form." >&4
7710 fi
7711
7712 : determine where manual pages go
7713 set man1dir man1dir none
7714 eval $prefixit
7715 $cat <<EOM
7716
7717 $spackage has manual pages available in source form.
7718 EOM
7719 case "$nroff" in
7720 nroff)
7721         echo "However, you don't have nroff, so they're probably useless to you."
7722         case "$man1dir" in
7723         '') man1dir="none";;
7724         esac;;
7725 esac
7726 echo "If you don't want the manual sources installed, answer 'none'."
7727 case "$man1dir" in
7728 ' ') dflt=none
7729         ;;
7730 '')
7731         lookpath="$prefixexp/share/man/man1"
7732         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7733         lookpath="$lookpath $prefixexp/man/p_man/man1"
7734         lookpath="$lookpath $prefixexp/man/u_man/man1"
7735         lookpath="$lookpath $prefixexp/man/man.1"
7736         case "$sysman" in
7737         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7738         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7739         esac
7740         set dflt
7741         eval $prefixup
7742         ;;
7743 *)  dflt="$man1dir"
7744         ;;
7745 esac
7746 echo " "
7747 fn=dn+~
7748 rp="Where do the main $spackage manual pages (source) go?"
7749 . ./getfile
7750 if $test "X$man1direxp" != "X$ansexp"; then
7751         installman1dir=''
7752 fi
7753 man1dir="$ans"
7754 man1direxp="$ansexp"
7755 case "$man1dir" in
7756 '')     man1dir=' '
7757         installman1dir='';;
7758 esac
7759
7760 : Change installation prefix, if necessary.
7761 if $test X"$prefix" != X"$installprefix"; then
7762         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7763 else
7764         installman1dir="$man1direxp"
7765 fi
7766
7767 : What suffix to use on installed man pages
7768
7769 case "$man1dir" in
7770 ' ')
7771         man1ext='0'
7772         ;;
7773 *)
7774         rp="What suffix should be used for the main $spackage man pages?"
7775         case "$man1ext" in
7776         '')     case "$man1dir" in
7777                 *1)  dflt=1 ;;
7778                 *1p) dflt=1p ;;
7779                 *1pm) dflt=1pm ;;
7780                 *l) dflt=l;;
7781                 *n) dflt=n;;
7782                 *o) dflt=o;;
7783                 *p) dflt=p;;
7784                 *C) dflt=C;;
7785                 *L) dflt=L;;
7786                 *L1) dflt=L1;;
7787                 *) dflt=1;;
7788                 esac
7789                 ;;
7790         *)      dflt="$man1ext";;
7791         esac
7792         . ./myread
7793         man1ext="$ans"
7794         ;;
7795 esac
7796
7797 : see if we can have long filenames
7798 echo " "
7799 first=123456789abcdef
7800 $rm -f $first
7801 if (echo hi >$first) 2>/dev/null; then
7802         if $test -f 123456789abcde; then
7803                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7804                 val="$undef"
7805         else
7806                 echo 'You can have filenames longer than 14 characters.'>&4
7807                 val="$define"
7808         fi
7809 else
7810         $cat <<'EOM'
7811 You can't have filenames longer than 14 chars.
7812 You can't even think about them!
7813 EOM
7814         val="$undef"
7815 fi 
7816 set d_flexfnam
7817 eval $setvar
7818 $rm -rf 123456789abcde*
7819
7820 : determine where library module manual pages go
7821 set man3dir man3dir none
7822 eval $prefixit
7823 $cat <<EOM
7824
7825 $spackage has manual pages for many of the library modules.
7826 EOM
7827
7828 case "$nroff" in
7829 nroff)
7830         $cat <<'EOM'
7831 However, you don't have nroff, so they're probably useless to you.
7832 EOM
7833         case "$man3dir" in
7834         '') man3dir="none";;
7835         esac;;
7836 esac
7837
7838 case "$d_flexfnam" in
7839 undef)
7840         $cat <<'EOM'
7841 However, your system can't handle the long file names like File::Basename.3. 
7842 EOM
7843         case "$man3dir" in
7844         '') man3dir="none";;
7845         esac;;
7846 esac
7847
7848 echo "If you don't want the manual sources installed, answer 'none'."
7849 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7850 case "$man3dir" in
7851 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7852         if $test -d "$privlib/man/man3"; then
7853                 cat <<EOM >&4
7854
7855 WARNING:  Previous versions of perl installed man3 pages into
7856 $privlib/man/man3.  This version will suggest a 
7857 new default of $dflt.  
7858 EOM
7859                 tdflt=$dflt
7860                 dflt='n'
7861                 rp='Do you wish to preserve the old behavior?(y/n)'
7862                 . ./myread
7863                 case "$ans" in
7864                 y*) dflt="$privlib/man/man3" ;;
7865                 *)  dflt=$tdflt ;;
7866                 esac
7867     fi
7868         ;;
7869 *)      dflt="$man3dir" ;;
7870 esac
7871 case "$dflt" in
7872 ' ') dflt=none ;;
7873 esac
7874 echo " "
7875 fn=dn+~
7876 rp="Where do the $package library man pages (source) go?"
7877 . ./getfile
7878 man3dir="$ans"
7879 man3direxp="$ansexp"
7880 case "$man3dir" in
7881 '')     man3dir=' '
7882         installman3dir='';;
7883 esac
7884
7885 : Change installation prefix, if necessary.
7886 if $test X"$prefix" != X"$installprefix"; then
7887         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7888 else
7889         installman3dir="$man3direxp"
7890 fi
7891
7892 : What suffix to use on installed man pages
7893 case "$man3dir" in
7894 ' ')
7895         man3ext='0'
7896         ;;
7897 *)
7898         rp="What suffix should be used for the $package library man pages?"
7899         case "$man3ext" in
7900         '')     case "$man3dir" in
7901                 *3)  dflt=3 ;;
7902                 *3p) dflt=3p ;;
7903                 *3pm) dflt=3pm ;;
7904                 *l) dflt=l;;
7905                 *n) dflt=n;;
7906                 *o) dflt=o;;
7907                 *p) dflt=p;;
7908                 *C) dflt=C;;
7909                 *L) dflt=L;;
7910                 *L3) dflt=L3;;
7911                 *) dflt=3;;
7912                 esac
7913                 ;;
7914         *)      dflt="$man3ext";;
7915         esac
7916         . ./myread
7917         man3ext="$ans"
7918         ;;
7919 esac
7920
7921 : see if we have to deal with yellow pages, now NIS.
7922 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7923         if $test -f /usr/etc/nibindd; then
7924                 echo " "
7925                 echo "I'm fairly confident you're on a NeXT."
7926                 echo " "
7927                 rp='Do you get the hosts file via NetInfo?'
7928                 dflt=y
7929                 case "$hostcat" in
7930                 nidump*) ;;
7931                 '') ;;
7932                 *) dflt=n;;
7933                 esac
7934                 . ./myread
7935                 case "$ans" in
7936                 y*) hostcat='nidump hosts .';;
7937                 *)      case "$hostcat" in
7938                         nidump*) hostcat='';;
7939                         esac
7940                         ;;
7941                 esac
7942         fi
7943         case "$hostcat" in
7944         nidump*) ;;
7945         *)
7946                 case "$hostcat" in
7947                 *ypcat*) dflt=y;;
7948                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7949                                 dflt=y
7950                         else
7951                                 dflt=n
7952                         fi;;
7953                 *) dflt=n;;
7954                 esac
7955                 echo " "
7956                 rp='Are you getting the hosts file via yellow pages?'
7957                 . ./myread
7958                 case "$ans" in
7959                 y*) hostcat='ypcat hosts';;
7960                 *) hostcat='cat /etc/hosts';;
7961                 esac
7962                 ;;
7963         esac
7964 fi
7965 case "$hostcat" in
7966 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7967 esac
7968 case "$groupcat" in
7969 '') test -f /etc/group && groupcat='cat /etc/group';;
7970 esac
7971 case "$passcat" in
7972 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7973 esac
7974
7975 : now get the host name
7976 echo " "
7977 echo "Figuring out host name..." >&4
7978 case "$myhostname" in
7979 '') cont=true
7980         echo 'Maybe "hostname" will work...'
7981         if tans=`sh -c hostname 2>&1` ; then
7982                 myhostname=$tans
7983                 phostname=hostname
7984                 cont=''
7985         fi
7986         ;;
7987 *) cont='';;
7988 esac
7989 if $test "$cont"; then
7990         if ./xenix; then
7991                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7992                 if tans=`cat /etc/systemid 2>&1` ; then
7993                         myhostname=$tans
7994                         phostname='cat /etc/systemid'
7995                         echo "Whadyaknow.  Xenix always was a bit strange..."
7996                         cont=''
7997                 fi
7998         elif $test -r /etc/systemid; then
7999                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8000         fi
8001 fi
8002 if $test "$cont"; then
8003         echo 'No, maybe "uuname -l" will work...'
8004         if tans=`sh -c 'uuname -l' 2>&1` ; then
8005                 myhostname=$tans
8006                 phostname='uuname -l'
8007         else
8008                 echo 'Strange.  Maybe "uname -n" will work...'
8009                 if tans=`sh -c 'uname -n' 2>&1` ; then
8010                         myhostname=$tans
8011                         phostname='uname -n'
8012                 else
8013                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8014                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8015                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8016                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8017                         else
8018                                 case "$myhostname" in
8019                                 '') echo "Does this machine have an identity crisis or something?"
8020                                         phostname='';;
8021                                 *)
8022                                         echo "Well, you said $myhostname before..."
8023                                         phostname='echo $myhostname';;
8024                                 esac
8025                         fi
8026                 fi
8027         fi
8028 fi
8029 case "$myhostname" in
8030 '') myhostname=noname ;;
8031 esac
8032 : you do not want to know about this
8033 set $myhostname
8034 myhostname=$1
8035
8036 : verify guess
8037 if $test "$myhostname" ; then
8038         dflt=y
8039         rp='Your host name appears to be "'$myhostname'".'" Right?"
8040         . ./myread
8041         case "$ans" in
8042         y*) ;;
8043         *) myhostname='';;
8044         esac
8045 fi
8046
8047 : bad guess or no guess
8048 while $test "X$myhostname" = X ; do
8049         dflt=''
8050         rp="Please type the (one word) name of your host:"
8051         . ./myread
8052         myhostname="$ans"
8053 done
8054
8055 : translate upper to lower if necessary
8056 case "$myhostname" in
8057 *[A-Z]*)
8058         echo "(Normalizing case in your host name)"
8059         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8060         ;;
8061 esac
8062
8063 case "$myhostname" in
8064 *.*)
8065         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8066         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8067         echo "(Trimming domain name from host name--host name is now $myhostname)"
8068         ;;
8069 *) case "$mydomain" in
8070         '')
8071                 {
8072                         test "X$hostcat" = "Xypcat hosts" &&
8073                         ypmatch "$myhostname" hosts 2>/dev/null |\
8074                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8075                         $test -s hosts
8076                 } || {
8077                         test "X$hostcat" != "X" &&
8078                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8079                                         /[       ]$myhostname[  . ]/p" > hosts
8080                 }
8081                 tmp_re="[       . ]"
8082                 if $test -f hosts; then
8083                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8084                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8085                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8086                                 hosts | $sort | $uniq | \
8087                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8088                         case `$echo X$dflt` in
8089                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8090                                 dflt=.
8091                                 ;;
8092                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8093                                 ;;
8094                         esac
8095                 else
8096                         echo "(I cannot locate a hosts database anywhere)"
8097                         dflt=.
8098                 fi
8099                 case "$dflt" in
8100                 .)
8101                         tans=`./loc resolv.conf X /etc /usr/etc`
8102                         if $test -f "$tans"; then
8103                                 echo "(Attempting domain name extraction from $tans)"
8104                                 dflt=.`$sed -n -e 's/   / /g' \
8105                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8106                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8107                                 case "$dflt" in
8108                                 .) dflt=.`$sed -n -e 's/        / /g' \
8109                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8110                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8111                                         ;;
8112                                 esac
8113                         fi
8114                         ;;
8115                 esac
8116                 case "$dflt" in
8117                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8118                         dflt=.`sh -c domainname 2>/dev/null`
8119                         case "$dflt" in
8120                         '') dflt='.';;
8121                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8122                         esac
8123                         ;;
8124                 esac
8125                 case "$dflt$osname" in
8126                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8127                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8128                         ;;
8129                 esac
8130                 case "$dflt" in
8131                 .) echo "(Lost all hope -- silly guess then)"
8132                         dflt='.nonet'
8133                         ;;
8134                 esac
8135                 $rm -f hosts
8136                 ;;
8137         *) dflt="$mydomain";;
8138         esac;;
8139 esac
8140 echo " "
8141 rp="What is your domain name?"
8142 . ./myread
8143 tans="$ans"
8144 case "$ans" in
8145 '') ;;
8146 .*) ;;
8147 *) tans=".$tans";;
8148 esac
8149 mydomain="$tans"
8150
8151 : translate upper to lower if necessary
8152 case "$mydomain" in
8153 *[A-Z]*)
8154         echo "(Normalizing case in your domain name)"
8155         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8156         ;;
8157 esac
8158
8159 : a little sanity check here
8160 case "$phostname" in
8161 '') ;;
8162 *)
8163         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8164         $myhostname$mydomain|$myhostname) ;;
8165         *)
8166                 case "$phostname" in
8167                 sed*)
8168                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8169                         ;;
8170                 *)
8171                         echo "(That doesn't agree with your $phostname command, by the way.)"
8172                         ;;
8173                 esac
8174         ;;
8175         esac
8176         ;;
8177 esac
8178
8179 $cat <<EOM
8180
8181 I need to get your e-mail address in Internet format if possible, i.e.
8182 something like user@host.domain. Please answer accurately since I have
8183 no easy means to double check it. The default value provided below
8184 is most probably close to reality but may not be valid from outside
8185 your organization...
8186
8187 EOM
8188 cont=x
8189 while test "$cont"; do
8190         case "$cf_email" in
8191         '') dflt="$cf_by@$myhostname$mydomain";;
8192         *) dflt="$cf_email";;
8193         esac
8194         rp='What is your e-mail address?'
8195         . ./myread
8196         cf_email="$ans"
8197         case "$cf_email" in
8198         *@*.*) cont='' ;;
8199         *)
8200                 rp='Address does not look like an Internet one.  Use it anyway?'
8201                 case "$fastread" in
8202                 yes) dflt=y ;;
8203                 *) dflt=n ;;
8204                 esac
8205                 . ./myread
8206                 case "$ans" in
8207                 y*) cont='' ;;
8208                 *) echo " " ;;
8209                 esac
8210                 ;;
8211         esac
8212 done
8213
8214 $cat <<EOM
8215
8216 If you or somebody else will be maintaining perl at your site, please
8217 fill in the correct e-mail address here so that they may be contacted
8218 if necessary. Currently, the "perlbug" program included with perl
8219 will send mail to this address in addition to perlbug@perl.org. You may
8220 enter "none" for no administrator.
8221
8222 EOM
8223 case "$perladmin" in
8224 '') dflt="$cf_email";;
8225 *) dflt="$perladmin";;
8226 esac
8227 rp='Perl administrator e-mail address'
8228 . ./myread
8229 perladmin="$ans"
8230
8231 : determine whether to only install version-specific parts.
8232 echo " "
8233 $cat <<EOM
8234 Do you want to install only the version-specific parts of the perl
8235 distribution?  Usually you do *not* want to do this.
8236 EOM
8237 case "$versiononly" in
8238 "$define"|[Yy]*|true) dflt='y' ;;
8239 *) dflt='n';
8240 esac
8241 rp="Do you want to install only the version-specific parts of perl?"
8242 . ./myread
8243 case "$ans" in
8244 [yY]*)  val="$define";;
8245 *)      val="$undef" ;;
8246 esac
8247 set versiononly
8248 eval $setvar
8249
8250 : figure out how to guarantee perl startup
8251 case "$startperl" in
8252 '')
8253         case "$sharpbang" in
8254         *!)
8255                 $cat <<EOH
8256
8257 I can use the #! construct to start perl on your system. This will
8258 make startup of perl scripts faster, but may cause problems if you
8259 want to share those scripts and perl is not in a standard place
8260 ($binexp/perl) on all your platforms. The alternative is to force
8261 a shell by starting the script with a single ':' character.
8262
8263 EOH
8264                 case "$versiononly" in
8265                 "$define")      dflt="$binexp/perl$version";;  
8266                 *)              dflt="$binexp/perl";;
8267                 esac
8268                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8269                 . ./myread
8270                 case "$ans" in
8271                 none)   startperl=": # use perl";;
8272                 *)      startperl="#!$ans"
8273                         if $test 30 -lt `echo "$ans" | wc -c`; then
8274                                 $cat >&4 <<EOM
8275
8276 WARNING:  Some systems limit the #! command to 32 characters.
8277 If you experience difficulty running Perl scripts with #!, try
8278 installing Perl in a directory with a shorter pathname.
8279
8280 EOM
8281                         fi ;;
8282                 esac
8283                 ;;
8284         *) startperl=": # use perl"
8285                 ;;
8286         esac
8287         ;;
8288 esac
8289 echo "I'll use $startperl to start perl scripts."
8290
8291 : figure best path for perl in scripts
8292 case "$perlpath" in
8293 '')
8294         case "$versiononly" in
8295         "$define")      perlpath="$binexp/perl$version";;
8296         *)              perlpath="$binexp/perl";;
8297         esac
8298         case "$startperl" in
8299         *!*) ;;
8300         *)
8301                 $cat <<EOH
8302
8303 I will use the "eval 'exec'" idiom to start Perl on your system.
8304 I can use the full path of your Perl binary for this purpose, but
8305 doing so may cause problems if you want to share those scripts and
8306 Perl is not always in a standard place ($binexp/perl).
8307
8308 EOH
8309                 dflt="$binexp/perl"
8310                 rp="What path shall I use in \"eval 'exec'\"?"
8311                 . ./myread
8312                 perlpath="$ans"
8313                 ;;
8314         esac
8315         ;;
8316 esac
8317 case "$startperl" in
8318 *!*)    ;;
8319 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8320 esac
8321
8322 : determine where public executable scripts go
8323 set scriptdir scriptdir
8324 eval $prefixit
8325 case "$scriptdir" in
8326 '')
8327         dflt="$bin"
8328         : guess some guesses
8329         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8330         $test -d /usr/share/bin     && dflt=/usr/share/bin
8331         $test -d /usr/local/script  && dflt=/usr/local/script
8332         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8333         $test -d $prefixexp/script  && dflt=$prefixexp/script
8334         set dflt
8335         eval $prefixup
8336         ;;
8337 *)  dflt="$scriptdir"
8338         ;;
8339 esac
8340 $cat <<EOM
8341  
8342 Some installations have a separate directory just for executable scripts so
8343 that they can mount it across multiple architectures but keep the scripts in
8344 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8345 Or you might just lump your scripts in with all your other executables.
8346  
8347 EOM
8348 fn=d~
8349 rp='Where do you keep publicly executable scripts?'
8350 . ./getfile
8351 if $test "X$ansexp" != "X$scriptdirexp"; then
8352         installscript=''
8353 fi
8354 scriptdir="$ans"
8355 scriptdirexp="$ansexp"
8356 : Change installation prefix, if necessary.
8357 if $test X"$prefix" != X"$installprefix"; then
8358         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8359 else
8360         installscript="$scriptdirexp"
8361 fi
8362
8363 : determine where add-on public executables go
8364 case "$sitebin" in
8365 '')     dflt=$siteprefix/bin ;;
8366 *)      dflt=$sitebin ;;
8367 esac
8368 fn=d~
8369 rp='Pathname where the add-on public executables should be installed?'
8370 . ./getfile
8371 sitebin="$ans"
8372 sitebinexp="$ansexp"
8373 : Change installation prefix, if necessary.
8374 if $test X"$prefix" != X"$installprefix"; then
8375         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8376 else
8377         installsitebin="$sitebinexp"
8378 fi
8379
8380 : define an is-a-typedef? function
8381 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8382 case "$inclist" in
8383 "") inclist="sys/types.h";;
8384 esac;
8385 eval "varval=\$$var";
8386 case "$varval" in
8387 "")
8388         $rm -f temp.c;
8389         for inc in $inclist; do
8390                 echo "#include <$inc>" >>temp.c;
8391         done;
8392         echo "#ifdef $type" >> temp.c;
8393         echo "printf(\"We have $type\");" >> temp.c;
8394         echo "#endif" >> temp.c;
8395         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8396         if $contains $type temp.E >/dev/null 2>&1; then
8397                 eval "$var=\$type";
8398         else
8399                 eval "$var=\$def";
8400         fi;
8401         $rm -f temp.?;;
8402 *) eval "$var=\$varval";;
8403 esac'
8404
8405 : define an is-a-typedef? function that prompts if the type is not available.
8406 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8407 case "$inclist" in
8408 "") inclist="sys/types.h";;
8409 esac;
8410 eval "varval=\$$var";
8411 case "$varval" in
8412 "")
8413         $rm -f temp.c;
8414         for inc in $inclist; do
8415                 echo "#include <$inc>" >>temp.c;
8416         done;
8417         echo "#ifdef $type" >> temp.c;
8418         echo "printf(\"We have $type\");" >> temp.c;
8419         echo "#endif" >> temp.c;
8420         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8421         echo " " ;
8422         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8423         if $contains $type temp.E >/dev/null 2>&1; then
8424                 echo "$type found." >&4;
8425                 eval "$var=\$type";
8426         else
8427                 echo "$type NOT found." >&4;
8428                 dflt="$def";
8429                 . ./myread ;
8430                 eval "$var=\$ans";
8431         fi;
8432         $rm -f temp.?;;
8433 *) eval "$var=\$varval";;
8434 esac'
8435
8436 : see what type lseek is declared as in the kernel
8437 rp="What is the type used for lseek's offset on this system?"
8438 set off_t lseektype long stdio.h sys/types.h
8439 eval $typedef_ask
8440
8441 echo " "
8442 echo "Checking to see how big your file offsets are..." >&4
8443 $cat >try.c <<EOCP
8444 #include <sys/types.h>
8445 #include <stdio.h>
8446 int main()
8447 {
8448     printf("%d\n", (int)sizeof($lseektype));
8449     return(0); 
8450 }
8451 EOCP
8452 set try
8453 if eval $compile_ok; then
8454         lseeksize=`$run ./try`
8455         echo "Your file offsets are $lseeksize bytes long."
8456 else
8457         dflt=$longsize
8458         echo " "
8459         echo "(I can't seem to compile the test program.  Guessing...)"
8460         rp="What is the size of your file offsets (in bytes)?"
8461         . ./myread
8462         lseeksize="$ans"
8463 fi
8464 $rm -f try.c try
8465
8466 : see what type file positions are declared as in the library
8467 rp="What is the type for file position used by fsetpos()?"
8468 set fpos_t fpostype long stdio.h sys/types.h
8469 eval $typedef_ask
8470
8471 echo " "
8472 case "$fpostype" in
8473 *_t) zzz="$fpostype"    ;;
8474 *)   zzz="fpos_t"       ;;
8475 esac
8476 echo "Checking the size of $zzz..." >&4 
8477 cat > try.c <<EOCP
8478 #include <sys/types.h>
8479 #include <stdio.h>
8480 int main() {
8481     printf("%d\n", (int)sizeof($fpostype));
8482     exit(0);
8483 }
8484 EOCP
8485 set try
8486 if eval $compile_ok; then
8487         yyy=`$run ./try`
8488         case "$yyy" in
8489         '')     fpossize=4
8490                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8491                 ;;
8492         *)      fpossize=$yyy
8493                 echo "Your $zzz is $fpossize bytes long."
8494                 ;;
8495         esac
8496 else
8497         dflt="$longsize"
8498         echo " " >&4
8499         echo "(I can't compile the test program.  Guessing...)" >&4
8500         rp="What is the size of your file positions (in bytes)?"
8501         . ./myread
8502         fpossize="$ans"
8503 fi
8504
8505
8506
8507 # Backward compatibility (uselfs is deprecated).
8508 case "$uselfs" in
8509 "$define"|true|[yY]*)
8510         cat <<EOM >&4
8511
8512 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8513 EOM
8514         uselargefiles="$define"
8515         ;;
8516 esac                          
8517
8518 case "$lseeksize:$fpossize" in
8519 8:8) cat <<EOM
8520
8521 You can have files larger than 2 gigabytes.
8522 EOM
8523    val="$define" ;;
8524 *)    case "$uselargefiles" in
8525    "$undef"|false|[nN]*) dflt='n' ;;
8526    *)   dflt='y' ;;
8527    esac
8528    cat <<EOM
8529
8530 Perl can be built to understand large files (files larger than 2 gigabytes)
8531 on some systems.  To do so, Configure can be run with -Duselargefiles.
8532
8533 If this doesn't make any sense to you, just accept the default '$dflt'.
8534 EOM
8535    rp='Try to understand large files, if available?'
8536    . ./myread
8537    case "$ans" in
8538    y|Y)         val="$define" ;;
8539    *)           val="$undef"  ;;
8540    esac
8541    ;;
8542 esac
8543 set uselargefiles
8544 eval $setvar
8545 case "$uselargefiles" in
8546 "$define")
8547 : Look for a hint-file generated 'call-back-unit'.  If the
8548 : user has specified that a large files perl is to be built,
8549 : we may need to set or change some other defaults.
8550         if $test -f uselargefiles.cbu; then
8551                 echo "Your platform has some specific hints for large file builds, using them..."
8552                 . ./uselargefiles.cbu
8553                 echo " "
8554                 echo "Rechecking to see how big your file offsets are..." >&4
8555                 $cat >try.c <<EOCP
8556 #include <sys/types.h>
8557 #include <stdio.h>
8558 int main()
8559 {
8560     printf("%d\n", (int)sizeof($lseektype));
8561     return(0); 
8562 }
8563 EOCP
8564                 set try
8565                 if eval $compile_ok; then
8566                         lseeksize=`$run ./try`
8567                         $echo "Your file offsets are now $lseeksize bytes long."
8568                 else
8569                         dflt="$lseeksize"
8570                         echo " "
8571                         echo "(I can't seem to compile the test program.  Guessing...)"
8572                         rp="What is the size of your file offsets (in bytes)?"
8573                         . ./myread
8574                         lseeksize="$ans"
8575                 fi
8576                 case "$fpostype" in
8577                 *_t) zzz="$fpostype"    ;;
8578                 *)   zzz="fpos_t"       ;;
8579                 esac
8580                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8581                 $cat > try.c <<EOCP
8582 #include <sys/types.h>
8583 #include <stdio.h>
8584 int main() {
8585     printf("%d\n", (int)sizeof($fpostype));
8586     exit(0);
8587 }
8588 EOCP
8589                 set try
8590                 if eval $compile_ok; then
8591                         yyy=`$run ./try`
8592                         dflt="$lseeksize"
8593                         case "$yyy" in
8594                         '')     echo " "
8595                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8596                                 ;;
8597                         *)      fpossize=$yyy
8598                                 echo " $fpossize bytes." >&4
8599                                 ;;
8600                         esac
8601                 else
8602                         dflt="$fpossize"
8603                         echo " "
8604                         echo "(I can't compile the test program.  Guessing...)" >&4
8605                         rp="What is the size of your file positions (in bytes)?"
8606                         . ./myread
8607                         fpossize="$ans"
8608                 fi
8609                 $rm -f try.c try
8610         fi
8611         ;;
8612 esac
8613
8614 case "$vendorprefix" in
8615 '')     d_vendorbin="$undef"
8616         vendorbin=''
8617         vendorbinexp=''
8618         ;;
8619 *)      d_vendorbin="$define"
8620         : determine where vendor-supplied executables go.
8621         case "$vendorbin" in
8622         '') dflt=$vendorprefix/bin ;;
8623         *)      dflt="$vendorbin" ;;
8624         esac
8625         fn=d~+
8626         rp='Pathname for the vendor-supplied executables directory?'
8627         . ./getfile
8628         vendorbin="$ans"
8629         vendorbinexp="$ansexp"
8630         ;;
8631 esac
8632 : Change installation prefix, if necessary.
8633 if $test X"$prefix" != X"$installprefix"; then
8634         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8635 else
8636         installvendorbin="$vendorbinexp"
8637 fi
8638
8639 : see if qgcvt exists
8640 set qgcvt d_qgcvt
8641 eval $inlibc
8642
8643 : Check how to convert floats to strings.
8644 echo " "
8645 echo "Checking for an efficient way to convert floats to strings."
8646 echo " " > try.c
8647 case "$uselongdouble" in
8648 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8649 esac
8650 case "$d_longdbl" in
8651 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8652 esac
8653 case "$d_PRIgldbl" in
8654 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8655 esac
8656 $cat >>try.c <<EOP
8657 #ifdef TRY_gconvert
8658 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8659 char *myname = "gconvert";
8660 #endif
8661 #ifdef TRY_gcvt
8662 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8663 char *myname = "gcvt";
8664 #endif
8665 #ifdef TRY_qgcvt
8666 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8667 char *myname = "qgcvt";
8668 #define DOUBLETYPE long double
8669 #endif
8670 #ifdef TRY_sprintf
8671 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8672 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8673 #else
8674 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8675 #endif
8676 char *myname = "sprintf";
8677 #endif
8678
8679 #ifndef DOUBLETYPE
8680 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8681 #define DOUBLETYPE long double
8682 #else
8683 #define DOUBLETYPE double
8684 #endif
8685 #endif
8686
8687 #include <stdio.h>
8688
8689 #define I_STDLIB $i_stdlib
8690 #ifdef I_STDLIB
8691 #include <stdlib.h>
8692 #endif
8693
8694 int
8695 checkit(expect, got)
8696 char *expect;
8697 char *got;
8698 {
8699     if (strcmp(expect, got)) {
8700                 printf("%s oddity:  Expected %s, got %s\n",
8701                         myname, expect, got);
8702                 exit(1);
8703         }
8704 }
8705
8706 int main()
8707
8708         char buf[64]; 
8709         buf[63] = '\0';
8710
8711         /* This must be 1st test on (which?) platform */
8712         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8713         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8714         checkit("0.1", buf);
8715
8716         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8717         checkit("1", buf);
8718
8719         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8720         checkit("1.1", buf);
8721
8722         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8723         checkit("1.01", buf);
8724
8725         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8726         checkit("1.001", buf);
8727
8728         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8729         checkit("1.0001", buf);
8730
8731         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8732         checkit("1.00001", buf);
8733
8734         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8735         checkit("1.000001", buf);
8736
8737         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8738         checkit("0", buf);
8739
8740         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8741         checkit("-1", buf);
8742
8743         /* Some Linux gcvt's give 1.e+5 here. */
8744         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8745         checkit("100000", buf);
8746         
8747         /* Some Linux gcvt's give -1.e+5 here. */
8748         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8749         checkit("-100000", buf);
8750
8751         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8752         checkit("123.456", buf);
8753
8754         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8755         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8756         if (strlen(buf) > 5)
8757             checkit("1e+030", buf); /* for Microsoft */
8758         else
8759             checkit("1e+30", buf);
8760
8761         exit(0);
8762 }
8763 EOP
8764 case "$d_Gconvert" in
8765 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8766 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8767 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8768 *) xxx_list='gconvert gcvt sprintf' ;;
8769 esac
8770
8771 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8772 "$define$define$define")
8773     # for long doubles prefer first qgcvt, then sprintf
8774     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8775     xxx_list="sprintf $xxx_list"
8776     case "$d_qgcvt" in
8777     "$define") xxx_list="qgcvt $xxx_list" ;;
8778     esac
8779     ;;
8780 esac
8781
8782 for xxx_convert in $xxx_list; do
8783         echo "Trying $xxx_convert..."
8784         $rm -f try try$_o
8785         set try -DTRY_$xxx_convert
8786         if eval $compile; then
8787                 echo "$xxx_convert() found." >&4
8788                 if $run ./try; then
8789                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8790                         break;
8791                 else
8792                         echo "...But $xxx_convert didn't work as I expected."
8793                 fi
8794         else
8795                 echo "$xxx_convert NOT found." >&4
8796         fi
8797 done
8798         
8799 case "$xxx_convert" in
8800 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8801 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8802 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8803 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8804    "$define$define$define")
8805       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8806    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8807    esac
8808    ;;  
8809 esac
8810
8811 : see if _fwalk exists
8812 set fwalk d__fwalk
8813 eval $inlibc
8814
8815 : Initialize h_fcntl
8816 h_fcntl=false
8817
8818 : Initialize h_sysfile
8819 h_sysfile=false
8820
8821 : access call always available on UNIX
8822 set access d_access
8823 eval $inlibc
8824
8825 : locate the flags for 'access()'
8826 case "$d_access" in
8827 "$define")
8828         echo " "
8829         $cat >access.c <<'EOCP'
8830 #include <sys/types.h>
8831 #ifdef I_FCNTL
8832 #include <fcntl.h>
8833 #endif
8834 #ifdef I_SYS_FILE
8835 #include <sys/file.h>
8836 #endif
8837 #ifdef I_UNISTD
8838 #include <unistd.h>
8839 #endif
8840 int main() {
8841         exit(R_OK);
8842 }
8843 EOCP
8844         : check sys/file.h first, no particular reason here
8845         if $test `./findhdr sys/file.h` && \
8846                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8847                 h_sysfile=true;
8848                 echo "<sys/file.h> defines the *_OK access constants." >&4
8849         elif $test `./findhdr fcntl.h` && \
8850                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8851                 h_fcntl=true;
8852                 echo "<fcntl.h> defines the *_OK access constants." >&4
8853         elif $test `./findhdr unistd.h` && \
8854                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8855                 echo "<unistd.h> defines the *_OK access constants." >&4
8856         else
8857                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8858         fi
8859         ;;
8860 esac
8861 $rm -f access*
8862
8863 : see if accessx exists
8864 set accessx d_accessx
8865 eval $inlibc
8866
8867 : see if alarm exists
8868 set alarm d_alarm
8869 eval $inlibc
8870
8871 : see if atolf exists
8872 set atolf d_atolf
8873 eval $inlibc
8874
8875 : see if atoll exists
8876 set atoll d_atoll
8877 eval $inlibc
8878
8879 : Look for GNU-cc style attribute checking
8880 echo " "
8881 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8882 $cat >attrib.c <<'EOCP'
8883 #include <stdio.h>
8884 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8885 EOCP
8886 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8887         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8888                 echo "Your C compiler doesn't fully support __attribute__."
8889                 val="$undef"
8890         else
8891                 echo "Your C compiler supports __attribute__."
8892                 val="$define"
8893         fi
8894 else
8895         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8896         val="$undef"
8897 fi
8898 set d_attribut
8899 eval $setvar
8900 $rm -f attrib*
8901
8902 : see if bcmp exists
8903 set bcmp d_bcmp
8904 eval $inlibc
8905
8906 : see if bcopy exists
8907 set bcopy d_bcopy
8908 eval $inlibc
8909
8910 : see if this is a unistd.h system
8911 set unistd.h i_unistd
8912 eval $inhdr
8913
8914 : see if getpgrp exists
8915 set getpgrp d_getpgrp
8916 eval $inlibc
8917
8918 case "$d_getpgrp" in
8919 "$define")
8920         echo " "
8921         echo "Checking to see which flavor of getpgrp is in use..."
8922         $cat >try.c <<EOP
8923 #$i_unistd I_UNISTD
8924 #include <sys/types.h>
8925 #ifdef I_UNISTD
8926 #  include <unistd.h>
8927 #endif
8928 int main()
8929 {
8930         if (getuid() == 0) {
8931                 printf("(I see you are running Configure as super-user...)\n");
8932                 setuid(1);
8933         }
8934 #ifdef TRY_BSD_PGRP
8935         if (getpgrp(1) == 0)
8936                 exit(0);
8937 #else
8938         if (getpgrp() > 0)
8939                 exit(0);
8940 #endif
8941         exit(1);
8942 }
8943 EOP
8944         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8945                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8946                 val="$define"
8947         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8948                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8949                 val="$undef"
8950         else
8951                 echo "I can't seem to compile and run the test program."
8952                 if ./usg; then
8953                         xxx="a USG one, i.e. you use getpgrp()."
8954                 else
8955                         # SVR4 systems can appear rather BSD-ish.
8956                         case "$i_unistd" in
8957                         $undef)
8958                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8959                                 val="$define"
8960                                 ;;
8961                         $define)
8962                                 xxx="probably a USG one, i.e. you use getpgrp()."
8963                                 val="$undef"
8964                                 ;;
8965                         esac
8966                 fi
8967                 echo "Assuming your getpgrp is $xxx" >&4
8968         fi
8969         ;;
8970 *) val="$undef";;
8971 esac
8972 set d_bsdgetpgrp
8973 eval $setvar
8974 $rm -f try try.*
8975
8976 : see if setpgrp exists
8977 set setpgrp d_setpgrp
8978 eval $inlibc
8979
8980 case "$d_setpgrp" in
8981 "$define")
8982         echo " "
8983         echo "Checking to see which flavor of setpgrp is in use..."
8984         $cat >try.c <<EOP
8985 #$i_unistd I_UNISTD
8986 #include <sys/types.h>
8987 #ifdef I_UNISTD
8988 #  include <unistd.h>
8989 #endif
8990 int main()
8991 {
8992         if (getuid() == 0) {
8993                 printf("(I see you are running Configure as super-user...)\n");
8994                 setuid(1);
8995         }
8996 #ifdef TRY_BSD_PGRP
8997         if (-1 == setpgrp(1, 1))
8998                 exit(0);
8999 #else
9000         if (setpgrp() != -1)
9001                 exit(0);
9002 #endif
9003         exit(1);
9004 }
9005 EOP
9006         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9007                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9008                 val="$define"
9009         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9010                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9011                 val="$undef"
9012         else
9013                 echo "(I can't seem to compile and run the test program.)"
9014                 if ./usg; then
9015                         xxx="a USG one, i.e. you use setpgrp()."
9016                 else
9017                         # SVR4 systems can appear rather BSD-ish.
9018                         case "$i_unistd" in
9019                         $undef)
9020                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9021                                 val="$define"
9022                                 ;;
9023                         $define)
9024                                 xxx="probably a USG one, i.e. you use setpgrp()."
9025                                 val="$undef"
9026                                 ;;
9027                         esac
9028                 fi
9029                 echo "Assuming your setpgrp is $xxx" >&4
9030         fi
9031         ;;
9032 *) val="$undef";;
9033 esac
9034 set d_bsdsetpgrp
9035 eval $setvar
9036 $rm -f try try.*
9037 : see if bzero exists
9038 set bzero d_bzero
9039 eval $inlibc
9040
9041 : see if signal is declared as pointer to function returning int or void
9042 echo " "
9043 xxx=`./findhdr signal.h`
9044 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9045 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9046         echo "You have int (*signal())() instead of void." >&4
9047         val="$undef"
9048 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9049         echo "You have void (*signal())()." >&4
9050         val="$define"
9051 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9052         echo "You have int (*signal())() instead of void." >&4
9053         val="$undef"
9054 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9055         echo "You have void (*signal())()." >&4
9056         val="$define"
9057 else
9058         case "$d_voidsig" in
9059         '')
9060         echo "I can't determine whether signal handler returns void or int..." >&4
9061                 dflt=void
9062                 rp="What type does your signal handler return?"
9063                 . ./myread
9064                 case "$ans" in
9065                 v*) val="$define";;
9066                 *) val="$undef";;
9067                 esac;;
9068         "$define")
9069                 echo "As you already told me, signal handler returns void." >&4
9070                 val="$define"
9071                 ;;
9072         *)      echo "As you already told me, signal handler returns int." >&4
9073                 val="$undef"
9074                 ;;
9075         esac
9076 fi
9077 set d_voidsig
9078 eval $setvar
9079 case "$d_voidsig" in
9080 "$define") signal_t="void";;
9081 *) signal_t="int";;
9082 esac
9083 $rm -f $$.tmp
9084
9085 : check for ability to cast large floats to 32-bit ints.
9086 echo " "
9087 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9088 if $test "$intsize" -ge 4; then
9089         xxx=int
9090 else
9091         xxx=long
9092 fi
9093 $cat >try.c <<EOCP
9094 #include <stdio.h>
9095 #include <sys/types.h>
9096 #include <signal.h>
9097 $signal_t blech(s) int s; { exit(3); }
9098 int main()
9099 {
9100         $xxx i32;
9101         double f, g;
9102         int result = 0;
9103         char str[16];
9104         signal(SIGFPE, blech);
9105
9106         /* Don't let compiler optimize the test away.  Store the number 
9107            in a writable string for gcc to pass to sscanf under HP/UX.
9108         */
9109         sprintf(str, "2147483647");
9110         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9111         g = 10 * f;
9112         i32  = ($xxx) g;
9113
9114         /* x86 processors will probably give 0x8000 0000, which is a
9115        sign change.  We don't want that.  We want to mimic SPARC
9116            behavior here, which is to preserve the sign and give
9117            back 0x7fff ffff.
9118         */
9119         if (i32 != ($xxx) f)
9120                 result |= 1;
9121         exit(result);
9122 }
9123 EOCP
9124 set try
9125 if eval $compile_ok; then
9126         $run ./try
9127         yyy=$?
9128 else
9129         echo "(I can't seem to compile the test program--assuming it can't)"
9130         yyy=1
9131 fi
9132 case "$yyy" in
9133 0)      val="$define"
9134         echo "Yup, it can."
9135         ;;
9136 *)      val="$undef"
9137         echo "Nope, it can't."
9138         ;;
9139 esac
9140 set d_casti32
9141 eval $setvar
9142 $rm -f try try.*
9143
9144 : check for ability to cast negative floats to unsigned
9145 echo " "
9146 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9147 $cat >try.c <<EOCP
9148 #include <stdio.h>
9149 #include <sys/types.h>
9150 #include <signal.h>
9151 $signal_t blech(s) int s; { exit(7); }
9152 $signal_t blech_in_list(s) int s; { exit(4); }
9153 unsigned long dummy_long(p) unsigned long p; { return p; }
9154 unsigned int dummy_int(p) unsigned int p; { return p; }
9155 unsigned short dummy_short(p) unsigned short p; { return p; }
9156 int main()
9157 {
9158         double f;
9159         unsigned long along;
9160         unsigned int aint;
9161         unsigned short ashort;
9162         int result = 0;
9163         char str[16];
9164         
9165         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9166            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9167            optimized the whole file away
9168         */
9169         /* Store the number in a writable string for gcc to pass to 
9170            sscanf under HP/UX.
9171         */
9172         sprintf(str, "-123");
9173         sscanf(str, "%lf", &f);  /* f = -123.; */
9174
9175         signal(SIGFPE, blech);
9176         along = (unsigned long)f;
9177         aint = (unsigned int)f;
9178         ashort = (unsigned short)f;
9179         if (along != (unsigned long)-123)
9180                 result |= 1;
9181         if (aint != (unsigned int)-123)
9182                 result |= 1;
9183         if (ashort != (unsigned short)-123)
9184                 result |= 1;
9185         sprintf(str, "1073741824.");
9186         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9187         f = f + f;
9188         along = 0;
9189         along = (unsigned long)f;
9190         if (along != 0x80000000)
9191                 result |= 2;
9192         f -= 1.;
9193         along = 0;
9194         along = (unsigned long)f;
9195         if (along != 0x7fffffff)
9196                 result |= 1;
9197         f += 2.;
9198         along = 0;
9199         along = (unsigned long)f;
9200         if (along != 0x80000001)
9201                 result |= 2;
9202         if (result)
9203                 exit(result);
9204         signal(SIGFPE, blech_in_list);
9205         sprintf(str, "123.");
9206         sscanf(str, "%lf", &f);  /* f = 123.; */
9207         along = dummy_long((unsigned long)f);
9208         aint = dummy_int((unsigned int)f);
9209         ashort = dummy_short((unsigned short)f);
9210         if (along != (unsigned long)123)
9211                 result |= 4;
9212         if (aint != (unsigned int)123)
9213                 result |= 4;
9214         if (ashort != (unsigned short)123)
9215                 result |= 4;
9216         exit(result);
9217
9218 }
9219 EOCP
9220 set try
9221 if eval $compile_ok; then
9222         $run ./try
9223         castflags=$?
9224 else
9225         echo "(I can't seem to compile the test program--assuming it can't)"
9226         castflags=7
9227 fi
9228 case "$castflags" in
9229 0)      val="$define"
9230         echo "Yup, it can."
9231         ;;
9232 *)      val="$undef"
9233         echo "Nope, it can't."
9234         ;;
9235 esac
9236 set d_castneg
9237 eval $setvar
9238 $rm -f try.*
9239
9240 : see if vprintf exists
9241 echo " "
9242 if set vprintf val -f d_vprintf; eval $csym; $val; then
9243         echo 'vprintf() found.' >&4
9244         val="$define"
9245         $cat >try.c <<'EOF'
9246 #include <varargs.h>
9247
9248 int main() { xxx("foo"); }
9249
9250 xxx(va_alist)
9251 va_dcl
9252 {
9253         va_list args;
9254         char buf[10];
9255
9256         va_start(args);
9257         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9258 }
9259 EOF
9260         set try
9261         if eval $compile && $run ./try; then
9262                 echo "Your vsprintf() returns (int)." >&4
9263                 val2="$undef"
9264         else
9265                 echo "Your vsprintf() returns (char*)." >&4
9266                 val2="$define"
9267         fi
9268 else
9269         echo 'vprintf() NOT found.' >&4
9270                 val="$undef"
9271                 val2="$undef"
9272 fi
9273 $rm -f try try.*
9274 set d_vprintf
9275 eval $setvar
9276 val=$val2
9277 set d_charvspr
9278 eval $setvar
9279
9280 : see if chown exists
9281 set chown d_chown
9282 eval $inlibc
9283
9284 : see if chroot exists
9285 set chroot d_chroot
9286 eval $inlibc
9287
9288 : see if chsize exists
9289 set chsize d_chsize
9290 eval $inlibc
9291
9292 : see if class exists
9293 set class d_class
9294 eval $inlibc
9295
9296 hasstruct='varname=$1; struct=$2; shift; shift;
9297 while $test $# -ge 2; do
9298         case "$1" in
9299         $define) echo "#include <$2>";;
9300         esac ;
9301     shift 2;
9302 done > try.c;
9303 echo "int main () { struct $struct foo; }" >> try.c;
9304 set try;
9305 if eval $compile; then
9306         val="$define";
9307 else
9308         val="$undef";
9309 fi;
9310 set $varname;
9311 eval $setvar;
9312 $rm -f try.c try.o'
9313
9314 : see if sys/types.h has to be included
9315 set sys/types.h i_systypes
9316 eval $inhdr
9317
9318 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9319 while $test $# -ge 2; do
9320         case "$1" in
9321         $define) echo "#include <$2>";;
9322         esac ;
9323     shift 2;
9324 done > try.c;
9325 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9326 set try;
9327 if eval $compile; then
9328         val="$define";
9329 else
9330         val="$undef";
9331 fi;
9332 set $varname;
9333 eval $setvar;
9334 $rm -f try.c try.o'
9335
9336 socketlib=''
9337 sockethdr=''
9338 : see whether socket exists
9339 echo " "
9340 $echo $n "Hmm... $c" >&4
9341 if set socket val -f d_socket; eval $csym; $val; then
9342         echo "Looks like you have Berkeley networking support." >&4
9343         d_socket="$define"
9344         if set setsockopt val -f; eval $csym; $val; then
9345                 d_oldsock="$undef"
9346         else
9347                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9348                 d_oldsock="$define"
9349         fi
9350 else
9351         if $contains socklib libc.list >/dev/null 2>&1; then
9352                 echo "Looks like you have Berkeley networking support." >&4
9353                 d_socket="$define"
9354                 : we will have to assume that it supports the 4.2 BSD interface
9355                 d_oldsock="$undef"
9356         else
9357                 echo "You don't have Berkeley networking in libc$_a..." >&4
9358                 if test "X$d_socket" = "X$define"; then
9359                    echo "...but you seem to believe that you have sockets." >&4
9360                 else
9361                         for net in net socket
9362                         do
9363                                 if test -f /usr/lib/lib$net$_a; then
9364                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9365                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9366                                         if $contains socket libc.list >/dev/null 2>&1; then
9367                                                 d_socket="$define"
9368                                                 socketlib="-l$net"
9369                                                 case "$net" in
9370                                                 net)
9371                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9372                                                         sockethdr="-I/usr/netinclude"
9373                                                         ;;
9374                                                 esac
9375                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9376                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9377                                                         d_oldsock="$undef"
9378                                                 else
9379                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9380                                                         d_oldsock="$define"
9381                                                 fi
9382                                                 break
9383                                         fi
9384                                 fi
9385                         done
9386                         if test "X$d_socket" != "X$define"; then
9387                            echo "or anywhere else I see." >&4
9388                            d_socket="$undef"
9389                            d_oldsock="$undef"
9390                         fi
9391                 fi
9392         fi
9393 fi
9394
9395 : see if socketpair exists
9396 set socketpair d_sockpair
9397 eval $inlibc
9398
9399
9400 echo " "
9401 echo "Checking the availability of certain socket constants..." >&4
9402 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9403         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9404         $cat >try.c <<EOF
9405 #include <sys/types.h>
9406 #include <sys/socket.h>
9407 int main() {
9408     int i = $ENUM;
9409 }
9410 EOF
9411         val="$undef"
9412         set try; if eval $compile; then
9413                 val="$define"
9414         fi
9415         set d_${enum}; eval $setvar
9416         $rm -f try.c try
9417 done
9418
9419 : see if this is a sys/uio.h system
9420 set sys/uio.h i_sysuio
9421 eval $inhdr
9422
9423
9424 echo " "
9425 echo "Checking to see if your system supports struct cmsghdr..." >&4
9426 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9427 eval $hasstruct
9428 case "$d_cmsghdr_s" in
9429 "$define")      echo "Yes, it does."   ;;
9430 *)              echo "No, it doesn't." ;;
9431 esac
9432
9433
9434 : check for const keyword
9435 echo " "
9436 echo 'Checking to see if your C compiler knows about "const"...' >&4
9437 $cat >const.c <<'EOCP'
9438 typedef struct spug { int drokk; } spug;
9439 int main()
9440 {
9441         const char *foo;
9442         const spug y;
9443 }
9444 EOCP
9445 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9446         val="$define"
9447         echo "Yup, it does."
9448 else
9449         val="$undef"
9450         echo "Nope, it doesn't."
9451 fi
9452 set d_const
9453 eval $setvar
9454
9455 : see if crypt exists
9456 echo " "
9457 set crypt d_crypt
9458 eval $inlibc
9459 case "$d_crypt" in
9460 $define) cryptlib='' ;;
9461 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9462                 echo 'crypt() found.' >&4
9463                 val="$define"
9464                 cryptlib=''
9465         else
9466                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9467                 if $test -z "$cryptlib"; then
9468                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9469                 else
9470                         cryptlib=-lcrypt
9471                 fi
9472                 if $test -z "$cryptlib"; then
9473                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9474                 else
9475                         cryptlib=-lcrypt
9476                 fi
9477                 if $test -z "$cryptlib"; then
9478                         cryptlib=`./loc libcrypt$_a "" $libpth`
9479                 else
9480                         cryptlib=-lcrypt
9481                 fi
9482                 if $test -z "$cryptlib"; then
9483                         echo 'crypt() NOT found.' >&4
9484                         val="$undef"
9485                 else
9486                         val="$define"
9487                 fi
9488         fi
9489         set d_crypt
9490         eval $setvar
9491         ;;
9492 esac
9493
9494 : get csh whereabouts
9495 case "$csh" in
9496 'csh') val="$undef" ;;
9497 *) val="$define" ;;
9498 esac
9499 set d_csh
9500 eval $setvar
9501 : Respect a hint or command line value for full_csh.
9502 case "$full_csh" in
9503 '') full_csh=$csh ;;
9504 esac
9505
9506 : see if cuserid exists
9507 set cuserid d_cuserid
9508 eval $inlibc
9509
9510 : see if this is a limits.h system
9511 set limits.h i_limits
9512 eval $inhdr
9513
9514 : see if this is a float.h system
9515 set float.h i_float
9516 eval $inhdr
9517
9518 : See if number of significant digits in a double precision number is known
9519 echo " "
9520 $cat >dbl_dig.c <<EOM
9521 #$i_limits I_LIMITS
9522 #$i_float I_FLOAT
9523 #ifdef I_LIMITS
9524 #include <limits.h>
9525 #endif
9526 #ifdef I_FLOAT
9527 #include <float.h>
9528 #endif
9529 #ifdef DBL_DIG
9530 printf("Contains DBL_DIG");
9531 #endif
9532 EOM
9533 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9534 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9535         echo "DBL_DIG found." >&4
9536         val="$define"
9537 else
9538         echo "DBL_DIG NOT found." >&4
9539         val="$undef"
9540 fi
9541 $rm -f dbl_dig.?
9542 set d_dbl_dig
9543 eval $setvar
9544
9545 hasproto='varname=$1; func=$2; shift; shift;
9546 while $test $# -ge 2; do
9547         case "$1" in
9548         $define) echo "#include <$2>";;
9549         esac ;
9550     shift 2;
9551 done > try.c;
9552 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9553 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9554         echo "$func() prototype found.";
9555         val="$define";
9556 else
9557         echo "$func() prototype NOT found.";
9558         val="$undef";
9559 fi;
9560 set $varname;
9561 eval $setvar;
9562 $rm -f try.c tryout.c'
9563
9564 : see if dbm.h is available
9565 : see if dbmclose exists
9566 set dbmclose d_dbmclose
9567 eval $inlibc
9568
9569 case "$d_dbmclose" in
9570 $define)
9571         set dbm.h i_dbm
9572         eval $inhdr
9573         case "$i_dbm" in
9574         $define)
9575                 val="$undef"
9576                 set i_rpcsvcdbm
9577                 eval $setvar
9578                 ;;
9579         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9580                 eval $inhdr
9581                 ;;
9582         esac
9583         ;;
9584 *)      echo "We won't be including <dbm.h>"
9585         val="$undef"
9586         set i_dbm
9587         eval $setvar
9588         val="$undef"
9589         set i_rpcsvcdbm
9590         eval $setvar
9591         ;;
9592 esac
9593
9594 : see if prototype for dbminit is available
9595 echo " "
9596 set d_dbminitproto dbminit $i_dbm dbm.h
9597 eval $hasproto
9598
9599 : see if difftime exists
9600 set difftime d_difftime
9601 eval $inlibc
9602
9603 : see if this is a dirent system
9604 echo " "
9605 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9606         val="$define"
9607         echo "<dirent.h> found." >&4
9608 else
9609         val="$undef"
9610         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9611                 echo "<sys/dir.h> found." >&4
9612                 echo " "
9613         else
9614                 xinc=`./findhdr sys/ndir.h`
9615         fi
9616         echo "<dirent.h> NOT found." >&4
9617 fi
9618 set i_dirent
9619 eval $setvar
9620
9621 : Look for type of directory structure.
9622 echo " "
9623 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9624
9625 case "$direntrytype" in
9626 ''|' ')
9627         case "$i_dirent" in
9628         $define) guess1='struct dirent' ;;
9629         *) guess1='struct direct'  ;;
9630         esac
9631         ;;
9632 *)      guess1="$direntrytype"
9633         ;;
9634 esac
9635
9636 case "$guess1" in
9637 'struct dirent') guess2='struct direct' ;;
9638 *) guess2='struct dirent' ;;
9639 esac
9640                 
9641 if $contains "$guess1" try.c >/dev/null 2>&1; then
9642         direntrytype="$guess1"
9643         echo "Your directory entries are $direntrytype." >&4
9644 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9645         direntrytype="$guess2"
9646         echo "Your directory entries seem to be $direntrytype." >&4
9647 else
9648         echo "I don't recognize your system's directory entries." >&4
9649         rp="What type is used for directory entries on this system?"
9650         dflt="$guess1"
9651         . ./myread
9652         direntrytype="$ans"
9653 fi
9654 $rm -f try.c
9655
9656
9657 : see if the directory entry stores field length
9658 echo " "
9659 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9660 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9661         echo "Good, your directory entry keeps length information in d_namlen." >&4
9662         val="$define"
9663 else
9664         echo "Your directory entry does not know about the d_namlen field." >&4
9665         val="$undef"
9666 fi
9667 set d_dirnamlen
9668 eval $setvar
9669 $rm -f try.c
9670
9671 : see if this is an sysdir system
9672 set sys/dir.h i_sysdir
9673 eval $inhdr
9674
9675 : see if this is an sysndir system
9676 set sys/ndir.h i_sysndir
9677 eval $inhdr
9678
9679 : Look for dirfd
9680 echo " "
9681 $cat >dirfd.c <<EOM
9682 #include <stdio.h>
9683 #$i_dirent I_DIRENT             /**/
9684 #$i_sysdir I_SYS_DIR            /**/
9685 #$i_sysndir I_SYS_NDIR          /**/
9686 #$i_systypes I_SYS_TYPES        /**/
9687 #if defined(I_SYS_TYPES)
9688 #include <sys/types.h>
9689 #endif
9690 #if defined(I_DIRENT)
9691 #include <dirent.h>
9692 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9693 #include <sys/dir.h>
9694 #endif
9695 #else
9696 #ifdef I_SYS_NDIR
9697 #include <sys/ndir.h>
9698 #else
9699 #ifdef I_SYS_DIR
9700 #ifdef hp9000s500
9701 #include <ndir.h>       /* may be wrong in the future */
9702 #else
9703 #include <sys/dir.h>
9704 #endif
9705 #endif
9706 #endif
9707 #endif 
9708 int main() {
9709         DIR *dirp = opendir(".");
9710         if (dirfd(dirp) >= 0)
9711                 exit(0);
9712         else
9713                 exit(1);
9714 }
9715 EOM
9716 set dirfd
9717 if eval $compile; then
9718         val="$define"
9719 fi
9720 case "$val" in
9721 $define)        echo "dirfd() found." >&4       ;;
9722 *)              echo "dirfd() NOT found." >&4   ;;
9723 esac
9724 set d_dirfd
9725 eval $setvar
9726 $rm -f dirfd*
9727
9728 : see if dlerror exists
9729 xxx_runnm="$runnm"
9730 runnm=false
9731 set dlerror d_dlerror
9732 eval $inlibc
9733 runnm="$xxx_runnm"
9734
9735 : see if dlfcn is available
9736 set dlfcn.h i_dlfcn
9737 eval $inhdr
9738
9739 case "$usedl" in
9740 $define|y|true)
9741         $cat << EOM
9742
9743 On a few systems, the dynamically loaded modules that perl generates and uses
9744 will need a different extension than shared libs. The default will probably
9745 be appropriate.
9746
9747 EOM
9748         case "$dlext" in
9749         '')     dflt="$so" ;;
9750         *)      dflt="$dlext" ;;
9751         esac
9752         rp='What is the extension of dynamically loaded modules'
9753         . ./myread
9754         dlext="$ans"
9755         ;;
9756 *)
9757         dlext="none"
9758         ;;
9759 esac
9760
9761 : Check if dlsym need a leading underscore
9762 echo " "
9763 val="$undef"
9764
9765 case "$dlsrc" in
9766 dl_dlopen.xs)
9767         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9768         $cat >dyna.c <<'EOM'
9769 fred () { }
9770 EOM
9771
9772 $cat >fred.c<<EOM
9773
9774 #include <stdio.h>
9775 #$i_dlfcn I_DLFCN
9776 #ifdef I_DLFCN
9777 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9778 #else
9779 #include <sys/types.h>
9780 #include <nlist.h>
9781 #include <link.h>
9782 #endif
9783
9784 extern int fred() ;
9785
9786 int main()
9787 {
9788     void * handle ;
9789     void * symbol ;
9790 #ifndef RTLD_LAZY
9791     int mode = 1 ;
9792 #else
9793     int mode = RTLD_LAZY ;
9794 #endif
9795     handle = dlopen("./dyna.$dlext", mode) ;
9796     if (handle == NULL) {
9797         printf ("1\n") ;
9798         fflush (stdout) ;
9799         exit(0);
9800     }
9801     symbol = dlsym(handle, "fred") ;
9802     if (symbol == NULL) {
9803         /* try putting a leading underscore */
9804         symbol = dlsym(handle, "_fred") ;
9805         if (symbol == NULL) {
9806             printf ("2\n") ;
9807             fflush (stdout) ;
9808             exit(0);
9809         }
9810         printf ("3\n") ;
9811     }
9812     else
9813         printf ("4\n") ;
9814     fflush (stdout) ;
9815     exit(0);
9816 }
9817 EOM
9818         : Call the object file tmp-dyna.o in case dlext=o.
9819         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9820                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9821                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9822                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9823                 xxx=`$run ./fred`
9824                 case $xxx in
9825                 1)      echo "Test program failed using dlopen." >&4
9826                         echo "Perhaps you should not use dynamic loading." >&4;;
9827                 2)      echo "Test program failed using dlsym." >&4
9828                         echo "Perhaps you should not use dynamic loading." >&4;;
9829                 3)      echo "dlsym needs a leading underscore" >&4
9830                         val="$define" ;;
9831                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9832                 esac
9833         else
9834                 echo "I can't compile and run the test program." >&4
9835                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9836         fi
9837         ;;
9838 esac
9839                 
9840 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9841
9842 set d_dlsymun
9843 eval $setvar
9844
9845 : see if prototype for drand48 is available
9846 echo " "
9847 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9848 eval $hasproto
9849
9850 : see if dup2 exists
9851 set dup2 d_dup2
9852 eval $inlibc
9853
9854 : see if eaccess exists
9855 set eaccess d_eaccess
9856 eval $inlibc
9857
9858 : see if endgrent exists
9859 set endgrent d_endgrent
9860 eval $inlibc
9861
9862 : see if endhostent exists
9863 set endhostent d_endhent
9864 eval $inlibc
9865
9866 : see if endnetent exists
9867 set endnetent d_endnent
9868 eval $inlibc
9869
9870 : see if endprotoent exists
9871 set endprotoent d_endpent
9872 eval $inlibc
9873
9874 : see if endpwent exists
9875 set endpwent d_endpwent
9876 eval $inlibc
9877
9878 : see if endservent exists
9879 set endservent d_endsent
9880 eval $inlibc
9881
9882 : Locate the flags for 'open()'
9883 echo " "
9884 $cat >try.c <<'EOCP'
9885 #include <sys/types.h>
9886 #ifdef I_FCNTL
9887 #include <fcntl.h>
9888 #endif
9889 #ifdef I_SYS_FILE
9890 #include <sys/file.h>
9891 #endif
9892 int main() {
9893         if(O_RDONLY);
9894 #ifdef O_TRUNC
9895         exit(0);
9896 #else
9897         exit(1);
9898 #endif
9899 }
9900 EOCP
9901 : check sys/file.h first to get FREAD on Sun
9902 if $test `./findhdr sys/file.h` && \
9903                 set try -DI_SYS_FILE && eval $compile; then
9904         h_sysfile=true;
9905         echo "<sys/file.h> defines the O_* constants..." >&4
9906         if $run ./try; then
9907                 echo "and you have the 3 argument form of open()." >&4
9908                 val="$define"
9909         else
9910                 echo "but not the 3 argument form of open().  Oh, well." >&4
9911                 val="$undef"
9912         fi
9913 elif $test `./findhdr fcntl.h` && \
9914                 set try -DI_FCNTL && eval $compile; then
9915         h_fcntl=true;
9916         echo "<fcntl.h> defines the O_* constants..." >&4
9917         if $run ./try; then
9918                 echo "and you have the 3 argument form of open()." >&4
9919                 val="$define"
9920         else
9921                 echo "but not the 3 argument form of open().  Oh, well." >&4
9922                 val="$undef"
9923         fi
9924 else
9925         val="$undef"
9926         echo "I can't find the O_* constant definitions!  You got problems." >&4
9927 fi
9928 set d_open3
9929 eval $setvar
9930 $rm -f try try.*
9931
9932 : see which of string.h or strings.h is needed
9933 echo " "
9934 strings=`./findhdr string.h`
9935 if $test "$strings" && $test -r "$strings"; then
9936         echo "Using <string.h> instead of <strings.h>." >&4
9937         val="$define"
9938 else
9939         val="$undef"
9940         strings=`./findhdr strings.h`
9941         if $test "$strings" && $test -r "$strings"; then
9942                 echo "Using <strings.h> instead of <string.h>." >&4
9943         else
9944                 echo "No string header found -- You'll surely have problems." >&4
9945         fi
9946 fi
9947 set i_string
9948 eval $setvar
9949 case "$i_string" in
9950 "$undef") strings=`./findhdr strings.h`;;
9951 *)        strings=`./findhdr string.h`;;
9952 esac
9953
9954 : see if this is a sys/file.h system
9955 val=''
9956 set sys/file.h val
9957 eval $inhdr
9958
9959 : do we need to include sys/file.h ?
9960 case "$val" in
9961 "$define")
9962         echo " "
9963         if $h_sysfile; then
9964                 val="$define"
9965                 echo "We'll be including <sys/file.h>." >&4
9966         else
9967                 val="$undef"
9968                 echo "We won't be including <sys/file.h>." >&4
9969         fi
9970         ;;
9971 *)
9972         h_sysfile=false
9973         ;;
9974 esac
9975 set i_sysfile
9976 eval $setvar
9977
9978 : see if fcntl.h is there
9979 val=''
9980 set fcntl.h val
9981 eval $inhdr
9982
9983 : see if we can include fcntl.h
9984 case "$val" in
9985 "$define")
9986         echo " "
9987         if $h_fcntl; then
9988                 val="$define"
9989                 echo "We'll be including <fcntl.h>." >&4
9990         else
9991                 val="$undef"
9992                 if $h_sysfile; then
9993         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9994                 else
9995                         echo "We won't be including <fcntl.h>." >&4
9996                 fi
9997         fi
9998         ;;
9999 *)
10000         h_fcntl=false
10001         val="$undef"
10002         ;;
10003 esac
10004 set i_fcntl
10005 eval $setvar
10006
10007 : check for non-blocking I/O stuff
10008 case "$h_sysfile" in
10009 true) echo "#include <sys/file.h>" > head.c;;
10010 *)
10011        case "$h_fcntl" in
10012        true) echo "#include <fcntl.h>" > head.c;;
10013        *) echo "#include <sys/fcntl.h>" > head.c;;
10014        esac
10015        ;;
10016 esac
10017 echo " "
10018 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10019 case "$o_nonblock" in
10020 '')
10021         $cat head.c > try.c
10022         $cat >>try.c <<EOCP
10023 #include <stdio.h>
10024 #include <stdlib.h>
10025 #$i_fcntl I_FCNTL
10026 #ifdef I_FCNTL
10027 #include <fcntl.h>
10028 #endif
10029 int main() {
10030 #ifdef O_NONBLOCK
10031         printf("O_NONBLOCK\n");
10032         exit(0);
10033 #endif
10034 #ifdef O_NDELAY
10035         printf("O_NDELAY\n");
10036         exit(0);
10037 #endif
10038 #ifdef FNDELAY
10039         printf("FNDELAY\n");
10040         exit(0);
10041 #endif
10042         exit(0);
10043 }
10044 EOCP
10045         set try
10046         if eval $compile_ok; then
10047                 o_nonblock=`$run ./try`
10048                 case "$o_nonblock" in
10049                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10050                 *) echo "Seems like we can use $o_nonblock.";;
10051                 esac
10052         else
10053                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10054         fi
10055         ;;
10056 *) echo "Using $hint value $o_nonblock.";;
10057 esac
10058 $rm -f try try.* .out core
10059
10060 echo " "
10061 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10062 case "$eagain" in
10063 '')
10064         $cat head.c > try.c
10065         $cat >>try.c <<EOCP
10066 #include <errno.h>
10067 #include <sys/types.h>
10068 #include <signal.h>
10069 #include <stdio.h> 
10070 #include <stdlib.h> 
10071 #$i_fcntl I_FCNTL
10072 #ifdef I_FCNTL
10073 #include <fcntl.h>
10074 #endif
10075 #define MY_O_NONBLOCK $o_nonblock
10076 #ifndef errno  /* XXX need better Configure test */
10077 extern int errno;
10078 #endif
10079 #$i_unistd I_UNISTD
10080 #ifdef I_UNISTD
10081 #include <unistd.h>
10082 #endif
10083 #$i_string I_STRING
10084 #ifdef I_STRING
10085 #include <string.h>
10086 #else
10087 #include <strings.h>
10088 #endif
10089 $signal_t blech(x) int x; { exit(3); }
10090 EOCP
10091         $cat >> try.c <<'EOCP'
10092 int main()
10093 {
10094         int pd[2];
10095         int pu[2];
10096         char buf[1];
10097         char string[100];
10098
10099         pipe(pd);       /* Down: child -> parent */
10100         pipe(pu);       /* Up: parent -> child */
10101         if (0 != fork()) {
10102                 int ret;
10103                 close(pd[1]);   /* Parent reads from pd[0] */
10104                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10105 #ifdef F_SETFL
10106                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10107                         exit(1);
10108 #else
10109                 exit(4);
10110 #endif
10111                 signal(SIGALRM, blech);
10112                 alarm(5);
10113                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10114                         exit(2);
10115                 sprintf(string, "%d\n", ret);
10116                 write(2, string, strlen(string));
10117                 alarm(0);
10118 #ifdef EAGAIN
10119                 if (errno == EAGAIN) {
10120                         printf("EAGAIN\n");
10121                         goto ok;
10122                 }
10123 #endif
10124 #ifdef EWOULDBLOCK
10125                 if (errno == EWOULDBLOCK)
10126                         printf("EWOULDBLOCK\n");
10127 #endif
10128         ok:
10129                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10130                 sleep(2);                               /* Give it time to close our pipe */
10131                 alarm(5);
10132                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10133                 alarm(0);
10134                 sprintf(string, "%d\n", ret);
10135                 write(4, string, strlen(string));
10136                 exit(0);
10137         }
10138
10139         close(pd[0]);                   /* We write to pd[1] */
10140         close(pu[1]);                   /* We read from pu[0] */
10141         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10142         close(pd[1]);                   /* Pipe pd is now fully closed! */
10143         exit(0);                                /* Bye bye, thank you for playing! */
10144 }
10145 EOCP
10146         set try
10147         if eval $compile_ok; then
10148                 echo "$startsh" >mtry
10149                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10150                 chmod +x mtry
10151                 ./mtry >/dev/null 2>&1
10152                 case $? in
10153                 0) eagain=`$cat try.out`;;
10154                 1) echo "Could not perform non-blocking setting!";;
10155                 2) echo "I did a successful read() for something that was not there!";;
10156                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10157                 4) echo "Could not find F_SETFL!";;
10158                 *) echo "Something terribly wrong happened during testing.";;
10159                 esac
10160                 rd_nodata=`$cat try.ret`
10161                 echo "A read() system call with no data present returns $rd_nodata."
10162                 case "$rd_nodata" in
10163                 0|-1) ;;
10164                 *)
10165                         echo "(That's peculiar, fixing that to be -1.)"
10166                         rd_nodata=-1
10167                         ;;
10168                 esac
10169                 case "$eagain" in
10170                 '')
10171                         echo "Forcing errno EAGAIN on read() with no data available."
10172                         eagain=EAGAIN
10173                         ;;
10174                 *)
10175                         echo "Your read() sets errno to $eagain when no data is available."
10176                         ;;
10177                 esac
10178                 status=`$cat try.err`
10179                 case "$status" in
10180                 0) echo "And it correctly returns 0 to signal EOF.";;
10181                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10182                 *) echo "However, your read() returns '$status' on EOF??";;
10183                 esac
10184                 val="$define"
10185                 if test "$status" = "$rd_nodata"; then
10186                         echo "WARNING: you can't distinguish between EOF and no data!"
10187                         val="$undef"
10188                 fi
10189         else
10190                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10191                 eagain=EAGAIN
10192         fi
10193         set d_eofnblk
10194         eval $setvar
10195         ;;
10196 *)
10197         echo "Using $hint value $eagain."
10198         echo "Your read() returns $rd_nodata when no data is present."
10199         case "$d_eofnblk" in
10200         "$define") echo "And you can see EOF because read() returns 0.";;
10201         "$undef") echo "But you can't see EOF status from read() returned value.";;
10202         *)
10203                 echo "(Assuming you can't see EOF status from read anyway.)"
10204                 d_eofnblk=$undef
10205                 ;;
10206         esac
10207         ;;
10208 esac
10209 $rm -f try try.* .out core head.c mtry
10210
10211 : see if fchdir exists
10212 set fchdir d_fchdir
10213 eval $inlibc
10214
10215 : see if fchmod exists
10216 set fchmod d_fchmod
10217 eval $inlibc
10218
10219 : see if fchown exists
10220 set fchown d_fchown
10221 eval $inlibc
10222
10223 : see if this is an fcntl system
10224 set fcntl d_fcntl
10225 eval $inlibc
10226
10227 echo " "
10228 : See if fcntl-based locking works.
10229 $cat >try.c <<EOCP
10230 #include <stdlib.h>
10231 #include <unistd.h>
10232 #include <fcntl.h>
10233 #include <signal.h>
10234 $signal_t blech(x) int x; { exit(3); }
10235 int main() {
10236 #if defined(F_SETLK) && defined(F_SETLKW)
10237      struct flock flock;
10238      int retval, fd;
10239      fd = open("try.c", O_RDONLY);
10240      flock.l_type = F_RDLCK;
10241      flock.l_whence = SEEK_SET;
10242      flock.l_start = flock.l_len = 0;
10243      signal(SIGALRM, blech);
10244      alarm(10);
10245      retval = fcntl(fd, F_SETLK, &flock);
10246      close(fd);
10247      (retval < 0 ? exit(2) : exit(0));
10248 #else
10249      exit(2);
10250 #endif
10251 }
10252 EOCP
10253 echo "Checking if fcntl-based file locking works... "
10254 case "$d_fcntl" in
10255 "$define")
10256         set try
10257         if eval $compile_ok; then
10258                 if $run ./try; then
10259                         echo "Yes, it seems to work."
10260                         val="$define"
10261                 else
10262                         echo "Nope, it didn't work."
10263                         val="$undef"
10264                         case "$?" in
10265                         3) $cat >&4 <<EOM
10266 ***
10267 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10268 *** This is (almost) impossible.
10269 *** If your NFS lock daemons are not feeling well, something like
10270 *** this may happen, please investigate.  Cannot continue, aborting.
10271 ***
10272 EOM
10273                                 exit 1
10274                                 ;;
10275                         esac
10276                 fi
10277         else
10278                 echo "I'm unable to compile the test program, so I'll assume not."
10279                 val="$undef"
10280         fi
10281         ;;
10282 *) val="$undef";
10283         echo "Nope, since you don't even have fcntl()."
10284         ;;
10285 esac
10286 set d_fcntl_can_lock
10287 eval $setvar
10288 $rm -f try*
10289
10290
10291 : see if sys/select.h has to be included
10292 set sys/select.h i_sysselct
10293 eval $inhdr
10294
10295 : see if we should include time.h, sys/time.h, or both
10296 echo " "
10297 if test "X$timeincl" = X; then
10298         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10299         $echo $n "I'm now running the test program...$c"
10300         $cat >try.c <<'EOCP'
10301 #include <sys/types.h>
10302 #ifdef I_TIME
10303 #include <time.h>
10304 #endif
10305 #ifdef I_SYSTIME
10306 #ifdef SYSTIMEKERNEL
10307 #define KERNEL
10308 #endif
10309 #include <sys/time.h>
10310 #endif
10311 #ifdef I_SYSSELECT
10312 #include <sys/select.h>
10313 #endif
10314 int main()
10315 {
10316         struct tm foo;
10317 #ifdef S_TIMEVAL
10318         struct timeval bar;
10319 #endif
10320 #ifdef S_TIMEZONE
10321         struct timezone tzp;
10322 #endif
10323         if (foo.tm_sec == foo.tm_sec)
10324                 exit(0);
10325 #ifdef S_TIMEVAL
10326         if (bar.tv_sec == bar.tv_sec)
10327                 exit(0);
10328 #endif
10329         exit(1);
10330 }
10331 EOCP
10332         flags=''
10333         for s_timezone in '-DS_TIMEZONE' ''; do
10334         sysselect=''
10335         for s_timeval in '-DS_TIMEVAL' ''; do
10336         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10337         for i_time in '' '-DI_TIME'; do
10338         for i_systime in '-DI_SYSTIME' ''; do
10339                 case "$flags" in
10340                 '') $echo $n ".$c"
10341                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10342                         if eval $compile; then
10343                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10344                                 shift
10345                                 flags="$*"
10346                                 echo " "
10347                                 $echo $n "Succeeded with $flags$c"
10348                         fi
10349                         ;;
10350                 esac
10351         done
10352         done
10353         done
10354         done
10355         done
10356         timeincl=''
10357         echo " "
10358         case "$flags" in
10359         *SYSTIMEKERNEL*) i_systimek="$define"
10360                 timeincl=`./findhdr sys/time.h`
10361                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10362         *) i_systimek="$undef";;
10363         esac
10364         case "$flags" in
10365         *I_TIME*) i_time="$define"
10366                 timeincl=`./findhdr time.h`" $timeincl"
10367                 echo "We'll include <time.h>." >&4;;
10368         *) i_time="$undef";;
10369         esac
10370         case "$flags" in
10371         *I_SYSTIME*) i_systime="$define"
10372                 timeincl=`./findhdr sys/time.h`" $timeincl"
10373                 echo "We'll include <sys/time.h>." >&4;;
10374         *) i_systime="$undef";;
10375         esac
10376         $rm -f try.c try
10377 fi
10378
10379 : check for fd_set items
10380 $cat <<EOM
10381
10382 Checking to see how well your C compiler handles fd_set and friends ...
10383 EOM
10384 $cat >try.c <<EOCP
10385 #$i_systime I_SYS_TIME
10386 #$i_sysselct I_SYS_SELECT
10387 #$d_socket HAS_SOCKET
10388 #include <sys/types.h>
10389 #ifdef HAS_SOCKET
10390 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10391 #endif
10392 #ifdef I_SYS_TIME
10393 #include <sys/time.h>
10394 #endif
10395 #ifdef I_SYS_SELECT
10396 #include <sys/select.h>
10397 #endif
10398 int main() {
10399         fd_set fds;
10400
10401 #ifdef TRYBITS
10402         if(fds.fds_bits);
10403 #endif
10404
10405 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10406         exit(0);
10407 #else
10408         exit(1);
10409 #endif
10410 }
10411 EOCP
10412 set try -DTRYBITS
10413 if eval $compile; then
10414         d_fds_bits="$define"
10415         d_fd_set="$define"
10416         echo "Well, your system knows about the normal fd_set typedef..." >&4
10417         if $run ./try; then
10418                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10419                 d_fd_macros="$define"
10420         else
10421                 $cat >&4 <<'EOM'
10422 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10423 EOM
10424                 d_fd_macros="$undef"
10425         fi
10426 else
10427         $cat <<'EOM'
10428 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10429 EOM
10430         set try
10431         if eval $compile; then
10432                 d_fds_bits="$undef"
10433                 d_fd_set="$define"
10434                 echo "Well, your system has some sort of fd_set available..." >&4
10435                 if $run ./try; then
10436                         echo "and you have the normal fd_set macros." >&4
10437                         d_fd_macros="$define"
10438                 else
10439                         $cat <<'EOM'
10440 but not the normal fd_set macros!  Gross!  More work for me...
10441 EOM
10442                         d_fd_macros="$undef"
10443                 fi
10444         else
10445         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10446                 d_fd_set="$undef"
10447                 d_fds_bits="$undef"
10448                 d_fd_macros="$undef"
10449         fi
10450 fi
10451 $rm -f try try.*
10452
10453 : see if fgetpos exists
10454 set fgetpos d_fgetpos
10455 eval $inlibc
10456
10457 : see if finite exists
10458 set finite d_finite
10459 eval $inlibc
10460
10461 : see if finitel exists
10462 set finitel d_finitel
10463 eval $inlibc
10464
10465 : see if flock exists
10466 set flock d_flock
10467 eval $inlibc
10468
10469 : see if prototype for flock is available
10470 echo " "
10471 set d_flockproto flock $i_sysfile sys/file.h
10472 eval $hasproto
10473
10474 : see if fork exists
10475 set fork d_fork
10476 eval $inlibc
10477
10478 : see if fp_class exists
10479 set fp_class d_fp_class
10480 eval $inlibc
10481
10482 : see if pathconf exists
10483 set pathconf d_pathconf
10484 eval $inlibc
10485
10486 : see if fpathconf exists
10487 set fpathconf d_fpathconf
10488 eval $inlibc
10489
10490 : see if fpclass exists
10491 set fpclass d_fpclass
10492 eval $inlibc
10493
10494 : see if fpclassify exists
10495 set fpclassify d_fpclassify
10496 eval $inlibc
10497
10498 : see if fpclassl exists
10499 set fpclassl d_fpclassl
10500 eval $inlibc
10501
10502
10503 : check for fpos64_t
10504 echo " "
10505 echo "Checking to see if you have fpos64_t..." >&4
10506 $cat >try.c <<EOCP
10507 #include <stdio.h>
10508 int main() { fpos64_t x = 7; }
10509 EOCP
10510 set try
10511 if eval $compile; then
10512         val="$define"
10513         echo "You have fpos64_t."
10514 else
10515         val="$undef"
10516         echo "You do not have fpos64_t."
10517         case "$fpossize" in
10518         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10519         esac
10520 fi
10521 $rm -f try.* try
10522 set d_fpos64_t
10523 eval $setvar
10524
10525 : see if frexpl exists
10526 set frexpl d_frexpl
10527 eval $inlibc
10528
10529 : see if this is a sys/param system
10530 set sys/param.h i_sysparam
10531 eval $inhdr
10532
10533 : see if this is a sys/mount.h system
10534 set sys/mount.h i_sysmount
10535 eval $inhdr
10536
10537
10538 echo " "
10539 echo "Checking to see if your system supports struct fs_data..." >&4
10540 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10541 eval $hasstruct
10542 case "$d_fs_data_s" in
10543 "$define")      echo "Yes, it does."   ;;
10544 *)              echo "No, it doesn't." ;;
10545 esac
10546
10547 : see if fseeko exists
10548 set fseeko d_fseeko
10549 eval $inlibc
10550 case "$longsize" in
10551 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10552 esac
10553
10554 : see if fsetpos exists
10555 set fsetpos d_fsetpos
10556 eval $inlibc
10557
10558
10559 : see if fstatfs exists
10560 set fstatfs d_fstatfs
10561 eval $inlibc
10562
10563
10564 : see if statvfs exists
10565 set statvfs d_statvfs
10566 eval $inlibc
10567
10568 : see if fstatvfs exists
10569 set fstatvfs d_fstatvfs
10570 eval $inlibc
10571
10572
10573 : see if fsync exists
10574 set fsync d_fsync
10575 eval $inlibc
10576
10577 : see if ftello exists
10578 set ftello d_ftello
10579 eval $inlibc
10580 case "$longsize" in
10581 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10582 esac
10583
10584 : see if getcwd exists
10585 set getcwd d_getcwd
10586 eval $inlibc
10587
10588 : see if getespwnam exists
10589 set getespwnam d_getespwnam
10590 eval $inlibc
10591
10592
10593 : see if getfsstat exists
10594 set getfsstat d_getfsstat
10595 eval $inlibc
10596
10597 : see if getgrent exists
10598 set getgrent d_getgrent
10599 eval $inlibc
10600
10601 : see if gethostbyaddr exists
10602 set gethostbyaddr d_gethbyaddr
10603 eval $inlibc
10604
10605 : see if gethostbyname exists
10606 set gethostbyname d_gethbyname
10607 eval $inlibc
10608
10609 : see if gethostent exists
10610 set gethostent d_gethent
10611 eval $inlibc
10612
10613 : see how we will look up host name
10614 echo " "
10615 call=''
10616 if set gethostname val -f d_gethname; eval $csym; $val; then
10617         echo 'gethostname() found.' >&4
10618         d_gethname="$define"
10619         call=gethostname
10620 fi
10621 if set uname val -f d_uname; eval $csym; $val; then
10622         if ./xenix; then
10623                 $cat <<'EOM'
10624 uname() was found, but you're running xenix, and older versions of xenix
10625 have a broken uname(). If you don't really know whether your xenix is old
10626 enough to have a broken system call, use the default answer.
10627
10628 EOM
10629                 dflt=y
10630                 case "$d_uname" in
10631                 "$define") dflt=n;;
10632                 esac
10633                 rp='Is your uname() broken?'
10634                 . ./myread
10635                 case "$ans" in
10636                 n*) d_uname="$define"; call=uname;;
10637                 esac
10638         else
10639                 echo 'uname() found.' >&4
10640                 d_uname="$define"
10641                 case "$call" in
10642                 '') call=uname ;;
10643                 esac
10644         fi
10645 fi
10646 case "$d_gethname" in
10647 '') d_gethname="$undef";;
10648 esac
10649 case "$d_uname" in
10650 '') d_uname="$undef";;
10651 esac
10652 case "$d_uname$d_gethname" in
10653 *define*)
10654         dflt=n
10655         cat <<EOM
10656  
10657 Every now and then someone has a $call() that lies about the hostname
10658 but can't be fixed for political or economic reasons.  If you wish, I can
10659 pretend $call() isn't there and maybe compute hostname at run-time
10660 thanks to the '$phostname' command.
10661
10662 EOM
10663         rp="Shall I ignore $call() from now on?"
10664         . ./myread
10665         case "$ans" in
10666         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10667         esac;;
10668 esac
10669 case "$phostname" in
10670 '') aphostname='';;
10671 *) case "$aphostname" in
10672         /*) ;;
10673         *) set X $phostname
10674                 shift
10675                 file=$1
10676                 shift
10677                 file=`./loc $file $file $pth`
10678                 aphostname=`echo $file $*`
10679                 ;;
10680         esac
10681         ;;
10682 esac
10683 case "$d_uname$d_gethname" in
10684 *define*) ;;
10685 *)
10686         case "$phostname" in
10687         '')
10688                 echo "There will be no way for $package to get your hostname." >&4;;
10689         *)
10690         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10691                 ;;
10692         esac;;
10693 esac
10694 case "$d_phostname" in
10695 '') d_phostname="$undef";;
10696 esac
10697
10698 : see if this is a netdb.h system
10699 set netdb.h i_netdb
10700 eval $inhdr
10701
10702 : see if prototypes for various gethostxxx netdb.h functions are available
10703 echo " "
10704 set d_gethostprotos gethostent $i_netdb netdb.h
10705 eval $hasproto
10706
10707 : see if getitimer exists
10708 set getitimer d_getitimer
10709 eval $inlibc
10710
10711 : see if getlogin exists
10712 set getlogin d_getlogin
10713 eval $inlibc
10714
10715 : see if getmnt exists
10716 set getmnt d_getmnt
10717 eval $inlibc
10718
10719 : see if getmntent exists
10720 set getmntent d_getmntent
10721 eval $inlibc
10722
10723 : see if getnetbyaddr exists
10724 set getnetbyaddr d_getnbyaddr
10725 eval $inlibc
10726
10727 : see if getnetbyname exists
10728 set getnetbyname d_getnbyname
10729 eval $inlibc
10730
10731 : see if getnetent exists
10732 set getnetent d_getnent
10733 eval $inlibc
10734
10735 : see if prototypes for various getnetxxx netdb.h functions are available
10736 echo " "
10737 set d_getnetprotos getnetent $i_netdb netdb.h
10738 eval $hasproto
10739
10740 : see if getpagesize exists
10741 set getpagesize d_getpagsz
10742 eval $inlibc
10743
10744
10745 : see if getprotobyname exists
10746 set getprotobyname d_getpbyname
10747 eval $inlibc
10748
10749 : see if getprotobynumber exists
10750 set getprotobynumber d_getpbynumber
10751 eval $inlibc
10752
10753 : see if getprotoent exists
10754 set getprotoent d_getpent
10755 eval $inlibc
10756
10757 : see if getpgid exists
10758 set getpgid d_getpgid
10759 eval $inlibc
10760
10761 : see if getpgrp2 exists
10762 set getpgrp2 d_getpgrp2
10763 eval $inlibc
10764
10765 : see if getppid exists
10766 set getppid d_getppid
10767 eval $inlibc
10768
10769 : see if getpriority exists
10770 set getpriority d_getprior
10771 eval $inlibc
10772
10773 : see if prototypes for various getprotoxxx netdb.h functions are available
10774 echo " "
10775 set d_getprotoprotos getprotoent $i_netdb netdb.h
10776 eval $hasproto
10777
10778 : see if getprpwnam exists
10779 set getprpwnam d_getprpwnam
10780 eval $inlibc
10781
10782 : see if getpwent exists
10783 set getpwent d_getpwent
10784 eval $inlibc
10785
10786
10787 : see if getservbyname exists
10788 set getservbyname d_getsbyname
10789 eval $inlibc
10790
10791 : see if getservbyport exists
10792 set getservbyport d_getsbyport
10793 eval $inlibc
10794
10795 : see if getservent exists
10796 set getservent d_getsent
10797 eval $inlibc
10798
10799 : see if prototypes for various getservxxx netdb.h functions are available
10800 echo " "
10801 set d_getservprotos getservent $i_netdb netdb.h
10802 eval $hasproto
10803
10804 : see if getspnam exists
10805 set getspnam d_getspnam
10806 eval $inlibc
10807
10808 : see if gettimeofday or ftime exists
10809 set gettimeofday d_gettimeod
10810 eval $inlibc
10811 case "$d_gettimeod" in
10812 "$undef")
10813         set ftime d_ftime 
10814         eval $inlibc
10815         ;;
10816 *)
10817         val="$undef"; set d_ftime; eval $setvar
10818         ;;
10819 esac
10820 case "$d_gettimeod$d_ftime" in
10821 "$undef$undef")
10822         echo " "
10823         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10824         ;;
10825 esac
10826
10827 : see if this is an grp system
10828 set grp.h i_grp
10829 eval $inhdr
10830
10831 case "$i_grp" in
10832 $define)
10833         xxx=`./findhdr grp.h`
10834         $cppstdin $cppflags $cppminus < $xxx >$$.h
10835
10836         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10837                 val="$define"
10838         else
10839                 val="$undef"
10840         fi
10841         set d_grpasswd
10842         eval $setvar
10843
10844         $rm -f $$.h
10845         ;;
10846 *)
10847         val="$undef";
10848         set d_grpasswd; eval $setvar
10849         ;;
10850 esac
10851
10852 : see if hasmntopt exists
10853 set hasmntopt d_hasmntopt
10854 eval $inlibc
10855
10856 : see if this is a netinet/in.h or sys/in.h system
10857 set netinet/in.h i_niin sys/in.h i_sysin
10858 eval $inhdr
10859
10860 : see if arpa/inet.h has to be included
10861 set arpa/inet.h i_arpainet
10862 eval $inhdr
10863
10864 : see if htonl --and friends-- exists
10865 val=''
10866 set htonl val
10867 eval $inlibc
10868
10869 : Maybe they are macros.
10870 case "$val" in
10871 $undef)
10872         $cat >htonl.c <<EOM
10873 #include <stdio.h>
10874 #include <sys/types.h>
10875 #$i_niin I_NETINET_IN
10876 #$i_sysin I_SYS_IN
10877 #$i_arpainet I_ARPA_INET
10878 #ifdef I_NETINET_IN
10879 #include <netinet/in.h>
10880 #endif
10881 #ifdef I_SYS_IN
10882 #include <sys/in.h>
10883 #endif
10884 #ifdef I_ARPA_INET
10885 #include <arpa/inet.h>
10886 #endif
10887 #ifdef htonl
10888 printf("Defined as a macro.");
10889 #endif
10890 EOM
10891         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10892         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10893                 val="$define"
10894                 echo "But it seems to be defined as a macro." >&4
10895         fi
10896         $rm -f htonl.?
10897         ;;
10898 esac
10899 set d_htonl
10900 eval $setvar
10901
10902 : index or strchr
10903 echo " "
10904 if set index val -f; eval $csym; $val; then
10905         if set strchr val -f d_strchr; eval $csym; $val; then
10906                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10907                         val="$define"
10908                         vali="$undef"
10909                         echo "strchr() found." >&4
10910                 else
10911                         val="$undef"
10912                         vali="$define"
10913                         echo "index() found." >&4
10914                 fi
10915         else
10916                 val="$undef"
10917                 vali="$define"
10918                 echo "index() found." >&4
10919         fi
10920 else
10921         if set strchr val -f d_strchr; eval $csym; $val; then
10922                 val="$define"
10923                 vali="$undef"
10924                 echo "strchr() found." >&4
10925         else
10926                 echo "No index() or strchr() found!" >&4
10927                 val="$undef"
10928                 vali="$undef"
10929         fi
10930 fi
10931 set d_strchr; eval $setvar
10932 val="$vali"
10933 set d_index; eval $setvar
10934
10935 : check whether inet_aton exists
10936 set inet_aton d_inetaton
10937 eval $inlibc
10938
10939 : Look for isascii
10940 echo " "
10941 $cat >isascii.c <<'EOCP'
10942 #include <stdio.h>
10943 #include <ctype.h>
10944 int main() {
10945         int c = 'A';
10946         if (isascii(c))
10947                 exit(0);
10948         else
10949                 exit(1);
10950 }
10951 EOCP
10952 set isascii
10953 if eval $compile; then
10954         echo "isascii() found." >&4
10955         val="$define"
10956 else
10957         echo "isascii() NOT found." >&4
10958         val="$undef"
10959 fi
10960 set d_isascii
10961 eval $setvar
10962 $rm -f isascii*
10963
10964 : see if isfinite exists
10965 set isfinite d_isfinite
10966 eval $inlibc
10967
10968 : see if isinf exists
10969 set isinf d_isinf
10970 eval $inlibc
10971
10972 : see if isnan exists
10973 set isnan d_isnan
10974 eval $inlibc
10975
10976 : see if isnanl exists
10977 set isnanl d_isnanl
10978 eval $inlibc
10979
10980 : see if killpg exists
10981 set killpg d_killpg
10982 eval $inlibc
10983
10984 : see if lchown exists
10985 echo " "
10986 $cat > try.c <<'EOCP'
10987 /* System header to define __stub macros and hopefully few prototypes,
10988     which can conflict with char lchown(); below.  */
10989 #include <assert.h>
10990 /* Override any gcc2 internal prototype to avoid an error.  */
10991 /* We use char because int might match the return type of a gcc2
10992    builtin and then its argument prototype would still apply.  */
10993 char lchown();
10994 int main() {
10995     /*  The GNU C library defines this for functions which it implements
10996         to always fail with ENOSYS.  Some functions are actually named
10997         something starting with __ and the normal name is an alias.  */
10998 #if defined (__stub_lchown) || defined (__stub___lchown)
10999 choke me
11000 #else
11001 lchown();
11002 #endif
11003 ; return 0; }
11004 EOCP
11005 set try
11006 if eval $compile; then
11007     $echo "lchown() found." >&4
11008     val="$define"
11009 else
11010     $echo "lchown() NOT found." >&4
11011     val="$undef"
11012 fi
11013 set d_lchown
11014 eval $setvar
11015
11016 : See if number of significant digits in a double precision number is known
11017 echo " "
11018 $cat >ldbl_dig.c <<EOM
11019 #$i_limits I_LIMITS
11020 #$i_float I_FLOAT
11021 #ifdef I_LIMITS
11022 #include <limits.h>
11023 #endif
11024 #ifdef I_FLOAT
11025 #include <float.h>
11026 #endif
11027 #ifdef LDBL_DIG
11028 printf("Contains LDBL_DIG");
11029 #endif
11030 EOM
11031 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11032 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11033         echo "LDBL_DIG found." >&4
11034         val="$define"
11035 else
11036         echo "LDBL_DIG NOT found." >&4
11037         val="$undef"
11038 fi
11039 $rm -f ldbl_dig.?
11040 set d_ldbl_dig
11041 eval $setvar
11042
11043 : see if link exists
11044 set link d_link
11045 eval $inlibc
11046
11047 : see if localeconv exists
11048 set localeconv d_locconv
11049 eval $inlibc
11050
11051 : see if lockf exists
11052 set lockf d_lockf
11053 eval $inlibc
11054
11055 : see if prototype for lseek is available
11056 echo " "
11057 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11058 eval $hasproto
11059
11060 : see if lstat exists
11061 set lstat d_lstat
11062 eval $inlibc
11063
11064 : see if madvise exists
11065 set madvise d_madvise
11066 eval $inlibc
11067
11068 : see if mblen exists
11069 set mblen d_mblen
11070 eval $inlibc
11071
11072 : see if mbstowcs exists
11073 set mbstowcs d_mbstowcs
11074 eval $inlibc
11075
11076 : see if mbtowc exists
11077 set mbtowc d_mbtowc
11078 eval $inlibc
11079
11080 : see if memchr exists
11081 set memchr d_memchr
11082 eval $inlibc
11083
11084 : see if memcmp exists
11085 set memcmp d_memcmp
11086 eval $inlibc
11087
11088 : see if memcpy exists
11089 set memcpy d_memcpy
11090 eval $inlibc
11091
11092 : see if memmove exists
11093 set memmove d_memmove
11094 eval $inlibc
11095
11096 : see if memset exists
11097 set memset d_memset
11098 eval $inlibc
11099
11100 : see if mkdir exists
11101 set mkdir d_mkdir
11102 eval $inlibc
11103
11104 : see if mkdtemp exists
11105 set mkdtemp d_mkdtemp
11106 eval $inlibc
11107
11108 : see if mkfifo exists
11109 set mkfifo d_mkfifo
11110 eval $inlibc
11111
11112 : see if mkstemp exists
11113 set mkstemp d_mkstemp
11114 eval $inlibc
11115
11116 : see if mkstemps exists
11117 set mkstemps d_mkstemps
11118 eval $inlibc
11119
11120 : see if mktime exists
11121 set mktime d_mktime
11122 eval $inlibc
11123
11124 : see if this is a sys/mman.h system
11125 set sys/mman.h i_sysmman
11126 eval $inhdr
11127
11128 : see if mmap exists
11129 set mmap d_mmap
11130 eval $inlibc
11131 : see what shmat returns
11132 : default to something harmless
11133 mmaptype='void *'
11134 case "$i_sysmman$d_mmap" in
11135 "$define$define")
11136         $cat >mmap.c <<'END'
11137 #include <sys/mman.h>
11138 void *mmap();
11139 END
11140         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11141                 mmaptype='void *'
11142         else
11143                 mmaptype='caddr_t'
11144         fi
11145         echo "and it returns ($mmaptype)." >&4
11146         ;;
11147 esac
11148
11149
11150
11151 : see if mprotect exists
11152 set mprotect d_mprotect
11153 eval $inlibc
11154
11155 : see if msgctl exists
11156 set msgctl d_msgctl
11157 eval $inlibc
11158
11159 : see if msgget exists
11160 set msgget d_msgget
11161 eval $inlibc
11162
11163 : see if msgsnd exists
11164 set msgsnd d_msgsnd
11165 eval $inlibc
11166
11167 : see if msgrcv exists
11168 set msgrcv d_msgrcv
11169 eval $inlibc
11170
11171 : see how much of the 'msg*(2)' library is present.
11172 h_msg=true
11173 echo " "
11174 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11175 *"$undef"*) h_msg=false;;
11176 esac
11177 case "$osname" in
11178 freebsd)
11179     case "`ipcs 2>&1`" in
11180     "SVID messages"*"not configured"*)
11181         echo "Your $osname does not have the msg*(2) configured." >&4
11182         h_msg=false
11183         val="$undef"
11184         set msgctl d_msgctl
11185         eval $setvar
11186         set msgget d_msgget
11187         eval $setvar
11188         set msgsnd d_msgsnd
11189         eval $setvar
11190         set msgrcv d_msgrcv
11191         eval $setvar
11192         ;;
11193     esac
11194     ;;
11195 esac
11196 : we could also check for sys/ipc.h ...
11197 if $h_msg && $test `./findhdr sys/msg.h`; then
11198         echo "You have the full msg*(2) library." >&4
11199         val="$define"
11200 else
11201         echo "You don't have the full msg*(2) library." >&4
11202         val="$undef"
11203 fi
11204 set d_msg
11205 eval $setvar
11206
11207
11208 echo " "
11209 echo "Checking to see if your system supports struct msghdr..." >&4
11210 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11211 eval $hasstruct
11212 case "$d_msghdr_s" in
11213 "$define")      echo "Yes, it does."   ;;
11214 *)              echo "No, it doesn't." ;;
11215 esac
11216
11217
11218 : see if msync exists
11219 set msync d_msync
11220 eval $inlibc
11221
11222 : see if munmap exists
11223 set munmap d_munmap
11224 eval $inlibc
11225
11226 : see if nice exists
11227 set nice d_nice
11228 eval $inlibc
11229
11230 : see if this is a langinfo.h system
11231 set langinfo.h i_langinfo
11232 eval $inhdr
11233
11234 : see if nl_langinfo exists
11235 set nl_langinfo d_nl_langinfo
11236 eval $inlibc
11237
11238 : check for length of character
11239 echo " "
11240 case "$charsize" in
11241 '')
11242         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11243         $cat >try.c <<'EOCP'
11244 #include <stdio.h>
11245 int main()
11246 {
11247     printf("%d\n", (int)sizeof(char));
11248     exit(0);
11249 }
11250 EOCP
11251         set try
11252         if eval $compile_ok; then
11253                 dflt=`$run ./try`
11254         else
11255                 dflt='1'
11256                 echo "(I can't seem to compile the test program.  Guessing...)"
11257         fi
11258         ;;
11259 *)
11260         dflt="$charsize"
11261         ;;
11262 esac
11263 rp="What is the size of a character (in bytes)?"
11264 . ./myread
11265 charsize="$ans"
11266 $rm -f try.c try
11267
11268 : check for volatile keyword
11269 echo " "
11270 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11271 $cat >try.c <<'EOCP'
11272 int main()
11273 {
11274         typedef struct _goo_struct goo_struct;
11275         goo_struct * volatile goo = ((goo_struct *)0);
11276         struct _goo_struct {
11277                 long long_int;
11278                 int reg_int;
11279                 char char_var;
11280         };
11281         typedef unsigned short foo_t;
11282         char *volatile foo;
11283         volatile int bar;
11284         volatile foo_t blech;
11285         foo = foo;
11286 }
11287 EOCP
11288 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11289         val="$define"
11290         echo "Yup, it does."
11291 else
11292         val="$undef"
11293         echo "Nope, it doesn't."
11294 fi
11295 set d_volatile
11296 eval $setvar
11297 $rm -f try.*
11298
11299
11300 echo " "
11301 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11302
11303 case "$use64bitint:$d_quad:$quadtype" in
11304 define:define:?*)
11305         ivtype="$quadtype"
11306         uvtype="$uquadtype"
11307         ivsize=8
11308         uvsize=8
11309         ;;
11310 *)      ivtype="long"
11311         uvtype="unsigned long"
11312         ivsize=$longsize
11313         uvsize=$longsize
11314         ;;
11315 esac
11316
11317 case "$uselongdouble:$d_longdbl" in
11318 define:define)
11319         nvtype="long double"
11320         nvsize=$longdblsize
11321         ;;
11322 *)      nvtype=double
11323         nvsize=$doublesize
11324         ;;
11325 esac
11326
11327 $echo "(IV will be "$ivtype", $ivsize bytes)"
11328 $echo "(UV will be "$uvtype", $uvsize bytes)"
11329 $echo "(NV will be "$nvtype", $nvsize bytes)"
11330
11331 $cat >try.c <<EOCP
11332 #$i_inttypes I_INTTYPES
11333 #ifdef I_INTTYPES
11334 #include <inttypes.h>
11335 #endif
11336 #include <stdio.h>
11337 int main() {
11338 #ifdef INT8
11339    int8_t i =  INT8_MAX;
11340   uint8_t u = UINT8_MAX;
11341   printf("int8_t\n");
11342 #endif
11343 #ifdef INT16
11344    int16_t i =  INT16_MAX;
11345   uint16_t i = UINT16_MAX;
11346   printf("int16_t\n");
11347 #endif
11348 #ifdef INT32
11349    int32_t i =  INT32_MAX;
11350   uint32_t u = UINT32_MAX;
11351   printf("int32_t\n");
11352 #endif
11353 }
11354 EOCP
11355
11356 case "$i8type" in
11357 '')     case "$charsize" in
11358         1)      i8type=char
11359                 u8type="unsigned char"
11360                 i8size=$charsize
11361                 u8size=$charsize
11362                 ;;
11363         esac
11364         ;;
11365 esac
11366 case "$i8type" in
11367 '')     set try -DINT8
11368         if eval $compile; then
11369                 case "`$run ./try`" in
11370                 int8_t) i8type=int8_t
11371                         u8type=uint8_t
11372                         i8size=1
11373                         u8size=1
11374                         ;;
11375                 esac
11376         fi
11377         ;;
11378 esac
11379 case "$i8type" in
11380 '')     if $test $charsize -ge 1; then
11381                 i8type=char
11382                 u8type="unsigned char"
11383                 i8size=$charsize
11384                 u8size=$charsize
11385         fi
11386         ;;
11387 esac
11388
11389 case "$i16type" in
11390 '')     case "$shortsize" in
11391         2)      i16type=short
11392                 u16type="unsigned short"
11393                 i16size=$shortsize
11394                 u16size=$shortsize
11395                 ;;
11396         esac
11397         ;;
11398 esac
11399 case "$i16type" in
11400 '')     set try -DINT16
11401         if eval $compile; then
11402                 case "`$run ./try`" in
11403                 int16_t)
11404                         i16type=int16_t
11405                         u16type=uint16_t
11406                         i16size=2
11407                         u16size=2
11408                         ;;
11409                 esac
11410         fi
11411         ;;
11412 esac
11413 case "$i16type" in
11414 '')     if $test $shortsize -ge 2; then
11415                 i16type=short
11416                 u16type="unsigned short"
11417                 i16size=$shortsize
11418                 u16size=$shortsize
11419         fi
11420         ;;
11421 esac
11422
11423 case "$i32type" in
11424 '')     case "$longsize" in
11425         4)      i32type=long
11426                 u32type="unsigned long"
11427                 i32size=$longsize
11428                 u32size=$longsize
11429                 ;;
11430         *)      case "$intsize" in
11431                 4)      i32type=int
11432                         u32type="unsigned int"
11433                         i32size=$intsize
11434                         u32size=$intsize
11435                         ;;
11436                 esac
11437                 ;;
11438         esac
11439         ;;
11440 esac
11441 case "$i32type" in
11442 '')     set try -DINT32
11443         if eval $compile; then
11444                 case "`$run ./try`" in
11445                 int32_t)
11446                         i32type=int32_t
11447                         u32type=uint32_t
11448                         i32size=4
11449                         u32size=4
11450                         ;;
11451                 esac
11452         fi
11453         ;;
11454 esac
11455 case "$i32type" in
11456 '')     if $test $intsize -ge 4; then
11457                 i32type=int
11458                 u32type="unsigned int"
11459                 i32size=$intsize
11460                 u32size=$intsize
11461         fi
11462         ;;
11463 esac
11464
11465 case "$i64type" in
11466 '')     case "$d_quad:$quadtype" in
11467         define:?*)
11468                 i64type="$quadtype"
11469                 u64type="$uquadtype"
11470                 i64size=8
11471                 u64size=8
11472                 ;;
11473         esac
11474         ;;
11475 esac
11476
11477 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11478 : volatile so that the compiler has to store it out to memory.
11479 if test X"$d_volatile" = X"$define"; then
11480         volatile=volatile
11481 fi
11482 $cat <<EOP >try.c
11483 #include <stdio.h>
11484 #include <sys/types.h>
11485 #include <signal.h>
11486 #ifdef SIGFPE
11487 $volatile int bletched = 0;
11488 $signal_t blech(s) int s; { bletched = 1; }
11489 #endif
11490 int main() {
11491     $uvtype u = 0;
11492     $nvtype d;
11493     int     n = 8 * $uvsize;
11494     int     i;
11495 #ifdef SIGFPE
11496     signal(SIGFPE, blech);
11497 #endif
11498
11499     for (i = 0; i < n; i++) {
11500       u = u << 1 | ($uvtype)1;
11501       d = ($nvtype)u;
11502       if (($uvtype)d != u)
11503         break;
11504       if (d <= 0)
11505         break;
11506       d = ($nvtype)(u - 1);
11507       if (($uvtype)d != (u - 1))
11508         break;
11509 #ifdef SIGFPE
11510       if (bletched) {
11511         break;
11512 #endif
11513       } 
11514     }
11515     printf("%d\n", ((i == n) ? -n : i));
11516     exit(0);
11517 }
11518 EOP
11519 set try
11520
11521 d_nv_preserves_uv="$undef"
11522 if eval $compile; then
11523         d_nv_preserves_uv_bits="`$run ./try`"
11524 fi
11525 case "$d_nv_preserves_uv_bits" in
11526 \-[1-9]*)       
11527         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11528         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11529         d_nv_preserves_uv="$define"
11530         ;;
11531 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11532         d_nv_preserves_uv="$undef" ;;
11533 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11534         d_nv_preserves_uv_bits="$undef" ;;
11535 esac
11536
11537 $rm -f try.* try
11538
11539
11540 : check for off64_t
11541 echo " "
11542 echo "Checking to see if you have off64_t..." >&4
11543 $cat >try.c <<EOCP
11544 #include <sys/types.h>
11545 #include <unistd.h>
11546 int main() { off64_t x = 7; }
11547 EOCP
11548 set try
11549 if eval $compile; then
11550         val="$define"
11551         echo "You have off64_t."
11552 else
11553         val="$undef"
11554         echo "You do not have off64_t."
11555         case "$lseeksize" in
11556         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11557         esac
11558 fi
11559 $rm -f try.* try
11560 set d_off64_t
11561 eval $setvar
11562
11563 : see if POSIX threads are available
11564 set pthread.h i_pthread
11565 eval $inhdr
11566
11567
11568
11569
11570 : how to create joinable pthreads
11571 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11572         echo " "
11573         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11574         $cat >try.c <<'EOCP'
11575 #include <pthread.h>
11576 int main() {
11577     int detachstate = JOINABLE;
11578 }
11579 EOCP
11580         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11581         if eval $compile; then
11582                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11583                 val="$undef" # Yes, undef.
11584                 set d_old_pthread_create_joinable
11585                 eval $setvar
11586                 val=""
11587                 set old_pthread_create_joinable
11588                 eval $setvar
11589         else
11590                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11591                 if eval $compile; then
11592                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11593                         val="$define"
11594                         set d_old_pthread_create_joinable
11595                         eval $setvar
11596                         val=PTHREAD_CREATE_UNDETACHED
11597                         set old_pthread_create_joinable
11598                         eval $setvar
11599                 else            
11600                         set try -DJOINABLE=__UNDETACHED
11601                         if eval $compile; then
11602                                 echo "You seem to use __UNDETACHED." >&4
11603                                 val="$define"
11604                                 set d_old_pthread_create_joinable
11605                                 eval $setvar
11606                                 val=__UNDETACHED
11607                                 set old_pthread_create_joinable
11608                                 eval $setvar
11609                         else
11610                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11611                                 val="$define"
11612                                 set d_old_pthread_create_joinable
11613                                 eval $setvar
11614                                 val=0
11615                                 set old_pthread_create_joinable
11616                                 eval $setvar
11617                         fi
11618                 fi
11619         fi
11620         $rm -f try try.*
11621 else
11622     d_old_pthread_create_joinable="$undef"
11623     old_pthread_create_joinable=""
11624 fi
11625
11626 : see if pause exists
11627 set pause d_pause
11628 eval $inlibc
11629
11630 : see if pipe exists
11631 set pipe d_pipe
11632 eval $inlibc
11633
11634 : see if poll exists
11635 set poll d_poll
11636 eval $inlibc
11637
11638 : see if readlink exists
11639 set readlink d_readlink
11640 eval $inlibc
11641
11642 echo " "
11643 procselfexe=''
11644 val="$undef"
11645 case "$d_readlink" in
11646 "$define")
11647         if $issymlink /proc/self/exe ; then
11648                 $ls -l /proc/self/exe > reflect
11649                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11650                         echo "You have Linux-like /proc/self/exe."
11651                         procselfexe='"/proc/self/exe"'
11652                         val="$define"
11653                 fi
11654         fi
11655         if $issymlink /proc/curproc/file ; then
11656                 $ls -l /proc/curproc/file > reflect
11657                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11658                         echo "You have BSD-like /proc/curproc/file."
11659                         procselfexe='"/proc/curproc/file"'
11660                         val="$define"
11661                 fi
11662         fi
11663         ;;
11664 esac
11665 $rm -f reflect
11666 set d_procselfexe
11667 eval $setvar
11668
11669 : see if pthread_atfork exists
11670 set pthread_atfork d_pthread_atfork
11671 eval $inlibc
11672
11673
11674 : see whether the various POSIXish _yields exist
11675 $cat >try.c <<EOP
11676 #include <pthread.h>
11677 #include <stdio.h>
11678 int main() {
11679 #ifdef SCHED_YIELD
11680         sched_yield();
11681 #else
11682 #ifdef PTHREAD_YIELD
11683         pthread_yield();
11684 #else
11685 #ifdef PTHREAD_YIELD_NULL
11686         pthread_yield(NULL);
11687 #endif
11688 #endif
11689 #endif
11690 }
11691 EOP
11692 : see if sched_yield exists
11693 set try -DSCHED_YIELD
11694 if eval $compile; then
11695     val="$define"
11696     sched_yield='sched_yield()'
11697 else
11698     val="$undef"
11699 fi
11700 case "$usethreads" in
11701 $define)
11702         case "$val" in
11703         $define) echo 'sched_yield() found.' >&4        ;;
11704         *)       echo 'sched_yield() NOT found.' >&4    ;;
11705         esac
11706 esac
11707 set d_sched_yield
11708 eval $setvar
11709
11710 : see if pthread_yield exists
11711 set try -DPTHREAD_YIELD
11712 if eval $compile; then
11713     val="$define"
11714     case "$sched_yield" in
11715     '') sched_yield='pthread_yield()' ;;
11716     esac
11717 else
11718     set try -DPTHREAD_YIELD_NULL
11719     if eval $compile; then
11720         val="$define"
11721         case "$sched_yield" in
11722         '') sched_yield='pthread_yield(NULL)' ;;
11723         esac
11724     else
11725         val="$undef"
11726     fi
11727 fi
11728 case "$usethreads" in
11729 $define)
11730         case "$val" in
11731         $define) echo 'pthread_yield() found.' >&4      ;;
11732         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11733         esac
11734         ;;
11735 esac
11736 set d_pthread_yield
11737 eval $setvar
11738
11739 case "$sched_yield" in
11740 '') sched_yield=undef ;;
11741 esac
11742
11743 $rm -f try try.*
11744
11745 : see if this is a pwd.h system
11746 set pwd.h i_pwd
11747 eval $inhdr
11748
11749 case "$i_pwd" in
11750 $define)
11751         xxx=`./findhdr pwd.h`
11752         $cppstdin $cppflags $cppminus < $xxx >$$.h
11753
11754         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11755                 val="$define"
11756         else
11757                 val="$undef"
11758         fi
11759         set d_pwquota
11760         eval $setvar
11761
11762         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11763                 val="$define"
11764         else
11765                 val="$undef"
11766         fi
11767         set d_pwage
11768         eval $setvar
11769
11770         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11771                 val="$define"
11772         else
11773                 val="$undef"
11774         fi
11775         set d_pwchange
11776         eval $setvar
11777
11778         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11779                 val="$define"
11780         else
11781                 val="$undef"
11782         fi
11783         set d_pwclass
11784         eval $setvar
11785
11786         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11787                 val="$define"
11788         else
11789                 val="$undef"
11790         fi
11791         set d_pwexpire
11792         eval $setvar
11793
11794         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11795                 val="$define"
11796         else
11797                 val="$undef"
11798         fi
11799         set d_pwcomment
11800         eval $setvar
11801
11802         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11803                 val="$define"
11804         else
11805                 val="$undef"
11806         fi
11807         set d_pwgecos
11808         eval $setvar
11809
11810         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11811                 val="$define"
11812         else
11813                 val="$undef"
11814         fi
11815         set d_pwpasswd
11816         eval $setvar
11817
11818         $rm -f $$.h
11819         ;;
11820 *)
11821         val="$undef"; 
11822         set d_pwquota; eval $setvar
11823         set d_pwage; eval $setvar
11824         set d_pwchange; eval $setvar
11825         set d_pwclass; eval $setvar
11826         set d_pwexpire; eval $setvar
11827         set d_pwcomment; eval $setvar
11828         set d_pwgecos; eval $setvar
11829         set d_pwpasswd; eval $setvar
11830         ;;
11831 esac
11832
11833 : see if readdir and friends exist
11834 set readdir d_readdir
11835 eval $inlibc
11836 set seekdir d_seekdir
11837 eval $inlibc
11838 set telldir d_telldir
11839 eval $inlibc
11840 set rewinddir d_rewinddir
11841 eval $inlibc
11842
11843 : see if readv exists
11844 set readv d_readv
11845 eval $inlibc
11846
11847 : see if recvmsg exists
11848 set recvmsg d_recvmsg
11849 eval $inlibc
11850
11851 : see if rename exists
11852 set rename d_rename
11853 eval $inlibc
11854
11855 : see if rmdir exists
11856 set rmdir d_rmdir
11857 eval $inlibc
11858
11859 : see if memory.h is available.
11860 val=''
11861 set memory.h val
11862 eval $inhdr
11863
11864 : See if it conflicts with string.h
11865 case "$val" in
11866 $define)
11867         case "$strings" in
11868         '') ;;
11869         *)
11870                 $cppstdin $cppflags $cppminus < $strings > mem.h
11871                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11872                         echo " "
11873                         echo "We won't be including <memory.h>."
11874                         val="$undef"
11875                 fi
11876                 $rm -f mem.h
11877                 ;;
11878         esac
11879 esac
11880 set i_memory
11881 eval $setvar
11882
11883 : can bcopy handle overlapping blocks?
11884 echo " "
11885 val="$undef"
11886 case "$d_memmove" in
11887 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11888 *)      case "$d_bcopy" in
11889         "$define")
11890                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11891                 $cat >try.c <<EOCP
11892 #$i_memory I_MEMORY
11893 #$i_stdlib I_STDLIB
11894 #$i_string I_STRING
11895 #$i_unistd I_UNISTD
11896 EOCP
11897         $cat >>try.c <<'EOCP'
11898 #include <stdio.h>
11899 #ifdef I_MEMORY
11900 #  include <memory.h>
11901 #endif
11902 #ifdef I_STDLIB
11903 #  include <stdlib.h>
11904 #endif
11905 #ifdef I_STRING
11906 #  include <string.h>
11907 #else
11908 #  include <strings.h>
11909 #endif
11910 #ifdef I_UNISTD
11911 #  include <unistd.h>  /* Needed for NetBSD */
11912 #endif
11913 int main()
11914 {
11915 char buf[128], abc[128];
11916 char *b;
11917 int len;
11918 int off;
11919 int align;
11920
11921 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11922    try to store the string in read-only memory. */
11923 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11924
11925 for (align = 7; align >= 0; align--) {
11926         for (len = 36; len; len--) {
11927                 b = buf+align;
11928                 bcopy(abc, b, len);
11929                 for (off = 1; off <= len; off++) {
11930                         bcopy(b, b+off, len);
11931                         bcopy(b+off, b, len);
11932                         if (bcmp(b, abc, len))
11933                                 exit(1);
11934                 }
11935         }
11936 }
11937 exit(0);
11938 }
11939 EOCP
11940                 set try
11941                 if eval $compile_ok; then
11942                         if ./try 2>/dev/null; then
11943                                 echo "Yes, it can."
11944                                 val="$define"
11945                         else
11946                                 echo "It can't, sorry."
11947                         fi
11948                 else
11949                         echo "(I can't compile the test program, so we'll assume not...)"
11950                 fi
11951                 ;;
11952         esac
11953         $rm -f try.* try core
11954         ;;
11955 esac
11956 set d_safebcpy
11957 eval $setvar
11958
11959 : can memcpy handle overlapping blocks?
11960 echo " "
11961 val="$undef"
11962 case "$d_memmove" in
11963 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11964 *)      case "$d_memcpy" in
11965         "$define")
11966                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11967                 $cat >try.c <<EOCP
11968 #$i_memory I_MEMORY
11969 #$i_stdlib I_STDLIB
11970 #$i_string I_STRING
11971 #$i_unistd I_UNISTD
11972 EOCP
11973         $cat >>try.c <<'EOCP'
11974 #include <stdio.h>
11975 #ifdef I_MEMORY
11976 #  include <memory.h>
11977 #endif
11978 #ifdef I_STDLIB
11979 #  include <stdlib.h>
11980 #endif
11981 #ifdef I_STRING
11982 #  include <string.h>
11983 #else
11984 #  include <strings.h>
11985 #endif
11986 #ifdef I_UNISTD
11987 #  include <unistd.h>  /* Needed for NetBSD */
11988 #endif
11989 int main()
11990 {
11991 char buf[128], abc[128];
11992 char *b;
11993 int len;
11994 int off;
11995 int align;
11996
11997 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11998    try to store the string in read-only memory. */
11999 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
12000
12001 for (align = 7; align >= 0; align--) {
12002         for (len = 36; len; len--) {
12003                 b = buf+align;
12004                 memcpy(b, abc, len);
12005                 for (off = 1; off <= len; off++) {
12006                         memcpy(b+off, b, len);
12007                         memcpy(b, b+off, len);
12008                         if (memcmp(b, abc, len))
12009                                 exit(1);
12010                 }
12011         }
12012 }
12013 exit(0);
12014 }
12015 EOCP
12016                 set try
12017                 if eval $compile_ok; then
12018                         if ./try 2>/dev/null; then
12019                                 echo "Yes, it can."
12020                                 val="$define"
12021                         else
12022                                 echo "It can't, sorry."
12023                         fi
12024                 else
12025                         echo "(I can't compile the test program, so we'll assume not...)"
12026                 fi
12027                 ;;
12028         esac
12029         $rm -f try.* try core
12030         ;;
12031 esac
12032 set d_safemcpy
12033 eval $setvar
12034
12035 : can memcmp be trusted to compare relative magnitude?
12036 val="$undef"
12037 case "$d_memcmp" in
12038 "$define")
12039         echo " "
12040         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12041         $cat >try.c <<EOCP
12042 #$i_memory I_MEMORY
12043 #$i_stdlib I_STDLIB
12044 #$i_string I_STRING
12045 #$i_unistd I_UNISTD
12046 EOCP
12047         $cat >>try.c <<'EOCP'
12048 #include <stdio.h>
12049 #ifdef I_MEMORY
12050 #  include <memory.h>
12051 #endif
12052 #ifdef I_STDLIB
12053 #  include <stdlib.h>
12054 #endif
12055 #ifdef I_STRING
12056 #  include <string.h>
12057 #else
12058 #  include <strings.h>
12059 #endif
12060 #ifdef I_UNISTD
12061 #  include <unistd.h>  /* Needed for NetBSD */
12062 #endif
12063 int main()
12064 {
12065 char a = -1;
12066 char b = 0;
12067 if ((a < b) && memcmp(&a, &b, 1) < 0)
12068         exit(1);
12069 exit(0);
12070 }
12071 EOCP
12072         set try
12073         if eval $compile_ok; then
12074                 if $run ./try 2>/dev/null; then
12075                         echo "Yes, it can."
12076                         val="$define"
12077                 else
12078                         echo "No, it can't (it uses signed chars)."
12079                 fi
12080         else
12081                 echo "(I can't compile the test program, so we'll assume not...)"
12082         fi
12083         ;;
12084 esac
12085 $rm -f try.* try core
12086 set d_sanemcmp
12087 eval $setvar
12088
12089 : see if prototype for sbrk is available
12090 echo " "
12091 set d_sbrkproto sbrk $i_unistd unistd.h
12092 eval $hasproto
12093
12094 : see if select exists
12095 set select d_select
12096 eval $inlibc
12097
12098 : see if semctl exists
12099 set semctl d_semctl
12100 eval $inlibc
12101
12102 : see if semget exists
12103 set semget d_semget
12104 eval $inlibc
12105
12106 : see if semop exists
12107 set semop d_semop
12108 eval $inlibc
12109
12110 : see how much of the 'sem*(2)' library is present.
12111 h_sem=true
12112 echo " "
12113 case "$d_semctl$d_semget$d_semop" in
12114 *"$undef"*) h_sem=false;;
12115 esac
12116 case "$osname" in
12117 freebsd)
12118     case "`ipcs 2>&1`" in
12119     "SVID messages"*"not configured"*)
12120         echo "Your $osname does not have the sem*(2) configured." >&4
12121         h_sem=false
12122         val="$undef"
12123         set semctl d_semctl
12124         eval $setvar
12125         set semget d_semget
12126         eval $setvar
12127         set semop d_semop
12128         eval $setvar
12129         ;;
12130     esac
12131     ;;
12132 esac
12133 : we could also check for sys/ipc.h ...
12134 if $h_sem && $test `./findhdr sys/sem.h`; then
12135         echo "You have the full sem*(2) library." >&4
12136         val="$define"
12137 else
12138         echo "You don't have the full sem*(2) library." >&4
12139         val="$undef"
12140 fi
12141 set d_sem
12142 eval $setvar
12143
12144 : see whether sys/sem.h defines union semun
12145 echo " "
12146 $cat > try.c <<'END'
12147 #include <sys/types.h>
12148 #include <sys/ipc.h>
12149 #include <sys/sem.h>
12150 int main () { union semun semun; semun.buf = 0; }
12151 END
12152 set try
12153 if eval $compile; then
12154     echo "You have union semun in <sys/sem.h>." >&4
12155     val="$define"
12156 else
12157     echo "You do not have union semun in <sys/sem.h>." >&4
12158     val="$undef"
12159 fi
12160 $rm -f try try.c try.h
12161 set d_union_semun
12162 eval $setvar
12163
12164 : see how to do semctl IPC_STAT
12165 case "$d_sem" in
12166 $define)
12167     : see whether semctl IPC_STAT can use union semun
12168     echo " "
12169     $cat > try.h <<END
12170 #ifndef S_IRUSR
12171 #   ifdef S_IREAD
12172 #       define S_IRUSR S_IREAD
12173 #       define S_IWUSR S_IWRITE
12174 #       define S_IXUSR S_IEXEC
12175 #   else
12176 #       define S_IRUSR 0400
12177 #       define S_IWUSR 0200
12178 #       define S_IXUSR 0100
12179 #   endif
12180 #   define S_IRGRP (S_IRUSR>>3)
12181 #   define S_IWGRP (S_IWUSR>>3)
12182 #   define S_IXGRP (S_IXUSR>>3)
12183 #   define S_IROTH (S_IRUSR>>6)
12184 #   define S_IWOTH (S_IWUSR>>6)
12185 #   define S_IXOTH (S_IXUSR>>6)
12186 #endif
12187 #ifndef S_IRWXU
12188 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12189 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12190 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12191 #endif
12192 END
12193
12194     $cat > try.c <<END
12195 #include <sys/types.h>
12196 #include <sys/ipc.h>
12197 #include <sys/sem.h>
12198 #include <sys/stat.h>
12199 #include <stdio.h>
12200 #include <errno.h>
12201 #include "try.h"
12202 #ifndef errno
12203 extern int errno;
12204 #endif
12205 #$d_union_semun HAS_UNION_SEMUN
12206 int main() {
12207     union semun
12208 #ifndef HAS_UNION_SEMUN
12209     {
12210         int val;
12211         struct semid_ds *buf;
12212         unsigned short *array;
12213     }
12214 #endif
12215     arg;
12216     int sem, st;
12217
12218 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12219     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12220     if (sem > -1) {
12221         struct semid_ds argbuf;
12222         arg.buf = &argbuf;
12223 #       ifdef IPC_STAT
12224         st = semctl(sem, 0, IPC_STAT, arg);
12225         if (st == 0)
12226             printf("semun\n");
12227         else
12228 #       endif /* IPC_STAT */
12229             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12230 #       ifdef IPC_RMID
12231         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12232 #       endif /* IPC_RMID */
12233             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12234     } else
12235 #endif /* IPC_PRIVATE && ... */
12236         printf("semget failed: errno = %d\n", errno);
12237   return 0;
12238 }
12239 END
12240     val="$undef"
12241     set try
12242     if eval $compile; then
12243         xxx=`$run ./try`
12244         case "$xxx" in
12245         semun) val="$define" ;;
12246         esac
12247     fi
12248     $rm -f try try.c
12249     set d_semctl_semun
12250     eval $setvar
12251     case "$d_semctl_semun" in
12252     $define)
12253         echo "You can use union semun for semctl IPC_STAT." >&4
12254         also='also'
12255         ;;
12256     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12257         also=''
12258         ;;
12259     esac
12260
12261     : see whether semctl IPC_STAT can use struct semid_ds pointer
12262     $cat > try.c <<'END'
12263 #include <sys/types.h>
12264 #include <sys/ipc.h>
12265 #include <sys/sem.h>
12266 #include <sys/stat.h>
12267 #include "try.h"
12268 #include <stdio.h>
12269 #include <errno.h>
12270 #ifndef errno
12271 extern int errno;
12272 #endif
12273 int main() {
12274     struct semid_ds arg;
12275     int sem, st;
12276
12277 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12278     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12279     if (sem > -1) {
12280 #       ifdef IPC_STAT
12281         st = semctl(sem, 0, IPC_STAT, &arg);
12282         if (st == 0)
12283             printf("semid_ds\n");
12284         else
12285 #       endif /* IPC_STAT */
12286             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12287 #       ifdef IPC_RMID
12288         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12289 #       endif /* IPC_RMID */
12290             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12291     } else
12292 #endif /* IPC_PRIVATE && ... */
12293         printf("semget failed: errno = %d\n", errno);
12294
12295     return 0;
12296 }
12297 END
12298     val="$undef"
12299     set try
12300     if eval $compile; then
12301         xxx=`$run ./try`
12302         case "$xxx" in
12303         semid_ds) val="$define" ;;
12304         esac
12305     fi
12306     $rm -f try try.c
12307     set d_semctl_semid_ds
12308     eval $setvar
12309     case "$d_semctl_semid_ds" in
12310     $define)
12311         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12312         ;;
12313     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12314         ;;
12315     esac
12316     $rm -f try.h
12317     ;;
12318 *)  val="$undef"
12319
12320     # We do not have the full sem*(2) library, so assume we can not
12321     # use either.
12322
12323     set d_semctl_semun
12324     eval $setvar
12325
12326     set d_semctl_semid_ds
12327     eval $setvar
12328     ;;
12329 esac
12330
12331 : see if sendmsg exists
12332 set sendmsg d_sendmsg
12333 eval $inlibc
12334
12335 : see if setegid exists
12336 set setegid d_setegid
12337 eval $inlibc
12338
12339 : see if seteuid exists
12340 set seteuid d_seteuid
12341 eval $inlibc
12342
12343 : see if setgrent exists
12344 set setgrent d_setgrent
12345 eval $inlibc
12346
12347 : see if sethostent exists
12348 set sethostent d_sethent
12349 eval $inlibc
12350
12351 : see if setitimer exists
12352 set setitimer d_setitimer
12353 eval $inlibc
12354
12355 : see if setlinebuf exists
12356 set setlinebuf d_setlinebuf
12357 eval $inlibc
12358
12359 : see if setlocale exists
12360 set setlocale d_setlocale
12361 eval $inlibc
12362
12363 : see if setnetent exists
12364 set setnetent d_setnent
12365 eval $inlibc
12366
12367 : see if setprotoent exists
12368 set setprotoent d_setpent
12369 eval $inlibc
12370
12371 : see if setpgid exists
12372 set setpgid d_setpgid
12373 eval $inlibc
12374
12375 : see if setpgrp2 exists
12376 set setpgrp2 d_setpgrp2
12377 eval $inlibc
12378
12379 : see if setpriority exists
12380 set setpriority d_setprior
12381 eval $inlibc
12382
12383 : see if setproctitle exists
12384 set setproctitle d_setproctitle
12385 eval $inlibc
12386
12387 : see if setpwent exists
12388 set setpwent d_setpwent
12389 eval $inlibc
12390
12391 : see if setregid exists
12392 set setregid d_setregid
12393 eval $inlibc
12394 set setresgid d_setresgid
12395 eval $inlibc
12396
12397 : see if setreuid exists
12398 set setreuid d_setreuid
12399 eval $inlibc
12400 set setresuid d_setresuid
12401 eval $inlibc
12402
12403 : see if setrgid exists
12404 set setrgid d_setrgid
12405 eval $inlibc
12406
12407 : see if setruid exists
12408 set setruid d_setruid
12409 eval $inlibc
12410
12411 : see if setservent exists
12412 set setservent d_setsent
12413 eval $inlibc
12414
12415 : see if setsid exists
12416 set setsid d_setsid
12417 eval $inlibc
12418
12419 : see if setvbuf exists
12420 set setvbuf d_setvbuf
12421 eval $inlibc
12422
12423 : see if sfio.h is available
12424 set sfio.h i_sfio
12425 eval $inhdr
12426
12427
12428 : see if sfio library is available
12429 case "$i_sfio" in
12430 $define)
12431         val=''
12432         set sfreserve val
12433         eval $inlibc
12434         ;;
12435 *)
12436         val="$undef"
12437         ;;
12438 esac
12439 : Ok, but do we want to use it.
12440 case "$val" in
12441 $define)
12442         case "$usesfio" in
12443         true|$define|[yY]*) dflt='y';;
12444         *) dflt='n';;
12445         esac
12446         echo "$package can use the sfio library, but it is experimental."
12447         case "$useperlio" in
12448         "$undef")
12449             echo "For sfio also the PerlIO abstraction layer is needed."
12450             echo "Earlier you said you wouldn't want that."
12451             ;;
12452         esac
12453         rp="You seem to have sfio available, do you want to try using it?"
12454         . ./myread
12455         case "$ans" in
12456         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12457                 useperlio="$define"
12458                 val="$define"
12459                 ;;
12460         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12461                 val="$undef"
12462                 ;;
12463         esac
12464         ;;
12465 *)      case "$usesfio" in
12466         true|$define|[yY]*)
12467                 echo "Sorry, cannot find sfio on this machine." >&4
12468                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12469                 val="$undef"
12470                 ;;
12471         esac
12472         ;;
12473 esac
12474 set d_sfio
12475 eval $setvar
12476 case "$d_sfio" in
12477 $define) usesfio='true';;
12478 *) usesfio='false';;
12479 esac
12480 case "$d_sfio" in
12481 $define) ;;
12482 *)      : Remove sfio from list of libraries to use
12483         case "$libs" in
12484         *-lsfio*)
12485                 echo "Removing unneeded -lsfio from library list" >&4
12486                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12487                 shift
12488                 libs="$*"
12489                 echo "libs = $libs" >&4
12490                 ;;
12491         esac
12492 ;;
12493 esac
12494
12495
12496 : see if shmctl exists
12497 set shmctl d_shmctl
12498 eval $inlibc
12499
12500 : see if shmget exists
12501 set shmget d_shmget
12502 eval $inlibc
12503
12504 : see if shmat exists
12505 set shmat d_shmat
12506 eval $inlibc
12507 : see what shmat returns
12508 case "$d_shmat" in
12509 "$define")
12510         $cat >shmat.c <<'END'
12511 #include <sys/shm.h>
12512 void *shmat();
12513 END
12514         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12515                 shmattype='void *'
12516         else
12517                 shmattype='char *'
12518         fi
12519         echo "and it returns ($shmattype)." >&4
12520         : see if a prototype for shmat is available
12521         xxx=`./findhdr sys/shm.h`
12522         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12523         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12524                 val="$define"
12525         else
12526                 val="$undef"
12527         fi
12528         $rm -f shmat.[co]
12529         ;;
12530 *)
12531         val="$undef"
12532         ;;
12533 esac
12534 set d_shmatprototype
12535 eval $setvar
12536
12537 : see if shmdt exists
12538 set shmdt d_shmdt
12539 eval $inlibc
12540
12541 : see how much of the 'shm*(2)' library is present.
12542 h_shm=true
12543 echo " "
12544 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12545 *"$undef"*) h_shm=false;;
12546 esac
12547 case "$osname" in
12548 freebsd)
12549     case "`ipcs 2>&1`" in
12550     "SVID shared memory"*"not configured"*)
12551         echo "Your $osname does not have the shm*(2) configured." >&4
12552         h_shm=false
12553         val="$undef"
12554         set shmctl d_shmctl
12555         evat $setvar
12556         set shmget d_shmget
12557         evat $setvar
12558         set shmat d_shmat
12559         evat $setvar
12560         set shmdt d_shmdt
12561         evat $setvar
12562         ;;
12563     esac
12564     ;;
12565 esac
12566 : we could also check for sys/ipc.h ...
12567 if $h_shm && $test `./findhdr sys/shm.h`; then
12568         echo "You have the full shm*(2) library." >&4
12569         val="$define"
12570 else
12571         echo "You don't have the full shm*(2) library." >&4
12572         val="$undef"
12573 fi
12574 set d_shm
12575 eval $setvar
12576
12577 echo " "
12578 : see if we have sigaction
12579 if set sigaction val -f d_sigaction; eval $csym; $val; then
12580         echo 'sigaction() found.' >&4
12581         $cat > try.c <<'EOP'
12582 #include <stdio.h>
12583 #include <sys/types.h>
12584 #include <signal.h>
12585 int main()
12586 {
12587     struct sigaction act, oact;
12588     act.sa_flags = 0;
12589     oact.sa_handler = 0;
12590     /* so that act and oact are used */
12591     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12592 }
12593 EOP
12594         set try
12595         if eval $compile_ok; then
12596                 val="$define"
12597         else
12598                 echo "But you don't seem to have a useable struct sigaction." >&4
12599                 val="$undef"
12600         fi
12601 else
12602         echo 'sigaction NOT found.' >&4
12603         val="$undef"
12604 fi
12605 set d_sigaction; eval $setvar
12606 $rm -f try try$_o try.c
12607
12608 : see if sigprocmask exists
12609 set sigprocmask d_sigprocmask
12610 eval $inlibc
12611
12612 : see if sigsetjmp exists
12613 echo " "
12614 case "$d_sigsetjmp" in
12615 '')
12616         $cat >try.c <<'EOP'
12617 #include <setjmp.h>
12618 sigjmp_buf env;
12619 int set = 1;
12620 int main()
12621 {
12622         if (sigsetjmp(env,1))
12623                 exit(set);
12624         set = 0;
12625         siglongjmp(env, 1);
12626         exit(1);
12627 }
12628 EOP
12629         set try
12630         if eval $compile; then
12631                 if $run ./try >/dev/null 2>&1; then
12632                         echo "POSIX sigsetjmp found." >&4
12633                         val="$define"
12634                 else
12635                         $cat >&4 <<EOM
12636 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12637 I'll ignore them.
12638 EOM
12639                         val="$undef"
12640                 fi
12641         else
12642                 echo "sigsetjmp not found." >&4
12643                 val="$undef"
12644         fi
12645         ;;
12646 *) val="$d_sigsetjmp"
12647         case "$d_sigsetjmp" in
12648         $define) echo "POSIX sigsetjmp found." >&4;;
12649         $undef) echo "sigsetjmp not found." >&4;;
12650         esac
12651         ;;
12652 esac
12653 set d_sigsetjmp
12654 eval $setvar
12655 $rm -f try.c try
12656
12657 : see if sockatmark exists
12658 set sockatmark d_sockatmark
12659 eval $inlibc
12660
12661 : see if prototype for sockatmark is available
12662 echo " "
12663 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12664 eval $hasproto
12665
12666 : see if socks5_init exists
12667 set socks5_init d_socks5_init
12668 eval $inlibc
12669
12670 : see if prototype for setresgid is available
12671 echo " "
12672 set d_sresgproto setresgid $i_unistd unistd.h
12673 eval $hasproto
12674
12675 : see if prototype for setresuid is available
12676 echo " "
12677 set d_sresuproto setresuid $i_unistd unistd.h
12678 eval $hasproto
12679
12680 : see if sys/stat.h is available
12681 set sys/stat.h i_sysstat
12682 eval $inhdr
12683
12684
12685 : see if stat knows about block sizes
12686 echo " "
12687 echo "Checking to see if your struct stat has st_blocks field..." >&4
12688 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12689 eval $hasfield
12690
12691
12692 : see if this is a sys/vfs.h system
12693 set sys/vfs.h i_sysvfs
12694 eval $inhdr
12695
12696
12697 : see if this is a sys/statfs.h system
12698 set sys/statfs.h i_sysstatfs
12699 eval $inhdr
12700
12701
12702 echo " "
12703 echo "Checking to see if your system supports struct statfs..." >&4
12704 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
12705 eval $hasstruct
12706 case "$d_statfs_s" in
12707 "$define")      echo "Yes, it does."   ;;
12708 *)              echo "No, it doesn't." ;;
12709 esac
12710
12711
12712
12713 : see if struct statfs knows about f_flags
12714 case "$d_statfs_s" in
12715 define) 
12716         echo " "
12717         echo "Checking to see if your struct statfs has f_flags field..." >&4
12718         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
12719         eval $hasfield
12720         ;;
12721 *)      val="$undef"
12722         set d_statfs_f_flags
12723         eval $setvar
12724         ;;
12725 esac
12726 case "$d_statfs_f_flags" in
12727 "$define")      echo "Yes, it does."   ;;
12728 *)              echo "No, it doesn't." ;;
12729 esac
12730
12731 : see if _ptr and _cnt from stdio act std
12732 echo " "
12733
12734 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12735         echo "(Looks like you have stdio.h from BSD.)"
12736         case "$stdio_ptr" in
12737         '') stdio_ptr='((fp)->_p)'
12738                 ptr_lval=$define
12739                 ;;
12740         *)      ptr_lval=$d_stdio_ptr_lval;;
12741         esac
12742         case "$stdio_cnt" in
12743         '') stdio_cnt='((fp)->_r)'
12744                 cnt_lval=$define
12745                 ;;
12746         *)      cnt_lval=$d_stdio_cnt_lval;;
12747         esac
12748         case "$stdio_base" in
12749         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12750         esac
12751         case "$stdio_bufsiz" in
12752         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12753         esac
12754 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12755         echo "(Looks like you have stdio.h from Linux.)"
12756         case "$stdio_ptr" in
12757         '') stdio_ptr='((fp)->_IO_read_ptr)'
12758                 ptr_lval=$define
12759                 ;;
12760         *)      ptr_lval=$d_stdio_ptr_lval;;
12761         esac
12762         case "$stdio_cnt" in
12763         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12764                 cnt_lval=$undef
12765                 ;;
12766         *)      cnt_lval=$d_stdio_cnt_lval;;
12767         esac
12768         case "$stdio_base" in
12769         '') stdio_base='((fp)->_IO_read_base)';;
12770         esac
12771         case "$stdio_bufsiz" in
12772         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12773         esac
12774 else
12775         case "$stdio_ptr" in
12776         '') stdio_ptr='((fp)->_ptr)'
12777                 ptr_lval=$define
12778                 ;;
12779         *)      ptr_lval=$d_stdio_ptr_lval;;
12780         esac
12781         case "$stdio_cnt" in
12782         '') stdio_cnt='((fp)->_cnt)'
12783                 cnt_lval=$define
12784                 ;;
12785         *)      cnt_lval=$d_stdio_cnt_lval;;
12786         esac
12787         case "$stdio_base" in
12788         '') stdio_base='((fp)->_base)';;
12789         esac
12790         case "$stdio_bufsiz" in
12791         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12792         esac
12793 fi
12794
12795 : test whether _ptr and _cnt really work
12796 echo "Checking how std your stdio is..." >&4
12797 $cat >try.c <<EOP
12798 #include <stdio.h>
12799 #define FILE_ptr(fp)    $stdio_ptr
12800 #define FILE_cnt(fp)    $stdio_cnt
12801 int main() {
12802         FILE *fp = fopen("try.c", "r");
12803         char c = getc(fp);
12804         if (
12805                 18 <= FILE_cnt(fp) &&
12806                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12807         )
12808                 exit(0);
12809         exit(1);
12810 }
12811 EOP
12812 val="$undef"
12813 set try
12814 if eval $compile && $to try.c; then
12815         if $run ./try; then
12816                 echo "Your stdio acts pretty std."
12817                 val="$define"
12818         else
12819                 echo "Your stdio isn't very std."
12820         fi
12821 else
12822         echo "Your stdio doesn't appear very std."
12823 fi
12824 $rm -f try.c try
12825 set d_stdstdio
12826 eval $setvar
12827
12828 : Can _ptr be used as an lvalue?
12829 case "$d_stdstdio$ptr_lval" in
12830 $define$define) val=$define ;;
12831 *) val=$undef ;;
12832 esac
12833 set d_stdio_ptr_lval
12834 eval $setvar
12835
12836 : Can _cnt be used as an lvalue?
12837 case "$d_stdstdio$cnt_lval" in
12838 $define$define) val=$define ;;
12839 *) val=$undef ;;
12840 esac
12841 set d_stdio_cnt_lval
12842 eval $setvar
12843
12844
12845 : test whether setting _ptr sets _cnt as a side effect
12846 d_stdio_ptr_lval_sets_cnt="$undef"
12847 d_stdio_ptr_lval_nochange_cnt="$undef"
12848 case "$d_stdio_ptr_lval$d_stdstdio" in
12849 $define$define)
12850         echo "Checking to see what happens if we set the stdio ptr..." >&4
12851 $cat >try.c <<EOP
12852 #include <stdio.h>
12853 /* Can we scream? */
12854 /* Eat dust sed :-) */
12855 /* In the buffer space, no one can hear you scream. */
12856 #define FILE_ptr(fp)    $stdio_ptr
12857 #define FILE_cnt(fp)    $stdio_cnt
12858 #include <sys/types.h>
12859 int main() {
12860         FILE *fp = fopen("try.c", "r");
12861         int c;
12862         char *ptr;
12863         size_t cnt;
12864         if (!fp) {
12865             puts("Fail even to read");
12866             exit(1);
12867         }
12868         c = getc(fp); /* Read away the first # */
12869         if (c == EOF) {
12870             puts("Fail even to read");
12871             exit(1);
12872         }
12873         if (!(
12874                 18 <= FILE_cnt(fp) &&
12875                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12876         )) {
12877                 puts("Fail even to read");
12878                 exit (1);
12879         }
12880         ptr = (char*) FILE_ptr(fp);
12881         cnt = (size_t)FILE_cnt(fp);
12882
12883         FILE_ptr(fp) += 42;
12884
12885         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12886                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12887                 exit (1);
12888         }
12889         if (FILE_cnt(fp) <= 20) {
12890                 printf ("Fail (<20 chars to test)");
12891                 exit (1);
12892         }
12893         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12894                 puts("Fail compare");
12895                 exit (1);
12896         }
12897         if (cnt == FILE_cnt(fp)) {
12898                 puts("Pass_unchanged");
12899                 exit (0);
12900         }       
12901         if (FILE_cnt(fp) == (cnt - 42)) {
12902                 puts("Pass_changed");
12903                 exit (0);
12904         }
12905         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12906         return 1;
12907
12908 }
12909 EOP
12910         set try
12911         if eval $compile && $to try.c; then
12912                 case `$run ./try` in
12913                 Pass_changed)
12914                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12915                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12916                 Pass_unchanged)
12917                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12918                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12919                 Fail*)
12920                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12921                 *)
12922                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12923         esac
12924         else
12925                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12926         fi
12927         $rm -f try.c try
12928         ;;
12929 esac
12930
12931 : see if _base is also standard
12932 val="$undef"
12933 case "$d_stdstdio" in
12934 $define)
12935         $cat >try.c <<EOP
12936 #include <stdio.h>
12937 #define FILE_base(fp)   $stdio_base
12938 #define FILE_bufsiz(fp) $stdio_bufsiz
12939 int main() {
12940         FILE *fp = fopen("try.c", "r");
12941         char c = getc(fp);
12942         if (
12943                 19 <= FILE_bufsiz(fp) &&
12944                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12945         )
12946                 exit(0);
12947         exit(1);
12948 }
12949 EOP
12950         set try
12951         if eval $compile && $to try.c; then
12952                 if $run ./try; then
12953                         echo "And its _base field acts std."
12954                         val="$define"
12955                 else
12956                         echo "But its _base field isn't std."
12957                 fi
12958         else
12959                 echo "However, it seems to be lacking the _base field."
12960         fi
12961         $rm -f try.c try
12962         ;;
12963 esac
12964 set d_stdiobase
12965 eval $setvar
12966
12967 $cat >&4 <<EOM
12968 Checking how to access stdio streams by file descriptor number...
12969 EOM
12970 case "$stdio_stream_array" in
12971 '')     $cat >try.c <<EOCP
12972 #include <stdio.h>
12973 int main() {
12974   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12975     printf("yes\n");
12976 }
12977 EOCP
12978         for s in _iob __iob __sF
12979         do
12980                 set try -DSTDIO_STREAM_ARRAY=$s
12981                 if eval $compile; then
12982                         case "`$run ./try`" in
12983                         yes)    stdio_stream_array=$s; break ;;
12984                         esac
12985                 fi
12986         done
12987         $rm -f try.* try$exe_ext
12988 esac
12989 case "$stdio_stream_array" in
12990 '')     $cat >&4 <<EOM
12991 I can't figure out how to access stdio streams by file descriptor number.
12992 EOM
12993         d_stdio_stream_array="$undef"
12994         ;;
12995 *)      $cat >&4 <<EOM
12996 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12997 EOM
12998         d_stdio_stream_array="$define"
12999         ;;
13000 esac
13001
13002 : see if strcoll exists
13003 set strcoll d_strcoll
13004 eval $inlibc
13005
13006 : check for structure copying
13007 echo " "
13008 echo "Checking to see if your C compiler can copy structs..." >&4
13009 $cat >try.c <<'EOCP'
13010 int main()
13011 {
13012         struct blurfl {
13013                 int dyick;
13014         } foo, bar;
13015
13016         foo = bar;
13017 }
13018 EOCP
13019 if $cc -c try.c >/dev/null 2>&1 ; then
13020         val="$define"
13021         echo "Yup, it can."
13022 else
13023         val="$undef"
13024         echo "Nope, it can't."
13025 fi
13026 set d_strctcpy
13027 eval $setvar
13028 $rm -f try.*
13029
13030 : see if strerror and/or sys_errlist[] exist
13031 echo " "
13032 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13033     if set strerror val -f d_strerror; eval $csym; $val; then
13034                 echo 'strerror() found.' >&4
13035                 d_strerror="$define"
13036                 d_strerrm='strerror(e)'
13037                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13038                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13039                         d_syserrlst="$define"
13040                 else
13041                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13042                         d_syserrlst="$undef"
13043                 fi
13044     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13045                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13046                 echo 'strerror() found in string header.' >&4
13047                 d_strerror="$define"
13048                 d_strerrm='strerror(e)'
13049                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13050                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13051                                 d_syserrlst="$define"
13052                 else
13053                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13054                         d_syserrlst="$undef"
13055                 fi
13056     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13057                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13058                 d_strerror="$undef"
13059                 d_syserrlst="$define"
13060                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13061     else
13062                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13063                 d_strerror="$undef"
13064                 d_syserrlst="$undef"
13065                 d_strerrm='"unknown"'
13066     fi
13067 fi
13068
13069 : see if strftime exists
13070 set strftime d_strftime
13071 eval $inlibc
13072
13073 : see if strtod exists
13074 set strtod d_strtod
13075 eval $inlibc
13076
13077 : see if strtol exists
13078 set strtol d_strtol
13079 eval $inlibc
13080
13081 : see if strtold exists
13082 set strtold d_strtold
13083 eval $inlibc
13084
13085 : see if strtoll exists
13086 set strtoll d_strtoll
13087 eval $inlibc
13088
13089 case "$d_longlong-$d_strtoll" in
13090 "$define-$define")
13091         $cat <<EOM
13092 Checking whether your strtoll() works okay...
13093 EOM
13094         $cat >try.c <<'EOCP'
13095 #include <errno.h>
13096 #ifdef __hpux
13097 #define strtoll __strtoll
13098 #endif
13099 #ifdef __EMX__
13100 #define strtoll _strtoll
13101 #endif
13102 #include <stdio.h>
13103 extern long long int strtoll(char *s, char **, int); 
13104 static int bad = 0;
13105 int check(char *s, long long ell, int een) {
13106         long long gll;
13107         errno = 0;
13108         gll = strtoll(s, 0, 10);
13109         if (!((gll == ell) && (errno == een)))
13110                 bad++;
13111 }
13112 int main() {
13113         check(" 1",                                      1LL, 0);
13114         check(" 0",                                      0LL, 0);
13115         check("-1",                                     -1LL, 0);
13116         check("-9223372036854775808", -9223372036854775808LL, 0);
13117         check("-9223372036854775808", -9223372036854775808LL, 0);
13118         check(" 9223372036854775807",  9223372036854775807LL, 0);
13119         check("-9223372036854775808", -9223372036854775808LL, 0);
13120         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13121         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13122         if (!bad)
13123                 printf("ok\n");
13124 }
13125 EOCP
13126         set try
13127         if eval $compile; then
13128                 yyy=`$run ./try`
13129                 case "$yyy" in
13130                 ok) echo "Your strtoll() seems to be working okay." ;;
13131                 *) cat <<EOM >&4
13132 Your strtoll() doesn't seem to be working okay.
13133 EOM
13134                    d_strtoll="$undef"
13135                    ;;
13136                 esac
13137         else
13138                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13139                 d_strtoll="$undef"
13140         fi
13141         ;;
13142 esac
13143
13144 : see if strtoq exists
13145 set strtoq d_strtoq
13146 eval $inlibc
13147
13148 : see if strtoul exists
13149 set strtoul d_strtoul
13150 eval $inlibc
13151
13152 case "$d_strtoul" in
13153 "$define")
13154         $cat <<EOM
13155 Checking whether your strtoul() works okay...
13156 EOM
13157         $cat >try.c <<'EOCP'
13158 #include <errno.h>
13159 #include <stdio.h>
13160 extern unsigned long int strtoul(char *s, char **, int); 
13161 static int bad = 0;
13162 void check(char *s, unsigned long eul, int een) {
13163         unsigned long gul;
13164         errno = 0;
13165         gul = strtoul(s, 0, 10);
13166         if (!((gul == eul) && (errno == een)))
13167                 bad++;
13168 }
13169 int main() {
13170         check(" 1", 1L, 0);
13171         check(" 0", 0L, 0);
13172 EOCP
13173         case "$longsize" in
13174         8)
13175             $cat >>try.c <<'EOCP'
13176         check("18446744073709551615", 18446744073709551615UL, 0);
13177         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13178 #if 0 /* strtoul() for /^-/ strings is undefined. */
13179         check("-1", 18446744073709551615UL, 0);
13180         check("-18446744073709551614", 2, 0);
13181         check("-18446744073709551615", 1, 0);
13182         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13183         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13184 #endif
13185 EOCP
13186                 ;;
13187         4)
13188                     $cat >>try.c <<'EOCP'
13189         check("4294967295", 4294967295UL, 0);
13190         check("4294967296", 4294967295UL, ERANGE);
13191 #if 0 /* strtoul() for /^-/ strings is undefined. */
13192         check("-1", 4294967295UL, 0);
13193         check("-4294967294", 2, 0);
13194         check("-4294967295", 1, 0);
13195         check("-4294967296", 4294967295UL, ERANGE);
13196         check("-4294967297", 4294967295UL, ERANGE);
13197 #endif
13198 EOCP
13199                 ;;
13200         *)
13201 : Should we write these tests to be more portable by sprintf-ing
13202 : ~0 and then manipulating that char string as input for strtol?
13203                 ;;
13204         esac
13205         $cat >>try.c <<'EOCP'
13206         if (!bad)
13207                 printf("ok\n");
13208         return 0;
13209 }
13210 EOCP
13211         set try
13212         if eval $compile; then
13213                 case "`$run ./try`" in
13214                 ok) echo "Your strtoul() seems to be working okay." ;;
13215                 *) cat <<EOM >&4
13216 Your strtoul() doesn't seem to be working okay.
13217 EOM
13218                    d_strtoul="$undef"
13219                    ;;
13220                 esac
13221         fi
13222         ;;
13223 esac
13224
13225 : see if strtoull exists
13226 set strtoull d_strtoull
13227 eval $inlibc
13228
13229 case "$d_longlong-$d_strtoull" in
13230 "$define-$define")
13231         $cat <<EOM
13232 Checking whether your strtoull() works okay...
13233 EOM
13234         $cat >try.c <<'EOCP'
13235 #include <errno.h>
13236 #ifdef __hpux
13237 #define strtoull __strtoull
13238 #endif
13239 #include <stdio.h>
13240 extern unsigned long long int strtoull(char *s, char **, int); 
13241 static int bad = 0;
13242 int check(char *s, long long eull, int een) {
13243         long long gull;
13244         errno = 0;
13245         gull = strtoull(s, 0, 10);
13246         if (!((gull == eull) && (errno == een)))
13247                 bad++;
13248 }
13249 int main() {
13250         check(" 1",                                        1LL, 0);
13251         check(" 0",                                        0LL, 0);
13252         check("18446744073709551615",  18446744073709551615ULL, 0);
13253         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13254 #if 0 /* strtoull() for /^-/ strings is undefined. */
13255         check("-1",                    18446744073709551615ULL, 0);
13256         check("-18446744073709551614",                     2LL, 0);
13257         check("-18446744073709551615",                     1LL, 0);
13258         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13259         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13260 #endif
13261         if (!bad)
13262                 printf("ok\n");
13263 }
13264 EOCP
13265         set try
13266         if eval $compile; then
13267                 case "`$run ./try`" in
13268                 ok) echo "Your strtoull() seems to be working okay." ;;
13269                 *) cat <<EOM >&4
13270 Your strtoull() doesn't seem to be working okay.
13271 EOM
13272                    d_strtoull="$undef"
13273                    ;;
13274                 esac
13275         fi
13276         ;;
13277 esac
13278
13279 : see if strtouq exists
13280 set strtouq d_strtouq
13281 eval $inlibc
13282
13283 case "$d_strtouq" in
13284 "$define")
13285         $cat <<EOM
13286 Checking whether your strtouq() works okay...
13287 EOM
13288         $cat >try.c <<'EOCP'
13289 #include <errno.h>
13290 #include <stdio.h>
13291 extern unsigned long long int strtouq(char *s, char **, int); 
13292 static int bad = 0;
13293 void check(char *s, unsigned long long eull, int een) {
13294         unsigned long long gull;
13295         errno = 0;
13296         gull = strtouq(s, 0, 10);
13297         if (!((gull == eull) && (errno == een)))
13298                 bad++;
13299 }
13300 int main() {
13301         check(" 1",                                        1LL, 0);
13302         check(" 0",                                        0LL, 0);
13303         check("18446744073709551615",  18446744073709551615ULL, 0);
13304         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13305 #if 0 /* strtouq() for /^-/ strings is undefined. */
13306         check("-1",                    18446744073709551615ULL, 0);
13307         check("-18446744073709551614",                     2LL, 0);
13308         check("-18446744073709551615",                     1LL, 0);
13309         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13310         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13311 #endif
13312         if (!bad)
13313                 printf("ok\n");
13314         return 0;
13315 }
13316 EOCP
13317         set try
13318         if eval $compile; then
13319                 case "`$run ./try`" in
13320                 ok) echo "Your strtouq() seems to be working okay." ;;
13321                 *) cat <<EOM >&4
13322 Your strtouq() doesn't seem to be working okay.
13323 EOM
13324                    d_strtouq="$undef"
13325                    ;;
13326                 esac
13327         fi
13328         ;;
13329 esac
13330
13331 : see if strxfrm exists
13332 set strxfrm d_strxfrm
13333 eval $inlibc
13334
13335 : see if symlink exists
13336 set symlink d_symlink
13337 eval $inlibc
13338
13339 : see if syscall exists
13340 set syscall d_syscall
13341 eval $inlibc
13342
13343 : see if prototype for syscall is available
13344 echo " "
13345 set d_syscallproto syscall $i_unistd unistd.h
13346 eval $hasproto
13347
13348 : see if sysconf exists
13349 set sysconf d_sysconf
13350 eval $inlibc
13351
13352 : see if system exists
13353 set system d_system
13354 eval $inlibc
13355
13356 : see if tcgetpgrp exists
13357 set tcgetpgrp d_tcgetpgrp
13358 eval $inlibc
13359
13360 : see if tcsetpgrp exists
13361 set tcsetpgrp d_tcsetpgrp
13362 eval $inlibc
13363
13364 : see if prototype for telldir is available
13365 echo " "
13366 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13367 eval $hasproto
13368
13369 : see if this is a sys/times.h system
13370 set sys/times.h i_systimes
13371 eval $inhdr
13372
13373 : see if times exists
13374 echo " "
13375 if set times val -f d_times; eval $csym; $val; then
13376         echo 'times() found.' >&4
13377         d_times="$define"
13378         inc=''
13379         case "$i_systimes" in
13380         "$define") inc='sys/times.h';;
13381         esac
13382         rp="What is the type returned by times() on this system?"
13383         set clock_t clocktype long stdio.h sys/types.h $inc
13384         eval $typedef_ask
13385 else
13386         echo 'times() NOT found, hope that will do.' >&4
13387         d_times="$undef"
13388         clocktype='int'
13389 fi
13390
13391 : see if truncate exists
13392 set truncate d_truncate
13393 eval $inlibc
13394
13395 : see if tzname[] exists
13396 echo " "
13397 if set tzname val -a d_tzname; eval $csym; $val; then
13398         val="$define"
13399         echo 'tzname[] found.' >&4
13400 else
13401         val="$undef"
13402         echo 'tzname[] NOT found.' >&4
13403 fi
13404 set d_tzname
13405 eval $setvar
13406
13407 case "$osname" in
13408 next|rhapsody|darwin) multiarch="$define" ;;
13409 esac
13410 case "$multiarch" in
13411 ''|[nN]*) multiarch="$undef" ;;
13412 esac
13413
13414 : check for ordering of bytes in a long
13415 echo " "
13416 case "$usecrosscompile$multiarch" in
13417 *$define*)
13418         $cat <<EOM
13419 You seem to be either cross-compiling or doing a multiarchitecture build,
13420 skipping the byteorder check.
13421
13422 EOM
13423         byteorder='ffff'
13424         ;;
13425 *)
13426         case "$byteorder" in
13427         '')
13428                 $cat <<'EOM'
13429 In the following, larger digits indicate more significance.  A big-endian
13430 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13431 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13432 machines may have weird orders like 3412.  A Cray will report 87654321,
13433 an Alpha will report 12345678. If the test program works the default is
13434 probably right.
13435 I'm now running the test program...
13436 EOM
13437                 $cat >try.c <<'EOCP'
13438 #include <stdio.h>
13439 int main()
13440 {
13441         int i;
13442         union {
13443                 unsigned long l;
13444                 char c[sizeof(long)];
13445         } u;
13446
13447         if (sizeof(long) > 4)
13448                 u.l = (0x08070605L << 32) | 0x04030201L;
13449         else
13450                 u.l = 0x04030201L;
13451         for (i = 0; i < sizeof(long); i++)
13452                 printf("%c", u.c[i]+'0');
13453         printf("\n");
13454         exit(0);
13455 }
13456 EOCP
13457                 xxx_prompt=y
13458                 set try
13459                 if eval $compile && ./try > /dev/null; then
13460                         dflt=`$run ./try`
13461                         case "$dflt" in
13462                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13463                                 echo "(The test program ran ok.)"
13464                                 echo "byteorder=$dflt"
13465                                 xxx_prompt=n
13466                         ;;
13467                         ????|????????) echo "(The test program ran ok.)" ;;
13468                         *) echo "(The test program didn't run right for some reason.)" ;;
13469                         esac
13470                 else
13471                         dflt='4321'
13472                         cat <<'EOM'
13473 (I can't seem to compile the test program.  Guessing big-endian...)
13474 EOM
13475                 fi
13476                 case "$xxx_prompt" in
13477                 y)
13478                         rp="What is the order of bytes in a long?"
13479                         . ./myread
13480                         byteorder="$ans"
13481                         ;;
13482                 *)      byteorder=$dflt
13483                         ;;
13484                 esac
13485                 ;;
13486         esac
13487         $rm -f try.c try
13488         ;;
13489 esac
13490
13491
13492 $cat <<EOM
13493
13494 Checking to see whether you can access character data unalignedly...
13495 EOM
13496 $cat >try.c <<EOCP
13497 #include <stdio.h>
13498 #define U32 $u32type
13499 #define BYTEORDER 0x$byteorder
13500 #define U8 $u8type
13501 #include <signal.h>
13502 #ifdef SIGBUS
13503 $signal_t bletch(s) int s; { exit(4); }
13504 #endif
13505 int main() {
13506 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13507     U8 *buf = "\0\0\0\1\0\0\0\0";
13508     U32 *up;
13509     int i;
13510
13511     if (sizeof(U32) != 4) {
13512         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13513         exit(1);
13514     }
13515
13516     fflush(stdout);
13517
13518 #ifdef SIGBUS
13519     signal(SIGBUS, bletch);
13520 #endif
13521
13522     for (i = 0; i < 4; i++) {
13523         up = (U32*)(buf + i);
13524         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13525                (*up == 1 << (8*(3-i)))  /* little-endian */
13526               )
13527            )
13528         {
13529             printf("read failed (%x)\n", *up);
13530             exit(2);
13531         }
13532     }
13533
13534     /* write test */
13535     for (i = 0; i < 4; i++) {
13536         up = (U32*)(buf + i);
13537         *up = 0xBeef;
13538         if (*up != 0xBeef) {
13539             printf("write failed (%x)\n", *up);
13540             exit(3);
13541         }
13542     }
13543
13544     exit(0);
13545 #else
13546     printf("1\n");
13547     exit(1);
13548 #endif
13549     return 0;
13550 }
13551 EOCP
13552 set try
13553 if eval $compile_ok; then
13554         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13555         $run ./try 2>&1 >/dev/null
13556         case "$?" in
13557         0)      cat >&4 <<EOM
13558 You can access character data pretty unalignedly.
13559 EOM
13560                 d_u32align="$undef"
13561                 ;;
13562         *)      cat >&4 <<EOM
13563 It seems that you must access character data in an aligned manner.
13564 EOM
13565                 d_u32align="$define"
13566                 ;;
13567         esac
13568 else
13569         rp='Can you access character data at unaligned addresses?'
13570         dflt='n'
13571         . ./myread
13572         case "$ans" in
13573         [yY]*)  d_u32align="$undef"  ;;
13574         *)      d_u32align="$define" ;;
13575         esac
13576 fi
13577 $rm -f core core.try.* try.core
13578
13579 : see if ualarm exists
13580 set ualarm d_ualarm
13581 eval $inlibc
13582
13583 : see if umask exists
13584 set umask d_umask
13585 eval $inlibc
13586
13587 : see if unordered exists
13588 set unordered d_unordered
13589 eval $inlibc
13590
13591 : see if usleep exists
13592 set usleep d_usleep
13593 eval $inlibc
13594
13595 : see if prototype for usleep is available
13596 echo " "
13597 set d_usleepproto usleep $i_unistd unistd.h
13598 eval $hasproto
13599
13600 : see if ustat exists
13601 set ustat d_ustat
13602 eval $inlibc
13603
13604 : backward compatibility for d_hvfork
13605 if test X$d_hvfork != X; then
13606         d_vfork="$d_hvfork"
13607         d_hvfork=''
13608 fi
13609 : see if there is a vfork
13610 val=''
13611 set vfork val
13612 eval $inlibc
13613
13614 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13615 : perl on Solaris 2.x, and probably elsewhere.
13616 case "$val" in
13617 $define)
13618         echo " "
13619         case "$usevfork" in
13620         false) dflt='n';;
13621         *) dflt='y';;
13622         esac
13623         cat <<'EOM'
13624  
13625 Perl can only use a vfork() that doesn't suffer from strict
13626 restrictions on calling functions or modifying global data in
13627 the child.  For example, glibc-2.1 contains such a vfork()
13628 that is unsuitable.  If your system provides a proper fork()
13629 call, chances are that you do NOT want perl to use vfork().
13630
13631 EOM
13632         rp="Do you still want to use vfork()?"
13633         . ./myread
13634         case "$ans" in
13635         y|Y) ;;
13636         *)
13637                 echo "Ok, we won't use vfork()."
13638                 val="$undef"
13639                 ;;
13640         esac
13641         ;;
13642 esac
13643 set d_vfork
13644 eval $setvar
13645 case "$d_vfork" in
13646 $define) usevfork='true';;
13647 *) usevfork='false';;
13648 esac
13649
13650 : see if closedir exists
13651 set closedir d_closedir
13652 eval $inlibc
13653
13654 case "$d_closedir" in
13655 "$define")
13656         echo " "
13657         echo "Checking whether closedir() returns a status..." >&4
13658         cat > try.c <<EOM
13659 #$i_dirent I_DIRENT             /**/
13660 #$i_sysdir I_SYS_DIR            /**/
13661 #$i_sysndir I_SYS_NDIR          /**/
13662 #$i_systypes I_SYS_TYPES        /**/
13663
13664 #if defined(I_SYS_TYPES)
13665 #include <sys/types.h>
13666 #endif
13667 #if defined(I_DIRENT)
13668 #include <dirent.h>
13669 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13670 #include <sys/dir.h>
13671 #endif
13672 #else
13673 #ifdef I_SYS_NDIR
13674 #include <sys/ndir.h>
13675 #else
13676 #ifdef I_SYS_DIR
13677 #ifdef hp9000s500
13678 #include <ndir.h>       /* may be wrong in the future */
13679 #else
13680 #include <sys/dir.h>
13681 #endif
13682 #endif
13683 #endif
13684 #endif 
13685 int main() { return closedir(opendir(".")); }
13686 EOM
13687         set try
13688         if eval $compile_ok; then
13689                 if $run ./try > /dev/null 2>&1 ; then
13690                         echo "Yes, it does."
13691                         val="$undef"
13692                 else
13693                         echo "No, it doesn't."
13694                         val="$define"
13695                 fi
13696         else
13697                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13698                 val="$define"
13699         fi
13700         ;;
13701 *)
13702         val="$undef";
13703         ;;
13704 esac
13705 set d_void_closedir
13706 eval $setvar
13707 $rm -f try try.*
13708 : see if there is a wait4
13709 set wait4 d_wait4
13710 eval $inlibc
13711
13712 : see if waitpid exists
13713 set waitpid d_waitpid
13714 eval $inlibc
13715
13716 : see if wcstombs exists
13717 set wcstombs d_wcstombs
13718 eval $inlibc
13719
13720 : see if wctomb exists
13721 set wctomb d_wctomb
13722 eval $inlibc
13723
13724 : see if writev exists
13725 set writev d_writev
13726 eval $inlibc
13727
13728 : preserve RCS keywords in files with variable substitution, grrr
13729 Date='$Date'
13730 Id='$Id'
13731 Log='$Log'
13732 RCSfile='$RCSfile'
13733 Revision='$Revision'
13734
13735 : check for alignment requirements
13736 echo " "
13737 case "$usecrosscompile$multiarch" in
13738 *$define*)
13739         $cat <<EOM
13740 You seem to be either cross-compiling or doing a multiarchitecture build,
13741 skipping the memory alignment check.
13742
13743 EOM
13744         case "$alignbytes" in
13745         '') alignbytes=8 ;;
13746         esac
13747         ;;
13748 *)
13749         case "$alignbytes" in
13750         '') echo "Checking alignment constraints..." >&4
13751                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13752                         $cat >try.c <<'EOCP'
13753 typedef long double NV;
13754 EOCP
13755                 else
13756                         $cat >try.c <<'EOCP'
13757 typedef double NV;
13758 EOCP
13759                 fi
13760                 $cat >>try.c <<'EOCP'
13761 #include <stdio.h>
13762 struct foobar {
13763         char foo;
13764         NV bar;
13765 } try_algn;
13766 int main()
13767 {
13768     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13769     return(0);
13770 }
13771 EOCP
13772                 set try
13773                 if eval $compile_ok; then
13774                         dflt=`$run ./try`
13775                 else
13776                         dflt='8'
13777                         echo "(I can't seem to compile the test program...)"
13778                 fi
13779                 ;;
13780         *) dflt="$alignbytes"
13781                 ;;
13782         esac
13783         rp="Doubles must be aligned on a how-many-byte boundary?"
13784         . ./myread
13785         alignbytes="$ans"
13786         $rm -f try.c try
13787         ;;
13788 esac
13789
13790
13791 : set the base revision
13792 baserev=5.0
13793
13794 : how do we catenate cpp tokens here?
13795 echo " "
13796 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13797 $cat >cpp_stuff.c <<'EOCP'
13798 #define RCAT(a,b)a/**/b
13799 #define ACAT(a,b)a ## b
13800 RCAT(Rei,ser)
13801 ACAT(Cir,cus)
13802 EOCP
13803 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13804 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13805         echo "Oh!  Smells like ANSI's been here." >&4
13806         echo "We can catify or stringify, separately or together!"
13807         cpp_stuff=42
13808 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13809         echo "Ah, yes!  The good old days!" >&4
13810         echo "However, in the good old days we don't know how to stringify and"
13811         echo "catify at the same time."
13812         cpp_stuff=1
13813 else
13814         $cat >&4 <<EOM
13815 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13816 to have to edit the values of CAT[2-5] in config.h...
13817 EOM
13818         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13819 fi
13820 $rm -f cpp_stuff.*
13821
13822 : see if this is a db.h system
13823 set db.h i_db
13824 eval $inhdr
13825
13826 case "$i_db" in
13827 $define)
13828         : Check db version.
13829         echo " "
13830         echo "Checking Berkeley DB version ..." >&4
13831         $cat >try.c <<EOCP
13832 #$d_const HASCONST
13833 #ifndef HASCONST
13834 #define const
13835 #endif
13836 #include <sys/types.h>
13837 #include <stdio.h>
13838 #include <db.h>
13839 int main(int argc, char *argv[])
13840 {
13841 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13842     int Major, Minor, Patch ;
13843     unsigned long Version ;
13844     (void)db_version(&Major, &Minor, &Patch) ;
13845     if (argc == 2) {
13846         printf("%d %d %d %d %d %d\n",
13847                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13848                Major, Minor, Patch);
13849         exit(0);
13850     }
13851     printf("You have Berkeley DB Version 2 or greater.\n");
13852
13853     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13854                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13855     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13856                 Major, Minor, Patch) ;
13857
13858     /* check that db.h & libdb are compatible */
13859     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13860         printf("db.h and libdb are incompatible.\n") ;
13861         exit(3);        
13862     }
13863
13864     printf("db.h and libdb are compatible.\n") ;
13865
13866     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13867                 + DB_VERSION_PATCH ;
13868
13869     /* needs to be >= 2.3.4 */
13870     if (Version < 2003004) {
13871     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13872         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13873         exit(2);        
13874     }
13875
13876     exit(0);
13877 #else
13878 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13879     if (argc == 2) {
13880         printf("1 0 0\n");
13881         exit(0);
13882     }
13883     printf("You have Berkeley DB Version 1.\n");
13884     exit(0);    /* DB version < 2: the coast is clear. */
13885 #else
13886     exit(1);    /* <db.h> not Berkeley DB? */
13887 #endif
13888 #endif
13889 }
13890 EOCP
13891         set try
13892         if eval $compile_ok && $run ./try; then
13893                 echo 'Looks OK.' >&4
13894                 set `$run ./try 1`
13895                 db_version_major=$1
13896                 db_version_minor=$2
13897                 db_version_patch=$3
13898         else
13899                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13900                 i_db=$undef
13901                 case " $libs " in
13902                 *"-ldb "*)
13903                         : Remove db from list of libraries to use
13904                         echo "Removing unusable -ldb from library list" >&4
13905                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13906                         shift
13907                         libs="$*"
13908                         echo "libs = $libs" >&4
13909                         ;;
13910                 esac
13911         fi
13912         $rm -f try.*
13913         ;;
13914 esac
13915
13916 case "$i_db" in
13917 define)
13918         : Check the return type needed for hash 
13919         echo " "
13920         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13921         $cat >try.c <<EOCP
13922 #$d_const HASCONST
13923 #ifndef HASCONST
13924 #define const
13925 #endif
13926 #include <sys/types.h>
13927 #include <db.h>
13928
13929 #ifndef DB_VERSION_MAJOR
13930 u_int32_t hash_cb (ptr, size)
13931 const void *ptr;
13932 size_t size;
13933 {
13934 }
13935 HASHINFO info;
13936 int main()
13937 {
13938         info.hash = hash_cb;
13939 }
13940 #endif
13941 EOCP
13942         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13943                 if $contains warning try.out >>/dev/null 2>&1 ; then
13944                         db_hashtype='int'
13945                 else
13946                         db_hashtype='u_int32_t'
13947                 fi
13948         else
13949                 : XXX Maybe we should just give up here.
13950                 db_hashtype=u_int32_t
13951                 $cat try.out >&4
13952                 echo "Help:  I can't seem to compile the db test program." >&4
13953                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13954         fi
13955         $rm -f try.*
13956         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13957         ;;
13958 *)      db_hashtype=u_int32_t
13959         ;;
13960 esac
13961 case "$i_db" in
13962 define)
13963         : Check the return type needed for prefix 
13964         echo " "
13965         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13966         cat >try.c <<EOCP
13967 #$d_const HASCONST
13968 #ifndef HASCONST
13969 #define const
13970 #endif
13971 #include <sys/types.h>
13972 #include <db.h>
13973
13974 #ifndef DB_VERSION_MAJOR
13975 size_t prefix_cb (key1, key2)
13976 const DBT *key1;
13977 const DBT *key2;
13978 {
13979 }
13980 BTREEINFO info;
13981 int main()
13982 {
13983         info.prefix = prefix_cb;
13984 }
13985 #endif
13986 EOCP
13987         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13988                 if $contains warning try.out >>/dev/null 2>&1 ; then
13989                         db_prefixtype='int'
13990                 else
13991                         db_prefixtype='size_t'
13992                 fi
13993         else
13994                 db_prefixtype='size_t'
13995                 : XXX Maybe we should just give up here.
13996                 $cat try.out >&4
13997                 echo "Help:  I can't seem to compile the db test program." >&4
13998                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13999         fi
14000         $rm -f try.*
14001         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
14002         ;;
14003 *)      db_prefixtype='size_t'
14004         ;;
14005 esac
14006
14007
14008 : How can we generate normalized random numbers ?
14009 echo " "
14010 echo "Looking for a random number function..." >&4
14011 case "$randfunc" in
14012 '')
14013         if set drand48 val -f; eval $csym; $val; then
14014                 dflt="drand48"
14015                 echo "Good, found drand48()." >&4
14016         elif set random val -f; eval $csym; $val; then
14017                 dflt="random"
14018                 echo "OK, found random()." >&4
14019         else
14020                 dflt="rand"
14021                 echo "Yick, looks like I have to use rand()." >&4
14022         fi
14023         echo " "
14024         ;;
14025 *)
14026         dflt="$randfunc"
14027         ;;
14028 esac
14029 cont=true
14030
14031 case "$ccflags" in
14032 *-Dmy_rand=*|*-Dmy_srand=*)
14033         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14034         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14035         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14036         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14037         ;;
14038 esac
14039
14040 while $test "$cont"; do
14041         rp="Use which function to generate random numbers?"
14042         . ./myread
14043         if $test "$ans" = "$dflt"; then
14044                 : null
14045         else
14046                 randbits=''
14047         fi
14048         randfunc="$ans"
14049         if set $ans val -f; eval $csym; $val; then
14050                 cont=''
14051         else
14052                 dflt=y
14053                 rp="I cannot find function $ans. Use that name anyway?"
14054                 . ./myread
14055                 dflt=rand
14056                 case "$ans" in
14057                         [yY]*) cont='';;
14058                 esac
14059         fi
14060         case "$cont" in
14061         '')
14062                 case "$randfunc" in
14063                 drand48)
14064                         drand01="drand48()"
14065                         seedfunc="srand48"
14066                         randbits=48
14067                         randseedtype=long
14068                         ;;
14069                 rand|random)
14070                         case "$randbits" in
14071                         '')
14072 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14073                                 $cat >try.c <<EOCP
14074 #$i_unistd I_UNISTD
14075 #$i_stdlib I_STDLIB
14076 #include <stdio.h>
14077 #ifdef I_UNISTD
14078 #  include <unistd.h>
14079 #endif
14080 #ifdef I_STDLIB
14081 #  include <stdlib.h>
14082 #endif
14083 int main()
14084 {
14085         register int i;
14086         register unsigned long tmp;
14087         register unsigned long max = 0L;
14088
14089         for (i = 1000; i; i--) {
14090                 tmp = (unsigned long) $randfunc();
14091                 if (tmp > max) max = tmp;
14092         }
14093         for (i = 0; max; i++)
14094                 max /= 2;
14095         printf("%d\n",i);
14096 }
14097 EOCP
14098                                 set try
14099                                 if eval $compile_ok; then
14100                                         dflt=`try`
14101                                 else
14102                                         dflt='?'
14103                                         echo "(I can't seem to compile the test program...)"
14104                                 fi
14105                                 ;;
14106                         *)
14107                                 dflt="$randbits"
14108                                 ;;
14109                         esac
14110                         rp="How many bits does your $randfunc() function produce?"
14111                         . ./myread
14112                         randbits="$ans"
14113                         $rm -f try.c try
14114                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14115                         seedfunc="s$randfunc"
14116                         randseedtype=unsigned
14117                         ;;
14118                 *)
14119                         dflt="31"
14120                         rp="How many bits does your $randfunc() function produce?"
14121                         . ./myread
14122                         randbits="$ans"
14123                         seedfunc="s$randfunc"
14124                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14125                         if set $seedfunc val -f; eval $csym; $val; then
14126                                 echo "(Using $seedfunc() to seed random generator)"
14127                         else
14128                                 echo "(Warning: no $seedfunc() to seed random generator)"
14129                                 seedfunc=rand
14130                         fi
14131                         randseedtype=unsigned
14132                         ;;
14133                 esac
14134                 ;;
14135         esac
14136 done
14137
14138 echo " "
14139 echo "Determining whether or not we are on an EBCDIC system..." >&4
14140 $cat >try.c <<'EOM'
14141 int main()
14142 {
14143   if ('M'==0xd4) return 0;
14144   return 1;
14145 }
14146 EOM
14147
14148 val=$undef
14149 set try
14150 if eval $compile_ok; then
14151         if $run ./try; then
14152                 echo "You seem to speak EBCDIC." >&4
14153                 val="$define"
14154         else
14155                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14156         fi
14157 else
14158         echo "I'm unable to compile the test program." >&4
14159         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14160 fi
14161 $rm -f try try.*
14162 set ebcdic
14163 eval $setvar
14164
14165 echo " "
14166 $cat >&4 <<EOM
14167 Checking how to flush all pending stdio output...
14168 EOM
14169 # I only know how to find the first 32 possibly open files on SunOS.
14170 # See also hints/sunos_4_1.sh and util.c  --AD
14171 case "$osname" in
14172 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14173 esac
14174 $cat >>try.c <<EOCP
14175 #include <stdio.h>
14176 #$i_unistd I_UNISTD
14177 #ifdef I_UNISTD
14178 # include <unistd.h>
14179 #endif
14180 #$d_sysconf HAS_SYSCONF
14181 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14182 #ifdef HAS_STDIO_STREAM_ARRAY
14183 # define STDIO_STREAM_ARRAY $stdio_stream_array
14184 #endif
14185 int main() {
14186   FILE* p;
14187   unlink("try.out");
14188   p = fopen("try.out", "w");
14189 #ifdef TRY_FPUTC
14190   fputc('x', p);
14191 #else
14192 # ifdef TRY_FPRINTF
14193   fprintf(p, "x");
14194 # endif
14195 #endif
14196 #ifdef TRY_FFLUSH_NULL
14197   fflush(NULL);
14198 #endif
14199 #ifdef TRY_FFLUSH_ALL
14200   {
14201     long open_max = -1;
14202 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14203     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14204 # else
14205 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14206     open_max = sysconf(_SC_OPEN_MAX);
14207 #  else
14208 #   ifdef FOPEN_MAX
14209     open_max = FOPEN_MAX;
14210 #   else
14211 #    ifdef OPEN_MAX
14212     open_max = OPEN_MAX;
14213 #    else
14214 #     ifdef _NFILE
14215     open_max = _NFILE;
14216 #     endif
14217 #    endif
14218 #   endif
14219 #  endif
14220 # endif 
14221 # ifdef HAS_STDIO_STREAM_ARRAY
14222     if (open_max > 0) {
14223       long i;
14224       for (i = 0; i < open_max; i++)
14225             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14226                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14227                 STDIO_STREAM_ARRAY[i]._flag)
14228                 fflush(&STDIO_STREAM_ARRAY[i]);
14229     }   
14230   }
14231 # endif
14232 #endif
14233   _exit(42);
14234 }
14235 EOCP
14236 : first we have to find out how _not_ to flush
14237 $to try.c
14238 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14239     output=''
14240     set try -DTRY_FPUTC
14241     if eval $compile; then
14242             $run ./try 2>/dev/null
14243             code="$?"
14244             $from try.out
14245             if $test ! -s try.out -a "X$code" = X42; then
14246                 output=-DTRY_FPUTC
14247             fi
14248     fi
14249     case "$output" in
14250     '')
14251             set try -DTRY_FPRINTF
14252             if eval $compile; then
14253                     $run ./try 2>/dev/null
14254                     code="$?"
14255                     $from try.out
14256                     if $test ! -s try.out -a "X$code" = X42; then
14257                         output=-DTRY_FPRINTF
14258                     fi
14259             fi
14260         ;;
14261     esac
14262 fi
14263 : check for fflush NULL behaviour
14264 case "$fflushNULL" in
14265 '')     set try -DTRY_FFLUSH_NULL $output
14266         if eval $compile; then
14267                 $run ./try 2>/dev/null
14268                 code="$?"
14269                 $from try.out
14270                 if $test -s try.out -a "X$code" = X42; then
14271                         fflushNULL="`$cat try.out`"
14272                 else
14273                         if $test "X$code" != X42; then
14274                                 $cat >&4 <<EOM
14275 (If this test failed, don't worry, we'll try another method shortly.)
14276 EOM
14277                         fi
14278                 fi
14279         fi
14280         $rm -f core try.core core.try.*
14281         case "$fflushNULL" in
14282         x)      $cat >&4 <<EOM
14283 Your fflush(NULL) works okay for output streams.
14284 Let's see if it clobbers input pipes...
14285 EOM
14286 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14287 # bug that improperly flushes the input end of pipes.  So we avoid the
14288 # autoflush on fork/system/exec support for now. :-(
14289 $cat >tryp.c <<EOCP
14290 #include <stdio.h>
14291 int
14292 main(int argc, char **argv)
14293 {
14294     char buf[1024];
14295     int i;
14296     char *bp = buf;
14297     while (1) {
14298         while ((i = getc(stdin)) != -1
14299                && (*bp++ = i) != '\n'
14300                && bp < &buf[1024])
14301         /* DO NOTHING */ ;
14302         *bp = '\0';
14303         fprintf(stdout, "%s", buf);
14304         fflush(NULL);
14305         if (i == -1)
14306             return 0;
14307         bp = buf;
14308     }
14309 }
14310 EOCP
14311                 fflushNULL="$define"
14312                 set tryp
14313                 if eval $compile; then
14314                     $rm -f tryp.out
14315                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14316                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14317                        $cat >&4 <<EOM
14318 fflush(NULL) seems to behave okay with input streams.
14319 EOM
14320                         fflushNULL="$define"
14321                     else
14322                         $cat >&4 <<EOM
14323 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14324 EOM
14325                         fflushNULL="$undef"
14326                     fi
14327                 fi
14328                 $rm -f core tryp.c tryp.core core.tryp.*
14329                 ;;
14330         '')     $cat >&4 <<EOM
14331 Your fflush(NULL) isn't working (contrary to ANSI C).
14332 EOM
14333                 fflushNULL="$undef"
14334                 ;;
14335         *)      $cat >&4 <<EOM
14336 Cannot figure out whether your fflush(NULL) works or not.
14337 I'm assuming it doesn't (contrary to ANSI C).
14338 EOM
14339                 fflushNULL="$undef"
14340                 ;;
14341         esac
14342         ;;
14343 $define|true|[yY]*)
14344         fflushNULL="$define"
14345         ;;
14346 *)
14347         fflushNULL="$undef"
14348         ;;
14349 esac
14350 : check explicit looping only if NULL did not work, and if the pipe
14351 : bug does not show up on an explicit flush too
14352 case "$fflushNULL" in
14353 "$undef")
14354         $cat >tryp.c <<EOCP
14355 #include <stdio.h>
14356 int
14357 main(int argc, char **argv)
14358 {
14359     char buf[1024];
14360     int i;
14361     char *bp = buf;
14362     while (1) {
14363         while ((i = getc(stdin)) != -1
14364                && (*bp++ = i) != '\n'
14365                && bp < &buf[1024])
14366         /* DO NOTHING */ ;
14367         *bp = '\0';
14368         fprintf(stdout, "%s", buf);
14369         fflush(stdin);
14370         if (i == -1)
14371             return 0;
14372         bp = buf;
14373     }
14374 }
14375 EOCP
14376         set tryp
14377         if eval $compile; then
14378             $rm -f tryp.out
14379             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14380             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14381                $cat >&4 <<EOM
14382 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14383 EOM
14384                 : now check for fflushall behaviour
14385                 case "$fflushall" in
14386                 '')     set try -DTRY_FFLUSH_ALL $output
14387                         if eval $compile; then
14388                                 $cat >&4 <<EOM
14389 (Now testing the other method--but note that this also may fail.)
14390 EOM
14391                                 $run ./try 2>/dev/null
14392                                 code=$?
14393                                 $from try.out
14394                                 if $test -s try.out -a "X$code" = X42; then
14395                                         fflushall="`$cat try.out`"
14396                                 fi
14397                         fi
14398                         $rm -f core try.core core.try.*
14399                         case "$fflushall" in
14400                         x)      $cat >&4 <<EOM
14401 Whew. Flushing explicitly all the stdio streams works.
14402 EOM
14403                                 fflushall="$define"
14404                                 ;;
14405                         '')     $cat >&4 <<EOM
14406 Sigh. Flushing explicitly all the stdio streams doesn't work.
14407 EOM
14408                                 fflushall="$undef"
14409                                 ;;
14410                         *)      $cat >&4 <<EOM
14411 Cannot figure out whether flushing stdio streams explicitly works or not.
14412 I'm assuming it doesn't.
14413 EOM
14414                                 fflushall="$undef"
14415                                 ;;
14416                         esac
14417                         ;;
14418                 "$define"|true|[yY]*)
14419                         fflushall="$define"
14420                         ;;
14421                 *)
14422                         fflushall="$undef"
14423                         ;;
14424                 esac
14425             else
14426                 $cat >&4 <<EOM
14427 All is futile.  Even fflush(stdin) clobbers input pipes!
14428 EOM
14429                 fflushall="$undef"
14430             fi
14431         else
14432             fflushall="$undef"
14433         fi
14434         $rm -f core tryp.c tryp.core core.tryp.*
14435         ;;
14436 *)      fflushall="$undef"
14437         ;;
14438 esac
14439
14440 case "$fflushNULL$fflushall" in
14441 undefundef)
14442         $cat <<EOM
14443 OK, I give up.  I cannot figure out how to flush pending stdio output.
14444 We won't be flushing handles at all before fork/exec/popen.
14445 EOM
14446         ;;
14447 esac
14448 $rm -f try.* try$exe_ext
14449
14450 : Store the full pathname to the ar program for use in the C program
14451 : Respect a hint or command line value for full_ar.
14452 case "$full_ar" in
14453 '') full_ar=$ar ;;
14454 esac
14455
14456 : Store the full pathname to the sed program for use in the C program
14457 full_sed=$sed
14458
14459 : see what type gids are declared as in the kernel
14460 echo " "
14461 echo "Looking for the type for group ids returned by getgid()."
14462 set gid_t gidtype xxx stdio.h sys/types.h
14463 eval $typedef
14464 case "$gidtype" in
14465 xxx)
14466         xxx=`./findhdr sys/user.h`
14467         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14468         case $1 in
14469         unsigned) dflt="$1 $2" ;;
14470         *) dflt="$1" ;;
14471         esac
14472         ;;
14473 *) dflt="$gidtype";;
14474 esac
14475 case "$gidtype" in
14476 gid_t) echo "gid_t found." ;;
14477 *)      rp="What is the type for group ids returned by getgid()?"
14478         . ./myread
14479         gidtype="$ans"
14480         ;;
14481 esac
14482
14483 echo " "
14484 case "$gidtype" in
14485 *_t) zzz="$gidtype"     ;;
14486 *)   zzz="gid"          ;;
14487 esac
14488 echo "Checking the size of $zzz..." >&4 
14489 cat > try.c <<EOCP
14490 #include <sys/types.h>
14491 #include <stdio.h>
14492 int main() {
14493     printf("%d\n", (int)sizeof($gidtype));
14494     exit(0);
14495 }
14496 EOCP
14497 set try
14498 if eval $compile_ok; then
14499         yyy=`$run ./try`
14500         case "$yyy" in
14501         '')     gidsize=4
14502                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14503                 ;;
14504         *)      gidsize=$yyy
14505                 echo "Your $zzz is $gidsize bytes long."
14506                 ;;
14507         esac
14508 else
14509         gidsize=4
14510         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14511 fi
14512
14513
14514 echo " "
14515 case "$gidtype" in
14516 *_t) zzz="$gidtype"     ;;
14517 *)   zzz="gid"          ;;
14518 esac
14519 echo "Checking the sign of $zzz..." >&4 
14520 cat > try.c <<EOCP
14521 #include <sys/types.h>
14522 #include <stdio.h>
14523 int main() {
14524         $gidtype foo = -1;
14525         if (foo < 0)
14526                 printf("-1\n");
14527         else
14528                 printf("1\n");
14529 }
14530 EOCP
14531 set try
14532 if eval $compile; then
14533         yyy=`$run ./try`
14534         case "$yyy" in
14535         '')     gidsign=1
14536                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14537                 ;;
14538         *)      gidsign=$yyy
14539                 case "$gidsign" in
14540                  1) echo "Your $zzz is unsigned." ;;
14541                 -1) echo "Your $zzz is signed."   ;;
14542                 esac
14543                 ;;
14544         esac
14545 else
14546         gidsign=1
14547         echo "(I can't compile the test program--guessing unsigned.)" >&4
14548 fi
14549
14550
14551 echo " "
14552
14553 if $test X"$quadtype" != X; then
14554
14555 echo "Checking how to print 64-bit integers..." >&4
14556
14557 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14558         $cat >try.c <<'EOCP'
14559 #include <sys/types.h>
14560 #include <stdio.h>
14561 int main() {
14562   int q = 12345678901;
14563   printf("%ld\n", q);
14564 }
14565 EOCP
14566         set try
14567         if eval $compile; then
14568                 yyy=`$run ./try`
14569                 case "$yyy" in
14570                 12345678901)
14571                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14572                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14573                         echo "We will use %d."
14574                         ;;
14575                 esac
14576         fi
14577 fi
14578
14579 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14580         $cat >try.c <<'EOCP'
14581 #include <sys/types.h>
14582 #include <stdio.h>
14583 int main() {
14584   long q = 12345678901;
14585   printf("%ld\n", q);
14586 }
14587 EOCP
14588         set try
14589         if eval $compile; then
14590                 yyy=`$run ./try`
14591                 case "$yyy" in
14592                 12345678901)
14593                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14594                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14595                         echo "We will use %ld."
14596                         ;;
14597                 esac
14598         fi
14599 fi
14600
14601 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14602         $cat >try.c <<'EOCP'
14603 #include <sys/types.h>
14604 #include <inttypes.h>
14605 #include <stdio.h>
14606 int main() {
14607   int64_t q = 12345678901;
14608   printf("%" PRId64 "\n", q);
14609 }
14610 EOCP
14611         set try
14612         if eval $compile; then
14613                 yyy=`$run ./try`
14614                 case "$yyy" in
14615                 12345678901)
14616                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14617                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14618                         echo "We will use the C9X style."
14619                         ;;
14620                 esac
14621         fi
14622 fi
14623
14624 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14625         $cat >try.c <<EOCP
14626 #include <sys/types.h>
14627 #include <stdio.h>
14628 int main() {
14629   $quadtype q = 12345678901;
14630   printf("%Ld\n", q);
14631 }
14632 EOCP
14633         set try
14634         if eval $compile; then
14635                 yyy=`$run ./try`
14636                 case "$yyy" in
14637                 12345678901)
14638                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14639                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14640                         echo "We will use %Ld."
14641                         ;;
14642                 esac
14643         fi
14644 fi
14645
14646 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14647         $cat >try.c <<'EOCP'
14648 #include <sys/types.h>
14649 #include <stdio.h>
14650 int main() {
14651   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14652   printf("%lld\n", q);
14653 }
14654 EOCP
14655         set try
14656         if eval $compile; then
14657                 yyy=`$run ./try`
14658                 case "$yyy" in
14659                 12345678901)
14660                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14661                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14662                         echo "We will use the %lld style."
14663                         ;;
14664                 esac
14665         fi
14666 fi
14667
14668 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14669         $cat >try.c <<EOCP
14670 #include <sys/types.h>
14671 #include <stdio.h>
14672 int main() {
14673   $quadtype q = 12345678901;
14674   printf("%qd\n", q);
14675 }
14676 EOCP
14677         set try
14678         if eval $compile; then
14679                 yyy=`$run ./try`
14680                 case "$yyy" in
14681                 12345678901)
14682                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14683                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14684                         echo "We will use %qd."
14685                         ;;
14686                 esac
14687         fi
14688 fi
14689
14690 if $test X"$sPRId64" = X; then
14691         echo "Cannot figure out how to print 64-bit integers." >&4
14692 fi
14693
14694 $rm -f try try.*
14695
14696 fi
14697
14698 case "$sPRId64" in
14699 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14700         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14701         ;;
14702 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14703         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14704         ;;
14705 esac
14706
14707
14708 echo " "
14709 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14710
14711 if $test X"$ivsize" = X8; then
14712         ivdformat="$sPRId64"
14713         uvuformat="$sPRIu64"
14714         uvoformat="$sPRIo64"
14715         uvxformat="$sPRIx64"
14716         uvXUformat="$sPRIXU64"
14717 else
14718         if $test X"$ivsize" = X"$longsize"; then
14719                 ivdformat='"ld"'
14720                 uvuformat='"lu"'
14721                 uvoformat='"lo"'
14722                 uvxformat='"lx"'
14723                 uvXUformat='"lX"'
14724         else
14725                 if $test X"$ivsize" = X"$intsize"; then
14726                         ivdformat='"d"'
14727                         uvuformat='"u"'
14728                         uvoformat='"o"'
14729                         uvxformat='"x"'
14730                         uvXUformat='"X"'
14731                 else
14732                         : far out
14733                         if $test X"$ivsize" = X"$shortsize"; then
14734                                 ivdformat='"hd"'
14735                                 uvuformat='"hu"'
14736                                 uvoformat='"ho"'
14737                                 uvxformat='"hx"'
14738                                 uvXUformat='"hX"'
14739                         fi
14740                 fi
14741         fi
14742 fi
14743
14744 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14745         nveformat="$sPRIeldbl"
14746         nvfformat="$sPRIfldbl"
14747         nvgformat="$sPRIgldbl"
14748         nvEUformat="$sPRIEUldbl"
14749         nvFUformat="$sPRIFUldbl"
14750         nvGUformat="$sPRIGUldbl"
14751 else
14752         nveformat='"e"'
14753         nvfformat='"f"'
14754         nvgformat='"g"'
14755         nvEUformat='"E"'
14756         nvFUformat='"F"'
14757         nvGUformat='"G"'
14758 fi
14759
14760 case "$ivdformat" in
14761 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14762     exit 1
14763     ;;
14764 esac
14765
14766
14767 echo " "
14768 $echo "Checking the format string to be used for gids..." >&4
14769
14770 case "$gidsign" in
14771 -1)     if $test X"$gidsize" = X"$ivsize"; then
14772                 gidformat="$ivdformat"
14773         else
14774                 if $test X"$gidsize" = X"$longsize"; then
14775                         gidformat='"ld"'
14776                 else
14777                         if $test X"$gidsize" = X"$intsize"; then
14778                                 gidformat='"d"'
14779                         else
14780                                 if $test X"$gidsize" = X"$shortsize"; then
14781                                         gidformat='"hd"'
14782                                 fi
14783                         fi
14784                 fi
14785         fi
14786         ;;
14787 *)      if $test X"$gidsize" = X"$uvsize"; then
14788                 gidformat="$uvuformat"
14789         else
14790                 if $test X"$gidsize" = X"$longsize"; then
14791                         gidformat='"lu"'
14792                 else
14793                         if $test X"$gidsize" = X"$intsize"; then
14794                                 gidformat='"u"'
14795                         else
14796                                 if $test X"$gidsize" = X"$shortsize"; then
14797                                         gidformat='"hu"'
14798                                 fi
14799                         fi
14800                 fi
14801         fi
14802         ;;
14803 esac
14804
14805 : see if getgroups exists
14806 set getgroups d_getgrps
14807 eval $inlibc
14808
14809 : see if setgroups exists
14810 set setgroups d_setgrps
14811 eval $inlibc
14812
14813
14814 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14815 echo " "
14816 case "$d_getgrps$d_setgrps" in
14817 *define*)
14818         case "$groupstype" in
14819         '') dflt="$gidtype" ;;
14820         *)  dflt="$groupstype" ;;
14821         esac
14822         $cat <<EOM
14823 What type of pointer is the second argument to getgroups() and setgroups()?
14824 Usually this is the same as group ids, $gidtype, but not always.
14825
14826 EOM
14827         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14828         . ./myread
14829         groupstype="$ans"
14830         ;;
14831 *)  groupstype="$gidtype";;
14832 esac
14833
14834 echo " "
14835 echo "Checking if your $make program sets \$(MAKE)..." >&4
14836 case "$make_set_make" in
14837 '')
14838         $sed 's/^X //' > testmake.mak << 'EOF'
14839 Xall:
14840 X       @echo 'maketemp="$(MAKE)"'
14841 EOF
14842         case "`$make -f testmake.mak 2>/dev/null`" in
14843         *maketemp=*) make_set_make='#' ;;
14844         *)      make_set_make="MAKE=$make" ;;
14845         esac
14846         $rm -f testmake.mak
14847         ;;
14848 esac
14849 case "$make_set_make" in
14850 '#') echo "Yup, it does.";;
14851 *) echo "Nope, it doesn't.";;
14852 esac
14853
14854 : see what type is used for mode_t
14855 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14856 set mode_t modetype int stdio.h sys/types.h
14857 eval $typedef_ask
14858
14859 : see if stdarg is available
14860 echo " "
14861 if $test `./findhdr stdarg.h`; then
14862         echo "<stdarg.h> found." >&4
14863         valstd="$define"
14864 else
14865         echo "<stdarg.h> NOT found." >&4
14866         valstd="$undef"
14867 fi
14868
14869 : see if varags is available
14870 echo " "
14871 if $test `./findhdr varargs.h`; then
14872         echo "<varargs.h> found." >&4
14873 else
14874         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14875 fi
14876
14877 : set up the varargs testing programs
14878 $cat > varargs.c <<EOP
14879 #ifdef I_STDARG
14880 #include <stdarg.h>
14881 #endif
14882 #ifdef I_VARARGS
14883 #include <varargs.h>
14884 #endif
14885
14886 #ifdef I_STDARG
14887 int f(char *p, ...)
14888 #else
14889 int f(va_alist)
14890 va_dcl
14891 #endif
14892 {
14893         va_list ap;
14894 #ifndef I_STDARG
14895         char *p;
14896 #endif
14897 #ifdef I_STDARG
14898         va_start(ap,p);
14899 #else
14900         va_start(ap);
14901         p = va_arg(ap, char *);
14902 #endif
14903         va_end(ap);
14904 }
14905 EOP
14906 $cat > varargs <<EOP
14907 $startsh
14908 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14909         echo "true"
14910 else
14911         echo "false"
14912 fi
14913 $rm -f varargs$_o
14914 EOP
14915 chmod +x varargs
14916
14917 : now check which varargs header should be included
14918 echo " "
14919 i_varhdr=''
14920 case "$valstd" in
14921 "$define")
14922         if `./varargs I_STDARG`; then
14923                 val='stdarg.h'
14924         elif `./varargs I_VARARGS`; then
14925                 val='varargs.h'
14926         fi
14927         ;;
14928 *)
14929         if `./varargs I_VARARGS`; then
14930                 val='varargs.h'
14931         fi
14932         ;;
14933 esac
14934 case "$val" in
14935 '')
14936 echo "I could not find the definition for va_dcl... You have problems..." >&4
14937         val="$undef"; set i_stdarg; eval $setvar
14938         val="$undef"; set i_varargs; eval $setvar
14939         ;;
14940 *) 
14941         set i_varhdr
14942         eval $setvar
14943         case "$i_varhdr" in
14944         stdarg.h)
14945                 val="$define"; set i_stdarg; eval $setvar
14946                 val="$undef"; set i_varargs; eval $setvar
14947                 ;;
14948         varargs.h)
14949                 val="$undef"; set i_stdarg; eval $setvar
14950                 val="$define"; set i_varargs; eval $setvar
14951                 ;;
14952         esac
14953         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14954 esac
14955 $rm -f varargs*
14956
14957 : see if we need va_copy
14958 echo " "
14959 case "$i_stdarg" in
14960 "$define")
14961         $cat >try.c <<EOCP
14962 #include <stdarg.h>
14963 #include <stdio.h>
14964 #$i_stdlib I_STDLIB
14965 #ifdef I_STDLIB
14966 #include <stdlib.h>
14967 #endif
14968 #include <signal.h>
14969
14970 int
14971 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14972 {
14973   return vfprintf(f, fmt, *valp);
14974 }
14975  
14976 int    
14977 myvfprintf(FILE *f, const  char *fmt, va_list val)
14978 {
14979   return ivfprintf(f, fmt, &val);
14980 }
14981       
14982 int
14983 myprintf(char *fmt, ...) 
14984 {
14985   va_list val;
14986   va_start(val, fmt);
14987   return myvfprintf(stdout, fmt, val); 
14988 }         
14989
14990 int
14991 main(int ac, char **av)
14992 {
14993   signal(SIGSEGV, exit);
14994
14995   myprintf("%s%cs all right, then\n", "that", '\'');                            
14996   exit(0);      
14997 }
14998 EOCP
14999         set try
15000         if eval $compile && $run ./try 2>&1 >/dev/null; then
15001                 case "`$run ./try`" in
15002                 "that's all right, then")
15003                         okay=yes
15004                         ;;
15005                 esac
15006         fi
15007         case "$okay" in
15008         yes)    echo "It seems that you don't need va_copy()." >&4
15009                 need_va_copy="$undef"
15010                 ;;
15011         *)      echo "It seems that va_copy() or similar will be needed." >&4
15012                 need_va_copy="$define"
15013                 ;;
15014         esac
15015         $rm -f try.* core core.* *.core *.core.*
15016         ;;
15017 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15018         ;;
15019 esac
15020
15021 : define a fucntion to check prototypes
15022 $cat > protochk <<EOSH
15023 $startsh
15024 cc="$cc"
15025 optimize="$optimize"
15026 ccflags="$ccflags"
15027 prototype="$prototype"
15028 define="$define"
15029 rm=$rm
15030 EOSH
15031
15032 $cat >> protochk <<'EOSH'
15033
15034 $rm -f try.c
15035 foo="$1"
15036 shift
15037 while test $# -ge 2; do
15038         case "$1" in
15039                 $define) echo "#include <$2>" >> try.c ;;
15040                 literal) echo "$2" >> try.c ;;
15041         esac
15042     shift 2
15043 done
15044 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15045 cat >> try.c <<'EOCP'
15046 #ifdef CAN_PROTOTYPE
15047 #define _(args) args
15048 #else
15049 #define _(args) ()
15050 #endif
15051 EOCP
15052 echo "$foo" >> try.c
15053 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15054 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15055 status=$?
15056 $rm -f try.[co]
15057 exit $status
15058 EOSH
15059 chmod +x protochk
15060 $eunicefix protochk
15061
15062 : see what type is used for size_t
15063 rp="What is the type used for the length parameter for string functions?"
15064 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15065 eval $typedef_ask
15066
15067 : check for type of arguments to gethostbyaddr. 
15068 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15069         case "$d_gethbyaddr" in
15070         $define)
15071                 $cat <<EOM
15072
15073 Checking to see what type of arguments are accepted by gethostbyaddr().
15074 EOM
15075                 hdrs="$define sys/types.h
15076                         $d_socket sys/socket.h 
15077                         $i_niin netinet/in.h 
15078                         $i_netdb netdb.h
15079                         $i_unistd unistd.h"
15080                 : The first arg can 'char *' or 'void *'
15081                 : The second arg is some of integral type
15082                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15083                         for yyy in size_t long int; do
15084                                 case "$netdb_host_type" in
15085                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15086                                         if ./protochk "$try" $hdrs; then
15087                                                 echo "Your system accepts $xxx for the first arg."
15088                                                 echo "...and $yyy for the second arg."
15089                                                 netdb_host_type="$xxx"
15090                                                 netdb_hlen_type="$yyy"
15091                                         fi
15092                                         ;;
15093                                 esac
15094                         done
15095                 done
15096                 : In case none of those worked, prompt the user.
15097                 case "$netdb_host_type" in
15098                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15099                         dflt='char *'
15100                         . ./myread
15101                         netdb_host_type=$ans
15102                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15103                         dflt="$sizetype"
15104                         . ./myread
15105                         netdb_hlen_type=$ans
15106                         ;;
15107                 esac
15108                 ;;
15109         *)      : no gethostbyaddr, so pick harmless defaults
15110                 netdb_host_type='char *'
15111                 netdb_hlen_type="$sizetype"
15112                 ;;
15113         esac
15114         # Remove the "const" if needed. -- but then we'll have a 
15115         # prototype clash!
15116         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15117 fi
15118
15119 : check for type of argument to gethostbyname. 
15120 if test "X$netdb_name_type" = X ; then
15121         case "$d_gethbyname" in
15122         $define)
15123                 $cat <<EOM
15124
15125 Checking to see what type of argument is accepted by gethostbyname().
15126 EOM
15127                 hdrs="$define sys/types.h
15128                         $d_socket sys/socket.h 
15129                         $i_niin netinet/in.h 
15130                         $i_netdb netdb.h
15131                         $i_unistd unistd.h"
15132                 for xxx in "const char *" "char *"; do
15133                         case "$netdb_name_type" in
15134                         '')     try="extern struct hostent *gethostbyname($xxx);"
15135                                 if ./protochk "$try" $hdrs; then
15136                                         echo "Your system accepts $xxx."
15137                                         netdb_name_type="$xxx"
15138                                 fi
15139                                 ;;
15140                         esac
15141                 done
15142                 : In case none of those worked, prompt the user.
15143                 case "$netdb_name_type" in
15144                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15145                         dflt='char *'
15146                         . ./myread
15147                         netdb_name_type=$ans
15148                         ;;
15149                 esac
15150                 ;;
15151         *)      : no gethostbyname, so pick harmless default
15152                 netdb_name_type='char *'
15153                 ;;
15154         esac
15155 fi
15156
15157 : check for type of 1st argument to getnetbyaddr. 
15158 if test "X$netdb_net_type" = X ; then
15159         case "$d_getnbyaddr" in
15160         $define)
15161                 $cat <<EOM
15162
15163 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15164 EOM
15165                 hdrs="$define sys/types.h
15166                         $d_socket sys/socket.h 
15167                         $i_niin netinet/in.h 
15168                         $i_netdb netdb.h
15169                         $i_unistd unistd.h"
15170                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15171                         case "$netdb_net_type" in
15172                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15173                                 if ./protochk "$try" $hdrs; then
15174                                         echo "Your system accepts $xxx."
15175                                         netdb_net_type="$xxx"
15176                                 fi
15177                                 ;;
15178                         esac
15179                 done
15180                 : In case none of those worked, prompt the user.
15181                 case "$netdb_net_type" in
15182                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15183                         dflt='long'
15184                         . ./myread
15185                         netdb_net_type=$ans
15186                         ;;
15187                 esac
15188                 ;;
15189         *)      : no getnetbyaddr, so pick harmless default
15190                 netdb_net_type='long'
15191                 ;;
15192         esac
15193 fi
15194 : locate the preferred pager for this system
15195 case "$pager" in
15196 '')
15197         dflt=''
15198         case "$pg" in
15199         /*) dflt=$pg;;
15200         [a-zA-Z]:/*) dflt=$pg;;
15201         esac
15202         case "$more" in
15203         /*) dflt=$more;;
15204         [a-zA-Z]:/*) dflt=$more;;
15205         esac
15206         case "$less" in
15207         /*) dflt=$less;;
15208         [a-zA-Z]:/*) dflt=$less;;
15209         esac
15210         case "$dflt" in
15211         '') dflt=/usr/ucb/more;;
15212         esac
15213         ;;
15214 *) dflt="$pager";;
15215 esac
15216 echo " "
15217 fn=f/
15218 rp='What pager is used on your system?'
15219 . ./getfile
15220 pager="$ans"
15221
15222 : see what type pids are declared as in the kernel
15223 rp="What is the type of process ids on this system?"
15224 set pid_t pidtype int stdio.h sys/types.h
15225 eval $typedef_ask
15226
15227 : Find earliest binary compatible site_perl subdirectory perl can use.
15228 case "$bincompat5005" in
15229 "$define") xs_apiversion='5.005' ;;
15230 *) xs_apiversion=$version ;;   # The current site_perl version.
15231 esac
15232 : Find earliest pure perl site_perl subdirectory perl can use.
15233 : The versioned directories started at 5.005.
15234 pm_apiversion='5.005'
15235
15236 : see if ar generates random libraries by itself
15237 echo " "
15238 echo "Checking how to generate random libraries on your machine..." >&4
15239 echo 'int bar1() { return bar2(); }' > bar1.c
15240 echo 'int bar2() { return 2; }' > bar2.c
15241 $cat > foo.c <<'EOP'
15242 int main() { printf("%d\n", bar1()); exit(0); }
15243 EOP
15244 $cc $ccflags -c bar1.c >/dev/null 2>&1
15245 $cc $ccflags -c bar2.c >/dev/null 2>&1
15246 $cc $ccflags -c foo.c >/dev/null 2>&1
15247 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15248 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15249         $run ./foobar >/dev/null 2>&1; then
15250         echo "$ar appears to generate random libraries itself."
15251         orderlib=false
15252         ranlib=":"
15253 elif $ar ts bar$_a >/dev/null 2>&1 &&
15254         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15255         $run ./foobar >/dev/null 2>&1; then
15256                 echo "a table of contents needs to be added with '$ar ts'."
15257                 orderlib=false
15258                 ranlib="$ar ts"
15259 else
15260         case "$ranlib" in
15261         :) ranlib='';;
15262         '')
15263                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15264                 $test -f $ranlib || ranlib=''
15265                 ;;
15266         esac
15267         if $test -n "$ranlib"; then
15268                 echo "your system has '$ranlib'; we'll use that."
15269                 orderlib=false
15270         else
15271                 echo "your system doesn't seem to support random libraries"
15272                 echo "so we'll use lorder and tsort to order the libraries."
15273                 orderlib=true
15274                 ranlib=":"
15275         fi
15276 fi
15277 $rm -f foo* bar* 
15278
15279 : check for type of arguments to select. 
15280 case "$selecttype" in
15281 '') case "$d_select" in
15282         $define)
15283                 echo " "
15284                 $cat <<EOM
15285 Checking to see what type of arguments are accepted by select().
15286 EOM
15287                 hdrs="$define sys/types.h
15288                         $i_systime sys/time.h 
15289                         $i_sysselct sys/select.h
15290                         $d_socket sys/socket.h"
15291                 : The first arg can be int, unsigned, or size_t
15292                 : The last arg may or may not be 'const'
15293                 val=''
15294                 : void pointer has been seen but using that
15295                 : breaks the selectminbits test
15296                 for xxx in 'fd_set *' 'int *'; do
15297                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15298                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15299                                         case "$val" in
15300                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15301                                                 if ./protochk "$try" $hdrs; then
15302                                                         echo "Your system accepts $xxx."
15303                                                         val="$xxx"
15304                                                 fi
15305                                                 ;;
15306                                         esac
15307                                 done
15308                         done
15309                 done
15310                 case "$val" in
15311                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15312                         case "$d_fd_set" in
15313                                 $define) dflt="fd_set *" ;;
15314                                 *)              dflt="int *" ;;
15315                         esac
15316                         . ./myread
15317                         val=$ans
15318                         ;;
15319                 esac
15320                 selecttype="$val"
15321                 ;;
15322         *)      : no select, so pick a harmless default
15323                 selecttype='int *'
15324                 ;;
15325         esac
15326         ;;
15327 esac
15328
15329 : check for the select 'width'
15330 case "$selectminbits" in
15331 '') case "$d_select" in
15332         $define)
15333                 $cat <<EOM
15334
15335 Checking to see on how many bits at a time your select() operates...
15336 EOM
15337                 $cat >try.c <<EOCP
15338 #include <sys/types.h>
15339 #$i_time I_TIME
15340 #$i_systime I_SYS_TIME
15341 #$i_systimek I_SYS_TIME_KERNEL
15342 #ifdef I_TIME
15343 #   include <time.h>
15344 #endif
15345 #ifdef I_SYS_TIME
15346 #   ifdef I_SYS_TIME_KERNEL
15347 #       define KERNEL
15348 #   endif
15349 #   include <sys/time.h>
15350 #   ifdef I_SYS_TIME_KERNEL
15351 #       undef KERNEL
15352 #   endif
15353 #endif
15354 #$i_sysselct I_SYS_SELECT
15355 #ifdef I_SYS_SELECT
15356 #include <sys/select.h>
15357 #endif
15358 #$d_socket HAS_SOCKET
15359 #ifdef HAS_SOCKET
15360 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15361 #endif
15362 #include <stdio.h>
15363 $selecttype b;
15364 #define S sizeof(*(b))
15365 #define MINBITS 64
15366 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15367 #define NBITS  (NBYTES * 8)
15368 int main() {
15369     char s[NBYTES];
15370     struct timeval t;
15371     int i;
15372     FILE* fp;
15373     int fd;
15374
15375     fclose(stdin);
15376     fp = fopen("try.c", "r");
15377     if (fp == 0)
15378       exit(1);
15379     fd = fileno(fp);
15380     if (fd < 0)
15381       exit(2);
15382     b = ($selecttype)s;
15383     for (i = 0; i < NBITS; i++)
15384         FD_SET(i, b);
15385     t.tv_sec  = 0;
15386     t.tv_usec = 0;
15387     select(fd + 1, b, 0, 0, &t);
15388     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15389     printf("%d\n", i + 1);
15390     return 0;
15391 }
15392 EOCP
15393                 set try
15394                 if eval $compile_ok; then
15395                         selectminbits=`$run ./try`
15396                         case "$selectminbits" in
15397                         '')     cat >&4 <<EOM
15398 Cannot figure out on how many bits at a time your select() operates.
15399 I'll play safe and guess it is 32 bits.
15400 EOM
15401                                 selectminbits=32
15402                                 bits="32 bits"
15403                                 ;;
15404                         1)      bits="1 bit" ;;
15405                         *)      bits="$selectminbits bits" ;;
15406                         esac
15407                         echo "Your select() operates on $bits at a time." >&4
15408                 else
15409                         rp='What is the minimum number of bits your select() operates on?'
15410                         case "$byteorder" in
15411                         1234|12345678)  dflt=32 ;;
15412                         *)              dflt=1  ;;
15413                         esac
15414                         . ./myread
15415                         val=$ans
15416                         selectminbits="$val"
15417                 fi
15418                 $rm -f try.* try
15419                 ;;
15420         *)      : no select, so pick a harmless default
15421                 selectminbits='32'
15422                 ;;
15423         esac
15424         ;;
15425 esac
15426
15427 : Trace out the files included by signal.h, then look for SIGxxx names.
15428 : Remove SIGARRAYSIZE used by HPUX.
15429 : Remove SIGSTKSIZE used by Linux.
15430 : Remove SIGSTKSZ used by Posix.
15431 : Remove SIGTYP void lines used by OS2.
15432 : Some cpps, like os390, dont give the file name anywhere
15433 if [ "X$fieldn" = X ]; then
15434         : Just make some guesses.  We check them later.
15435         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15436 else
15437         xxx=`echo '#include <signal.h>' |
15438         $cppstdin $cppminus $cppflags 2>/dev/null |
15439         $grep '^[       ]*#.*include' | 
15440         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15441 fi
15442 : Check this list of files to be sure we have parsed the cpp output ok.
15443 : This will also avoid potentially non-existent files, such 
15444 : as ../foo/bar.h
15445 xxxfiles=''
15446 for xx in $xxx /dev/null ; do
15447         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15448 done
15449 : If we have found no files, at least try signal.h
15450 case "$xxxfiles" in
15451 '')     xxxfiles=`./findhdr signal.h` ;;
15452 esac
15453 xxx=`awk '
15454 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15455         print substr($2, 4, 20)
15456 }
15457 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15458         print substr($3, 4, 20)
15459 }' $xxxfiles`
15460 : Append some common names just in case the awk scan failed.
15461 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15462 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15463 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15464 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15465 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15466
15467 : generate a few handy files for later
15468 $cat > signal.c <<'EOCP'
15469 #include <sys/types.h>
15470 #include <signal.h>
15471 #include <stdio.h>
15472 int main() {
15473
15474 /* Strange style to avoid deeply-nested #if/#else/#endif */
15475 #ifndef NSIG
15476 #  ifdef _NSIG
15477 #    define NSIG (_NSIG)
15478 #  endif
15479 #endif
15480
15481 #ifndef NSIG
15482 #  ifdef SIGMAX
15483 #    define NSIG (SIGMAX+1)
15484 #  endif
15485 #endif
15486
15487 #ifndef NSIG
15488 #  ifdef SIG_MAX
15489 #    define NSIG (SIG_MAX+1)
15490 #  endif
15491 #endif
15492
15493 #ifndef NSIG
15494 #  ifdef MAXSIG
15495 #    define NSIG (MAXSIG+1)
15496 #  endif
15497 #endif
15498
15499 #ifndef NSIG
15500 #  ifdef MAX_SIG
15501 #    define NSIG (MAX_SIG+1)
15502 #  endif
15503 #endif
15504
15505 #ifndef NSIG
15506 #  ifdef SIGARRAYSIZE
15507 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15508 #  endif
15509 #endif
15510
15511 #ifndef NSIG
15512 #  ifdef _sys_nsig
15513 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15514 #  endif
15515 #endif
15516
15517 /* Default to some arbitrary number that's big enough to get most
15518    of the common signals.
15519 */
15520 #ifndef NSIG
15521 #    define NSIG 50
15522 #endif
15523
15524 printf("NSIG %d\n", NSIG);
15525
15526 #ifndef JUST_NSIG
15527
15528 EOCP
15529
15530 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15531 {
15532         printf "#ifdef SIG"; printf $1; printf "\n"
15533         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15534         printf $1; printf ");\n"
15535         printf "#endif\n"
15536 }
15537 END {
15538         printf "#endif /* JUST_NSIG */\n";
15539         printf "exit(0);\n}\n";
15540 }
15541 ' >>signal.c
15542 $cat >signal.awk <<'EOP'
15543 BEGIN { ndups = 0 }
15544 $1 ~ /^NSIG$/ { nsig = $2 }
15545 ($1 !~ /^NSIG$/) && (NF == 2) {
15546     if ($2 > maxsig) { maxsig = $2 }
15547     if (sig_name[$2]) {
15548         dup_name[ndups] = $1
15549         dup_num[ndups] = $2
15550         ndups++ 
15551     }
15552     else {
15553         sig_name[$2] = $1
15554         sig_num[$2] = $2
15555     }
15556 }
15557 END { 
15558     if (nsig == 0) {
15559         nsig = maxsig + 1
15560     }
15561     printf("NSIG %d\n", nsig);
15562     for (n = 1; n < nsig; n++) {
15563         if (sig_name[n]) {
15564             printf("%s %d\n", sig_name[n], sig_num[n])
15565         }
15566         else {
15567             printf("NUM%d %d\n", n, n) 
15568         }
15569     }
15570     for (n = 0; n < ndups; n++) {
15571         printf("%s %d\n", dup_name[n], dup_num[n])
15572     }
15573 }
15574 EOP
15575 $cat >signal_cmd <<EOS
15576 $startsh
15577 if $test -s signal.lst; then
15578     echo "Using your existing signal.lst file"
15579         exit 0
15580 fi
15581 xxx="$xxx"
15582 EOS
15583 $cat >>signal_cmd <<'EOS'
15584
15585 set signal
15586 if eval $compile_ok; then
15587         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15588 else
15589         echo "(I can't seem be able to compile the whole test program)" >&4
15590         echo "(I'll try it in little pieces.)" >&4
15591         set signal -DJUST_NSIG
15592         if eval $compile_ok; then
15593                 $run ./signal$_exe > signal.nsg
15594                 $cat signal.nsg
15595         else
15596                 echo "I can't seem to figure out how many signals you have." >&4
15597                 echo "Guessing 50." >&4
15598                 echo 'NSIG 50' > signal.nsg
15599         fi
15600         : Now look at all the signal names, one at a time.
15601         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15602                 $cat > signal.c <<EOCP
15603 #include <sys/types.h>
15604 #include <signal.h>
15605 #include <stdio.h>
15606 int main() {
15607 printf("$xx %d\n", SIG${xx});
15608 return 0;
15609 }
15610 EOCP
15611                 set signal
15612                 if eval $compile; then
15613                         echo "SIG${xx} found."
15614                         $run ./signal$_exe  >> signal.ls1
15615                 else
15616                         echo "SIG${xx} NOT found."
15617                 fi
15618         done
15619         if $test -s signal.ls1; then
15620                 $cat signal.nsg signal.ls1 |
15621                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15622         fi
15623
15624 fi
15625 if $test -s signal.lst; then
15626         :
15627 else
15628         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15629         echo 'kill -l' >signal
15630         set X `csh -f <signal`
15631         $rm -f signal
15632         shift
15633         case $# in
15634         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15635         esac
15636         echo $@ | $tr ' ' $trnl | \
15637             $awk '{ printf "%s %d\n", $1, ++s; }
15638                   END { printf "NSIG %d\n", ++s }' >signal.lst
15639 fi
15640 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15641 EOS
15642 chmod a+x signal_cmd
15643 $eunicefix signal_cmd
15644
15645 : generate list of signal names
15646 echo " "
15647 case "$sig_name_init" in
15648 '') doinit=yes ;;
15649 *)  case "$sig_num_init" in
15650     ''|*,*) doinit=yes ;;
15651     esac ;;
15652 esac
15653 case "$doinit" in
15654 yes)
15655         echo "Generating a list of signal names and numbers..." >&4
15656         . ./signal_cmd
15657         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15658         sig_name=`$awk 'BEGIN { printf "ZERO " }
15659                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15660         sig_num=`$awk  'BEGIN { printf "0 " }
15661                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15662         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15663                              !/^NSIG/   { printf "\"%s\", ", $1 }
15664                              END        { printf "0\n" }' signal.lst`
15665         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15666                              !/^NSIG/   { printf "%d, ", $2}
15667                              END        { printf "0\n"}' signal.lst`
15668         ;;
15669 esac
15670 echo "The following $sig_count signals are available:"
15671 echo " "
15672 echo $sig_name | $awk \
15673 'BEGIN { linelen = 0 }
15674 {
15675         for (i = 1; i <= NF; i++) {
15676                 name = "SIG" $i " "
15677                 linelen = linelen + length(name)
15678                 if (linelen > 70) {
15679                         printf "\n"
15680                         linelen = length(name)
15681                 }
15682                 printf "%s", name
15683         }
15684         printf "\n"
15685 }'
15686 sig_size=`echo $sig_name | awk '{print NF}'`
15687 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15688
15689 echo " "
15690 case "$sizetype" in
15691 *_t) zzz="$sizetype"    ;;
15692 *)   zzz="filesize"     ;;
15693 esac
15694 echo "Checking the size of $zzz..." >&4 
15695 cat > try.c <<EOCP
15696 #include <sys/types.h>
15697 #include <stdio.h>
15698 int main() {
15699     printf("%d\n", (int)sizeof($sizetype));
15700     exit(0);
15701 }
15702 EOCP
15703 set try
15704 if eval $compile_ok; then
15705         yyy=`$run ./try`
15706         case "$yyy" in
15707         '')     sizesize=4
15708                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15709                 ;;
15710         *)      sizesize=$yyy
15711                 echo "Your $zzz size is $sizesize bytes."
15712                 ;;
15713         esac
15714 else
15715         sizesize=4
15716         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15717 fi
15718
15719
15720 : check for socklen_t
15721 echo " "
15722 echo "Checking to see if you have socklen_t..." >&4
15723 $cat >try.c <<EOCP
15724 #include <sys/types.h>
15725 #$d_socket HAS_SOCKET
15726 #ifdef HAS_SOCKET
15727 #include <sys/socket.h>
15728 #endif
15729 int main() { socklen_t x = 16; }
15730 EOCP
15731 set try
15732 if eval $compile; then
15733         val="$define"
15734         echo "You have socklen_t."
15735 else
15736         val="$undef"
15737         echo "You do not have socklen_t."
15738         case "$sizetype" in
15739         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15740         esac
15741 fi
15742 $rm -f try try.*
15743 set d_socklen_t
15744 eval $setvar
15745
15746 : see if this is a socks.h system
15747 set socks.h i_socks
15748 eval $inhdr
15749
15750 : check for type of the size argument to socket calls
15751 case "$d_socket" in
15752 "$define")
15753         $cat <<EOM
15754
15755 Checking to see what type is the last argument of accept().
15756 EOM
15757         yyy=''
15758         case "$d_socklen_t" in
15759         "$define") yyy="$yyy socklen_t"
15760         esac
15761         yyy="$yyy $sizetype int long unsigned"
15762         for xxx in $yyy; do
15763                 case "$socksizetype" in
15764                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15765                         case "$usesocks" in
15766                         "$define")
15767                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15768                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15769                                         socksizetype="$xxx"
15770                                 fi
15771                                 ;;
15772                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15773                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15774                                         socksizetype="$xxx"
15775                                 fi
15776                                 ;;
15777                         esac
15778                         ;;
15779                 esac
15780         done
15781 : In case none of those worked, prompt the user.
15782         case "$socksizetype" in
15783         '')     rp='What is the type for socket address structure sizes?'
15784                 dflt='int'
15785                 . ./myread
15786                 socksizetype=$ans
15787                 ;;
15788         esac
15789         ;;
15790 *)      : no sockets, so pick relatively harmless default
15791         socksizetype='int'
15792         ;;
15793 esac
15794
15795 : see what type is used for signed size_t
15796 set ssize_t ssizetype int stdio.h sys/types.h
15797 eval $typedef
15798 dflt="$ssizetype"
15799 $cat > try.c <<EOM
15800 #include <stdio.h>
15801 #include <sys/types.h>
15802 #define Size_t $sizetype
15803 #define SSize_t $dflt
15804 int main()
15805 {
15806         if (sizeof(Size_t) == sizeof(SSize_t))
15807                 printf("$dflt\n");
15808         else if (sizeof(Size_t) == sizeof(int))
15809                 printf("int\n");
15810         else 
15811                 printf("long\n");
15812         exit(0);
15813 }
15814 EOM
15815 echo " "
15816 set try
15817 if eval $compile_ok && $run ./try > /dev/null; then
15818         ssizetype=`$run ./try`
15819         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15820 else
15821         $cat >&4 <<EOM
15822 Help! I can't compile and run the ssize_t test program: please enlighten me!
15823 (This is probably a misconfiguration in your system or libraries, and
15824 you really ought to fix it.  Still, I'll try anyway.)
15825
15826 I need a type that is the same size as $sizetype, but is guaranteed to
15827 be signed.  Common values are ssize_t, int and long.
15828
15829 EOM
15830         rp="What signed type is the same size as $sizetype?"
15831         . ./myread
15832         ssizetype="$ans"
15833 fi
15834 $rm -f try try.*
15835
15836 : see what type of char stdio uses.
15837 echo " "
15838 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15839 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15840         echo "Your stdio uses unsigned chars." >&4
15841         stdchar="unsigned char"
15842 else
15843         echo "Your stdio uses signed chars." >&4
15844         stdchar="char"
15845 fi
15846 $rm -f stdioh
15847
15848
15849
15850 : see if time exists
15851 echo " "
15852 if test "X$d_time" = X -o X"$timetype" = X; then
15853     if set time val -f d_time; eval $csym; $val; then
15854                 echo 'time() found.' >&4
15855                 val="$define"
15856                 rp="What is the type returned by time() on this system?"
15857                 set time_t timetype long stdio.h sys/types.h
15858                 eval $typedef_ask
15859     else
15860                 echo 'time() not found, hope that will do.' >&4
15861                 val="$undef"
15862                 timetype='int';
15863     fi
15864     set d_time
15865     eval $setvar
15866 fi
15867
15868 : see what type uids are declared as in the kernel
15869 echo " "
15870 echo "Looking for the type for user ids returned by getuid()."
15871 set uid_t uidtype xxx stdio.h sys/types.h
15872 eval $typedef
15873 case "$uidtype" in
15874 xxx)
15875         xxx=`./findhdr sys/user.h`
15876         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15877         case $1 in
15878         unsigned) dflt="$1 $2" ;;
15879         *) dflt="$1" ;;
15880         esac
15881         ;;
15882 *) dflt="$uidtype";;
15883 esac
15884 case "$uidtype" in
15885 uid_t)  echo "uid_t found." ;;
15886 *)      rp="What is the type for user ids returned by getuid()?"
15887         . ./myread
15888         uidtype="$ans"
15889         ;;
15890 esac
15891
15892 echo " "
15893 case "$uidtype" in
15894 *_t) zzz="$uidtype"     ;;
15895 *)   zzz="uid"          ;;
15896 esac
15897 echo "Checking the size of $zzz..." >&4 
15898 cat > try.c <<EOCP
15899 #include <sys/types.h>
15900 #include <stdio.h>
15901 int main() {
15902     printf("%d\n", (int)sizeof($uidtype));
15903     exit(0);
15904 }
15905 EOCP
15906 set try
15907 if eval $compile_ok; then
15908         yyy=`$run ./try`
15909         case "$yyy" in
15910         '')     uidsize=4
15911                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15912                 ;;
15913         *)      uidsize=$yyy
15914                 echo "Your $zzz is $uidsize bytes long."
15915                 ;;
15916         esac
15917 else
15918         uidsize=4
15919         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15920 fi
15921
15922 echo " "
15923 case "$uidtype" in
15924 *_t) zzz="$uidtype"     ;;
15925 *)   zzz="uid"          ;;
15926 esac
15927 echo "Checking the sign of $zzz..." >&4
15928 cat > try.c <<EOCP
15929 #include <sys/types.h>
15930 #include <stdio.h>
15931 int main() {
15932         $uidtype foo = -1;
15933         if (foo < 0)
15934                 printf("-1\n");
15935         else
15936                 printf("1\n");
15937 }
15938 EOCP
15939 set try
15940 if eval $compile; then
15941         yyy=`$run ./try`
15942         case "$yyy" in
15943         '')     uidsign=1
15944                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15945                 ;;
15946         *)      uidsign=$yyy
15947                 case "$uidsign" in
15948                  1) echo "Your $zzz is unsigned." ;;
15949                 -1) echo "Your $zzz is signed."   ;;
15950                 esac
15951                 ;;
15952         esac
15953 else
15954         uidsign=1
15955         echo "(I can't compile the test program--guessing unsigned.)" >&4
15956 fi
15957
15958
15959
15960 echo " "
15961 $echo "Checking the format string to be used for uids..." >&4
15962
15963 case "$uidsign" in
15964 -1)     if $test X"$uidsize" = X"$ivsize"; then
15965                 uidformat="$ivdformat"
15966         else
15967                 if $test X"$uidsize" = X"$longsize"; then
15968                         uidformat='"ld"'
15969                 else
15970                         if $test X"$uidsize" = X"$intsize"; then
15971                                 uidformat='"d"'
15972                         else
15973                                 if $test X"$uidsize" = X"$shortsize"; then
15974                                         uidformat='"hd"'
15975                                 fi
15976                         fi
15977                 fi
15978         fi
15979         ;;
15980 *)      if $test X"$uidsize" = X"$uvsize"; then
15981                 uidformat="$uvuformat"
15982         else
15983                 if $test X"$uidsize" = X"$longsize"; then
15984                         uidformat='"lu"'
15985                 else
15986                         if $test X"$uidsize" = X"$intsize"; then
15987                                 uidformat='"u"'
15988                         else
15989                                 if $test X"$uidsize" = X"$shortsize"; then
15990                                         uidformat='"hu"'
15991                                 fi
15992                         fi
15993                 fi
15994         fi
15995         ;;
15996 esac
15997
15998 : determine compiler compiler
15999 case "$yacc" in
16000 '')
16001         dflt=yacc;;
16002 *)
16003         dflt="$yacc";;
16004 esac
16005 echo " "
16006 comp='yacc'
16007 if $test -f "$byacc$_exe"; then
16008         dflt="$byacc"
16009         comp="byacc or $comp"
16010 fi
16011 if $test -f "$bison$_exe"; then
16012         comp="$comp or bison -y"
16013 fi
16014 rp="Which compiler compiler ($comp) shall I use?"
16015 . ./myread
16016 yacc="$ans"
16017 case "$yacc" in
16018 *bis*)
16019         case "$yacc" in
16020         *-y*) ;;
16021         *)
16022                 yacc="$yacc -y"
16023                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16024                 ;;
16025         esac
16026         ;;
16027 esac
16028
16029 : see if this is a fp.h system
16030 set fp.h i_fp
16031 eval $inhdr
16032
16033 : see if this is a fp_class.h system
16034 set fp_class.h i_fp_class
16035 eval $inhdr
16036
16037 : see if this is a ieeefp.h system
16038 case "$i_ieeefp" in
16039 '' ) set ieeefp.h i_ieeefp
16040      eval $inhdr
16041      ;;
16042 esac
16043
16044 : see if this is a libutil.h system
16045 set libutil.h i_libutil
16046 eval $inhdr
16047
16048 : see if locale.h is available
16049 set locale.h i_locale
16050 eval $inhdr
16051
16052 : see if mach cthreads are available
16053 if test "X$usethreads" = "X$define"; then
16054         set mach/cthreads.h i_machcthr
16055         eval $inhdr
16056 else
16057         i_machcthr="$undef"
16058 fi
16059
16060
16061
16062 : see if this is a math.h system
16063 set math.h i_math
16064 eval $inhdr
16065
16066 : see if this is a mntent.h system
16067 set mntent.h i_mntent
16068 eval $inhdr
16069
16070 : see if ndbm.h is available
16071 set ndbm.h t_ndbm
16072 eval $inhdr
16073
16074 case "$t_ndbm" in
16075 $undef)
16076     # Some Linux distributions such as RedHat 7.1 put the
16077     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16078     if $test -f /usr/include/gdbm/ndbm.h; then
16079         echo '<gdbm/ndbm.h> found.'
16080         ccflags="$ccflags -I/usr/include/gdbm"
16081         cppflags="$cppflags -I/usr/include/gdbm"
16082         t_ndbm=$define
16083     fi
16084     ;;
16085 esac
16086
16087 case "$t_ndbm" in
16088 $define)
16089         : see if dbm_open exists
16090         set dbm_open d_dbm_open
16091         eval $inlibc
16092         case "$d_dbm_open" in
16093         $undef)
16094                 t_ndbm="$undef"
16095                 echo "We won't be including <ndbm.h>"
16096                 ;;
16097         esac
16098         ;;
16099 esac
16100 val="$t_ndbm"
16101 set i_ndbm
16102 eval $setvar
16103
16104 : see if net/errno.h is available
16105 val=''
16106 set net/errno.h val
16107 eval $inhdr
16108
16109 : Unfortunately, it causes problems on some systems.  Arrgh.
16110 case "$val" in
16111 $define)
16112         cat > try.c <<'EOM'
16113 #include <stdio.h>
16114 #include <errno.h>
16115 #include <net/errno.h>
16116 int func()
16117 {
16118         return ENOTSOCK;
16119 }
16120 EOM
16121         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16122                 echo "We'll be including <net/errno.h>." >&4
16123         else
16124                 echo "We won't be including <net/errno.h>." >&4
16125                 val="$undef"
16126         fi
16127         $rm -f try.* try
16128         ;;
16129 esac
16130 set i_neterrno
16131 eval $setvar
16132
16133 : see if netinet/tcp.h is available
16134 set netinet/tcp.h i_netinettcp
16135 eval $inhdr
16136
16137 : see if this is a poll.h system
16138 set poll.h i_poll
16139 eval $inhdr
16140
16141 : see if this is a prot.h system
16142 set prot.h i_prot
16143 eval $inhdr
16144
16145 echo " "
16146 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16147 $cat <<'EOSH' > Cppsym.know
16148 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16149 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16150 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16151 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16152 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16153 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16154 bull c cadmus clipper CMU COFF COMPILER_VERSION
16155 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16156 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16157 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16158 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16159 GLIBC GLIBC_MINOR
16160 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16161 H3050R H3050RX hbullx20 hcx host_mips
16162 hp200 hp300 hp700 HP700 hp800 hp9000
16163 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16164 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16165 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16166 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16167 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16168 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16169 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16170 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16171 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16172 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16173 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16174 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16175 MATH_HAS_NO_SIDE_EFFECTS
16176 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16177 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16178 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16179 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16180 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16181 NetBSD news1500 news1700 news1800 news1900 news3700
16182 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16183 ns32016 ns32332 ns32k nsc32000
16184 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16185 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16186 pc532 pdp11 PGC PIC plexus PORTAR posix
16187 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16188 POSIX_C_SOURCE POSIX_SOURCE POWER
16189 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16190 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16191 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16192 sony sony_news sonyrisc sparc sparclite spectrum
16193 stardent stdc STDC_EXT stratos sun sun3 sun386
16194 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16195 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16196 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16197 sysV68 sysV88 Tek4132 Tek4300 titan
16198 TM3200 TM5400 TM5600
16199 tower tower32 tower32_200 tower32_600 tower32_700
16200 tower32_800 tower32_850 tss
16201 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16202 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16203 unix UNIX95 UNIX99 unixpc unos
16204 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16205 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16206 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16207 USGr4 USGr4_2
16208 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16209 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16210 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16211 z8000
16212 EOSH
16213 # Maybe put other stuff here too.
16214 cat <<EOSH >>Cppsym.know
16215 $osname
16216 EOSH
16217 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16218 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16219 $cat Cppsym.know > Cppsym.c
16220 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16221 $rm -f Cppsym.a Cppsym.b Cppsym.c
16222 cat <<EOSH > Cppsym
16223 $startsh
16224 if $test \$# -gt 0; then
16225     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16226     if $test -s Cppsym.got; then
16227         $rm -f Cppsym.got
16228         exit 0
16229     fi
16230     $rm -f Cppsym.got
16231     exit 1
16232 else
16233     $tr " " "$trnl" | ./Cppsym.try
16234     exit 0
16235 fi
16236 EOSH
16237 chmod +x Cppsym
16238 $eunicefix Cppsym
16239 cat <<EOSH > Cppsym.try
16240 $startsh
16241 cat <<'EOCP' > try.c
16242 #include <stdio.h>
16243 int main() {
16244 EOCP
16245 $awk \\
16246 EOSH
16247 cat <<'EOSH' >> Cppsym.try
16248 'length($1) > 0 {
16249     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16250     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
16251     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
16252     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
16253 }'       >> try.c
16254 echo 'return 0;}' >> try.c
16255 EOSH
16256 cat <<EOSH >> Cppsym.try
16257 ccflags="$ccflags"
16258 case "$osname-$gccversion" in
16259 irix-) ccflags="\$ccflags -woff 1178" ;;
16260 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16261 esac
16262 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16263 EOSH
16264 chmod +x Cppsym.try
16265 $eunicefix Cppsym.try
16266 ./Cppsym < Cppsym.know > Cppsym.true
16267 : now check the C compiler for additional symbols
16268 postprocess_cc_v=''
16269 case "$osname" in
16270 aix) postprocess_cc_v="|$tr , ' '" ;;
16271 esac
16272 $cat >ccsym <<EOS
16273 $startsh
16274 $cat >tmp.c <<EOF
16275 extern int foo;
16276 EOF
16277 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16278 do
16279         case "\$i" in
16280         -D*) echo "\$i" | $sed 's/^-D//';;
16281         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16282         esac
16283 done
16284 $rm -f try.c
16285 EOS
16286 postprocess_cc_v=''
16287 chmod +x ccsym
16288 $eunicefix ccsym
16289 ./ccsym > ccsym1.raw
16290 if $test -s ccsym1.raw; then
16291        $sort ccsym1.raw | $uniq >ccsym.raw
16292 else
16293        mv ccsym1.raw ccsym.raw
16294 fi
16295
16296 $awk '/\=/ { print $0; next }
16297         { print $0"=1" }' ccsym.raw >ccsym.list
16298 $awk '/\=/ { print $0; next }
16299         { print $0"=1" }' Cppsym.true >ccsym.true
16300 $comm -13 ccsym.true ccsym.list >ccsym.own
16301 $comm -12 ccsym.true ccsym.list >ccsym.com
16302 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16303 also=''
16304 if $test -z ccsym.raw; then
16305         echo "Your C compiler doesn't seem to define any symbols!" >&4
16306         echo " "
16307         echo "However, your C preprocessor defines the following symbols:"
16308         $cat Cppsym.true
16309         ccsymbols=''
16310         cppsymbols=`$cat Cppsym.true`
16311         cppsymbols=`echo $cppsymbols`
16312         cppccsymbols="$cppsymbols"
16313 else
16314         if $test -s ccsym.com; then
16315                 echo "Your C compiler and pre-processor define these symbols:"
16316                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16317                 also='also '
16318                 symbols='ones'
16319                 cppccsymbols=`$cat ccsym.com`
16320                 cppccsymbols=`echo $cppccsymbols`
16321                 $test "$silent" || sleep 1
16322         fi
16323         if $test -s ccsym.cpp; then
16324                 $test "$also" && echo " "
16325                 echo "Your C pre-processor ${also}defines the following symbols:"
16326                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16327                 also='further '
16328                 cppsymbols=`$cat ccsym.cpp`
16329                 cppsymbols=`echo $cppsymbols`
16330                 $test "$silent" || sleep 1
16331         fi
16332         if $test -s ccsym.own; then
16333                 $test "$also" && echo " "
16334                 echo "Your C compiler ${also}defines the following cpp symbols:"
16335                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16336                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16337                 ccsymbols=`$cat ccsym.own`
16338                 ccsymbols=`echo $ccsymbols`
16339                 $test "$silent" || sleep 1
16340         fi
16341 fi
16342
16343 : see if this is a termio system
16344 val="$undef"
16345 val2="$undef"
16346 val3="$undef"
16347 if $test `./findhdr termios.h`; then
16348         set tcsetattr i_termios
16349         eval $inlibc
16350         val3="$i_termios"
16351 fi
16352 echo " "
16353 case "$val3" in
16354 "$define") echo "You have POSIX termios.h... good!" >&4;;
16355 *) if ./Cppsym pyr; then
16356                 case "`/bin/universe`" in
16357                 ucb) if $test `./findhdr sgtty.h`; then
16358                                 val2="$define"
16359                                 echo "<sgtty.h> found." >&4
16360                         else
16361                                 echo "System is pyramid with BSD universe."
16362                                 echo "<sgtty.h> not found--you could have problems." >&4
16363                         fi;;
16364                 *) if $test `./findhdr termio.h`; then
16365                                 val="$define"
16366                                 echo "<termio.h> found." >&4
16367                         else
16368                                 echo "System is pyramid with USG universe."
16369                                 echo "<termio.h> not found--you could have problems." >&4
16370                         fi;;
16371                 esac
16372         elif ./usg; then
16373                 if $test `./findhdr termio.h`; then
16374                         echo "<termio.h> found." >&4
16375                         val="$define"
16376                 elif $test `./findhdr sgtty.h`; then
16377                         echo "<sgtty.h> found." >&4
16378                         val2="$define"
16379                 else
16380 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16381                 fi
16382         else
16383                 if $test `./findhdr sgtty.h`; then
16384                         echo "<sgtty.h> found." >&4
16385                         val2="$define"
16386                 elif $test `./findhdr termio.h`; then
16387                         echo "<termio.h> found." >&4
16388                         val="$define"
16389                 else
16390 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16391                 fi
16392         fi;;
16393 esac
16394 set i_termio; eval $setvar
16395 val=$val2; set i_sgtty; eval $setvar
16396 val=$val3; set i_termios; eval $setvar
16397
16398 : see if this is a shadow.h system
16399 set shadow.h i_shadow
16400 eval $inhdr
16401
16402 : see if stddef is available
16403 set stddef.h i_stddef
16404 eval $inhdr
16405
16406 : see if this is a sunmath.h system
16407 set sunmath.h i_sunmath
16408 eval $inhdr
16409
16410 : see if sys/access.h is available
16411 set sys/access.h i_sysaccess
16412 eval $inhdr
16413
16414 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16415 set sys/filio.h i_sysfilio
16416 eval $inhdr
16417 echo " "
16418 if $test `./findhdr sys/ioctl.h`; then
16419         val="$define"
16420         echo '<sys/ioctl.h> found.' >&4
16421 else
16422         val="$undef"
16423         if $test $i_sysfilio = "$define"; then
16424             echo '<sys/ioctl.h> NOT found.' >&4
16425         else
16426                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16427                 $test $i_termio = "$define" && xxx="termio.h"
16428                 $test $i_termios = "$define" && xxx="termios.h"
16429 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16430         fi
16431 fi
16432 set i_sysioctl
16433 eval $setvar
16434
16435 : see if socket ioctl defs are in sys/sockio.h
16436 echo " "
16437 xxx=`./findhdr sys/sockio.h`
16438 if $test "$xxx"; then
16439         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16440                 val="$define"
16441                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16442         else
16443                 val="$undef"
16444                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16445         fi
16446 else
16447         val="$undef"
16448         $cat <<EOM
16449 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16450 EOM
16451 fi
16452 set i_syssockio
16453 eval $setvar
16454
16455
16456 : see if this is a syslog.h system
16457 set syslog.h i_syslog
16458 eval $inhdr
16459
16460
16461 : see if this is a sys/mode.h system
16462 set sys/mode.h i_sysmode
16463 eval $inhdr
16464
16465 : see if sys/resource.h has to be included
16466 set sys/resource.h i_sysresrc
16467 eval $inhdr
16468
16469 : see if sys/security.h is available
16470 set sys/security.h i_syssecrt
16471 eval $inhdr
16472
16473 : see if this is a sys/statvfs.h system
16474 set sys/statvfs.h i_sysstatvfs
16475 eval $inhdr
16476
16477 : see if this is a sys/un.h system
16478 set sys/un.h i_sysun
16479 eval $inhdr
16480
16481
16482 : see if this is a sys/utsname.h system
16483 set sys/utsname.h i_sysutsname
16484 eval $inhdr
16485
16486 : see if this is a syswait system
16487 set sys/wait.h i_syswait
16488 eval $inhdr
16489
16490 : see if this is a ustat.h system
16491 set ustat.h i_ustat
16492 eval $inhdr
16493
16494 : see if this is an utime system
16495 set utime.h i_utime
16496 eval $inhdr
16497
16498 : see if this is a values.h system
16499 set values.h i_values
16500 eval $inhdr
16501
16502 : see if this is a vfork system
16503 case "$d_vfork" in
16504 "$define")
16505         set vfork.h i_vfork
16506         eval $inhdr
16507         ;;
16508 *)
16509         i_vfork="$undef"
16510         ;;
16511 esac
16512
16513 : see if gdbm.h is available
16514 set gdbm.h t_gdbm
16515 eval $inhdr
16516 case "$t_gdbm" in
16517 $define)
16518         : see if gdbm_open exists
16519         set gdbm_open d_gdbm_open
16520         eval $inlibc
16521         case "$d_gdbm_open" in
16522         $undef)
16523                 t_gdbm="$undef"
16524                 echo "We won't be including <gdbm.h>"
16525                 ;;
16526         esac
16527         ;;
16528 esac
16529 val="$t_gdbm"
16530 set i_gdbm
16531 eval $setvar
16532
16533 echo " "
16534 echo "Looking for extensions..." >&4
16535 : If we are using the old config.sh, known_extensions may contain
16536 : old or inaccurate or duplicate values.
16537 known_extensions=''
16538 nonxs_extensions=''
16539 : We do not use find because it might not be available.
16540 : We do not just use MANIFEST because the user may have dropped
16541 : some additional extensions into the source tree and expect them
16542 : to be built.
16543
16544 : Function to recursively find available extensions, ignoring DynaLoader
16545 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16546 find_extensions='
16547     for xxx in *; do
16548        case "$xxx" in
16549            DynaLoader|dynaload) ;;
16550            *)
16551            if $test -f $xxx/$xxx.xs; then
16552                known_extensions="$known_extensions $1$xxx";
16553            elif $test -f $xxx/Makefile.PL; then
16554                nonxs_extensions="$nonxs_extensions $1$xxx";
16555            else
16556                if $test -d $xxx -a $# -lt 10; then
16557                    set $1$xxx/ $*;
16558                    cd "$xxx";
16559                    eval $find_extensions;
16560                    cd ..;
16561                    shift;
16562                fi;
16563            fi
16564            ;;
16565        esac;
16566     done'
16567 tdir=`pwd`
16568 cd "$rsrc/ext"
16569 set X
16570 shift
16571 eval $find_extensions
16572 # Special case:  Add in threads/shared since it is not picked up by the
16573 # recursive find above (and adding in general recursive finding breaks
16574 # SDBM_File/sdbm).  A.D.  10/25/2001.
16575 known_extensions="$known_extensions threads/shared"
16576 set X $nonxs_extensions
16577 shift
16578 nonxs_extensions="$*"
16579 set X $known_extensions
16580 shift
16581 known_extensions="$*"
16582 cd "$tdir"
16583
16584 : Now see which are supported on this system.
16585 avail_ext=''
16586 for xxx in $known_extensions ; do
16587         case "$xxx" in
16588         DB_File|db_file)
16589                 case "$i_db" in
16590                 $define) avail_ext="$avail_ext $xxx" ;;
16591                 esac
16592                 ;;
16593         GDBM_File|gdbm_fil)
16594                 case "$i_gdbm" in 
16595                 $define) avail_ext="$avail_ext $xxx" ;;
16596                 esac
16597                 ;;
16598         I18N/Langinfo|i18n_lan)
16599                 case "$i_langinfo$d_nl_langinfo" in 
16600                 $define$define) avail_ext="$avail_ext $xxx" ;;
16601                 esac
16602                 ;;
16603         NDBM_File|ndbm_fil)
16604                 case "$i_ndbm" in
16605                 $define)
16606                     case "$osname-$use64bitint" in
16607                     cygwin-*|hpux-define)
16608                         case "$libs" in
16609                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16610                         esac
16611                         ;;
16612                     *) avail_ext="$avail_ext $xxx" ;;
16613                     esac
16614                     ;;
16615                 esac
16616                 ;;
16617         ODBM_File|odbm_fil) 
16618                 case "${i_dbm}${i_rpcsvcdbm}" in
16619                 *"${define}"*)
16620                     case "$osname-$use64bitint" in
16621                     cygwin-*|hpux-define)
16622                         case "$libs" in
16623                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16624                         esac
16625                         ;;
16626                     *) avail_ext="$avail_ext $xxx" ;;
16627                     esac
16628                     ;;
16629                 esac
16630                 ;;
16631         POSIX|posix)
16632                 case "$useposix" in
16633                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16634                 esac
16635                 ;;
16636         Opcode|opcode)
16637                 case "$useopcode" in
16638                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16639                 esac
16640                 ;;
16641         Socket|socket)
16642                 case "$d_socket" in 
16643                 true|$define|y)
16644                     case "$osname" in
16645                     beos) ;; # not unless BONE
16646                     *) avail_ext="$avail_ext $xxx" ;;
16647                     esac
16648                     ;;
16649                 esac
16650                 ;;
16651         Sys/Syslog|sys/syslog)
16652                 : XXX syslog requires socket
16653                 case "$d_socket" in 
16654                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16655                 esac
16656                 ;;
16657         Thread|thread)
16658                 case "$usethreads" in
16659                 true|$define|y)
16660                         case "$useithreads" in
16661                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16662                         esac
16663                 esac
16664                 ;;
16665         threads|threads/shared)
16666                 case "$usethreads" in
16667                 true|$define|y)
16668                         case "$useithreads" in
16669                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16670                         esac
16671                 esac
16672                 ;;
16673         IPC/SysV|ipc/sysv)
16674                 : XXX Do we need a useipcsysv variable here
16675                 case "${d_msg}${d_sem}${d_shm}" in 
16676                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16677                 esac
16678                 ;;
16679         *)      avail_ext="$avail_ext $xxx"
16680                 ;;
16681         esac
16682 done
16683
16684 set X $avail_ext
16685 shift
16686 avail_ext="$*"
16687
16688 : Now see which nonxs extensions are supported on this system.
16689 : For now assume all are.
16690 nonxs_ext=''
16691 for xxx in $nonxs_extensions ; do
16692         case "$xxx" in
16693         *)      nonxs_ext="$nonxs_ext $xxx"
16694                 ;;
16695         esac
16696 done
16697
16698 set X $nonxs_ext
16699 shift
16700 nonxs_ext="$*"
16701
16702 case $usedl in
16703 $define)
16704         $cat <<EOM
16705 A number of extensions are supplied with $package.  You may choose to
16706 compile these extensions for dynamic loading (the default), compile
16707 them into the $package executable (static loading), or not include
16708 them at all.  Answer "none" to include no extensions.
16709 Note that DynaLoader is always built and need not be mentioned here.
16710
16711 EOM
16712         case "$dynamic_ext" in
16713         '') dflt="$avail_ext" ;;
16714         *)      dflt="$dynamic_ext"
16715                 # Perhaps we are reusing an old out-of-date config.sh.
16716                 case "$hint" in
16717                 previous)
16718                         if test X"$dynamic_ext" != X"$avail_ext"; then
16719                                 $cat <<EOM
16720 NOTICE:  Your previous config.sh list may be incorrect. 
16721 The extensions now available to you are 
16722         ${avail_ext}
16723 but the default list from your previous config.sh is
16724         ${dynamic_ext} 
16725
16726 EOM
16727                         fi
16728                         ;;
16729                 esac
16730                 ;;
16731         esac
16732         case "$dflt" in
16733         '')     dflt=none;;
16734         esac
16735         rp="What extensions do you wish to load dynamically?"
16736         . ./myread
16737         case "$ans" in
16738         none) dynamic_ext=' ' ;;
16739         *) dynamic_ext="$ans" ;;
16740         esac
16741
16742         case "$static_ext" in
16743         '')
16744                 : Exclude those already listed in dynamic linking
16745                 dflt=''
16746                 for xxx in $avail_ext; do
16747                         case " $dynamic_ext " in
16748                         *" $xxx "*) ;;
16749                         *) dflt="$dflt $xxx" ;;
16750                         esac
16751                 done
16752                 set X $dflt
16753                 shift
16754                 dflt="$*"
16755                 ;;
16756         *)  dflt="$static_ext" 
16757                 ;;
16758         esac
16759
16760         case "$dflt" in
16761         '')     dflt=none;;
16762         esac
16763         rp="What extensions do you wish to load statically?"
16764         . ./myread
16765         case "$ans" in
16766         none) static_ext=' ' ;;
16767         *) static_ext="$ans" ;;
16768         esac
16769         ;;
16770 *)
16771         $cat <<EOM
16772 A number of extensions are supplied with $package.  Answer "none" 
16773 to include no extensions. 
16774 Note that DynaLoader is always built and need not be mentioned here.
16775
16776 EOM
16777         case "$static_ext" in
16778         '') dflt="$avail_ext" ;;
16779         *)      dflt="$static_ext"
16780                 # Perhaps we are reusing an old out-of-date config.sh.
16781                 case "$hint" in
16782                 previous)
16783                         if test X"$static_ext" != X"$avail_ext"; then
16784                                 $cat <<EOM
16785 NOTICE:  Your previous config.sh list may be incorrect. 
16786 The extensions now available to you are 
16787         ${avail_ext}
16788 but the default list from your previous config.sh is
16789         ${static_ext} 
16790
16791 EOM
16792                         fi
16793                         ;;
16794                 esac
16795                 ;;
16796         esac
16797         : Exclude those that are not xs extensions
16798         case "$dflt" in
16799         '')     dflt=none;;
16800         esac
16801         rp="What extensions do you wish to include?"
16802         . ./myread
16803         case "$ans" in
16804         none) static_ext=' ' ;;
16805         *) static_ext="$ans" ;;
16806         esac
16807         ;;
16808 esac
16809
16810 set X $dynamic_ext $static_ext $nonxs_ext
16811 shift
16812 extensions="$*"
16813
16814 : Remove libraries needed only for extensions
16815 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16816 : The exception is SunOS 4.x, which needs them.
16817 case "${osname}X${osvers}" in
16818 sunos*X4*)
16819     perllibs="$libs"
16820     ;;
16821 *) case "$usedl" in
16822     $define|true|[yY]*)
16823             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16824             shift
16825             perllibs="$*"
16826             ;;
16827     *)  perllibs="$libs"
16828             ;;
16829     esac
16830     ;;
16831 esac
16832
16833 : Remove build directory name from cppstdin so it can be used from
16834 : either the present location or the final installed location.
16835 echo " "
16836 : Get out of the UU directory to get correct path name.
16837 cd ..
16838 case "$cppstdin" in
16839 `pwd`/cppstdin)
16840         echo "Stripping down cppstdin path name"
16841         cppstdin=cppstdin
16842         ;;
16843 esac
16844 cd UU
16845
16846 : end of configuration questions
16847 echo " "
16848 echo "End of configuration questions."
16849 echo " "
16850
16851 : back to where it started
16852 if test -d ../UU; then
16853         cd ..
16854 fi
16855
16856 : configuration may be patched via a 'config.arch' file
16857 if $test -f config.arch; then
16858         echo "I see a config.arch file, loading it."
16859         . ./config.arch
16860 fi
16861
16862 : configuration may be patched via a 'config.over' file
16863 if $test -f config.over; then
16864         echo " "
16865         dflt=y
16866         rp='I see a config.over file.  Do you wish to load it?'
16867         . UU/myread
16868         case "$ans" in
16869         n*) echo "OK, I'll ignore it.";;
16870         *)      . ./config.over
16871                 echo "Configuration override changes have been loaded."
16872                 ;;
16873         esac
16874 fi
16875
16876 : in case they want portability, strip down executable paths
16877 case "$d_portable" in
16878 "$define")
16879         echo " "
16880         echo "Stripping down executable paths..." >&4
16881         for file in $loclist $trylist; do
16882                 eval temp=\$$file
16883                 eval $file=`basename $temp`
16884         done
16885         ;;
16886 esac
16887
16888 : create config.sh file
16889 echo " "
16890 echo "Creating config.sh..." >&4
16891 $spitshell <<EOT >config.sh
16892 $startsh
16893 #
16894 # This file was produced by running the Configure script. It holds all the
16895 # definitions figured out by Configure. Should you modify one of these values,
16896 # do not forget to propagate your changes by running "Configure -der". You may
16897 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16898 #
16899
16900 # Package name      : $package
16901 # Source directory  : $src
16902 # Configuration time: $cf_time
16903 # Configured by     : $cf_by
16904 # Target system     : $myuname
16905
16906 Author='$Author'
16907 Date='$Date'
16908 Header='$Header'
16909 Id='$Id'
16910 Locker='$Locker'
16911 Log='$Log'
16912 Mcc='$Mcc'
16913 RCSfile='$RCSfile'
16914 Revision='$Revision'
16915 Source='$Source'
16916 State='$State'
16917 _a='$_a'
16918 _exe='$_exe'
16919 _o='$_o'
16920 afs='$afs'
16921 afsroot='$afsroot'
16922 alignbytes='$alignbytes'
16923 ansi2knr='$ansi2knr'
16924 aphostname='$aphostname'
16925 api_revision='$api_revision'
16926 api_subversion='$api_subversion'
16927 api_version='$api_version'
16928 api_versionstring='$api_versionstring'
16929 ar='$ar'
16930 archlib='$archlib'
16931 archlibexp='$archlibexp'
16932 archname64='$archname64'
16933 archname='$archname'
16934 archobjs='$archobjs'
16935 awk='$awk'
16936 baserev='$baserev'
16937 bash='$bash'
16938 bin='$bin'
16939 bincompat5005='$bincompat5005'
16940 binexp='$binexp'
16941 bison='$bison'
16942 byacc='$byacc'
16943 byteorder='$byteorder'
16944 c='$c'
16945 castflags='$castflags'
16946 cat='$cat'
16947 cc='$cc'
16948 cccdlflags='$cccdlflags'
16949 ccdlflags='$ccdlflags'
16950 ccflags='$ccflags'
16951 ccflags_uselargefiles='$ccflags_uselargefiles'
16952 ccname='$ccname'
16953 ccsymbols='$ccsymbols'
16954 ccversion='$ccversion'
16955 cf_by='$cf_by'
16956 cf_email='$cf_email'
16957 cf_time='$cf_time'
16958 charsize='$charsize'
16959 chgrp='$chgrp'
16960 chmod='$chmod'
16961 chown='$chown'
16962 clocktype='$clocktype'
16963 comm='$comm'
16964 compress='$compress'
16965 contains='$contains'
16966 cp='$cp'
16967 cpio='$cpio'
16968 cpp='$cpp'
16969 cpp_stuff='$cpp_stuff'
16970 cppccsymbols='$cppccsymbols'
16971 cppflags='$cppflags'
16972 cpplast='$cpplast'
16973 cppminus='$cppminus'
16974 cpprun='$cpprun'
16975 cppstdin='$cppstdin'
16976 cppsymbols='$cppsymbols'
16977 cryptlib='$cryptlib'
16978 csh='$csh'
16979 d_Gconvert='$d_Gconvert'
16980 d_PRIEUldbl='$d_PRIEUldbl'
16981 d_PRIFUldbl='$d_PRIFUldbl'
16982 d_PRIGUldbl='$d_PRIGUldbl'
16983 d_PRIXU64='$d_PRIXU64'
16984 d_PRId64='$d_PRId64'
16985 d_PRIeldbl='$d_PRIeldbl'
16986 d_PRIfldbl='$d_PRIfldbl'
16987 d_PRIgldbl='$d_PRIgldbl'
16988 d_PRIi64='$d_PRIi64'
16989 d_PRIo64='$d_PRIo64'
16990 d_PRIu64='$d_PRIu64'
16991 d_PRIx64='$d_PRIx64'
16992 d_SCNfldbl='$d_SCNfldbl'
16993 d__fwalk='$d__fwalk'
16994 d_access='$d_access'
16995 d_accessx='$d_accessx'
16996 d_alarm='$d_alarm'
16997 d_archlib='$d_archlib'
16998 d_atolf='$d_atolf'
16999 d_atoll='$d_atoll'
17000 d_attribut='$d_attribut'
17001 d_bcmp='$d_bcmp'
17002 d_bcopy='$d_bcopy'
17003 d_bincompat5005='$d_bincompat5005'
17004 d_bsd='$d_bsd'
17005 d_bsdgetpgrp='$d_bsdgetpgrp'
17006 d_bsdsetpgrp='$d_bsdsetpgrp'
17007 d_bzero='$d_bzero'
17008 d_casti32='$d_casti32'
17009 d_castneg='$d_castneg'
17010 d_charvspr='$d_charvspr'
17011 d_chown='$d_chown'
17012 d_chroot='$d_chroot'
17013 d_chsize='$d_chsize'
17014 d_class='$d_class'
17015 d_closedir='$d_closedir'
17016 d_cmsghdr_s='$d_cmsghdr_s'
17017 d_const='$d_const'
17018 d_crypt='$d_crypt'
17019 d_csh='$d_csh'
17020 d_cuserid='$d_cuserid'
17021 d_dbl_dig='$d_dbl_dig'
17022 d_dbminitproto='$d_dbminitproto'
17023 d_difftime='$d_difftime'
17024 d_dirfd='$d_dirfd'
17025 d_dirnamlen='$d_dirnamlen'
17026 d_dlerror='$d_dlerror'
17027 d_dlopen='$d_dlopen'
17028 d_dlsymun='$d_dlsymun'
17029 d_dosuid='$d_dosuid'
17030 d_drand48proto='$d_drand48proto'
17031 d_dup2='$d_dup2'
17032 d_eaccess='$d_eaccess'
17033 d_endgrent='$d_endgrent'
17034 d_endhent='$d_endhent'
17035 d_endnent='$d_endnent'
17036 d_endpent='$d_endpent'
17037 d_endpwent='$d_endpwent'
17038 d_endsent='$d_endsent'
17039 d_eofnblk='$d_eofnblk'
17040 d_eunice='$d_eunice'
17041 d_fchdir='$d_fchdir'
17042 d_fchmod='$d_fchmod'
17043 d_fchown='$d_fchown'
17044 d_fcntl='$d_fcntl'
17045 d_fcntl_can_lock='$d_fcntl_can_lock'
17046 d_fd_macros='$d_fd_macros'
17047 d_fd_set='$d_fd_set'
17048 d_fds_bits='$d_fds_bits'
17049 d_fgetpos='$d_fgetpos'
17050 d_finite='$d_finite'
17051 d_finitel='$d_finitel'
17052 d_flexfnam='$d_flexfnam'
17053 d_flock='$d_flock'
17054 d_flockproto='$d_flockproto'
17055 d_fork='$d_fork'
17056 d_fp_class='$d_fp_class'
17057 d_fpathconf='$d_fpathconf'
17058 d_fpclass='$d_fpclass'
17059 d_fpclassify='$d_fpclassify'
17060 d_fpclassl='$d_fpclassl'
17061 d_fpos64_t='$d_fpos64_t'
17062 d_frexpl='$d_frexpl'
17063 d_fs_data_s='$d_fs_data_s'
17064 d_fseeko='$d_fseeko'
17065 d_fsetpos='$d_fsetpos'
17066 d_fstatfs='$d_fstatfs'
17067 d_fstatvfs='$d_fstatvfs'
17068 d_fsync='$d_fsync'
17069 d_ftello='$d_ftello'
17070 d_ftime='$d_ftime'
17071 d_getcwd='$d_getcwd'
17072 d_getespwnam='$d_getespwnam'
17073 d_getfsstat='$d_getfsstat'
17074 d_getgrent='$d_getgrent'
17075 d_getgrps='$d_getgrps'
17076 d_gethbyaddr='$d_gethbyaddr'
17077 d_gethbyname='$d_gethbyname'
17078 d_gethent='$d_gethent'
17079 d_gethname='$d_gethname'
17080 d_gethostprotos='$d_gethostprotos'
17081 d_getitimer='$d_getitimer'
17082 d_getlogin='$d_getlogin'
17083 d_getmnt='$d_getmnt'
17084 d_getmntent='$d_getmntent'
17085 d_getnbyaddr='$d_getnbyaddr'
17086 d_getnbyname='$d_getnbyname'
17087 d_getnent='$d_getnent'
17088 d_getnetprotos='$d_getnetprotos'
17089 d_getpagsz='$d_getpagsz'
17090 d_getpbyname='$d_getpbyname'
17091 d_getpbynumber='$d_getpbynumber'
17092 d_getpent='$d_getpent'
17093 d_getpgid='$d_getpgid'
17094 d_getpgrp2='$d_getpgrp2'
17095 d_getpgrp='$d_getpgrp'
17096 d_getppid='$d_getppid'
17097 d_getprior='$d_getprior'
17098 d_getprotoprotos='$d_getprotoprotos'
17099 d_getprpwnam='$d_getprpwnam'
17100 d_getpwent='$d_getpwent'
17101 d_getsbyname='$d_getsbyname'
17102 d_getsbyport='$d_getsbyport'
17103 d_getsent='$d_getsent'
17104 d_getservprotos='$d_getservprotos'
17105 d_getspnam='$d_getspnam'
17106 d_gettimeod='$d_gettimeod'
17107 d_gnulibc='$d_gnulibc'
17108 d_grpasswd='$d_grpasswd'
17109 d_hasmntopt='$d_hasmntopt'
17110 d_htonl='$d_htonl'
17111 d_index='$d_index'
17112 d_inetaton='$d_inetaton'
17113 d_int64_t='$d_int64_t'
17114 d_isascii='$d_isascii'
17115 d_isfinite='$d_isfinite'
17116 d_isinf='$d_isinf'
17117 d_isnan='$d_isnan'
17118 d_isnanl='$d_isnanl'
17119 d_killpg='$d_killpg'
17120 d_lchown='$d_lchown'
17121 d_ldbl_dig='$d_ldbl_dig'
17122 d_link='$d_link'
17123 d_locconv='$d_locconv'
17124 d_lockf='$d_lockf'
17125 d_longdbl='$d_longdbl'
17126 d_longlong='$d_longlong'
17127 d_lseekproto='$d_lseekproto'
17128 d_lstat='$d_lstat'
17129 d_madvise='$d_madvise'
17130 d_mblen='$d_mblen'
17131 d_mbstowcs='$d_mbstowcs'
17132 d_mbtowc='$d_mbtowc'
17133 d_memchr='$d_memchr'
17134 d_memcmp='$d_memcmp'
17135 d_memcpy='$d_memcpy'
17136 d_memmove='$d_memmove'
17137 d_memset='$d_memset'
17138 d_mkdir='$d_mkdir'
17139 d_mkdtemp='$d_mkdtemp'
17140 d_mkfifo='$d_mkfifo'
17141 d_mkstemp='$d_mkstemp'
17142 d_mkstemps='$d_mkstemps'
17143 d_mktime='$d_mktime'
17144 d_mmap='$d_mmap'
17145 d_modfl='$d_modfl'
17146 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17147 d_mprotect='$d_mprotect'
17148 d_msg='$d_msg'
17149 d_msg_ctrunc='$d_msg_ctrunc'
17150 d_msg_dontroute='$d_msg_dontroute'
17151 d_msg_oob='$d_msg_oob'
17152 d_msg_peek='$d_msg_peek'
17153 d_msg_proxy='$d_msg_proxy'
17154 d_msgctl='$d_msgctl'
17155 d_msgget='$d_msgget'
17156 d_msghdr_s='$d_msghdr_s'
17157 d_msgrcv='$d_msgrcv'
17158 d_msgsnd='$d_msgsnd'
17159 d_msync='$d_msync'
17160 d_munmap='$d_munmap'
17161 d_mymalloc='$d_mymalloc'
17162 d_nice='$d_nice'
17163 d_nl_langinfo='$d_nl_langinfo'
17164 d_nv_preserves_uv='$d_nv_preserves_uv'
17165 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17166 d_off64_t='$d_off64_t'
17167 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17168 d_oldpthreads='$d_oldpthreads'
17169 d_oldsock='$d_oldsock'
17170 d_open3='$d_open3'
17171 d_pathconf='$d_pathconf'
17172 d_pause='$d_pause'
17173 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17174 d_phostname='$d_phostname'
17175 d_pipe='$d_pipe'
17176 d_poll='$d_poll'
17177 d_portable='$d_portable'
17178 d_procselfexe='$d_procselfexe'
17179 d_pthread_atfork='$d_pthread_atfork'
17180 d_pthread_yield='$d_pthread_yield'
17181 d_pwage='$d_pwage'
17182 d_pwchange='$d_pwchange'
17183 d_pwclass='$d_pwclass'
17184 d_pwcomment='$d_pwcomment'
17185 d_pwexpire='$d_pwexpire'
17186 d_pwgecos='$d_pwgecos'
17187 d_pwpasswd='$d_pwpasswd'
17188 d_pwquota='$d_pwquota'
17189 d_qgcvt='$d_qgcvt'
17190 d_quad='$d_quad'
17191 d_readdir='$d_readdir'
17192 d_readlink='$d_readlink'
17193 d_readv='$d_readv'
17194 d_recvmsg='$d_recvmsg'
17195 d_rename='$d_rename'
17196 d_rewinddir='$d_rewinddir'
17197 d_rmdir='$d_rmdir'
17198 d_safebcpy='$d_safebcpy'
17199 d_safemcpy='$d_safemcpy'
17200 d_sanemcmp='$d_sanemcmp'
17201 d_sbrkproto='$d_sbrkproto'
17202 d_sched_yield='$d_sched_yield'
17203 d_scm_rights='$d_scm_rights'
17204 d_seekdir='$d_seekdir'
17205 d_select='$d_select'
17206 d_sem='$d_sem'
17207 d_semctl='$d_semctl'
17208 d_semctl_semid_ds='$d_semctl_semid_ds'
17209 d_semctl_semun='$d_semctl_semun'
17210 d_semget='$d_semget'
17211 d_semop='$d_semop'
17212 d_sendmsg='$d_sendmsg'
17213 d_setegid='$d_setegid'
17214 d_seteuid='$d_seteuid'
17215 d_setgrent='$d_setgrent'
17216 d_setgrps='$d_setgrps'
17217 d_sethent='$d_sethent'
17218 d_setitimer='$d_setitimer'
17219 d_setlinebuf='$d_setlinebuf'
17220 d_setlocale='$d_setlocale'
17221 d_setnent='$d_setnent'
17222 d_setpent='$d_setpent'
17223 d_setpgid='$d_setpgid'
17224 d_setpgrp2='$d_setpgrp2'
17225 d_setpgrp='$d_setpgrp'
17226 d_setprior='$d_setprior'
17227 d_setproctitle='$d_setproctitle'
17228 d_setpwent='$d_setpwent'
17229 d_setregid='$d_setregid'
17230 d_setresgid='$d_setresgid'
17231 d_setresuid='$d_setresuid'
17232 d_setreuid='$d_setreuid'
17233 d_setrgid='$d_setrgid'
17234 d_setruid='$d_setruid'
17235 d_setsent='$d_setsent'
17236 d_setsid='$d_setsid'
17237 d_setvbuf='$d_setvbuf'
17238 d_sfio='$d_sfio'
17239 d_shm='$d_shm'
17240 d_shmat='$d_shmat'
17241 d_shmatprototype='$d_shmatprototype'
17242 d_shmctl='$d_shmctl'
17243 d_shmdt='$d_shmdt'
17244 d_shmget='$d_shmget'
17245 d_sigaction='$d_sigaction'
17246 d_sigprocmask='$d_sigprocmask'
17247 d_sigsetjmp='$d_sigsetjmp'
17248 d_sockatmark='$d_sockatmark'
17249 d_sockatmarkproto='$d_sockatmarkproto'
17250 d_socket='$d_socket'
17251 d_socklen_t='$d_socklen_t'
17252 d_sockpair='$d_sockpair'
17253 d_socks5_init='$d_socks5_init'
17254 d_sqrtl='$d_sqrtl'
17255 d_sresgproto='$d_sresgproto'
17256 d_sresuproto='$d_sresuproto'
17257 d_statblks='$d_statblks'
17258 d_statfs_f_flags='$d_statfs_f_flags'
17259 d_statfs_s='$d_statfs_s'
17260 d_statvfs='$d_statvfs'
17261 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17262 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17263 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17264 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17265 d_stdio_stream_array='$d_stdio_stream_array'
17266 d_stdiobase='$d_stdiobase'
17267 d_stdstdio='$d_stdstdio'
17268 d_strchr='$d_strchr'
17269 d_strcoll='$d_strcoll'
17270 d_strctcpy='$d_strctcpy'
17271 d_strerrm='$d_strerrm'
17272 d_strerror='$d_strerror'
17273 d_strftime='$d_strftime'
17274 d_strtod='$d_strtod'
17275 d_strtol='$d_strtol'
17276 d_strtold='$d_strtold'
17277 d_strtoll='$d_strtoll'
17278 d_strtoq='$d_strtoq'
17279 d_strtoul='$d_strtoul'
17280 d_strtoull='$d_strtoull'
17281 d_strtouq='$d_strtouq'
17282 d_strxfrm='$d_strxfrm'
17283 d_suidsafe='$d_suidsafe'
17284 d_symlink='$d_symlink'
17285 d_syscall='$d_syscall'
17286 d_syscallproto='$d_syscallproto'
17287 d_sysconf='$d_sysconf'
17288 d_sysernlst='$d_sysernlst'
17289 d_syserrlst='$d_syserrlst'
17290 d_system='$d_system'
17291 d_tcgetpgrp='$d_tcgetpgrp'
17292 d_tcsetpgrp='$d_tcsetpgrp'
17293 d_telldir='$d_telldir'
17294 d_telldirproto='$d_telldirproto'
17295 d_time='$d_time'
17296 d_times='$d_times'
17297 d_truncate='$d_truncate'
17298 d_tzname='$d_tzname'
17299 d_u32align='$d_u32align'
17300 d_ualarm='$d_ualarm'
17301 d_umask='$d_umask'
17302 d_uname='$d_uname'
17303 d_union_semun='$d_union_semun'
17304 d_unordered='$d_unordered'
17305 d_usleep='$d_usleep'
17306 d_usleepproto='$d_usleepproto'
17307 d_ustat='$d_ustat'
17308 d_vendorarch='$d_vendorarch'
17309 d_vendorbin='$d_vendorbin'
17310 d_vendorlib='$d_vendorlib'
17311 d_vfork='$d_vfork'
17312 d_void_closedir='$d_void_closedir'
17313 d_voidsig='$d_voidsig'
17314 d_voidtty='$d_voidtty'
17315 d_volatile='$d_volatile'
17316 d_vprintf='$d_vprintf'
17317 d_wait4='$d_wait4'
17318 d_waitpid='$d_waitpid'
17319 d_wcstombs='$d_wcstombs'
17320 d_wctomb='$d_wctomb'
17321 d_writev='$d_writev'
17322 d_xenix='$d_xenix'
17323 date='$date'
17324 db_hashtype='$db_hashtype'
17325 db_prefixtype='$db_prefixtype'
17326 db_version_major='$db_version_major'
17327 db_version_minor='$db_version_minor'
17328 db_version_patch='$db_version_patch'
17329 defvoidused='$defvoidused'
17330 direntrytype='$direntrytype'
17331 dlext='$dlext'
17332 dlsrc='$dlsrc'
17333 doublesize='$doublesize'
17334 drand01='$drand01'
17335 dynamic_ext='$dynamic_ext'
17336 eagain='$eagain'
17337 ebcdic='$ebcdic'
17338 echo='$echo'
17339 egrep='$egrep'
17340 emacs='$emacs'
17341 eunicefix='$eunicefix'
17342 exe_ext='$exe_ext'
17343 expr='$expr'
17344 extensions='$extensions'
17345 extras='$extras'
17346 fflushNULL='$fflushNULL'
17347 fflushall='$fflushall'
17348 find='$find'
17349 firstmakefile='$firstmakefile'
17350 flex='$flex'
17351 fpossize='$fpossize'
17352 fpostype='$fpostype'
17353 freetype='$freetype'
17354 from='$from'
17355 full_ar='$full_ar'
17356 full_csh='$full_csh'
17357 full_sed='$full_sed'
17358 gccosandvers='$gccosandvers'
17359 gccversion='$gccversion'
17360 gidformat='$gidformat'
17361 gidsign='$gidsign'
17362 gidsize='$gidsize'
17363 gidtype='$gidtype'
17364 glibpth='$glibpth'
17365 gmake='$gmake'
17366 grep='$grep'
17367 groupcat='$groupcat'
17368 groupstype='$groupstype'
17369 gzip='$gzip'
17370 h_fcntl='$h_fcntl'
17371 h_sysfile='$h_sysfile'
17372 hint='$hint'
17373 hostcat='$hostcat'
17374 i16size='$i16size'
17375 i16type='$i16type'
17376 i32size='$i32size'
17377 i32type='$i32type'
17378 i64size='$i64size'
17379 i64type='$i64type'
17380 i8size='$i8size'
17381 i8type='$i8type'
17382 i_arpainet='$i_arpainet'
17383 i_bsdioctl='$i_bsdioctl'
17384 i_db='$i_db'
17385 i_dbm='$i_dbm'
17386 i_dirent='$i_dirent'
17387 i_dld='$i_dld'
17388 i_dlfcn='$i_dlfcn'
17389 i_fcntl='$i_fcntl'
17390 i_float='$i_float'
17391 i_fp='$i_fp'
17392 i_fp_class='$i_fp_class'
17393 i_gdbm='$i_gdbm'
17394 i_grp='$i_grp'
17395 i_ieeefp='$i_ieeefp'
17396 i_inttypes='$i_inttypes'
17397 i_langinfo='$i_langinfo'
17398 i_libutil='$i_libutil'
17399 i_limits='$i_limits'
17400 i_locale='$i_locale'
17401 i_machcthr='$i_machcthr'
17402 i_malloc='$i_malloc'
17403 i_math='$i_math'
17404 i_memory='$i_memory'
17405 i_mntent='$i_mntent'
17406 i_ndbm='$i_ndbm'
17407 i_netdb='$i_netdb'
17408 i_neterrno='$i_neterrno'
17409 i_netinettcp='$i_netinettcp'
17410 i_niin='$i_niin'
17411 i_poll='$i_poll'
17412 i_prot='$i_prot'
17413 i_pthread='$i_pthread'
17414 i_pwd='$i_pwd'
17415 i_rpcsvcdbm='$i_rpcsvcdbm'
17416 i_sfio='$i_sfio'
17417 i_sgtty='$i_sgtty'
17418 i_shadow='$i_shadow'
17419 i_socks='$i_socks'
17420 i_stdarg='$i_stdarg'
17421 i_stddef='$i_stddef'
17422 i_stdlib='$i_stdlib'
17423 i_string='$i_string'
17424 i_sunmath='$i_sunmath'
17425 i_sysaccess='$i_sysaccess'
17426 i_sysdir='$i_sysdir'
17427 i_sysfile='$i_sysfile'
17428 i_sysfilio='$i_sysfilio'
17429 i_sysin='$i_sysin'
17430 i_sysioctl='$i_sysioctl'
17431 i_syslog='$i_syslog'
17432 i_sysmman='$i_sysmman'
17433 i_sysmode='$i_sysmode'
17434 i_sysmount='$i_sysmount'
17435 i_sysndir='$i_sysndir'
17436 i_sysparam='$i_sysparam'
17437 i_sysresrc='$i_sysresrc'
17438 i_syssecrt='$i_syssecrt'
17439 i_sysselct='$i_sysselct'
17440 i_syssockio='$i_syssockio'
17441 i_sysstat='$i_sysstat'
17442 i_sysstatfs='$i_sysstatfs'
17443 i_sysstatvfs='$i_sysstatvfs'
17444 i_systime='$i_systime'
17445 i_systimek='$i_systimek'
17446 i_systimes='$i_systimes'
17447 i_systypes='$i_systypes'
17448 i_sysuio='$i_sysuio'
17449 i_sysun='$i_sysun'
17450 i_sysutsname='$i_sysutsname'
17451 i_sysvfs='$i_sysvfs'
17452 i_syswait='$i_syswait'
17453 i_termio='$i_termio'
17454 i_termios='$i_termios'
17455 i_time='$i_time'
17456 i_unistd='$i_unistd'
17457 i_ustat='$i_ustat'
17458 i_utime='$i_utime'
17459 i_values='$i_values'
17460 i_varargs='$i_varargs'
17461 i_varhdr='$i_varhdr'
17462 i_vfork='$i_vfork'
17463 ignore_versioned_solibs='$ignore_versioned_solibs'
17464 inc_version_list='$inc_version_list'
17465 inc_version_list_init='$inc_version_list_init'
17466 incpath='$incpath'
17467 inews='$inews'
17468 installarchlib='$installarchlib'
17469 installbin='$installbin'
17470 installman1dir='$installman1dir'
17471 installman3dir='$installman3dir'
17472 installprefix='$installprefix'
17473 installprefixexp='$installprefixexp'
17474 installprivlib='$installprivlib'
17475 installscript='$installscript'
17476 installsitearch='$installsitearch'
17477 installsitebin='$installsitebin'
17478 installsitelib='$installsitelib'
17479 installstyle='$installstyle'
17480 installusrbinperl='$installusrbinperl'
17481 installvendorarch='$installvendorarch'
17482 installvendorbin='$installvendorbin'
17483 installvendorlib='$installvendorlib'
17484 intsize='$intsize'
17485 issymlink='$issymlink'
17486 ivdformat='$ivdformat'
17487 ivsize='$ivsize'
17488 ivtype='$ivtype'
17489 known_extensions='$known_extensions'
17490 ksh='$ksh'
17491 ld='$ld'
17492 lddlflags='$lddlflags'
17493 ldflags='$ldflags'
17494 ldflags_uselargefiles='$ldflags_uselargefiles'
17495 ldlibpthname='$ldlibpthname'
17496 less='$less'
17497 lib_ext='$lib_ext'
17498 libc='$libc'
17499 libperl='$libperl'
17500 libpth='$libpth'
17501 libs='$libs'
17502 libsdirs='$libsdirs'
17503 libsfiles='$libsfiles'
17504 libsfound='$libsfound'
17505 libspath='$libspath'
17506 libswanted='$libswanted'
17507 libswanted_uselargefiles='$libswanted_uselargefiles'
17508 line='$line'
17509 lint='$lint'
17510 lkflags='$lkflags'
17511 ln='$ln'
17512 lns='$lns'
17513 locincpth='$locincpth'
17514 loclibpth='$loclibpth'
17515 longdblsize='$longdblsize'
17516 longlongsize='$longlongsize'
17517 longsize='$longsize'
17518 lp='$lp'
17519 lpr='$lpr'
17520 ls='$ls'
17521 lseeksize='$lseeksize'
17522 lseektype='$lseektype'
17523 mail='$mail'
17524 mailx='$mailx'
17525 make='$make'
17526 make_set_make='$make_set_make'
17527 mallocobj='$mallocobj'
17528 mallocsrc='$mallocsrc'
17529 malloctype='$malloctype'
17530 man1dir='$man1dir'
17531 man1direxp='$man1direxp'
17532 man1ext='$man1ext'
17533 man3dir='$man3dir'
17534 man3direxp='$man3direxp'
17535 man3ext='$man3ext'
17536 mips_type='$mips_type'
17537 mkdir='$mkdir'
17538 mmaptype='$mmaptype'
17539 modetype='$modetype'
17540 more='$more'
17541 multiarch='$multiarch'
17542 mv='$mv'
17543 myarchname='$myarchname'
17544 mydomain='$mydomain'
17545 myhostname='$myhostname'
17546 myuname='$myuname'
17547 n='$n'
17548 need_va_copy='$need_va_copy'
17549 netdb_hlen_type='$netdb_hlen_type'
17550 netdb_host_type='$netdb_host_type'
17551 netdb_name_type='$netdb_name_type'
17552 netdb_net_type='$netdb_net_type'
17553 nm='$nm'
17554 nm_opt='$nm_opt'
17555 nm_so_opt='$nm_so_opt'
17556 nonxs_ext='$nonxs_ext'
17557 nroff='$nroff'
17558 nvEUformat='$nvEUformat'
17559 nvFUformat='$nvFUformat'
17560 nvGUformat='$nvGUformat'
17561 nveformat='$nveformat'
17562 nvfformat='$nvfformat'
17563 nvgformat='$nvgformat'
17564 nvsize='$nvsize'
17565 nvtype='$nvtype'
17566 o_nonblock='$o_nonblock'
17567 obj_ext='$obj_ext'
17568 old_pthread_create_joinable='$old_pthread_create_joinable'
17569 optimize='$optimize'
17570 orderlib='$orderlib'
17571 osname='$osname'
17572 osvers='$osvers'
17573 otherlibdirs='$otherlibdirs'
17574 package='$package'
17575 pager='$pager'
17576 passcat='$passcat'
17577 patchlevel='$patchlevel'
17578 path_sep='$path_sep'
17579 perl5='$perl5'
17580 perl='$perl'
17581 perl_patchlevel='$perl_patchlevel'
17582 perladmin='$perladmin'
17583 perllibs='$perllibs'
17584 perlpath='$perlpath'
17585 pg='$pg'
17586 phostname='$phostname'
17587 pidtype='$pidtype'
17588 plibpth='$plibpth'
17589 pm_apiversion='$pm_apiversion'
17590 pmake='$pmake'
17591 pr='$pr'
17592 prefix='$prefix'
17593 prefixexp='$prefixexp'
17594 privlib='$privlib'
17595 privlibexp='$privlibexp'
17596 procselfexe='$procselfexe'
17597 prototype='$prototype'
17598 ptrsize='$ptrsize'
17599 quadkind='$quadkind'
17600 quadtype='$quadtype'
17601 randbits='$randbits'
17602 randfunc='$randfunc'
17603 randseedtype='$randseedtype'
17604 ranlib='$ranlib'
17605 rd_nodata='$rd_nodata'
17606 revision='$revision'
17607 rm='$rm'
17608 rmail='$rmail'
17609 run='$run'
17610 runnm='$runnm'
17611 sPRIEUldbl='$sPRIEUldbl'
17612 sPRIFUldbl='$sPRIFUldbl'
17613 sPRIGUldbl='$sPRIGUldbl'
17614 sPRIXU64='$sPRIXU64'
17615 sPRId64='$sPRId64'
17616 sPRIeldbl='$sPRIeldbl'
17617 sPRIfldbl='$sPRIfldbl'
17618 sPRIgldbl='$sPRIgldbl'
17619 sPRIi64='$sPRIi64'
17620 sPRIo64='$sPRIo64'
17621 sPRIu64='$sPRIu64'
17622 sPRIx64='$sPRIx64'
17623 sSCNfldbl='$sSCNfldbl'
17624 sched_yield='$sched_yield'
17625 scriptdir='$scriptdir'
17626 scriptdirexp='$scriptdirexp'
17627 sed='$sed'
17628 seedfunc='$seedfunc'
17629 selectminbits='$selectminbits'
17630 selecttype='$selecttype'
17631 sendmail='$sendmail'
17632 sh='$sh'
17633 shar='$shar'
17634 sharpbang='$sharpbang'
17635 shmattype='$shmattype'
17636 shortsize='$shortsize'
17637 shrpenv='$shrpenv'
17638 shsharp='$shsharp'
17639 sig_count='$sig_count'
17640 sig_name='$sig_name'
17641 sig_name_init='$sig_name_init'
17642 sig_num='$sig_num'
17643 sig_num_init='$sig_num_init'
17644 sig_size='$sig_size'
17645 signal_t='$signal_t'
17646 sitearch='$sitearch'
17647 sitearchexp='$sitearchexp'
17648 sitebin='$sitebin'
17649 sitebinexp='$sitebinexp'
17650 sitelib='$sitelib'
17651 sitelib_stem='$sitelib_stem'
17652 sitelibexp='$sitelibexp'
17653 siteprefix='$siteprefix'
17654 siteprefixexp='$siteprefixexp'
17655 sizesize='$sizesize'
17656 sizetype='$sizetype'
17657 sleep='$sleep'
17658 smail='$smail'
17659 so='$so'
17660 sockethdr='$sockethdr'
17661 socketlib='$socketlib'
17662 socksizetype='$socksizetype'
17663 sort='$sort'
17664 spackage='$spackage'
17665 spitshell='$spitshell'
17666 src='$src'
17667 ssizetype='$ssizetype'
17668 startperl='$startperl'
17669 startsh='$startsh'
17670 static_ext='$static_ext'
17671 stdchar='$stdchar'
17672 stdio_base='$stdio_base'
17673 stdio_bufsiz='$stdio_bufsiz'
17674 stdio_cnt='$stdio_cnt'
17675 stdio_filbuf='$stdio_filbuf'
17676 stdio_ptr='$stdio_ptr'
17677 stdio_stream_array='$stdio_stream_array'
17678 strings='$strings'
17679 submit='$submit'
17680 subversion='$subversion'
17681 sysman='$sysman'
17682 tail='$tail'
17683 tar='$tar'
17684 targetarch='$targetarch'
17685 tbl='$tbl'
17686 tee='$tee'
17687 test='$test'
17688 timeincl='$timeincl'
17689 timetype='$timetype'
17690 to='$to'
17691 touch='$touch'
17692 tr='$tr'
17693 trnl='$trnl'
17694 troff='$troff'
17695 u16size='$u16size'
17696 u16type='$u16type'
17697 u32size='$u32size'
17698 u32type='$u32type'
17699 u64size='$u64size'
17700 u64type='$u64type'
17701 u8size='$u8size'
17702 u8type='$u8type'
17703 uidformat='$uidformat'
17704 uidsign='$uidsign'
17705 uidsize='$uidsize'
17706 uidtype='$uidtype'
17707 uname='$uname'
17708 uniq='$uniq'
17709 uquadtype='$uquadtype'
17710 use5005threads='$use5005threads'
17711 use64bitall='$use64bitall'
17712 use64bitint='$use64bitint'
17713 usecrosscompile='$usecrosscompile'
17714 usedl='$usedl'
17715 useithreads='$useithreads'
17716 uselargefiles='$uselargefiles'
17717 uselongdouble='$uselongdouble'
17718 usemorebits='$usemorebits'
17719 usemultiplicity='$usemultiplicity'
17720 usemymalloc='$usemymalloc'
17721 usenm='$usenm'
17722 useopcode='$useopcode'
17723 useperlio='$useperlio'
17724 useposix='$useposix'
17725 usereentrant='$usereentrant'
17726 usesfio='$usesfio'
17727 useshrplib='$useshrplib'
17728 usesocks='$usesocks'
17729 usethreads='$usethreads'
17730 usevendorprefix='$usevendorprefix'
17731 usevfork='$usevfork'
17732 usrinc='$usrinc'
17733 uuname='$uuname'
17734 uvXUformat='$uvXUformat'
17735 uvoformat='$uvoformat'
17736 uvsize='$uvsize'
17737 uvtype='$uvtype'
17738 uvuformat='$uvuformat'
17739 uvxformat='$uvxformat'
17740 vendorarch='$vendorarch'
17741 vendorarchexp='$vendorarchexp'
17742 vendorbin='$vendorbin'
17743 vendorbinexp='$vendorbinexp'
17744 vendorlib='$vendorlib'
17745 vendorlib_stem='$vendorlib_stem'
17746 vendorlibexp='$vendorlibexp'
17747 vendorprefix='$vendorprefix'
17748 vendorprefixexp='$vendorprefixexp'
17749 version='$version'
17750 version_patchlevel_string='$version_patchlevel_string'
17751 versiononly='$versiononly'
17752 vi='$vi'
17753 voidflags='$voidflags'
17754 xlibpth='$xlibpth'
17755 xs_apiversion='$xs_apiversion'
17756 yacc='$yacc'
17757 yaccflags='$yaccflags'
17758 zcat='$zcat'
17759 zip='$zip'
17760 EOT
17761
17762 : Add in command line options if available
17763 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17764
17765 : add special variables
17766 $test -f $src/patchlevel.h && \
17767 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17768 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17769 echo "PERL_CONFIG_SH=true" >>config.sh
17770
17771 : propagate old symbols
17772 if $test -f UU/config.sh; then
17773         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17774         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17775         $sort | $uniq -u >UU/oldsyms
17776         set X `cat UU/oldsyms`
17777         shift
17778         case $# in
17779         0) ;;
17780         *)
17781                 cat <<EOM
17782 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17783 EOM
17784                 echo "# Variables propagated from previous config.sh file." >>config.sh
17785                 for sym in `cat UU/oldsyms`; do
17786                         echo "    Propagating $hint variable "'$'"$sym..."
17787                         eval 'tmp="$'"${sym}"'"'
17788                         echo "$tmp" | \
17789                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17790                 done
17791                 ;;
17792         esac
17793 fi
17794
17795 : Finish up by extracting the .SH files
17796 case "$alldone" in
17797 exit)
17798         $rm -rf UU
17799         echo "Extraction done."
17800         exit 0
17801         ;;
17802 cont)
17803         ;;
17804 '')
17805         dflt=''
17806         nostick=true
17807         $cat <<EOM
17808
17809 If you'd like to make any changes to the config.sh file before I begin
17810 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17811
17812 EOM
17813         rp="Press return or use a shell escape to edit config.sh:"
17814         . UU/myread
17815         nostick=''
17816         case "$ans" in
17817         '') ;;
17818         *) : in case they cannot read
17819                 sh 1>&4 -c "$ans";;
17820         esac
17821         ;;
17822 esac
17823
17824 : if this fails, just run all the .SH files by hand
17825 . ./config.sh
17826
17827 echo " "
17828 exec 1>&4
17829 pwd=`pwd`
17830 . ./UU/extract
17831 cd "$pwd"
17832
17833 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17834         dflt=y
17835         case "$silent" in
17836         true) ;;
17837         *)
17838                 $cat <<EOM
17839
17840 Now you need to generate make dependencies by running "$make depend".
17841 You might prefer to run it in background: "$make depend > makedepend.out &"
17842 It can take a while, so you might not want to run it right now.
17843
17844 EOM
17845                 ;;
17846         esac
17847         rp="Run $make depend now?"
17848         . UU/myread
17849         case "$ans" in
17850         y*)
17851                 $make depend && echo "Now you must run '$make'."
17852                 ;;
17853         *)
17854                 echo "You must run '$make depend' then '$make'."
17855                 ;;
17856         esac
17857 elif test -f [Mm]akefile; then
17858         echo " "
17859         echo "Now you must run a $make."
17860 else
17861         echo "Configure done."
17862 fi
17863
17864 if $test -f Policy.sh; then
17865     $cat <<EOM
17866
17867 If you compile $package on a different machine or from a different object
17868 directory, copy the Policy.sh file from this object directory to the
17869 new one before you run Configure -- this will help you with most of
17870 the policy defaults.
17871
17872 EOM
17873 fi
17874 if $test -f config.msg; then
17875     echo "Hmm.  I also noted the following information while running:"
17876     echo " "
17877     $cat config.msg >&4
17878     $rm -f config.msg
17879 fi
17880 $rm -f kit*isdone ark*isdone
17881 $rm -rf UU
17882
17883 : End of Configure
17884