7c5a3c8405fcb291bed51ebecfac30fb413680d5
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Feb 15 17:48:38 EET 2002 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 i_systime=''
760 i_systimek=''
761 i_time=''
762 timeincl=''
763 i_unistd=''
764 i_ustat=''
765 i_utime=''
766 i_values=''
767 i_stdarg=''
768 i_varargs=''
769 i_varhdr=''
770 i_vfork=''
771 inc_version_list=''
772 inc_version_list_init=''
773 installprefix=''
774 installprefixexp=''
775 installstyle=''
776 installusrbinperl=''
777 intsize=''
778 longsize=''
779 shortsize=''
780 issymlink=''
781 libc=''
782 ldlibpthname=''
783 libperl=''
784 shrpenv=''
785 useshrplib=''
786 glibpth=''
787 libpth=''
788 loclibpth=''
789 plibpth=''
790 xlibpth=''
791 ignore_versioned_solibs=''
792 libs=''
793 libsdirs=''
794 libsfiles=''
795 libsfound=''
796 libspath=''
797 lns=''
798 d_PRIEUldbl=''
799 d_PRIFUldbl=''
800 d_PRIGUldbl=''
801 d_PRIeldbl=''
802 d_PRIfldbl=''
803 d_PRIgldbl=''
804 d_SCNfldbl=''
805 sPRIEUldbl=''
806 sPRIFUldbl=''
807 sPRIGUldbl=''
808 sPRIeldbl=''
809 sPRIfldbl=''
810 sPRIgldbl=''
811 sSCNfldbl=''
812 lseeksize=''
813 lseektype=''
814 make_set_make=''
815 d_mymalloc=''
816 freetype=''
817 mallocobj=''
818 mallocsrc=''
819 malloctype=''
820 usemymalloc=''
821 installman1dir=''
822 man1dir=''
823 man1direxp=''
824 man1ext=''
825 installman3dir=''
826 man3dir=''
827 man3direxp=''
828 man3ext=''
829 modetype=''
830 multiarch=''
831 mydomain=''
832 myhostname=''
833 phostname=''
834 c=''
835 n=''
836 d_eofnblk=''
837 eagain=''
838 o_nonblock=''
839 rd_nodata=''
840 need_va_copy=''
841 netdb_hlen_type=''
842 netdb_host_type=''
843 netdb_name_type=''
844 netdb_net_type=''
845 groupcat=''
846 hostcat=''
847 passcat=''
848 orderlib=''
849 ranlib=''
850 d_perl_otherlibdirs=''
851 otherlibdirs=''
852 package=''
853 spackage=''
854 pager=''
855 api_revision=''
856 api_subversion=''
857 api_version=''
858 api_versionstring=''
859 patchlevel=''
860 perl_patchlevel=''
861 revision=''
862 subversion=''
863 version=''
864 version_patchlevel_string=''
865 perl5=''
866 perladmin=''
867 perlpath=''
868 d_nv_preserves_uv=''
869 d_nv_preserves_uv_bits=''
870 i16size=''
871 i16type=''
872 i32size=''
873 i32type=''
874 i64size=''
875 i64type=''
876 i8size=''
877 i8type=''
878 ivsize=''
879 ivtype=''
880 nvsize=''
881 nvtype=''
882 u16size=''
883 u16type=''
884 u32size=''
885 u32type=''
886 u64size=''
887 u64type=''
888 u8size=''
889 u8type=''
890 uvsize=''
891 uvtype=''
892 ivdformat=''
893 nvEUformat=''
894 nvFUformat=''
895 nvGUformat=''
896 nveformat=''
897 nvfformat=''
898 nvgformat=''
899 uvXUformat=''
900 uvoformat=''
901 uvuformat=''
902 uvxformat=''
903 pidtype=''
904 prefix=''
905 prefixexp=''
906 installprivlib=''
907 privlib=''
908 privlibexp=''
909 prototype=''
910 ptrsize=''
911 d_PRIXU64=''
912 d_PRId64=''
913 d_PRIi64=''
914 d_PRIo64=''
915 d_PRIu64=''
916 d_PRIx64=''
917 sPRIXU64=''
918 sPRId64=''
919 sPRIi64=''
920 sPRIo64=''
921 sPRIu64=''
922 sPRIx64=''
923 d_quad=''
924 quadkind=''
925 quadtype=''
926 uquadtype=''
927 drand01=''
928 randbits=''
929 randfunc=''
930 randseedtype=''
931 seedfunc=''
932 installscript=''
933 scriptdir=''
934 scriptdirexp=''
935 selectminbits=''
936 selecttype=''
937 sh=''
938 sig_count=''
939 sig_name=''
940 sig_name_init=''
941 sig_num=''
942 sig_num_init=''
943 sig_size=''
944 installsitearch=''
945 sitearch=''
946 sitearchexp=''
947 installsitebin=''
948 sitebin=''
949 sitebinexp=''
950 installsitelib=''
951 sitelib=''
952 sitelib_stem=''
953 sitelibexp=''
954 siteprefix=''
955 siteprefixexp=''
956 sizesize=''
957 sizetype=''
958 so=''
959 socksizetype=''
960 sharpbang=''
961 shsharp=''
962 spitshell=''
963 src=''
964 ssizetype=''
965 startperl=''
966 startsh=''
967 stdchar=''
968 d_stdio_stream_array=''
969 stdio_stream_array=''
970 sysman=''
971 trnl=''
972 uidformat=''
973 uidsign=''
974 uidsize=''
975 uidtype=''
976 archname64=''
977 use64bitall=''
978 use64bitint=''
979 ccflags_uselargefiles=''
980 ldflags_uselargefiles=''
981 libswanted_uselargefiles=''
982 uselargefiles=''
983 uselongdouble=''
984 usemorebits=''
985 usemultiplicity=''
986 nm_opt=''
987 nm_so_opt=''
988 runnm=''
989 usenm=''
990 useperlio=''
991 usesocks=''
992 d_oldpthreads=''
993 use5005threads=''
994 useithreads=''
995 usereentrant=''
996 usethreads=''
997 incpath=''
998 mips_type=''
999 usrinc=''
1000 d_vendorarch=''
1001 installvendorarch=''
1002 vendorarch=''
1003 vendorarchexp=''
1004 d_vendorbin=''
1005 installvendorbin=''
1006 vendorbin=''
1007 vendorbinexp=''
1008 d_vendorlib=''
1009 installvendorlib=''
1010 vendorlib=''
1011 vendorlib_stem=''
1012 vendorlibexp=''
1013 usevendorprefix=''
1014 vendorprefix=''
1015 vendorprefixexp=''
1016 versiononly=''
1017 defvoidused=''
1018 voidflags=''
1019 pm_apiversion=''
1020 xs_apiversion=''
1021 yacc=''
1022 yaccflags=''
1023 CONFIG=''
1024
1025 define='define'
1026 undef='undef'
1027 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1028 rmlist=''
1029
1030 : We must find out about Eunice early
1031 eunicefix=':'
1032 if test -f /etc/unixtovms; then
1033         eunicefix=/etc/unixtovms
1034 fi
1035 if test -f /etc/unixtovms.exe; then
1036         eunicefix=/etc/unixtovms.exe
1037 fi
1038
1039 : Set executable suffix now -- needed before hints available
1040 : maybe Stratus VOS
1041 if test -f "/system/gnu_library/bin/ar.pm"; then
1042     _exe=".pm"
1043 fi
1044 : maybe dos djgpp
1045 if test -n "$DJGPP"; then
1046     _exe=".exe"
1047 fi
1048 : maybe os/2
1049 if test -d c:/. ; then
1050     _exe=".exe"
1051 fi
1052
1053 i_whoami=''
1054 ccname=''
1055 ccversion=''
1056 perllibs=''
1057 : set useposix=false in your hint file to disable the POSIX extension.
1058 useposix=true
1059 : set useopcode=false in your hint file to disable the Opcode extension.
1060 useopcode=true
1061 : Trailing extension.  Override this in a hint file, if needed.
1062 : Extra object files, if any, needed on this platform.
1063 archobjs=''
1064 archname=''
1065 : Possible local include directories to search.
1066 : Set locincpth to "" in a hint file to defeat local include searches.
1067 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1068 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1069 :
1070 : no include file wanted by default
1071 inclwanted=''
1072
1073 groupstype=''
1074 libnames=''
1075 : change the next line if compiling for Xenix/286 on Xenix/386
1076 xlibpth='/usr/lib/386 /lib/386'
1077 : Possible local library directories to search.
1078 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1079 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1080
1081 : general looking path for locating libraries
1082 glibpth="/lib /usr/lib $xlibpth"
1083 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1084 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1085 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1086
1087 : Private path used by Configure to find libraries.  Its value
1088 : is prepended to libpth. This variable takes care of special
1089 : machines, like the mips.  Usually, it should be empty.
1090 plibpth=''
1091
1092 : default library list
1093 libswanted=''
1094 : some systems want to use only the non-versioned libso:s
1095 ignore_versioned_solibs=''
1096 archname64=''
1097 ccflags_uselargefiles=''
1098 ldflags_uselargefiles=''
1099 libswanted_uselargefiles=''
1100 : set usemultiplicity on the Configure command line to enable multiplicity.
1101 : set usesocks on the Configure command line to enable socks.
1102 : set usethreads on the Configure command line to enable threads.
1103 usereentrant='undef'
1104 : full support for void wanted by default
1105 defvoidused=15
1106
1107 : List of libraries we want.
1108 : If anyone needs -lnet, put it in a hint file.
1109 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1110 libswanted="$libswanted dld ld sun m c cposix posix"
1111 libswanted="$libswanted ndir dir crypt sec"
1112 libswanted="$libswanted ucb bsd BSD PW x util"
1113 : We probably want to search /usr/shlib before most other libraries.
1114 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1115 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1116 glibpth="/usr/shlib $glibpth"
1117 : Do not use vfork unless overridden by a hint file.
1118 usevfork=false
1119
1120 : Find the basic shell for Bourne shell scripts
1121 case "$sh" in
1122 '')
1123         case "$SYSTYPE" in
1124         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1125         *) xxx='/bin/sh';;
1126         esac
1127         if test -f "$xxx"; then
1128                 sh="$xxx"
1129         else
1130                 : Build up a list and do a single loop so we can 'break' out.
1131                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1132                 for xxx in sh bash ksh pdksh ash; do
1133                         for p in $pth; do
1134                                 try="$try ${p}/${xxx}"
1135                         done
1136                 done
1137                 for xxx in $try; do
1138                         if test -f "$xxx"; then
1139                                 sh="$xxx";
1140                                 break
1141                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1142                                 sh="$xxx";
1143                                 break
1144                         elif test -f "$xxx.exe"; then
1145                                 sh="$xxx";
1146                                 break
1147                         fi
1148                 done
1149         fi
1150         ;;
1151 esac
1152
1153 case "$sh" in
1154 '')     cat >&2 <<EOM
1155 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1156
1157 Usually it's in /bin/sh.  How did you even get this far?
1158 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1159 we'll try to straighten this all out.
1160 EOM
1161         exit 1
1162         ;;
1163 esac
1164
1165 : see if sh knows # comments
1166 if `$sh -c '#' >/dev/null 2>&1`; then
1167         shsharp=true
1168         spitshell=cat
1169         xcat=/bin/cat
1170         test -f $xcat$_exe || xcat=/usr/bin/cat
1171         if test ! -f $xcat$_exe; then
1172                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1173                         if test -f $p/cat$_exe; then
1174                                 xcat=$p/cat
1175                                 break
1176                         fi
1177                 done
1178                 if test ! -f $xcat$_exe; then
1179                         echo "Can't find cat anywhere!"
1180                         exit 1
1181                 fi
1182         fi
1183         echo "#!$xcat" >sharp
1184         $eunicefix sharp
1185         chmod +x sharp
1186         ./sharp > today
1187         if test -s today; then
1188                 sharpbang='#!'
1189         else
1190                 echo "#! $xcat" > sharp
1191                 $eunicefix sharp
1192                 chmod +x sharp
1193                 ./sharp > today
1194                 if test -s today; then
1195                         sharpbang='#! '
1196                 else
1197                         sharpbang=': use '
1198                 fi
1199         fi
1200 else
1201         echo " "
1202         echo "Your $sh doesn't grok # comments--I will strip them later on."
1203         shsharp=false
1204         cd ..
1205         echo "exec grep -v '^[  ]*#'" >spitshell
1206         chmod +x spitshell
1207         $eunicefix spitshell
1208         spitshell=`pwd`/spitshell
1209         cd UU
1210         echo "I presume that if # doesn't work, #! won't work either!"
1211         sharpbang=': use '
1212 fi
1213 rm -f sharp today
1214
1215 : figure out how to guarantee sh startup
1216 case "$startsh" in
1217 '') startsh=${sharpbang}${sh} ;;
1218 *)
1219 esac
1220 cat >sharp <<EOSS
1221 $startsh
1222 set abc
1223 test "$?abc" != 1
1224 EOSS
1225
1226 chmod +x sharp
1227 $eunicefix sharp
1228 if ./sharp; then
1229         : echo "Yup, it does."
1230 else
1231         echo "Hmm... '$startsh' does not guarantee sh startup..."
1232         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1233 fi
1234 rm -f sharp
1235
1236
1237 : Save command line options in file UU/cmdline.opt for later use in
1238 : generating config.sh.
1239 cat > cmdline.opt <<EOSH
1240 # Configure command line arguments.
1241 config_arg0='$0'
1242 config_args='$*'
1243 config_argc=$#
1244 EOSH
1245 argn=1
1246 args_exp=''
1247 args_sep=''
1248 for arg in "$@"; do
1249         cat >>cmdline.opt <<EOSH
1250 config_arg$argn='$arg'
1251 EOSH
1252         # Extreme backslashitis: replace each ' by '"'"'
1253         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1254 $arg
1255 EOC
1256         arg_exp=`cat cmdl.opt`
1257         args_exp="$args_exp$args_sep'$arg_exp'"
1258         argn=`expr $argn + 1`
1259         args_sep=' '
1260 done
1261 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1262 # used by ./hints/os2.sh
1263 rm -f cmdl.opt
1264
1265 : produce awk script to parse command line options
1266 cat >options.awk <<'EOF'
1267 BEGIN {
1268         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1269
1270         len = length(optstr);
1271         for (i = 1; i <= len; i++) {
1272                 c = substr(optstr, i, 1);
1273                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1274                 if (a == ":") {
1275                         arg[c] = 1;
1276                         i++;
1277                 }
1278                 opt[c] = 1;
1279         }
1280 }
1281 {
1282         expect = 0;
1283         str = $0;
1284         if (substr(str, 1, 1) != "-") {
1285                 printf("'%s'\n", str);
1286                 next;
1287         }
1288         len = length($0);
1289         for (i = 2; i <= len; i++) {
1290                 c = substr(str, i, 1);
1291                 if (!opt[c]) {
1292                         printf("-%s\n", substr(str, i));
1293                         next;
1294                 }
1295                 printf("-%s\n", c);
1296                 if (arg[c]) {
1297                         if (i < len)
1298                                 printf("'%s'\n", substr(str, i + 1));
1299                         else
1300                                 expect = 1;
1301                         next;
1302                 }
1303         }
1304 }
1305 END {
1306         if (expect)
1307                 print "?";
1308 }
1309 EOF
1310
1311 : process the command line options
1312 set X `for arg in "$@"; do echo "X$arg"; done |
1313         sed -e s/X// | awk -f options.awk`
1314 eval "set $*"
1315 shift
1316 rm -f options.awk
1317
1318 : set up default values
1319 fastread=''
1320 reuseval=false
1321 config_sh=''
1322 alldone=''
1323 error=''
1324 silent=''
1325 extractsh=''
1326 override=''
1327 knowitall=''
1328 rm -f optdef.sh posthint.sh
1329 cat >optdef.sh <<EOS
1330 $startsh
1331 EOS
1332
1333
1334 : option parsing
1335 while test $# -gt 0; do
1336         case "$1" in
1337         -d) shift; fastread=yes;;
1338         -e) shift; alldone=cont;;
1339         -f)
1340                 shift
1341                 cd ..
1342                 if test -r "$1"; then
1343                         config_sh="$1"
1344                 else
1345                         echo "$me: cannot read config file $1." >&2
1346                         error=true
1347                 fi
1348                 cd UU
1349                 shift;;
1350         -h) shift; error=true;;
1351         -r) shift; reuseval=true;;
1352         -s) shift; silent=true; realsilent=true;;
1353         -E) shift; alldone=exit;;
1354         -K) shift; knowitall=true;;
1355         -O) shift; override=true;;
1356         -S) shift; silent=true; extractsh=true;;
1357         -D)
1358                 shift
1359                 case "$1" in
1360                 *=)
1361                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1362                         echo "$me: ignoring -D $1" >&2
1363                         ;;
1364                 *=*) echo "$1" | \
1365                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1366                 *) echo "$1='define'" >> optdef.sh;;
1367                 esac
1368                 shift
1369                 ;;
1370         -U)
1371                 shift
1372                 case "$1" in
1373                 *=) echo "$1" >> optdef.sh;;
1374                 *=*)
1375                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1376                         echo "$me: ignoring -U $1" >&2
1377                         ;;
1378                 *) echo "$1='undef'" >> optdef.sh;;
1379                 esac
1380                 shift
1381                 ;;
1382         -A)
1383             shift
1384             xxx=''
1385             yyy="$1"
1386             zzz=''
1387             uuu=undef
1388             case "$yyy" in
1389             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1390                  case "$zzz" in
1391                  *:*) zzz='' ;;
1392                  *)   xxx=append
1393                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1394                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1395                  esac
1396                  ;;
1397             esac
1398             case "$xxx" in
1399             '')  case "$yyy" in
1400                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1401                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1402                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1403                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1404                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1405                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1406                  esac
1407                  ;;       
1408             esac
1409             case "$xxx" in
1410             append)
1411                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1412             clear)
1413                 echo "$yyy=''"                  >> posthint.sh ;;
1414             define)
1415                 case "$zzz" in
1416                 '') zzz=define ;;
1417                 esac
1418                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1419             eval)
1420                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1421             prepend)
1422                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1423             undef)
1424                 case "$zzz" in
1425                 '') zzz="$uuu" ;;
1426                 esac
1427                 echo "$yyy=$zzz"                >> posthint.sh ;;
1428             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1429             esac
1430             shift
1431             ;;
1432         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1433             exit 0;;
1434         --) break;;
1435         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1436         *) break;;
1437         esac
1438 done
1439
1440 case "$error" in
1441 true)
1442         cat >&2 <<EOM
1443 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1444                  [-U symbol] [-U symbol=] [-A command:symbol...]
1445   -d : use defaults for all answers.
1446   -e : go on without questioning past the production of config.sh.
1447   -f : specify an alternate default configuration file.
1448   -h : print this help message and exit (with an error status).
1449   -r : reuse C symbols value if possible (skips costly nm extraction).
1450   -s : silent mode, only echoes questions and essential information.
1451   -D : define symbol to have some value:
1452          -D symbol         symbol gets the value 'define'
1453          -D symbol=value   symbol gets the value 'value'
1454   -E : stop at the end of questions, after having produced config.sh.
1455   -K : do not use unless you know what you are doing.
1456   -O : let -D and -U override definitions from loaded configuration file.
1457   -S : perform variable substitutions on all .SH files (can mix with -f)
1458   -U : undefine symbol:
1459          -U symbol    symbol gets the value 'undef'
1460          -U symbol=   symbol gets completely empty
1461   -A : manipulate symbol after the platform specific hints have been applied:
1462          -A symbol=value                append " "value to symbol
1463          -A append:symbol=value         append value to symbol
1464          -A define:symbol=value         define symbol to have value
1465          -A clear:symbol                define symbol to be ''
1466          -A define:symbol               define symbol to be 'define'
1467          -A eval:symbol=value           define symbol to be eval of value
1468          -A prepend:symbol=value        prepend value to symbol
1469          -A undef:symbol                define symbol to be 'undef'
1470          -A undef:symbol=               define symbol to be ''
1471   -V : print version number and exit (with a zero status).
1472 EOM
1473         exit 1
1474         ;;
1475 esac
1476
1477 : Sanity checks
1478 case "$fastread$alldone" in
1479 yescont|yesexit) ;;
1480 *)
1481         case "$extractsh" in
1482         true) ;;
1483         *)
1484                 if test ! -t 0; then
1485                         echo "Say 'sh Configure', not 'sh <Configure'"
1486                         exit 1
1487                 fi
1488                 ;;
1489         esac
1490         ;;
1491 esac
1492
1493 exec 4>&1
1494 case "$silent" in
1495 true) exec 1>/dev/null;;
1496 esac
1497
1498 : run the defines and the undefines, if any, but leave the file out there...
1499 touch optdef.sh
1500 . ./optdef.sh
1501 : create the posthint manipulation script and leave the file out there...
1502 touch posthint.sh
1503
1504 : set package name
1505 package=perl5
1506 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1507 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1508 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1509 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1510 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1511 esac
1512
1513 : Some greps do not return status, grrr.
1514 echo "grimblepritz" >grimble
1515 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1516         contains=contains
1517 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1518         contains=grep
1519 else
1520         contains=contains
1521 fi
1522 rm -f grimble
1523 : the following should work in any shell
1524 case "$contains" in
1525 contains*)
1526         echo " "
1527         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1528         cat >contains <<'EOSS'
1529 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1530 EOSS
1531 chmod +x contains
1532 esac
1533
1534 : Find the path to the source tree
1535 case "$src" in
1536 '') case "$0" in
1537     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1538          case "$src" in
1539          /*)    ;;
1540          .)     ;;
1541          *)     src=`cd ../$src && pwd` ;;
1542          esac
1543          ;;
1544     *)   src='.';;
1545     esac;;
1546 esac
1547 case "$src" in
1548 '')     src=/
1549         rsrc=/
1550         ;;
1551 /*) rsrc="$src";;
1552 *) rsrc="../$src";;
1553 esac
1554 if test -f $rsrc/Configure && \
1555         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1556 then
1557    : found it, so we are ok.
1558 else
1559         rsrc=''
1560         for src in . .. ../.. ../../.. ../../../..; do
1561                 if test -f ../$src/Configure && \
1562                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1563                 then
1564                         rsrc=../$src
1565                         break
1566                 fi
1567         done
1568 fi
1569 case "$rsrc" in
1570 '')
1571         cat <<EOM >&4
1572
1573 Sorry, I can't seem to locate the source dir for $package.  Please start
1574 Configure with an explicit path -- i.e. /some/path/Configure.
1575
1576 EOM
1577         exit 1
1578         ;;
1579 ../.)   rsrc='..';;
1580 *)
1581         echo " "
1582         echo "Sources for $package found in \"$src\"." >&4
1583         ;;
1584 esac
1585
1586 : script used to extract .SH files with variable substitutions
1587 cat >extract <<'EOS'
1588 PERL_CONFIG_SH=true
1589 echo "Doing variable substitutions on .SH files..."
1590 if test -f MANIFEST; then
1591         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1592 else
1593         echo "(Looking for .SH files under the source directory.)"
1594         set x `(cd "$src"; find . -name "*.SH" -print)`
1595 fi
1596 shift
1597 case $# in
1598 0) set x `(cd "$src"; echo *.SH)`; shift;;
1599 esac
1600 if test ! -f "$src/$1"; then
1601         shift
1602 fi
1603 mkdir_p='
1604 name=$1;
1605 create="";
1606 while test $name; do
1607         if test ! -d "$name"; then
1608                 create="$name $create";
1609                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1610                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1611         else
1612                 name="";
1613         fi;
1614 done;
1615 for file in $create; do
1616         mkdir $file;
1617 done
1618 '
1619 for file in $*; do
1620         case "$src" in
1621         ".")
1622                 case "$file" in
1623                 */*)
1624                         dir=`expr X$file : 'X\(.*\)/'`
1625                         file=`expr X$file : 'X.*/\(.*\)'`
1626                         (cd "$dir" && . ./$file)
1627                         ;;
1628                 *)
1629                         . ./$file
1630                         ;;
1631                 esac
1632                 ;;
1633         *)
1634                 case "$file" in
1635                 */*)
1636                         dir=`expr X$file : 'X\(.*\)/'`
1637                         file=`expr X$file : 'X.*/\(.*\)'`
1638                         (set x $dir; shift; eval $mkdir_p)
1639                         sh <"$src/$dir/$file"
1640                         ;;
1641                 *)
1642                         sh <"$src/$file"
1643                         ;;
1644                 esac
1645                 ;;
1646         esac
1647 done
1648 if test -f "$src/config_h.SH"; then
1649         if test ! -f config.h; then
1650         : oops, they left it out of MANIFEST, probably, so do it anyway.
1651         . "$src/config_h.SH"
1652         fi
1653 fi
1654 EOS
1655
1656 : extract files and exit if asked to do so
1657 case "$extractsh" in
1658 true)
1659         case "$realsilent" in
1660         true) ;;
1661         *) exec 1>&4;;
1662         esac
1663         case "$config_sh" in
1664         '') config_sh='config.sh';;
1665         esac
1666         echo " "
1667         echo "Fetching answers from $config_sh..."
1668         cd ..
1669         . $config_sh
1670         test "$override" && . ./optdef.sh
1671         echo " "
1672         . UU/extract
1673         rm -rf UU
1674         echo "Extraction done."
1675         exit 0
1676         ;;
1677 esac
1678
1679 : Eunice requires " " instead of "", can you believe it
1680 echo " "
1681 : Here we go...
1682 echo "Beginning of configuration questions for $package."
1683
1684 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1685
1686 : first determine how to suppress newline on echo command
1687 echo " "
1688 echo "Checking echo to see how to suppress newlines..."
1689 (echo "hi there\c" ; echo " ") >.echotmp
1690 if $contains c .echotmp >/dev/null 2>&1 ; then
1691         echo "...using -n."
1692         n='-n'
1693         c=''
1694 else
1695         cat <<'EOM'
1696 ...using \c
1697 EOM
1698         n=''
1699         c='\c'
1700 fi
1701 echo $n "The star should be here-->$c"
1702 echo '*'
1703 rm -f .echotmp
1704
1705 : Now test for existence of everything in MANIFEST
1706 echo " "
1707 if test -f "$rsrc/MANIFEST"; then
1708         echo "First let's make sure your kit is complete.  Checking..." >&4
1709         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | split -50
1710         rm -f missing
1711         tmppwd=`pwd`
1712         for filelist in x??; do
1713                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1714         done
1715         if test -s missing; then
1716                 cat missing >&4
1717                 cat >&4 <<'EOM'
1718
1719 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1720
1721 You have the option of continuing the configuration process, despite the
1722 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1723 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1724 and contact the author (perlbug@perl.org).
1725
1726 EOM
1727                 echo $n "Continue? [n] $c" >&4
1728                 read ans
1729                 case "$ans" in
1730                 y*)
1731                         echo "Continuing..." >&4
1732                         rm -f missing
1733                         ;;
1734                 *)
1735                         echo "ABORTING..." >&4
1736                         kill $$
1737                         ;;
1738                 esac
1739         else
1740                 echo "Looks good..."
1741         fi
1742 else
1743         echo "There is no MANIFEST file.  I hope your kit is complete !"
1744 fi
1745 rm -f missing x??
1746
1747 echo " "
1748 : Find the appropriate value for a newline for tr
1749 if test -n "$DJGPP"; then
1750        trnl='\012'
1751 fi
1752 if test X"$trnl" = X; then
1753         case "`echo foo|tr '\n' x 2>/dev/null`" in
1754         foox) trnl='\n' ;;
1755         esac
1756 fi
1757 if test X"$trnl" = X; then
1758         case "`echo foo|tr '\012' x 2>/dev/null`" in
1759         foox) trnl='\012' ;;
1760         esac
1761 fi
1762 if test X"$trnl" = X; then
1763         cat <<EOM >&2
1764
1765 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1766
1767 EOM
1768         exit 1
1769 fi
1770
1771 : compute the number of columns on the terminal for proper question formatting
1772 case "$COLUMNS" in
1773 '') COLUMNS='80';;
1774 esac
1775
1776 : set up the echo used in my read
1777 myecho="case \"\$xxxm\" in
1778 '') echo $n \"\$rp $c\" >&4;;
1779 *) case \"\$rp\" in
1780         '') echo $n \"[\$xxxm] $c\";;
1781         *)
1782                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1783                         echo \"\$rp\" >&4
1784                         echo $n \"[\$xxxm] $c\" >&4
1785                 else
1786                         echo $n \"\$rp [\$xxxm] $c\" >&4
1787                 fi
1788                 ;;
1789         esac;;
1790 esac"
1791
1792 : now set up to do reads with possible shell escape and default assignment
1793 cat <<EOSC >myread
1794 $startsh
1795 xxxm=\$dflt
1796 $myecho
1797 ans='!'
1798 case "\$fastread" in
1799 yes) case "\$dflt" in
1800         '') ;;
1801         *) ans='';
1802                 case "\$silent-\$rp" in
1803                 true-) ;;
1804                 *) echo " " >&4;;
1805                 esac;;
1806         esac;;
1807 *) case "\$silent" in
1808         true) case "\$rp" in
1809                 '') ans='';;
1810                 esac;;
1811         esac;;
1812 esac
1813 while expr "X\$ans" : "X!" >/dev/null; do
1814         read answ
1815         set x \$xxxm
1816         shift
1817         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1818         case  "\$answ" in
1819         "!")
1820                 sh 1>&4
1821                 echo " "
1822                 $myecho
1823                 ;;
1824         !*)
1825                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1826                 shift
1827                 sh 1>&4 -c "\$*"
1828                 echo " "
1829                 $myecho
1830                 ;;
1831         "\$ans")
1832                 case "\$ans" in
1833                 \\&*)
1834                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1835                         shift
1836                         case "\$1" in
1837                         -d)
1838                                 fastread=yes
1839                                 echo "(OK, I'll run with -d after this question.)" >&4
1840                                 ;;
1841                         -*)
1842                                 echo "*** Sorry, \$1 not supported yet." >&4
1843                                 ;;
1844                         esac
1845                         $myecho
1846                         ans=!
1847                         ;;
1848                 esac;;
1849         *)
1850                 case "\$aok" in
1851                 y)
1852                         echo "*** Substitution done -- please confirm."
1853                         xxxm="\$ans"
1854                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1855                         xxxm="\$ans"
1856                         ans=!
1857                         ;;
1858                 *)
1859                         echo "*** Error -- try again."
1860                         ans=!
1861                         ;;
1862                 esac
1863                 $myecho
1864                 ;;
1865         esac
1866         case "\$ans\$xxxm\$nostick" in
1867         '')
1868                 ans=!
1869                 $myecho
1870                 ;;
1871         esac
1872 done
1873 case "\$ans" in
1874 '') ans="\$xxxm";;
1875 esac
1876 EOSC
1877
1878 : create .config dir to save info across Configure sessions
1879 test -d ../.config || mkdir ../.config
1880 cat >../.config/README <<EOF
1881 This directory created by Configure to save information that should
1882 persist across sessions for $package.
1883
1884 You may safely delete it if you wish.
1885 EOF
1886
1887 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1888 case "$usedevel" in
1889 $define|true|[yY]*) ;;
1890 *) case "$xversion" in
1891    *[13579])
1892         cat >&4 <<EOH
1893 *** WHOA THERE!!! ***
1894
1895     This is an UNSTABLE DEVELOPMENT release.
1896     The version of this $package distribution is $xversion, that is, odd,
1897     (as opposed to even) and that signifies a development release.
1898     If you want a maintenance release, you want an even-numbered version.
1899
1900     Do ***NOT*** install this into production use.
1901     Data corruption and crashes are possible.
1902
1903     It is most seriously suggested that you do not continue any further
1904     unless you want to help in developing and debugging Perl.
1905
1906     If you *still* want to build perl, you can answer 'y' now,
1907     or pass -Dusedevel to Configure.
1908
1909 EOH
1910         rp='Do you really want to continue?'
1911         dflt='n'
1912         . ./myread
1913         case "$ans" in
1914         [yY]) echo >&4 "Okay, continuing."
1915               usedevel="$define" ;;
1916         *) echo >&4 "Okay, bye."
1917            exit 1
1918            ;;
1919         esac
1920         ;;
1921     esac
1922     ;;
1923 esac
1924 case "$usedevel" in
1925 $define|true|[yY]*)
1926         case "$versiononly" in
1927         '') versiononly="$define" ;;
1928         esac
1929         case "$installusrbinperl" in
1930         '') installusrbinperl="$undef" ;;
1931         esac
1932         ;;
1933 esac
1934
1935 : general instructions
1936 needman=true
1937 firsttime=true
1938 user=`(logname) 2>/dev/null`
1939 case "$user" in
1940 '') user=`whoami 2>&1`;;
1941 esac
1942 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1943         firsttime=false
1944         echo " "
1945         rp='Would you like to see the instructions?'
1946         dflt=n
1947         . ./myread
1948         case "$ans" in
1949         [yY]*) ;;
1950         *) needman=false;;
1951         esac
1952 fi
1953 if $needman; then
1954         cat <<EOH
1955
1956 This installation shell script will examine your system and ask you questions
1957 to determine how the perl5 package should be installed. If you get
1958 stuck on a question, you may use a ! shell escape to start a subshell or
1959 execute a command.  Many of the questions will have default answers in square
1960 brackets; typing carriage return will give you the default.
1961
1962 On some of the questions which ask for file or directory names you are allowed
1963 to use the ~name construct to specify the login directory belonging to "name",
1964 even if you don't have a shell which knows about that.  Questions where this is
1965 allowed will be marked "(~name ok)".
1966
1967 EOH
1968         rp=''
1969         dflt='Type carriage return to continue'
1970         . ./myread
1971         cat <<'EOH'
1972
1973 The prompter used in this script allows you to use shell variables and
1974 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1975 in the default answer, as if the default line was a set of arguments given to a
1976 script shell.  This means you may also use $* to repeat the whole default line,
1977 so you do not have to re-type everything to add something to the default.
1978
1979 Everytime there is a substitution, you will have to confirm.  If there is an
1980 error (e.g. an unmatched backtick), the default answer will remain unchanged
1981 and you will be prompted again.
1982
1983 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1984 the questions and use the computed defaults (or the previous answers if there
1985 was already a config.sh file). Type 'Configure -h' for a list of options.
1986 You may also start interactively and then answer '& -d' at any prompt to turn
1987 on the non-interactive behaviour for the remainder of the execution.
1988
1989 EOH
1990         . ./myread
1991         cat <<EOH
1992
1993 Much effort has been expended to ensure that this shell script will run on any
1994 Unix system.  If despite that it blows up on yours, your best bet is to edit
1995 Configure and run it again.  If you can't run Configure for some reason,
1996 you'll have to generate a config.sh file by hand.  Whatever problems you
1997 have, let me (perlbug@perl.org) know how I blew it.
1998
1999 This installation script affects things in two ways:
2000
2001 1) it may do direct variable substitutions on some of the files included
2002    in this kit.
2003 2) it builds a config.h file for inclusion in C programs.  You may edit
2004    any of these files as the need arises after running this script.
2005
2006 If you make a mistake on a question, there is no easy way to back up to it
2007 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2008 files.  Configure will offer to let you do this before it runs the SH files.
2009
2010 EOH
2011         dflt='Type carriage return to continue'
2012         . ./myread
2013         case "$firsttime" in
2014         true) echo $user >>../.config/instruct;;
2015         esac
2016 fi
2017
2018 : find out where common programs are
2019 echo " "
2020 echo "Locating common programs..." >&4
2021 cat <<EOSC >loc
2022 $startsh
2023 case \$# in
2024 0) exit 1;;
2025 esac
2026 thing=\$1
2027 shift
2028 dflt=\$1
2029 shift
2030 for dir in \$*; do
2031         case "\$thing" in
2032         .)
2033         if test -d \$dir/\$thing; then
2034                 echo \$dir
2035                 exit 0
2036         fi
2037         ;;
2038         *)
2039         for thisthing in \$dir/\$thing; do
2040                 : just loop through to pick last item
2041         done
2042         if test -f \$thisthing; then
2043                 echo \$thisthing
2044                 exit 0
2045         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2046                 echo \$thisthing
2047                 exit 0
2048         elif test -f \$dir/\$thing.exe; then
2049                 if test -n "$DJGPP"; then
2050                         echo \$dir/\$thing.exe
2051                 else
2052                         : on Eunice apparently
2053                         echo \$dir/\$thing
2054                 fi
2055                 exit 0
2056         fi
2057         ;;
2058         esac
2059 done
2060 echo \$dflt
2061 exit 1
2062 EOSC
2063 chmod +x loc
2064 $eunicefix loc
2065 loclist="
2066 awk
2067 cat
2068 chmod
2069 comm
2070 cp
2071 echo
2072 expr
2073 grep
2074 ls
2075 mkdir
2076 rm
2077 sed
2078 sort
2079 touch
2080 tr
2081 uniq
2082 "
2083 trylist="
2084 Mcc
2085 ar
2086 bison
2087 byacc
2088 cpp
2089 csh
2090 date
2091 egrep
2092 gmake
2093 gzip
2094 less
2095 ln
2096 make
2097 more
2098 nm
2099 nroff
2100 pg
2101 test
2102 uname
2103 zip
2104 "
2105 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2106 pth="$pth /lib /usr/lib"
2107 for file in $loclist; do
2108         eval xxx=\$$file
2109         case "$xxx" in
2110         /*|?:[\\/]*)
2111                 if test -f "$xxx"; then
2112                         : ok
2113                 else
2114                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2115                         xxx=`./loc $file $file $pth`
2116                 fi
2117                 ;;
2118         '') xxx=`./loc $file $file $pth`;;
2119         *) xxx=`./loc $xxx $xxx $pth`;;
2120         esac
2121         eval $file=$xxx$_exe
2122         eval _$file=$xxx
2123         case "$xxx" in
2124         /*)
2125                 echo $file is in $xxx.
2126                 ;;
2127         ?:[\\/]*)
2128                 echo $file is in $xxx.
2129                 ;;
2130         *)
2131                 echo "I don't know where '$file' is, and my life depends on it." >&4
2132                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2133                 exit 1
2134                 ;;
2135         esac
2136 done
2137 echo " "
2138 echo "Don't worry if any of the following aren't found..."
2139 say=offhand
2140 for file in $trylist; do
2141         eval xxx=\$$file
2142         case "$xxx" in
2143         /*|?:[\\/]*)
2144                 if test -f "$xxx"; then
2145                         : ok
2146                 else
2147                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2148                         xxx=`./loc $file $file $pth`
2149                 fi
2150                 ;;
2151         '') xxx=`./loc $file $file $pth`;;
2152         *) xxx=`./loc $xxx $xxx $pth`;;
2153         esac
2154         eval $file=$xxx$_exe
2155         eval _$file=$xxx
2156         case "$xxx" in
2157         /*)
2158                 echo $file is in $xxx.
2159                 ;;
2160         ?:[\\/]*)
2161                 echo $file is in $xxx.
2162                 ;;
2163         *)
2164                 echo "I don't see $file out there, $say."
2165                 say=either
2166                 ;;
2167         esac
2168 done
2169 case "$egrep" in
2170 egrep)
2171         echo "Substituting grep for egrep."
2172         egrep=$grep
2173         _egrep=$grep
2174         ;;
2175 esac
2176 case "$ln" in
2177 ln)
2178         echo "Substituting cp for ln."
2179         ln=$cp
2180         _ln=$cp
2181         ;;
2182 esac
2183 case "$make" in
2184 make)   
2185         case "$gmake" in
2186         gmake)
2187         echo "I can't find make or gmake, and my life depends on it." >&4
2188         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2189         exit 1
2190         ;;
2191         esac
2192         ;;
2193 esac    
2194 case "$gmake" in
2195 gmake)  ;;
2196 *)      # We can't have osname yet.
2197         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2198                 # Assume that gmake, if found, is definitely GNU make
2199                 # and prefer it over the system make.
2200                 echo "Substituting gmake for make."
2201                 make=$gmake
2202                 _make=$gmake
2203         fi
2204         ;;
2205 esac
2206 case "$test" in
2207 test)
2208         echo "Hopefully test is built into your sh."
2209         ;;
2210 *)
2211         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2212                 echo "Using the test built into your sh."
2213                 test=test
2214                 _test=test
2215         fi
2216         ;;
2217 esac
2218 case "$echo" in
2219 echo)
2220         echo "Hopefully echo is built into your sh."
2221         ;;
2222 '') ;;
2223 *)
2224         echo " "
2225 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2226         $echo $n "hi there$c" >foo1
2227         echo $n "hi there$c" >foo2
2228         if cmp foo1 foo2 >/dev/null 2>&1; then
2229                 echo "They are compatible.  In fact, they may be identical."
2230         else
2231                 case "$n" in
2232                 '-n') n='' c='\c';;
2233                 *) n='-n' c='';;
2234                 esac
2235                 cat <<FOO
2236 They are not compatible!  You are probably running ksh on a non-USG system.
2237 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2238 have echo built in and we may have to run some Bourne shell scripts.  That
2239 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2240
2241 FOO
2242                 $echo $n "The star should be here-->$c"
2243                 $echo "*"
2244         fi
2245         $rm -f foo1 foo2
2246         ;;
2247 esac
2248
2249 cat <<EOS >trygcc
2250 $startsh
2251 EOS
2252 cat <<'EOSC' >>trygcc
2253 case "$cc" in
2254 '') ;;
2255 *)  $rm -f try try.*
2256     $cat >try.c <<EOM
2257 int main(int argc, char *argv[]) {
2258   return 0;
2259 }
2260 EOM
2261     if $cc -o try $ccflags $ldflags try.c; then
2262        :
2263     else
2264         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2265         despair=yes
2266         trygcc=yes
2267         case "$cc" in
2268         *gcc*) trygcc=no ;;
2269         esac
2270         case "`$cc -v -c try.c 2>&1`" in
2271         *gcc*) trygcc=no ;;
2272         esac
2273         if $test X"$trygcc" = Xyes; then
2274             if gcc -o try -c try.c; then
2275                 echo " "
2276                 echo "You seem to have a working gcc, though." >&4
2277                 rp="Would you like to use it?"
2278                 dflt=y
2279                 if $test -f myread; then
2280                     . ./myread
2281                 else
2282                     if $test -f UU/myread; then
2283                         . ./UU/myread
2284                     else
2285                         echo "Cannot find myread, sorry.  Aborting." >&2
2286                         exit 1
2287                     fi
2288                 fi  
2289                 case "$ans" in
2290                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2291                 esac
2292             fi
2293         fi
2294     fi
2295     $rm -f try try.*
2296     ;;
2297 esac
2298 EOSC
2299
2300 cat <<EOS >checkcc
2301 $startsh
2302 EOS
2303 cat <<'EOSC' >>checkcc
2304 case "$cc" in        
2305 '') ;;
2306 *)  $rm -f try try.*              
2307     $cat >try.c <<EOM
2308 int main(int argc, char *argv[]) {
2309   return 0;
2310 }
2311 EOM
2312     if $cc -o try $ccflags $ldflags try.c; then
2313        :
2314     else
2315         if $test X"$despair" = Xyes; then
2316            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2317         fi
2318         $cat >&4 <<EOM         
2319 You need to find a working C compiler.
2320 Either (purchase and) install the C compiler supplied by your OS vendor,
2321 or for a free C compiler try http://gcc.gnu.org/
2322 I cannot continue any further, aborting.
2323 EOM
2324         exit 1
2325     fi
2326     $rm -f try try.*
2327     ;;
2328 esac
2329 EOSC
2330
2331 : determine whether symbolic links are supported
2332 echo " "
2333 $touch blurfl
2334 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2335         echo "Symbolic links are supported." >&4
2336         lns="$ln -s"
2337 else
2338         echo "Symbolic links are NOT supported." >&4
2339         lns="$ln"
2340 fi
2341 $rm -f blurfl sym
2342
2343 : determine whether symbolic links are supported
2344 echo " "
2345 case "$lns" in
2346 *"ln"*" -s")
2347         echo "Checking how to test for symbolic links..." >&4
2348         $lns blurfl sym
2349         if $test "X$issymlink" = X; then
2350                 case "$newsh" in
2351                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2352                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2353                 esac
2354                 if test $? = 0; then
2355                         issymlink="test -h"
2356                 else
2357                         echo "Your builtin 'test -h' may be broken." >&4
2358                         case "$test" in
2359                         /*)     ;;
2360                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2361                                 for p in $pth
2362                                 do
2363                                         if test -f "$p/$test"; then
2364                                                 test="$p/$test"
2365                                                 break
2366                                         fi
2367                                 done
2368                                 ;;
2369                         esac
2370                         case "$test" in
2371                         /*)
2372                                 echo "Trying external '$test -h'." >&4
2373                                 issymlink="$test -h"
2374                                 if $test ! -h sym >/dev/null 2>&1; then
2375                                         echo "External '$test -h' is broken, too." >&4
2376                                         issymlink=''
2377                                 fi
2378                                 ;;
2379                         *)      issymlink='' ;;
2380                         esac
2381                 fi              
2382         fi
2383         if $test "X$issymlink" = X; then
2384                 if $test -L sym 2>/dev/null; then
2385                         issymlink="$test -L"
2386                         echo "The builtin '$test -L' worked." >&4
2387                 fi
2388         fi
2389         if $test "X$issymlink" != X; then
2390                 echo "You can test for symbolic links with '$issymlink'." >&4
2391         else
2392                 echo "I do not know how you can test for symbolic links." >&4
2393         fi
2394         $rm -f blurfl sym
2395         ;;
2396 *)      echo "No symbolic links, so not testing for their testing..." >&4
2397         ;;
2398 esac
2399 echo " "
2400
2401
2402 case "$mksymlinks" in
2403 $define|true|[yY]*)
2404         case "$src" in
2405         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2406                 exit 1
2407                 ;;
2408         *)      case "$lns:$issymlink" in
2409                 *"ln -s:"*"test -"?)
2410                         echo "Creating the symbolic links..." >&4
2411                         echo "(First creating the subdirectories...)" >&4
2412                         cd ..
2413                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2414                                 read directory
2415                                 test -z "$directory" && break
2416                                 mkdir -p $directory
2417                         done
2418                         # Sanity check 1.
2419                         if test ! -d t/base; then
2420                                 echo "Failed to create the subdirectories.  Aborting." >&4
2421                                 exit 1
2422                         fi
2423                         echo "(Then creating the symlinks...)" >&4
2424                         awk '{print $1}' $src/MANIFEST | while true; do
2425                                 read filename
2426                                 test -z "$filename" && break
2427                                 if test -f $filename; then
2428                                         if $issymlink $filename; then
2429                                                 rm -f $filename
2430                                         fi
2431                                 fi
2432                                 if test -f $filename; then
2433                                         echo "$filename already exists, not symlinking."
2434                                 else
2435                                         ln -s $src/$filename $filename
2436                                 fi
2437                         done
2438                         # Sanity check 2.
2439                         if test ! -f t/base/lex.t; then
2440                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2441                                 exit 1
2442                         fi
2443                         cd UU
2444                         ;;
2445                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2446                         ;;
2447                 esac
2448                 ;;
2449         esac
2450         ;;
2451 esac
2452
2453
2454 case "$usecrosscompile" in
2455 $define|true|[yY]*)
2456         $echo "Cross-compiling..."
2457         croak=''
2458         case "$cc" in
2459         *-*-gcc) # A cross-compiling gcc, probably.
2460             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2461             ar=$targetarch-ar
2462             # leave out ld, choosing it is more complex
2463             nm=$targetarch-nm
2464             ranlib=$targetarch-ranlib
2465             $echo 'extern int foo;' > try.c
2466             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2467             shift
2468             if $test $# -gt 0; then
2469                 incpth="$incpth $*"
2470                 incpth="`$echo $incpth|$sed 's/^ //'`"
2471                 echo "Guessing incpth '$incpth'." >&4
2472                 for i in $*; do
2473                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2474                     if $test -d $j; then
2475                         libpth="$libpth $j"
2476                     fi
2477                 done   
2478                 libpth="`$echo $libpth|$sed 's/^ //'`"
2479                 echo "Guessing libpth '$libpth'." >&4
2480             fi
2481             $rm -f try.c
2482             ;;
2483         esac
2484         case "$targetarch" in
2485         '') echo "Targetarch not defined." >&4; croak=y ;;
2486         *)  echo "Using targetarch $targetarch." >&4 ;;
2487         esac
2488         case "$incpth" in
2489         '') echo "Incpth not defined." >&4; croak=y ;;
2490         *)  echo "Using incpth '$incpth'." >&4 ;;
2491         esac
2492         case "$libpth" in
2493         '') echo "Libpth not defined." >&4; croak=y ;;
2494         *)  echo "Using libpth '$libpth'." >&4 ;;
2495         esac
2496         case "$usrinc" in
2497         '') for i in $incpth; do
2498                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2499                     usrinc=$i
2500                     echo "Guessing usrinc $usrinc." >&4
2501                     break
2502                 fi
2503             done
2504             case "$usrinc" in
2505             '') echo "Usrinc not defined." >&4; croak=y ;;
2506             esac
2507             ;;
2508         *)  echo "Using usrinc $usrinc." >&4 ;;
2509         esac
2510         case "$targethost" in
2511         '') echo "Targethost not defined." >&4; croak=y ;;
2512         *)  echo "Using targethost $targethost." >&4
2513         esac
2514         locincpth=' '
2515         loclibpth=' '
2516         case "$croak" in
2517         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2518         esac
2519         case "$src" in
2520         /*) run=$src/Cross/run
2521             targetmkdir=$src/Cross/mkdir
2522             to=$src/Cross/to
2523             from=$src/Cross/from
2524             ;;
2525         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2526             run=$pwd/Cross/run
2527             targetmkdir=$pwd/Cross/mkdir
2528             to=$pwd/Cross/to
2529             from=$pwd/Cross/from
2530             ;;
2531         esac
2532         case "$targetrun" in
2533         '') targetrun=ssh ;;
2534         esac
2535         case "$targetto" in
2536         '') targetto=scp ;;
2537         esac
2538         case "$targetfrom" in
2539         '') targetfrom=scp ;;
2540         esac
2541         run=$run-$targetrun
2542         to=$to-$targetto
2543         from=$from-$targetfrom
2544         case "$targetdir" in
2545         '')  targetdir=/tmp
2546              echo "Guessing targetdir $targetdir." >&4
2547              ;;
2548         esac
2549         case "$targetuser" in
2550         '')  targetuser=root
2551              echo "Guessing targetuser $targetuser." >&4
2552              ;;
2553         esac
2554         case "$targetfrom" in
2555         scp)    q=-q ;;
2556         *)      q='' ;;
2557         esac
2558         case "$targetrun" in
2559         ssh|rsh)
2560             cat >$run <<EOF
2561 #!/bin/sh
2562 case "\$1" in
2563 -cwd)
2564   shift
2565   cwd=\$1
2566   shift
2567   ;;
2568 esac
2569 case "\$cwd" in
2570 '') cwd=$targetdir ;;
2571 esac
2572 exe=\$1
2573 shift
2574 if $test ! -f \$exe.xok; then
2575   $to \$exe
2576   $touch \$exe.xok
2577 fi
2578 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2579 EOF
2580             ;;
2581         *)  echo "Unknown targetrun '$targetrun'" >&4
2582             exit 1
2583             ;;
2584         esac
2585         case "$targetmkdir" in
2586         */Cross/mkdir)
2587             cat >$targetmkdir <<EOF
2588 #!/bin/sh
2589 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2590 EOF
2591             $chmod a+rx $targetmkdir
2592             ;;
2593         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2594             exit 1
2595             ;;
2596         esac
2597         case "$targetto" in
2598         scp|rcp)
2599             cat >$to <<EOF
2600 #!/bin/sh
2601 for f in \$@
2602 do
2603   case "\$f" in
2604   /*)
2605     $targetmkdir \`dirname \$f\`
2606     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2607     ;;
2608   *)
2609     $targetmkdir $targetdir/\`dirname \$f\`
2610     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2611     ;;
2612   esac
2613 done
2614 exit 0
2615 EOF
2616             ;;
2617         cp) cat >$to <<EOF
2618 #!/bin/sh
2619 for f in \$@
2620 do
2621   case "\$f" in
2622   /*)
2623     $mkdir -p $targetdir/\`dirname \$f\`
2624     $cp \$f $targetdir/\$f || exit 1
2625     ;;
2626   *)
2627     $targetmkdir $targetdir/\`dirname \$f\`
2628     $cp \$f $targetdir/\$f || exit 1
2629     ;;
2630   esac
2631 done
2632 exit 0
2633 EOF
2634             ;;
2635         *)  echo "Unknown targetto '$targetto'" >&4
2636             exit 1
2637             ;;
2638         esac
2639         case "$targetfrom" in
2640         scp|rcp)
2641           cat >$from <<EOF
2642 #!/bin/sh
2643 for f in \$@
2644 do
2645   $rm -f \$f
2646   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2647 done
2648 exit 0
2649 EOF
2650             ;;
2651         cp) cat >$from <<EOF
2652 #!/bin/sh
2653 for f in \$@
2654 do
2655   $rm -f \$f
2656   cp $targetdir/\$f . || exit 1
2657 done
2658 exit 0
2659 EOF
2660             ;;
2661         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2662             exit 1
2663             ;;
2664         esac
2665         if $test ! -f $run; then
2666             echo "Target 'run' script '$run' not found." >&4
2667         else
2668             $chmod a+rx $run
2669         fi
2670         if $test ! -f $to; then
2671             echo "Target 'to' script '$to' not found." >&4
2672         else
2673             $chmod a+rx $to
2674         fi
2675         if $test ! -f $from; then
2676             echo "Target 'from' script '$from' not found." >&4
2677         else
2678             $chmod a+rx $from
2679         fi
2680         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2681             exit 1
2682         fi
2683         cat >&4 <<EOF
2684 Using '$run' for remote execution,
2685 and '$from' and '$to'
2686 for remote file transfer.
2687 EOF
2688         ;;
2689 *)      run=''
2690         to=:
2691         from=:
2692         usecrosscompile='undef'
2693         targetarch=''
2694         ;;
2695 esac
2696
2697 : see whether [:lower:] and [:upper:] are supported character classes
2698 echo " "
2699 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2700 ABYZ)
2701         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2702         up='[:upper:]'
2703         low='[:lower:]'
2704         ;;
2705 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2706         # (0xc9 and 0xd1), therefore that is a nice testing point.
2707         if test "X$up" = X -o "X$low" = X; then
2708             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2709             ij) up='[A-Z]'
2710                 low='[a-z]'
2711                 ;;
2712             esac
2713         fi
2714         if test "X$up" = X -o "X$low" = X; then
2715             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2716             ij) up='A-Z'
2717                 low='a-z'
2718                 ;;
2719             esac
2720         fi
2721         if test "X$up" = X -o "X$low" = X; then
2722             case "`echo IJ | od -x 2>/dev/null`" in
2723             *C9D1*|*c9d1*)
2724                 echo "Hey, this might be EBCDIC." >&4
2725                 if test "X$up" = X -o "X$low" = X; then
2726                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2727                     ij) up='[A-IJ-RS-Z]'
2728                         low='[a-ij-rs-z]'
2729                         ;;
2730                     esac
2731                 fi
2732                 if test "X$up" = X -o "X$low" = X; then
2733                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2734                     ij) up='A-IJ-RS-Z'
2735                         low='a-ij-rs-z'
2736                         ;;
2737                     esac
2738                 fi
2739                 ;;
2740             esac
2741         fi
2742 esac
2743 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2744 ij)
2745     echo "Using $up and $low to convert case." >&4
2746     ;;
2747 *)
2748     echo "I don't know how to translate letters from upper to lower case." >&4
2749     echo "Your tr is not acting any way I know of." >&4
2750     exit 1
2751     ;;
2752 esac
2753 : set up the translation script tr, must be called with ./tr of course
2754 cat >tr <<EOSC
2755 $startsh
2756 case "\$1\$2" in
2757 '[A-Z][a-z]') exec $tr '$up' '$low';;
2758 '[a-z][A-Z]') exec $tr '$low' '$up';;
2759 esac
2760 exec $tr "\$@"
2761 EOSC
2762 chmod +x tr
2763 $eunicefix tr
2764
2765 : Try to determine whether config.sh was made on this system
2766 case "$config_sh" in
2767 '')
2768 myuname=`$uname -a 2>/dev/null`
2769 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2770 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2771 # because the A-Z/a-z are not consecutive.
2772 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2773         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2774 newmyuname="$myuname"
2775 dflt=n
2776 case "$knowitall" in
2777 '')
2778         if test -f ../config.sh; then
2779                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2780                         eval "`grep myuname= ../config.sh`"
2781                 fi
2782                 if test "X$myuname" = "X$newmyuname"; then
2783                         dflt=y
2784                 fi
2785         fi
2786         ;;
2787 *) dflt=y;;
2788 esac
2789
2790 : Get old answers from old config file if Configure was run on the
2791 : same system, otherwise use the hints.
2792 hint=default
2793 cd ..
2794 if test -f config.sh; then
2795         echo " "
2796         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2797         . UU/myread
2798         case "$ans" in
2799         n*|N*) echo "OK, I'll ignore it."
2800                 mv config.sh config.sh.old
2801                 myuname="$newmyuname"
2802                 ;;
2803         *)  echo "Fetching default answers from your old config.sh file..." >&4
2804                 tmp_n="$n"
2805                 tmp_c="$c"
2806                 tmp_sh="$sh"
2807                 . ./config.sh
2808                 cp config.sh UU
2809                 n="$tmp_n"
2810                 c="$tmp_c"
2811                 : Older versions did not always set $sh.  Catch re-use of such
2812                 : an old config.sh.
2813                 case "$sh" in
2814                 '') sh="$tmp_sh" ;;
2815                 esac
2816                 hint=previous
2817                 ;;
2818         esac
2819 fi
2820 . ./UU/checkcc
2821 if test ! -f config.sh; then
2822         $cat <<EOM
2823
2824 First time through, eh?  I have some defaults handy for some systems
2825 that need some extra help getting the Configure answers right:
2826
2827 EOM
2828         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2829         dflt=''
2830         : Half the following guesses are probably wrong... If you have better
2831         : tests or hints, please send them to perlbug@perl.org
2832         : The metaconfig authors would also appreciate a copy...
2833         $test -f /irix && osname=irix
2834         $test -f /xenix && osname=sco_xenix
2835         $test -f /dynix && osname=dynix
2836         $test -f /dnix && osname=dnix
2837         $test -f /lynx.os && osname=lynxos
2838         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2839         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2840         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2841         $test -f /bin/mips && /bin/mips && osname=mips
2842         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2843                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2844         $test -d /usr/apollo/bin && osname=apollo
2845         $test -f /etc/saf/_sactab && osname=svr4
2846         $test -d /usr/include/minix && osname=minix
2847         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2848         if $test -d /MachTen -o -d /MachTen_Folder; then
2849                 osname=machten
2850                 if $test -x /sbin/version; then
2851                         osvers=`/sbin/version | $awk '{print $2}' |
2852                         $sed -e 's/[A-Za-z]$//'`
2853                 elif $test -x /usr/etc/version; then
2854                         osvers=`/usr/etc/version | $awk '{print $2}' |
2855                         $sed -e 's/[A-Za-z]$//'`
2856                 else
2857                         osvers="$2.$3"
2858                 fi
2859         fi
2860
2861         $test -f /sys/posix.dll &&
2862                 $test -f /usr/bin/what &&
2863                 set X `/usr/bin/what /sys/posix.dll` &&
2864                 $test "$3" = UWIN &&
2865                 osname=uwin &&
2866                 osvers="$5"
2867
2868         if $test -f $uname; then
2869                 set X $myuname
2870                 shift
2871
2872                 case "$5" in
2873                 fps*) osname=fps ;;
2874                 mips*)
2875                         case "$4" in
2876                         umips) osname=umips ;;
2877                         *) osname=mips ;;
2878                         esac;;
2879                 [23]100) osname=mips ;;
2880                 next*) osname=next ;;
2881                 i386*)
2882                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2883                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2884                                 osname='sco'
2885                                 osvers=$tmp
2886                         elif $test -f /etc/kconfig; then
2887                                 osname=isc
2888                                 if test "$lns" = "$ln -s"; then
2889                                         osvers=4
2890                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2891                                         osvers=3
2892                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2893                                         osvers=2
2894                                 fi
2895                         fi
2896                         tmp=''
2897                         ;;
2898                 pc*)
2899                         if test -n "$DJGPP"; then
2900                                 osname=dos
2901                                 osvers=djgpp
2902                         fi
2903                         ;;
2904                 esac
2905
2906                 case "$1" in
2907                 aix) osname=aix
2908                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2909                         case "$tmp" in
2910                         'not found') osvers="$4"."$3" ;;
2911                         '<3240'|'<>3240') osvers=3.2.0 ;;
2912                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2913                         '=3250'|'>3250') osvers=3.2.5 ;;
2914                         *) osvers=$tmp;;
2915                         esac
2916                         ;;
2917                 bsd386) osname=bsd386
2918                         osvers=`$uname -r`
2919                         ;;
2920                 cygwin*) osname=cygwin
2921                         osvers="$3"
2922                         ;;
2923                 *dc.osx) osname=dcosx
2924                         osvers="$3"
2925                         ;;
2926                 dnix) osname=dnix
2927                         osvers="$3"
2928                         ;;
2929                 domainos) osname=apollo
2930                         osvers="$3"
2931                         ;;
2932                 dgux) osname=dgux 
2933                         osvers="$3"
2934                         ;;
2935                 dynixptx*) osname=dynixptx
2936                         osvers=`echo "$4"|sed 's/^v//'`
2937                         ;;
2938                 freebsd) osname=freebsd 
2939                         osvers="$3" ;;
2940                 genix) osname=genix ;;
2941                 hp*) osname=hpux 
2942                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2943                         ;;
2944                 irix*) osname=irix
2945                         case "$3" in
2946                         4*) osvers=4 ;;
2947                         5*) osvers=5 ;;
2948                         *)      osvers="$3" ;;
2949                         esac
2950                         ;;
2951                 linux) osname=linux
2952                         case "$3" in
2953                         *)      osvers="$3" ;;
2954                         esac
2955                         ;;
2956                 MiNT) osname=mint
2957                         ;;
2958                 netbsd*) osname=netbsd
2959                         osvers="$3"
2960                         ;;
2961                 news-os) osvers="$3"
2962                         case "$3" in
2963                         4*) osname=newsos4 ;;
2964                         *) osname=newsos ;;
2965                         esac
2966                         ;;
2967                 next*) osname=next ;;
2968                 nonstop-ux) osname=nonstopux ;;
2969                 POSIX-BC | posix-bc ) osname=posix-bc
2970                         osvers="$3"
2971                         ;;
2972                 powerux | power_ux | powermax_os | powermaxos | \
2973                 powerunix | power_unix) osname=powerux
2974                         osvers="$3"
2975                         ;;
2976                 qnx) osname=qnx
2977                         osvers="$4"
2978                         ;;
2979                 solaris) osname=solaris
2980                         case "$3" in
2981                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2982                         *)      osvers="$3" ;;
2983                         esac
2984                         ;;
2985                 sunos) osname=sunos
2986                         case "$3" in
2987                         5*) osname=solaris
2988                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2989                         *)      osvers="$3" ;;
2990                         esac
2991                         ;;
2992                 titanos) osname=titanos
2993                         case "$3" in
2994                         1*) osvers=1 ;;
2995                         2*) osvers=2 ;;
2996                         3*) osvers=3 ;;
2997                         4*) osvers=4 ;;
2998                         *)      osvers="$3" ;;
2999                         esac
3000                         ;;
3001                 ultrix) osname=ultrix
3002                         osvers="$3"
3003                         ;;
3004                 osf1|mls+)      case "$5" in
3005                                 alpha)
3006                                         osname=dec_osf
3007                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3008                                         case "$osvers" in
3009                                         [1-9].[0-9]*) ;;
3010                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3011                                         esac
3012                                         ;;
3013                         hp*)    osname=hp_osf1  ;;
3014                         mips)   osname=mips_osf1 ;;
3015                         esac
3016                         ;;
3017                 unixware) osname=svr5
3018                         osvers="$4"
3019                         ;;
3020                 uts)    osname=uts
3021                         osvers="$3"
3022                         ;;
3023                 vos) osvers="$3"
3024                         ;;
3025                 $2) case "$osname" in
3026                         *isc*) ;;
3027                         *freebsd*) ;;
3028                         svr*)
3029                                 : svr4.x or possibly later
3030                                 case "svr$3" in 
3031                                 ${osname}*)
3032                                         osname=svr$3
3033                                         osvers=$4
3034                                         ;;
3035                                 esac
3036                                 case "$osname" in
3037                                 svr4.0)
3038                                         : Check for ESIX
3039                                         if test -f /stand/boot ; then
3040                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3041                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3042                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3043                                                         if test -n "$isesix"; then
3044                                                                 osname=esix4
3045                                                         fi
3046                                                 fi
3047                                         fi
3048                                         ;;
3049                                 esac
3050                                 ;;
3051                         *)      if test -f /etc/systemid; then
3052                                         osname=sco
3053                                         set `echo $3 | $sed 's/\./ /g'` $4
3054                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3055                                                 osvers=$1.$2.$3
3056                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3057                                                 osvers=$1.$2
3058                                         elif $test -f $src/hints/sco_$1.sh; then
3059                                                 osvers=$1
3060                                         fi
3061                                 else
3062                                         case "$osname" in
3063                                         '') : Still unknown.  Probably a generic Sys V.
3064                                                 osname="sysv"
3065                                                 osvers="$3"
3066                                                 ;;
3067                                         esac
3068                                 fi
3069                                 ;;
3070                         esac
3071                         ;;
3072                 *)      case "$osname" in
3073                         '') : Still unknown.  Probably a generic BSD.
3074                                 osname="$1"
3075                                 osvers="$3"
3076                                 ;;
3077                         esac
3078                         ;;
3079                 esac
3080         else
3081                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3082                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3083                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3084                                 osname=news_os
3085                         fi
3086                         $rm -f UU/kernel.what
3087                 elif test -d c:/.; then
3088                         set X $myuname
3089                         osname=os2
3090                         osvers="$5"
3091                 fi
3092         fi
3093         
3094         case "$targetarch" in
3095         '') ;;
3096         *)  hostarch=$osname
3097             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3098             osvers=''
3099             ;;
3100         esac
3101
3102         : Now look for a hint file osname_osvers, unless one has been
3103         : specified already.
3104         case "$hintfile" in
3105         ''|' ')
3106                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3107                 : Also try without trailing minor version numbers.
3108                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3109                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3110                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3111                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3112                 case "$file" in
3113                 '') dflt=none ;;
3114                 *)  case "$osvers" in
3115                         '') dflt=$file
3116                                 ;;
3117                         *)  if $test -f $src/hints/$file.sh ; then
3118                                         dflt=$file
3119                                 elif $test -f $src/hints/$xfile.sh ; then
3120                                         dflt=$xfile
3121                                 elif $test -f $src/hints/$xxfile.sh ; then
3122                                         dflt=$xxfile
3123                                 elif $test -f $src/hints/$xxxfile.sh ; then
3124                                         dflt=$xxxfile
3125                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3126                                         dflt=$xxxxfile
3127                                 elif $test -f "$src/hints/${osname}.sh" ; then
3128                                         dflt="${osname}"
3129                                 else
3130                                         dflt=none
3131                                 fi
3132                                 ;;
3133                         esac
3134                         ;;
3135                 esac
3136                 if $test -f Policy.sh ; then
3137                         case "$dflt" in
3138                         *Policy*) ;;
3139                         none) dflt="Policy" ;;
3140                         *) dflt="Policy $dflt" ;;
3141                         esac
3142                 fi
3143                 ;;
3144         *)
3145                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3146                 ;;
3147         esac
3148
3149         if $test -f Policy.sh ; then
3150                 $cat <<EOM
3151
3152 There's also a Policy hint file available, which should make the
3153 site-specific (policy) questions easier to answer.
3154 EOM
3155
3156         fi
3157
3158         $cat <<EOM
3159
3160 You may give one or more space-separated answers, or "none" if appropriate.
3161 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3162 is a good thing.  DO NOT give a wrong version or a wrong OS.
3163
3164 EOM
3165
3166         rp="Which of these apply, if any?"
3167         . UU/myread
3168         tans=$ans
3169         for file in $tans; do
3170                 if $test X$file = XPolicy -a -f Policy.sh; then
3171                         . Policy.sh
3172                         $cat Policy.sh >> UU/config.sh
3173                 elif $test -f $src/hints/$file.sh; then
3174                         . $src/hints/$file.sh
3175                         $cat $src/hints/$file.sh >> UU/config.sh
3176                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3177                         : nothing
3178                 else
3179                         : Give one chance to correct a possible typo.
3180                         echo "$file.sh does not exist"
3181                         dflt=$file
3182                         rp="hint to use instead?"
3183                         . UU/myread
3184                         for file in $ans; do
3185                                 if $test -f "$src/hints/$file.sh"; then
3186                                         . $src/hints/$file.sh
3187                                         $cat $src/hints/$file.sh >> UU/config.sh
3188                                 elif $test X$ans = X -o X$ans = Xnone ; then
3189                                         : nothing
3190                                 else
3191                                         echo "$file.sh does not exist -- ignored."
3192                                 fi
3193                         done
3194                 fi
3195         done
3196
3197         hint=recommended
3198         : Remember our hint file for later.
3199         if $test -f "$src/hints/$file.sh" ; then
3200                 hintfile="$file"
3201         else
3202                 hintfile=''
3203         fi
3204 fi
3205 cd UU
3206 ;;
3207 *)
3208         echo " "
3209         echo "Fetching default answers from $config_sh..." >&4
3210         tmp_n="$n"
3211         tmp_c="$c"
3212         cd ..
3213         cp $config_sh config.sh 2>/dev/null
3214         chmod +w config.sh
3215         . ./config.sh
3216         cd UU
3217         cp ../config.sh .
3218         n="$tmp_n"
3219         c="$tmp_c"
3220         hint=previous
3221         ;;
3222 esac
3223 test "$override" && . ./optdef.sh
3224
3225 : Restore computed paths
3226 for file in $loclist $trylist; do
3227         eval $file="\$_$file"
3228 done
3229
3230 cat << EOM
3231
3232 Configure uses the operating system name and version to set some defaults.
3233 The default value is probably right if the name rings a bell. Otherwise,
3234 since spelling matters for me, either accept the default or answer "none"
3235 to leave it blank.
3236
3237 EOM
3238 case "$osname" in
3239         ''|' ')
3240                 case "$hintfile" in
3241                 ''|' '|none) dflt=none ;;
3242                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3243                 esac
3244                 ;;
3245         *) dflt="$osname" ;;
3246 esac
3247 rp="Operating system name?"
3248 . ./myread
3249 case "$ans" in
3250 none)  osname='' ;;
3251 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3252 esac
3253 echo " "
3254 case "$osvers" in
3255         ''|' ')
3256                 case "$hintfile" in
3257                 ''|' '|none) dflt=none ;;
3258                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3259                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3260                         case "$dflt" in
3261                         ''|' ') dflt=none ;;
3262                         esac
3263                         ;;
3264                 esac
3265                 ;;
3266         *) dflt="$osvers" ;;
3267 esac
3268 rp="Operating system version?"
3269 . ./myread
3270 case "$ans" in
3271 none)  osvers='' ;;
3272 *) osvers="$ans" ;;
3273 esac
3274
3275
3276 . ./posthint.sh
3277
3278 : who configured the system
3279 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3280 cf_by=`(logname) 2>/dev/null`
3281 case "$cf_by" in
3282 "")
3283         cf_by=`(whoami) 2>/dev/null`
3284         case "$cf_by" in
3285         "") cf_by=unknown ;;
3286         esac ;;
3287 esac
3288
3289 : set up the script used to warn in case of inconsistency
3290 cat <<EOS >whoa
3291 $startsh
3292 EOS
3293 cat <<'EOSC' >>whoa
3294 dflt=y
3295 echo " "
3296 echo "*** WHOA THERE!!! ***" >&4
3297 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3298 rp="    Keep the $hint value?"
3299 . ./myread
3300 case "$ans" in
3301 y) td=$was; tu=$was;;
3302 esac
3303 EOSC
3304
3305 : function used to set $1 to $val
3306 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3307 case "$val$was" in
3308 $define$undef) . ./whoa; eval "$var=\$td";;
3309 $undef$define) . ./whoa; eval "$var=\$tu";;
3310 *) eval "$var=$val";;
3311 esac'
3312
3313 case "$usethreads" in
3314 $define|true|[yY]*)     dflt='y';;
3315 *) dflt='n';;
3316 esac
3317 cat <<EOM
3318
3319 Perl can be built to take advantage of threads on some systems.
3320 To do so, Configure can be run with -Dusethreads.
3321
3322 Note that threading is a highly experimental feature, and
3323 some known race conditions still remain.  If you choose to try
3324 it, be very sure to not actually deploy it for production
3325 purposes.  README.threads has more details, and is required
3326 reading if you enable threads.
3327
3328 If this doesn't make any sense to you, just accept the default '$dflt'.
3329 EOM
3330 rp='Build a threading Perl?'
3331 . ./myread
3332 case "$ans" in
3333 y|Y)    val="$define" ;;
3334 *)      val="$undef" ;;
3335 esac
3336 set usethreads
3337 eval $setvar
3338
3339 case "$usethreads" in
3340 $define)
3341         $cat <<EOM
3342
3343 As of 5.5.640, Perl has two different internal threading implementations,
3344 the 5.005 version (5005threads) and an interpreter-based version
3345 (ithreads) that has one interpreter per thread.  Both are very 
3346 experimental.  This arrangement exists to help developers work out
3347 which one is better.
3348
3349 If you're a casual user, you probably don't want interpreter-threads
3350 at this time.  But if you do, the 'threads' module allows their use,
3351 and the 'Thread' module offers an interface to both 5005threads and
3352 ithreads (whichever has been configured).
3353 EOM
3354         : Default to ithreads unless overridden on command line or with
3355         : old config.sh
3356         dflt='y'
3357         case "$use5005threads" in
3358                 $define|true|[yY]*) dflt='n';;
3359         esac
3360         case "$useithreads" in
3361                 $undef|false|[nN]*) dflt='n';;
3362         esac
3363         rp='Use interpreter-based ithreads?'
3364         . ./myread
3365         case "$ans" in
3366         y|Y)    val="$define" ;;
3367         *)      val="$undef" ;;
3368         esac
3369         set useithreads
3370         eval $setvar
3371         : Now set use5005threads to the opposite value.
3372         case "$useithreads" in
3373         $define) val="$undef" ;;
3374         *) val="$define" ;;
3375         esac
3376         set use5005threads
3377         eval $setvar
3378         ;;
3379 *)
3380         useithreads="$undef"
3381         use5005threads="$undef"
3382         ;;
3383 esac
3384
3385 case "$useithreads$use5005threads" in
3386 "$define$define")
3387         $cat >&4 <<EOM
3388
3389 You cannot have both the ithreads and the 5.005 threads enabled
3390 at the same time.  Disabling the 5.005 threads since they are
3391 much less stable than the ithreads.
3392
3393 EOM
3394         use5005threads="$undef"
3395         ;;
3396 esac
3397
3398 case "$d_oldpthreads" in
3399 '')     : Configure tests would be welcome here.  For now, assume undef.
3400         val="$undef" ;;
3401 *)      val="$d_oldpthreads" ;;
3402 esac
3403 set d_oldpthreads
3404 eval $setvar
3405
3406
3407 case "$usethreads" in
3408 "$define"|true|[yY]*)
3409 : Look for a hint-file generated 'call-back-unit'.  If the
3410 : user has specified that a threading perl is to be built,
3411 : we may need to set or change some other defaults.
3412         if $test -f usethreads.cbu; then
3413                 echo "Your platform has some specific hints for threaded builds, using them..."
3414                 . ./usethreads.cbu
3415         else
3416                 $cat <<EOM
3417 (Your platform doesn't have any specific hints for threaded builds.
3418  Assuming POSIX threads, then.)
3419 EOM
3420         fi
3421         ;;
3422 esac
3423
3424 cat <<EOM
3425
3426 Perl can be built so that multiple Perl interpreters can coexist
3427 within the same Perl executable.
3428 EOM
3429
3430 case "$useithreads" in
3431 $define)
3432         cat <<EOM
3433 This multiple interpreter support is required for interpreter-based threads.
3434 EOM
3435         val="$define"
3436         ;;
3437 *)      case "$usemultiplicity" in
3438         $define|true|[yY]*)     dflt='y';;
3439         *) dflt='n';;
3440         esac
3441         echo " "
3442         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3443         rp='Build Perl for multiplicity?'
3444         . ./myread
3445         case "$ans" in
3446         y|Y)    val="$define" ;;
3447         *)      val="$undef" ;;
3448         esac
3449         ;;
3450 esac
3451 set usemultiplicity
3452 eval $setvar
3453
3454
3455 case "$usemorebits" in
3456 "$define"|true|[yY]*)
3457         use64bitint="$define"
3458         uselongdouble="$define"
3459         usemorebits="$define"
3460         ;;
3461 *)      usemorebits="$undef"
3462         ;;
3463 esac
3464
3465 : make some quick guesses about what we are up against
3466 echo " "
3467 $echo $n "Hmm...  $c"
3468 echo exit 1 >bsd
3469 echo exit 1 >usg
3470 echo exit 1 >v7
3471 echo exit 1 >osf1
3472 echo exit 1 >eunice
3473 echo exit 1 >xenix
3474 echo exit 1 >venix
3475 echo exit 1 >os2
3476 d_bsd="$undef"
3477 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3478 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3479 then
3480         echo "Looks kind of like an OSF/1 system, but we'll see..."
3481         echo exit 0 >osf1
3482 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3483         xxx=`./loc addbib blurfl $pth`
3484         if $test -f $xxx; then
3485         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3486                 echo exit 0 >bsd
3487                 echo exit 0 >usg
3488         else
3489                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3490                         echo "Looks kind of like an extended USG system, but we'll see..."
3491                 else
3492                         echo "Looks kind of like a USG system, but we'll see..."
3493                 fi
3494                 echo exit 0 >usg
3495         fi
3496 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3497         echo "Looks kind of like a BSD system, but we'll see..."
3498         d_bsd="$define"
3499         echo exit 0 >bsd
3500 else
3501         echo "Looks kind of like a Version 7 system, but we'll see..."
3502         echo exit 0 >v7
3503 fi
3504 case "$eunicefix" in
3505 *unixtovms*)
3506         $cat <<'EOI'
3507 There is, however, a strange, musty smell in the air that reminds me of
3508 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3509 EOI
3510         echo exit 0 >eunice
3511         d_eunice="$define"
3512 : it so happens the Eunice I know will not run shell scripts in Unix format
3513         ;;
3514 *)
3515         echo " "
3516         echo "Congratulations.  You aren't running Eunice."
3517         d_eunice="$undef"
3518         ;;
3519 esac
3520 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3521 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3522 : semicolon as a patch separator
3523 case "$p_" in
3524 :) ;;
3525 *)
3526         $cat <<'EOI'
3527 I have the feeling something is not exactly right, however...don't tell me...
3528 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3529 (Or you may be running DOS with DJGPP.)
3530 EOI
3531         echo exit 0 >os2
3532         ;;
3533 esac
3534 if test -f /xenix; then
3535         echo "Actually, this looks more like a XENIX system..."
3536         echo exit 0 >xenix
3537         d_xenix="$define"
3538 else
3539         echo " "
3540         echo "It's not Xenix..."
3541         d_xenix="$undef"
3542 fi
3543 chmod +x xenix
3544 $eunicefix xenix
3545 if test -f /venix; then
3546         echo "Actually, this looks more like a VENIX system..."
3547         echo exit 0 >venix
3548 else
3549         echo " "
3550         if ./xenix; then
3551                 : null
3552         else
3553                 echo "Nor is it Venix..."
3554         fi
3555 fi
3556 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3557 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3558 $rm -f foo
3559
3560 case "$cc" in
3561 '') dflt=cc;;
3562 *) dflt="$cc";;
3563 esac
3564 rp="Use which C compiler?"
3565 . ./myread
3566 cc="$ans"
3567
3568 : See if they have not cc but they do have gcc
3569 . ./trygcc
3570 : Look for a hint-file generated 'call-back-unit'.  Now that the
3571 : user has specified the compiler, we may need to set or change some
3572 : other defaults.
3573 if $test -f cc.cbu; then
3574     . ./cc.cbu
3575 fi
3576 . ./checkcc
3577
3578 echo " "
3579 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3580 $cat >try.c <<EOM
3581 #include <stdio.h>
3582 int main() {
3583 #ifdef __GNUC__
3584 #ifdef __VERSION__
3585         printf("%s\n", __VERSION__);
3586 #else
3587         printf("%s\n", "1");
3588 #endif
3589 #endif
3590         exit(0);
3591 }
3592 EOM
3593 if $cc -o try $ccflags $ldflags try.c; then
3594         gccversion=`$run ./try`
3595         case "$gccversion" in
3596         '') echo "You are not using GNU cc." ;;
3597         *)  echo "You are using GNU cc $gccversion."
3598             ccname=gcc  
3599             ;;
3600         esac
3601 else
3602         echo " "
3603         echo "*** WHOA THERE!!! ***" >&4
3604         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3605         case "$knowitall" in
3606         '')
3607         echo "    You'd better start hunting for one and let me know about it." >&4
3608                 exit 1
3609                 ;;
3610         esac
3611 fi
3612 $rm -f try try.*
3613 case "$gccversion" in
3614 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3615 esac
3616 case "$gccversion" in
3617 '') gccosandvers='' ;;
3618 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3619    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3620    gccshortvers=''
3621    case "$gccosandvers" in
3622    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3623    $osname$osvers) ;; # looking good
3624    $osname*) cat <<EOM >&4
3625
3626 *** WHOA THERE!!! ***
3627
3628     Your gcc has not been compiled for the exact release of
3629     your operating system ($gccosandvers versus $osname$osvers).
3630
3631     In general it is a good idea to keep gcc synchronized with
3632     the operating system because otherwise serious problems
3633     may ensue when trying to compile software, like Perl.
3634
3635     I'm trying to be optimistic here, though, and will continue.
3636     If later during the configuration and build icky compilation
3637     problems appear (headerfile conflicts being the most common
3638     manifestation), I suggest reinstalling the gcc to match
3639     your operating system release.
3640
3641 EOM
3642       ;;
3643    *) gccosandvers='' ;; # failed to parse, better be silent
3644    esac
3645    ;;
3646 esac
3647 case "$ccname" in
3648 '') ccname="$cc" ;;
3649 esac
3650
3651
3652 : decide how portable to be.  Allow command line overrides.
3653 case "$d_portable" in
3654 "$undef") ;;
3655 *)      d_portable="$define" ;;
3656 esac
3657
3658 : set up shell script to do ~ expansion
3659 cat >filexp <<EOSS
3660 $startsh
3661 : expand filename
3662 case "\$1" in
3663  ~/*|~)
3664         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3665         ;;
3666  ~*)
3667         if $test -f /bin/csh; then
3668                 /bin/csh -f -c "glob \$1"
3669                 failed=\$?
3670                 echo ""
3671                 exit \$failed
3672         else
3673                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3674                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3675                 if $test ! -d "\$dir"; then
3676                         me=\`basename \$0\`
3677                         echo "\$me: can't locate home directory for: \$name" >&2
3678                         exit 1
3679                 fi
3680                 case "\$1" in
3681                 */*)
3682                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3683                         ;;
3684                 *)
3685                         echo \$dir
3686                         ;;
3687                 esac
3688         fi
3689         ;;
3690 *)
3691         echo \$1
3692         ;;
3693 esac
3694 EOSS
3695 chmod +x filexp
3696 $eunicefix filexp
3697
3698 : now set up to get a file name
3699 cat <<EOS >getfile
3700 $startsh
3701 EOS
3702 cat <<'EOSC' >>getfile
3703 tilde=''
3704 fullpath=''
3705 already=''
3706 skip=''
3707 none_ok=''
3708 exp_file=''
3709 nopath_ok=''
3710 orig_rp="$rp"
3711 orig_dflt="$dflt"
3712 case "$gfpth" in
3713 '') gfpth='.' ;;
3714 esac
3715
3716 case "$fn" in
3717 *\(*)
3718         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3719         fn=`echo $fn | sed 's/(.*)//'`
3720         ;;
3721 esac
3722
3723 case "$fn" in
3724 *:*)
3725         loc_file=`expr $fn : '.*:\(.*\)'`
3726         fn=`expr $fn : '\(.*\):.*'`
3727         ;;
3728 esac
3729
3730 case "$fn" in
3731 *~*) tilde=true;;
3732 esac
3733 case "$fn" in
3734 */*) fullpath=true;;
3735 esac
3736 case "$fn" in
3737 *+*) skip=true;;
3738 esac
3739 case "$fn" in
3740 *n*) none_ok=true;;
3741 esac
3742 case "$fn" in
3743 *e*) exp_file=true;;
3744 esac
3745 case "$fn" in
3746 *p*) nopath_ok=true;;
3747 esac
3748
3749 case "$fn" in
3750 *f*) type='File';;
3751 *d*) type='Directory';;
3752 *l*) type='Locate';;
3753 esac
3754
3755 what="$type"
3756 case "$what" in
3757 Locate) what='File';;
3758 esac
3759
3760 case "$exp_file" in
3761 '')
3762         case "$d_portable" in
3763         "$define") ;;
3764         *) exp_file=true;;
3765         esac
3766         ;;
3767 esac
3768
3769 cd ..
3770 while test "$type"; do
3771         redo=''
3772         rp="$orig_rp"
3773         dflt="$orig_dflt"
3774         case "$tilde" in
3775         true) rp="$rp (~name ok)";;
3776         esac
3777         . UU/myread
3778         if test -f UU/getfile.ok && \
3779                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3780         then
3781                 value="$ans"
3782                 ansexp="$ans"
3783                 break
3784         fi
3785         case "$ans" in
3786         none)
3787                 value=''
3788                 ansexp=''
3789                 case "$none_ok" in
3790                 true) type='';;
3791                 esac
3792                 ;;
3793         *)
3794                 case "$tilde" in
3795                 '') value="$ans"
3796                         ansexp="$ans";;
3797                 *)
3798                         value=`UU/filexp $ans`
3799                         case $? in
3800                         0)
3801                                 if test "$ans" != "$value"; then
3802                                         echo "(That expands to $value on this system.)"
3803                                 fi
3804                                 ;;
3805                         *) value="$ans";;
3806                         esac
3807                         ansexp="$value"
3808                         case "$exp_file" in
3809                         '') value="$ans";;
3810                         esac
3811                         ;;
3812                 esac
3813                 case "$fullpath" in
3814                 true)
3815                         case "$ansexp" in
3816                         /*) value="$ansexp" ;;
3817                         [a-zA-Z]:/*) value="$ansexp" ;;
3818                         *)
3819                                 redo=true
3820                                 case "$already" in
3821                                 true)
3822                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3823                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3824                                         ;;
3825                                 *)
3826                                 echo "Please give a full path name, starting with slash." >&4
3827                                         case "$tilde" in
3828                                         true)
3829                                 echo "Note that using ~name is ok provided it expands well." >&4
3830                                                 already=true
3831                                                 ;;
3832                                         esac
3833                                 esac
3834                                 ;;
3835                         esac
3836                         ;;
3837                 esac
3838                 case "$redo" in
3839                 '')
3840                         case "$type" in
3841                         File)
3842                                 for fp in $gfpth; do
3843                                         if test "X$fp" = X.; then
3844                                             pf="$ansexp"
3845                                         else    
3846                                             pf="$fp/$ansexp"
3847                                         fi
3848                                         if test -f "$pf"; then
3849                                                 type=''
3850                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3851                                         then
3852                                                 echo "($value is not a plain file, but that's ok.)"
3853                                                 type=''
3854                                         fi
3855                                         if test X"$type" = X; then
3856                                             value="$pf"
3857                                             break
3858                                         fi
3859                                 done
3860                                 ;;
3861                         Directory)
3862                                 for fp in $gfpth; do
3863                                         if test "X$fp" = X.; then
3864                                             dir="$ans"
3865                                             direxp="$ansexp"
3866                                         else    
3867                                             dir="$fp/$ansexp"
3868                                             direxp="$fp/$ansexp"
3869                                         fi
3870                                         if test -d "$direxp"; then
3871                                                 type=''
3872                                                 value="$dir"
3873                                                 break
3874                                         fi
3875                                 done
3876                                 ;;
3877                         Locate)
3878                                 if test -d "$ansexp"; then
3879                                         echo "(Looking for $loc_file in directory $value.)"
3880                                         value="$value/$loc_file"
3881                                         ansexp="$ansexp/$loc_file"
3882                                 fi
3883                                 if test -f "$ansexp"; then
3884                                         type=''
3885                                 fi
3886                                 case "$nopath_ok" in
3887                                 true)   case "$value" in
3888                                         */*) ;;
3889                                         *)      echo "Assuming $value will be in people's path."
3890                                                 type=''
3891                                                 ;;
3892                                         esac
3893                                         ;;
3894                                 esac
3895                                 ;;
3896                         esac
3897
3898                         case "$skip" in
3899                         true) type='';
3900                         esac
3901
3902                         case "$type" in
3903                         '') ;;
3904                         *)
3905                                 if test "$fastread" = yes; then
3906                                         dflt=y
3907                                 else
3908                                         dflt=n
3909                                 fi
3910                                 rp="$what $value doesn't exist.  Use that name anyway?"
3911                                 . UU/myread
3912                                 dflt=''
3913                                 case "$ans" in
3914                                 y*) type='';;
3915                                 *) echo " ";;
3916                                 esac
3917                                 ;;
3918                         esac
3919                         ;;
3920                 esac
3921                 ;;
3922         esac
3923 done
3924 cd UU
3925 ans="$value"
3926 rp="$orig_rp"
3927 dflt="$orig_dflt"
3928 rm -f getfile.ok
3929 test "X$gfpthkeep" != Xy && gfpth=""
3930 EOSC
3931
3932 : What should the include directory be ?
3933 echo " "
3934 $echo $n "Hmm...  $c"
3935 dflt='/usr/include'
3936 incpath=''
3937 mips_type=''
3938 if $test -f /bin/mips && /bin/mips; then
3939         echo "Looks like a MIPS system..."
3940         $cat >usr.c <<'EOCP'
3941 #ifdef SYSTYPE_BSD43
3942 /bsd43
3943 #endif
3944 EOCP
3945         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3946                 dflt='/bsd43/usr/include'
3947                 incpath='/bsd43'
3948                 mips_type='BSD 4.3'
3949         else
3950                 mips_type='System V'
3951         fi
3952         $rm -f usr.c usr.out
3953         echo "and you're compiling with the $mips_type compiler and libraries."
3954         xxx_prompt=y
3955         echo "exit 0" >mips
3956 else
3957         echo "Doesn't look like a MIPS system."
3958         xxx_prompt=n
3959         echo "exit 1" >mips
3960 fi
3961 chmod +x mips
3962 $eunicefix mips
3963 case "$usrinc" in
3964 '') ;;
3965 *) dflt="$usrinc";;
3966 esac
3967 case "$xxx_prompt" in
3968 y)      fn=d/
3969         echo " "
3970         rp='Where are the include files you want to use?'
3971         . ./getfile
3972         usrinc="$ans"
3973         ;;
3974 *)      usrinc="$dflt"
3975         ;;
3976 esac
3977
3978 : see how we invoke the C preprocessor
3979 echo " "
3980 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3981 cat <<'EOT' >testcpp.c
3982 #define ABC abc
3983 #define XYZ xyz
3984 ABC.XYZ
3985 EOT
3986 cd ..
3987 if test ! -f cppstdin; then
3988         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3989                 # AIX cc -E doesn't show the absolute headerfile
3990                 # locations but we'll cheat by using the -M flag.
3991                 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
3992         else
3993                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3994         fi
3995 else
3996         echo "Keeping your $hint cppstdin wrapper."
3997 fi
3998 chmod 755 cppstdin
3999 wrapper=`pwd`/cppstdin
4000 ok='false'
4001 cd UU
4002
4003 if $test "X$cppstdin" != "X" && \
4004         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4005         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4006 then
4007         echo "You used to use $cppstdin $cppminus so we'll use that again."
4008         case "$cpprun" in
4009         '') echo "But let's see if we can live without a wrapper..." ;;
4010         *)
4011                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4012                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4013                 then
4014                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4015                         ok='true'
4016                 else
4017                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4018                 fi
4019                 ;;
4020         esac
4021 else
4022         case "$cppstdin" in
4023         '') ;;
4024         *)
4025                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4026                 ;;
4027         esac
4028 fi
4029
4030 if $ok; then
4031         : nothing
4032 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4033         $cc -E <testcpp.c >testcpp.out 2>&1; \
4034         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4035         echo "Yup, it does."
4036         x_cpp="$cc -E"
4037         x_minus='';
4038 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4039         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4040         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4041         echo "Yup, it does."
4042         x_cpp="$cc -E"
4043         x_minus='-';
4044 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4045         $cc -P <testcpp.c >testcpp.out 2>&1; \
4046         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4047         echo "Yipee, that works!"
4048         x_cpp="$cc -P"
4049         x_minus='';
4050 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4051         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4052         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4053         echo "At long last!"
4054         x_cpp="$cc -P"
4055         x_minus='-';
4056 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4057         $cpp <testcpp.c >testcpp.out 2>&1; \
4058         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4059         echo "It works!"
4060         x_cpp="$cpp"
4061         x_minus='';
4062 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4063         $cpp - <testcpp.c >testcpp.out 2>&1; \
4064         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4065         echo "Hooray, it works!  I was beginning to wonder."
4066         x_cpp="$cpp"
4067         x_minus='-';
4068 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4069         $wrapper <testcpp.c >testcpp.out 2>&1; \
4070         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4071         x_cpp="$wrapper"
4072         x_minus=''
4073         echo "Eureka!"
4074 else
4075         dflt=''
4076         rp="No dice.  I can't find a C preprocessor.  Name one:"
4077         . ./myread
4078         x_cpp="$ans"
4079         x_minus=''
4080         $x_cpp <testcpp.c >testcpp.out 2>&1
4081         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4082                 echo "OK, that will do." >&4
4083         else
4084 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4085                 exit 1
4086         fi
4087 fi
4088
4089 case "$ok" in
4090 false)
4091         cppstdin="$x_cpp"
4092         cppminus="$x_minus"
4093         cpprun="$x_cpp"
4094         cpplast="$x_minus"
4095         set X $x_cpp
4096         shift
4097         case "$1" in
4098         "$cpp")
4099                 echo "Perhaps can we force $cc -E using a wrapper..."
4100                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4101                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4102                 then
4103                         echo "Yup, we can."
4104                         cppstdin="$wrapper"
4105                         cppminus='';
4106                 else
4107                         echo "Nope, we'll have to live without it..."
4108                 fi
4109                 ;;
4110         esac
4111         case "$cpprun" in
4112         "$wrapper")
4113                 cpprun=''
4114                 cpplast=''
4115                 ;;
4116         esac
4117         ;;
4118 esac
4119
4120 case "$cppstdin" in
4121 "$wrapper"|'cppstdin') ;;
4122 *) $rm -f $wrapper;;
4123 esac
4124 $rm -f testcpp.c testcpp.out
4125
4126 : Set private lib path
4127 case "$plibpth" in
4128 '') if ./mips; then
4129                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4130         fi;;
4131 esac
4132 case "$libpth" in
4133 ' ') dlist='';;
4134 '') dlist="$loclibpth $plibpth $glibpth";;
4135 *) dlist="$libpth";;
4136 esac
4137
4138 : Now check and see which directories actually exist, avoiding duplicates
4139 libpth=''
4140 for xxx in $dlist
4141 do
4142     if $test -d $xxx; then
4143                 case " $libpth " in
4144                 *" $xxx "*) ;;
4145                 *) libpth="$libpth $xxx";;
4146                 esac
4147     fi
4148 done
4149 $cat <<'EOM'
4150
4151 Some systems have incompatible or broken versions of libraries.  Among
4152 the directories listed in the question below, please remove any you
4153 know not to be holding relevant libraries, and add any that are needed.
4154 Say "none" for none.
4155
4156 EOM
4157 case "$libpth" in
4158 '') dflt='none';;
4159 *)
4160         set X $libpth
4161         shift
4162         dflt=${1+"$@"}
4163         ;;
4164 esac
4165 rp="Directories to use for library searches?"
4166 . ./myread
4167 case "$ans" in
4168 none) libpth=' ';;
4169 *) libpth="$ans";;
4170 esac
4171
4172 : compute shared library extension
4173 case "$so" in
4174 '')
4175         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4176                 dflt='sl'
4177         else
4178                 dflt='so'
4179         fi
4180         ;;
4181 *) dflt="$so";;
4182 esac
4183 $cat <<EOM
4184
4185 On some systems, shared libraries may be available.  Answer 'none' if
4186 you want to suppress searching of shared libraries for the remainder
4187 of this configuration.
4188
4189 EOM
4190 rp='What is the file extension used for shared libraries?'
4191 . ./myread
4192 so="$ans"
4193
4194 : Define several unixisms.
4195 : Hints files or command line option can be used to override them.
4196 : The convoluted testing is in case hints files set either the old
4197 : or the new name.
4198 case "$_exe" in
4199 '')     case "$exe_ext" in
4200         '')     ;;
4201         *)      _exe="$exe_ext" ;;
4202         esac
4203         ;;
4204 esac
4205 case "$_a" in
4206 '')     case "$lib_ext" in
4207     '') _a='.a';;
4208         *)      _a="$lib_ext" ;;
4209         esac
4210         ;;
4211 esac
4212 case "$_o" in
4213 '') case "$obj_ext" in
4214         '')     _o='.o';;
4215         *)      _o="$obj_ext";;
4216         esac
4217         ;;
4218 esac
4219 case "$p_" in
4220 '') case "$path_sep" in
4221         '')     p_=':';;
4222         *)      p_="$path_sep";;
4223         esac
4224         ;;
4225 esac
4226 exe_ext=$_exe
4227 lib_ext=$_a
4228 obj_ext=$_o
4229 path_sep=$p_
4230
4231 : Which makefile gets called first.  This is used by make depend.
4232 case "$firstmakefile" in
4233 '') firstmakefile='makefile';;
4234 esac
4235
4236 case "$usesocks" in
4237 $define|true|[yY]*)     dflt='y';;
4238 *) dflt='n';;
4239 esac
4240 cat <<EOM
4241
4242 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4243 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4244 to use the PerlIO abstraction layer, this will be implicitly selected.
4245
4246 If this doesn't make any sense to you, just accept the default '$dflt'.
4247 EOM
4248 rp='Build Perl for SOCKS?'
4249 . ./myread
4250 case "$ans" in
4251 y|Y)    val="$define" ;;     
4252 *)      val="$undef" ;;
4253 esac
4254 set usesocks
4255 eval $setvar
4256
4257 case "$usesocks" in
4258 $define|true|[yY]*) useperlio="$define";;
4259 esac
4260
4261 : Looking for optional libraries
4262 echo " "
4263 echo "Checking for optional libraries..." >&4
4264 case "$libs" in
4265 ' '|'') dflt='';;
4266 *) dflt="$libs";;
4267 esac
4268 case "$libswanted" in
4269 '') libswanted='c_s';;
4270 esac
4271 case "$usesocks" in
4272 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4273 esac
4274 libsfound=''
4275 libsfiles=''
4276 libsdirs=''
4277 libspath=''
4278 for thisdir in $libpth $xlibpth; do
4279   test -d $thisdir && libspath="$libspath $thisdir"
4280 done
4281 for thislib in $libswanted; do
4282         for thisdir in $libspath; do
4283             xxx=''
4284             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4285                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4286                 $test -f "$xxx" && eval $libscheck
4287                 $test -f "$xxx" && libstyle=shared
4288             fi
4289             if test ! -f "$xxx"; then
4290                 xxx=$thisdir/lib$thislib.$so
4291                 $test -f "$xxx" && eval $libscheck
4292                 $test -f "$xxx" && libstyle=shared
4293             fi  
4294             if test ! -f "$xxx"; then
4295                 xxx=$thisdir/lib$thislib$_a
4296                 $test -f "$xxx" && eval $libscheck
4297                 $test -f "$xxx" && libstyle=static
4298             fi
4299             if test ! -f "$xxx"; then
4300                 xxx=$thisdir/$thislib$_a
4301                 $test -f "$xxx" && eval $libscheck
4302                 $test -f "$xxx" && libstyle=static
4303             fi
4304             if test ! -f "$xxx"; then
4305                 xxx=$thisdir/lib${thislib}_s$_a
4306                 $test -f "$xxx" && eval $libscheck
4307                 $test -f "$xxx" && libstyle=static
4308                 $test -f "$xxx" && thislib=${thislib}_s
4309             fi
4310             if test ! -f "$xxx"; then
4311                 xxx=$thisdir/Slib$thislib$_a
4312                 $test -f "$xxx" && eval $libscheck
4313                 $test -f "$xxx" && libstyle=static
4314             fi
4315             if $test -f "$xxx"; then
4316                 case "$libstyle" in
4317                 shared) echo "Found -l$thislib (shared)." ;;
4318                 static) echo "Found -l$thislib." ;;
4319                 *)      echo "Found -l$thislib ($libstyle)." ;;
4320                 esac
4321                 case " $dflt " in
4322                 *"-l$thislib "*);;
4323                 *) dflt="$dflt -l$thislib"
4324                    libsfound="$libsfound $xxx"
4325                    yyy=`basename $xxx`
4326                    libsfiles="$libsfiles $yyy"
4327                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4328                    case " $libsdirs " in
4329                    *" $yyy "*) ;;
4330                    *) libsdirs="$libsdirs $yyy" ;;
4331                    esac
4332                    ;;
4333                 esac
4334                 break
4335             fi  
4336         done
4337         if $test ! -f "$xxx"; then
4338             echo "No -l$thislib."
4339         fi
4340 done
4341 set X $dflt
4342 shift
4343 dflt="$*"
4344 case "$libs" in
4345 '') dflt="$dflt";;
4346 *) dflt="$libs";;
4347 esac
4348 case "$dflt" in
4349 ' '|'') dflt='none';;
4350 esac
4351
4352 $cat <<EOM
4353
4354 In order to compile $package on your machine, a number of libraries
4355 are usually needed.  Include any other special libraries here as well.
4356 Say "none" for none.  The default list is almost always right.
4357 EOM
4358
4359 echo " "
4360 rp="What libraries to use?"
4361 . ./myread
4362 case "$ans" in
4363 none) libs=' ';;
4364 *) libs="$ans";;
4365 esac
4366
4367 : determine optimization, if desired, or use for debug flag also
4368 case "$optimize" in
4369 ' '|$undef) dflt='none';;
4370 '') dflt='-O';;
4371 *) dflt="$optimize";;
4372 esac
4373 $cat <<EOH
4374
4375 By default, $package compiles with the -O flag to use the optimizer.
4376 Alternately, you might want to use the symbolic debugger, which uses
4377 the -g flag (on traditional Unix systems).  Either flag can be
4378 specified here.  To use neither flag, specify the word "none".
4379
4380 EOH
4381 rp="What optimizer/debugger flag should be used?"
4382 . ./myread
4383 optimize="$ans"
4384 case "$optimize" in
4385 'none') optimize=" ";;
4386 esac
4387
4388 dflt=''
4389 : We will not override a previous value, but we might want to
4390 : augment a hint file
4391 case "$hint" in
4392 default|recommended)
4393         case "$gccversion" in
4394         1*) dflt='-fpcc-struct-return' ;;
4395         esac
4396         case "$optimize" in
4397         *-g*) dflt="$dflt -DDEBUGGING";;
4398         esac
4399         case "$gccversion" in
4400         2*) if test -d /etc/conf/kconfig.d &&
4401                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4402                 then
4403                         dflt="$dflt -posix"
4404                 fi
4405                 ;;
4406         esac
4407         case "$gccversion" in
4408         1*) ;;
4409         2.[0-8]*) ;;
4410         ?*)     echo " "
4411                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4412                 echo 'int main(void) { return 0; }' > gcctest.c
4413                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4414                         echo "Yes, it does." 2>&1
4415                         case "$ccflags" in
4416                         *strict-aliasing*) 
4417                                 echo "Leaving current flags $ccflags alone." 2>&1
4418                                 ;;
4419                         *) dflt="$dflt -fno-strict-aliasing" ;;
4420                         esac
4421                 else
4422                         echo "Nope, it doesn't, but that's ok." 2>&1
4423                 fi
4424                 ;;
4425         esac
4426         ;;
4427 esac
4428
4429 case "$mips_type" in
4430 *BSD*|'') inclwanted="$locincpth $usrinc";;
4431 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4432 esac
4433 for thisincl in $inclwanted; do
4434         if $test -d $thisincl; then
4435                 if $test x$thisincl != x$usrinc; then
4436                         case "$dflt" in
4437                         *" -I$thisincl "*);;
4438                         *) dflt="$dflt -I$thisincl ";;
4439                         esac
4440                 fi
4441         fi
4442 done
4443
4444 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4445         xxx=true;
4446 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4447         xxx=true;
4448 else
4449         xxx=false;
4450 fi;
4451 if $xxx; then
4452         case "$dflt" in
4453         *$2*);;
4454         *) dflt="$dflt -D$2";;
4455         esac;
4456 fi'
4457
4458 set signal.h LANGUAGE_C; eval $inctest
4459
4460 case "$usesocks" in
4461 $define)
4462         ccflags="$ccflags -DSOCKS"
4463         ;;
4464 esac
4465
4466 case "$hint" in
4467 default|recommended) dflt="$ccflags $dflt" ;;
4468 *) dflt="$ccflags";;
4469 esac
4470
4471 case "$dflt" in
4472 ''|' ') dflt=none;;
4473 esac
4474
4475 $cat <<EOH
4476
4477 Your C compiler may want other flags.  For this question you should include
4478 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4479 but you should NOT include libraries or ld flags like -lwhatever.  If you
4480 want $package to honor its debug switch, you should include -DDEBUGGING here.
4481 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4482
4483 To use no flags, specify the word "none".
4484
4485 EOH
4486 set X $dflt
4487 shift
4488 dflt=${1+"$@"}
4489 rp="Any additional cc flags?"
4490 . ./myread
4491 case "$ans" in
4492 none) ccflags='';;
4493 *) ccflags="$ans";;
4494 esac
4495
4496 : the following weeds options from ccflags that are of no interest to cpp
4497 case "$cppflags" in
4498 '') cppflags="$ccflags" ;;
4499 *)  cppflags="$cppflags $ccflags" ;;
4500 esac
4501 case "$gccversion" in
4502 1*) cppflags="$cppflags -D__GNUC__"
4503 esac
4504 case "$mips_type" in
4505 '');;
4506 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4507 esac
4508 case "$cppflags" in
4509 '');;
4510 *)
4511         echo " "
4512         echo "Let me guess what the preprocessor flags are..." >&4
4513         set X $cppflags
4514         shift
4515         cppflags=''
4516         $cat >cpp.c <<'EOM'
4517 #define BLURFL foo
4518
4519 BLURFL xx LFRULB
4520 EOM
4521         previous=''
4522         for flag in $*
4523         do
4524                 case "$flag" in
4525                 -*) ftry="$flag";;
4526                 *) ftry="$previous $flag";;
4527                 esac
4528                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4529                         >cpp1.out 2>/dev/null && \
4530                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4531                         >cpp2.out 2>/dev/null && \
4532                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4533                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4534                 then
4535                         cppflags="$cppflags $ftry"
4536                         previous=''
4537                 else
4538                         previous="$flag"
4539                 fi
4540         done
4541         set X $cppflags
4542         shift
4543         cppflags=${1+"$@"}
4544         case "$cppflags" in
4545         *-*)  echo "They appear to be: $cppflags";;
4546         esac
4547         $rm -f cpp.c cpp?.out
4548         ;;
4549 esac
4550
4551 : flags used in final linking phase
4552 case "$ldflags" in
4553 '') if ./venix; then
4554                 dflt='-i -z'
4555         else
4556                 dflt=''
4557         fi
4558         case "$ccflags" in
4559         *-posix*) dflt="$dflt -posix" ;;
4560         esac
4561         ;;
4562 *) dflt="$ldflags";;
4563 esac
4564
4565 : Try to guess additional flags to pick up local libraries.
4566 for thislibdir in $libpth; do
4567         case " $loclibpth " in
4568         *" $thislibdir "*)
4569                 case "$dflt " in 
4570                 *"-L$thislibdir "*) ;;
4571                 *)  dflt="$dflt -L$thislibdir" ;;
4572                 esac
4573                 ;;
4574         esac
4575 done
4576
4577 case "$dflt" in
4578 '') dflt='none' ;;
4579 esac
4580
4581 $cat <<EOH
4582
4583 Your C linker may need flags.  For this question you should
4584 include -L/whatever and any other flags used by the C linker, but you
4585 should NOT include libraries like -lwhatever.
4586
4587 Make sure you include the appropriate -L/path flags if your C linker
4588 does not normally search all of the directories you specified above,
4589 namely
4590         $libpth
4591 To use no flags, specify the word "none".
4592
4593 EOH
4594
4595 rp="Any additional ld flags (NOT including libraries)?"
4596 . ./myread
4597 case "$ans" in
4598 none) ldflags='';;
4599 *) ldflags="$ans";;
4600 esac
4601 rmlist="$rmlist pdp11"
4602
4603 : coherency check
4604 echo " "
4605 echo "Checking your choice of C compiler and flags for coherency..." >&4
4606 $cat > try.c <<'EOF'
4607 #include <stdio.h>
4608 int main() { printf("Ok\n"); exit(0); }
4609 EOF
4610 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4611 shift
4612 $cat >try.msg <<'EOM'
4613 I've tried to compile and run the following simple program:
4614
4615 EOM
4616 $cat try.c >> try.msg
4617
4618 $cat >> try.msg <<EOM
4619
4620 I used the command:
4621
4622         $*
4623         $run ./try
4624
4625 and I got the following output:
4626
4627 EOM
4628 dflt=y
4629 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4630         if $sh -c "$run ./try" >>try.msg 2>&1; then
4631                 xxx=`$run ./try`
4632                 case "$xxx" in
4633                 "Ok") dflt=n ;;
4634                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4635                         case " $libs " in
4636                         *" -lsfio "*)
4637                                 cat >> try.msg <<'EOQS'
4638 If $libs contains -lsfio, and sfio is mis-configured, then it
4639 sometimes (apparently) runs and exits with a 0 status, but with no
4640 output!  It may have to do with sfio's use of _exit vs. exit.
4641
4642 EOQS
4643                                 rp="You have a big problem.  Shall I abort Configure"
4644                                 dflt=y
4645                                 ;;
4646                         esac
4647                         ;;
4648                 esac
4649         else
4650                 echo "The program compiled OK, but exited with status $?." >>try.msg
4651                 rp="You have a problem.  Shall I abort Configure"
4652                 dflt=y
4653         fi
4654 else
4655         echo "I can't compile the test program." >>try.msg
4656         rp="You have a BIG problem.  Shall I abort Configure"
4657         dflt=y
4658 fi
4659 case "$dflt" in
4660 y)
4661         $cat try.msg >&4
4662         case "$knowitall" in
4663         '')
4664                 echo "(The supplied flags or libraries might be incorrect.)"
4665                 ;;
4666         *) dflt=n;;
4667         esac
4668         echo " "
4669         . ./myread
4670         case "$ans" in
4671         n*|N*) ;;
4672         *)      echo "Ok.  Stopping Configure." >&4
4673                 exit 1
4674                 ;;
4675         esac
4676         ;;
4677 n) echo "OK, that should do.";;
4678 esac
4679 $rm -f try try.* core
4680
4681 : define a shorthand compile call
4682 compile='
4683 mc_file=$1;
4684 shift;
4685 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4686 : define a shorthand compile call for compilations that should be ok.
4687 compile_ok='
4688 mc_file=$1;
4689 shift;
4690 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4691
4692 : check for lengths of integral types
4693 echo " "
4694 case "$intsize" in
4695 '')
4696         echo "Checking to see how big your integers are..." >&4
4697         $cat >try.c <<'EOCP'
4698 #include <stdio.h>
4699 int main()
4700 {
4701         printf("intsize=%d;\n", (int)sizeof(int));
4702         printf("longsize=%d;\n", (int)sizeof(long));
4703         printf("shortsize=%d;\n", (int)sizeof(short));
4704         exit(0);
4705 }
4706 EOCP
4707         set try
4708         if eval $compile_ok && $run ./try > /dev/null; then
4709                 eval `$run ./try`
4710                 echo "Your integers are $intsize bytes long."
4711                 echo "Your long integers are $longsize bytes long."
4712                 echo "Your short integers are $shortsize bytes long."
4713         else
4714                 $cat >&4 <<EOM
4715 !
4716 Help! I can't compile and run the intsize test program: please enlighten me!
4717 (This is probably a misconfiguration in your system or libraries, and
4718 you really ought to fix it.  Still, I'll try anyway.)
4719 !
4720 EOM
4721                 dflt=4
4722                 rp="What is the size of an integer (in bytes)?"
4723                 . ./myread
4724                 intsize="$ans"
4725                 dflt=$intsize
4726                 rp="What is the size of a long integer (in bytes)?"
4727                 . ./myread
4728                 longsize="$ans"
4729                 dflt=2
4730                 rp="What is the size of a short integer (in bytes)?"
4731                 . ./myread
4732                 shortsize="$ans"
4733         fi
4734         ;;
4735 esac
4736 $rm -f try try.*
4737
4738 : check for void type
4739 echo " "
4740 echo "Checking to see how well your C compiler groks the void type..." >&4
4741 case "$voidflags" in
4742 '')
4743         $cat >try.c <<'EOCP'
4744 #if TRY & 1
4745 void sub() {
4746 #else
4747 sub() {
4748 #endif
4749         extern void moo();      /* function returning void */
4750         void (*goo)();          /* ptr to func returning void */
4751 #if TRY & 8
4752         void *hue;              /* generic ptr */
4753 #endif
4754 #if TRY & 2
4755         void (*foo[10])();
4756 #endif
4757
4758 #if TRY & 4
4759         if(goo == moo) {
4760                 exit(0);
4761         }
4762 #endif
4763         exit(0);
4764 }
4765 int main() { sub(); }
4766 EOCP
4767         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4768                 voidflags=$defvoidused
4769         echo "Good.  It appears to support void to the level $package wants.">&4
4770                 if $contains warning .out >/dev/null 2>&1; then
4771                         echo "However, you might get some warnings that look like this:"
4772                         $cat .out
4773                 fi
4774         else
4775 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4776                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4777                         echo "It supports 1..."
4778                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4779                                 echo "It also supports 2..."
4780                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4781                                         voidflags=7
4782                                         echo "And it supports 4 but not 8 definitely."
4783                                 else
4784                                         echo "It doesn't support 4..."
4785                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4786                                                 voidflags=11
4787                                                 echo "But it supports 8."
4788                                         else
4789                                                 voidflags=3
4790                                                 echo "Neither does it support 8."
4791                                         fi
4792                                 fi
4793                         else
4794                                 echo "It does not support 2..."
4795                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4796                                         voidflags=13
4797                                         echo "But it supports 4 and 8."
4798                                 else
4799                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4800                                                 voidflags=5
4801                                                 echo "And it supports 4 but has not heard about 8."
4802                                         else
4803                                                 echo "However it supports 8 but not 4."
4804                                         fi
4805                                 fi
4806                         fi
4807                 else
4808                         echo "There is no support at all for void."
4809                         voidflags=0
4810                 fi
4811         fi
4812 esac
4813 case "$voidflags" in
4814 "$defvoidused") ;;
4815 *)      $cat >&4 <<'EOM'
4816   Support flag bits are:
4817     1: basic void declarations.
4818     2: arrays of pointers to functions returning void.
4819     4: operations between pointers to and addresses of void functions.
4820     8: generic void pointers.
4821 EOM
4822         dflt="$voidflags";
4823         rp="Your void support flags add up to what?"
4824         . ./myread
4825         voidflags="$ans"
4826         ;;
4827 esac
4828 $rm -f try.* .out
4829
4830 : check for length of pointer
4831 echo " "
4832 case "$ptrsize" in
4833 '')
4834         echo "Checking to see how big your pointers are..." >&4
4835         if test "$voidflags" -gt 7; then
4836                 echo '#define VOID_PTR char *' > try.c
4837         else
4838                 echo '#define VOID_PTR void *' > try.c
4839         fi
4840         $cat >>try.c <<'EOCP'
4841 #include <stdio.h>
4842 int main()
4843 {
4844     printf("%d\n", (int)sizeof(VOID_PTR));
4845     exit(0);
4846 }
4847 EOCP
4848         set try
4849         if eval $compile_ok; then
4850                 ptrsize=`$run ./try`
4851                 echo "Your pointers are $ptrsize bytes long."
4852         else
4853                 dflt='4'
4854                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4855                 rp="What is the size of a pointer (in bytes)?"
4856                 . ./myread
4857                 ptrsize="$ans"
4858         fi
4859         ;;
4860 esac
4861 $rm -f try.c try
4862
4863 : check for long long
4864 echo " "
4865 echo "Checking to see if you have long long..." >&4
4866 echo 'int main() { long long x = 7; return 0; }' > try.c
4867 set try
4868 if eval $compile; then
4869         val="$define"
4870         echo "You have long long."
4871 else
4872         val="$undef"
4873         echo "You do not have long long."
4874 fi
4875 $rm try.*
4876 set d_longlong
4877 eval $setvar
4878
4879 : check for length of long long
4880 case "${d_longlong}${longlongsize}" in
4881 $define)
4882         echo " "
4883         echo "Checking to see how big your long longs are..." >&4
4884         $cat >try.c <<'EOCP'
4885 #include <stdio.h>
4886 int main()
4887 {
4888     printf("%d\n", (int)sizeof(long long));
4889     return(0);
4890 }
4891 EOCP
4892         set try
4893         if eval $compile_ok; then
4894                 longlongsize=`$run ./try`
4895                 echo "Your long longs are $longlongsize bytes long."
4896         else
4897                 dflt='8'
4898                 echo " "
4899                 echo "(I can't seem to compile the test program.  Guessing...)"
4900                 rp="What is the size of a long long (in bytes)?"
4901                 . ./myread
4902                 longlongsize="$ans"
4903         fi
4904         if $test "X$longsize" = "X$longlongsize"; then
4905                 echo "(That isn't any different from an ordinary long.)"
4906         fi      
4907         ;;
4908 esac
4909 $rm -f try.* try
4910
4911 : determine filename position in cpp output
4912 echo " "
4913 echo "Computing filename position in cpp output for #include directives..." >&4
4914 case "$osname" in
4915 vos) testaccess=-e ;;
4916 *)   testaccess=-r ;;
4917 esac
4918 echo '#include <stdio.h>' > foo.c
4919 $cat >fieldn <<EOF
4920 $startsh
4921 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4922 $grep '^[       ]*#.*stdio\.h' | \
4923 while read cline; do
4924         pos=1
4925         set \$cline
4926         while $test \$# -gt 0; do
4927                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4928                         echo "\$pos"
4929                         exit 0
4930                 fi
4931                 shift
4932                 pos=\`expr \$pos + 1\`
4933         done
4934 done
4935 EOF
4936 chmod +x fieldn
4937 fieldn=`./fieldn`
4938 $rm -f foo.c fieldn
4939 case $fieldn in
4940 '') pos='???';;
4941 1) pos=first;;
4942 2) pos=second;;
4943 3) pos=third;;
4944 *) pos="${fieldn}th";;
4945 esac
4946 echo "Your cpp writes the filename in the $pos field of the line."
4947
4948 case "$osname" in
4949 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4950 *)   cppfilter='' ;;
4951 esac
4952 : locate header file
4953 $cat >findhdr <<EOF
4954 $startsh
4955 wanted=\$1
4956 name=''
4957 for usrincdir in $usrinc
4958 do
4959         if test -f \$usrincdir/\$wanted; then
4960                 echo "\$usrincdir/\$wanted"
4961                 exit 0
4962         fi
4963 done
4964 awkprg='{ print \$$fieldn }'
4965 echo "#include <\$wanted>" > foo\$\$.c
4966 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4967 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4968 while read cline; do
4969         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4970         case "\$name" in
4971         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4972         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4973         *) exit 2;;
4974         esac;
4975 done;
4976 #
4977 # status = 0: grep returned 0 lines, case statement not executed
4978 # status = 1: headerfile found
4979 # status = 2: while loop executed, no headerfile found
4980 #
4981 status=\$?
4982 $rm -f foo\$\$.c;
4983 if test \$status -eq 1; then
4984         exit 0;
4985 fi
4986 exit 1
4987 EOF
4988 chmod +x findhdr
4989
4990 : define an alternate in-header-list? function
4991 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4992 cont=true; xxf="echo \"<\$1> found.\" >&4";
4993 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4994 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4995 esac;
4996 case $# in 4) instead=instead;; *) instead="at last";; esac;
4997 while $test "$cont"; do
4998         xxx=`./findhdr $1`
4999         var=$2; eval "was=\$$2";
5000         if $test "$xxx" && $test -r "$xxx";
5001         then eval $xxf;
5002         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5003                 cont="";
5004         else eval $xxnf;
5005         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5006         set $yyy; shift; shift; yyy=$@;
5007         case $# in 0) cont="";;
5008         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5009                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5010         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5011                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5012         esac;
5013 done;
5014 while $test "$yyy";
5015 do set $yyy; var=$2; eval "was=\$$2";
5016         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5017         set $yyy; shift; shift; yyy=$@;
5018 done'
5019
5020 : see if inttypes.h is available
5021 : we want a real compile instead of Inhdr because some systems
5022 : have an inttypes.h which includes non-existent headers
5023 echo " "
5024 $cat >try.c <<EOCP
5025 #include <inttypes.h>
5026 int main() {
5027         static int32_t foo32 = 0x12345678;
5028 }
5029 EOCP
5030 set try
5031 if eval $compile; then
5032         echo "<inttypes.h> found." >&4
5033         val="$define"
5034 else
5035         echo "<inttypes.h> NOT found." >&4
5036         val="$undef"
5037 fi
5038 $rm -f try.c try
5039 set i_inttypes
5040 eval $setvar
5041
5042 : check for int64_t
5043 echo " "
5044 echo "Checking to see if you have int64_t..." >&4
5045 $cat >try.c <<EOCP
5046 #include <sys/types.h>
5047 #$i_inttypes I_INTTYPES
5048 #ifdef I_INTTYPES
5049 #include <inttypes.h>
5050 #endif
5051 int main() { int64_t x = 7; }
5052 EOCP
5053 set try
5054 if eval $compile; then
5055         val="$define"
5056         echo "You have int64_t."
5057 else
5058         val="$undef"
5059         echo "You do not have int64_t."
5060 fi
5061 $rm -f try try.*
5062 set d_int64_t
5063 eval $setvar
5064
5065
5066 echo " "
5067 echo "Checking which 64-bit integer type we could use..." >&4
5068
5069 case "$intsize" in
5070 8) val=int
5071    set quadtype
5072    eval $setvar
5073    val='"unsigned int"'
5074    set uquadtype
5075    eval $setvar
5076    quadkind=1
5077    ;;
5078 *) case "$longsize" in
5079    8) val=long
5080       set quadtype
5081       eval $setvar
5082       val='"unsigned long"'
5083       set uquadtype
5084       eval $setvar
5085       quadkind=2
5086       ;;
5087    *) case "$d_longlong:$longlongsize" in
5088       define:8)
5089         val='"long long"'
5090         set quadtype
5091         eval $setvar
5092         val='"unsigned long long"'
5093         set uquadtype
5094         eval $setvar
5095         quadkind=3
5096         ;;
5097       *) case "$d_int64_t" in
5098          define)
5099            val=int64_t
5100            set quadtype
5101            eval $setvar
5102            val=uint64_t
5103            set uquadtype
5104            eval $setvar
5105            quadkind=4
5106            ;;
5107          esac
5108          ;;
5109       esac
5110       ;;
5111    esac
5112    ;;
5113 esac
5114
5115 case "$quadtype" in
5116 '')     echo "Alas, no 64-bit integer types in sight." >&4
5117         d_quad="$undef"
5118         ;;
5119 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5120         d_quad="$define"
5121         ;;
5122 esac
5123
5124
5125 case "$uselonglong" in
5126 "$define"|true|[yY]*)
5127         cat <<EOM >&4
5128
5129 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5130 EOM
5131         use64bitint="$define"
5132         ;;
5133 esac                          
5134 case "$use64bits" in
5135 "$define"|true|[yY]*)
5136         cat <<EOM >&4
5137
5138 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5139 EOM
5140         use64bitint="$define"
5141         ;;
5142 esac                          
5143 case "$use64bitints" in
5144 "$define"|true|[yY]*)
5145         cat <<EOM >&4
5146
5147 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5148 EOM
5149         use64bitint="$define"
5150         ;;
5151 esac                          
5152 case "$use64bitsint" in
5153 "$define"|true|[yY]*)
5154         cat <<EOM >&4
5155
5156 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5157 EOM
5158         use64bitint="$define"
5159         ;;
5160 esac                          
5161 case "$uselonglongs" in
5162 "$define"|true|[yY]*)
5163         cat <<EOM >&4
5164
5165 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5166 EOM
5167         use64bitint="$define"
5168         ;;
5169 esac                          
5170 case "$use64bitsall" in
5171 "$define"|true|[yY]*)
5172         cat <<EOM >&4
5173
5174 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5175 EOM
5176         use64bitall="$define"
5177         ;;
5178 esac                          
5179
5180 case "$ccflags" in
5181 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5182 esac
5183 case "$use64bitall" in
5184 "$define"|true|[yY]*) use64bitint="$define" ;;
5185 esac
5186
5187 case "$longsize" in
5188 8) cat <<EOM
5189
5190 You have natively 64-bit long integers.
5191 EOM
5192    val="$define"
5193    ;;
5194 *) case "$use64bitint" in
5195    "$define"|true|[yY]*) dflt='y';;
5196    *) dflt='n';;
5197    esac
5198    case "$d_quad" in
5199    "$define") ;;
5200    *) dflt='n' ;;
5201    esac
5202    cat <<EOM
5203
5204 Perl can be built to take advantage of 64-bit integer types
5205 on some systems.  To do so, Configure can be run with -Duse64bitint.
5206 Choosing this option will most probably introduce binary incompatibilities.
5207
5208 If this doesn't make any sense to you, just accept the default '$dflt'.
5209 (The default has been chosen based on your configuration.)
5210 EOM
5211    rp='Try to use 64-bit integers, if available?'
5212    . ./myread
5213    case "$ans" in
5214    [yY]*) val="$define" ;;
5215    *)     val="$undef"  ;;
5216    esac
5217    ;;
5218 esac
5219 set use64bitint
5220 eval $setvar
5221
5222 case "$use64bitall" in
5223 "$define"|true|[yY]*) dflt='y' ;;
5224 *) case "$longsize" in
5225    8) dflt='y' ;;
5226    *) dflt='n' ;;
5227    esac
5228    ;;
5229 esac    
5230 cat <<EOM
5231
5232 You may also choose to try maximal 64-bitness.  It means using as much
5233 64-bitness as possible on the platform.  This in turn means even more
5234 binary incompatibilities.  On the other hand, your platform may not
5235 have any more 64-bitness available than what you already have chosen.
5236
5237 If this doesn't make any sense to you, just accept the default '$dflt'.
5238 (The default has been chosen based on your configuration.)
5239 EOM
5240 rp='Try to use maximal 64-bit support, if available?'
5241 . ./myread
5242 case "$ans" in
5243 [yY]*) val="$define" ;;
5244 *)     val="$undef"  ;;
5245 esac
5246 set use64bitall
5247 eval $setvar
5248 case "$use64bitall" in
5249 "$define")
5250         case "$use64bitint" in
5251         "$undef")
5252                 cat <<EOM
5253
5254 Since you have chosen a maximally 64-bit build, I'm also turning on
5255 the use of 64-bit integers.
5256 EOM
5257                 use64bitint="$define" ;;
5258         esac
5259         ;;
5260 esac
5261
5262 case "$use64bitall" in
5263 "$define"|true|[yY]*)
5264         case "$ptrsize" in
5265         4)      cat <<EOM >&4
5266
5267 *** You have chosen a maximally 64-bit build, but your pointers
5268 *** are only 4 bytes wide, disabling maximal 64-bitness.
5269
5270 EOM
5271                 use64bitall="$undef"
5272                 case "$use64bitint" in
5273                 "$define"|true|[yY]*) ;;
5274                 *)      cat <<EOM >&4
5275
5276 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5277
5278 EOM
5279                         use64bitint="$define"
5280                         ;;
5281                 esac
5282                 ;;
5283         esac
5284         ;;
5285 esac
5286
5287 case "$use64bitint" in
5288 "$define"|true|[yY]*)
5289 : Look for a hint-file generated 'call-back-unit'.  If the
5290 : user has specified that a 64-bit perl is to be built,
5291 : we may need to set or change some other defaults.
5292         if $test -f use64bitint.cbu; then
5293                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5294                 . ./use64bitint.cbu
5295         fi
5296         case "$longsize" in
5297         4) case "$archname64" in
5298            '') archname64=64int ;;
5299            esac
5300            ;;
5301         esac
5302         ;;
5303 esac
5304
5305 case "$use64bitall" in
5306 "$define"|true|[yY]*)
5307 : Look for a hint-file generated 'call-back-unit'.  If the
5308 : user has specified that a maximally 64-bit perl is to be built,
5309 : we may need to set or change some other defaults.
5310         if $test -f use64bitall.cbu; then
5311                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5312                 . ./use64bitall.cbu
5313         fi
5314         case "$longsize" in
5315         4) case "$archname64" in
5316            ''|64int) archname64=64all ;;
5317            esac
5318            ;;
5319         esac
5320         ;;
5321 esac
5322
5323 echo " "
5324 echo "Checking for GNU C Library..." >&4
5325 cat >try.c <<EOM
5326 #include <stdio.h>
5327 int main()
5328 {
5329 #ifdef __GLIBC__
5330     exit(0);
5331 #else
5332     exit(1);
5333 #endif
5334 }
5335 EOM
5336 set try
5337 if eval $compile_ok && $run ./try; then
5338         val="$define"
5339         echo "You are using the GNU C Library"
5340 else
5341         val="$undef"
5342         echo "You are not using the GNU C Library"
5343 fi
5344 $rm -f try try.*
5345 set d_gnulibc
5346 eval $setvar
5347
5348 : see if nm is to be used to determine whether a symbol is defined or not
5349 case "$usenm" in
5350 '')
5351         dflt=''
5352         case "$d_gnulibc" in
5353         "$define")
5354                 echo " "
5355                 echo "nm probably won't work on the GNU C Library." >&4
5356                 dflt=n
5357                 ;;
5358         esac
5359         case "$dflt" in
5360         '') 
5361                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5362                         echo " "
5363                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5364                         echo "'nm' won't be sufficient on this sytem." >&4
5365                         dflt=n
5366                 fi
5367                 ;;
5368         esac
5369         case "$dflt" in
5370         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5371                 if $test $dflt -gt 20; then
5372                         dflt=y
5373                 else
5374                         dflt=n
5375                 fi
5376                 ;;
5377         esac
5378         ;;
5379 *)
5380         case "$usenm" in
5381         true|$define) dflt=y;;
5382         *) dflt=n;;
5383         esac
5384         ;;
5385 esac
5386 $cat <<EOM
5387
5388 I can use $nm to extract the symbols from your C libraries. This
5389 is a time consuming task which may generate huge output on the disk (up
5390 to 3 megabytes) but that should make the symbols extraction faster. The
5391 alternative is to skip the 'nm' extraction part and to compile a small
5392 test program instead to determine whether each symbol is present. If
5393 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5394 this may be the best solution.
5395
5396 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5397
5398 EOM
5399 rp="Shall I use $nm to extract C symbols from the libraries?"
5400 . ./myread
5401 case "$ans" in
5402 [Nn]*) usenm=false;;
5403 *) usenm=true;;
5404 esac
5405
5406 runnm=$usenm
5407 case "$reuseval" in
5408 true) runnm=false;;
5409 esac
5410
5411 : nm options which may be necessary
5412 case "$nm_opt" in
5413 '') if $test -f /mach_boot; then
5414                 nm_opt=''       # Mach
5415         elif $test -d /usr/ccs/lib; then
5416                 nm_opt='-p'     # Solaris (and SunOS?)
5417         elif $test -f /dgux; then
5418                 nm_opt='-p'     # DG-UX
5419         elif $test -f /lib64/rld; then
5420                 nm_opt='-p'     # 64-bit Irix
5421         else
5422                 nm_opt=''
5423         fi;;
5424 esac
5425
5426 : nm options which may be necessary for shared libraries but illegal
5427 : for archive libraries.  Thank you, Linux.
5428 case "$nm_so_opt" in
5429 '')     case "$myuname" in
5430         *linux*)
5431                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5432                         nm_so_opt='--dynamic'
5433                 fi
5434                 ;;
5435         esac
5436         ;;
5437 esac
5438
5439 case "$runnm" in
5440 true)
5441 : get list of predefined functions in a handy place
5442 echo " "
5443 case "$libc" in
5444 '') libc=unknown
5445         case "$libs" in
5446         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5447         esac
5448         ;;
5449 esac
5450 case "$libs" in
5451 '') ;;
5452 *)  for thislib in $libs; do
5453         case "$thislib" in
5454         -lc|-lc_s)
5455                 : Handle C library specially below.
5456                 ;;
5457         -l*)
5458                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5459                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5460                         :
5461                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5462                         :
5463                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5464                         :
5465                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5466                         :
5467                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5468                         :
5469                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5470                         :
5471                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5472                         :
5473                 else
5474                         try=''
5475                 fi
5476                 libnames="$libnames $try"
5477                 ;;
5478         *) libnames="$libnames $thislib" ;;
5479         esac
5480         done
5481         ;;
5482 esac
5483 xxx=normal
5484 case "$libc" in
5485 unknown)
5486         set /lib/libc.$so
5487         for xxx in $libpth; do
5488                 $test -r $1 || set $xxx/libc.$so
5489                 : The messy sed command sorts on library version numbers.
5490                 $test -r $1 || \
5491                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5492                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5493                                 h
5494                                 s/[0-9][0-9]*/0000&/g
5495                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5496                                 G
5497                                 s/\n/ /' | \
5498                          $sort | $sed -e 's/^.* //'`
5499                 eval set \$$#
5500         done
5501         $test -r $1 || set /usr/ccs/lib/libc.$so
5502         $test -r $1 || set /lib/libsys_s$_a
5503         ;;
5504 *)
5505         set blurfl
5506         ;;
5507 esac
5508 if $test -r "$1"; then
5509         echo "Your (shared) C library seems to be in $1."
5510         libc="$1"
5511 elif $test -r /lib/libc && $test -r /lib/clib; then
5512         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5513         xxx=apollo
5514         libc='/lib/clib /lib/libc'
5515         if $test -r /lib/syslib; then
5516                 echo "(Your math library is in /lib/syslib.)"
5517                 libc="$libc /lib/syslib"
5518         fi
5519 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5520         echo "Your C library seems to be in $libc, as you said before."
5521 elif $test -r $incpath/usr/lib/libc$_a; then
5522         libc=$incpath/usr/lib/libc$_a;
5523         echo "Your C library seems to be in $libc.  That's fine."
5524 elif $test -r /lib/libc$_a; then
5525         libc=/lib/libc$_a;
5526         echo "Your C library seems to be in $libc.  You're normal."
5527 else
5528         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5529                 :
5530         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5531                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5532         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5533                 :
5534         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5535                 :
5536         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5537                 :
5538         else
5539                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5540         fi
5541         if $test -r "$tans"; then
5542                 echo "Your C library seems to be in $tans, of all places."
5543                 libc=$tans
5544         else
5545                 libc='blurfl'
5546         fi
5547 fi
5548 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5549         dflt="$libc"
5550         cat <<EOM
5551
5552 If the guess above is wrong (which it might be if you're using a strange
5553 compiler, or your machine supports multiple models), you can override it here.
5554
5555 EOM
5556 else
5557         dflt=''
5558         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5559         cat >&4 <<EOM
5560 I can't seem to find your C library.  I've looked in the following places:
5561
5562 EOM
5563         $sed 's/^/      /' libpath
5564         cat <<EOM
5565
5566 None of these seems to contain your C library. I need to get its name...
5567
5568 EOM
5569 fi
5570 fn=f
5571 rp='Where is your C library?'
5572 . ./getfile
5573 libc="$ans"
5574
5575 echo " "
5576 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5577 set X `cat libnames`
5578 shift
5579 xxx=files
5580 case $# in 1) xxx=file; esac
5581 echo "Extracting names from the following $xxx for later perusal:" >&4
5582 echo " "
5583 $sed 's/^/      /' libnames >&4
5584 echo " "
5585 $echo $n "This may take a while...$c" >&4
5586
5587 for file in $*; do
5588         case $file in
5589         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5590         *) $nm $nm_opt $file 2>/dev/null;;
5591         esac
5592 done >libc.tmp
5593
5594 $echo $n ".$c"
5595 $grep fprintf libc.tmp > libc.ptf
5596 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5597 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5598 xxx='[ADTSIW]'
5599 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5600         eval $xscan;\
5601         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5602                 eval $xrun
5603 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5604         eval $xscan;\
5605         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5606                 eval $xrun
5607 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5608         eval $xscan;\
5609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5610                 eval $xrun
5611 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5612         eval $xscan;\
5613         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5614                 eval $xrun
5615 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5616         eval $xscan;\
5617         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5618                 eval $xrun
5619 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5620         eval $xscan;\
5621         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5622                 eval $xrun
5623 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5624                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5625         eval $xscan;\
5626         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5627                 eval $xrun
5628 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5629         eval $xscan;\
5630         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5631                 eval $xrun
5632 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5633         eval $xscan;\
5634         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5635                 eval $xrun
5636 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5637         eval $xscan;\
5638         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5639                 eval $xrun
5640 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5641         eval $xscan;\
5642         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5643                 eval $xrun
5644 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5645         eval $xscan;\
5646         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5647                 eval $xrun
5648 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5649         eval $xscan;\
5650         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5651                 eval $xrun
5652 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5653         eval $xscan;\
5654         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5655                 eval $xrun
5656 else
5657         $nm -p $* 2>/dev/null >libc.tmp
5658         $grep fprintf libc.tmp > libc.ptf
5659         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5660                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5661         then
5662                 nm_opt='-p'
5663                 eval $xrun
5664         else
5665                 echo " "
5666                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5667                 com=''
5668                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5669                         for thisname in $libnames $libc; do
5670                                 $ar t $thisname >>libc.tmp
5671                         done
5672                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5673                         echo "Ok." >&4
5674                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5675                         # Repeat libc to extract forwarders to DLL entries too
5676                         for thisname in $libnames $libc; do
5677                                 $ar tv $thisname >>libc.tmp
5678                                 # Revision 50 of EMX has bug in $ar.
5679                                 # it will not extract forwarders to DLL entries
5680                                 # Use emximp which will extract exactly them.
5681                                 emximp -o tmp.imp $thisname \
5682                                     2>/dev/null && \
5683                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5684                                     < tmp.imp >>libc.tmp
5685                                 $rm tmp.imp
5686                         done
5687                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5688                         echo "Ok." >&4
5689                 else
5690                         echo "$ar didn't seem to work right." >&4
5691                         echo "Maybe this is a Cray...trying bld instead..." >&4
5692                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5693                         then
5694                                 for thisname in $libnames; do
5695                                         bld t $libnames | \
5696                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5697                                         $ar t $thisname >>libc.tmp
5698                                 done
5699                                 echo "Ok." >&4
5700                         else
5701                                 echo "That didn't work either.  Giving up." >&4
5702                                 exit 1
5703                         fi
5704                 fi
5705         fi
5706 fi
5707 nm_extract="$com"
5708 if $test -f /lib/syscalls.exp; then
5709         echo " "
5710         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5711         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5712 fi
5713 ;;
5714 esac
5715 $rm -f libnames libpath
5716
5717 : is a C symbol defined?
5718 csym='tlook=$1;
5719 case "$3" in
5720 -v) tf=libc.tmp; tc=""; tdc="";;
5721 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5722 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5723 esac;
5724 tx=yes;
5725 case "$reuseval-$4" in
5726 true-) ;;
5727 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5728 esac;
5729 case "$tx" in
5730 yes)
5731         case "$runnm" in
5732         true)
5733                 if $contains $tlook $tf >/dev/null 2>&1;
5734                 then tval=true;
5735                 else tval=false;
5736                 fi;;
5737         *)
5738                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5739                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5740                 then tval=true;
5741                 else tval=false;
5742                 fi;
5743                 $rm -f t t.c;;
5744         esac;;
5745 *)
5746         case "$tval" in
5747         $define) tval=true;;
5748         *) tval=false;;
5749         esac;;
5750 esac;
5751 eval "$2=$tval"'
5752
5753 : define an is-in-libc? function
5754 inlibc='echo " "; td=$define; tu=$undef;
5755 sym=$1; var=$2; eval "was=\$$2";
5756 tx=yes;
5757 case "$reuseval$was" in
5758 true) ;;
5759 true*) tx=no;;
5760 esac;
5761 case "$tx" in
5762 yes)
5763         set $sym tres -f;
5764         eval $csym;
5765         case "$tres" in
5766         true)
5767                 echo "$sym() found." >&4;
5768                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5769         *)
5770                 echo "$sym() NOT found." >&4;
5771                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5772         esac;;
5773 *)
5774         case "$was" in
5775         $define) echo "$sym() found." >&4;;
5776         *) echo "$sym() NOT found." >&4;;
5777         esac;;
5778 esac'
5779
5780 : see if sqrtl exists
5781 set sqrtl d_sqrtl
5782 eval $inlibc
5783
5784 : check for length of double
5785 echo " "
5786 case "$doublesize" in
5787 '')
5788         echo "Checking to see how big your double precision numbers are..." >&4
5789         $cat >try.c <<'EOCP'
5790 #include <stdio.h>
5791 int main()
5792 {
5793     printf("%d\n", (int)sizeof(double));
5794     exit(0);
5795 }
5796 EOCP
5797         set try
5798         if eval $compile_ok; then
5799                 doublesize=`$run ./try`
5800                 echo "Your double is $doublesize bytes long."
5801         else
5802                 dflt='8'
5803                 echo "(I can't seem to compile the test program.  Guessing...)"
5804                 rp="What is the size of a double precision number (in bytes)?"
5805                 . ./myread
5806                 doublesize="$ans"
5807         fi
5808         ;;
5809 esac
5810 $rm -f try.c try
5811
5812 : check for long doubles
5813 echo " "
5814 echo "Checking to see if you have long double..." >&4
5815 echo 'int main() { long double x = 7.0; }' > try.c
5816 set try
5817 if eval $compile; then
5818         val="$define"
5819         echo "You have long double."
5820 else
5821         val="$undef"
5822         echo "You do not have long double."
5823 fi
5824 $rm try.*
5825 set d_longdbl
5826 eval $setvar
5827
5828 : check for length of long double
5829 case "${d_longdbl}${longdblsize}" in
5830 $define)
5831         echo " "
5832         echo "Checking to see how big your long doubles are..." >&4
5833         $cat >try.c <<'EOCP'
5834 #include <stdio.h>
5835 int main()
5836 {
5837         printf("%d\n", sizeof(long double));
5838 }
5839 EOCP
5840         set try
5841         set try
5842         if eval $compile; then
5843                 longdblsize=`$run ./try`
5844                 echo "Your long doubles are $longdblsize bytes long."
5845         else
5846                 dflt='8'
5847                 echo " "
5848                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5849                 rp="What is the size of a long double (in bytes)?"
5850                 . ./myread
5851                 longdblsize="$ans"
5852         fi
5853         if $test "X$doublesize" = "X$longdblsize"; then
5854                 echo "(That isn't any different from an ordinary double.)"
5855         fi      
5856         ;;
5857 esac
5858 $rm -f try.* try
5859
5860 echo " "
5861
5862 if $test X"$d_longdbl" = X"$define"; then
5863
5864 echo "Checking how to print long doubles..." >&4
5865
5866 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5867         $cat >try.c <<'EOCP'
5868 #include <sys/types.h>
5869 #include <stdio.h>
5870 int main() {
5871   double d = 123.456;
5872   printf("%.3f\n", d);
5873 }
5874 EOCP
5875         set try
5876         if eval $compile; then
5877                 yyy=`$run ./try`
5878                 case "$yyy" in
5879                 123.456)
5880                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5881                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5882                         echo "We will use %f."
5883                         ;;
5884                 esac
5885         fi
5886 fi
5887
5888 if $test X"$sPRIfldbl" = X; then
5889         $cat >try.c <<'EOCP'
5890 #include <sys/types.h>
5891 #include <stdio.h>
5892 int main() {
5893   long double d = 123.456;
5894   printf("%.3Lf\n", d);
5895 }
5896 EOCP
5897         set try
5898         if eval $compile; then
5899                 yyy=`$run ./try`
5900                 case "$yyy" in
5901                 123.456)
5902                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5903                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5904                         echo "We will use %Lf."
5905                         ;;
5906                 esac
5907         fi
5908 fi
5909
5910 if $test X"$sPRIfldbl" = X; then
5911         $cat >try.c <<'EOCP'
5912 #include <sys/types.h>
5913 #include <stdio.h>
5914 int main() {
5915   long double d = 123.456;
5916   printf("%.3llf\n", d);
5917 }
5918 EOCP
5919         set try
5920         if eval $compile; then
5921                 yyy=`$run ./try`
5922                 case "$yyy" in
5923                 123.456)
5924                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5925                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5926                         echo "We will use %llf."
5927                         ;;
5928                 esac
5929         fi
5930 fi
5931
5932 if $test X"$sPRIfldbl" = X; then
5933         $cat >try.c <<'EOCP'
5934 #include <sys/types.h>
5935 #include <stdio.h>
5936 int main() {
5937   long double d = 123.456;
5938   printf("%.3lf\n", d);
5939 }
5940 EOCP
5941         set try
5942         if eval $compile; then
5943                 yyy=`$run ./try`
5944                 case "$yyy" in
5945                 123.456)
5946                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5947                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5948                         echo "We will use %lf."
5949                         ;;
5950                 esac
5951         fi
5952 fi
5953
5954 if $test X"$sPRIfldbl" = X; then
5955         echo "Cannot figure out how to print long doubles." >&4
5956 else
5957         sSCNfldbl=$sPRIfldbl    # expect consistency
5958 fi
5959
5960 $rm -f try try.*
5961
5962 fi # d_longdbl
5963
5964 case "$sPRIfldbl" in
5965 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5966         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5967         d_SCNfldbl="$undef";
5968         ;;
5969 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5970         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5971         d_SCNfldbl="$define";
5972         ;;
5973 esac
5974
5975 : see if modfl exists
5976 set modfl d_modfl
5977 eval $inlibc
5978
5979 d_modfl_pow32_bug="$undef"
5980
5981 case "$d_longdbl$d_modfl" in
5982 $define$define)
5983         $cat <<EOM
5984 Checking to see whether your modfl() is okay for large values...
5985 EOM
5986 $cat >try.c <<EOCP
5987 #include <math.h> 
5988 #include <stdio.h>
5989 int main() {
5990     long double nv = 4294967303.15;
5991     long double v, w;
5992     v = modfl(nv, &w);         
5993 #ifdef __GLIBC__
5994     printf("glibc");
5995 #endif
5996     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
5997     return 0;
5998 }
5999 EOCP
6000         case "$osname:$gccversion" in
6001         aix:)   saveccflags="$ccflags"
6002                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
6003         esac
6004         set try
6005         if eval $compile; then
6006                 foo=`$run ./try`
6007                 case "$foo" in
6008                 *" 4294967303.150000 1.150000 4294967302.000000")
6009                         echo >&4 "Your modfl() is broken for large values."
6010                         d_modfl_pow32_bug="$define"
6011                         case "$foo" in
6012                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
6013                         ;;
6014                         esac
6015                         ;;
6016                 *" 4294967303.150000 0.150000 4294967303.000000")
6017                         echo >&4 "Your modfl() seems okay for large values."
6018                         ;;
6019                 *)      echo >&4 "I don't understand your modfl() at all."
6020                         d_modfl="$undef"
6021                         ;;
6022                 esac
6023                 $rm -f try.* try core core.try.*
6024         else
6025                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
6026                 d_modfl="$undef"
6027         fi
6028         case "$osname:$gccversion" in
6029         aix:)   ccflags="$saveccflags" ;; # restore
6030         esac
6031         ;;
6032 esac
6033
6034 case "$ccflags" in
6035 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6036 esac
6037
6038 case "$uselongdouble" in
6039 $define|true|[yY]*)     dflt='y';;
6040 *) dflt='n';;
6041 esac
6042 cat <<EOM
6043
6044 Perl can be built to take advantage of long doubles which
6045 (if available) may give more accuracy and range for floating point numbers.
6046
6047 If this doesn't make any sense to you, just accept the default '$dflt'.
6048 EOM
6049 rp='Try to use long doubles if available?'
6050 . ./myread
6051 case "$ans" in
6052 y|Y)    val="$define"   ;;
6053 *)      val="$undef"    ;;
6054 esac
6055 set uselongdouble
6056 eval $setvar
6057
6058 case "$uselongdouble" in
6059 true|[yY]*) uselongdouble="$define" ;;
6060 esac
6061
6062 case "$uselongdouble" in
6063 $define)
6064 : Look for a hint-file generated 'call-back-unit'.  If the
6065 : user has specified that long doubles should be used,
6066 : we may need to set or change some other defaults.
6067         if $test -f uselongdouble.cbu; then
6068                 echo "Your platform has some specific hints for long doubles, using them..."
6069                 . ./uselongdouble.cbu
6070         else
6071                 $cat <<EOM
6072 (Your platform doesn't have any specific hints for long doubles.)
6073 EOM
6074         fi
6075         ;;
6076 esac
6077
6078 message=X
6079 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6080 $define:$define:$define)
6081         : You have both
6082         ;;
6083 $define:$define:$undef)
6084         message="I could not find modfl"
6085         ;;
6086 $define:$undef:$define)
6087         message="I could not find sqrtl"
6088         ;;
6089 $define:$undef:$undef)
6090         message="I found neither sqrtl nor modfl"
6091         ;;
6092 esac
6093
6094 if $test "$message" != X; then
6095         $cat <<EOM >&4
6096
6097 *** You requested the use of long doubles but you do not seem to have
6098 *** the mathematic functions for long doubles.
6099 *** ($message)
6100 *** I'm disabling the use of long doubles.
6101
6102 EOM
6103
6104         uselongdouble=$undef
6105 fi
6106
6107 case "$useperlio" in
6108 $define|true|[yY]*|'')  dflt='y';;
6109 *) dflt='n';;
6110 esac
6111 cat <<EOM
6112
6113 Previous version of $package used the standard IO mechanisms as
6114 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6115 alternate IO mechanisms via the PerlIO abstraction layer, but the
6116 stdio mechanism is still available if needed.  The abstraction layer
6117 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6118 Using PerlIO with sfio may cause problems with some extension modules.
6119
6120 If this doesn't make any sense to you, just accept the default '$dflt'.
6121 EOM
6122 rp='Use the PerlIO abstraction layer?'
6123 . ./myread
6124 case "$ans" in
6125 y|Y) 
6126         val="$define"
6127         ;;
6128 *)      
6129         echo "Ok, doing things the stdio way."
6130         val="$undef"
6131         ;;
6132 esac
6133 set useperlio
6134 eval $setvar 
6135
6136 case "$usesocks" in
6137 $define|true|[yY]*)
6138         case "$useperlio" in
6139         $define|true|[yY]*) ;;
6140         *)      cat >&4 <<EOM
6141
6142 You are using the SOCKS proxy protocol library which means that you
6143 should also use the PerlIO layer.  You may be headed for trouble.
6144
6145 EOM
6146                 ;;
6147         esac
6148         ;;
6149 esac
6150
6151         
6152 : determine the architecture name
6153 echo " "
6154 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6155         tarch=`arch`"-$osname"
6156 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6157         if uname -m > tmparch 2>&1 ; then
6158                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6159                         -e 's/$/'"-$osname/" tmparch`
6160         else
6161                 tarch="$osname"
6162         fi
6163         $rm -f tmparch
6164 else
6165         tarch="$osname"
6166 fi
6167 case "$myarchname" in
6168 ''|"$tarch") ;;
6169 *)
6170         echo "(Your architecture name used to be $myarchname.)"
6171         archname=''
6172         ;;
6173 esac
6174 case "$targetarch" in
6175 '') ;;
6176 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6177 esac
6178 myarchname="$tarch"
6179 case "$archname" in
6180 '') dflt="$tarch";;
6181 *) dflt="$archname";;
6182 esac
6183 rp='What is your architecture name'
6184 . ./myread
6185 archname="$ans"
6186 case "$usethreads" in
6187 $define)
6188         echo "Threads selected." >&4
6189         case "$archname" in
6190         *-thread*) echo "...and architecture name already has -thread." >&4
6191                 ;;
6192         *)      archname="$archname-thread"
6193                 echo "...setting architecture name to $archname." >&4
6194                 ;;
6195         esac
6196         ;;
6197 esac
6198 case "$usemultiplicity" in
6199 $define)
6200         echo "Multiplicity selected." >&4
6201         case "$archname" in
6202         *-multi*) echo "...and architecture name already has -multi." >&4
6203                 ;;
6204         *)      archname="$archname-multi"
6205                 echo "...setting architecture name to $archname." >&4
6206                 ;;
6207         esac
6208         ;;
6209 esac
6210 case "$use64bitint$use64bitall" in
6211 *"$define"*)
6212         case "$archname64" in
6213         '')
6214                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6215                 ;;
6216         *)
6217                 case "$use64bitint" in
6218                 "$define") echo "64 bit integers selected." >&4 ;;
6219                 esac
6220                 case "$use64bitall" in
6221                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6222                 esac
6223                 case "$archname" in
6224                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6225                         ;;
6226                 *)      archname="$archname-$archname64"
6227                         echo "...setting architecture name to $archname." >&4
6228                         ;;
6229                 esac
6230                 ;;
6231         esac
6232 esac
6233 case "$uselongdouble" in
6234 $define)
6235         echo "Long doubles selected." >&4
6236         case "$longdblsize" in
6237         $doublesize)
6238                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6239                 ;;
6240         *)
6241                 case "$archname" in
6242                 *-ld*) echo "...and architecture name already has -ld." >&4
6243                         ;;
6244                 *)      archname="$archname-ld"
6245                         echo "...setting architecture name to $archname." >&4
6246                         ;;
6247                 esac
6248                 ;;
6249         esac
6250         ;;
6251 esac
6252 case "$useperlio" in
6253 $define)
6254         echo "Perlio selected." >&4
6255         ;;
6256 *)
6257         echo "Perlio not selected, using stdio." >&4
6258         case "$archname" in
6259         *-stdio*) echo "...and architecture name already has -stdio." >&4
6260                 ;;
6261         *)      archname="$archname-stdio"
6262                 echo "...setting architecture name to $archname." >&4
6263                 ;;
6264         esac
6265         ;;
6266 esac
6267
6268 : determine root of directory hierarchy where package will be installed.
6269 case "$prefix" in
6270 '')
6271         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6272         ;;
6273 *)
6274         dflt="$prefix"
6275         ;;
6276 esac
6277 $cat <<EOM
6278
6279 By default, $package will be installed in $dflt/bin, manual pages
6280 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6281 installation directories. Typically this is something like /usr/local.
6282 If you wish to have binaries under /usr/bin but other parts of the
6283 installation under /usr/local, that's ok: you will be prompted
6284 separately for each of the installation directories, the prefix being
6285 only used to set the defaults.
6286
6287 EOM
6288 fn=d~
6289 rp='Installation prefix to use?'
6290 . ./getfile
6291 oldprefix=''
6292 case "$prefix" in
6293 '') ;;
6294 *)
6295         case "$ans" in
6296         "$prefix") ;;
6297         *) oldprefix="$prefix";;
6298         esac
6299         ;;
6300 esac
6301 prefix="$ans"
6302 prefixexp="$ansexp"
6303
6304 case "$afsroot" in
6305 '')     afsroot=/afs ;;
6306 *)      afsroot=$afsroot ;;
6307 esac
6308
6309 : is AFS running?
6310 echo " "
6311 case "$afs" in
6312 $define|true)   afs=true ;;
6313 $undef|false)   afs=false ;;
6314 *)      if test -d $afsroot; then
6315                 afs=true
6316         else
6317                 afs=false
6318         fi
6319         ;;
6320 esac
6321 if $afs; then
6322         echo "AFS may be running... I'll be extra cautious then..." >&4
6323 else
6324         echo "AFS does not seem to be running..." >&4
6325 fi
6326
6327 : determine installation prefix for where package is to be installed.
6328 if $afs; then 
6329 $cat <<EOM
6330
6331 Since you are running AFS, I need to distinguish the directory in which
6332 files will reside from the directory in which they are installed (and from
6333 which they are presumably copied to the former directory by occult means).
6334
6335 EOM
6336         case "$installprefix" in
6337         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6338         *) dflt="$installprefix";;
6339         esac
6340 else
6341 $cat <<EOM
6342
6343 In some special cases, particularly when building $package for distribution,
6344 it is convenient to distinguish between the directory in which files should 
6345 be installed from the directory ($prefix) in which they 
6346 will eventually reside.  For most users, these two directories are the same.
6347
6348 EOM
6349         case "$installprefix" in
6350         '') dflt=$prefix ;;
6351         *) dflt=$installprefix;;
6352         esac
6353 fi
6354 fn=d~
6355 rp='What installation prefix should I use for installing files?'
6356 . ./getfile
6357 installprefix="$ans"
6358 installprefixexp="$ansexp"
6359
6360 : set the prefixit variable, to compute a suitable default value
6361 prefixit='case "$3" in
6362 ""|none)
6363         case "$oldprefix" in
6364         "") eval "$1=\"\$$2\"";;
6365         *)
6366                 case "$3" in
6367                 "") eval "$1=";;
6368                 none)
6369                         eval "tp=\"\$$2\"";
6370                         case "$tp" in
6371                         ""|" ") eval "$1=\"\$$2\"";;
6372                         *) eval "$1=";;
6373                         esac;;
6374                 esac;;
6375         esac;;
6376 *)
6377         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6378         case "$tp" in
6379         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6380         /*-$oldprefix/*|\~*-$oldprefix/*)
6381                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6382         *) eval "$1=\"\$$2\"";;
6383         esac;;
6384 esac'
6385
6386 : get the patchlevel
6387 echo " "
6388 echo "Getting the current patchlevel..." >&4
6389 if $test -r $rsrc/patchlevel.h;then
6390         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6391         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6392         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6393         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6394         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6395         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6396        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6397 else
6398         revision=0
6399         patchlevel=0
6400         subversion=0
6401         api_revision=0
6402         api_version=0
6403         api_subversion=0
6404         perl_patchlevel=0
6405         $echo "(You do not have patchlevel.h.  Eek.)"
6406 fi
6407 if $test -r $rsrc/.patch ; then  
6408         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6409                 perl_patchlevel=`cat $rsrc/.patch`
6410         fi
6411 fi
6412 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6413 version_patchlevel_string="version $patchlevel subversion $subversion"
6414 case "$perl_patchlevel" in
6415 0|'') ;;
6416 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6417 esac
6418
6419 $echo "(You have $package $version_patchlevel_string.)"
6420
6421 case "$osname" in
6422 dos|vms)
6423         : XXX Should be a Configure test for double-dots in filenames.
6424         version=`echo $revision $patchlevel $subversion | \
6425                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6426         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6427                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6428         ;;
6429 *)
6430         version=`echo $revision $patchlevel $subversion | \
6431                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6432         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6433                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6434         ;;
6435 esac
6436 : Special case the 5.005_xx maintenance series, which used 5.005
6437 : without any subversion label as a subdirectory in $sitelib
6438 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6439         api_versionstring='5.005'
6440 fi
6441
6442 : determine installation style
6443 : For now, try to deduce it from prefix unless it is already set.
6444 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6445 case "$installstyle" in
6446 '')     case "$prefix" in
6447                 *perl*) dflt='lib';;
6448                 *) dflt='lib/perl5' ;;
6449         esac
6450         ;;
6451 *)      dflt="$installstyle" ;;
6452 esac
6453 : Probably not worth prompting for this since we prompt for all
6454 : the directories individually, and the prompt would be too long and
6455 : confusing anyway.
6456 installstyle=$dflt
6457
6458 : determine where private library files go
6459 : Usual default is /usr/local/lib/perl5/$version.
6460 : Also allow things like /opt/perl/lib/$version, since 
6461 : /opt/perl/lib/perl5... would be redundant.
6462 : The default "style" setting is made in installstyle.U
6463 case "$installstyle" in
6464 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6465 *)       set dflt privlib lib/$version ;;
6466 esac
6467 eval $prefixit
6468 $cat <<EOM
6469
6470 There are some auxiliary files for $package that need to be put into a
6471 private library directory that is accessible by everyone.
6472
6473 EOM
6474 fn=d~+
6475 rp='Pathname where the private library files will reside?'
6476 . ./getfile
6477 privlib="$ans"
6478 privlibexp="$ansexp"
6479 : Change installation prefix, if necessary.
6480 if $test X"$prefix" != X"$installprefix"; then
6481         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6482 else
6483         installprivlib="$privlibexp"
6484 fi
6485
6486 : set the prefixup variable, to restore leading tilda escape
6487 prefixup='case "$prefixexp" in
6488 "$prefix") ;;
6489 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6490 esac'
6491
6492 : determine where public architecture dependent libraries go
6493 set archlib archlib
6494 eval $prefixit
6495 : privlib default is /usr/local/lib/$package/$version
6496 : archlib default is /usr/local/lib/$package/$version/$archname
6497 : privlib may have an optional trailing /share.
6498 tdflt=`echo $privlib | $sed 's,/share$,,'`
6499 tdflt=$tdflt/$archname
6500 case "$archlib" in
6501 '')     dflt=$tdflt
6502         ;;
6503 *)      dflt="$archlib"
6504     ;;
6505 esac
6506 $cat <<EOM
6507
6508 $spackage contains architecture-dependent library files.  If you are
6509 sharing libraries in a heterogeneous environment, you might store
6510 these files in a separate location.  Otherwise, you can just include
6511 them with the rest of the public library files.
6512
6513 EOM
6514 fn=d+~
6515 rp='Where do you want to put the public architecture-dependent libraries?'
6516 . ./getfile
6517 archlib="$ans"
6518 archlibexp="$ansexp"
6519 if $test X"$archlib" = X"$privlib"; then
6520         d_archlib="$undef"
6521 else
6522         d_archlib="$define"
6523 fi
6524 : Change installation prefix, if necessary.
6525 if $test X"$prefix" != X"$installprefix"; then
6526         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6527 else
6528         installarchlib="$archlibexp"
6529 fi
6530
6531
6532 : Binary compatibility with 5.005 is not possible for builds
6533 : with advanced features
6534 case "$usethreads$usemultiplicity" in
6535 *define*)
6536         bincompat5005="$undef"
6537         d_bincompat5005="$undef"
6538         ;;
6539 *)      $cat <<EOM
6540
6541 This version of Perl can be compiled for binary compatibility with 5.005.
6542 If you decide to do so, you will be able to continue using most of the
6543 extensions that were compiled for Perl 5.005.
6544
6545 EOM
6546         case "$bincompat5005$d_bincompat5005" in
6547         *"$undef"*) dflt=n ;;
6548         *) dflt=y ;;
6549         esac
6550         rp='Binary compatibility with Perl 5.005?'
6551         . ./myread
6552         case "$ans" in
6553         y*) val="$define" ;;
6554         *)  val="$undef" ;;
6555         esac
6556         set d_bincompat5005
6557         eval $setvar
6558         case "$d_bincompat5005" in
6559         "$define")
6560                 bincompat5005="$define"
6561                 ;;
6562         *)      bincompat5005="$undef"
6563                 d_bincompat5005="$undef"
6564                 ;;
6565         esac
6566         ;;
6567 esac
6568
6569
6570 : see if setuid scripts can be secure
6571 $cat <<EOM
6572
6573 Some kernels have a bug that prevents setuid #! scripts from being
6574 secure.  Some sites have disabled setuid #! scripts because of this.
6575
6576 First let's decide if your kernel supports secure setuid #! scripts.
6577 (If setuid #! scripts would be secure but have been disabled anyway,
6578 don't say that they are secure if asked.)
6579
6580 EOM
6581
6582 val="$undef"
6583 if $test -d /dev/fd; then
6584         echo "#!$ls" >reflect
6585         chmod +x,u+s reflect
6586         ./reflect >flect 2>&1
6587         if $contains "/dev/fd" flect >/dev/null; then
6588                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6589                 val="$define"
6590         else
6591                 $cat <<EOM
6592 If you are not sure if they are secure, I can check but I'll need a
6593 username and password different from the one you are using right now.
6594 If you don't have such a username or don't want me to test, simply
6595 enter 'none'.
6596
6597 EOM
6598                 rp='Other username to test security of setuid scripts with?'
6599                 dflt='none'
6600                 . ./myread
6601                 case "$ans" in
6602                 n|none)
6603                         case "$d_suidsafe" in
6604                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6605                                 dflt=n;;
6606                         "$undef")
6607                                 echo "Well, the $hint value is *not* secure." >&4
6608                                 dflt=n;;
6609                         *)      echo "Well, the $hint value *is* secure." >&4
6610                                 dflt=y;;
6611                         esac
6612                         ;;
6613                 *)
6614                         $rm -f reflect flect
6615                         echo "#!$ls" >reflect
6616                         chmod +x,u+s reflect
6617                         echo >flect
6618                         chmod a+w flect
6619                         echo '"su" will (probably) prompt you for '"$ans's password."
6620                         su $ans -c './reflect >flect'
6621                         if $contains "/dev/fd" flect >/dev/null; then
6622                                 echo "Okay, it looks like setuid scripts are secure." >&4
6623                                 dflt=y
6624                         else
6625                                 echo "I don't think setuid scripts are secure." >&4
6626                                 dflt=n
6627                         fi
6628                         ;;
6629                 esac
6630                 rp='Does your kernel have *secure* setuid scripts?'
6631                 . ./myread
6632                 case "$ans" in
6633                 [yY]*)  val="$define";;
6634                 *)      val="$undef";;
6635                 esac
6636         fi
6637 else
6638         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6639         echo "(That's for file descriptors, not floppy disks.)"
6640         val="$undef"
6641 fi
6642 set d_suidsafe
6643 eval $setvar
6644
6645 $rm -f reflect flect
6646
6647 : now see if they want to do setuid emulation
6648 echo " "
6649 val="$undef"
6650 case "$d_suidsafe" in
6651 "$define")
6652         val="$undef"
6653         echo "No need to emulate SUID scripts since they are secure here." >&4
6654         ;;
6655 *)
6656         $cat <<EOM
6657 Some systems have disabled setuid scripts, especially systems where
6658 setuid scripts cannot be secure.  On systems where setuid scripts have
6659 been disabled, the setuid/setgid bits on scripts are currently
6660 useless.  It is possible for $package to detect those bits and emulate
6661 setuid/setgid in a secure fashion.  This emulation will only work if
6662 setuid scripts have been disabled in your kernel.
6663
6664 EOM
6665         case "$d_dosuid" in
6666         "$define") dflt=y ;;
6667         *) dflt=n ;;
6668         esac
6669         rp="Do you want to do setuid/setgid emulation?"
6670         . ./myread
6671         case "$ans" in
6672         [yY]*)  val="$define";;
6673         *)      val="$undef";;
6674         esac
6675         ;;
6676 esac
6677 set d_dosuid
6678 eval $setvar
6679
6680 : see if this is a malloc.h system
6681 set malloc.h i_malloc
6682 eval $inhdr
6683
6684 : see if stdlib is available
6685 set stdlib.h i_stdlib
6686 eval $inhdr
6687
6688 : determine which malloc to compile in
6689 echo " "
6690 case "$usemymalloc" in
6691 [yY]*|true|$define)     dflt='y' ;;
6692 [nN]*|false|$undef)     dflt='n' ;;
6693 *)      case "$ptrsize" in
6694         4) dflt='y' ;;
6695         *) dflt='n' ;;
6696         esac
6697         ;;
6698 esac
6699 rp="Do you wish to attempt to use the malloc that comes with $package?"
6700 . ./myread
6701 usemymalloc="$ans"
6702 case "$ans" in
6703 y*|true)
6704         usemymalloc='y'
6705         mallocsrc='malloc.c'
6706         mallocobj="malloc$_o"
6707         d_mymalloc="$define"
6708         case "$libs" in
6709         *-lmalloc*)
6710                 : Remove malloc from list of libraries to use
6711                 echo "Removing unneeded -lmalloc from library list" >&4
6712                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6713                 shift
6714                 libs="$*"
6715                 echo "libs = $libs" >&4
6716                 ;;
6717         esac
6718         ;;
6719 *)
6720         usemymalloc='n'
6721         mallocsrc=''
6722         mallocobj=''
6723         d_mymalloc="$undef"
6724         ;;
6725 esac
6726
6727 : compute the return types of malloc and free
6728 echo " "
6729 $cat >malloc.c <<END
6730 #$i_malloc I_MALLOC
6731 #$i_stdlib I_STDLIB
6732 #include <stdio.h>
6733 #include <sys/types.h>
6734 #ifdef I_MALLOC
6735 #include <malloc.h>
6736 #endif
6737 #ifdef I_STDLIB
6738 #include <stdlib.h>
6739 #endif
6740 #ifdef TRY_MALLOC
6741 void *malloc();
6742 #endif
6743 #ifdef TRY_FREE
6744 void free();
6745 #endif
6746 END
6747 case "$malloctype" in
6748 '')
6749         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6750                 malloctype='void *'
6751         else
6752                 malloctype='char *'
6753         fi
6754         ;;
6755 esac
6756 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6757
6758 case "$freetype" in
6759 '')
6760         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6761                 freetype='void'
6762         else
6763                 freetype='int'
6764         fi
6765         ;;
6766 esac
6767 echo "Your system uses $freetype free(), it would seem." >&4
6768 $rm -f malloc.[co]
6769 $cat <<EOM
6770
6771 After $package is installed, you may wish to install various
6772 add-on modules and utilities.  Typically, these add-ons will
6773 be installed under $prefix with the rest
6774 of this package.  However, you may wish to install such add-ons
6775 elsewhere under a different prefix.
6776
6777 If you do not wish to put everything under a single prefix, that's
6778 ok.  You will be prompted for the individual locations; this siteprefix
6779 is only used to suggest the defaults.
6780
6781 The default should be fine for most people.
6782
6783 EOM
6784 fn=d~+
6785 rp='Installation prefix to use for add-on modules and utilities?'
6786 : XXX Here might be another good place for an installstyle setting.
6787 case "$siteprefix" in
6788 '') dflt=$prefix ;;
6789 *)  dflt=$siteprefix ;;
6790 esac
6791 . ./getfile
6792 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6793 oldsiteprefix=''
6794 case "$siteprefix" in
6795 '') ;;
6796 *)      case "$ans" in
6797         "$prefix") ;;
6798         *) oldsiteprefix="$prefix";;
6799         esac
6800         ;;
6801 esac
6802 siteprefix="$ans"
6803 siteprefixexp="$ansexp"
6804
6805 : determine where site specific libraries go.
6806 : Usual default is /usr/local/lib/perl5/site_perl/$version
6807 : The default "style" setting is made in installstyle.U
6808 : XXX No longer works with Prefixit stuff.
6809 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6810 case "$sitelib" in
6811 '') case "$installstyle" in
6812         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6813         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6814         esac
6815         ;;
6816 *)      dflt="$sitelib"
6817         ;;
6818 esac
6819 $cat <<EOM
6820
6821 The installation process will create a directory for
6822 site-specific extensions and modules.  Most users find it convenient
6823 to place all site-specific files in this directory rather than in the
6824 main distribution directory.
6825
6826 EOM
6827 fn=d~+
6828 rp='Pathname for the site-specific library files?'
6829 . ./getfile
6830 sitelib="$ans"
6831 sitelibexp="$ansexp"
6832 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6833 : Change installation prefix, if necessary.
6834 if $test X"$prefix" != X"$installprefix"; then
6835         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6836 else
6837         installsitelib="$sitelibexp"
6838 fi
6839
6840 : determine where site specific architecture-dependent libraries go.
6841 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6842 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6843 : sitelib may have an optional trailing /share.
6844 case "$sitearch" in
6845 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6846         dflt="$dflt/$archname"
6847         ;;
6848 *)      dflt="$sitearch"
6849         ;;
6850 esac
6851 set sitearch sitearch none
6852 eval $prefixit
6853 $cat <<EOM
6854
6855 The installation process will also create a directory for
6856 architecture-dependent site-specific extensions and modules.
6857
6858 EOM
6859 fn=d~+
6860 rp='Pathname for the site-specific architecture-dependent library files?'
6861 . ./getfile
6862 sitearch="$ans"
6863 sitearchexp="$ansexp"
6864 : Change installation prefix, if necessary.
6865 if $test X"$prefix" != X"$installprefix"; then
6866         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6867 else
6868         installsitearch="$sitearchexp"
6869 fi
6870
6871 $cat <<EOM
6872
6873 The installation process will also create a directory for
6874 vendor-supplied add-ons.  Vendors who supply perl with their system
6875 may find it convenient to place all vendor-supplied files in this
6876 directory rather than in the main distribution directory.  This will
6877 ease upgrades between binary-compatible maintenance versions of perl.
6878
6879 Of course you may also use these directories in whatever way you see
6880 fit.  For example, you might use them to access modules shared over a
6881 company-wide network.
6882
6883 The default answer should be fine for most people.
6884 This causes further questions about vendor add-ons to be skipped
6885 and no vendor-specific directories will be configured for perl.
6886
6887 EOM
6888 rp='Do you want to configure vendor-specific add-on directories?'
6889 case "$usevendorprefix" in
6890 define|true|[yY]*) dflt=y ;;
6891 *)      : User may have set vendorprefix directly on Configure command line.
6892         case "$vendorprefix" in
6893         ''|' ') dflt=n ;;
6894         *)      dflt=y ;;
6895         esac
6896         ;;
6897 esac
6898 . ./myread
6899 case "$ans" in
6900 [yY]*)  fn=d~+
6901         rp='Installation prefix to use for vendor-supplied add-ons?'
6902         case "$vendorprefix" in
6903         '') dflt='' ;;
6904         *)  dflt=$vendorprefix ;;
6905         esac
6906         . ./getfile
6907         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6908         oldvendorprefix=''
6909         case "$vendorprefix" in
6910         '') ;;
6911         *)      case "$ans" in
6912                 "$prefix") ;;
6913                 *) oldvendorprefix="$prefix";;
6914                 esac
6915                 ;;
6916         esac
6917         usevendorprefix="$define"
6918         vendorprefix="$ans"
6919         vendorprefixexp="$ansexp"
6920         ;;
6921 *)      usevendorprefix="$undef"
6922         vendorprefix=''
6923         vendorprefixexp=''
6924         ;;
6925 esac
6926
6927 case "$vendorprefix" in
6928 '')     d_vendorlib="$undef"
6929         vendorlib=''
6930         vendorlibexp=''
6931         ;;
6932 *)      d_vendorlib="$define"
6933         : determine where vendor-supplied modules go.
6934         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6935         case "$vendorlib" in
6936         '')
6937                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6938                 case "$installstyle" in
6939                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6940                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6941                 esac
6942                 ;;
6943         *)      dflt="$vendorlib"
6944                 ;;
6945         esac
6946         fn=d~+
6947         rp='Pathname for the vendor-supplied library files?'
6948         . ./getfile
6949         vendorlib="$ans"
6950         vendorlibexp="$ansexp"
6951         ;;
6952 esac
6953 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6954 : Change installation prefix, if necessary.
6955 if $test X"$prefix" != X"$installprefix"; then
6956         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6957 else
6958         installvendorlib="$vendorlibexp"
6959 fi
6960
6961 case "$vendorprefix" in
6962 '')     d_vendorarch="$undef"
6963         vendorarch=''
6964         vendorarchexp=''
6965         ;;
6966 *)      d_vendorarch="$define"
6967         : determine where vendor-supplied architecture-dependent libraries go.
6968         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6969         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6970         : vendorlib may have an optional trailing /share.
6971         case "$vendorarch" in
6972         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6973                 dflt="$dflt/$archname"
6974                 ;;
6975         *)      dflt="$vendorarch" ;;
6976         esac
6977         fn=d~+
6978         rp='Pathname for vendor-supplied architecture-dependent files?'
6979         . ./getfile
6980         vendorarch="$ans"
6981         vendorarchexp="$ansexp"
6982         ;;
6983 esac
6984 : Change installation prefix, if necessary.
6985 if $test X"$prefix" != X"$installprefix"; then
6986         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6987 else
6988         installvendorarch="$vendorarchexp"
6989 fi
6990
6991 : Final catch-all directories to search
6992 $cat <<EOM
6993
6994 Lastly, you can have perl look in other directories for extensions and
6995 modules in addition to those already specified.
6996 These directories will be searched after 
6997         $sitearch 
6998         $sitelib 
6999 EOM
7000 test X"$vendorlib" != "X" && echo '     ' $vendorlib
7001 test X"$vendorarch" != "X" && echo '    ' $vendorarch
7002 echo ' '
7003 case "$otherlibdirs" in
7004 ''|' ') dflt='none' ;;
7005 *)      dflt="$otherlibdirs" ;;
7006 esac
7007 $cat <<EOM
7008 Enter a colon-separated set of extra paths to include in perl's @INC
7009 search path, or enter 'none' for no extra paths.
7010
7011 EOM
7012
7013 rp='Colon-separated list of additional directories for perl to search?'
7014 . ./myread
7015 case "$ans" in
7016 ' '|''|none)    otherlibdirs=' ' ;;     
7017 *)      otherlibdirs="$ans" ;;
7018 esac
7019 case "$otherlibdirs" in
7020 ' ') val=$undef ;;
7021 *)      val=$define ;;
7022 esac
7023 set d_perl_otherlibdirs
7024 eval $setvar
7025
7026 : Cruising for prototypes
7027 echo " "
7028 echo "Checking out function prototypes..." >&4
7029 $cat >prototype.c <<'EOCP'
7030 int main(int argc, char *argv[]) {
7031         exit(0);}
7032 EOCP
7033 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
7034         echo "Your C compiler appears to support function prototypes."
7035         val="$define"
7036 else
7037         echo "Your C compiler doesn't seem to understand function prototypes."
7038         val="$undef"
7039 fi
7040 set prototype
7041 eval $setvar
7042 $rm -f prototype*
7043
7044 case "$prototype" in
7045 "$define") ;;
7046 *)      ansi2knr='ansi2knr'
7047         echo " "
7048         cat <<EOM >&4
7049
7050 $me:  FATAL ERROR:
7051 This version of $package can only be compiled by a compiler that 
7052 understands function prototypes.  Unfortunately, your C compiler 
7053         $cc $ccflags
7054 doesn't seem to understand them.  Sorry about that.
7055
7056 If GNU cc is available for your system, perhaps you could try that instead.  
7057
7058 Eventually, we hope to support building Perl with pre-ANSI compilers.
7059 If you would like to help in that effort, please contact <perlbug@perl.org>.
7060
7061 Aborting Configure now.
7062 EOM
7063         exit 2
7064         ;;
7065 esac
7066
7067 : determine where public executables go
7068 echo " "
7069 set dflt bin bin
7070 eval $prefixit
7071 fn=d~
7072 rp='Pathname where the public executables will reside?'
7073 . ./getfile
7074 if $test "X$ansexp" != "X$binexp"; then
7075         installbin=''
7076 fi
7077 bin="$ans"
7078 binexp="$ansexp"
7079 : Change installation prefix, if necessary.
7080 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7081 if $test X"$prefix" != X"$installprefix"; then
7082         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7083 else
7084         installbin="$binexp"
7085 fi
7086
7087 echo " "
7088 case "$extras" in
7089 '') dflt='n';;
7090 *) dflt='y';;
7091 esac
7092 cat <<EOM
7093 Perl can be built with extra modules or bundles of modules which
7094 will be fetched from the CPAN and installed alongside Perl.
7095
7096 Notice that you will need access to the CPAN; either via the Internet,
7097 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7098 be asked later to configure the CPAN.pm module which will in turn do
7099 the installation of the rest of the extra modules or bundles.)
7100
7101 Notice also that if the modules require any external software such as
7102 libraries and headers (the libz library and the zlib.h header for the
7103 Compress::Zlib module, for example) you MUST have any such software
7104 already installed, this configuration process will NOT install such
7105 things for you.
7106
7107 If this doesn't make any sense to you, just accept the default '$dflt'.
7108 EOM
7109 rp='Install any extra modules (y or n)?'
7110 . ./myread
7111 case "$ans" in
7112 y|Y)
7113         cat <<EOM
7114
7115 Please list any extra modules or bundles to be installed from CPAN,
7116 with spaces between the names.  The names can be in any format the
7117 'install' command of CPAN.pm will understand.  (Answer 'none',
7118 without the quotes, to install no extra modules or bundles.)
7119 EOM
7120         rp='Extras?'
7121         dflt="$extras"
7122         . ./myread
7123         extras="$ans"
7124 esac
7125 case "$extras" in
7126 ''|'none')
7127         val=''
7128         $rm -f ../extras.lst
7129         ;;
7130 *)      echo "(Saving the list of extras for later...)"
7131         echo "$extras" > ../extras.lst
7132         val="'$extras'"
7133         ;;
7134 esac
7135 set extras
7136 eval $setvar
7137 echo " "
7138
7139 : Find perl5.005 or later.
7140 echo "Looking for a previously installed perl5.005 or later... "
7141 case "$perl5" in
7142 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7143                 : Check if this perl is recent and can load a simple module
7144                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7145                         perl5=$tdir/perl
7146                         break;
7147                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7148                         perl5=$tdir/perl5
7149                         break;
7150                 fi
7151         done
7152         ;;
7153 *)      perl5="$perl5"
7154         ;;
7155 esac
7156 case "$perl5" in
7157 '')     echo "None found.  That's ok.";;
7158 *)      echo "Using $perl5." ;;
7159 esac
7160
7161 : Determine list of previous versions to include in @INC
7162 $cat > getverlist <<EOPL
7163 #!$perl5 -w
7164 use File::Basename;
7165 \$api_versionstring = "$api_versionstring";
7166 \$version = "$version";
7167 \$stem = "$sitelib_stem";
7168 \$archname = "$archname";
7169 EOPL
7170         $cat >> getverlist <<'EOPL'
7171 # Can't have leading @ because metaconfig interprets it as a command!
7172 ;@inc_version_list=();
7173 # XXX Redo to do opendir/readdir? 
7174 if (-d $stem) {
7175     chdir($stem);
7176     ;@candidates = glob("5.*");
7177 }
7178 else {
7179     ;@candidates = ();
7180 }
7181
7182 # XXX ToDo:  These comparisons must be reworked when two-digit
7183 # subversions come along, so that 5.7.10 compares as greater than
7184 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7185 # widespread that we can use the built-in version vectors rather
7186 # than reinventing them here.  For 5.6.0, however, we must
7187 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7188 foreach $d (@candidates) {
7189     if ($d lt $version) {
7190         if ($d ge $api_versionstring) {
7191             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7192         }
7193         elsif ($d ge "5.005") {
7194             unshift(@inc_version_list, grep { -d } $d);
7195         }
7196     }
7197     else {
7198         # Skip newer version.  I.e. don't look in
7199         # 5.7.0 if we're installing 5.6.1.
7200     }
7201 }
7202
7203 if (@inc_version_list) {
7204     print join(' ', @inc_version_list);
7205 }
7206 else {
7207     # Blank space to preserve value for next Configure run.
7208     print " ";
7209 }
7210 EOPL
7211 chmod +x getverlist
7212 case "$inc_version_list" in
7213 '')     if test -x "$perl5$exe_ext"; then
7214                 dflt=`$perl5 getverlist`
7215         else
7216                 dflt='none'
7217         fi
7218         ;;
7219 $undef) dflt='none' ;;
7220 *)  eval dflt=\"$inc_version_list\" ;;
7221 esac
7222 case "$dflt" in
7223 ''|' ') dflt=none ;;
7224 esac
7225 case "$dflt" in
7226 5.005) case "$bincompat5005" in
7227        $define|true|[yY]*) ;;
7228        *) dflt=none ;;
7229        esac
7230        ;;
7231 esac
7232 $cat <<'EOM'
7233
7234 In order to ease the process of upgrading, this version of perl 
7235 can be configured to use modules built and installed with earlier 
7236 versions of perl that were installed under $prefix.  Specify here
7237 the list of earlier versions that this version of perl should check.
7238 If Configure detected no earlier versions of perl installed under
7239 $prefix, then the list will be empty.  Answer 'none' to tell perl
7240 to not search earlier versions.
7241
7242 The default should almost always be sensible, so if you're not sure,
7243 just accept the default.
7244 EOM
7245
7246 rp='List of earlier versions to include in @INC?'
7247 . ./myread
7248 case "$ans" in
7249 [Nn]one|''|' ') inc_version_list=' ' ;;
7250 *) inc_version_list="$ans" ;;
7251 esac
7252 case "$inc_version_list" in
7253 ''|' ') 
7254         inc_version_list_init='0';;
7255 *)      inc_version_list_init=`echo $inc_version_list |
7256                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7257         ;;
7258 esac
7259 $rm -f getverlist
7260
7261 : determine whether to install perl also as /usr/bin/perl
7262
7263 echo " "
7264 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7265         $cat <<EOM
7266 Many scripts expect perl to be installed as /usr/bin/perl.
7267 I can install the perl you are about to compile also as /usr/bin/perl
7268 (in addition to $installbin/perl).
7269 EOM
7270         case "$installusrbinperl" in
7271         "$undef"|[nN]*) dflt='n';;
7272         *)              dflt='y';;
7273         esac
7274         rp="Do you want to install perl as /usr/bin/perl?"
7275         . ./myread
7276         case "$ans" in
7277         [yY]*)  val="$define";;
7278         *)      val="$undef" ;;
7279         esac
7280 else
7281         val="$undef"
7282 fi
7283 set installusrbinperl
7284 eval $setvar
7285
7286 : see if dld is available
7287 set dld.h i_dld
7288 eval $inhdr
7289
7290 : see if dlopen exists
7291 xxx_runnm="$runnm"
7292 runnm=false
7293 set dlopen d_dlopen
7294 eval $inlibc
7295 runnm="$xxx_runnm"
7296
7297 : determine which dynamic loading, if any, to compile in
7298 echo " "
7299 dldir="ext/DynaLoader"
7300 case "$usedl" in
7301 $define|y|true)
7302         dflt='y'
7303         usedl="$define"
7304         ;;
7305 $undef|n|false)
7306         dflt='n'
7307         usedl="$undef"
7308         ;;
7309 *) 
7310         dflt='n'
7311         case "$d_dlopen" in
7312             $define) dflt='y' ;;
7313         esac
7314         case "$i_dld" in
7315             $define) dflt='y' ;;
7316         esac
7317         : Does a dl_xxx.xs file exist for this operating system
7318         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7319         ;;
7320 esac
7321 rp="Do you wish to use dynamic loading?"
7322 . ./myread
7323 usedl="$ans"
7324 case "$ans" in
7325 y*) usedl="$define"
7326         case "$dlsrc" in
7327         '')
7328                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7329                         dflt="$dldir/dl_${osname}.xs"
7330                 elif $test "$d_dlopen" = "$define" ; then
7331                         dflt="$dldir/dl_dlopen.xs"
7332                 elif $test "$i_dld" = "$define" ; then
7333                         dflt="$dldir/dl_dld.xs"
7334                 else
7335                         dflt=''
7336                 fi
7337                 ;;
7338         *)      dflt="$dldir/$dlsrc"
7339                 ;;
7340         esac
7341     echo "The following dynamic loading files are available:"
7342         : Can not go over to $dldir because getfile has path hard-coded in.
7343         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7344         rp="Source file to use for dynamic loading"
7345         fn="fne"
7346         gfpth="$src"
7347         . ./getfile
7348         usedl="$define"
7349         : emulate basename
7350         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7351
7352         $cat << EOM
7353
7354 Some systems may require passing special flags to $cc -c to
7355 compile modules that will be used to create a shared library.
7356 To use no flags, say "none".
7357
7358 EOM
7359     case "$cccdlflags" in
7360     '') case "$gccversion" in
7361                 '') case "$osname" in
7362                         hpux)   dflt='+z' ;;
7363                         next)   dflt='none' ;;
7364                         irix*)  dflt='-KPIC' ;;
7365                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7366                         sunos)  dflt='-pic' ;;
7367                         *)      dflt='none' ;;
7368                     esac
7369                         ;;
7370                 *)  case "$osname" in
7371                         darwin) dflt='none' ;;
7372                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7373                         *)      dflt='-fpic' ;;
7374                     esac ;;
7375             esac ;;
7376         ' ') dflt='none' ;;
7377     *)  dflt="$cccdlflags" ;;
7378     esac
7379     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7380     . ./myread
7381     case "$ans" in
7382     none) cccdlflags=' ' ;;
7383     *) cccdlflags="$ans" ;;
7384     esac
7385
7386     cat << EOM
7387
7388 Some systems use ld to create libraries that can be dynamically loaded,
7389 while other systems (such as those using ELF) use $cc.
7390
7391 EOM
7392         case "$ld" in
7393         '')     $cat >try.c <<'EOM'
7394 /* Test for whether ELF binaries are produced */
7395 #include <fcntl.h>
7396 #include <stdlib.h>
7397 int main() {
7398         char b[4];
7399         int i = open("a.out",O_RDONLY);
7400         if(i == -1) 
7401                 exit(1); /* fail */
7402         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7403                 exit(0); /* succeed (yes, it's ELF) */
7404         else
7405                 exit(1); /* fail */
7406 }
7407 EOM
7408                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7409                         cat <<EOM
7410 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7411 EOM
7412                         dflt="$cc"
7413                 else
7414                         echo "I'll use ld to build dynamic libraries."
7415                         dflt='ld'
7416                 fi
7417                 rm -f try.c a.out
7418                 ;;
7419         *)      dflt="$ld"
7420                 ;;
7421         esac
7422
7423     rp="What command should be used to create dynamic libraries?"
7424     . ./myread
7425         ld="$ans"
7426
7427     cat << EOM
7428
7429 Some systems may require passing special flags to $ld to create a
7430 library that can be dynamically loaded.  If your ld flags include
7431 -L/other/path options to locate libraries outside your loader's normal
7432 search path, you may need to specify those -L options here as well.  To
7433 use no flags, say "none".
7434
7435 EOM
7436     case "$lddlflags" in
7437     '') case "$osname" in
7438                         beos) dflt='-nostart' ;;
7439                         hpux) dflt='-b';
7440                               case "$gccversion" in
7441                               '') dflt="$dflt +vnocompatwarnings" ;;
7442                               esac
7443                               ;;        
7444                         linux|irix*)    dflt='-shared' ;;
7445                         next)  dflt='none' ;;
7446                         solaris) dflt='-G' ;;
7447                         sunos) dflt='-assert nodefinitions' ;;
7448                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7449                 *)     dflt='none' ;;
7450                         esac
7451                         ;;
7452     *) dflt="$lddlflags" ;;
7453     esac
7454
7455         : Try to guess additional flags to pick up local libraries.
7456         : Be careful not to append to a plain 'none'
7457         case "$dflt" in
7458         none) dflt='' ;;
7459         esac
7460         for thisflag in $ldflags; do
7461                 case "$thisflag" in
7462                 -L*|-R*|-Wl,-R*)
7463                         case " $dflt " in
7464                         *" $thisflag "*) ;;
7465                         *) dflt="$dflt $thisflag" ;;
7466                         esac
7467                         ;;
7468                 esac
7469         done
7470
7471         case "$dflt" in
7472         ''|' ') dflt='none' ;;
7473         esac
7474
7475     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7476     . ./myread
7477     case "$ans" in
7478     none) lddlflags=' ' ;;
7479     *) lddlflags="$ans" ;;
7480     esac
7481
7482         cat <<EOM
7483
7484 Some systems may require passing special flags to $cc to indicate that
7485 the resulting executable will use dynamic linking.  To use no flags,
7486 say "none".
7487
7488 EOM
7489     case "$ccdlflags" in
7490     '') case "$osname" in
7491                 hpux)   dflt='-Wl,-E' ;;
7492                 linux)  dflt='-rdynamic' ;;
7493                 next)   dflt='none' ;;
7494                 sunos)  dflt='none' ;;
7495                 *)      dflt='none' ;;
7496             esac ;;
7497     ' ')  dflt='none' ;;
7498     *)  dflt="$ccdlflags" ;;
7499     esac
7500     rp="Any special flags to pass to $cc to use dynamic linking?"
7501     . ./myread
7502     case "$ans" in
7503     none) ccdlflags=' ' ;;
7504     *) ccdlflags="$ans" ;;
7505     esac
7506     ;;
7507 *)  usedl="$undef"
7508         ld='ld'
7509     dlsrc='dl_none.xs'
7510     lddlflags=''
7511     ccdlflags=''
7512     ;;
7513 esac
7514
7515 also=''
7516 case "$usedl" in
7517 $undef)
7518         # No dynamic loading being used, so don't bother even to prompt.
7519         useshrplib='false'
7520         ;;
7521 *)      case "$useshrplib" in
7522         '')     case "$osname" in
7523                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7524                         dflt=y
7525                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7526                         ;;
7527                 next*)
7528                         case "$osvers" in
7529                         4*)     dflt=y
7530                                 also='Building a shared libperl is needed for MAB support.'
7531                                 ;;
7532                         *)      dflt=n
7533                                 ;;
7534                         esac
7535                         ;;
7536                 *)      dflt=n
7537                         ;;
7538                 esac
7539                 ;;
7540         $define|true|[Yy]*)
7541                 dflt=y
7542                 ;;
7543         *)      dflt=n
7544                 ;;
7545         esac
7546         $cat << EOM
7547
7548 The perl executable is normally obtained by linking perlmain.c with
7549 libperl${_a}, any static extensions (usually just DynaLoader), and
7550 any other libraries needed on this system (such as -lm, etc.).  Since
7551 your system supports dynamic loading, it is probably possible to build
7552 a shared libperl.$so.  If you will have more than one executable linked
7553 to libperl.$so, this will significantly reduce the size of each
7554 executable, but it may have a noticeable affect on performance.  The
7555 default is probably sensible for your system.
7556 $also
7557
7558 EOM
7559         rp="Build a shared libperl.$so (y/n)"
7560         . ./myread
7561         case "$ans" in
7562         true|$define|[Yy]*)
7563                 useshrplib='true'  ;;
7564         *)      useshrplib='false' ;;
7565         esac
7566         ;;
7567 esac
7568
7569 case "$useshrplib" in
7570 true)
7571         case "$libperl" in
7572         '')
7573                 # Figure out a good name for libperl.so.  Since it gets stored in
7574                 # a version-specific architecture-dependent library, the version
7575                 # number isn't really that important, except for making cc/ld happy.
7576                 #
7577                 # A name such as libperl.so.3.1
7578                 majmin="libperl.$so.$patchlevel.$subversion"
7579                 # A name such as libperl.so.301
7580                 majonly=`echo $patchlevel $subversion |
7581                         $awk '{printf "%d%02d", $1, $2}'`
7582                 majonly=libperl.$so.$majonly
7583                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7584                 # rely on figuring it out from the naming of libc.
7585                 case "${osname}${osvers}" in
7586                 next4*)
7587                         dflt=libperl.5.$so
7588                         # XXX How handle the --version stuff for MAB?
7589                         ;;
7590                 linux*)  # ld won't link with a bare -lperl otherwise.
7591                         dflt=libperl.$so
7592                         ;;
7593                 cygwin*) # ld links against an importlib
7594                         dflt=libperl$lib_ext
7595                         ;;
7596                 *)      # Try to guess based on whether libc has major.minor.
7597                         case "$libc" in
7598                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7599                         *libc.$so.[0-9]*) dflt=$majonly ;;
7600                         *)      dflt=libperl.$so ;;
7601                         esac
7602                         ;;
7603                 esac
7604                 ;;
7605         *)      dflt=$libperl
7606                 ;;
7607         esac
7608         cat << EOM
7609
7610 I need to select a good name for the shared libperl.  If your system uses
7611 library names with major and minor numbers, then you might want something
7612 like $majmin.  Alternatively, if your system uses a single version
7613 number for shared libraries, then you might want to use $majonly.
7614 Or, your system might be quite happy with a simple libperl.$so.
7615
7616 Since the shared libperl will get installed into a version-specific
7617 architecture-dependent directory, the version number of the shared perl
7618 library probably isn't important, so the default should be o.k.
7619
7620 EOM
7621         rp='What name do you want to give to the shared libperl?'
7622         . ./myread
7623         libperl=$ans
7624         echo "Ok, I'll use $libperl"
7625         ;;
7626 *)
7627         libperl="libperl${_a}"
7628         ;;
7629 esac
7630
7631 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7632 case "$shrpdir" in
7633 '') ;;
7634 *)      $cat >&4 <<EOM
7635 WARNING:  Use of the shrpdir variable for the installation location of
7636 the shared $libperl is not supported.  It was never documented and
7637 will not work in this version.  Let me (perlbug@perl.org)
7638 know of any problems this may cause.
7639
7640 EOM
7641         case "$shrpdir" in
7642         "$archlibexp/CORE")
7643                 $cat >&4 <<EOM
7644 But your current setting of $shrpdir is
7645 the default anyway, so it's harmless.
7646 EOM
7647                 ;;
7648         *)
7649                 $cat >&4 <<EOM
7650 Further, your current attempted setting of $shrpdir
7651 conflicts with the value of $archlibexp/CORE
7652 that installperl will use.
7653 EOM
7654                 ;;
7655         esac
7656         ;;
7657 esac
7658
7659 # How will the perl executable find the installed shared $libperl?
7660 # Add $xxx to ccdlflags.
7661 # If we can't figure out a command-line option, use $shrpenv to
7662 # set env LD_RUN_PATH.  The main perl makefile uses this.
7663 shrpdir=$archlibexp/CORE
7664 xxx=''
7665 tmp_shrpenv=''
7666 if "$useshrplib"; then
7667     case "$osname" in 
7668         aix)
7669                 # We'll set it in Makefile.SH...
7670                 ;;
7671         solaris)
7672                 xxx="-R $shrpdir"
7673                 ;;
7674         freebsd|netbsd)
7675                 xxx="-Wl,-R$shrpdir"
7676                 ;;
7677         bsdos|linux|irix*|dec_osf)
7678                 xxx="-Wl,-rpath,$shrpdir"
7679                 ;;
7680         next)
7681                 # next doesn't like the default...
7682                 ;;
7683         beos)
7684                 # beos doesn't like the default, either.
7685                 ;;
7686         hpux*)
7687                 # hpux doesn't like the default, either.
7688                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7689                 ;;
7690         *)
7691                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7692                 ;;
7693         esac
7694         case "$xxx" in
7695         '') ;;
7696         *)      
7697                 # Only add $xxx if it isn't already in ccdlflags.
7698                 case " $ccdlflags " in
7699                 *" $xxx "*)     ;;
7700                 *)      ccdlflags="$ccdlflags $xxx"
7701                         cat <<EOM >&4
7702
7703 Adding $xxx to the flags
7704 passed to $ld so that the perl executable will find the 
7705 installed shared $libperl.
7706
7707 EOM
7708                         ;;
7709                 esac
7710                 ;;
7711         esac
7712 fi
7713 # Fix ccdlflags in AIX for building external extensions.
7714 # (For building Perl itself bare -bE:perl.exp is needed,
7715 #  Makefile.SH takes care of this.)
7716 case "$osname" in
7717 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7718 esac
7719 # Respect a hint or command-line value.
7720 case "$shrpenv" in
7721 '') shrpenv="$tmp_shrpenv" ;;
7722 esac
7723 case "$ldlibpthname" in
7724 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7725 none)   ldlibpthname='' ;;
7726 esac
7727
7728 : determine where manual pages are on this system
7729 echo " "
7730 case "$sysman" in
7731 '') 
7732         syspath='/usr/share/man/man1 /usr/man/man1'
7733         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7734         syspath="$syspath /usr/man/u_man/man1"
7735         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7736         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7737         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7738         sysman=`./loc . /usr/man/man1 $syspath`
7739         ;;
7740 esac
7741 if $test -d "$sysman"; then
7742         echo "System manual is in $sysman." >&4
7743 else
7744         echo "Could not find manual pages in source form." >&4
7745 fi
7746
7747 : determine where manual pages go
7748 set man1dir man1dir none
7749 eval $prefixit
7750 $cat <<EOM
7751
7752 $spackage has manual pages available in source form.
7753 EOM
7754 case "$nroff" in
7755 nroff)
7756         echo "However, you don't have nroff, so they're probably useless to you."
7757         case "$man1dir" in
7758         '') man1dir="none";;
7759         esac;;
7760 esac
7761 echo "If you don't want the manual sources installed, answer 'none'."
7762 case "$man1dir" in
7763 ' ') dflt=none
7764         ;;
7765 '')
7766         lookpath="$prefixexp/share/man/man1"
7767         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7768         lookpath="$lookpath $prefixexp/man/p_man/man1"
7769         lookpath="$lookpath $prefixexp/man/u_man/man1"
7770         lookpath="$lookpath $prefixexp/man/man.1"
7771         case "$sysman" in
7772         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7773         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7774         esac
7775         set dflt
7776         eval $prefixup
7777         ;;
7778 *)  dflt="$man1dir"
7779         ;;
7780 esac
7781 echo " "
7782 fn=dn+~
7783 rp="Where do the main $spackage manual pages (source) go?"
7784 . ./getfile
7785 if $test "X$man1direxp" != "X$ansexp"; then
7786         installman1dir=''
7787 fi
7788 man1dir="$ans"
7789 man1direxp="$ansexp"
7790 case "$man1dir" in
7791 '')     man1dir=' '
7792         installman1dir='';;
7793 esac
7794
7795 : Change installation prefix, if necessary.
7796 if $test X"$prefix" != X"$installprefix"; then
7797         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7798 else
7799         installman1dir="$man1direxp"
7800 fi
7801
7802 : What suffix to use on installed man pages
7803
7804 case "$man1dir" in
7805 ' ')
7806         man1ext='0'
7807         ;;
7808 *)
7809         rp="What suffix should be used for the main $spackage man pages?"
7810         case "$man1ext" in
7811         '')     case "$man1dir" in
7812                 *1)  dflt=1 ;;
7813                 *1p) dflt=1p ;;
7814                 *1pm) dflt=1pm ;;
7815                 *l) dflt=l;;
7816                 *n) dflt=n;;
7817                 *o) dflt=o;;
7818                 *p) dflt=p;;
7819                 *C) dflt=C;;
7820                 *L) dflt=L;;
7821                 *L1) dflt=L1;;
7822                 *) dflt=1;;
7823                 esac
7824                 ;;
7825         *)      dflt="$man1ext";;
7826         esac
7827         . ./myread
7828         man1ext="$ans"
7829         ;;
7830 esac
7831
7832 : see if we can have long filenames
7833 echo " "
7834 first=123456789abcdef
7835 $rm -f $first
7836 if (echo hi >$first) 2>/dev/null; then
7837         if $test -f 123456789abcde; then
7838                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7839                 val="$undef"
7840         else
7841                 echo 'You can have filenames longer than 14 characters.'>&4
7842                 val="$define"
7843         fi
7844 else
7845         $cat <<'EOM'
7846 You can't have filenames longer than 14 chars.
7847 You can't even think about them!
7848 EOM
7849         val="$undef"
7850 fi 
7851 set d_flexfnam
7852 eval $setvar
7853 $rm -rf 123456789abcde*
7854
7855 : determine where library module manual pages go
7856 set man3dir man3dir none
7857 eval $prefixit
7858 $cat <<EOM
7859
7860 $spackage has manual pages for many of the library modules.
7861 EOM
7862
7863 case "$nroff" in
7864 nroff)
7865         $cat <<'EOM'
7866 However, you don't have nroff, so they're probably useless to you.
7867 EOM
7868         case "$man3dir" in
7869         '') man3dir="none";;
7870         esac;;
7871 esac
7872
7873 case "$d_flexfnam" in
7874 undef)
7875         $cat <<'EOM'
7876 However, your system can't handle the long file names like File::Basename.3. 
7877 EOM
7878         case "$man3dir" in
7879         '') man3dir="none";;
7880         esac;;
7881 esac
7882
7883 echo "If you don't want the manual sources installed, answer 'none'."
7884 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7885 case "$man3dir" in
7886 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7887         if $test -d "$privlib/man/man3"; then
7888                 cat <<EOM >&4
7889
7890 WARNING:  Previous versions of perl installed man3 pages into
7891 $privlib/man/man3.  This version will suggest a 
7892 new default of $dflt.  
7893 EOM
7894                 tdflt=$dflt
7895                 dflt='n'
7896                 rp='Do you wish to preserve the old behavior?(y/n)'
7897                 . ./myread
7898                 case "$ans" in
7899                 y*) dflt="$privlib/man/man3" ;;
7900                 *)  dflt=$tdflt ;;
7901                 esac
7902     fi
7903         ;;
7904 *)      dflt="$man3dir" ;;
7905 esac
7906 case "$dflt" in
7907 ' ') dflt=none ;;
7908 esac
7909 echo " "
7910 fn=dn+~
7911 rp="Where do the $package library man pages (source) go?"
7912 . ./getfile
7913 man3dir="$ans"
7914 man3direxp="$ansexp"
7915 case "$man3dir" in
7916 '')     man3dir=' '
7917         installman3dir='';;
7918 esac
7919
7920 : Change installation prefix, if necessary.
7921 if $test X"$prefix" != X"$installprefix"; then
7922         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7923 else
7924         installman3dir="$man3direxp"
7925 fi
7926
7927 : What suffix to use on installed man pages
7928 case "$man3dir" in
7929 ' ')
7930         man3ext='0'
7931         ;;
7932 *)
7933         rp="What suffix should be used for the $package library man pages?"
7934         case "$man3ext" in
7935         '')     case "$man3dir" in
7936                 *3)  dflt=3 ;;
7937                 *3p) dflt=3p ;;
7938                 *3pm) dflt=3pm ;;
7939                 *l) dflt=l;;
7940                 *n) dflt=n;;
7941                 *o) dflt=o;;
7942                 *p) dflt=p;;
7943                 *C) dflt=C;;
7944                 *L) dflt=L;;
7945                 *L3) dflt=L3;;
7946                 *) dflt=3;;
7947                 esac
7948                 ;;
7949         *)      dflt="$man3ext";;
7950         esac
7951         . ./myread
7952         man3ext="$ans"
7953         ;;
7954 esac
7955
7956 : see if we have to deal with yellow pages, now NIS.
7957 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7958         if $test -f /usr/etc/nibindd; then
7959                 echo " "
7960                 echo "I'm fairly confident you're on a NeXT."
7961                 echo " "
7962                 rp='Do you get the hosts file via NetInfo?'
7963                 dflt=y
7964                 case "$hostcat" in
7965                 nidump*) ;;
7966                 '') ;;
7967                 *) dflt=n;;
7968                 esac
7969                 . ./myread
7970                 case "$ans" in
7971                 y*) hostcat='nidump hosts .';;
7972                 *)      case "$hostcat" in
7973                         nidump*) hostcat='';;
7974                         esac
7975                         ;;
7976                 esac
7977         fi
7978         case "$hostcat" in
7979         nidump*) ;;
7980         *)
7981                 case "$hostcat" in
7982                 *ypcat*) dflt=y;;
7983                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7984                                 dflt=y
7985                         else
7986                                 dflt=n
7987                         fi;;
7988                 *) dflt=n;;
7989                 esac
7990                 echo " "
7991                 rp='Are you getting the hosts file via yellow pages?'
7992                 . ./myread
7993                 case "$ans" in
7994                 y*) hostcat='ypcat hosts';;
7995                 *) hostcat='cat /etc/hosts';;
7996                 esac
7997                 ;;
7998         esac
7999 fi
8000 case "$hostcat" in
8001 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
8002 esac
8003 case "$groupcat" in
8004 '') test -f /etc/group && groupcat='cat /etc/group';;
8005 esac
8006 case "$passcat" in
8007 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
8008 esac
8009
8010 : now get the host name
8011 echo " "
8012 echo "Figuring out host name..." >&4
8013 case "$myhostname" in
8014 '') cont=true
8015         echo 'Maybe "hostname" will work...'
8016         if tans=`sh -c hostname 2>&1` ; then
8017                 myhostname=$tans
8018                 phostname=hostname
8019                 cont=''
8020         fi
8021         ;;
8022 *) cont='';;
8023 esac
8024 if $test "$cont"; then
8025         if ./xenix; then
8026                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
8027                 if tans=`cat /etc/systemid 2>&1` ; then
8028                         myhostname=$tans
8029                         phostname='cat /etc/systemid'
8030                         echo "Whadyaknow.  Xenix always was a bit strange..."
8031                         cont=''
8032                 fi
8033         elif $test -r /etc/systemid; then
8034                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8035         fi
8036 fi
8037 if $test "$cont"; then
8038         echo 'No, maybe "uuname -l" will work...'
8039         if tans=`sh -c 'uuname -l' 2>&1` ; then
8040                 myhostname=$tans
8041                 phostname='uuname -l'
8042         else
8043                 echo 'Strange.  Maybe "uname -n" will work...'
8044                 if tans=`sh -c 'uname -n' 2>&1` ; then
8045                         myhostname=$tans
8046                         phostname='uname -n'
8047                 else
8048                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8049                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8050                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8051                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8052                         else
8053                                 case "$myhostname" in
8054                                 '') echo "Does this machine have an identity crisis or something?"
8055                                         phostname='';;
8056                                 *)
8057                                         echo "Well, you said $myhostname before..."
8058                                         phostname='echo $myhostname';;
8059                                 esac
8060                         fi
8061                 fi
8062         fi
8063 fi
8064 case "$myhostname" in
8065 '') myhostname=noname ;;
8066 esac
8067 : you do not want to know about this
8068 set $myhostname
8069 myhostname=$1
8070
8071 : verify guess
8072 if $test "$myhostname" ; then
8073         dflt=y
8074         rp='Your host name appears to be "'$myhostname'".'" Right?"
8075         . ./myread
8076         case "$ans" in
8077         y*) ;;
8078         *) myhostname='';;
8079         esac
8080 fi
8081
8082 : bad guess or no guess
8083 while $test "X$myhostname" = X ; do
8084         dflt=''
8085         rp="Please type the (one word) name of your host:"
8086         . ./myread
8087         myhostname="$ans"
8088 done
8089
8090 : translate upper to lower if necessary
8091 case "$myhostname" in
8092 *[A-Z]*)
8093         echo "(Normalizing case in your host name)"
8094         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8095         ;;
8096 esac
8097
8098 case "$myhostname" in
8099 *.*)
8100         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8101         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8102         echo "(Trimming domain name from host name--host name is now $myhostname)"
8103         ;;
8104 *) case "$mydomain" in
8105         '')
8106                 {
8107                         test "X$hostcat" = "Xypcat hosts" &&
8108                         ypmatch "$myhostname" hosts 2>/dev/null |\
8109                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8110                         $test -s hosts
8111                 } || {
8112                         test "X$hostcat" != "X" &&
8113                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8114                                         /[       ]$myhostname[  . ]/p" > hosts
8115                 }
8116                 tmp_re="[       . ]"
8117                 if $test -f hosts; then
8118                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8119                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8120                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8121                                 hosts | $sort | $uniq | \
8122                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8123                         case `$echo X$dflt` in
8124                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8125                                 dflt=.
8126                                 ;;
8127                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8128                                 ;;
8129                         esac
8130                 else
8131                         echo "(I cannot locate a hosts database anywhere)"
8132                         dflt=.
8133                 fi
8134                 case "$dflt" in
8135                 .)
8136                         tans=`./loc resolv.conf X /etc /usr/etc`
8137                         if $test -f "$tans"; then
8138                                 echo "(Attempting domain name extraction from $tans)"
8139                                 dflt=.`$sed -n -e 's/   / /g' \
8140                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8141                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8142                                 case "$dflt" in
8143                                 .) dflt=.`$sed -n -e 's/        / /g' \
8144                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8145                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8146                                         ;;
8147                                 esac
8148                         fi
8149                         ;;
8150                 esac
8151                 case "$dflt" in
8152                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8153                         dflt=.`sh -c domainname 2>/dev/null`
8154                         case "$dflt" in
8155                         '') dflt='.';;
8156                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8157                         esac
8158                         ;;
8159                 esac
8160                 case "$dflt$osname" in
8161                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8162                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8163                         ;;
8164                 esac
8165                 case "$dflt" in
8166                 .) echo "(Lost all hope -- silly guess then)"
8167                         dflt='.nonet'
8168                         ;;
8169                 esac
8170                 $rm -f hosts
8171                 ;;
8172         *) dflt="$mydomain";;
8173         esac;;
8174 esac
8175 echo " "
8176 rp="What is your domain name?"
8177 . ./myread
8178 tans="$ans"
8179 case "$ans" in
8180 '') ;;
8181 .*) ;;
8182 *) tans=".$tans";;
8183 esac
8184 mydomain="$tans"
8185
8186 : translate upper to lower if necessary
8187 case "$mydomain" in
8188 *[A-Z]*)
8189         echo "(Normalizing case in your domain name)"
8190         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8191         ;;
8192 esac
8193
8194 : a little sanity check here
8195 case "$phostname" in
8196 '') ;;
8197 *)
8198         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8199         $myhostname$mydomain|$myhostname) ;;
8200         *)
8201                 case "$phostname" in
8202                 sed*)
8203                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8204                         ;;
8205                 *)
8206                         echo "(That doesn't agree with your $phostname command, by the way.)"
8207                         ;;
8208                 esac
8209         ;;
8210         esac
8211         ;;
8212 esac
8213
8214 $cat <<EOM
8215
8216 I need to get your e-mail address in Internet format if possible, i.e.
8217 something like user@host.domain. Please answer accurately since I have
8218 no easy means to double check it. The default value provided below
8219 is most probably close to reality but may not be valid from outside
8220 your organization...
8221
8222 EOM
8223 cont=x
8224 while test "$cont"; do
8225         case "$cf_email" in
8226         '') dflt="$cf_by@$myhostname$mydomain";;
8227         *) dflt="$cf_email";;
8228         esac
8229         rp='What is your e-mail address?'
8230         . ./myread
8231         cf_email="$ans"
8232         case "$cf_email" in
8233         *@*.*) cont='' ;;
8234         *)
8235                 rp='Address does not look like an Internet one.  Use it anyway?'
8236                 case "$fastread" in
8237                 yes) dflt=y ;;
8238                 *) dflt=n ;;
8239                 esac
8240                 . ./myread
8241                 case "$ans" in
8242                 y*) cont='' ;;
8243                 *) echo " " ;;
8244                 esac
8245                 ;;
8246         esac
8247 done
8248
8249 $cat <<EOM
8250
8251 If you or somebody else will be maintaining perl at your site, please
8252 fill in the correct e-mail address here so that they may be contacted
8253 if necessary. Currently, the "perlbug" program included with perl
8254 will send mail to this address in addition to perlbug@perl.org. You may
8255 enter "none" for no administrator.
8256
8257 EOM
8258 case "$perladmin" in
8259 '') dflt="$cf_email";;
8260 *) dflt="$perladmin";;
8261 esac
8262 rp='Perl administrator e-mail address'
8263 . ./myread
8264 perladmin="$ans"
8265
8266 : determine whether to only install version-specific parts.
8267 echo " "
8268 $cat <<EOM
8269 Do you want to install only the version-specific parts of the perl
8270 distribution?  Usually you do *not* want to do this.
8271 EOM
8272 case "$versiononly" in
8273 "$define"|[Yy]*|true) dflt='y' ;;
8274 *) dflt='n';
8275 esac
8276 rp="Do you want to install only the version-specific parts of perl?"
8277 . ./myread
8278 case "$ans" in
8279 [yY]*)  val="$define";;
8280 *)      val="$undef" ;;
8281 esac
8282 set versiononly
8283 eval $setvar
8284
8285 : figure out how to guarantee perl startup
8286 case "$startperl" in
8287 '')
8288         case "$sharpbang" in
8289         *!)
8290                 $cat <<EOH
8291
8292 I can use the #! construct to start perl on your system. This will
8293 make startup of perl scripts faster, but may cause problems if you
8294 want to share those scripts and perl is not in a standard place
8295 ($binexp/perl) on all your platforms. The alternative is to force
8296 a shell by starting the script with a single ':' character.
8297
8298 EOH
8299                 case "$versiononly" in
8300                 "$define")      dflt="$binexp/perl$version";;  
8301                 *)              dflt="$binexp/perl";;
8302                 esac
8303                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8304                 . ./myread
8305                 case "$ans" in
8306                 none)   startperl=": # use perl";;
8307                 *)      startperl="#!$ans"
8308                         if $test 30 -lt `echo "$ans" | wc -c`; then
8309                                 $cat >&4 <<EOM
8310
8311 WARNING:  Some systems limit the #! command to 32 characters.
8312 If you experience difficulty running Perl scripts with #!, try
8313 installing Perl in a directory with a shorter pathname.
8314
8315 EOM
8316                         fi ;;
8317                 esac
8318                 ;;
8319         *) startperl=": # use perl"
8320                 ;;
8321         esac
8322         ;;
8323 esac
8324 echo "I'll use $startperl to start perl scripts."
8325
8326 : figure best path for perl in scripts
8327 case "$perlpath" in
8328 '')
8329         case "$versiononly" in
8330         "$define")      perlpath="$binexp/perl$version";;
8331         *)              perlpath="$binexp/perl";;
8332         esac
8333         case "$startperl" in
8334         *!*) ;;
8335         *)
8336                 $cat <<EOH
8337
8338 I will use the "eval 'exec'" idiom to start Perl on your system.
8339 I can use the full path of your Perl binary for this purpose, but
8340 doing so may cause problems if you want to share those scripts and
8341 Perl is not always in a standard place ($binexp/perl).
8342
8343 EOH
8344                 dflt="$binexp/perl"
8345                 rp="What path shall I use in \"eval 'exec'\"?"
8346                 . ./myread
8347                 perlpath="$ans"
8348                 ;;
8349         esac
8350         ;;
8351 esac
8352 case "$startperl" in
8353 *!*)    ;;
8354 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8355 esac
8356
8357 : determine where public executable scripts go
8358 set scriptdir scriptdir
8359 eval $prefixit
8360 case "$scriptdir" in
8361 '')
8362         dflt="$bin"
8363         : guess some guesses
8364         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8365         $test -d /usr/share/bin     && dflt=/usr/share/bin
8366         $test -d /usr/local/script  && dflt=/usr/local/script
8367         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8368         $test -d $prefixexp/script  && dflt=$prefixexp/script
8369         set dflt
8370         eval $prefixup
8371         ;;
8372 *)  dflt="$scriptdir"
8373         ;;
8374 esac
8375 $cat <<EOM
8376  
8377 Some installations have a separate directory just for executable scripts so
8378 that they can mount it across multiple architectures but keep the scripts in
8379 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8380 Or you might just lump your scripts in with all your other executables.
8381  
8382 EOM
8383 fn=d~
8384 rp='Where do you keep publicly executable scripts?'
8385 . ./getfile
8386 if $test "X$ansexp" != "X$scriptdirexp"; then
8387         installscript=''
8388 fi
8389 scriptdir="$ans"
8390 scriptdirexp="$ansexp"
8391 : Change installation prefix, if necessary.
8392 if $test X"$prefix" != X"$installprefix"; then
8393         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8394 else
8395         installscript="$scriptdirexp"
8396 fi
8397
8398 : determine where add-on public executables go
8399 case "$sitebin" in
8400 '')     dflt=$siteprefix/bin ;;
8401 *)      dflt=$sitebin ;;
8402 esac
8403 fn=d~
8404 rp='Pathname where the add-on public executables should be installed?'
8405 . ./getfile
8406 sitebin="$ans"
8407 sitebinexp="$ansexp"
8408 : Change installation prefix, if necessary.
8409 if $test X"$prefix" != X"$installprefix"; then
8410         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8411 else
8412         installsitebin="$sitebinexp"
8413 fi
8414
8415 : define an is-a-typedef? function
8416 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8417 case "$inclist" in
8418 "") inclist="sys/types.h";;
8419 esac;
8420 eval "varval=\$$var";
8421 case "$varval" in
8422 "")
8423         $rm -f temp.c;
8424         for inc in $inclist; do
8425                 echo "#include <$inc>" >>temp.c;
8426         done;
8427         echo "#ifdef $type" >> temp.c;
8428         echo "printf(\"We have $type\");" >> temp.c;
8429         echo "#endif" >> temp.c;
8430         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8431         if $contains $type temp.E >/dev/null 2>&1; then
8432                 eval "$var=\$type";
8433         else
8434                 eval "$var=\$def";
8435         fi;
8436         $rm -f temp.?;;
8437 *) eval "$var=\$varval";;
8438 esac'
8439
8440 : define an is-a-typedef? function that prompts if the type is not available.
8441 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8442 case "$inclist" in
8443 "") inclist="sys/types.h";;
8444 esac;
8445 eval "varval=\$$var";
8446 case "$varval" in
8447 "")
8448         $rm -f temp.c;
8449         for inc in $inclist; do
8450                 echo "#include <$inc>" >>temp.c;
8451         done;
8452         echo "#ifdef $type" >> temp.c;
8453         echo "printf(\"We have $type\");" >> temp.c;
8454         echo "#endif" >> temp.c;
8455         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8456         echo " " ;
8457         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8458         if $contains $type temp.E >/dev/null 2>&1; then
8459                 echo "$type found." >&4;
8460                 eval "$var=\$type";
8461         else
8462                 echo "$type NOT found." >&4;
8463                 dflt="$def";
8464                 . ./myread ;
8465                 eval "$var=\$ans";
8466         fi;
8467         $rm -f temp.?;;
8468 *) eval "$var=\$varval";;
8469 esac'
8470
8471 : see what type lseek is declared as in the kernel
8472 rp="What is the type used for lseek's offset on this system?"
8473 set off_t lseektype long stdio.h sys/types.h
8474 eval $typedef_ask
8475
8476 echo " "
8477 echo "Checking to see how big your file offsets are..." >&4
8478 $cat >try.c <<EOCP
8479 #include <sys/types.h>
8480 #include <stdio.h>
8481 int main()
8482 {
8483     printf("%d\n", (int)sizeof($lseektype));
8484     return(0); 
8485 }
8486 EOCP
8487 set try
8488 if eval $compile_ok; then
8489         lseeksize=`$run ./try`
8490         echo "Your file offsets are $lseeksize bytes long."
8491 else
8492         dflt=$longsize
8493         echo " "
8494         echo "(I can't seem to compile the test program.  Guessing...)"
8495         rp="What is the size of your file offsets (in bytes)?"
8496         . ./myread
8497         lseeksize="$ans"
8498 fi
8499 $rm -f try.c try
8500
8501 : see what type file positions are declared as in the library
8502 rp="What is the type for file position used by fsetpos()?"
8503 set fpos_t fpostype long stdio.h sys/types.h
8504 eval $typedef_ask
8505
8506 echo " "
8507 case "$fpostype" in
8508 *_t) zzz="$fpostype"    ;;
8509 *)   zzz="fpos_t"       ;;
8510 esac
8511 echo "Checking the size of $zzz..." >&4 
8512 cat > try.c <<EOCP
8513 #include <sys/types.h>
8514 #include <stdio.h>
8515 int main() {
8516     printf("%d\n", (int)sizeof($fpostype));
8517     exit(0);
8518 }
8519 EOCP
8520 set try
8521 if eval $compile_ok; then
8522         yyy=`$run ./try`
8523         case "$yyy" in
8524         '')     fpossize=4
8525                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8526                 ;;
8527         *)      fpossize=$yyy
8528                 echo "Your $zzz is $fpossize bytes long."
8529                 ;;
8530         esac
8531 else
8532         dflt="$longsize"
8533         echo " " >&4
8534         echo "(I can't compile the test program.  Guessing...)" >&4
8535         rp="What is the size of your file positions (in bytes)?"
8536         . ./myread
8537         fpossize="$ans"
8538 fi
8539
8540
8541
8542 # Backward compatibility (uselfs is deprecated).
8543 case "$uselfs" in
8544 "$define"|true|[yY]*)
8545         cat <<EOM >&4
8546
8547 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8548 EOM
8549         uselargefiles="$define"
8550         ;;
8551 esac                          
8552
8553 case "$lseeksize:$fpossize" in
8554 8:8) cat <<EOM
8555
8556 You can have files larger than 2 gigabytes.
8557 EOM
8558    val="$define" ;;
8559 *)    case "$uselargefiles" in
8560    "$undef"|false|[nN]*) dflt='n' ;;
8561    *)   dflt='y' ;;
8562    esac
8563    cat <<EOM
8564
8565 Perl can be built to understand large files (files larger than 2 gigabytes)
8566 on some systems.  To do so, Configure can be run with -Duselargefiles.
8567
8568 If this doesn't make any sense to you, just accept the default '$dflt'.
8569 EOM
8570    rp='Try to understand large files, if available?'
8571    . ./myread
8572    case "$ans" in
8573    y|Y)         val="$define" ;;
8574    *)           val="$undef"  ;;
8575    esac
8576    ;;
8577 esac
8578 set uselargefiles
8579 eval $setvar
8580 case "$uselargefiles" in
8581 "$define")
8582 : Look for a hint-file generated 'call-back-unit'.  If the
8583 : user has specified that a large files perl is to be built,
8584 : we may need to set or change some other defaults.
8585         if $test -f uselargefiles.cbu; then
8586                 echo "Your platform has some specific hints for large file builds, using them..."
8587                 . ./uselargefiles.cbu
8588                 echo " "
8589                 echo "Rechecking to see how big your file offsets are..." >&4
8590                 $cat >try.c <<EOCP
8591 #include <sys/types.h>
8592 #include <stdio.h>
8593 int main()
8594 {
8595     printf("%d\n", (int)sizeof($lseektype));
8596     return(0); 
8597 }
8598 EOCP
8599                 set try
8600                 if eval $compile_ok; then
8601                         lseeksize=`$run ./try`
8602                         $echo "Your file offsets are now $lseeksize bytes long."
8603                 else
8604                         dflt="$lseeksize"
8605                         echo " "
8606                         echo "(I can't seem to compile the test program.  Guessing...)"
8607                         rp="What is the size of your file offsets (in bytes)?"
8608                         . ./myread
8609                         lseeksize="$ans"
8610                 fi
8611                 case "$fpostype" in
8612                 *_t) zzz="$fpostype"    ;;
8613                 *)   zzz="fpos_t"       ;;
8614                 esac
8615                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8616                 $cat > try.c <<EOCP
8617 #include <sys/types.h>
8618 #include <stdio.h>
8619 int main() {
8620     printf("%d\n", (int)sizeof($fpostype));
8621     exit(0);
8622 }
8623 EOCP
8624                 set try
8625                 if eval $compile_ok; then
8626                         yyy=`$run ./try`
8627                         dflt="$lseeksize"
8628                         case "$yyy" in
8629                         '')     echo " "
8630                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8631                                 ;;
8632                         *)      fpossize=$yyy
8633                                 echo " $fpossize bytes." >&4
8634                                 ;;
8635                         esac
8636                 else
8637                         dflt="$fpossize"
8638                         echo " "
8639                         echo "(I can't compile the test program.  Guessing...)" >&4
8640                         rp="What is the size of your file positions (in bytes)?"
8641                         . ./myread
8642                         fpossize="$ans"
8643                 fi
8644                 $rm -f try.c try
8645         fi
8646         ;;
8647 esac
8648
8649 case "$vendorprefix" in
8650 '')     d_vendorbin="$undef"
8651         vendorbin=''
8652         vendorbinexp=''
8653         ;;
8654 *)      d_vendorbin="$define"
8655         : determine where vendor-supplied executables go.
8656         case "$vendorbin" in
8657         '') dflt=$vendorprefix/bin ;;
8658         *)      dflt="$vendorbin" ;;
8659         esac
8660         fn=d~+
8661         rp='Pathname for the vendor-supplied executables directory?'
8662         . ./getfile
8663         vendorbin="$ans"
8664         vendorbinexp="$ansexp"
8665         ;;
8666 esac
8667 : Change installation prefix, if necessary.
8668 if $test X"$prefix" != X"$installprefix"; then
8669         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8670 else
8671         installvendorbin="$vendorbinexp"
8672 fi
8673
8674 : see if qgcvt exists
8675 set qgcvt d_qgcvt
8676 eval $inlibc
8677
8678 : Check how to convert floats to strings.
8679 echo " "
8680 echo "Checking for an efficient way to convert floats to strings."
8681 echo " " > try.c
8682 case "$uselongdouble" in
8683 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8684 esac
8685 case "$d_longdbl" in
8686 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8687 esac
8688 case "$d_PRIgldbl" in
8689 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8690 esac
8691 $cat >>try.c <<EOP
8692 #ifdef TRY_gconvert
8693 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8694 char *myname = "gconvert";
8695 #endif
8696 #ifdef TRY_gcvt
8697 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8698 char *myname = "gcvt";
8699 #endif
8700 #ifdef TRY_qgcvt
8701 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8702 char *myname = "qgcvt";
8703 #define DOUBLETYPE long double
8704 #endif
8705 #ifdef TRY_sprintf
8706 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8707 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8708 #else
8709 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8710 #endif
8711 char *myname = "sprintf";
8712 #endif
8713
8714 #ifndef DOUBLETYPE
8715 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8716 #define DOUBLETYPE long double
8717 #else
8718 #define DOUBLETYPE double
8719 #endif
8720 #endif
8721
8722 #include <stdio.h>
8723
8724 #define I_STDLIB $i_stdlib
8725 #ifdef I_STDLIB
8726 #include <stdlib.h>
8727 #endif
8728
8729 int
8730 checkit(expect, got)
8731 char *expect;
8732 char *got;
8733 {
8734     if (strcmp(expect, got)) {
8735                 printf("%s oddity:  Expected %s, got %s\n",
8736                         myname, expect, got);
8737                 exit(1);
8738         }
8739 }
8740
8741 int main()
8742
8743         char buf[64]; 
8744         buf[63] = '\0';
8745
8746         /* This must be 1st test on (which?) platform */
8747         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8748         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8749         checkit("0.1", buf);
8750
8751         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8752         checkit("1", buf);
8753
8754         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8755         checkit("1.1", buf);
8756
8757         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8758         checkit("1.01", buf);
8759
8760         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8761         checkit("1.001", buf);
8762
8763         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8764         checkit("1.0001", buf);
8765
8766         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8767         checkit("1.00001", buf);
8768
8769         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8770         checkit("1.000001", buf);
8771
8772         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8773         checkit("0", buf);
8774
8775         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8776         checkit("-1", buf);
8777
8778         /* Some Linux gcvt's give 1.e+5 here. */
8779         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8780         checkit("100000", buf);
8781         
8782         /* Some Linux gcvt's give -1.e+5 here. */
8783         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8784         checkit("-100000", buf);
8785
8786         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8787         checkit("123.456", buf);
8788
8789         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8790         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8791         if (strlen(buf) > 5)
8792             checkit("1e+030", buf); /* for Microsoft */
8793         else
8794             checkit("1e+30", buf);
8795
8796         exit(0);
8797 }
8798 EOP
8799 case "$d_Gconvert" in
8800 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8801 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8802 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8803 *) xxx_list='gconvert gcvt sprintf' ;;
8804 esac
8805
8806 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8807 "$define$define$define")
8808     # for long doubles prefer first qgcvt, then sprintf
8809     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8810     xxx_list="sprintf $xxx_list"
8811     case "$d_qgcvt" in
8812     "$define") xxx_list="qgcvt $xxx_list" ;;
8813     esac
8814     ;;
8815 esac
8816
8817 for xxx_convert in $xxx_list; do
8818         echo "Trying $xxx_convert..."
8819         $rm -f try try$_o
8820         set try -DTRY_$xxx_convert
8821         if eval $compile; then
8822                 echo "$xxx_convert() found." >&4
8823                 if $run ./try; then
8824                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8825                         break;
8826                 else
8827                         echo "...But $xxx_convert didn't work as I expected."
8828                 fi
8829         else
8830                 echo "$xxx_convert NOT found." >&4
8831         fi
8832 done
8833         
8834 case "$xxx_convert" in
8835 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8836 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8837 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8838 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8839    "$define$define$define")
8840       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8841    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8842    esac
8843    ;;  
8844 esac
8845
8846 : see if _fwalk exists
8847 set fwalk d__fwalk
8848 eval $inlibc
8849
8850 : Initialize h_fcntl
8851 h_fcntl=false
8852
8853 : Initialize h_sysfile
8854 h_sysfile=false
8855
8856 : access call always available on UNIX
8857 set access d_access
8858 eval $inlibc
8859
8860 : locate the flags for 'access()'
8861 case "$d_access" in
8862 "$define")
8863         echo " "
8864         $cat >access.c <<'EOCP'
8865 #include <sys/types.h>
8866 #ifdef I_FCNTL
8867 #include <fcntl.h>
8868 #endif
8869 #ifdef I_SYS_FILE
8870 #include <sys/file.h>
8871 #endif
8872 #ifdef I_UNISTD
8873 #include <unistd.h>
8874 #endif
8875 int main() {
8876         exit(R_OK);
8877 }
8878 EOCP
8879         : check sys/file.h first, no particular reason here
8880         if $test `./findhdr sys/file.h` && \
8881                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8882                 h_sysfile=true;
8883                 echo "<sys/file.h> defines the *_OK access constants." >&4
8884         elif $test `./findhdr fcntl.h` && \
8885                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8886                 h_fcntl=true;
8887                 echo "<fcntl.h> defines the *_OK access constants." >&4
8888         elif $test `./findhdr unistd.h` && \
8889                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8890                 echo "<unistd.h> defines the *_OK access constants." >&4
8891         else
8892                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8893         fi
8894         ;;
8895 esac
8896 $rm -f access*
8897
8898 : see if accessx exists
8899 set accessx d_accessx
8900 eval $inlibc
8901
8902 : see if alarm exists
8903 set alarm d_alarm
8904 eval $inlibc
8905
8906 : see if atolf exists
8907 set atolf d_atolf
8908 eval $inlibc
8909
8910 : see if atoll exists
8911 set atoll d_atoll
8912 eval $inlibc
8913
8914 : Look for GNU-cc style attribute checking
8915 echo " "
8916 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8917 $cat >attrib.c <<'EOCP'
8918 #include <stdio.h>
8919 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8920 EOCP
8921 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8922         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8923                 echo "Your C compiler doesn't fully support __attribute__."
8924                 val="$undef"
8925         else
8926                 echo "Your C compiler supports __attribute__."
8927                 val="$define"
8928         fi
8929 else
8930         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8931         val="$undef"
8932 fi
8933 set d_attribut
8934 eval $setvar
8935 $rm -f attrib*
8936
8937 : see if bcmp exists
8938 set bcmp d_bcmp
8939 eval $inlibc
8940
8941 : see if bcopy exists
8942 set bcopy d_bcopy
8943 eval $inlibc
8944
8945 : see if this is a unistd.h system
8946 set unistd.h i_unistd
8947 eval $inhdr
8948
8949 : see if getpgrp exists
8950 set getpgrp d_getpgrp
8951 eval $inlibc
8952
8953 case "$d_getpgrp" in
8954 "$define")
8955         echo " "
8956         echo "Checking to see which flavor of getpgrp is in use..."
8957         $cat >try.c <<EOP
8958 #$i_unistd I_UNISTD
8959 #include <sys/types.h>
8960 #ifdef I_UNISTD
8961 #  include <unistd.h>
8962 #endif
8963 int main()
8964 {
8965         if (getuid() == 0) {
8966                 printf("(I see you are running Configure as super-user...)\n");
8967                 setuid(1);
8968         }
8969 #ifdef TRY_BSD_PGRP
8970         if (getpgrp(1) == 0)
8971                 exit(0);
8972 #else
8973         if (getpgrp() > 0)
8974                 exit(0);
8975 #endif
8976         exit(1);
8977 }
8978 EOP
8979         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8980                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8981                 val="$define"
8982         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8983                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8984                 val="$undef"
8985         else
8986                 echo "I can't seem to compile and run the test program."
8987                 if ./usg; then
8988                         xxx="a USG one, i.e. you use getpgrp()."
8989                 else
8990                         # SVR4 systems can appear rather BSD-ish.
8991                         case "$i_unistd" in
8992                         $undef)
8993                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8994                                 val="$define"
8995                                 ;;
8996                         $define)
8997                                 xxx="probably a USG one, i.e. you use getpgrp()."
8998                                 val="$undef"
8999                                 ;;
9000                         esac
9001                 fi
9002                 echo "Assuming your getpgrp is $xxx" >&4
9003         fi
9004         ;;
9005 *) val="$undef";;
9006 esac
9007 set d_bsdgetpgrp
9008 eval $setvar
9009 $rm -f try try.*
9010
9011 : see if setpgrp exists
9012 set setpgrp d_setpgrp
9013 eval $inlibc
9014
9015 case "$d_setpgrp" in
9016 "$define")
9017         echo " "
9018         echo "Checking to see which flavor of setpgrp is in use..."
9019         $cat >try.c <<EOP
9020 #$i_unistd I_UNISTD
9021 #include <sys/types.h>
9022 #ifdef I_UNISTD
9023 #  include <unistd.h>
9024 #endif
9025 int main()
9026 {
9027         if (getuid() == 0) {
9028                 printf("(I see you are running Configure as super-user...)\n");
9029                 setuid(1);
9030         }
9031 #ifdef TRY_BSD_PGRP
9032         if (-1 == setpgrp(1, 1))
9033                 exit(0);
9034 #else
9035         if (setpgrp() != -1)
9036                 exit(0);
9037 #endif
9038         exit(1);
9039 }
9040 EOP
9041         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9042                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9043                 val="$define"
9044         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9045                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9046                 val="$undef"
9047         else
9048                 echo "(I can't seem to compile and run the test program.)"
9049                 if ./usg; then
9050                         xxx="a USG one, i.e. you use setpgrp()."
9051                 else
9052                         # SVR4 systems can appear rather BSD-ish.
9053                         case "$i_unistd" in
9054                         $undef)
9055                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9056                                 val="$define"
9057                                 ;;
9058                         $define)
9059                                 xxx="probably a USG one, i.e. you use setpgrp()."
9060                                 val="$undef"
9061                                 ;;
9062                         esac
9063                 fi
9064                 echo "Assuming your setpgrp is $xxx" >&4
9065         fi
9066         ;;
9067 *) val="$undef";;
9068 esac
9069 set d_bsdsetpgrp
9070 eval $setvar
9071 $rm -f try try.*
9072 : see if bzero exists
9073 set bzero d_bzero
9074 eval $inlibc
9075
9076 : see if signal is declared as pointer to function returning int or void
9077 echo " "
9078 xxx=`./findhdr signal.h`
9079 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9080 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9081         echo "You have int (*signal())() instead of void." >&4
9082         val="$undef"
9083 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9084         echo "You have void (*signal())()." >&4
9085         val="$define"
9086 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9087         echo "You have int (*signal())() instead of void." >&4
9088         val="$undef"
9089 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9090         echo "You have void (*signal())()." >&4
9091         val="$define"
9092 else
9093         case "$d_voidsig" in
9094         '')
9095         echo "I can't determine whether signal handler returns void or int..." >&4
9096                 dflt=void
9097                 rp="What type does your signal handler return?"
9098                 . ./myread
9099                 case "$ans" in
9100                 v*) val="$define";;
9101                 *) val="$undef";;
9102                 esac;;
9103         "$define")
9104                 echo "As you already told me, signal handler returns void." >&4
9105                 val="$define"
9106                 ;;
9107         *)      echo "As you already told me, signal handler returns int." >&4
9108                 val="$undef"
9109                 ;;
9110         esac
9111 fi
9112 set d_voidsig
9113 eval $setvar
9114 case "$d_voidsig" in
9115 "$define") signal_t="void";;
9116 *) signal_t="int";;
9117 esac
9118 $rm -f $$.tmp
9119
9120 : check for ability to cast large floats to 32-bit ints.
9121 echo " "
9122 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9123 if $test "$intsize" -ge 4; then
9124         xxx=int
9125 else
9126         xxx=long
9127 fi
9128 $cat >try.c <<EOCP
9129 #include <stdio.h>
9130 #include <sys/types.h>
9131 #include <signal.h>
9132 $signal_t blech(s) int s; { exit(3); }
9133 int main()
9134 {
9135         $xxx i32;
9136         double f, g;
9137         int result = 0;
9138         char str[16];
9139         signal(SIGFPE, blech);
9140
9141         /* Don't let compiler optimize the test away.  Store the number 
9142            in a writable string for gcc to pass to sscanf under HP/UX.
9143         */
9144         sprintf(str, "2147483647");
9145         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9146         g = 10 * f;
9147         i32  = ($xxx) g;
9148
9149         /* x86 processors will probably give 0x8000 0000, which is a
9150        sign change.  We don't want that.  We want to mimic SPARC
9151            behavior here, which is to preserve the sign and give
9152            back 0x7fff ffff.
9153         */
9154         if (i32 != ($xxx) f)
9155                 result |= 1;
9156         exit(result);
9157 }
9158 EOCP
9159 set try
9160 if eval $compile_ok; then
9161         $run ./try
9162         yyy=$?
9163 else
9164         echo "(I can't seem to compile the test program--assuming it can't)"
9165         yyy=1
9166 fi
9167 case "$yyy" in
9168 0)      val="$define"
9169         echo "Yup, it can."
9170         ;;
9171 *)      val="$undef"
9172         echo "Nope, it can't."
9173         ;;
9174 esac
9175 set d_casti32
9176 eval $setvar
9177 $rm -f try try.*
9178
9179 : check for ability to cast negative floats to unsigned
9180 echo " "
9181 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9182 $cat >try.c <<EOCP
9183 #include <stdio.h>
9184 #include <sys/types.h>
9185 #include <signal.h>
9186 $signal_t blech(s) int s; { exit(7); }
9187 $signal_t blech_in_list(s) int s; { exit(4); }
9188 unsigned long dummy_long(p) unsigned long p; { return p; }
9189 unsigned int dummy_int(p) unsigned int p; { return p; }
9190 unsigned short dummy_short(p) unsigned short p; { return p; }
9191 int main()
9192 {
9193         double f;
9194         unsigned long along;
9195         unsigned int aint;
9196         unsigned short ashort;
9197         int result = 0;
9198         char str[16];
9199         
9200         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9201            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9202            optimized the whole file away
9203         */
9204         /* Store the number in a writable string for gcc to pass to 
9205            sscanf under HP/UX.
9206         */
9207         sprintf(str, "-123");
9208         sscanf(str, "%lf", &f);  /* f = -123.; */
9209
9210         signal(SIGFPE, blech);
9211         along = (unsigned long)f;
9212         aint = (unsigned int)f;
9213         ashort = (unsigned short)f;
9214         if (along != (unsigned long)-123)
9215                 result |= 1;
9216         if (aint != (unsigned int)-123)
9217                 result |= 1;
9218         if (ashort != (unsigned short)-123)
9219                 result |= 1;
9220         sprintf(str, "1073741824.");
9221         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9222         f = f + f;
9223         along = 0;
9224         along = (unsigned long)f;
9225         if (along != 0x80000000)
9226                 result |= 2;
9227         f -= 1.;
9228         along = 0;
9229         along = (unsigned long)f;
9230         if (along != 0x7fffffff)
9231                 result |= 1;
9232         f += 2.;
9233         along = 0;
9234         along = (unsigned long)f;
9235         if (along != 0x80000001)
9236                 result |= 2;
9237         if (result)
9238                 exit(result);
9239         signal(SIGFPE, blech_in_list);
9240         sprintf(str, "123.");
9241         sscanf(str, "%lf", &f);  /* f = 123.; */
9242         along = dummy_long((unsigned long)f);
9243         aint = dummy_int((unsigned int)f);
9244         ashort = dummy_short((unsigned short)f);
9245         if (along != (unsigned long)123)
9246                 result |= 4;
9247         if (aint != (unsigned int)123)
9248                 result |= 4;
9249         if (ashort != (unsigned short)123)
9250                 result |= 4;
9251         exit(result);
9252
9253 }
9254 EOCP
9255 set try
9256 if eval $compile_ok; then
9257         $run ./try
9258         castflags=$?
9259 else
9260         echo "(I can't seem to compile the test program--assuming it can't)"
9261         castflags=7
9262 fi
9263 case "$castflags" in
9264 0)      val="$define"
9265         echo "Yup, it can."
9266         ;;
9267 *)      val="$undef"
9268         echo "Nope, it can't."
9269         ;;
9270 esac
9271 set d_castneg
9272 eval $setvar
9273 $rm -f try.*
9274
9275 : see if vprintf exists
9276 echo " "
9277 if set vprintf val -f d_vprintf; eval $csym; $val; then
9278         echo 'vprintf() found.' >&4
9279         val="$define"
9280         $cat >try.c <<'EOF'
9281 #include <varargs.h>
9282
9283 int main() { xxx("foo"); }
9284
9285 xxx(va_alist)
9286 va_dcl
9287 {
9288         va_list args;
9289         char buf[10];
9290
9291         va_start(args);
9292         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9293 }
9294 EOF
9295         set try
9296         if eval $compile && $run ./try; then
9297                 echo "Your vsprintf() returns (int)." >&4
9298                 val2="$undef"
9299         else
9300                 echo "Your vsprintf() returns (char*)." >&4
9301                 val2="$define"
9302         fi
9303 else
9304         echo 'vprintf() NOT found.' >&4
9305                 val="$undef"
9306                 val2="$undef"
9307 fi
9308 $rm -f try try.*
9309 set d_vprintf
9310 eval $setvar
9311 val=$val2
9312 set d_charvspr
9313 eval $setvar
9314
9315 : see if chown exists
9316 set chown d_chown
9317 eval $inlibc
9318
9319 : see if chroot exists
9320 set chroot d_chroot
9321 eval $inlibc
9322
9323 : see if chsize exists
9324 set chsize d_chsize
9325 eval $inlibc
9326
9327 : see if class exists
9328 set class d_class
9329 eval $inlibc
9330
9331 hasstruct='varname=$1; struct=$2; shift; shift;
9332 while $test $# -ge 2; do
9333         case "$1" in
9334         $define) echo "#include <$2>";;
9335         esac ;
9336     shift 2;
9337 done > try.c;
9338 echo "int main () { struct $struct foo; }" >> try.c;
9339 set try;
9340 if eval $compile; then
9341         val="$define";
9342 else
9343         val="$undef";
9344 fi;
9345 set $varname;
9346 eval $setvar;
9347 $rm -f try.c try.o'
9348
9349 : see if sys/types.h has to be included
9350 set sys/types.h i_systypes
9351 eval $inhdr
9352
9353 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9354 while $test $# -ge 2; do
9355         case "$1" in
9356         $define) echo "#include <$2>";;
9357         esac ;
9358     shift 2;
9359 done > try.c;
9360 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9361 set try;
9362 if eval $compile; then
9363         val="$define";
9364 else
9365         val="$undef";
9366 fi;
9367 set $varname;
9368 eval $setvar;
9369 $rm -f try.c try.o'
9370
9371 socketlib=''
9372 sockethdr=''
9373 : see whether socket exists
9374 echo " "
9375 $echo $n "Hmm... $c" >&4
9376 if set socket val -f d_socket; eval $csym; $val; then
9377         echo "Looks like you have Berkeley networking support." >&4
9378         d_socket="$define"
9379         if set setsockopt val -f; eval $csym; $val; then
9380                 d_oldsock="$undef"
9381         else
9382                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9383                 d_oldsock="$define"
9384         fi
9385 else
9386         if $contains socklib libc.list >/dev/null 2>&1; then
9387                 echo "Looks like you have Berkeley networking support." >&4
9388                 d_socket="$define"
9389                 : we will have to assume that it supports the 4.2 BSD interface
9390                 d_oldsock="$undef"
9391         else
9392                 echo "You don't have Berkeley networking in libc$_a..." >&4
9393                 if test "X$d_socket" = "X$define"; then
9394                    echo "...but you seem to believe that you have sockets." >&4
9395                 else
9396                         for net in net socket
9397                         do
9398                                 if test -f /usr/lib/lib$net$_a; then
9399                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9400                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9401                                         if $contains socket libc.list >/dev/null 2>&1; then
9402                                                 d_socket="$define"
9403                                                 socketlib="-l$net"
9404                                                 case "$net" in
9405                                                 net)
9406                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9407                                                         sockethdr="-I/usr/netinclude"
9408                                                         ;;
9409                                                 esac
9410                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9411                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9412                                                         d_oldsock="$undef"
9413                                                 else
9414                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9415                                                         d_oldsock="$define"
9416                                                 fi
9417                                                 break
9418                                         fi
9419                                 fi
9420                         done
9421                         if test "X$d_socket" != "X$define"; then
9422                            echo "or anywhere else I see." >&4
9423                            d_socket="$undef"
9424                            d_oldsock="$undef"
9425                         fi
9426                 fi
9427         fi
9428 fi
9429
9430 : see if socketpair exists
9431 set socketpair d_sockpair
9432 eval $inlibc
9433
9434
9435 echo " "
9436 echo "Checking the availability of certain socket constants..." >&4
9437 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9438         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9439         $cat >try.c <<EOF
9440 #include <sys/types.h>
9441 #include <sys/socket.h>
9442 int main() {
9443     int i = $ENUM;
9444 }
9445 EOF
9446         val="$undef"
9447         set try; if eval $compile; then
9448                 val="$define"
9449         fi
9450         set d_${enum}; eval $setvar
9451         $rm -f try.c try
9452 done
9453
9454 : see if this is a sys/uio.h system
9455 set sys/uio.h i_sysuio
9456 eval $inhdr
9457
9458
9459 echo " "
9460 echo "Checking to see if your system supports struct cmsghdr..." >&4
9461 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9462 eval $hasstruct
9463 case "$d_cmsghdr_s" in
9464 "$define")      echo "Yes, it does."   ;;
9465 *)              echo "No, it doesn't." ;;
9466 esac
9467
9468
9469 : check for const keyword
9470 echo " "
9471 echo 'Checking to see if your C compiler knows about "const"...' >&4
9472 $cat >const.c <<'EOCP'
9473 typedef struct spug { int drokk; } spug;
9474 int main()
9475 {
9476         const char *foo;
9477         const spug y;
9478 }
9479 EOCP
9480 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9481         val="$define"
9482         echo "Yup, it does."
9483 else
9484         val="$undef"
9485         echo "Nope, it doesn't."
9486 fi
9487 set d_const
9488 eval $setvar
9489
9490 : see if crypt exists
9491 echo " "
9492 set crypt d_crypt
9493 eval $inlibc
9494 case "$d_crypt" in
9495 $define) cryptlib='' ;;
9496 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9497                 echo 'crypt() found.' >&4
9498                 val="$define"
9499                 cryptlib=''
9500         else
9501                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9502                 if $test -z "$cryptlib"; then
9503                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9504                 else
9505                         cryptlib=-lcrypt
9506                 fi
9507                 if $test -z "$cryptlib"; then
9508                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9509                 else
9510                         cryptlib=-lcrypt
9511                 fi
9512                 if $test -z "$cryptlib"; then
9513                         cryptlib=`./loc libcrypt$_a "" $libpth`
9514                 else
9515                         cryptlib=-lcrypt
9516                 fi
9517                 if $test -z "$cryptlib"; then
9518                         echo 'crypt() NOT found.' >&4
9519                         val="$undef"
9520                 else
9521                         val="$define"
9522                 fi
9523         fi
9524         set d_crypt
9525         eval $setvar
9526         ;;
9527 esac
9528
9529 : get csh whereabouts
9530 case "$csh" in
9531 'csh') val="$undef" ;;
9532 *) val="$define" ;;
9533 esac
9534 set d_csh
9535 eval $setvar
9536 : Respect a hint or command line value for full_csh.
9537 case "$full_csh" in
9538 '') full_csh=$csh ;;
9539 esac
9540
9541 : see if cuserid exists
9542 set cuserid d_cuserid
9543 eval $inlibc
9544
9545 : see if this is a limits.h system
9546 set limits.h i_limits
9547 eval $inhdr
9548
9549 : see if this is a float.h system
9550 set float.h i_float
9551 eval $inhdr
9552
9553 : See if number of significant digits in a double precision number is known
9554 echo " "
9555 $cat >dbl_dig.c <<EOM
9556 #$i_limits I_LIMITS
9557 #$i_float I_FLOAT
9558 #ifdef I_LIMITS
9559 #include <limits.h>
9560 #endif
9561 #ifdef I_FLOAT
9562 #include <float.h>
9563 #endif
9564 #ifdef DBL_DIG
9565 printf("Contains DBL_DIG");
9566 #endif
9567 EOM
9568 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9569 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9570         echo "DBL_DIG found." >&4
9571         val="$define"
9572 else
9573         echo "DBL_DIG NOT found." >&4
9574         val="$undef"
9575 fi
9576 $rm -f dbl_dig.?
9577 set d_dbl_dig
9578 eval $setvar
9579
9580 hasproto='varname=$1; func=$2; shift; shift;
9581 while $test $# -ge 2; do
9582         case "$1" in
9583         $define) echo "#include <$2>";;
9584         esac ;
9585     shift 2;
9586 done > try.c;
9587 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9588 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9589         echo "$func() prototype found.";
9590         val="$define";
9591 else
9592         echo "$func() prototype NOT found.";
9593         val="$undef";
9594 fi;
9595 set $varname;
9596 eval $setvar;
9597 $rm -f try.c tryout.c'
9598
9599 : see if dbm.h is available
9600 : see if dbmclose exists
9601 set dbmclose d_dbmclose
9602 eval $inlibc
9603
9604 case "$d_dbmclose" in
9605 $define)
9606         set dbm.h i_dbm
9607         eval $inhdr
9608         case "$i_dbm" in
9609         $define)
9610                 val="$undef"
9611                 set i_rpcsvcdbm
9612                 eval $setvar
9613                 ;;
9614         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9615                 eval $inhdr
9616                 ;;
9617         esac
9618         ;;
9619 *)      echo "We won't be including <dbm.h>"
9620         val="$undef"
9621         set i_dbm
9622         eval $setvar
9623         val="$undef"
9624         set i_rpcsvcdbm
9625         eval $setvar
9626         ;;
9627 esac
9628
9629 : see if prototype for dbminit is available
9630 echo " "
9631 set d_dbminitproto dbminit $i_dbm dbm.h
9632 eval $hasproto
9633
9634 : see if difftime exists
9635 set difftime d_difftime
9636 eval $inlibc
9637
9638 : see if this is a dirent system
9639 echo " "
9640 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9641         val="$define"
9642         echo "<dirent.h> found." >&4
9643 else
9644         val="$undef"
9645         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9646                 echo "<sys/dir.h> found." >&4
9647                 echo " "
9648         else
9649                 xinc=`./findhdr sys/ndir.h`
9650         fi
9651         echo "<dirent.h> NOT found." >&4
9652 fi
9653 set i_dirent
9654 eval $setvar
9655
9656 : Look for type of directory structure.
9657 echo " "
9658 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9659
9660 case "$direntrytype" in
9661 ''|' ')
9662         case "$i_dirent" in
9663         $define) guess1='struct dirent' ;;
9664         *) guess1='struct direct'  ;;
9665         esac
9666         ;;
9667 *)      guess1="$direntrytype"
9668         ;;
9669 esac
9670
9671 case "$guess1" in
9672 'struct dirent') guess2='struct direct' ;;
9673 *) guess2='struct dirent' ;;
9674 esac
9675                 
9676 if $contains "$guess1" try.c >/dev/null 2>&1; then
9677         direntrytype="$guess1"
9678         echo "Your directory entries are $direntrytype." >&4
9679 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9680         direntrytype="$guess2"
9681         echo "Your directory entries seem to be $direntrytype." >&4
9682 else
9683         echo "I don't recognize your system's directory entries." >&4
9684         rp="What type is used for directory entries on this system?"
9685         dflt="$guess1"
9686         . ./myread
9687         direntrytype="$ans"
9688 fi
9689 $rm -f try.c
9690
9691
9692 : see if the directory entry stores field length
9693 echo " "
9694 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9695 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9696         echo "Good, your directory entry keeps length information in d_namlen." >&4
9697         val="$define"
9698 else
9699         echo "Your directory entry does not know about the d_namlen field." >&4
9700         val="$undef"
9701 fi
9702 set d_dirnamlen
9703 eval $setvar
9704 $rm -f try.c
9705
9706 : see if this is an sysdir system
9707 set sys/dir.h i_sysdir
9708 eval $inhdr
9709
9710 : see if this is an sysndir system
9711 set sys/ndir.h i_sysndir
9712 eval $inhdr
9713
9714 : Look for dirfd
9715 echo " "
9716 $cat >dirfd.c <<EOM
9717 #include <stdio.h>
9718 #$i_dirent I_DIRENT             /**/
9719 #$i_sysdir I_SYS_DIR            /**/
9720 #$i_sysndir I_SYS_NDIR          /**/
9721 #$i_systypes I_SYS_TYPES        /**/
9722 #if defined(I_SYS_TYPES)
9723 #include <sys/types.h>
9724 #endif
9725 #if defined(I_DIRENT)
9726 #include <dirent.h>
9727 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9728 #include <sys/dir.h>
9729 #endif
9730 #else
9731 #ifdef I_SYS_NDIR
9732 #include <sys/ndir.h>
9733 #else
9734 #ifdef I_SYS_DIR
9735 #ifdef hp9000s500
9736 #include <ndir.h>       /* may be wrong in the future */
9737 #else
9738 #include <sys/dir.h>
9739 #endif
9740 #endif
9741 #endif
9742 #endif 
9743 int main() {
9744         DIR *dirp = opendir(".");
9745         if (dirfd(dirp) >= 0)
9746                 exit(0);
9747         else
9748                 exit(1);
9749 }
9750 EOM
9751 set dirfd
9752 if eval $compile; then
9753         val="$define"
9754 fi
9755 case "$val" in
9756 $define)        echo "dirfd() found." >&4       ;;
9757 *)              echo "dirfd() NOT found." >&4   ;;
9758 esac
9759 set d_dirfd
9760 eval $setvar
9761 $rm -f dirfd*
9762
9763 : see if dlerror exists
9764 xxx_runnm="$runnm"
9765 runnm=false
9766 set dlerror d_dlerror
9767 eval $inlibc
9768 runnm="$xxx_runnm"
9769
9770 : see if dlfcn is available
9771 set dlfcn.h i_dlfcn
9772 eval $inhdr
9773
9774 case "$usedl" in
9775 $define|y|true)
9776         $cat << EOM
9777
9778 On a few systems, the dynamically loaded modules that perl generates and uses
9779 will need a different extension than shared libs. The default will probably
9780 be appropriate.
9781
9782 EOM
9783         case "$dlext" in
9784         '')     dflt="$so" ;;
9785         *)      dflt="$dlext" ;;
9786         esac
9787         rp='What is the extension of dynamically loaded modules'
9788         . ./myread
9789         dlext="$ans"
9790         ;;
9791 *)
9792         dlext="none"
9793         ;;
9794 esac
9795
9796 : Check if dlsym need a leading underscore
9797 echo " "
9798 val="$undef"
9799
9800 case "$dlsrc" in
9801 dl_dlopen.xs)
9802         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9803         $cat >dyna.c <<'EOM'
9804 fred () { }
9805 EOM
9806
9807 $cat >fred.c<<EOM
9808
9809 #include <stdio.h>
9810 #$i_dlfcn I_DLFCN
9811 #ifdef I_DLFCN
9812 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9813 #else
9814 #include <sys/types.h>
9815 #include <nlist.h>
9816 #include <link.h>
9817 #endif
9818
9819 extern int fred() ;
9820
9821 int main()
9822 {
9823     void * handle ;
9824     void * symbol ;
9825 #ifndef RTLD_LAZY
9826     int mode = 1 ;
9827 #else
9828     int mode = RTLD_LAZY ;
9829 #endif
9830     handle = dlopen("./dyna.$dlext", mode) ;
9831     if (handle == NULL) {
9832         printf ("1\n") ;
9833         fflush (stdout) ;
9834         exit(0);
9835     }
9836     symbol = dlsym(handle, "fred") ;
9837     if (symbol == NULL) {
9838         /* try putting a leading underscore */
9839         symbol = dlsym(handle, "_fred") ;
9840         if (symbol == NULL) {
9841             printf ("2\n") ;
9842             fflush (stdout) ;
9843             exit(0);
9844         }
9845         printf ("3\n") ;
9846     }
9847     else
9848         printf ("4\n") ;
9849     fflush (stdout) ;
9850     exit(0);
9851 }
9852 EOM
9853         : Call the object file tmp-dyna.o in case dlext=o.
9854         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9855                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9856                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9857                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9858                 xxx=`$run ./fred`
9859                 case $xxx in
9860                 1)      echo "Test program failed using dlopen." >&4
9861                         echo "Perhaps you should not use dynamic loading." >&4;;
9862                 2)      echo "Test program failed using dlsym." >&4
9863                         echo "Perhaps you should not use dynamic loading." >&4;;
9864                 3)      echo "dlsym needs a leading underscore" >&4
9865                         val="$define" ;;
9866                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9867                 esac
9868         else
9869                 echo "I can't compile and run the test program." >&4
9870                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9871         fi
9872         ;;
9873 esac
9874                 
9875 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9876
9877 set d_dlsymun
9878 eval $setvar
9879
9880 : see if prototype for drand48 is available
9881 echo " "
9882 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9883 eval $hasproto
9884
9885 : see if dup2 exists
9886 set dup2 d_dup2
9887 eval $inlibc
9888
9889 : see if eaccess exists
9890 set eaccess d_eaccess
9891 eval $inlibc
9892
9893 : see if endgrent exists
9894 set endgrent d_endgrent
9895 eval $inlibc
9896
9897 : see if endhostent exists
9898 set endhostent d_endhent
9899 eval $inlibc
9900
9901 : see if endnetent exists
9902 set endnetent d_endnent
9903 eval $inlibc
9904
9905 : see if endprotoent exists
9906 set endprotoent d_endpent
9907 eval $inlibc
9908
9909 : see if endpwent exists
9910 set endpwent d_endpwent
9911 eval $inlibc
9912
9913 : see if endservent exists
9914 set endservent d_endsent
9915 eval $inlibc
9916
9917 : Locate the flags for 'open()'
9918 echo " "
9919 $cat >try.c <<'EOCP'
9920 #include <sys/types.h>
9921 #ifdef I_FCNTL
9922 #include <fcntl.h>
9923 #endif
9924 #ifdef I_SYS_FILE
9925 #include <sys/file.h>
9926 #endif
9927 int main() {
9928         if(O_RDONLY);
9929 #ifdef O_TRUNC
9930         exit(0);
9931 #else
9932         exit(1);
9933 #endif
9934 }
9935 EOCP
9936 : check sys/file.h first to get FREAD on Sun
9937 if $test `./findhdr sys/file.h` && \
9938                 set try -DI_SYS_FILE && eval $compile; then
9939         h_sysfile=true;
9940         echo "<sys/file.h> defines the O_* constants..." >&4
9941         if $run ./try; then
9942                 echo "and you have the 3 argument form of open()." >&4
9943                 val="$define"
9944         else
9945                 echo "but not the 3 argument form of open().  Oh, well." >&4
9946                 val="$undef"
9947         fi
9948 elif $test `./findhdr fcntl.h` && \
9949                 set try -DI_FCNTL && eval $compile; then
9950         h_fcntl=true;
9951         echo "<fcntl.h> defines the O_* constants..." >&4
9952         if $run ./try; then
9953                 echo "and you have the 3 argument form of open()." >&4
9954                 val="$define"
9955         else
9956                 echo "but not the 3 argument form of open().  Oh, well." >&4
9957                 val="$undef"
9958         fi
9959 else
9960         val="$undef"
9961         echo "I can't find the O_* constant definitions!  You got problems." >&4
9962 fi
9963 set d_open3
9964 eval $setvar
9965 $rm -f try try.*
9966
9967 : see which of string.h or strings.h is needed
9968 echo " "
9969 strings=`./findhdr string.h`
9970 if $test "$strings" && $test -r "$strings"; then
9971         echo "Using <string.h> instead of <strings.h>." >&4
9972         val="$define"
9973 else
9974         val="$undef"
9975         strings=`./findhdr strings.h`
9976         if $test "$strings" && $test -r "$strings"; then
9977                 echo "Using <strings.h> instead of <string.h>." >&4
9978         else
9979                 echo "No string header found -- You'll surely have problems." >&4
9980         fi
9981 fi
9982 set i_string
9983 eval $setvar
9984 case "$i_string" in
9985 "$undef") strings=`./findhdr strings.h`;;
9986 *)        strings=`./findhdr string.h`;;
9987 esac
9988
9989 : see if this is a sys/file.h system
9990 val=''
9991 set sys/file.h val
9992 eval $inhdr
9993
9994 : do we need to include sys/file.h ?
9995 case "$val" in
9996 "$define")
9997         echo " "
9998         if $h_sysfile; then
9999                 val="$define"
10000                 echo "We'll be including <sys/file.h>." >&4
10001         else
10002                 val="$undef"
10003                 echo "We won't be including <sys/file.h>." >&4
10004         fi
10005         ;;
10006 *)
10007         h_sysfile=false
10008         ;;
10009 esac
10010 set i_sysfile
10011 eval $setvar
10012
10013 : see if fcntl.h is there
10014 val=''
10015 set fcntl.h val
10016 eval $inhdr
10017
10018 : see if we can include fcntl.h
10019 case "$val" in
10020 "$define")
10021         echo " "
10022         if $h_fcntl; then
10023                 val="$define"
10024                 echo "We'll be including <fcntl.h>." >&4
10025         else
10026                 val="$undef"
10027                 if $h_sysfile; then
10028         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
10029                 else
10030                         echo "We won't be including <fcntl.h>." >&4
10031                 fi
10032         fi
10033         ;;
10034 *)
10035         h_fcntl=false
10036         val="$undef"
10037         ;;
10038 esac
10039 set i_fcntl
10040 eval $setvar
10041
10042 : check for non-blocking I/O stuff
10043 case "$h_sysfile" in
10044 true) echo "#include <sys/file.h>" > head.c;;
10045 *)
10046        case "$h_fcntl" in
10047        true) echo "#include <fcntl.h>" > head.c;;
10048        *) echo "#include <sys/fcntl.h>" > head.c;;
10049        esac
10050        ;;
10051 esac
10052 echo " "
10053 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10054 case "$o_nonblock" in
10055 '')
10056         $cat head.c > try.c
10057         $cat >>try.c <<EOCP
10058 #include <stdio.h>
10059 #include <stdlib.h>
10060 #$i_fcntl I_FCNTL
10061 #ifdef I_FCNTL
10062 #include <fcntl.h>
10063 #endif
10064 int main() {
10065 #ifdef O_NONBLOCK
10066         printf("O_NONBLOCK\n");
10067         exit(0);
10068 #endif
10069 #ifdef O_NDELAY
10070         printf("O_NDELAY\n");
10071         exit(0);
10072 #endif
10073 #ifdef FNDELAY
10074         printf("FNDELAY\n");
10075         exit(0);
10076 #endif
10077         exit(0);
10078 }
10079 EOCP
10080         set try
10081         if eval $compile_ok; then
10082                 o_nonblock=`$run ./try`
10083                 case "$o_nonblock" in
10084                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10085                 *) echo "Seems like we can use $o_nonblock.";;
10086                 esac
10087         else
10088                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10089         fi
10090         ;;
10091 *) echo "Using $hint value $o_nonblock.";;
10092 esac
10093 $rm -f try try.* .out core
10094
10095 echo " "
10096 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10097 case "$eagain" in
10098 '')
10099         $cat head.c > try.c
10100         $cat >>try.c <<EOCP
10101 #include <errno.h>
10102 #include <sys/types.h>
10103 #include <signal.h>
10104 #include <stdio.h> 
10105 #include <stdlib.h> 
10106 #$i_fcntl I_FCNTL
10107 #ifdef I_FCNTL
10108 #include <fcntl.h>
10109 #endif
10110 #define MY_O_NONBLOCK $o_nonblock
10111 #ifndef errno  /* XXX need better Configure test */
10112 extern int errno;
10113 #endif
10114 #$i_unistd I_UNISTD
10115 #ifdef I_UNISTD
10116 #include <unistd.h>
10117 #endif
10118 #$i_string I_STRING
10119 #ifdef I_STRING
10120 #include <string.h>
10121 #else
10122 #include <strings.h>
10123 #endif
10124 $signal_t blech(x) int x; { exit(3); }
10125 EOCP
10126         $cat >> try.c <<'EOCP'
10127 int main()
10128 {
10129         int pd[2];
10130         int pu[2];
10131         char buf[1];
10132         char string[100];
10133
10134         pipe(pd);       /* Down: child -> parent */
10135         pipe(pu);       /* Up: parent -> child */
10136         if (0 != fork()) {
10137                 int ret;
10138                 close(pd[1]);   /* Parent reads from pd[0] */
10139                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10140 #ifdef F_SETFL
10141                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10142                         exit(1);
10143 #else
10144                 exit(4);
10145 #endif
10146                 signal(SIGALRM, blech);
10147                 alarm(5);
10148                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10149                         exit(2);
10150                 sprintf(string, "%d\n", ret);
10151                 write(2, string, strlen(string));
10152                 alarm(0);
10153 #ifdef EAGAIN
10154                 if (errno == EAGAIN) {
10155                         printf("EAGAIN\n");
10156                         goto ok;
10157                 }
10158 #endif
10159 #ifdef EWOULDBLOCK
10160                 if (errno == EWOULDBLOCK)
10161                         printf("EWOULDBLOCK\n");
10162 #endif
10163         ok:
10164                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10165                 sleep(2);                               /* Give it time to close our pipe */
10166                 alarm(5);
10167                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10168                 alarm(0);
10169                 sprintf(string, "%d\n", ret);
10170                 write(4, string, strlen(string));
10171                 exit(0);
10172         }
10173
10174         close(pd[0]);                   /* We write to pd[1] */
10175         close(pu[1]);                   /* We read from pu[0] */
10176         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10177         close(pd[1]);                   /* Pipe pd is now fully closed! */
10178         exit(0);                                /* Bye bye, thank you for playing! */
10179 }
10180 EOCP
10181         set try
10182         if eval $compile_ok; then
10183                 echo "$startsh" >mtry
10184                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10185                 chmod +x mtry
10186                 ./mtry >/dev/null 2>&1
10187                 case $? in
10188                 0) eagain=`$cat try.out`;;
10189                 1) echo "Could not perform non-blocking setting!";;
10190                 2) echo "I did a successful read() for something that was not there!";;
10191                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10192                 4) echo "Could not find F_SETFL!";;
10193                 *) echo "Something terribly wrong happened during testing.";;
10194                 esac
10195                 rd_nodata=`$cat try.ret`
10196                 echo "A read() system call with no data present returns $rd_nodata."
10197                 case "$rd_nodata" in
10198                 0|-1) ;;
10199                 *)
10200                         echo "(That's peculiar, fixing that to be -1.)"
10201                         rd_nodata=-1
10202                         ;;
10203                 esac
10204                 case "$eagain" in
10205                 '')
10206                         echo "Forcing errno EAGAIN on read() with no data available."
10207                         eagain=EAGAIN
10208                         ;;
10209                 *)
10210                         echo "Your read() sets errno to $eagain when no data is available."
10211                         ;;
10212                 esac
10213                 status=`$cat try.err`
10214                 case "$status" in
10215                 0) echo "And it correctly returns 0 to signal EOF.";;
10216                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10217                 *) echo "However, your read() returns '$status' on EOF??";;
10218                 esac
10219                 val="$define"
10220                 if test "$status" = "$rd_nodata"; then
10221                         echo "WARNING: you can't distinguish between EOF and no data!"
10222                         val="$undef"
10223                 fi
10224         else
10225                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10226                 eagain=EAGAIN
10227         fi
10228         set d_eofnblk
10229         eval $setvar
10230         ;;
10231 *)
10232         echo "Using $hint value $eagain."
10233         echo "Your read() returns $rd_nodata when no data is present."
10234         case "$d_eofnblk" in
10235         "$define") echo "And you can see EOF because read() returns 0.";;
10236         "$undef") echo "But you can't see EOF status from read() returned value.";;
10237         *)
10238                 echo "(Assuming you can't see EOF status from read anyway.)"
10239                 d_eofnblk=$undef
10240                 ;;
10241         esac
10242         ;;
10243 esac
10244 $rm -f try try.* .out core head.c mtry
10245
10246 : see if fchdir exists
10247 set fchdir d_fchdir
10248 eval $inlibc
10249
10250 : see if fchmod exists
10251 set fchmod d_fchmod
10252 eval $inlibc
10253
10254 : see if fchown exists
10255 set fchown d_fchown
10256 eval $inlibc
10257
10258 : see if this is an fcntl system
10259 set fcntl d_fcntl
10260 eval $inlibc
10261
10262 echo " "
10263 : See if fcntl-based locking works.
10264 $cat >try.c <<EOCP
10265 #include <stdlib.h>
10266 #include <unistd.h>
10267 #include <fcntl.h>
10268 #include <signal.h>
10269 $signal_t blech(x) int x; { exit(3); }
10270 int main() {
10271 #if defined(F_SETLK) && defined(F_SETLKW)
10272      struct flock flock;
10273      int retval, fd;
10274      fd = open("try.c", O_RDONLY);
10275      flock.l_type = F_RDLCK;
10276      flock.l_whence = SEEK_SET;
10277      flock.l_start = flock.l_len = 0;
10278      signal(SIGALRM, blech);
10279      alarm(10);
10280      retval = fcntl(fd, F_SETLK, &flock);
10281      close(fd);
10282      (retval < 0 ? exit(2) : exit(0));
10283 #else
10284      exit(2);
10285 #endif
10286 }
10287 EOCP
10288 echo "Checking if fcntl-based file locking works... "
10289 case "$d_fcntl" in
10290 "$define")
10291         set try
10292         if eval $compile_ok; then
10293                 if $run ./try; then
10294                         echo "Yes, it seems to work."
10295                         val="$define"
10296                 else
10297                         echo "Nope, it didn't work."
10298                         val="$undef"
10299                         case "$?" in
10300                         3) $cat >&4 <<EOM
10301 ***
10302 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10303 *** This is (almost) impossible.
10304 *** If your NFS lock daemons are not feeling well, something like
10305 *** this may happen, please investigate.  Cannot continue, aborting.
10306 ***
10307 EOM
10308                                 exit 1
10309                                 ;;
10310                         esac
10311                 fi
10312         else
10313                 echo "I'm unable to compile the test program, so I'll assume not."
10314                 val="$undef"
10315         fi
10316         ;;
10317 *) val="$undef";
10318         echo "Nope, since you don't even have fcntl()."
10319         ;;
10320 esac
10321 set d_fcntl_can_lock
10322 eval $setvar
10323 $rm -f try*
10324
10325
10326 : see if sys/select.h has to be included
10327 set sys/select.h i_sysselct
10328 eval $inhdr
10329
10330 : see if we should include time.h, sys/time.h, or both
10331 echo " "
10332 if test "X$timeincl" = X; then
10333         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10334         $echo $n "I'm now running the test program...$c"
10335         $cat >try.c <<'EOCP'
10336 #include <sys/types.h>
10337 #ifdef I_TIME
10338 #include <time.h>
10339 #endif
10340 #ifdef I_SYSTIME
10341 #ifdef SYSTIMEKERNEL
10342 #define KERNEL
10343 #endif
10344 #include <sys/time.h>
10345 #endif
10346 #ifdef I_SYSSELECT
10347 #include <sys/select.h>
10348 #endif
10349 int main()
10350 {
10351         struct tm foo;
10352 #ifdef S_TIMEVAL
10353         struct timeval bar;
10354 #endif
10355 #ifdef S_TIMEZONE
10356         struct timezone tzp;
10357 #endif
10358         if (foo.tm_sec == foo.tm_sec)
10359                 exit(0);
10360 #ifdef S_TIMEVAL
10361         if (bar.tv_sec == bar.tv_sec)
10362                 exit(0);
10363 #endif
10364         exit(1);
10365 }
10366 EOCP
10367         flags=''
10368         for s_timezone in '-DS_TIMEZONE' ''; do
10369         sysselect=''
10370         for s_timeval in '-DS_TIMEVAL' ''; do
10371         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10372         for i_time in '' '-DI_TIME'; do
10373         for i_systime in '-DI_SYSTIME' ''; do
10374                 case "$flags" in
10375                 '') $echo $n ".$c"
10376                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10377                         if eval $compile; then
10378                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10379                                 shift
10380                                 flags="$*"
10381                                 echo " "
10382                                 $echo $n "Succeeded with $flags$c"
10383                         fi
10384                         ;;
10385                 esac
10386         done
10387         done
10388         done
10389         done
10390         done
10391         timeincl=''
10392         echo " "
10393         case "$flags" in
10394         *SYSTIMEKERNEL*) i_systimek="$define"
10395                 timeincl=`./findhdr sys/time.h`
10396                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10397         *) i_systimek="$undef";;
10398         esac
10399         case "$flags" in
10400         *I_TIME*) i_time="$define"
10401                 timeincl=`./findhdr time.h`" $timeincl"
10402                 echo "We'll include <time.h>." >&4;;
10403         *) i_time="$undef";;
10404         esac
10405         case "$flags" in
10406         *I_SYSTIME*) i_systime="$define"
10407                 timeincl=`./findhdr sys/time.h`" $timeincl"
10408                 echo "We'll include <sys/time.h>." >&4;;
10409         *) i_systime="$undef";;
10410         esac
10411         $rm -f try.c try
10412 fi
10413
10414 : check for fd_set items
10415 $cat <<EOM
10416
10417 Checking to see how well your C compiler handles fd_set and friends ...
10418 EOM
10419 $cat >try.c <<EOCP
10420 #$i_systime I_SYS_TIME
10421 #$i_sysselct I_SYS_SELECT
10422 #$d_socket HAS_SOCKET
10423 #include <sys/types.h>
10424 #ifdef HAS_SOCKET
10425 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10426 #endif
10427 #ifdef I_SYS_TIME
10428 #include <sys/time.h>
10429 #endif
10430 #ifdef I_SYS_SELECT
10431 #include <sys/select.h>
10432 #endif
10433 int main() {
10434         fd_set fds;
10435
10436 #ifdef TRYBITS
10437         if(fds.fds_bits);
10438 #endif
10439
10440 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10441         exit(0);
10442 #else
10443         exit(1);
10444 #endif
10445 }
10446 EOCP
10447 set try -DTRYBITS
10448 if eval $compile; then
10449         d_fds_bits="$define"
10450         d_fd_set="$define"
10451         echo "Well, your system knows about the normal fd_set typedef..." >&4
10452         if $run ./try; then
10453                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10454                 d_fd_macros="$define"
10455         else
10456                 $cat >&4 <<'EOM'
10457 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10458 EOM
10459                 d_fd_macros="$undef"
10460         fi
10461 else
10462         $cat <<'EOM'
10463 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10464 EOM
10465         set try
10466         if eval $compile; then
10467                 d_fds_bits="$undef"
10468                 d_fd_set="$define"
10469                 echo "Well, your system has some sort of fd_set available..." >&4
10470                 if $run ./try; then
10471                         echo "and you have the normal fd_set macros." >&4
10472                         d_fd_macros="$define"
10473                 else
10474                         $cat <<'EOM'
10475 but not the normal fd_set macros!  Gross!  More work for me...
10476 EOM
10477                         d_fd_macros="$undef"
10478                 fi
10479         else
10480         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10481                 d_fd_set="$undef"
10482                 d_fds_bits="$undef"
10483                 d_fd_macros="$undef"
10484         fi
10485 fi
10486 $rm -f try try.*
10487
10488 : see if fgetpos exists
10489 set fgetpos d_fgetpos
10490 eval $inlibc
10491
10492 : see if finite exists
10493 set finite d_finite
10494 eval $inlibc
10495
10496 : see if finitel exists
10497 set finitel d_finitel
10498 eval $inlibc
10499
10500 : see if flock exists
10501 set flock d_flock
10502 eval $inlibc
10503
10504 : see if prototype for flock is available
10505 echo " "
10506 set d_flockproto flock $i_sysfile sys/file.h
10507 eval $hasproto
10508
10509 : see if fork exists
10510 set fork d_fork
10511 eval $inlibc
10512
10513 : see if fp_class exists
10514 set fp_class d_fp_class
10515 eval $inlibc
10516
10517 : see if pathconf exists
10518 set pathconf d_pathconf
10519 eval $inlibc
10520
10521 : see if fpathconf exists
10522 set fpathconf d_fpathconf
10523 eval $inlibc
10524
10525 : see if fpclass exists
10526 set fpclass d_fpclass
10527 eval $inlibc
10528
10529 : see if fpclassify exists
10530 set fpclassify d_fpclassify
10531 eval $inlibc
10532
10533 : see if fpclassl exists
10534 set fpclassl d_fpclassl
10535 eval $inlibc
10536
10537
10538 : check for fpos64_t
10539 echo " "
10540 echo "Checking to see if you have fpos64_t..." >&4
10541 $cat >try.c <<EOCP
10542 #include <stdio.h>
10543 int main() { fpos64_t x = 7; }
10544 EOCP
10545 set try
10546 if eval $compile; then
10547         val="$define"
10548         echo "You have fpos64_t."
10549 else
10550         val="$undef"
10551         echo "You do not have fpos64_t."
10552         case "$fpossize" in
10553         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10554         esac
10555 fi
10556 $rm -f try.* try
10557 set d_fpos64_t
10558 eval $setvar
10559
10560 : see if frexpl exists
10561 set frexpl d_frexpl
10562 eval $inlibc
10563
10564 : see if this is a sys/param system
10565 set sys/param.h i_sysparam
10566 eval $inhdr
10567
10568 : see if this is a sys/mount.h system
10569 set sys/mount.h i_sysmount
10570 eval $inhdr
10571
10572
10573 echo " "
10574 echo "Checking to see if your system supports struct fs_data..." >&4
10575 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10576 eval $hasstruct
10577 case "$d_fs_data_s" in
10578 "$define")      echo "Yes, it does."   ;;
10579 *)              echo "No, it doesn't." ;;
10580 esac
10581
10582 : see if fseeko exists
10583 set fseeko d_fseeko
10584 eval $inlibc
10585 case "$longsize" in
10586 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10587 esac
10588
10589 : see if fsetpos exists
10590 set fsetpos d_fsetpos
10591 eval $inlibc
10592
10593
10594 : see if fstatfs exists
10595 set fstatfs d_fstatfs
10596 eval $inlibc
10597
10598
10599 : see if statvfs exists
10600 set statvfs d_statvfs
10601 eval $inlibc
10602
10603 : see if fstatvfs exists
10604 set fstatvfs d_fstatvfs
10605 eval $inlibc
10606
10607
10608 : see if fsync exists
10609 set fsync d_fsync
10610 eval $inlibc
10611
10612 : see if ftello exists
10613 set ftello d_ftello
10614 eval $inlibc
10615 case "$longsize" in
10616 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10617 esac
10618
10619 : see if getcwd exists
10620 set getcwd d_getcwd
10621 eval $inlibc
10622
10623 : see if getespwnam exists
10624 set getespwnam d_getespwnam
10625 eval $inlibc
10626
10627
10628 : see if getfsstat exists
10629 set getfsstat d_getfsstat
10630 eval $inlibc
10631
10632 : see if getgrent exists
10633 set getgrent d_getgrent
10634 eval $inlibc
10635
10636 : see if gethostbyaddr exists
10637 set gethostbyaddr d_gethbyaddr
10638 eval $inlibc
10639
10640 : see if gethostbyname exists
10641 set gethostbyname d_gethbyname
10642 eval $inlibc
10643
10644 : see if gethostent exists
10645 set gethostent d_gethent
10646 eval $inlibc
10647
10648 : see how we will look up host name
10649 echo " "
10650 call=''
10651 if set gethostname val -f d_gethname; eval $csym; $val; then
10652         echo 'gethostname() found.' >&4
10653         d_gethname="$define"
10654         call=gethostname
10655 fi
10656 if set uname val -f d_uname; eval $csym; $val; then
10657         if ./xenix; then
10658                 $cat <<'EOM'
10659 uname() was found, but you're running xenix, and older versions of xenix
10660 have a broken uname(). If you don't really know whether your xenix is old
10661 enough to have a broken system call, use the default answer.
10662
10663 EOM
10664                 dflt=y
10665                 case "$d_uname" in
10666                 "$define") dflt=n;;
10667                 esac
10668                 rp='Is your uname() broken?'
10669                 . ./myread
10670                 case "$ans" in
10671                 n*) d_uname="$define"; call=uname;;
10672                 esac
10673         else
10674                 echo 'uname() found.' >&4
10675                 d_uname="$define"
10676                 case "$call" in
10677                 '') call=uname ;;
10678                 esac
10679         fi
10680 fi
10681 case "$d_gethname" in
10682 '') d_gethname="$undef";;
10683 esac
10684 case "$d_uname" in
10685 '') d_uname="$undef";;
10686 esac
10687 case "$d_uname$d_gethname" in
10688 *define*)
10689         dflt=n
10690         cat <<EOM
10691  
10692 Every now and then someone has a $call() that lies about the hostname
10693 but can't be fixed for political or economic reasons.  If you wish, I can
10694 pretend $call() isn't there and maybe compute hostname at run-time
10695 thanks to the '$phostname' command.
10696
10697 EOM
10698         rp="Shall I ignore $call() from now on?"
10699         . ./myread
10700         case "$ans" in
10701         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10702         esac;;
10703 esac
10704 case "$phostname" in
10705 '') aphostname='';;
10706 *) case "$aphostname" in
10707         /*) ;;
10708         *) set X $phostname
10709                 shift
10710                 file=$1
10711                 shift
10712                 file=`./loc $file $file $pth`
10713                 aphostname=`echo $file $*`
10714                 ;;
10715         esac
10716         ;;
10717 esac
10718 case "$d_uname$d_gethname" in
10719 *define*) ;;
10720 *)
10721         case "$phostname" in
10722         '')
10723                 echo "There will be no way for $package to get your hostname." >&4;;
10724         *)
10725         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10726                 ;;
10727         esac;;
10728 esac
10729 case "$d_phostname" in
10730 '') d_phostname="$undef";;
10731 esac
10732
10733 : see if this is a netdb.h system
10734 set netdb.h i_netdb
10735 eval $inhdr
10736
10737 : see if prototypes for various gethostxxx netdb.h functions are available
10738 echo " "
10739 set d_gethostprotos gethostent $i_netdb netdb.h
10740 eval $hasproto
10741
10742 : see if getitimer exists
10743 set getitimer d_getitimer
10744 eval $inlibc
10745
10746 : see if getlogin exists
10747 set getlogin d_getlogin
10748 eval $inlibc
10749
10750 : see if getmnt exists
10751 set getmnt d_getmnt
10752 eval $inlibc
10753
10754 : see if getmntent exists
10755 set getmntent d_getmntent
10756 eval $inlibc
10757
10758 : see if getnetbyaddr exists
10759 set getnetbyaddr d_getnbyaddr
10760 eval $inlibc
10761
10762 : see if getnetbyname exists
10763 set getnetbyname d_getnbyname
10764 eval $inlibc
10765
10766 : see if getnetent exists
10767 set getnetent d_getnent
10768 eval $inlibc
10769
10770 : see if prototypes for various getnetxxx netdb.h functions are available
10771 echo " "
10772 set d_getnetprotos getnetent $i_netdb netdb.h
10773 eval $hasproto
10774
10775 : see if getpagesize exists
10776 set getpagesize d_getpagsz
10777 eval $inlibc
10778
10779
10780 : see if getprotobyname exists
10781 set getprotobyname d_getpbyname
10782 eval $inlibc
10783
10784 : see if getprotobynumber exists
10785 set getprotobynumber d_getpbynumber
10786 eval $inlibc
10787
10788 : see if getprotoent exists
10789 set getprotoent d_getpent
10790 eval $inlibc
10791
10792 : see if getpgid exists
10793 set getpgid d_getpgid
10794 eval $inlibc
10795
10796 : see if getpgrp2 exists
10797 set getpgrp2 d_getpgrp2
10798 eval $inlibc
10799
10800 : see if getppid exists
10801 set getppid d_getppid
10802 eval $inlibc
10803
10804 : see if getpriority exists
10805 set getpriority d_getprior
10806 eval $inlibc
10807
10808 : see if prototypes for various getprotoxxx netdb.h functions are available
10809 echo " "
10810 set d_getprotoprotos getprotoent $i_netdb netdb.h
10811 eval $hasproto
10812
10813 : see if getprpwnam exists
10814 set getprpwnam d_getprpwnam
10815 eval $inlibc
10816
10817 : see if getpwent exists
10818 set getpwent d_getpwent
10819 eval $inlibc
10820
10821
10822 : see if getservbyname exists
10823 set getservbyname d_getsbyname
10824 eval $inlibc
10825
10826 : see if getservbyport exists
10827 set getservbyport d_getsbyport
10828 eval $inlibc
10829
10830 : see if getservent exists
10831 set getservent d_getsent
10832 eval $inlibc
10833
10834 : see if prototypes for various getservxxx netdb.h functions are available
10835 echo " "
10836 set d_getservprotos getservent $i_netdb netdb.h
10837 eval $hasproto
10838
10839 : see if getspnam exists
10840 set getspnam d_getspnam
10841 eval $inlibc
10842
10843 : see if gettimeofday or ftime exists
10844 set gettimeofday d_gettimeod
10845 eval $inlibc
10846 case "$d_gettimeod" in
10847 "$undef")
10848         set ftime d_ftime 
10849         eval $inlibc
10850         ;;
10851 *)
10852         val="$undef"; set d_ftime; eval $setvar
10853         ;;
10854 esac
10855 case "$d_gettimeod$d_ftime" in
10856 "$undef$undef")
10857         echo " "
10858         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10859         ;;
10860 esac
10861
10862 : see if this is an grp system
10863 set grp.h i_grp
10864 eval $inhdr
10865
10866 case "$i_grp" in
10867 $define)
10868         xxx=`./findhdr grp.h`
10869         $cppstdin $cppflags $cppminus < $xxx >$$.h
10870
10871         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10872                 val="$define"
10873         else
10874                 val="$undef"
10875         fi
10876         set d_grpasswd
10877         eval $setvar
10878
10879         $rm -f $$.h
10880         ;;
10881 *)
10882         val="$undef";
10883         set d_grpasswd; eval $setvar
10884         ;;
10885 esac
10886
10887 : see if hasmntopt exists
10888 set hasmntopt d_hasmntopt
10889 eval $inlibc
10890
10891 : see if this is a netinet/in.h or sys/in.h system
10892 set netinet/in.h i_niin sys/in.h i_sysin
10893 eval $inhdr
10894
10895 : see if arpa/inet.h has to be included
10896 set arpa/inet.h i_arpainet
10897 eval $inhdr
10898
10899 : see if htonl --and friends-- exists
10900 val=''
10901 set htonl val
10902 eval $inlibc
10903
10904 : Maybe they are macros.
10905 case "$val" in
10906 $undef)
10907         $cat >htonl.c <<EOM
10908 #include <stdio.h>
10909 #include <sys/types.h>
10910 #$i_niin I_NETINET_IN
10911 #$i_sysin I_SYS_IN
10912 #$i_arpainet I_ARPA_INET
10913 #ifdef I_NETINET_IN
10914 #include <netinet/in.h>
10915 #endif
10916 #ifdef I_SYS_IN
10917 #include <sys/in.h>
10918 #endif
10919 #ifdef I_ARPA_INET
10920 #include <arpa/inet.h>
10921 #endif
10922 #ifdef htonl
10923 printf("Defined as a macro.");
10924 #endif
10925 EOM
10926         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10927         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10928                 val="$define"
10929                 echo "But it seems to be defined as a macro." >&4
10930         fi
10931         $rm -f htonl.?
10932         ;;
10933 esac
10934 set d_htonl
10935 eval $setvar
10936
10937 : index or strchr
10938 echo " "
10939 if set index val -f; eval $csym; $val; then
10940         if set strchr val -f d_strchr; eval $csym; $val; then
10941                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10942                         val="$define"
10943                         vali="$undef"
10944                         echo "strchr() found." >&4
10945                 else
10946                         val="$undef"
10947                         vali="$define"
10948                         echo "index() found." >&4
10949                 fi
10950         else
10951                 val="$undef"
10952                 vali="$define"
10953                 echo "index() found." >&4
10954         fi
10955 else
10956         if set strchr val -f d_strchr; eval $csym; $val; then
10957                 val="$define"
10958                 vali="$undef"
10959                 echo "strchr() found." >&4
10960         else
10961                 echo "No index() or strchr() found!" >&4
10962                 val="$undef"
10963                 vali="$undef"
10964         fi
10965 fi
10966 set d_strchr; eval $setvar
10967 val="$vali"
10968 set d_index; eval $setvar
10969
10970 : check whether inet_aton exists
10971 set inet_aton d_inetaton
10972 eval $inlibc
10973
10974 : Look for isascii
10975 echo " "
10976 $cat >isascii.c <<'EOCP'
10977 #include <stdio.h>
10978 #include <ctype.h>
10979 int main() {
10980         int c = 'A';
10981         if (isascii(c))
10982                 exit(0);
10983         else
10984                 exit(1);
10985 }
10986 EOCP
10987 set isascii
10988 if eval $compile; then
10989         echo "isascii() found." >&4
10990         val="$define"
10991 else
10992         echo "isascii() NOT found." >&4
10993         val="$undef"
10994 fi
10995 set d_isascii
10996 eval $setvar
10997 $rm -f isascii*
10998
10999 : see if isfinite exists
11000 set isfinite d_isfinite
11001 eval $inlibc
11002
11003 : see if isinf exists
11004 set isinf d_isinf
11005 eval $inlibc
11006
11007 : see if isnan exists
11008 set isnan d_isnan
11009 eval $inlibc
11010
11011 : see if isnanl exists
11012 set isnanl d_isnanl
11013 eval $inlibc
11014
11015 : see if killpg exists
11016 set killpg d_killpg
11017 eval $inlibc
11018
11019 : see if lchown exists
11020 echo " "
11021 $cat > try.c <<'EOCP'
11022 /* System header to define __stub macros and hopefully few prototypes,
11023     which can conflict with char lchown(); below.  */
11024 #include <assert.h>
11025 /* Override any gcc2 internal prototype to avoid an error.  */
11026 /* We use char because int might match the return type of a gcc2
11027    builtin and then its argument prototype would still apply.  */
11028 char lchown();
11029 int main() {
11030     /*  The GNU C library defines this for functions which it implements
11031         to always fail with ENOSYS.  Some functions are actually named
11032         something starting with __ and the normal name is an alias.  */
11033 #if defined (__stub_lchown) || defined (__stub___lchown)
11034 choke me
11035 #else
11036 lchown();
11037 #endif
11038 ; return 0; }
11039 EOCP
11040 set try
11041 if eval $compile; then
11042     $echo "lchown() found." >&4
11043     val="$define"
11044 else
11045     $echo "lchown() NOT found." >&4
11046     val="$undef"
11047 fi
11048 set d_lchown
11049 eval $setvar
11050
11051 : See if number of significant digits in a double precision number is known
11052 echo " "
11053 $cat >ldbl_dig.c <<EOM
11054 #$i_limits I_LIMITS
11055 #$i_float I_FLOAT
11056 #ifdef I_LIMITS
11057 #include <limits.h>
11058 #endif
11059 #ifdef I_FLOAT
11060 #include <float.h>
11061 #endif
11062 #ifdef LDBL_DIG
11063 printf("Contains LDBL_DIG");
11064 #endif
11065 EOM
11066 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11067 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11068         echo "LDBL_DIG found." >&4
11069         val="$define"
11070 else
11071         echo "LDBL_DIG NOT found." >&4
11072         val="$undef"
11073 fi
11074 $rm -f ldbl_dig.?
11075 set d_ldbl_dig
11076 eval $setvar
11077
11078 : see if link exists
11079 set link d_link
11080 eval $inlibc
11081
11082 : see if localeconv exists
11083 set localeconv d_locconv
11084 eval $inlibc
11085
11086 : see if lockf exists
11087 set lockf d_lockf
11088 eval $inlibc
11089
11090 : see if prototype for lseek is available
11091 echo " "
11092 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11093 eval $hasproto
11094
11095 : see if lstat exists
11096 set lstat d_lstat
11097 eval $inlibc
11098
11099 : see if madvise exists
11100 set madvise d_madvise
11101 eval $inlibc
11102
11103 : see if mblen exists
11104 set mblen d_mblen
11105 eval $inlibc
11106
11107 : see if mbstowcs exists
11108 set mbstowcs d_mbstowcs
11109 eval $inlibc
11110
11111 : see if mbtowc exists
11112 set mbtowc d_mbtowc
11113 eval $inlibc
11114
11115 : see if memchr exists
11116 set memchr d_memchr
11117 eval $inlibc
11118
11119 : see if memcmp exists
11120 set memcmp d_memcmp
11121 eval $inlibc
11122
11123 : see if memcpy exists
11124 set memcpy d_memcpy
11125 eval $inlibc
11126
11127 : see if memmove exists
11128 set memmove d_memmove
11129 eval $inlibc
11130
11131 : see if memset exists
11132 set memset d_memset
11133 eval $inlibc
11134
11135 : see if mkdir exists
11136 set mkdir d_mkdir
11137 eval $inlibc
11138
11139 : see if mkdtemp exists
11140 set mkdtemp d_mkdtemp
11141 eval $inlibc
11142
11143 : see if mkfifo exists
11144 set mkfifo d_mkfifo
11145 eval $inlibc
11146
11147 : see if mkstemp exists
11148 set mkstemp d_mkstemp
11149 eval $inlibc
11150
11151 : see if mkstemps exists
11152 set mkstemps d_mkstemps
11153 eval $inlibc
11154
11155 : see if mktime exists
11156 set mktime d_mktime
11157 eval $inlibc
11158
11159 : see if this is a sys/mman.h system
11160 set sys/mman.h i_sysmman
11161 eval $inhdr
11162
11163 : see if mmap exists
11164 set mmap d_mmap
11165 eval $inlibc
11166 : see what shmat returns
11167 : default to something harmless
11168 mmaptype='void *'
11169 case "$i_sysmman$d_mmap" in
11170 "$define$define")
11171         $cat >mmap.c <<'END'
11172 #include <sys/mman.h>
11173 void *mmap();
11174 END
11175         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11176                 mmaptype='void *'
11177         else
11178                 mmaptype='caddr_t'
11179         fi
11180         echo "and it returns ($mmaptype)." >&4
11181         ;;
11182 esac
11183
11184
11185
11186 : see if mprotect exists
11187 set mprotect d_mprotect
11188 eval $inlibc
11189
11190 : see if msgctl exists
11191 set msgctl d_msgctl
11192 eval $inlibc
11193
11194 : see if msgget exists
11195 set msgget d_msgget
11196 eval $inlibc
11197
11198 : see if msgsnd exists
11199 set msgsnd d_msgsnd
11200 eval $inlibc
11201
11202 : see if msgrcv exists
11203 set msgrcv d_msgrcv
11204 eval $inlibc
11205
11206 : see how much of the 'msg*(2)' library is present.
11207 h_msg=true
11208 echo " "
11209 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11210 *"$undef"*) h_msg=false;;
11211 esac
11212 case "$osname" in
11213 freebsd)
11214     case "`ipcs 2>&1`" in
11215     "SVID messages"*"not configured"*)
11216         echo "Your $osname does not have the msg*(2) configured." >&4
11217         h_msg=false
11218         val="$undef"
11219         set msgctl d_msgctl
11220         eval $setvar
11221         set msgget d_msgget
11222         eval $setvar
11223         set msgsnd d_msgsnd
11224         eval $setvar
11225         set msgrcv d_msgrcv
11226         eval $setvar
11227         ;;
11228     esac
11229     ;;
11230 esac
11231 : we could also check for sys/ipc.h ...
11232 if $h_msg && $test `./findhdr sys/msg.h`; then
11233         echo "You have the full msg*(2) library." >&4
11234         val="$define"
11235 else
11236         echo "You don't have the full msg*(2) library." >&4
11237         val="$undef"
11238 fi
11239 set d_msg
11240 eval $setvar
11241
11242
11243 echo " "
11244 echo "Checking to see if your system supports struct msghdr..." >&4
11245 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11246 eval $hasstruct
11247 case "$d_msghdr_s" in
11248 "$define")      echo "Yes, it does."   ;;
11249 *)              echo "No, it doesn't." ;;
11250 esac
11251
11252
11253 : see if msync exists
11254 set msync d_msync
11255 eval $inlibc
11256
11257 : see if munmap exists
11258 set munmap d_munmap
11259 eval $inlibc
11260
11261 : see if nice exists
11262 set nice d_nice
11263 eval $inlibc
11264
11265 : see if this is a langinfo.h system
11266 set langinfo.h i_langinfo
11267 eval $inhdr
11268
11269 : see if nl_langinfo exists
11270 set nl_langinfo d_nl_langinfo
11271 eval $inlibc
11272
11273 : check for length of character
11274 echo " "
11275 case "$charsize" in
11276 '')
11277         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11278         $cat >try.c <<'EOCP'
11279 #include <stdio.h>
11280 int main()
11281 {
11282     printf("%d\n", (int)sizeof(char));
11283     exit(0);
11284 }
11285 EOCP
11286         set try
11287         if eval $compile_ok; then
11288                 dflt=`$run ./try`
11289         else
11290                 dflt='1'
11291                 echo "(I can't seem to compile the test program.  Guessing...)"
11292         fi
11293         ;;
11294 *)
11295         dflt="$charsize"
11296         ;;
11297 esac
11298 rp="What is the size of a character (in bytes)?"
11299 . ./myread
11300 charsize="$ans"
11301 $rm -f try.c try
11302
11303 : check for volatile keyword
11304 echo " "
11305 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11306 $cat >try.c <<'EOCP'
11307 int main()
11308 {
11309         typedef struct _goo_struct goo_struct;
11310         goo_struct * volatile goo = ((goo_struct *)0);
11311         struct _goo_struct {
11312                 long long_int;
11313                 int reg_int;
11314                 char char_var;
11315         };
11316         typedef unsigned short foo_t;
11317         char *volatile foo;
11318         volatile int bar;
11319         volatile foo_t blech;
11320         foo = foo;
11321 }
11322 EOCP
11323 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11324         val="$define"
11325         echo "Yup, it does."
11326 else
11327         val="$undef"
11328         echo "Nope, it doesn't."
11329 fi
11330 set d_volatile
11331 eval $setvar
11332 $rm -f try.*
11333
11334
11335 echo " "
11336 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11337
11338 case "$use64bitint:$d_quad:$quadtype" in
11339 define:define:?*)
11340         ivtype="$quadtype"
11341         uvtype="$uquadtype"
11342         ivsize=8
11343         uvsize=8
11344         ;;
11345 *)      ivtype="long"
11346         uvtype="unsigned long"
11347         ivsize=$longsize
11348         uvsize=$longsize
11349         ;;
11350 esac
11351
11352 case "$uselongdouble:$d_longdbl" in
11353 define:define)
11354         nvtype="long double"
11355         nvsize=$longdblsize
11356         ;;
11357 *)      nvtype=double
11358         nvsize=$doublesize
11359         ;;
11360 esac
11361
11362 $echo "(IV will be "$ivtype", $ivsize bytes)"
11363 $echo "(UV will be "$uvtype", $uvsize bytes)"
11364 $echo "(NV will be "$nvtype", $nvsize bytes)"
11365
11366 $cat >try.c <<EOCP
11367 #$i_inttypes I_INTTYPES
11368 #ifdef I_INTTYPES
11369 #include <inttypes.h>
11370 #endif
11371 #include <stdio.h>
11372 int main() {
11373 #ifdef INT8
11374    int8_t i =  INT8_MAX;
11375   uint8_t u = UINT8_MAX;
11376   printf("int8_t\n");
11377 #endif
11378 #ifdef INT16
11379    int16_t i =  INT16_MAX;
11380   uint16_t i = UINT16_MAX;
11381   printf("int16_t\n");
11382 #endif
11383 #ifdef INT32
11384    int32_t i =  INT32_MAX;
11385   uint32_t u = UINT32_MAX;
11386   printf("int32_t\n");
11387 #endif
11388 }
11389 EOCP
11390
11391 case "$i8type" in
11392 '')     case "$charsize" in
11393         1)      i8type=char
11394                 u8type="unsigned char"
11395                 i8size=$charsize
11396                 u8size=$charsize
11397                 ;;
11398         esac
11399         ;;
11400 esac
11401 case "$i8type" in
11402 '')     set try -DINT8
11403         if eval $compile; then
11404                 case "`$run ./try`" in
11405                 int8_t) i8type=int8_t
11406                         u8type=uint8_t
11407                         i8size=1
11408                         u8size=1
11409                         ;;
11410                 esac
11411         fi
11412         ;;
11413 esac
11414 case "$i8type" in
11415 '')     if $test $charsize -ge 1; then
11416                 i8type=char
11417                 u8type="unsigned char"
11418                 i8size=$charsize
11419                 u8size=$charsize
11420         fi
11421         ;;
11422 esac
11423
11424 case "$i16type" in
11425 '')     case "$shortsize" in
11426         2)      i16type=short
11427                 u16type="unsigned short"
11428                 i16size=$shortsize
11429                 u16size=$shortsize
11430                 ;;
11431         esac
11432         ;;
11433 esac
11434 case "$i16type" in
11435 '')     set try -DINT16
11436         if eval $compile; then
11437                 case "`$run ./try`" in
11438                 int16_t)
11439                         i16type=int16_t
11440                         u16type=uint16_t
11441                         i16size=2
11442                         u16size=2
11443                         ;;
11444                 esac
11445         fi
11446         ;;
11447 esac
11448 case "$i16type" in
11449 '')     if $test $shortsize -ge 2; then
11450                 i16type=short
11451                 u16type="unsigned short"
11452                 i16size=$shortsize
11453                 u16size=$shortsize
11454         fi
11455         ;;
11456 esac
11457
11458 case "$i32type" in
11459 '')     case "$longsize" in
11460         4)      i32type=long
11461                 u32type="unsigned long"
11462                 i32size=$longsize
11463                 u32size=$longsize
11464                 ;;
11465         *)      case "$intsize" in
11466                 4)      i32type=int
11467                         u32type="unsigned int"
11468                         i32size=$intsize
11469                         u32size=$intsize
11470                         ;;
11471                 esac
11472                 ;;
11473         esac
11474         ;;
11475 esac
11476 case "$i32type" in
11477 '')     set try -DINT32
11478         if eval $compile; then
11479                 case "`$run ./try`" in
11480                 int32_t)
11481                         i32type=int32_t
11482                         u32type=uint32_t
11483                         i32size=4
11484                         u32size=4
11485                         ;;
11486                 esac
11487         fi
11488         ;;
11489 esac
11490 case "$i32type" in
11491 '')     if $test $intsize -ge 4; then
11492                 i32type=int
11493                 u32type="unsigned int"
11494                 i32size=$intsize
11495                 u32size=$intsize
11496         fi
11497         ;;
11498 esac
11499
11500 case "$i64type" in
11501 '')     case "$d_quad:$quadtype" in
11502         define:?*)
11503                 i64type="$quadtype"
11504                 u64type="$uquadtype"
11505                 i64size=8
11506                 u64size=8
11507                 ;;
11508         esac
11509         ;;
11510 esac
11511
11512 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11513 : volatile so that the compiler has to store it out to memory.
11514 if test X"$d_volatile" = X"$define"; then
11515         volatile=volatile
11516 fi
11517 $cat <<EOP >try.c
11518 #include <stdio.h>
11519 #include <sys/types.h>
11520 #include <signal.h>
11521 #ifdef SIGFPE
11522 $volatile int bletched = 0;
11523 $signal_t blech(s) int s; { bletched = 1; }
11524 #endif
11525 int main() {
11526     $uvtype u = 0;
11527     $nvtype d;
11528     int     n = 8 * $uvsize;
11529     int     i;
11530 #ifdef SIGFPE
11531     signal(SIGFPE, blech);
11532 #endif
11533
11534     for (i = 0; i < n; i++) {
11535       u = u << 1 | ($uvtype)1;
11536       d = ($nvtype)u;
11537       if (($uvtype)d != u)
11538         break;
11539       if (d <= 0)
11540         break;
11541       d = ($nvtype)(u - 1);
11542       if (($uvtype)d != (u - 1))
11543         break;
11544 #ifdef SIGFPE
11545       if (bletched) {
11546         break;
11547 #endif
11548       } 
11549     }
11550     printf("%d\n", ((i == n) ? -n : i));
11551     exit(0);
11552 }
11553 EOP
11554 set try
11555
11556 d_nv_preserves_uv="$undef"
11557 if eval $compile; then
11558         d_nv_preserves_uv_bits="`$run ./try`"
11559 fi
11560 case "$d_nv_preserves_uv_bits" in
11561 \-[1-9]*)       
11562         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11563         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11564         d_nv_preserves_uv="$define"
11565         ;;
11566 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11567         d_nv_preserves_uv="$undef" ;;
11568 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11569         d_nv_preserves_uv_bits="$undef" ;;
11570 esac
11571
11572 $rm -f try.* try
11573
11574
11575 : check for off64_t
11576 echo " "
11577 echo "Checking to see if you have off64_t..." >&4
11578 $cat >try.c <<EOCP
11579 #include <sys/types.h>
11580 #include <unistd.h>
11581 int main() { off64_t x = 7; }
11582 EOCP
11583 set try
11584 if eval $compile; then
11585         val="$define"
11586         echo "You have off64_t."
11587 else
11588         val="$undef"
11589         echo "You do not have off64_t."
11590         case "$lseeksize" in
11591         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11592         esac
11593 fi
11594 $rm -f try.* try
11595 set d_off64_t
11596 eval $setvar
11597
11598 : see if POSIX threads are available
11599 set pthread.h i_pthread
11600 eval $inhdr
11601
11602
11603
11604
11605 : how to create joinable pthreads
11606 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11607         echo " "
11608         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11609         $cat >try.c <<'EOCP'
11610 #include <pthread.h>
11611 int main() {
11612     int detachstate = JOINABLE;
11613 }
11614 EOCP
11615         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11616         if eval $compile; then
11617                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11618                 val="$undef" # Yes, undef.
11619                 set d_old_pthread_create_joinable
11620                 eval $setvar
11621                 val=""
11622                 set old_pthread_create_joinable
11623                 eval $setvar
11624         else
11625                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11626                 if eval $compile; then
11627                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11628                         val="$define"
11629                         set d_old_pthread_create_joinable
11630                         eval $setvar
11631                         val=PTHREAD_CREATE_UNDETACHED
11632                         set old_pthread_create_joinable
11633                         eval $setvar
11634                 else            
11635                         set try -DJOINABLE=__UNDETACHED
11636                         if eval $compile; then
11637                                 echo "You seem to use __UNDETACHED." >&4
11638                                 val="$define"
11639                                 set d_old_pthread_create_joinable
11640                                 eval $setvar
11641                                 val=__UNDETACHED
11642                                 set old_pthread_create_joinable
11643                                 eval $setvar
11644                         else
11645                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11646                                 val="$define"
11647                                 set d_old_pthread_create_joinable
11648                                 eval $setvar
11649                                 val=0
11650                                 set old_pthread_create_joinable
11651                                 eval $setvar
11652                         fi
11653                 fi
11654         fi
11655         $rm -f try try.*
11656 else
11657     d_old_pthread_create_joinable="$undef"
11658     old_pthread_create_joinable=""
11659 fi
11660
11661 : see if pause exists
11662 set pause d_pause
11663 eval $inlibc
11664
11665 : see if pipe exists
11666 set pipe d_pipe
11667 eval $inlibc
11668
11669 : see if poll exists
11670 set poll d_poll
11671 eval $inlibc
11672
11673 : see if readlink exists
11674 set readlink d_readlink
11675 eval $inlibc
11676
11677 echo " "
11678 procselfexe=''
11679 val="$undef"
11680 case "$d_readlink" in
11681 "$define")
11682         if $issymlink /proc/self/exe ; then
11683                 $ls -l /proc/self/exe > reflect
11684                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11685                         echo "You have Linux-like /proc/self/exe."
11686                         procselfexe='"/proc/self/exe"'
11687                         val="$define"
11688                 fi
11689         fi
11690         if $issymlink /proc/curproc/file ; then
11691                 $ls -l /proc/curproc/file > reflect
11692                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11693                         echo "You have BSD-like /proc/curproc/file."
11694                         procselfexe='"/proc/curproc/file"'
11695                         val="$define"
11696                 fi
11697         fi
11698         ;;
11699 esac
11700 $rm -f reflect
11701 set d_procselfexe
11702 eval $setvar
11703
11704 : see if pthread_atfork exists
11705 set pthread_atfork d_pthread_atfork
11706 eval $inlibc
11707
11708
11709 : see whether the various POSIXish _yields exist
11710 $cat >try.c <<EOP
11711 #include <pthread.h>
11712 #include <stdio.h>
11713 int main() {
11714 #ifdef SCHED_YIELD
11715         sched_yield();
11716 #else
11717 #ifdef PTHREAD_YIELD
11718         pthread_yield();
11719 #else
11720 #ifdef PTHREAD_YIELD_NULL
11721         pthread_yield(NULL);
11722 #endif
11723 #endif
11724 #endif
11725 }
11726 EOP
11727 : see if sched_yield exists
11728 set try -DSCHED_YIELD
11729 if eval $compile; then
11730     val="$define"
11731     sched_yield='sched_yield()'
11732 else
11733     val="$undef"
11734 fi
11735 case "$usethreads" in
11736 $define)
11737         case "$val" in
11738         $define) echo 'sched_yield() found.' >&4        ;;
11739         *)       echo 'sched_yield() NOT found.' >&4    ;;
11740         esac
11741 esac
11742 set d_sched_yield
11743 eval $setvar
11744
11745 : see if pthread_yield exists
11746 set try -DPTHREAD_YIELD
11747 if eval $compile; then
11748     val="$define"
11749     case "$sched_yield" in
11750     '') sched_yield='pthread_yield()' ;;
11751     esac
11752 else
11753     set try -DPTHREAD_YIELD_NULL
11754     if eval $compile; then
11755         val="$define"
11756         case "$sched_yield" in
11757         '') sched_yield='pthread_yield(NULL)' ;;
11758         esac
11759     else
11760         val="$undef"
11761     fi
11762 fi
11763 case "$usethreads" in
11764 $define)
11765         case "$val" in
11766         $define) echo 'pthread_yield() found.' >&4      ;;
11767         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11768         esac
11769         ;;
11770 esac
11771 set d_pthread_yield
11772 eval $setvar
11773
11774 case "$sched_yield" in
11775 '') sched_yield=undef ;;
11776 esac
11777
11778 $rm -f try try.*
11779
11780 : see if this is a pwd.h system
11781 set pwd.h i_pwd
11782 eval $inhdr
11783
11784 case "$i_pwd" in
11785 $define)
11786         xxx=`./findhdr pwd.h`
11787         $cppstdin $cppflags $cppminus < $xxx >$$.h
11788
11789         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11790                 val="$define"
11791         else
11792                 val="$undef"
11793         fi
11794         set d_pwquota
11795         eval $setvar
11796
11797         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11798                 val="$define"
11799         else
11800                 val="$undef"
11801         fi
11802         set d_pwage
11803         eval $setvar
11804
11805         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11806                 val="$define"
11807         else
11808                 val="$undef"
11809         fi
11810         set d_pwchange
11811         eval $setvar
11812
11813         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11814                 val="$define"
11815         else
11816                 val="$undef"
11817         fi
11818         set d_pwclass
11819         eval $setvar
11820
11821         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11822                 val="$define"
11823         else
11824                 val="$undef"
11825         fi
11826         set d_pwexpire
11827         eval $setvar
11828
11829         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11830                 val="$define"
11831         else
11832                 val="$undef"
11833         fi
11834         set d_pwcomment
11835         eval $setvar
11836
11837         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11838                 val="$define"
11839         else
11840                 val="$undef"
11841         fi
11842         set d_pwgecos
11843         eval $setvar
11844
11845         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11846                 val="$define"
11847         else
11848                 val="$undef"
11849         fi
11850         set d_pwpasswd
11851         eval $setvar
11852
11853         $rm -f $$.h
11854         ;;
11855 *)
11856         val="$undef"; 
11857         set d_pwquota; eval $setvar
11858         set d_pwage; eval $setvar
11859         set d_pwchange; eval $setvar
11860         set d_pwclass; eval $setvar
11861         set d_pwexpire; eval $setvar
11862         set d_pwcomment; eval $setvar
11863         set d_pwgecos; eval $setvar
11864         set d_pwpasswd; eval $setvar
11865         ;;
11866 esac
11867
11868 : see if readdir and friends exist
11869 set readdir d_readdir
11870 eval $inlibc
11871 set seekdir d_seekdir
11872 eval $inlibc
11873 set telldir d_telldir
11874 eval $inlibc
11875 set rewinddir d_rewinddir
11876 eval $inlibc
11877
11878 : see if readv exists
11879 set readv d_readv
11880 eval $inlibc
11881
11882 : see if recvmsg exists
11883 set recvmsg d_recvmsg
11884 eval $inlibc
11885
11886 : see if rename exists
11887 set rename d_rename
11888 eval $inlibc
11889
11890 : see if rmdir exists
11891 set rmdir d_rmdir
11892 eval $inlibc
11893
11894 : see if memory.h is available.
11895 val=''
11896 set memory.h val
11897 eval $inhdr
11898
11899 : See if it conflicts with string.h
11900 case "$val" in
11901 $define)
11902         case "$strings" in
11903         '') ;;
11904         *)
11905                 $cppstdin $cppflags $cppminus < $strings > mem.h
11906                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11907                         echo " "
11908                         echo "We won't be including <memory.h>."
11909                         val="$undef"
11910                 fi
11911                 $rm -f mem.h
11912                 ;;
11913         esac
11914 esac
11915 set i_memory
11916 eval $setvar
11917
11918 : can bcopy handle overlapping blocks?
11919 echo " "
11920 val="$undef"
11921 case "$d_memmove" in
11922 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11923 *)      case "$d_bcopy" in
11924         "$define")
11925                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11926                 $cat >try.c <<EOCP
11927 #$i_memory I_MEMORY
11928 #$i_stdlib I_STDLIB
11929 #$i_string I_STRING
11930 #$i_unistd I_UNISTD
11931 EOCP
11932         $cat >>try.c <<'EOCP'
11933 #include <stdio.h>
11934 #ifdef I_MEMORY
11935 #  include <memory.h>
11936 #endif
11937 #ifdef I_STDLIB
11938 #  include <stdlib.h>
11939 #endif
11940 #ifdef I_STRING
11941 #  include <string.h>
11942 #else
11943 #  include <strings.h>
11944 #endif
11945 #ifdef I_UNISTD
11946 #  include <unistd.h>  /* Needed for NetBSD */
11947 #endif
11948 int main()
11949 {
11950 char buf[128], abc[128];
11951 char *b;
11952 int len;
11953 int off;
11954 int align;
11955
11956 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11957    try to store the string in read-only memory. */
11958 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11959
11960 for (align = 7; align >= 0; align--) {
11961         for (len = 36; len; len--) {
11962                 b = buf+align;
11963                 bcopy(abc, b, len);
11964                 for (off = 1; off <= len; off++) {
11965                         bcopy(b, b+off, len);
11966                         bcopy(b+off, b, len);
11967                         if (bcmp(b, abc, len))
11968                                 exit(1);
11969                 }
11970         }
11971 }
11972 exit(0);
11973 }
11974 EOCP
11975                 set try
11976                 if eval $compile_ok; then
11977                         if ./try 2>/dev/null; then
11978                                 echo "Yes, it can."
11979                                 val="$define"
11980                         else
11981                                 echo "It can't, sorry."
11982                         fi
11983                 else
11984                         echo "(I can't compile the test program, so we'll assume not...)"
11985                 fi
11986                 ;;
11987         esac
11988         $rm -f try.* try core
11989         ;;
11990 esac
11991 set d_safebcpy
11992 eval $setvar
11993
11994 : can memcpy handle overlapping blocks?
11995 echo " "
11996 val="$undef"
11997 case "$d_memmove" in
11998 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11999 *)      case "$d_memcpy" in
12000         "$define")
12001                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
12002                 $cat >try.c <<EOCP
12003 #$i_memory I_MEMORY
12004 #$i_stdlib I_STDLIB
12005 #$i_string I_STRING
12006 #$i_unistd I_UNISTD
12007 EOCP
12008         $cat >>try.c <<'EOCP'
12009 #include <stdio.h>
12010 #ifdef I_MEMORY
12011 #  include <memory.h>
12012 #endif
12013 #ifdef I_STDLIB
12014 #  include <stdlib.h>
12015 #endif
12016 #ifdef I_STRING
12017 #  include <string.h>
12018 #else
12019 #  include <strings.h>
12020 #endif
12021 #ifdef I_UNISTD
12022 #  include <unistd.h>  /* Needed for NetBSD */
12023 #endif
12024 int main()
12025 {
12026 char buf[128], abc[128];
12027 char *b;
12028 int len;
12029 int off;
12030 int align;
12031
12032 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12033    try to store the string in read-only memory. */
12034 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
12035
12036 for (align = 7; align >= 0; align--) {
12037         for (len = 36; len; len--) {
12038                 b = buf+align;
12039                 memcpy(b, abc, len);
12040                 for (off = 1; off <= len; off++) {
12041                         memcpy(b+off, b, len);
12042                         memcpy(b, b+off, len);
12043                         if (memcmp(b, abc, len))
12044                                 exit(1);
12045                 }
12046         }
12047 }
12048 exit(0);
12049 }
12050 EOCP
12051                 set try
12052                 if eval $compile_ok; then
12053                         if ./try 2>/dev/null; then
12054                                 echo "Yes, it can."
12055                                 val="$define"
12056                         else
12057                                 echo "It can't, sorry."
12058                         fi
12059                 else
12060                         echo "(I can't compile the test program, so we'll assume not...)"
12061                 fi
12062                 ;;
12063         esac
12064         $rm -f try.* try core
12065         ;;
12066 esac
12067 set d_safemcpy
12068 eval $setvar
12069
12070 : can memcmp be trusted to compare relative magnitude?
12071 val="$undef"
12072 case "$d_memcmp" in
12073 "$define")
12074         echo " "
12075         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12076         $cat >try.c <<EOCP
12077 #$i_memory I_MEMORY
12078 #$i_stdlib I_STDLIB
12079 #$i_string I_STRING
12080 #$i_unistd I_UNISTD
12081 EOCP
12082         $cat >>try.c <<'EOCP'
12083 #include <stdio.h>
12084 #ifdef I_MEMORY
12085 #  include <memory.h>
12086 #endif
12087 #ifdef I_STDLIB
12088 #  include <stdlib.h>
12089 #endif
12090 #ifdef I_STRING
12091 #  include <string.h>
12092 #else
12093 #  include <strings.h>
12094 #endif
12095 #ifdef I_UNISTD
12096 #  include <unistd.h>  /* Needed for NetBSD */
12097 #endif
12098 int main()
12099 {
12100 char a = -1;
12101 char b = 0;
12102 if ((a < b) && memcmp(&a, &b, 1) < 0)
12103         exit(1);
12104 exit(0);
12105 }
12106 EOCP
12107         set try
12108         if eval $compile_ok; then
12109                 if $run ./try 2>/dev/null; then
12110                         echo "Yes, it can."
12111                         val="$define"
12112                 else
12113                         echo "No, it can't (it uses signed chars)."
12114                 fi
12115         else
12116                 echo "(I can't compile the test program, so we'll assume not...)"
12117         fi
12118         ;;
12119 esac
12120 $rm -f try.* try core
12121 set d_sanemcmp
12122 eval $setvar
12123
12124 : see if prototype for sbrk is available
12125 echo " "
12126 set d_sbrkproto sbrk $i_unistd unistd.h
12127 eval $hasproto
12128
12129 : see if select exists
12130 set select d_select
12131 eval $inlibc
12132
12133 : see if semctl exists
12134 set semctl d_semctl
12135 eval $inlibc
12136
12137 : see if semget exists
12138 set semget d_semget
12139 eval $inlibc
12140
12141 : see if semop exists
12142 set semop d_semop
12143 eval $inlibc
12144
12145 : see how much of the 'sem*(2)' library is present.
12146 h_sem=true
12147 echo " "
12148 case "$d_semctl$d_semget$d_semop" in
12149 *"$undef"*) h_sem=false;;
12150 esac
12151 case "$osname" in
12152 freebsd)
12153     case "`ipcs 2>&1`" in
12154     "SVID messages"*"not configured"*)
12155         echo "Your $osname does not have the sem*(2) configured." >&4
12156         h_sem=false
12157         val="$undef"
12158         set semctl d_semctl
12159         eval $setvar
12160         set semget d_semget
12161         eval $setvar
12162         set semop d_semop
12163         eval $setvar
12164         ;;
12165     esac
12166     ;;
12167 esac
12168 : we could also check for sys/ipc.h ...
12169 if $h_sem && $test `./findhdr sys/sem.h`; then
12170         echo "You have the full sem*(2) library." >&4
12171         val="$define"
12172 else
12173         echo "You don't have the full sem*(2) library." >&4
12174         val="$undef"
12175 fi
12176 set d_sem
12177 eval $setvar
12178
12179 : see whether sys/sem.h defines union semun
12180 echo " "
12181 $cat > try.c <<'END'
12182 #include <sys/types.h>
12183 #include <sys/ipc.h>
12184 #include <sys/sem.h>
12185 int main () { union semun semun; semun.buf = 0; }
12186 END
12187 set try
12188 if eval $compile; then
12189     echo "You have union semun in <sys/sem.h>." >&4
12190     val="$define"
12191 else
12192     echo "You do not have union semun in <sys/sem.h>." >&4
12193     val="$undef"
12194 fi
12195 $rm -f try try.c try.h
12196 set d_union_semun
12197 eval $setvar
12198
12199 : see how to do semctl IPC_STAT
12200 case "$d_sem" in
12201 $define)
12202     : see whether semctl IPC_STAT can use union semun
12203     echo " "
12204     $cat > try.h <<END
12205 #ifndef S_IRUSR
12206 #   ifdef S_IREAD
12207 #       define S_IRUSR S_IREAD
12208 #       define S_IWUSR S_IWRITE
12209 #       define S_IXUSR S_IEXEC
12210 #   else
12211 #       define S_IRUSR 0400
12212 #       define S_IWUSR 0200
12213 #       define S_IXUSR 0100
12214 #   endif
12215 #   define S_IRGRP (S_IRUSR>>3)
12216 #   define S_IWGRP (S_IWUSR>>3)
12217 #   define S_IXGRP (S_IXUSR>>3)
12218 #   define S_IROTH (S_IRUSR>>6)
12219 #   define S_IWOTH (S_IWUSR>>6)
12220 #   define S_IXOTH (S_IXUSR>>6)
12221 #endif
12222 #ifndef S_IRWXU
12223 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12224 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12225 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12226 #endif
12227 END
12228
12229     $cat > try.c <<END
12230 #include <sys/types.h>
12231 #include <sys/ipc.h>
12232 #include <sys/sem.h>
12233 #include <sys/stat.h>
12234 #include <stdio.h>
12235 #include <errno.h>
12236 #include "try.h"
12237 #ifndef errno
12238 extern int errno;
12239 #endif
12240 #$d_union_semun HAS_UNION_SEMUN
12241 int main() {
12242     union semun
12243 #ifndef HAS_UNION_SEMUN
12244     {
12245         int val;
12246         struct semid_ds *buf;
12247         unsigned short *array;
12248     }
12249 #endif
12250     arg;
12251     int sem, st;
12252
12253 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12254     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12255     if (sem > -1) {
12256         struct semid_ds argbuf;
12257         arg.buf = &argbuf;
12258 #       ifdef IPC_STAT
12259         st = semctl(sem, 0, IPC_STAT, arg);
12260         if (st == 0)
12261             printf("semun\n");
12262         else
12263 #       endif /* IPC_STAT */
12264             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12265 #       ifdef IPC_RMID
12266         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12267 #       endif /* IPC_RMID */
12268             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12269     } else
12270 #endif /* IPC_PRIVATE && ... */
12271         printf("semget failed: errno = %d\n", errno);
12272   return 0;
12273 }
12274 END
12275     val="$undef"
12276     set try
12277     if eval $compile; then
12278         xxx=`$run ./try`
12279         case "$xxx" in
12280         semun) val="$define" ;;
12281         esac
12282     fi
12283     $rm -f try try.c
12284     set d_semctl_semun
12285     eval $setvar
12286     case "$d_semctl_semun" in
12287     $define)
12288         echo "You can use union semun for semctl IPC_STAT." >&4
12289         also='also'
12290         ;;
12291     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12292         also=''
12293         ;;
12294     esac
12295
12296     : see whether semctl IPC_STAT can use struct semid_ds pointer
12297     $cat > try.c <<'END'
12298 #include <sys/types.h>
12299 #include <sys/ipc.h>
12300 #include <sys/sem.h>
12301 #include <sys/stat.h>
12302 #include "try.h"
12303 #include <stdio.h>
12304 #include <errno.h>
12305 #ifndef errno
12306 extern int errno;
12307 #endif
12308 int main() {
12309     struct semid_ds arg;
12310     int sem, st;
12311
12312 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12313     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12314     if (sem > -1) {
12315 #       ifdef IPC_STAT
12316         st = semctl(sem, 0, IPC_STAT, &arg);
12317         if (st == 0)
12318             printf("semid_ds\n");
12319         else
12320 #       endif /* IPC_STAT */
12321             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12322 #       ifdef IPC_RMID
12323         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12324 #       endif /* IPC_RMID */
12325             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12326     } else
12327 #endif /* IPC_PRIVATE && ... */
12328         printf("semget failed: errno = %d\n", errno);
12329
12330     return 0;
12331 }
12332 END
12333     val="$undef"
12334     set try
12335     if eval $compile; then
12336         xxx=`$run ./try`
12337         case "$xxx" in
12338         semid_ds) val="$define" ;;
12339         esac
12340     fi
12341     $rm -f try try.c
12342     set d_semctl_semid_ds
12343     eval $setvar
12344     case "$d_semctl_semid_ds" in
12345     $define)
12346         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12347         ;;
12348     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12349         ;;
12350     esac
12351     $rm -f try.h
12352     ;;
12353 *)  val="$undef"
12354
12355     # We do not have the full sem*(2) library, so assume we can not
12356     # use either.
12357
12358     set d_semctl_semun
12359     eval $setvar
12360
12361     set d_semctl_semid_ds
12362     eval $setvar
12363     ;;
12364 esac
12365
12366 : see if sendmsg exists
12367 set sendmsg d_sendmsg
12368 eval $inlibc
12369
12370 : see if setegid exists
12371 set setegid d_setegid
12372 eval $inlibc
12373
12374 : see if seteuid exists
12375 set seteuid d_seteuid
12376 eval $inlibc
12377
12378 : see if setgrent exists
12379 set setgrent d_setgrent
12380 eval $inlibc
12381
12382 : see if sethostent exists
12383 set sethostent d_sethent
12384 eval $inlibc
12385
12386 : see if setitimer exists
12387 set setitimer d_setitimer
12388 eval $inlibc
12389
12390 : see if setlinebuf exists
12391 set setlinebuf d_setlinebuf
12392 eval $inlibc
12393
12394 : see if setlocale exists
12395 set setlocale d_setlocale
12396 eval $inlibc
12397
12398 : see if setnetent exists
12399 set setnetent d_setnent
12400 eval $inlibc
12401
12402 : see if setprotoent exists
12403 set setprotoent d_setpent
12404 eval $inlibc
12405
12406 : see if setpgid exists
12407 set setpgid d_setpgid
12408 eval $inlibc
12409
12410 : see if setpgrp2 exists
12411 set setpgrp2 d_setpgrp2
12412 eval $inlibc
12413
12414 : see if setpriority exists
12415 set setpriority d_setprior
12416 eval $inlibc
12417
12418 : see if setproctitle exists
12419 set setproctitle d_setproctitle
12420 eval $inlibc
12421
12422 : see if setpwent exists
12423 set setpwent d_setpwent
12424 eval $inlibc
12425
12426 : see if setregid exists
12427 set setregid d_setregid
12428 eval $inlibc
12429 set setresgid d_setresgid
12430 eval $inlibc
12431
12432 : see if setreuid exists
12433 set setreuid d_setreuid
12434 eval $inlibc
12435 set setresuid d_setresuid
12436 eval $inlibc
12437
12438 : see if setrgid exists
12439 set setrgid d_setrgid
12440 eval $inlibc
12441
12442 : see if setruid exists
12443 set setruid d_setruid
12444 eval $inlibc
12445
12446 : see if setservent exists
12447 set setservent d_setsent
12448 eval $inlibc
12449
12450 : see if setsid exists
12451 set setsid d_setsid
12452 eval $inlibc
12453
12454 : see if setvbuf exists
12455 set setvbuf d_setvbuf
12456 eval $inlibc
12457
12458 : see if sfio.h is available
12459 set sfio.h i_sfio
12460 eval $inhdr
12461
12462
12463 : see if sfio library is available
12464 case "$i_sfio" in
12465 $define)
12466         val=''
12467         set sfreserve val
12468         eval $inlibc
12469         ;;
12470 *)
12471         val="$undef"
12472         ;;
12473 esac
12474 : Ok, but do we want to use it.
12475 case "$val" in
12476 $define)
12477         case "$usesfio" in
12478         true|$define|[yY]*) dflt='y';;
12479         *) dflt='n';;
12480         esac
12481         echo "$package can use the sfio library, but it is experimental."
12482         case "$useperlio" in
12483         "$undef")
12484             echo "For sfio also the PerlIO abstraction layer is needed."
12485             echo "Earlier you said you wouldn't want that."
12486             ;;
12487         esac
12488         rp="You seem to have sfio available, do you want to try using it?"
12489         . ./myread
12490         case "$ans" in
12491         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12492                 useperlio="$define"
12493                 val="$define"
12494                 ;;
12495         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12496                 val="$undef"
12497                 ;;
12498         esac
12499         ;;
12500 *)      case "$usesfio" in
12501         true|$define|[yY]*)
12502                 echo "Sorry, cannot find sfio on this machine." >&4
12503                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12504                 val="$undef"
12505                 ;;
12506         esac
12507         ;;
12508 esac
12509 set d_sfio
12510 eval $setvar
12511 case "$d_sfio" in
12512 $define) usesfio='true';;
12513 *) usesfio='false';;
12514 esac
12515 case "$d_sfio" in
12516 $define) ;;
12517 *)      : Remove sfio from list of libraries to use
12518         case "$libs" in
12519         *-lsfio*)
12520                 echo "Removing unneeded -lsfio from library list" >&4
12521                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12522                 shift
12523                 libs="$*"
12524                 echo "libs = $libs" >&4
12525                 ;;
12526         esac
12527 ;;
12528 esac
12529
12530
12531 : see if shmctl exists
12532 set shmctl d_shmctl
12533 eval $inlibc
12534
12535 : see if shmget exists
12536 set shmget d_shmget
12537 eval $inlibc
12538
12539 : see if shmat exists
12540 set shmat d_shmat
12541 eval $inlibc
12542 : see what shmat returns
12543 case "$d_shmat" in
12544 "$define")
12545         $cat >shmat.c <<'END'
12546 #include <sys/shm.h>
12547 void *shmat();
12548 END
12549         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12550                 shmattype='void *'
12551         else
12552                 shmattype='char *'
12553         fi
12554         echo "and it returns ($shmattype)." >&4
12555         : see if a prototype for shmat is available
12556         xxx=`./findhdr sys/shm.h`
12557         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12558         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12559                 val="$define"
12560         else
12561                 val="$undef"
12562         fi
12563         $rm -f shmat.[co]
12564         ;;
12565 *)
12566         val="$undef"
12567         ;;
12568 esac
12569 set d_shmatprototype
12570 eval $setvar
12571
12572 : see if shmdt exists
12573 set shmdt d_shmdt
12574 eval $inlibc
12575
12576 : see how much of the 'shm*(2)' library is present.
12577 h_shm=true
12578 echo " "
12579 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12580 *"$undef"*) h_shm=false;;
12581 esac
12582 case "$osname" in
12583 freebsd)
12584     case "`ipcs 2>&1`" in
12585     "SVID shared memory"*"not configured"*)
12586         echo "Your $osname does not have the shm*(2) configured." >&4
12587         h_shm=false
12588         val="$undef"
12589         set shmctl d_shmctl
12590         evat $setvar
12591         set shmget d_shmget
12592         evat $setvar
12593         set shmat d_shmat
12594         evat $setvar
12595         set shmdt d_shmdt
12596         evat $setvar
12597         ;;
12598     esac
12599     ;;
12600 esac
12601 : we could also check for sys/ipc.h ...
12602 if $h_shm && $test `./findhdr sys/shm.h`; then
12603         echo "You have the full shm*(2) library." >&4
12604         val="$define"
12605 else
12606         echo "You don't have the full shm*(2) library." >&4
12607         val="$undef"
12608 fi
12609 set d_shm
12610 eval $setvar
12611
12612 echo " "
12613 : see if we have sigaction
12614 if set sigaction val -f d_sigaction; eval $csym; $val; then
12615         echo 'sigaction() found.' >&4
12616         $cat > try.c <<'EOP'
12617 #include <stdio.h>
12618 #include <sys/types.h>
12619 #include <signal.h>
12620 int main()
12621 {
12622     struct sigaction act, oact;
12623     act.sa_flags = 0;
12624     oact.sa_handler = 0;
12625     /* so that act and oact are used */
12626     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12627 }
12628 EOP
12629         set try
12630         if eval $compile_ok; then
12631                 val="$define"
12632         else
12633                 echo "But you don't seem to have a useable struct sigaction." >&4
12634                 val="$undef"
12635         fi
12636 else
12637         echo 'sigaction NOT found.' >&4
12638         val="$undef"
12639 fi
12640 set d_sigaction; eval $setvar
12641 $rm -f try try$_o try.c
12642
12643 : see if sigprocmask exists
12644 set sigprocmask d_sigprocmask
12645 eval $inlibc
12646
12647 : see if sigsetjmp exists
12648 echo " "
12649 case "$d_sigsetjmp" in
12650 '')
12651         $cat >try.c <<'EOP'
12652 #include <setjmp.h>
12653 sigjmp_buf env;
12654 int set = 1;
12655 int main()
12656 {
12657         if (sigsetjmp(env,1))
12658                 exit(set);
12659         set = 0;
12660         siglongjmp(env, 1);
12661         exit(1);
12662 }
12663 EOP
12664         set try
12665         if eval $compile; then
12666                 if $run ./try >/dev/null 2>&1; then
12667                         echo "POSIX sigsetjmp found." >&4
12668                         val="$define"
12669                 else
12670                         $cat >&4 <<EOM
12671 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12672 I'll ignore them.
12673 EOM
12674                         val="$undef"
12675                 fi
12676         else
12677                 echo "sigsetjmp not found." >&4
12678                 val="$undef"
12679         fi
12680         ;;
12681 *) val="$d_sigsetjmp"
12682         case "$d_sigsetjmp" in
12683         $define) echo "POSIX sigsetjmp found." >&4;;
12684         $undef) echo "sigsetjmp not found." >&4;;
12685         esac
12686         ;;
12687 esac
12688 set d_sigsetjmp
12689 eval $setvar
12690 $rm -f try.c try
12691
12692 : see if sockatmark exists
12693 set sockatmark d_sockatmark
12694 eval $inlibc
12695
12696 : see if prototype for sockatmark is available
12697 echo " "
12698 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12699 eval $hasproto
12700
12701 : see if socks5_init exists
12702 set socks5_init d_socks5_init
12703 eval $inlibc
12704
12705 : see if prototype for setresgid is available
12706 echo " "
12707 set d_sresgproto setresgid $i_unistd unistd.h
12708 eval $hasproto
12709
12710 : see if prototype for setresuid is available
12711 echo " "
12712 set d_sresuproto setresuid $i_unistd unistd.h
12713 eval $hasproto
12714
12715 : see if sys/stat.h is available
12716 set sys/stat.h i_sysstat
12717 eval $inhdr
12718
12719
12720 : see if stat knows about block sizes
12721 echo " "
12722 echo "Checking to see if your struct stat has st_blocks field..." >&4
12723 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12724 eval $hasfield
12725
12726
12727 : see if this is a sys/vfs.h system
12728 set sys/vfs.h i_sysvfs
12729 eval $inhdr
12730
12731
12732 : see if this is a sys/statfs.h system
12733 set sys/statfs.h i_sysstatfs
12734 eval $inhdr
12735
12736
12737 echo " "
12738 echo "Checking to see if your system supports struct statfs..." >&4
12739 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
12740 eval $hasstruct
12741 case "$d_statfs_s" in
12742 "$define")      echo "Yes, it does."   ;;
12743 *)              echo "No, it doesn't." ;;
12744 esac
12745
12746
12747
12748 : see if struct statfs knows about f_flags
12749 case "$d_statfs_s" in
12750 define) 
12751         echo " "
12752         echo "Checking to see if your struct statfs has f_flags field..." >&4
12753         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
12754         eval $hasfield
12755         ;;
12756 *)      val="$undef"
12757         set d_statfs_f_flags
12758         eval $setvar
12759         ;;
12760 esac
12761 case "$d_statfs_f_flags" in
12762 "$define")      echo "Yes, it does."   ;;
12763 *)              echo "No, it doesn't." ;;
12764 esac
12765
12766 : see if _ptr and _cnt from stdio act std
12767 echo " "
12768
12769 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12770         echo "(Looks like you have stdio.h from BSD.)"
12771         case "$stdio_ptr" in
12772         '') stdio_ptr='((fp)->_p)'
12773                 ptr_lval=$define
12774                 ;;
12775         *)      ptr_lval=$d_stdio_ptr_lval;;
12776         esac
12777         case "$stdio_cnt" in
12778         '') stdio_cnt='((fp)->_r)'
12779                 cnt_lval=$define
12780                 ;;
12781         *)      cnt_lval=$d_stdio_cnt_lval;;
12782         esac
12783         case "$stdio_base" in
12784         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12785         esac
12786         case "$stdio_bufsiz" in
12787         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12788         esac
12789 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12790         echo "(Looks like you have stdio.h from Linux.)"
12791         case "$stdio_ptr" in
12792         '') stdio_ptr='((fp)->_IO_read_ptr)'
12793                 ptr_lval=$define
12794                 ;;
12795         *)      ptr_lval=$d_stdio_ptr_lval;;
12796         esac
12797         case "$stdio_cnt" in
12798         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12799                 cnt_lval=$undef
12800                 ;;
12801         *)      cnt_lval=$d_stdio_cnt_lval;;
12802         esac
12803         case "$stdio_base" in
12804         '') stdio_base='((fp)->_IO_read_base)';;
12805         esac
12806         case "$stdio_bufsiz" in
12807         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12808         esac
12809 else
12810         case "$stdio_ptr" in
12811         '') stdio_ptr='((fp)->_ptr)'
12812                 ptr_lval=$define
12813                 ;;
12814         *)      ptr_lval=$d_stdio_ptr_lval;;
12815         esac
12816         case "$stdio_cnt" in
12817         '') stdio_cnt='((fp)->_cnt)'
12818                 cnt_lval=$define
12819                 ;;
12820         *)      cnt_lval=$d_stdio_cnt_lval;;
12821         esac
12822         case "$stdio_base" in
12823         '') stdio_base='((fp)->_base)';;
12824         esac
12825         case "$stdio_bufsiz" in
12826         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12827         esac
12828 fi
12829
12830 : test whether _ptr and _cnt really work
12831 echo "Checking how std your stdio is..." >&4
12832 $cat >try.c <<EOP
12833 #include <stdio.h>
12834 #define FILE_ptr(fp)    $stdio_ptr
12835 #define FILE_cnt(fp)    $stdio_cnt
12836 int main() {
12837         FILE *fp = fopen("try.c", "r");
12838         char c = getc(fp);
12839         if (
12840                 18 <= FILE_cnt(fp) &&
12841                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12842         )
12843                 exit(0);
12844         exit(1);
12845 }
12846 EOP
12847 val="$undef"
12848 set try
12849 if eval $compile && $to try.c; then
12850         if $run ./try; then
12851                 echo "Your stdio acts pretty std."
12852                 val="$define"
12853         else
12854                 echo "Your stdio isn't very std."
12855         fi
12856 else
12857         echo "Your stdio doesn't appear very std."
12858 fi
12859 $rm -f try.c try
12860 set d_stdstdio
12861 eval $setvar
12862
12863 : Can _ptr be used as an lvalue?
12864 case "$d_stdstdio$ptr_lval" in
12865 $define$define) val=$define ;;
12866 *) val=$undef ;;
12867 esac
12868 set d_stdio_ptr_lval
12869 eval $setvar
12870
12871 : Can _cnt be used as an lvalue?
12872 case "$d_stdstdio$cnt_lval" in
12873 $define$define) val=$define ;;
12874 *) val=$undef ;;
12875 esac
12876 set d_stdio_cnt_lval
12877 eval $setvar
12878
12879
12880 : test whether setting _ptr sets _cnt as a side effect
12881 d_stdio_ptr_lval_sets_cnt="$undef"
12882 d_stdio_ptr_lval_nochange_cnt="$undef"
12883 case "$d_stdio_ptr_lval$d_stdstdio" in
12884 $define$define)
12885         echo "Checking to see what happens if we set the stdio ptr..." >&4
12886 $cat >try.c <<EOP
12887 #include <stdio.h>
12888 /* Can we scream? */
12889 /* Eat dust sed :-) */
12890 /* In the buffer space, no one can hear you scream. */
12891 #define FILE_ptr(fp)    $stdio_ptr
12892 #define FILE_cnt(fp)    $stdio_cnt
12893 #include <sys/types.h>
12894 int main() {
12895         FILE *fp = fopen("try.c", "r");
12896         int c;
12897         char *ptr;
12898         size_t cnt;
12899         if (!fp) {
12900             puts("Fail even to read");
12901             exit(1);
12902         }
12903         c = getc(fp); /* Read away the first # */
12904         if (c == EOF) {
12905             puts("Fail even to read");
12906             exit(1);
12907         }
12908         if (!(
12909                 18 <= FILE_cnt(fp) &&
12910                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12911         )) {
12912                 puts("Fail even to read");
12913                 exit (1);
12914         }
12915         ptr = (char*) FILE_ptr(fp);
12916         cnt = (size_t)FILE_cnt(fp);
12917
12918         FILE_ptr(fp) += 42;
12919
12920         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12921                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12922                 exit (1);
12923         }
12924         if (FILE_cnt(fp) <= 20) {
12925                 printf ("Fail (<20 chars to test)");
12926                 exit (1);
12927         }
12928         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12929                 puts("Fail compare");
12930                 exit (1);
12931         }
12932         if (cnt == FILE_cnt(fp)) {
12933                 puts("Pass_unchanged");
12934                 exit (0);
12935         }       
12936         if (FILE_cnt(fp) == (cnt - 42)) {
12937                 puts("Pass_changed");
12938                 exit (0);
12939         }
12940         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12941         return 1;
12942
12943 }
12944 EOP
12945         set try
12946         if eval $compile && $to try.c; then
12947                 case `$run ./try` in
12948                 Pass_changed)
12949                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12950                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12951                 Pass_unchanged)
12952                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12953                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12954                 Fail*)
12955                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12956                 *)
12957                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12958         esac
12959         else
12960                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12961         fi
12962         $rm -f try.c try
12963         ;;
12964 esac
12965
12966 : see if _base is also standard
12967 val="$undef"
12968 case "$d_stdstdio" in
12969 $define)
12970         $cat >try.c <<EOP
12971 #include <stdio.h>
12972 #define FILE_base(fp)   $stdio_base
12973 #define FILE_bufsiz(fp) $stdio_bufsiz
12974 int main() {
12975         FILE *fp = fopen("try.c", "r");
12976         char c = getc(fp);
12977         if (
12978                 19 <= FILE_bufsiz(fp) &&
12979                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12980         )
12981                 exit(0);
12982         exit(1);
12983 }
12984 EOP
12985         set try
12986         if eval $compile && $to try.c; then
12987                 if $run ./try; then
12988                         echo "And its _base field acts std."
12989                         val="$define"
12990                 else
12991                         echo "But its _base field isn't std."
12992                 fi
12993         else
12994                 echo "However, it seems to be lacking the _base field."
12995         fi
12996         $rm -f try.c try
12997         ;;
12998 esac
12999 set d_stdiobase
13000 eval $setvar
13001
13002 $cat >&4 <<EOM
13003 Checking how to access stdio streams by file descriptor number...
13004 EOM
13005 case "$stdio_stream_array" in
13006 '')     $cat >try.c <<EOCP
13007 #include <stdio.h>
13008 int main() {
13009   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
13010     printf("yes\n");
13011 }
13012 EOCP
13013         for s in _iob __iob __sF
13014         do
13015                 set try -DSTDIO_STREAM_ARRAY=$s
13016                 if eval $compile; then
13017                         case "`$run ./try`" in
13018                         yes)    stdio_stream_array=$s; break ;;
13019                         esac
13020                 fi
13021         done
13022         $rm -f try.* try$exe_ext
13023 esac
13024 case "$stdio_stream_array" in
13025 '')     $cat >&4 <<EOM
13026 I can't figure out how to access stdio streams by file descriptor number.
13027 EOM
13028         d_stdio_stream_array="$undef"
13029         ;;
13030 *)      $cat >&4 <<EOM
13031 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
13032 EOM
13033         d_stdio_stream_array="$define"
13034         ;;
13035 esac
13036
13037 : see if strcoll exists
13038 set strcoll d_strcoll
13039 eval $inlibc
13040
13041 : check for structure copying
13042 echo " "
13043 echo "Checking to see if your C compiler can copy structs..." >&4
13044 $cat >try.c <<'EOCP'
13045 int main()
13046 {
13047         struct blurfl {
13048                 int dyick;
13049         } foo, bar;
13050
13051         foo = bar;
13052 }
13053 EOCP
13054 if $cc -c try.c >/dev/null 2>&1 ; then
13055         val="$define"
13056         echo "Yup, it can."
13057 else
13058         val="$undef"
13059         echo "Nope, it can't."
13060 fi
13061 set d_strctcpy
13062 eval $setvar
13063 $rm -f try.*
13064
13065 : see if strerror and/or sys_errlist[] exist
13066 echo " "
13067 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13068     if set strerror val -f d_strerror; eval $csym; $val; then
13069                 echo 'strerror() found.' >&4
13070                 d_strerror="$define"
13071                 d_strerrm='strerror(e)'
13072                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13073                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13074                         d_syserrlst="$define"
13075                 else
13076                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13077                         d_syserrlst="$undef"
13078                 fi
13079     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13080                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13081                 echo 'strerror() found in string header.' >&4
13082                 d_strerror="$define"
13083                 d_strerrm='strerror(e)'
13084                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13085                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13086                                 d_syserrlst="$define"
13087                 else
13088                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13089                         d_syserrlst="$undef"
13090                 fi
13091     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13092                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13093                 d_strerror="$undef"
13094                 d_syserrlst="$define"
13095                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13096     else
13097                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13098                 d_strerror="$undef"
13099                 d_syserrlst="$undef"
13100                 d_strerrm='"unknown"'
13101     fi
13102 fi
13103
13104 : see if strftime exists
13105 set strftime d_strftime
13106 eval $inlibc
13107
13108 : see if strtod exists
13109 set strtod d_strtod
13110 eval $inlibc
13111
13112 : see if strtol exists
13113 set strtol d_strtol
13114 eval $inlibc
13115
13116 : see if strtold exists
13117 set strtold d_strtold
13118 eval $inlibc
13119
13120 : see if strtoll exists
13121 set strtoll d_strtoll
13122 eval $inlibc
13123
13124 case "$d_longlong-$d_strtoll" in
13125 "$define-$define")
13126         $cat <<EOM
13127 Checking whether your strtoll() works okay...
13128 EOM
13129         $cat >try.c <<'EOCP'
13130 #include <errno.h>
13131 #ifdef __hpux
13132 #define strtoll __strtoll
13133 #endif
13134 #ifdef __EMX__
13135 #define strtoll _strtoll
13136 #endif
13137 #include <stdio.h>
13138 extern long long int strtoll(char *s, char **, int); 
13139 static int bad = 0;
13140 int check(char *s, long long ell, int een) {
13141         long long gll;
13142         errno = 0;
13143         gll = strtoll(s, 0, 10);
13144         if (!((gll == ell) && (errno == een)))
13145                 bad++;
13146 }
13147 int main() {
13148         check(" 1",                                      1LL, 0);
13149         check(" 0",                                      0LL, 0);
13150         check("-1",                                     -1LL, 0);
13151         check("-9223372036854775808", -9223372036854775808LL, 0);
13152         check("-9223372036854775808", -9223372036854775808LL, 0);
13153         check(" 9223372036854775807",  9223372036854775807LL, 0);
13154         check("-9223372036854775808", -9223372036854775808LL, 0);
13155         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13156         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13157         if (!bad)
13158                 printf("ok\n");
13159 }
13160 EOCP
13161         set try
13162         if eval $compile; then
13163                 yyy=`$run ./try`
13164                 case "$yyy" in
13165                 ok) echo "Your strtoll() seems to be working okay." ;;
13166                 *) cat <<EOM >&4
13167 Your strtoll() doesn't seem to be working okay.
13168 EOM
13169                    d_strtoll="$undef"
13170                    ;;
13171                 esac
13172         else
13173                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13174                 d_strtoll="$undef"
13175         fi
13176         ;;
13177 esac
13178
13179 : see if strtoq exists
13180 set strtoq d_strtoq
13181 eval $inlibc
13182
13183 : see if strtoul exists
13184 set strtoul d_strtoul
13185 eval $inlibc
13186
13187 case "$d_strtoul" in
13188 "$define")
13189         $cat <<EOM
13190 Checking whether your strtoul() works okay...
13191 EOM
13192         $cat >try.c <<'EOCP'
13193 #include <errno.h>
13194 #include <stdio.h>
13195 extern unsigned long int strtoul(char *s, char **, int); 
13196 static int bad = 0;
13197 void check(char *s, unsigned long eul, int een) {
13198         unsigned long gul;
13199         errno = 0;
13200         gul = strtoul(s, 0, 10);
13201         if (!((gul == eul) && (errno == een)))
13202                 bad++;
13203 }
13204 int main() {
13205         check(" 1", 1L, 0);
13206         check(" 0", 0L, 0);
13207 EOCP
13208         case "$longsize" in
13209         8)
13210             $cat >>try.c <<'EOCP'
13211         check("18446744073709551615", 18446744073709551615UL, 0);
13212         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13213 #if 0 /* strtoul() for /^-/ strings is undefined. */
13214         check("-1", 18446744073709551615UL, 0);
13215         check("-18446744073709551614", 2, 0);
13216         check("-18446744073709551615", 1, 0);
13217         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13218         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13219 #endif
13220 EOCP
13221                 ;;
13222         4)
13223                     $cat >>try.c <<'EOCP'
13224         check("4294967295", 4294967295UL, 0);
13225         check("4294967296", 4294967295UL, ERANGE);
13226 #if 0 /* strtoul() for /^-/ strings is undefined. */
13227         check("-1", 4294967295UL, 0);
13228         check("-4294967294", 2, 0);
13229         check("-4294967295", 1, 0);
13230         check("-4294967296", 4294967295UL, ERANGE);
13231         check("-4294967297", 4294967295UL, ERANGE);
13232 #endif
13233 EOCP
13234                 ;;
13235         *)
13236 : Should we write these tests to be more portable by sprintf-ing
13237 : ~0 and then manipulating that char string as input for strtol?
13238                 ;;
13239         esac
13240         $cat >>try.c <<'EOCP'
13241         if (!bad)
13242                 printf("ok\n");
13243         return 0;
13244 }
13245 EOCP
13246         set try
13247         if eval $compile; then
13248                 case "`$run ./try`" in
13249                 ok) echo "Your strtoul() seems to be working okay." ;;
13250                 *) cat <<EOM >&4
13251 Your strtoul() doesn't seem to be working okay.
13252 EOM
13253                    d_strtoul="$undef"
13254                    ;;
13255                 esac
13256         fi
13257         ;;
13258 esac
13259
13260 : see if strtoull exists
13261 set strtoull d_strtoull
13262 eval $inlibc
13263
13264 case "$d_longlong-$d_strtoull" in
13265 "$define-$define")
13266         $cat <<EOM
13267 Checking whether your strtoull() works okay...
13268 EOM
13269         $cat >try.c <<'EOCP'
13270 #include <errno.h>
13271 #ifdef __hpux
13272 #define strtoull __strtoull
13273 #endif
13274 #include <stdio.h>
13275 extern unsigned long long int strtoull(char *s, char **, int); 
13276 static int bad = 0;
13277 int check(char *s, long long eull, int een) {
13278         long long gull;
13279         errno = 0;
13280         gull = strtoull(s, 0, 10);
13281         if (!((gull == eull) && (errno == een)))
13282                 bad++;
13283 }
13284 int main() {
13285         check(" 1",                                        1LL, 0);
13286         check(" 0",                                        0LL, 0);
13287         check("18446744073709551615",  18446744073709551615ULL, 0);
13288         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13289 #if 0 /* strtoull() for /^-/ strings is undefined. */
13290         check("-1",                    18446744073709551615ULL, 0);
13291         check("-18446744073709551614",                     2LL, 0);
13292         check("-18446744073709551615",                     1LL, 0);
13293         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13294         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13295 #endif
13296         if (!bad)
13297                 printf("ok\n");
13298 }
13299 EOCP
13300         set try
13301         if eval $compile; then
13302                 case "`$run ./try`" in
13303                 ok) echo "Your strtoull() seems to be working okay." ;;
13304                 *) cat <<EOM >&4
13305 Your strtoull() doesn't seem to be working okay.
13306 EOM
13307                    d_strtoull="$undef"
13308                    ;;
13309                 esac
13310         fi
13311         ;;
13312 esac
13313
13314 : see if strtouq exists
13315 set strtouq d_strtouq
13316 eval $inlibc
13317
13318 case "$d_strtouq" in
13319 "$define")
13320         $cat <<EOM
13321 Checking whether your strtouq() works okay...
13322 EOM
13323         $cat >try.c <<'EOCP'
13324 #include <errno.h>
13325 #include <stdio.h>
13326 extern unsigned long long int strtouq(char *s, char **, int); 
13327 static int bad = 0;
13328 void check(char *s, unsigned long long eull, int een) {
13329         unsigned long long gull;
13330         errno = 0;
13331         gull = strtouq(s, 0, 10);
13332         if (!((gull == eull) && (errno == een)))
13333                 bad++;
13334 }
13335 int main() {
13336         check(" 1",                                        1LL, 0);
13337         check(" 0",                                        0LL, 0);
13338         check("18446744073709551615",  18446744073709551615ULL, 0);
13339         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13340 #if 0 /* strtouq() for /^-/ strings is undefined. */
13341         check("-1",                    18446744073709551615ULL, 0);
13342         check("-18446744073709551614",                     2LL, 0);
13343         check("-18446744073709551615",                     1LL, 0);
13344         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13345         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13346 #endif
13347         if (!bad)
13348                 printf("ok\n");
13349         return 0;
13350 }
13351 EOCP
13352         set try
13353         if eval $compile; then
13354                 case "`$run ./try`" in
13355                 ok) echo "Your strtouq() seems to be working okay." ;;
13356                 *) cat <<EOM >&4
13357 Your strtouq() doesn't seem to be working okay.
13358 EOM
13359                    d_strtouq="$undef"
13360                    ;;
13361                 esac
13362         fi
13363         ;;
13364 esac
13365
13366 : see if strxfrm exists
13367 set strxfrm d_strxfrm
13368 eval $inlibc
13369
13370 : see if symlink exists
13371 set symlink d_symlink
13372 eval $inlibc
13373
13374 : see if syscall exists
13375 set syscall d_syscall
13376 eval $inlibc
13377
13378 : see if prototype for syscall is available
13379 echo " "
13380 set d_syscallproto syscall $i_unistd unistd.h
13381 eval $hasproto
13382
13383 : see if sysconf exists
13384 set sysconf d_sysconf
13385 eval $inlibc
13386
13387 : see if system exists
13388 set system d_system
13389 eval $inlibc
13390
13391 : see if tcgetpgrp exists
13392 set tcgetpgrp d_tcgetpgrp
13393 eval $inlibc
13394
13395 : see if tcsetpgrp exists
13396 set tcsetpgrp d_tcsetpgrp
13397 eval $inlibc
13398
13399 : see if prototype for telldir is available
13400 echo " "
13401 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13402 eval $hasproto
13403
13404 : see if this is a sys/times.h system
13405 set sys/times.h i_systimes
13406 eval $inhdr
13407
13408 : see if times exists
13409 echo " "
13410 if set times val -f d_times; eval $csym; $val; then
13411         echo 'times() found.' >&4
13412         d_times="$define"
13413         inc=''
13414         case "$i_systimes" in
13415         "$define") inc='sys/times.h';;
13416         esac
13417         rp="What is the type returned by times() on this system?"
13418         set clock_t clocktype long stdio.h sys/types.h $inc
13419         eval $typedef_ask
13420 else
13421         echo 'times() NOT found, hope that will do.' >&4
13422         d_times="$undef"
13423         clocktype='int'
13424 fi
13425
13426 : see if truncate exists
13427 set truncate d_truncate
13428 eval $inlibc
13429
13430 : see if tzname[] exists
13431 echo " "
13432 if set tzname val -a d_tzname; eval $csym; $val; then
13433         val="$define"
13434         echo 'tzname[] found.' >&4
13435 else
13436         val="$undef"
13437         echo 'tzname[] NOT found.' >&4
13438 fi
13439 set d_tzname
13440 eval $setvar
13441
13442 case "$osname" in
13443 next|rhapsody|darwin) multiarch="$define" ;;
13444 esac
13445 case "$multiarch" in
13446 ''|[nN]*) multiarch="$undef" ;;
13447 esac
13448
13449 : check for ordering of bytes in a long
13450 echo " "
13451 case "$usecrosscompile$multiarch" in
13452 *$define*)
13453         $cat <<EOM
13454 You seem to be either cross-compiling or doing a multiarchitecture build,
13455 skipping the byteorder check.
13456
13457 EOM
13458         byteorder='ffff'
13459         ;;
13460 *)
13461         case "$byteorder" in
13462         '')
13463                 $cat <<'EOM'
13464 In the following, larger digits indicate more significance.  A big-endian
13465 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13466 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13467 machines may have weird orders like 3412.  A Cray will report 87654321,
13468 an Alpha will report 12345678. If the test program works the default is
13469 probably right.
13470 I'm now running the test program...
13471 EOM
13472                 $cat >try.c <<'EOCP'
13473 #include <stdio.h>
13474 int main()
13475 {
13476         int i;
13477         union {
13478                 unsigned long l;
13479                 char c[sizeof(long)];
13480         } u;
13481
13482         if (sizeof(long) > 4)
13483                 u.l = (0x08070605L << 32) | 0x04030201L;
13484         else
13485                 u.l = 0x04030201L;
13486         for (i = 0; i < sizeof(long); i++)
13487                 printf("%c", u.c[i]+'0');
13488         printf("\n");
13489         exit(0);
13490 }
13491 EOCP
13492                 xxx_prompt=y
13493                 set try
13494                 if eval $compile && ./try > /dev/null; then
13495                         dflt=`$run ./try`
13496                         case "$dflt" in
13497                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13498                                 echo "(The test program ran ok.)"
13499                                 echo "byteorder=$dflt"
13500                                 xxx_prompt=n
13501                         ;;
13502                         ????|????????) echo "(The test program ran ok.)" ;;
13503                         *) echo "(The test program didn't run right for some reason.)" ;;
13504                         esac
13505                 else
13506                         dflt='4321'
13507                         cat <<'EOM'
13508 (I can't seem to compile the test program.  Guessing big-endian...)
13509 EOM
13510                 fi
13511                 case "$xxx_prompt" in
13512                 y)
13513                         rp="What is the order of bytes in a long?"
13514                         . ./myread
13515                         byteorder="$ans"
13516                         ;;
13517                 *)      byteorder=$dflt
13518                         ;;
13519                 esac
13520                 ;;
13521         esac
13522         $rm -f try.c try
13523         ;;
13524 esac
13525
13526
13527 $cat <<EOM
13528
13529 Checking to see whether you can access character data unalignedly...
13530 EOM
13531 case "$d_u32align" in
13532 '')   $cat >try.c <<EOCP
13533 #include <stdio.h>
13534 #define U32 $u32type
13535 #define BYTEORDER 0x$byteorder
13536 #define U8 $u8type
13537 #include <signal.h>
13538 #ifdef SIGBUS
13539 $signal_t bletch(s) int s; { exit(4); }
13540 #endif
13541 int main() {
13542 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13543     U8 buf[8];
13544     U32 *up;
13545     int i;
13546
13547     if (sizeof(U32) != 4) {
13548         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13549         exit(1);
13550     }
13551
13552     fflush(stdout);
13553
13554 #ifdef SIGBUS
13555     signal(SIGBUS, bletch);
13556 #endif
13557
13558     buf[0] = 0;
13559     buf[1] = 0;
13560     buf[2] = 0;
13561     buf[3] = 1;
13562     buf[5] = 0;
13563     buf[6] = 0;
13564     buf[7] = 0;
13565     buf[8] = 1;
13566
13567     for (i = 0; i < 4; i++) {
13568         up = (U32*)(buf + i);
13569         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13570                (*up == 1 << (8*(3-i)))  /* little-endian */
13571               )
13572            )
13573         {
13574             printf("read failed (%x)\n", *up);
13575             exit(2);
13576         }
13577     }
13578
13579     /* write test */
13580     for (i = 0; i < 4; i++) {
13581         up = (U32*)(buf + i);
13582         *up = 0xBeef;
13583         if (*up != 0xBeef) {
13584             printf("write failed (%x)\n", *up);
13585             exit(3);
13586         }
13587     }
13588
13589     exit(0);
13590 #else
13591     printf("1\n");
13592     exit(1);
13593 #endif
13594     return 0;
13595 }
13596 EOCP
13597 set try
13598 if eval $compile_ok; then
13599         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13600         $run ./try 2>&1 >/dev/null
13601         case "$?" in
13602         0)      cat >&4 <<EOM
13603 You can access character data pretty unalignedly.
13604 EOM
13605                 d_u32align="$undef"
13606                 ;;
13607         *)      cat >&4 <<EOM
13608 It seems that you must access character data in an aligned manner.
13609 EOM
13610                 d_u32align="$define"
13611                 ;;
13612         esac
13613 else
13614         rp='Can you access character data at unaligned addresses?'
13615         dflt='n'
13616         . ./myread
13617         case "$ans" in
13618         [yY]*)  d_u32align="$undef"  ;;
13619         *)      d_u32align="$define" ;;
13620         esac
13621 fi
13622 $rm -f core core.try.* try.core
13623 ;;
13624 esac
13625
13626 : see if ualarm exists
13627 set ualarm d_ualarm
13628 eval $inlibc
13629
13630 : see if umask exists
13631 set umask d_umask
13632 eval $inlibc
13633
13634 : see if unordered exists
13635 set unordered d_unordered
13636 eval $inlibc
13637
13638 : see if usleep exists
13639 set usleep d_usleep
13640 eval $inlibc
13641
13642 : see if prototype for usleep is available
13643 echo " "
13644 set d_usleepproto usleep $i_unistd unistd.h
13645 eval $hasproto
13646
13647 : see if ustat exists
13648 set ustat d_ustat
13649 eval $inlibc
13650
13651 : backward compatibility for d_hvfork
13652 if test X$d_hvfork != X; then
13653         d_vfork="$d_hvfork"
13654         d_hvfork=''
13655 fi
13656 : see if there is a vfork
13657 val=''
13658 set vfork val
13659 eval $inlibc
13660
13661 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13662 : perl on Solaris 2.x, and probably elsewhere.
13663 case "$val" in
13664 $define)
13665         echo " "
13666         case "$usevfork" in
13667         false) dflt='n';;
13668         *) dflt='y';;
13669         esac
13670         cat <<'EOM'
13671  
13672 Perl can only use a vfork() that doesn't suffer from strict
13673 restrictions on calling functions or modifying global data in
13674 the child.  For example, glibc-2.1 contains such a vfork()
13675 that is unsuitable.  If your system provides a proper fork()
13676 call, chances are that you do NOT want perl to use vfork().
13677
13678 EOM
13679         rp="Do you still want to use vfork()?"
13680         . ./myread
13681         case "$ans" in
13682         y|Y) ;;
13683         *)
13684                 echo "Ok, we won't use vfork()."
13685                 val="$undef"
13686                 ;;
13687         esac
13688         ;;
13689 esac
13690 set d_vfork
13691 eval $setvar
13692 case "$d_vfork" in
13693 $define) usevfork='true';;
13694 *) usevfork='false';;
13695 esac
13696
13697 : see if closedir exists
13698 set closedir d_closedir
13699 eval $inlibc
13700
13701 case "$d_closedir" in
13702 "$define")
13703         echo " "
13704         echo "Checking whether closedir() returns a status..." >&4
13705         cat > try.c <<EOM
13706 #$i_dirent I_DIRENT             /**/
13707 #$i_sysdir I_SYS_DIR            /**/
13708 #$i_sysndir I_SYS_NDIR          /**/
13709 #$i_systypes I_SYS_TYPES        /**/
13710
13711 #if defined(I_SYS_TYPES)
13712 #include <sys/types.h>
13713 #endif
13714 #if defined(I_DIRENT)
13715 #include <dirent.h>
13716 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13717 #include <sys/dir.h>
13718 #endif
13719 #else
13720 #ifdef I_SYS_NDIR
13721 #include <sys/ndir.h>
13722 #else
13723 #ifdef I_SYS_DIR
13724 #ifdef hp9000s500
13725 #include <ndir.h>       /* may be wrong in the future */
13726 #else
13727 #include <sys/dir.h>
13728 #endif
13729 #endif
13730 #endif
13731 #endif 
13732 int main() { return closedir(opendir(".")); }
13733 EOM
13734         set try
13735         if eval $compile_ok; then
13736                 if $run ./try > /dev/null 2>&1 ; then
13737                         echo "Yes, it does."
13738                         val="$undef"
13739                 else
13740                         echo "No, it doesn't."
13741                         val="$define"
13742                 fi
13743         else
13744                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13745                 val="$define"
13746         fi
13747         ;;
13748 *)
13749         val="$undef";
13750         ;;
13751 esac
13752 set d_void_closedir
13753 eval $setvar
13754 $rm -f try try.*
13755 : see if there is a wait4
13756 set wait4 d_wait4
13757 eval $inlibc
13758
13759 : see if waitpid exists
13760 set waitpid d_waitpid
13761 eval $inlibc
13762
13763 : see if wcstombs exists
13764 set wcstombs d_wcstombs
13765 eval $inlibc
13766
13767 : see if wctomb exists
13768 set wctomb d_wctomb
13769 eval $inlibc
13770
13771 : see if writev exists
13772 set writev d_writev
13773 eval $inlibc
13774
13775 : preserve RCS keywords in files with variable substitution, grrr
13776 Date='$Date'
13777 Id='$Id'
13778 Log='$Log'
13779 RCSfile='$RCSfile'
13780 Revision='$Revision'
13781
13782 : check for alignment requirements
13783 echo " "
13784 case "$usecrosscompile$multiarch" in
13785 *$define*)
13786         $cat <<EOM
13787 You seem to be either cross-compiling or doing a multiarchitecture build,
13788 skipping the memory alignment check.
13789
13790 EOM
13791         case "$alignbytes" in
13792         '') alignbytes=8 ;;
13793         esac
13794         ;;
13795 *)
13796         case "$alignbytes" in
13797         '') echo "Checking alignment constraints..." >&4
13798                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13799                         $cat >try.c <<'EOCP'
13800 typedef long double NV;
13801 EOCP
13802                 else
13803                         $cat >try.c <<'EOCP'
13804 typedef double NV;
13805 EOCP
13806                 fi
13807                 $cat >>try.c <<'EOCP'
13808 #include <stdio.h>
13809 struct foobar {
13810         char foo;
13811         NV bar;
13812 } try_algn;
13813 int main()
13814 {
13815     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13816     return(0);
13817 }
13818 EOCP
13819                 set try
13820                 if eval $compile_ok; then
13821                         dflt=`$run ./try`
13822                 else
13823                         dflt='8'
13824                         echo "(I can't seem to compile the test program...)"
13825                 fi
13826                 ;;
13827         *) dflt="$alignbytes"
13828                 ;;
13829         esac
13830         rp="Doubles must be aligned on a how-many-byte boundary?"
13831         . ./myread
13832         alignbytes="$ans"
13833         $rm -f try.c try
13834         ;;
13835 esac
13836
13837
13838 : set the base revision
13839 baserev=5.0
13840
13841 : how do we catenate cpp tokens here?
13842 echo " "
13843 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13844 $cat >cpp_stuff.c <<'EOCP'
13845 #define RCAT(a,b)a/**/b
13846 #define ACAT(a,b)a ## b
13847 RCAT(Rei,ser)
13848 ACAT(Cir,cus)
13849 EOCP
13850 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13851 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13852         echo "Oh!  Smells like ANSI's been here." >&4
13853         echo "We can catify or stringify, separately or together!"
13854         cpp_stuff=42
13855 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13856         echo "Ah, yes!  The good old days!" >&4
13857         echo "However, in the good old days we don't know how to stringify and"
13858         echo "catify at the same time."
13859         cpp_stuff=1
13860 else
13861         $cat >&4 <<EOM
13862 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13863 to have to edit the values of CAT[2-5] in config.h...
13864 EOM
13865         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13866 fi
13867 $rm -f cpp_stuff.*
13868
13869 : see if this is a db.h system
13870 set db.h i_db
13871 eval $inhdr
13872
13873 case "$i_db" in
13874 $define)
13875         : Check db version.
13876         echo " "
13877         echo "Checking Berkeley DB version ..." >&4
13878         $cat >try.c <<EOCP
13879 #$d_const HASCONST
13880 #ifndef HASCONST
13881 #define const
13882 #endif
13883 #include <sys/types.h>
13884 #include <stdio.h>
13885 #include <db.h>
13886 int main(int argc, char *argv[])
13887 {
13888 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13889     int Major, Minor, Patch ;
13890     unsigned long Version ;
13891     (void)db_version(&Major, &Minor, &Patch) ;
13892     if (argc == 2) {
13893         printf("%d %d %d %d %d %d\n",
13894                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13895                Major, Minor, Patch);
13896         exit(0);
13897     }
13898     printf("You have Berkeley DB Version 2 or greater.\n");
13899
13900     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13901                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13902     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13903                 Major, Minor, Patch) ;
13904
13905     /* check that db.h & libdb are compatible */
13906     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13907         printf("db.h and libdb are incompatible.\n") ;
13908         exit(3);        
13909     }
13910
13911     printf("db.h and libdb are compatible.\n") ;
13912
13913     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13914                 + DB_VERSION_PATCH ;
13915
13916     /* needs to be >= 2.3.4 */
13917     if (Version < 2003004) {
13918     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13919         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13920         exit(2);        
13921     }
13922
13923     exit(0);
13924 #else
13925 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13926     if (argc == 2) {
13927         printf("1 0 0\n");
13928         exit(0);
13929     }
13930     printf("You have Berkeley DB Version 1.\n");
13931     exit(0);    /* DB version < 2: the coast is clear. */
13932 #else
13933     exit(1);    /* <db.h> not Berkeley DB? */
13934 #endif
13935 #endif
13936 }
13937 EOCP
13938         set try
13939         if eval $compile_ok && $run ./try; then
13940                 echo 'Looks OK.' >&4
13941                 set `$run ./try 1`
13942                 db_version_major=$1
13943                 db_version_minor=$2
13944                 db_version_patch=$3
13945         else
13946                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13947                 i_db=$undef
13948                 case " $libs " in
13949                 *"-ldb "*)
13950                         : Remove db from list of libraries to use
13951                         echo "Removing unusable -ldb from library list" >&4
13952                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13953                         shift
13954                         libs="$*"
13955                         echo "libs = $libs" >&4
13956                         ;;
13957                 esac
13958         fi
13959         $rm -f try.*
13960         ;;
13961 esac
13962
13963 case "$i_db" in
13964 define)
13965         : Check the return type needed for hash 
13966         echo " "
13967         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13968         $cat >try.c <<EOCP
13969 #$d_const HASCONST
13970 #ifndef HASCONST
13971 #define const
13972 #endif
13973 #include <sys/types.h>
13974 #include <db.h>
13975
13976 #ifndef DB_VERSION_MAJOR
13977 u_int32_t hash_cb (ptr, size)
13978 const void *ptr;
13979 size_t size;
13980 {
13981 }
13982 HASHINFO info;
13983 int main()
13984 {
13985         info.hash = hash_cb;
13986 }
13987 #endif
13988 EOCP
13989         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13990                 if $contains warning try.out >>/dev/null 2>&1 ; then
13991                         db_hashtype='int'
13992                 else
13993                         db_hashtype='u_int32_t'
13994                 fi
13995         else
13996                 : XXX Maybe we should just give up here.
13997                 db_hashtype=u_int32_t
13998                 $cat try.out >&4
13999                 echo "Help:  I can't seem to compile the db test program." >&4
14000                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
14001         fi
14002         $rm -f try.*
14003         echo "Your version of Berkeley DB uses $db_hashtype for hash."
14004         ;;
14005 *)      db_hashtype=u_int32_t
14006         ;;
14007 esac
14008 case "$i_db" in
14009 define)
14010         : Check the return type needed for prefix 
14011         echo " "
14012         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
14013         cat >try.c <<EOCP
14014 #$d_const HASCONST
14015 #ifndef HASCONST
14016 #define const
14017 #endif
14018 #include <sys/types.h>
14019 #include <db.h>
14020
14021 #ifndef DB_VERSION_MAJOR
14022 size_t prefix_cb (key1, key2)
14023 const DBT *key1;
14024 const DBT *key2;
14025 {
14026 }
14027 BTREEINFO info;
14028 int main()
14029 {
14030         info.prefix = prefix_cb;
14031 }
14032 #endif
14033 EOCP
14034         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
14035                 if $contains warning try.out >>/dev/null 2>&1 ; then
14036                         db_prefixtype='int'
14037                 else
14038                         db_prefixtype='size_t'
14039                 fi
14040         else
14041                 db_prefixtype='size_t'
14042                 : XXX Maybe we should just give up here.
14043                 $cat try.out >&4
14044                 echo "Help:  I can't seem to compile the db test program." >&4
14045                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
14046         fi
14047         $rm -f try.*
14048         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
14049         ;;
14050 *)      db_prefixtype='size_t'
14051         ;;
14052 esac
14053
14054
14055 : How can we generate normalized random numbers ?
14056 echo " "
14057 echo "Looking for a random number function..." >&4
14058 case "$randfunc" in
14059 '')
14060         if set drand48 val -f; eval $csym; $val; then
14061                 dflt="drand48"
14062                 echo "Good, found drand48()." >&4
14063         elif set random val -f; eval $csym; $val; then
14064                 dflt="random"
14065                 echo "OK, found random()." >&4
14066         else
14067                 dflt="rand"
14068                 echo "Yick, looks like I have to use rand()." >&4
14069         fi
14070         echo " "
14071         ;;
14072 *)
14073         dflt="$randfunc"
14074         ;;
14075 esac
14076 cont=true
14077
14078 case "$ccflags" in
14079 *-Dmy_rand=*|*-Dmy_srand=*)
14080         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14081         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14082         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14083         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14084         ;;
14085 esac
14086
14087 while $test "$cont"; do
14088         rp="Use which function to generate random numbers?"
14089         . ./myread
14090         if $test "$ans" = "$dflt"; then
14091                 : null
14092         else
14093                 randbits=''
14094         fi
14095         randfunc="$ans"
14096         if set $ans val -f; eval $csym; $val; then
14097                 cont=''
14098         else
14099                 dflt=y
14100                 rp="I cannot find function $ans. Use that name anyway?"
14101                 . ./myread
14102                 dflt=rand
14103                 case "$ans" in
14104                         [yY]*) cont='';;
14105                 esac
14106         fi
14107         case "$cont" in
14108         '')
14109                 case "$randfunc" in
14110                 drand48)
14111                         drand01="drand48()"
14112                         seedfunc="srand48"
14113                         randbits=48
14114                         randseedtype=long
14115                         ;;
14116                 rand|random)
14117                         case "$randbits" in
14118                         '')
14119 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14120                                 $cat >try.c <<EOCP
14121 #$i_unistd I_UNISTD
14122 #$i_stdlib I_STDLIB
14123 #include <stdio.h>
14124 #ifdef I_UNISTD
14125 #  include <unistd.h>
14126 #endif
14127 #ifdef I_STDLIB
14128 #  include <stdlib.h>
14129 #endif
14130 int main()
14131 {
14132         register int i;
14133         register unsigned long tmp;
14134         register unsigned long max = 0L;
14135
14136         for (i = 1000; i; i--) {
14137                 tmp = (unsigned long) $randfunc();
14138                 if (tmp > max) max = tmp;
14139         }
14140         for (i = 0; max; i++)
14141                 max /= 2;
14142         printf("%d\n",i);
14143 }
14144 EOCP
14145                                 set try
14146                                 if eval $compile_ok; then
14147                                         dflt=`try`
14148                                 else
14149                                         dflt='?'
14150                                         echo "(I can't seem to compile the test program...)"
14151                                 fi
14152                                 ;;
14153                         *)
14154                                 dflt="$randbits"
14155                                 ;;
14156                         esac
14157                         rp="How many bits does your $randfunc() function produce?"
14158                         . ./myread
14159                         randbits="$ans"
14160                         $rm -f try.c try
14161                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14162                         seedfunc="s$randfunc"
14163                         randseedtype=unsigned
14164                         ;;
14165                 *)
14166                         dflt="31"
14167                         rp="How many bits does your $randfunc() function produce?"
14168                         . ./myread
14169                         randbits="$ans"
14170                         seedfunc="s$randfunc"
14171                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14172                         if set $seedfunc val -f; eval $csym; $val; then
14173                                 echo "(Using $seedfunc() to seed random generator)"
14174                         else
14175                                 echo "(Warning: no $seedfunc() to seed random generator)"
14176                                 seedfunc=rand
14177                         fi
14178                         randseedtype=unsigned
14179                         ;;
14180                 esac
14181                 ;;
14182         esac
14183 done
14184
14185 echo " "
14186 echo "Determining whether or not we are on an EBCDIC system..." >&4
14187 $cat >try.c <<'EOM'
14188 int main()
14189 {
14190   if ('M'==0xd4) return 0;
14191   return 1;
14192 }
14193 EOM
14194
14195 val=$undef
14196 set try
14197 if eval $compile_ok; then
14198         if $run ./try; then
14199                 echo "You seem to speak EBCDIC." >&4
14200                 val="$define"
14201         else
14202                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14203         fi
14204 else
14205         echo "I'm unable to compile the test program." >&4
14206         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14207 fi
14208 $rm -f try try.*
14209 set ebcdic
14210 eval $setvar
14211
14212 echo " "
14213 $cat >&4 <<EOM
14214 Checking how to flush all pending stdio output...
14215 EOM
14216 # I only know how to find the first 32 possibly open files on SunOS.
14217 # See also hints/sunos_4_1.sh and util.c  --AD
14218 case "$osname" in
14219 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14220 esac
14221 $cat >>try.c <<EOCP
14222 #include <stdio.h>
14223 #$i_unistd I_UNISTD
14224 #ifdef I_UNISTD
14225 # include <unistd.h>
14226 #endif
14227 #$d_sysconf HAS_SYSCONF
14228 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14229 #ifdef HAS_STDIO_STREAM_ARRAY
14230 # define STDIO_STREAM_ARRAY $stdio_stream_array
14231 #endif
14232 int main() {
14233   FILE* p;
14234   unlink("try.out");
14235   p = fopen("try.out", "w");
14236 #ifdef TRY_FPUTC
14237   fputc('x', p);
14238 #else
14239 # ifdef TRY_FPRINTF
14240   fprintf(p, "x");
14241 # endif
14242 #endif
14243 #ifdef TRY_FFLUSH_NULL
14244   fflush(NULL);
14245 #endif
14246 #ifdef TRY_FFLUSH_ALL
14247   {
14248     long open_max = -1;
14249 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14250     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14251 # else
14252 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14253     open_max = sysconf(_SC_OPEN_MAX);
14254 #  else
14255 #   ifdef FOPEN_MAX
14256     open_max = FOPEN_MAX;
14257 #   else
14258 #    ifdef OPEN_MAX
14259     open_max = OPEN_MAX;
14260 #    else
14261 #     ifdef _NFILE
14262     open_max = _NFILE;
14263 #     endif
14264 #    endif
14265 #   endif
14266 #  endif
14267 # endif 
14268 # ifdef HAS_STDIO_STREAM_ARRAY
14269     if (open_max > 0) {
14270       long i;
14271       for (i = 0; i < open_max; i++)
14272             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14273                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14274                 STDIO_STREAM_ARRAY[i]._flag)
14275                 fflush(&STDIO_STREAM_ARRAY[i]);
14276     }   
14277   }
14278 # endif
14279 #endif
14280   _exit(42);
14281 }
14282 EOCP
14283 : first we have to find out how _not_ to flush
14284 $to try.c
14285 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14286     output=''
14287     set try -DTRY_FPUTC
14288     if eval $compile; then
14289             $run ./try 2>/dev/null
14290             code="$?"
14291             $from try.out
14292             if $test ! -s try.out -a "X$code" = X42; then
14293                 output=-DTRY_FPUTC
14294             fi
14295     fi
14296     case "$output" in
14297     '')
14298             set try -DTRY_FPRINTF
14299             if eval $compile; then
14300                     $run ./try 2>/dev/null
14301                     code="$?"
14302                     $from try.out
14303                     if $test ! -s try.out -a "X$code" = X42; then
14304                         output=-DTRY_FPRINTF
14305                     fi
14306             fi
14307         ;;
14308     esac
14309 fi
14310 : check for fflush NULL behaviour
14311 case "$fflushNULL" in
14312 '')     set try -DTRY_FFLUSH_NULL $output
14313         if eval $compile; then
14314                 $run ./try 2>/dev/null
14315                 code="$?"
14316                 $from try.out
14317                 if $test -s try.out -a "X$code" = X42; then
14318                         fflushNULL="`$cat try.out`"
14319                 else
14320                         if $test "X$code" != X42; then
14321                                 $cat >&4 <<EOM
14322 (If this test failed, don't worry, we'll try another method shortly.)
14323 EOM
14324                         fi
14325                 fi
14326         fi
14327         $rm -f core try.core core.try.*
14328         case "$fflushNULL" in
14329         x)      $cat >&4 <<EOM
14330 Your fflush(NULL) works okay for output streams.
14331 Let's see if it clobbers input pipes...
14332 EOM
14333 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14334 # bug that improperly flushes the input end of pipes.  So we avoid the
14335 # autoflush on fork/system/exec support for now. :-(
14336 $cat >tryp.c <<EOCP
14337 #include <stdio.h>
14338 int
14339 main(int argc, char **argv)
14340 {
14341     char buf[1024];
14342     int i;
14343     char *bp = buf;
14344     while (1) {
14345         while ((i = getc(stdin)) != -1
14346                && (*bp++ = i) != '\n'
14347                && bp < &buf[1024])
14348         /* DO NOTHING */ ;
14349         *bp = '\0';
14350         fprintf(stdout, "%s", buf);
14351         fflush(NULL);
14352         if (i == -1)
14353             return 0;
14354         bp = buf;
14355     }
14356 }
14357 EOCP
14358                 fflushNULL="$define"
14359                 set tryp
14360                 if eval $compile; then
14361                     $rm -f tryp.out
14362                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14363                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14364                        $cat >&4 <<EOM
14365 fflush(NULL) seems to behave okay with input streams.
14366 EOM
14367                         fflushNULL="$define"
14368                     else
14369                         $cat >&4 <<EOM
14370 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14371 EOM
14372                         fflushNULL="$undef"
14373                     fi
14374                 fi
14375                 $rm -f core tryp.c tryp.core core.tryp.*
14376                 ;;
14377         '')     $cat >&4 <<EOM
14378 Your fflush(NULL) isn't working (contrary to ANSI C).
14379 EOM
14380                 fflushNULL="$undef"
14381                 ;;
14382         *)      $cat >&4 <<EOM
14383 Cannot figure out whether your fflush(NULL) works or not.
14384 I'm assuming it doesn't (contrary to ANSI C).
14385 EOM
14386                 fflushNULL="$undef"
14387                 ;;
14388         esac
14389         ;;
14390 $define|true|[yY]*)
14391         fflushNULL="$define"
14392         ;;
14393 *)
14394         fflushNULL="$undef"
14395         ;;
14396 esac
14397 : check explicit looping only if NULL did not work, and if the pipe
14398 : bug does not show up on an explicit flush too
14399 case "$fflushNULL" in
14400 "$undef")
14401         $cat >tryp.c <<EOCP
14402 #include <stdio.h>
14403 int
14404 main(int argc, char **argv)
14405 {
14406     char buf[1024];
14407     int i;
14408     char *bp = buf;
14409     while (1) {
14410         while ((i = getc(stdin)) != -1
14411                && (*bp++ = i) != '\n'
14412                && bp < &buf[1024])
14413         /* DO NOTHING */ ;
14414         *bp = '\0';
14415         fprintf(stdout, "%s", buf);
14416         fflush(stdin);
14417         if (i == -1)
14418             return 0;
14419         bp = buf;
14420     }
14421 }
14422 EOCP
14423         set tryp
14424         if eval $compile; then
14425             $rm -f tryp.out
14426             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14427             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14428                $cat >&4 <<EOM
14429 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14430 EOM
14431                 : now check for fflushall behaviour
14432                 case "$fflushall" in
14433                 '')     set try -DTRY_FFLUSH_ALL $output
14434                         if eval $compile; then
14435                                 $cat >&4 <<EOM
14436 (Now testing the other method--but note that this also may fail.)
14437 EOM
14438                                 $run ./try 2>/dev/null
14439                                 code=$?
14440                                 $from try.out
14441                                 if $test -s try.out -a "X$code" = X42; then
14442                                         fflushall="`$cat try.out`"
14443                                 fi
14444                         fi
14445                         $rm -f core try.core core.try.*
14446                         case "$fflushall" in
14447                         x)      $cat >&4 <<EOM
14448 Whew. Flushing explicitly all the stdio streams works.
14449 EOM
14450                                 fflushall="$define"
14451                                 ;;
14452                         '')     $cat >&4 <<EOM
14453 Sigh. Flushing explicitly all the stdio streams doesn't work.
14454 EOM
14455                                 fflushall="$undef"
14456                                 ;;
14457                         *)      $cat >&4 <<EOM
14458 Cannot figure out whether flushing stdio streams explicitly works or not.
14459 I'm assuming it doesn't.
14460 EOM
14461                                 fflushall="$undef"
14462                                 ;;
14463                         esac
14464                         ;;
14465                 "$define"|true|[yY]*)
14466                         fflushall="$define"
14467                         ;;
14468                 *)
14469                         fflushall="$undef"
14470                         ;;
14471                 esac
14472             else
14473                 $cat >&4 <<EOM
14474 All is futile.  Even fflush(stdin) clobbers input pipes!
14475 EOM
14476                 fflushall="$undef"
14477             fi
14478         else
14479             fflushall="$undef"
14480         fi
14481         $rm -f core tryp.c tryp.core core.tryp.*
14482         ;;
14483 *)      fflushall="$undef"
14484         ;;
14485 esac
14486
14487 case "$fflushNULL$fflushall" in
14488 undefundef)
14489         $cat <<EOM
14490 OK, I give up.  I cannot figure out how to flush pending stdio output.
14491 We won't be flushing handles at all before fork/exec/popen.
14492 EOM
14493         ;;
14494 esac
14495 $rm -f try.* try$exe_ext
14496
14497 : Store the full pathname to the ar program for use in the C program
14498 : Respect a hint or command line value for full_ar.
14499 case "$full_ar" in
14500 '') full_ar=$ar ;;
14501 esac
14502
14503 : Store the full pathname to the sed program for use in the C program
14504 full_sed=$sed
14505
14506 : see what type gids are declared as in the kernel
14507 echo " "
14508 echo "Looking for the type for group ids returned by getgid()."
14509 set gid_t gidtype xxx stdio.h sys/types.h
14510 eval $typedef
14511 case "$gidtype" in
14512 xxx)
14513         xxx=`./findhdr sys/user.h`
14514         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14515         case $1 in
14516         unsigned) dflt="$1 $2" ;;
14517         *) dflt="$1" ;;
14518         esac
14519         ;;
14520 *) dflt="$gidtype";;
14521 esac
14522 case "$gidtype" in
14523 gid_t) echo "gid_t found." ;;
14524 *)      rp="What is the type for group ids returned by getgid()?"
14525         . ./myread
14526         gidtype="$ans"
14527         ;;
14528 esac
14529
14530 echo " "
14531 case "$gidtype" in
14532 *_t) zzz="$gidtype"     ;;
14533 *)   zzz="gid"          ;;
14534 esac
14535 echo "Checking the size of $zzz..." >&4 
14536 cat > try.c <<EOCP
14537 #include <sys/types.h>
14538 #include <stdio.h>
14539 int main() {
14540     printf("%d\n", (int)sizeof($gidtype));
14541     exit(0);
14542 }
14543 EOCP
14544 set try
14545 if eval $compile_ok; then
14546         yyy=`$run ./try`
14547         case "$yyy" in
14548         '')     gidsize=4
14549                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14550                 ;;
14551         *)      gidsize=$yyy
14552                 echo "Your $zzz is $gidsize bytes long."
14553                 ;;
14554         esac
14555 else
14556         gidsize=4
14557         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14558 fi
14559
14560
14561 echo " "
14562 case "$gidtype" in
14563 *_t) zzz="$gidtype"     ;;
14564 *)   zzz="gid"          ;;
14565 esac
14566 echo "Checking the sign of $zzz..." >&4 
14567 cat > try.c <<EOCP
14568 #include <sys/types.h>
14569 #include <stdio.h>
14570 int main() {
14571         $gidtype foo = -1;
14572         if (foo < 0)
14573                 printf("-1\n");
14574         else
14575                 printf("1\n");
14576 }
14577 EOCP
14578 set try
14579 if eval $compile; then
14580         yyy=`$run ./try`
14581         case "$yyy" in
14582         '')     gidsign=1
14583                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14584                 ;;
14585         *)      gidsign=$yyy
14586                 case "$gidsign" in
14587                  1) echo "Your $zzz is unsigned." ;;
14588                 -1) echo "Your $zzz is signed."   ;;
14589                 esac
14590                 ;;
14591         esac
14592 else
14593         gidsign=1
14594         echo "(I can't compile the test program--guessing unsigned.)" >&4
14595 fi
14596
14597
14598 echo " "
14599
14600 if $test X"$quadtype" != X; then
14601
14602 echo "Checking how to print 64-bit integers..." >&4
14603
14604 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14605         $cat >try.c <<'EOCP'
14606 #include <sys/types.h>
14607 #include <stdio.h>
14608 int main() {
14609   int q = 12345678901;
14610   printf("%ld\n", q);
14611 }
14612 EOCP
14613         set try
14614         if eval $compile; then
14615                 yyy=`$run ./try`
14616                 case "$yyy" in
14617                 12345678901)
14618                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14619                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14620                         echo "We will use %d."
14621                         ;;
14622                 esac
14623         fi
14624 fi
14625
14626 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14627         $cat >try.c <<'EOCP'
14628 #include <sys/types.h>
14629 #include <stdio.h>
14630 int main() {
14631   long q = 12345678901;
14632   printf("%ld\n", q);
14633 }
14634 EOCP
14635         set try
14636         if eval $compile; then
14637                 yyy=`$run ./try`
14638                 case "$yyy" in
14639                 12345678901)
14640                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14641                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14642                         echo "We will use %ld."
14643                         ;;
14644                 esac
14645         fi
14646 fi
14647
14648 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14649         $cat >try.c <<'EOCP'
14650 #include <sys/types.h>
14651 #include <inttypes.h>
14652 #include <stdio.h>
14653 int main() {
14654   int64_t q = 12345678901;
14655   printf("%" PRId64 "\n", q);
14656 }
14657 EOCP
14658         set try
14659         if eval $compile; then
14660                 yyy=`$run ./try`
14661                 case "$yyy" in
14662                 12345678901)
14663                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14664                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14665                         echo "We will use the C9X style."
14666                         ;;
14667                 esac
14668         fi
14669 fi
14670
14671 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14672         $cat >try.c <<EOCP
14673 #include <sys/types.h>
14674 #include <stdio.h>
14675 int main() {
14676   $quadtype q = 12345678901;
14677   printf("%Ld\n", q);
14678 }
14679 EOCP
14680         set try
14681         if eval $compile; then
14682                 yyy=`$run ./try`
14683                 case "$yyy" in
14684                 12345678901)
14685                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14686                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14687                         echo "We will use %Ld."
14688                         ;;
14689                 esac
14690         fi
14691 fi
14692
14693 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14694         $cat >try.c <<'EOCP'
14695 #include <sys/types.h>
14696 #include <stdio.h>
14697 int main() {
14698   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14699   printf("%lld\n", q);
14700 }
14701 EOCP
14702         set try
14703         if eval $compile; then
14704                 yyy=`$run ./try`
14705                 case "$yyy" in
14706                 12345678901)
14707                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14708                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14709                         echo "We will use the %lld style."
14710                         ;;
14711                 esac
14712         fi
14713 fi
14714
14715 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14716         $cat >try.c <<EOCP
14717 #include <sys/types.h>
14718 #include <stdio.h>
14719 int main() {
14720   $quadtype q = 12345678901;
14721   printf("%qd\n", q);
14722 }
14723 EOCP
14724         set try
14725         if eval $compile; then
14726                 yyy=`$run ./try`
14727                 case "$yyy" in
14728                 12345678901)
14729                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14730                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14731                         echo "We will use %qd."
14732                         ;;
14733                 esac
14734         fi
14735 fi
14736
14737 if $test X"$sPRId64" = X; then
14738         echo "Cannot figure out how to print 64-bit integers." >&4
14739 fi
14740
14741 $rm -f try try.*
14742
14743 fi
14744
14745 case "$sPRId64" in
14746 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14747         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14748         ;;
14749 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14750         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14751         ;;
14752 esac
14753
14754
14755 echo " "
14756 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14757
14758 if $test X"$ivsize" = X8; then
14759         ivdformat="$sPRId64"
14760         uvuformat="$sPRIu64"
14761         uvoformat="$sPRIo64"
14762         uvxformat="$sPRIx64"
14763         uvXUformat="$sPRIXU64"
14764 else
14765         if $test X"$ivsize" = X"$longsize"; then
14766                 ivdformat='"ld"'
14767                 uvuformat='"lu"'
14768                 uvoformat='"lo"'
14769                 uvxformat='"lx"'
14770                 uvXUformat='"lX"'
14771         else
14772                 if $test X"$ivsize" = X"$intsize"; then
14773                         ivdformat='"d"'
14774                         uvuformat='"u"'
14775                         uvoformat='"o"'
14776                         uvxformat='"x"'
14777                         uvXUformat='"X"'
14778                 else
14779                         : far out
14780                         if $test X"$ivsize" = X"$shortsize"; then
14781                                 ivdformat='"hd"'
14782                                 uvuformat='"hu"'
14783                                 uvoformat='"ho"'
14784                                 uvxformat='"hx"'
14785                                 uvXUformat='"hX"'
14786                         fi
14787                 fi
14788         fi
14789 fi
14790
14791 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14792         nveformat="$sPRIeldbl"
14793         nvfformat="$sPRIfldbl"
14794         nvgformat="$sPRIgldbl"
14795         nvEUformat="$sPRIEUldbl"
14796         nvFUformat="$sPRIFUldbl"
14797         nvGUformat="$sPRIGUldbl"
14798 else
14799         nveformat='"e"'
14800         nvfformat='"f"'
14801         nvgformat='"g"'
14802         nvEUformat='"E"'
14803         nvFUformat='"F"'
14804         nvGUformat='"G"'
14805 fi
14806
14807 case "$ivdformat" in
14808 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14809     exit 1
14810     ;;
14811 esac
14812
14813
14814 echo " "
14815 $echo "Checking the format string to be used for gids..." >&4
14816
14817 case "$gidsign" in
14818 -1)     if $test X"$gidsize" = X"$ivsize"; then
14819                 gidformat="$ivdformat"
14820         else
14821                 if $test X"$gidsize" = X"$longsize"; then
14822                         gidformat='"ld"'
14823                 else
14824                         if $test X"$gidsize" = X"$intsize"; then
14825                                 gidformat='"d"'
14826                         else
14827                                 if $test X"$gidsize" = X"$shortsize"; then
14828                                         gidformat='"hd"'
14829                                 fi
14830                         fi
14831                 fi
14832         fi
14833         ;;
14834 *)      if $test X"$gidsize" = X"$uvsize"; then
14835                 gidformat="$uvuformat"
14836         else
14837                 if $test X"$gidsize" = X"$longsize"; then
14838                         gidformat='"lu"'
14839                 else
14840                         if $test X"$gidsize" = X"$intsize"; then
14841                                 gidformat='"u"'
14842                         else
14843                                 if $test X"$gidsize" = X"$shortsize"; then
14844                                         gidformat='"hu"'
14845                                 fi
14846                         fi
14847                 fi
14848         fi
14849         ;;
14850 esac
14851
14852 : see if getgroups exists
14853 set getgroups d_getgrps
14854 eval $inlibc
14855
14856 : see if setgroups exists
14857 set setgroups d_setgrps
14858 eval $inlibc
14859
14860
14861 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14862 echo " "
14863 case "$d_getgrps$d_setgrps" in
14864 *define*)
14865         case "$groupstype" in
14866         '') dflt="$gidtype" ;;
14867         *)  dflt="$groupstype" ;;
14868         esac
14869         $cat <<EOM
14870 What type of pointer is the second argument to getgroups() and setgroups()?
14871 Usually this is the same as group ids, $gidtype, but not always.
14872
14873 EOM
14874         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14875         . ./myread
14876         groupstype="$ans"
14877         ;;
14878 *)  groupstype="$gidtype";;
14879 esac
14880
14881 echo " "
14882 echo "Checking if your $make program sets \$(MAKE)..." >&4
14883 case "$make_set_make" in
14884 '')
14885         $sed 's/^X //' > testmake.mak << 'EOF'
14886 Xall:
14887 X       @echo 'maketemp="$(MAKE)"'
14888 EOF
14889         case "`$make -f testmake.mak 2>/dev/null`" in
14890         *maketemp=*) make_set_make='#' ;;
14891         *)      make_set_make="MAKE=$make" ;;
14892         esac
14893         $rm -f testmake.mak
14894         ;;
14895 esac
14896 case "$make_set_make" in
14897 '#') echo "Yup, it does.";;
14898 *) echo "Nope, it doesn't.";;
14899 esac
14900
14901 : see what type is used for mode_t
14902 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14903 set mode_t modetype int stdio.h sys/types.h
14904 eval $typedef_ask
14905
14906 : see if stdarg is available
14907 echo " "
14908 if $test `./findhdr stdarg.h`; then
14909         echo "<stdarg.h> found." >&4
14910         valstd="$define"
14911 else
14912         echo "<stdarg.h> NOT found." >&4
14913         valstd="$undef"
14914 fi
14915
14916 : see if varags is available
14917 echo " "
14918 if $test `./findhdr varargs.h`; then
14919         echo "<varargs.h> found." >&4
14920 else
14921         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14922 fi
14923
14924 : set up the varargs testing programs
14925 $cat > varargs.c <<EOP
14926 #ifdef I_STDARG
14927 #include <stdarg.h>
14928 #endif
14929 #ifdef I_VARARGS
14930 #include <varargs.h>
14931 #endif
14932
14933 #ifdef I_STDARG
14934 int f(char *p, ...)
14935 #else
14936 int f(va_alist)
14937 va_dcl
14938 #endif
14939 {
14940         va_list ap;
14941 #ifndef I_STDARG
14942         char *p;
14943 #endif
14944 #ifdef I_STDARG
14945         va_start(ap,p);
14946 #else
14947         va_start(ap);
14948         p = va_arg(ap, char *);
14949 #endif
14950         va_end(ap);
14951 }
14952 EOP
14953 $cat > varargs <<EOP
14954 $startsh
14955 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14956         echo "true"
14957 else
14958         echo "false"
14959 fi
14960 $rm -f varargs$_o
14961 EOP
14962 chmod +x varargs
14963
14964 : now check which varargs header should be included
14965 echo " "
14966 i_varhdr=''
14967 case "$valstd" in
14968 "$define")
14969         if `./varargs I_STDARG`; then
14970                 val='stdarg.h'
14971         elif `./varargs I_VARARGS`; then
14972                 val='varargs.h'
14973         fi
14974         ;;
14975 *)
14976         if `./varargs I_VARARGS`; then
14977                 val='varargs.h'
14978         fi
14979         ;;
14980 esac
14981 case "$val" in
14982 '')
14983 echo "I could not find the definition for va_dcl... You have problems..." >&4
14984         val="$undef"; set i_stdarg; eval $setvar
14985         val="$undef"; set i_varargs; eval $setvar
14986         ;;
14987 *) 
14988         set i_varhdr
14989         eval $setvar
14990         case "$i_varhdr" in
14991         stdarg.h)
14992                 val="$define"; set i_stdarg; eval $setvar
14993                 val="$undef"; set i_varargs; eval $setvar
14994                 ;;
14995         varargs.h)
14996                 val="$undef"; set i_stdarg; eval $setvar
14997                 val="$define"; set i_varargs; eval $setvar
14998                 ;;
14999         esac
15000         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
15001 esac
15002 $rm -f varargs*
15003
15004 : see if we need va_copy
15005 echo " "
15006 case "$i_stdarg" in
15007 "$define")
15008         $cat >try.c <<EOCP
15009 #include <stdarg.h>
15010 #include <stdio.h>
15011 #$i_stdlib I_STDLIB
15012 #ifdef I_STDLIB
15013 #include <stdlib.h>
15014 #endif
15015 #include <signal.h>
15016
15017 int
15018 ivfprintf(FILE *f, const char *fmt, va_list *valp)
15019 {
15020   return vfprintf(f, fmt, *valp);
15021 }
15022  
15023 int    
15024 myvfprintf(FILE *f, const  char *fmt, va_list val)
15025 {
15026   return ivfprintf(f, fmt, &val);
15027 }
15028       
15029 int
15030 myprintf(char *fmt, ...) 
15031 {
15032   va_list val;
15033   va_start(val, fmt);
15034   return myvfprintf(stdout, fmt, val); 
15035 }         
15036
15037 int
15038 main(int ac, char **av)
15039 {
15040   signal(SIGSEGV, exit);
15041
15042   myprintf("%s%cs all right, then\n", "that", '\'');                            
15043   exit(0);      
15044 }
15045 EOCP
15046         set try
15047         if eval $compile && $run ./try 2>&1 >/dev/null; then
15048                 case "`$run ./try`" in
15049                 "that's all right, then")
15050                         okay=yes
15051                         ;;
15052                 esac
15053         fi
15054         case "$okay" in
15055         yes)    echo "It seems that you don't need va_copy()." >&4
15056                 need_va_copy="$undef"
15057                 ;;
15058         *)      echo "It seems that va_copy() or similar will be needed." >&4
15059                 need_va_copy="$define"
15060                 ;;
15061         esac
15062         $rm -f try.* core core.* *.core *.core.*
15063         ;;
15064 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15065         ;;
15066 esac
15067
15068 : define a fucntion to check prototypes
15069 $cat > protochk <<EOSH
15070 $startsh
15071 cc="$cc"
15072 optimize="$optimize"
15073 ccflags="$ccflags"
15074 prototype="$prototype"
15075 define="$define"
15076 rm=$rm
15077 EOSH
15078
15079 $cat >> protochk <<'EOSH'
15080
15081 $rm -f try.c
15082 foo="$1"
15083 shift
15084 while test $# -ge 2; do
15085         case "$1" in
15086                 $define) echo "#include <$2>" >> try.c ;;
15087                 literal) echo "$2" >> try.c ;;
15088         esac
15089     shift 2
15090 done
15091 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15092 cat >> try.c <<'EOCP'
15093 #ifdef CAN_PROTOTYPE
15094 #define _(args) args
15095 #else
15096 #define _(args) ()
15097 #endif
15098 EOCP
15099 echo "$foo" >> try.c
15100 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15101 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15102 status=$?
15103 $rm -f try.[co]
15104 exit $status
15105 EOSH
15106 chmod +x protochk
15107 $eunicefix protochk
15108
15109 : see what type is used for size_t
15110 rp="What is the type used for the length parameter for string functions?"
15111 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15112 eval $typedef_ask
15113
15114 : check for type of arguments to gethostbyaddr. 
15115 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15116         case "$d_gethbyaddr" in
15117         $define)
15118                 $cat <<EOM
15119
15120 Checking to see what type of arguments are accepted by gethostbyaddr().
15121 EOM
15122                 hdrs="$define sys/types.h
15123                         $d_socket sys/socket.h 
15124                         $i_niin netinet/in.h 
15125                         $i_netdb netdb.h
15126                         $i_unistd unistd.h"
15127                 : The first arg can 'char *' or 'void *'
15128                 : The second arg is some of integral type
15129                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15130                         for yyy in size_t long int; do
15131                                 case "$netdb_host_type" in
15132                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15133                                         if ./protochk "$try" $hdrs; then
15134                                                 echo "Your system accepts $xxx for the first arg."
15135                                                 echo "...and $yyy for the second arg."
15136                                                 netdb_host_type="$xxx"
15137                                                 netdb_hlen_type="$yyy"
15138                                         fi
15139                                         ;;
15140                                 esac
15141                         done
15142                 done
15143                 : In case none of those worked, prompt the user.
15144                 case "$netdb_host_type" in
15145                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15146                         dflt='char *'
15147                         . ./myread
15148                         netdb_host_type=$ans
15149                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15150                         dflt="$sizetype"
15151                         . ./myread
15152                         netdb_hlen_type=$ans
15153                         ;;
15154                 esac
15155                 ;;
15156         *)      : no gethostbyaddr, so pick harmless defaults
15157                 netdb_host_type='char *'
15158                 netdb_hlen_type="$sizetype"
15159                 ;;
15160         esac
15161         # Remove the "const" if needed. -- but then we'll have a 
15162         # prototype clash!
15163         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15164 fi
15165
15166 : check for type of argument to gethostbyname. 
15167 if test "X$netdb_name_type" = X ; then
15168         case "$d_gethbyname" in
15169         $define)
15170                 $cat <<EOM
15171
15172 Checking to see what type of argument is accepted by gethostbyname().
15173 EOM
15174                 hdrs="$define sys/types.h
15175                         $d_socket sys/socket.h 
15176                         $i_niin netinet/in.h 
15177                         $i_netdb netdb.h
15178                         $i_unistd unistd.h"
15179                 for xxx in "const char *" "char *"; do
15180                         case "$netdb_name_type" in
15181                         '')     try="extern struct hostent *gethostbyname($xxx);"
15182                                 if ./protochk "$try" $hdrs; then
15183                                         echo "Your system accepts $xxx."
15184                                         netdb_name_type="$xxx"
15185                                 fi
15186                                 ;;
15187                         esac
15188                 done
15189                 : In case none of those worked, prompt the user.
15190                 case "$netdb_name_type" in
15191                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15192                         dflt='char *'
15193                         . ./myread
15194                         netdb_name_type=$ans
15195                         ;;
15196                 esac
15197                 ;;
15198         *)      : no gethostbyname, so pick harmless default
15199                 netdb_name_type='char *'
15200                 ;;
15201         esac
15202 fi
15203
15204 : check for type of 1st argument to getnetbyaddr. 
15205 if test "X$netdb_net_type" = X ; then
15206         case "$d_getnbyaddr" in
15207         $define)
15208                 $cat <<EOM
15209
15210 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15211 EOM
15212                 hdrs="$define sys/types.h
15213                         $d_socket sys/socket.h 
15214                         $i_niin netinet/in.h 
15215                         $i_netdb netdb.h
15216                         $i_unistd unistd.h"
15217                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15218                         case "$netdb_net_type" in
15219                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15220                                 if ./protochk "$try" $hdrs; then
15221                                         echo "Your system accepts $xxx."
15222                                         netdb_net_type="$xxx"
15223                                 fi
15224                                 ;;
15225                         esac
15226                 done
15227                 : In case none of those worked, prompt the user.
15228                 case "$netdb_net_type" in
15229                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15230                         dflt='long'
15231                         . ./myread
15232                         netdb_net_type=$ans
15233                         ;;
15234                 esac
15235                 ;;
15236         *)      : no getnetbyaddr, so pick harmless default
15237                 netdb_net_type='long'
15238                 ;;
15239         esac
15240 fi
15241 : locate the preferred pager for this system
15242 case "$pager" in
15243 '')
15244         dflt=''
15245         case "$pg" in
15246         /*) dflt=$pg;;
15247         [a-zA-Z]:/*) dflt=$pg;;
15248         esac
15249         case "$more" in
15250         /*) dflt=$more;;
15251         [a-zA-Z]:/*) dflt=$more;;
15252         esac
15253         case "$less" in
15254         /*) dflt=$less;;
15255         [a-zA-Z]:/*) dflt=$less;;
15256         esac
15257         case "$dflt" in
15258         '') dflt=/usr/ucb/more;;
15259         esac
15260         ;;
15261 *) dflt="$pager";;
15262 esac
15263 echo " "
15264 fn=f/
15265 rp='What pager is used on your system?'
15266 . ./getfile
15267 pager="$ans"
15268
15269 : see what type pids are declared as in the kernel
15270 rp="What is the type of process ids on this system?"
15271 set pid_t pidtype int stdio.h sys/types.h
15272 eval $typedef_ask
15273
15274 : Find earliest binary compatible site_perl subdirectory perl can use.
15275 case "$bincompat5005" in
15276 "$define") xs_apiversion='5.005' ;;
15277 *) xs_apiversion=$version ;;   # The current site_perl version.
15278 esac
15279 : Find earliest pure perl site_perl subdirectory perl can use.
15280 : The versioned directories started at 5.005.
15281 pm_apiversion='5.005'
15282
15283 : see if ar generates random libraries by itself
15284 echo " "
15285 echo "Checking how to generate random libraries on your machine..." >&4
15286 echo 'int bar1() { return bar2(); }' > bar1.c
15287 echo 'int bar2() { return 2; }' > bar2.c
15288 $cat > foo.c <<'EOP'
15289 int main() { printf("%d\n", bar1()); exit(0); }
15290 EOP
15291 $cc $ccflags -c bar1.c >/dev/null 2>&1
15292 $cc $ccflags -c bar2.c >/dev/null 2>&1
15293 $cc $ccflags -c foo.c >/dev/null 2>&1
15294 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15295 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15296         $run ./foobar >/dev/null 2>&1; then
15297         echo "$ar appears to generate random libraries itself."
15298         orderlib=false
15299         ranlib=":"
15300 elif $ar ts bar$_a >/dev/null 2>&1 &&
15301         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15302         $run ./foobar >/dev/null 2>&1; then
15303                 echo "a table of contents needs to be added with '$ar ts'."
15304                 orderlib=false
15305                 ranlib="$ar ts"
15306 else
15307         case "$ranlib" in
15308         :) ranlib='';;
15309         '')
15310                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15311                 $test -f $ranlib || ranlib=''
15312                 ;;
15313         esac
15314         if $test -n "$ranlib"; then
15315                 echo "your system has '$ranlib'; we'll use that."
15316                 orderlib=false
15317         else
15318                 echo "your system doesn't seem to support random libraries"
15319                 echo "so we'll use lorder and tsort to order the libraries."
15320                 orderlib=true
15321                 ranlib=":"
15322         fi
15323 fi
15324 $rm -f foo* bar* 
15325
15326 : check for type of arguments to select. 
15327 case "$selecttype" in
15328 '') case "$d_select" in
15329         $define)
15330                 echo " "
15331                 $cat <<EOM
15332 Checking to see what type of arguments are accepted by select().
15333 EOM
15334                 hdrs="$define sys/types.h
15335                         $i_systime sys/time.h 
15336                         $i_sysselct sys/select.h
15337                         $d_socket sys/socket.h"
15338                 : The first arg can be int, unsigned, or size_t
15339                 : The last arg may or may not be 'const'
15340                 val=''
15341                 : void pointer has been seen but using that
15342                 : breaks the selectminbits test
15343                 for xxx in 'fd_set *' 'int *'; do
15344                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15345                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15346                                         case "$val" in
15347                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15348                                                 if ./protochk "$try" $hdrs; then
15349                                                         echo "Your system accepts $xxx."
15350                                                         val="$xxx"
15351                                                 fi
15352                                                 ;;
15353                                         esac
15354                                 done
15355                         done
15356                 done
15357                 case "$val" in
15358                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15359                         case "$d_fd_set" in
15360                                 $define) dflt="fd_set *" ;;
15361                                 *)              dflt="int *" ;;
15362                         esac
15363                         . ./myread
15364                         val=$ans
15365                         ;;
15366                 esac
15367                 selecttype="$val"
15368                 ;;
15369         *)      : no select, so pick a harmless default
15370                 selecttype='int *'
15371                 ;;
15372         esac
15373         ;;
15374 esac
15375
15376 : check for the select 'width'
15377 case "$selectminbits" in
15378 '') case "$d_select" in
15379         $define)
15380                 $cat <<EOM
15381
15382 Checking to see on how many bits at a time your select() operates...
15383 EOM
15384                 $cat >try.c <<EOCP
15385 #include <sys/types.h>
15386 #$i_time I_TIME
15387 #$i_systime I_SYS_TIME
15388 #$i_systimek I_SYS_TIME_KERNEL
15389 #ifdef I_TIME
15390 #   include <time.h>
15391 #endif
15392 #ifdef I_SYS_TIME
15393 #   ifdef I_SYS_TIME_KERNEL
15394 #       define KERNEL
15395 #   endif
15396 #   include <sys/time.h>
15397 #   ifdef I_SYS_TIME_KERNEL
15398 #       undef KERNEL
15399 #   endif
15400 #endif
15401 #$i_sysselct I_SYS_SELECT
15402 #ifdef I_SYS_SELECT
15403 #include <sys/select.h>
15404 #endif
15405 #$d_socket HAS_SOCKET
15406 #ifdef HAS_SOCKET
15407 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15408 #endif
15409 #include <stdio.h>
15410 $selecttype b;
15411 #define S sizeof(*(b))
15412 #define MINBITS 64
15413 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15414 #define NBITS  (NBYTES * 8)
15415 int main() {
15416     char s[NBYTES];
15417     struct timeval t;
15418     int i;
15419     FILE* fp;
15420     int fd;
15421
15422     fclose(stdin);
15423     fp = fopen("try.c", "r");
15424     if (fp == 0)
15425       exit(1);
15426     fd = fileno(fp);
15427     if (fd < 0)
15428       exit(2);
15429     b = ($selecttype)s;
15430     for (i = 0; i < NBITS; i++)
15431         FD_SET(i, b);
15432     t.tv_sec  = 0;
15433     t.tv_usec = 0;
15434     select(fd + 1, b, 0, 0, &t);
15435     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15436     printf("%d\n", i + 1);
15437     return 0;
15438 }
15439 EOCP
15440                 set try
15441                 if eval $compile_ok; then
15442                         selectminbits=`$run ./try`
15443                         case "$selectminbits" in
15444                         '')     cat >&4 <<EOM
15445 Cannot figure out on how many bits at a time your select() operates.
15446 I'll play safe and guess it is 32 bits.
15447 EOM
15448                                 selectminbits=32
15449                                 bits="32 bits"
15450                                 ;;
15451                         1)      bits="1 bit" ;;
15452                         *)      bits="$selectminbits bits" ;;
15453                         esac
15454                         echo "Your select() operates on $bits at a time." >&4
15455                 else
15456                         rp='What is the minimum number of bits your select() operates on?'
15457                         case "$byteorder" in
15458                         1234|12345678)  dflt=32 ;;
15459                         *)              dflt=1  ;;
15460                         esac
15461                         . ./myread
15462                         val=$ans
15463                         selectminbits="$val"
15464                 fi
15465                 $rm -f try.* try
15466                 ;;
15467         *)      : no select, so pick a harmless default
15468                 selectminbits='32'
15469                 ;;
15470         esac
15471         ;;
15472 esac
15473
15474 : Trace out the files included by signal.h, then look for SIGxxx names.
15475 : Remove SIGARRAYSIZE used by HPUX.
15476 : Remove SIGSTKSIZE used by Linux.
15477 : Remove SIGSTKSZ used by Posix.
15478 : Remove SIGTYP void lines used by OS2.
15479 : Some cpps, like os390, dont give the file name anywhere
15480 if [ "X$fieldn" = X ]; then
15481         : Just make some guesses.  We check them later.
15482         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15483 else
15484         xxx=`echo '#include <signal.h>' |
15485         $cppstdin $cppminus $cppflags 2>/dev/null |
15486         $grep '^[       ]*#.*include' | 
15487         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15488 fi
15489 : Check this list of files to be sure we have parsed the cpp output ok.
15490 : This will also avoid potentially non-existent files, such 
15491 : as ../foo/bar.h
15492 xxxfiles=''
15493 for xx in $xxx /dev/null ; do
15494         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15495 done
15496 : If we have found no files, at least try signal.h
15497 case "$xxxfiles" in
15498 '')     xxxfiles=`./findhdr signal.h` ;;
15499 esac
15500 xxx=`awk '
15501 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15502         print substr($2, 4, 20)
15503 }
15504 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15505         print substr($3, 4, 20)
15506 }' $xxxfiles`
15507 : Append some common names just in case the awk scan failed.
15508 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15509 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15510 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15511 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15512 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15513
15514 : generate a few handy files for later
15515 $cat > signal.c <<'EOCP'
15516 #include <sys/types.h>
15517 #include <signal.h>
15518 #include <stdio.h>
15519 int main() {
15520
15521 /* Strange style to avoid deeply-nested #if/#else/#endif */
15522 #ifndef NSIG
15523 #  ifdef _NSIG
15524 #    define NSIG (_NSIG)
15525 #  endif
15526 #endif
15527
15528 #ifndef NSIG
15529 #  ifdef SIGMAX
15530 #    define NSIG (SIGMAX+1)
15531 #  endif
15532 #endif
15533
15534 #ifndef NSIG
15535 #  ifdef SIG_MAX
15536 #    define NSIG (SIG_MAX+1)
15537 #  endif
15538 #endif
15539
15540 #ifndef NSIG
15541 #  ifdef MAXSIG
15542 #    define NSIG (MAXSIG+1)
15543 #  endif
15544 #endif
15545
15546 #ifndef NSIG
15547 #  ifdef MAX_SIG
15548 #    define NSIG (MAX_SIG+1)
15549 #  endif
15550 #endif
15551
15552 #ifndef NSIG
15553 #  ifdef SIGARRAYSIZE
15554 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15555 #  endif
15556 #endif
15557
15558 #ifndef NSIG
15559 #  ifdef _sys_nsig
15560 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15561 #  endif
15562 #endif
15563
15564 /* Default to some arbitrary number that's big enough to get most
15565    of the common signals.
15566 */
15567 #ifndef NSIG
15568 #    define NSIG 50
15569 #endif
15570
15571 printf("NSIG %d\n", NSIG);
15572
15573 #ifndef JUST_NSIG
15574
15575 EOCP
15576
15577 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15578 {
15579         printf "#ifdef SIG"; printf $1; printf "\n"
15580         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15581         printf $1; printf ");\n"
15582         printf "#endif\n"
15583 }
15584 END {
15585         printf "#endif /* JUST_NSIG */\n";
15586         printf "exit(0);\n}\n";
15587 }
15588 ' >>signal.c
15589 $cat >signal.awk <<'EOP'
15590 BEGIN { ndups = 0 }
15591 $1 ~ /^NSIG$/ { nsig = $2 }
15592 ($1 !~ /^NSIG$/) && (NF == 2) {
15593     if ($2 > maxsig) { maxsig = $2 }
15594     if (sig_name[$2]) {
15595         dup_name[ndups] = $1
15596         dup_num[ndups] = $2
15597         ndups++ 
15598     }
15599     else {
15600         sig_name[$2] = $1
15601         sig_num[$2] = $2
15602     }
15603 }
15604 END { 
15605     if (nsig == 0) {
15606         nsig = maxsig + 1
15607     }
15608     printf("NSIG %d\n", nsig);
15609     for (n = 1; n < nsig; n++) {
15610         if (sig_name[n]) {
15611             printf("%s %d\n", sig_name[n], sig_num[n])
15612         }
15613         else {
15614             printf("NUM%d %d\n", n, n) 
15615         }
15616     }
15617     for (n = 0; n < ndups; n++) {
15618         printf("%s %d\n", dup_name[n], dup_num[n])
15619     }
15620 }
15621 EOP
15622 $cat >signal_cmd <<EOS
15623 $startsh
15624 if $test -s signal.lst; then
15625     echo "Using your existing signal.lst file"
15626         exit 0
15627 fi
15628 xxx="$xxx"
15629 EOS
15630 $cat >>signal_cmd <<'EOS'
15631
15632 set signal
15633 if eval $compile_ok; then
15634         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15635 else
15636         echo "(I can't seem be able to compile the whole test program)" >&4
15637         echo "(I'll try it in little pieces.)" >&4
15638         set signal -DJUST_NSIG
15639         if eval $compile_ok; then
15640                 $run ./signal$_exe > signal.nsg
15641                 $cat signal.nsg
15642         else
15643                 echo "I can't seem to figure out how many signals you have." >&4
15644                 echo "Guessing 50." >&4
15645                 echo 'NSIG 50' > signal.nsg
15646         fi
15647         : Now look at all the signal names, one at a time.
15648         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15649                 $cat > signal.c <<EOCP
15650 #include <sys/types.h>
15651 #include <signal.h>
15652 #include <stdio.h>
15653 int main() {
15654 printf("$xx %d\n", SIG${xx});
15655 return 0;
15656 }
15657 EOCP
15658                 set signal
15659                 if eval $compile; then
15660                         echo "SIG${xx} found."
15661                         $run ./signal$_exe  >> signal.ls1
15662                 else
15663                         echo "SIG${xx} NOT found."
15664                 fi
15665         done
15666         if $test -s signal.ls1; then
15667                 $cat signal.nsg signal.ls1 |
15668                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15669         fi
15670
15671 fi
15672 if $test -s signal.lst; then
15673         :
15674 else
15675         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15676         echo 'kill -l' >signal
15677         set X `csh -f <signal`
15678         $rm -f signal
15679         shift
15680         case $# in
15681         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15682         esac
15683         echo $@ | $tr ' ' $trnl | \
15684             $awk '{ printf "%s %d\n", $1, ++s; }
15685                   END { printf "NSIG %d\n", ++s }' >signal.lst
15686 fi
15687 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15688 EOS
15689 chmod a+x signal_cmd
15690 $eunicefix signal_cmd
15691
15692 : generate list of signal names
15693 echo " "
15694 case "$sig_name_init" in
15695 '') doinit=yes ;;
15696 *)  case "$sig_num_init" in
15697     ''|*,*) doinit=yes ;;
15698     esac ;;
15699 esac
15700 case "$doinit" in
15701 yes)
15702         echo "Generating a list of signal names and numbers..." >&4
15703         . ./signal_cmd
15704         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15705         sig_name=`$awk 'BEGIN { printf "ZERO " }
15706                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15707         sig_num=`$awk  'BEGIN { printf "0 " }
15708                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15709         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15710                              !/^NSIG/   { printf "\"%s\", ", $1 }
15711                              END        { printf "0\n" }' signal.lst`
15712         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15713                              !/^NSIG/   { printf "%d, ", $2}
15714                              END        { printf "0\n"}' signal.lst`
15715         ;;
15716 esac
15717 echo "The following $sig_count signals are available:"
15718 echo " "
15719 echo $sig_name | $awk \
15720 'BEGIN { linelen = 0 }
15721 {
15722         for (i = 1; i <= NF; i++) {
15723                 name = "SIG" $i " "
15724                 linelen = linelen + length(name)
15725                 if (linelen > 70) {
15726                         printf "\n"
15727                         linelen = length(name)
15728                 }
15729                 printf "%s", name
15730         }
15731         printf "\n"
15732 }'
15733 sig_size=`echo $sig_name | awk '{print NF}'`
15734 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15735
15736 echo " "
15737 case "$sizetype" in
15738 *_t) zzz="$sizetype"    ;;
15739 *)   zzz="filesize"     ;;
15740 esac
15741 echo "Checking the size of $zzz..." >&4 
15742 cat > try.c <<EOCP
15743 #include <sys/types.h>
15744 #include <stdio.h>
15745 int main() {
15746     printf("%d\n", (int)sizeof($sizetype));
15747     exit(0);
15748 }
15749 EOCP
15750 set try
15751 if eval $compile_ok; then
15752         yyy=`$run ./try`
15753         case "$yyy" in
15754         '')     sizesize=4
15755                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15756                 ;;
15757         *)      sizesize=$yyy
15758                 echo "Your $zzz size is $sizesize bytes."
15759                 ;;
15760         esac
15761 else
15762         sizesize=4
15763         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15764 fi
15765
15766
15767 : check for socklen_t
15768 echo " "
15769 echo "Checking to see if you have socklen_t..." >&4
15770 $cat >try.c <<EOCP
15771 #include <sys/types.h>
15772 #$d_socket HAS_SOCKET
15773 #ifdef HAS_SOCKET
15774 #include <sys/socket.h>
15775 #endif
15776 int main() { socklen_t x = 16; }
15777 EOCP
15778 set try
15779 if eval $compile; then
15780         val="$define"
15781         echo "You have socklen_t."
15782 else
15783         val="$undef"
15784         echo "You do not have socklen_t."
15785         case "$sizetype" in
15786         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15787         esac
15788 fi
15789 $rm -f try try.*
15790 set d_socklen_t
15791 eval $setvar
15792
15793 : see if this is a socks.h system
15794 set socks.h i_socks
15795 eval $inhdr
15796
15797 : check for type of the size argument to socket calls
15798 case "$d_socket" in
15799 "$define")
15800         $cat <<EOM
15801
15802 Checking to see what type is the last argument of accept().
15803 EOM
15804         yyy=''
15805         case "$d_socklen_t" in
15806         "$define") yyy="$yyy socklen_t"
15807         esac
15808         yyy="$yyy $sizetype int long unsigned"
15809         for xxx in $yyy; do
15810                 case "$socksizetype" in
15811                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15812                         case "$usesocks" in
15813                         "$define")
15814                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15815                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15816                                         socksizetype="$xxx"
15817                                 fi
15818                                 ;;
15819                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15820                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15821                                         socksizetype="$xxx"
15822                                 fi
15823                                 ;;
15824                         esac
15825                         ;;
15826                 esac
15827         done
15828 : In case none of those worked, prompt the user.
15829         case "$socksizetype" in
15830         '')     rp='What is the type for socket address structure sizes?'
15831                 dflt='int'
15832                 . ./myread
15833                 socksizetype=$ans
15834                 ;;
15835         esac
15836         ;;
15837 *)      : no sockets, so pick relatively harmless default
15838         socksizetype='int'
15839         ;;
15840 esac
15841
15842 : see what type is used for signed size_t
15843 set ssize_t ssizetype int stdio.h sys/types.h
15844 eval $typedef
15845 dflt="$ssizetype"
15846 $cat > try.c <<EOM
15847 #include <stdio.h>
15848 #include <sys/types.h>
15849 #define Size_t $sizetype
15850 #define SSize_t $dflt
15851 int main()
15852 {
15853         if (sizeof(Size_t) == sizeof(SSize_t))
15854                 printf("$dflt\n");
15855         else if (sizeof(Size_t) == sizeof(int))
15856                 printf("int\n");
15857         else 
15858                 printf("long\n");
15859         exit(0);
15860 }
15861 EOM
15862 echo " "
15863 set try
15864 if eval $compile_ok && $run ./try > /dev/null; then
15865         ssizetype=`$run ./try`
15866         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15867 else
15868         $cat >&4 <<EOM
15869 Help! I can't compile and run the ssize_t test program: please enlighten me!
15870 (This is probably a misconfiguration in your system or libraries, and
15871 you really ought to fix it.  Still, I'll try anyway.)
15872
15873 I need a type that is the same size as $sizetype, but is guaranteed to
15874 be signed.  Common values are ssize_t, int and long.
15875
15876 EOM
15877         rp="What signed type is the same size as $sizetype?"
15878         . ./myread
15879         ssizetype="$ans"
15880 fi
15881 $rm -f try try.*
15882
15883 : see what type of char stdio uses.
15884 echo " "
15885 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15886 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15887         echo "Your stdio uses unsigned chars." >&4
15888         stdchar="unsigned char"
15889 else
15890         echo "Your stdio uses signed chars." >&4
15891         stdchar="char"
15892 fi
15893 $rm -f stdioh
15894
15895
15896
15897 : see if time exists
15898 echo " "
15899 if test "X$d_time" = X -o X"$timetype" = X; then
15900     if set time val -f d_time; eval $csym; $val; then
15901                 echo 'time() found.' >&4
15902                 val="$define"
15903                 rp="What is the type returned by time() on this system?"
15904                 set time_t timetype long stdio.h sys/types.h
15905                 eval $typedef_ask
15906     else
15907                 echo 'time() not found, hope that will do.' >&4
15908                 val="$undef"
15909                 timetype='int';
15910     fi
15911     set d_time
15912     eval $setvar
15913 fi
15914
15915 : see what type uids are declared as in the kernel
15916 echo " "
15917 echo "Looking for the type for user ids returned by getuid()."
15918 set uid_t uidtype xxx stdio.h sys/types.h
15919 eval $typedef
15920 case "$uidtype" in
15921 xxx)
15922         xxx=`./findhdr sys/user.h`
15923         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15924         case $1 in
15925         unsigned) dflt="$1 $2" ;;
15926         *) dflt="$1" ;;
15927         esac
15928         ;;
15929 *) dflt="$uidtype";;
15930 esac
15931 case "$uidtype" in
15932 uid_t)  echo "uid_t found." ;;
15933 *)      rp="What is the type for user ids returned by getuid()?"
15934         . ./myread
15935         uidtype="$ans"
15936         ;;
15937 esac
15938
15939 echo " "
15940 case "$uidtype" in
15941 *_t) zzz="$uidtype"     ;;
15942 *)   zzz="uid"          ;;
15943 esac
15944 echo "Checking the size of $zzz..." >&4 
15945 cat > try.c <<EOCP
15946 #include <sys/types.h>
15947 #include <stdio.h>
15948 int main() {
15949     printf("%d\n", (int)sizeof($uidtype));
15950     exit(0);
15951 }
15952 EOCP
15953 set try
15954 if eval $compile_ok; then
15955         yyy=`$run ./try`
15956         case "$yyy" in
15957         '')     uidsize=4
15958                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15959                 ;;
15960         *)      uidsize=$yyy
15961                 echo "Your $zzz is $uidsize bytes long."
15962                 ;;
15963         esac
15964 else
15965         uidsize=4
15966         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15967 fi
15968
15969 echo " "
15970 case "$uidtype" in
15971 *_t) zzz="$uidtype"     ;;
15972 *)   zzz="uid"          ;;
15973 esac
15974 echo "Checking the sign of $zzz..." >&4
15975 cat > try.c <<EOCP
15976 #include <sys/types.h>
15977 #include <stdio.h>
15978 int main() {
15979         $uidtype foo = -1;
15980         if (foo < 0)
15981                 printf("-1\n");
15982         else
15983                 printf("1\n");
15984 }
15985 EOCP
15986 set try
15987 if eval $compile; then
15988         yyy=`$run ./try`
15989         case "$yyy" in
15990         '')     uidsign=1
15991                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15992                 ;;
15993         *)      uidsign=$yyy
15994                 case "$uidsign" in
15995                  1) echo "Your $zzz is unsigned." ;;
15996                 -1) echo "Your $zzz is signed."   ;;
15997                 esac
15998                 ;;
15999         esac
16000 else
16001         uidsign=1
16002         echo "(I can't compile the test program--guessing unsigned.)" >&4
16003 fi
16004
16005
16006
16007 echo " "
16008 $echo "Checking the format string to be used for uids..." >&4
16009
16010 case "$uidsign" in
16011 -1)     if $test X"$uidsize" = X"$ivsize"; then
16012                 uidformat="$ivdformat"
16013         else
16014                 if $test X"$uidsize" = X"$longsize"; then
16015                         uidformat='"ld"'
16016                 else
16017                         if $test X"$uidsize" = X"$intsize"; then
16018                                 uidformat='"d"'
16019                         else
16020                                 if $test X"$uidsize" = X"$shortsize"; then
16021                                         uidformat='"hd"'
16022                                 fi
16023                         fi
16024                 fi
16025         fi
16026         ;;
16027 *)      if $test X"$uidsize" = X"$uvsize"; then
16028                 uidformat="$uvuformat"
16029         else
16030                 if $test X"$uidsize" = X"$longsize"; then
16031                         uidformat='"lu"'
16032                 else
16033                         if $test X"$uidsize" = X"$intsize"; then
16034                                 uidformat='"u"'
16035                         else
16036                                 if $test X"$uidsize" = X"$shortsize"; then
16037                                         uidformat='"hu"'
16038                                 fi
16039                         fi
16040                 fi
16041         fi
16042         ;;
16043 esac
16044
16045 : determine compiler compiler
16046 case "$yacc" in
16047 '')
16048         dflt=yacc;;
16049 *)
16050         dflt="$yacc";;
16051 esac
16052 echo " "
16053 comp='yacc'
16054 if $test -f "$byacc$_exe"; then
16055         dflt="$byacc"
16056         comp="byacc or $comp"
16057 fi
16058 if $test -f "$bison$_exe"; then
16059         comp="$comp or bison -y"
16060 fi
16061 rp="Which compiler compiler ($comp) shall I use?"
16062 . ./myread
16063 yacc="$ans"
16064 case "$yacc" in
16065 *bis*)
16066         case "$yacc" in
16067         *-y*) ;;
16068         *)
16069                 yacc="$yacc -y"
16070                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16071                 ;;
16072         esac
16073         ;;
16074 esac
16075
16076 : see if this is a fp.h system
16077 set fp.h i_fp
16078 eval $inhdr
16079
16080 : see if this is a fp_class.h system
16081 set fp_class.h i_fp_class
16082 eval $inhdr
16083
16084 : see if this is a ieeefp.h system
16085 case "$i_ieeefp" in
16086 '' ) set ieeefp.h i_ieeefp
16087      eval $inhdr
16088      ;;
16089 esac
16090
16091 : see if this is a libutil.h system
16092 set libutil.h i_libutil
16093 eval $inhdr
16094
16095 : see if locale.h is available
16096 set locale.h i_locale
16097 eval $inhdr
16098
16099 : see if mach cthreads are available
16100 if test "X$usethreads" = "X$define"; then
16101         set mach/cthreads.h i_machcthr
16102         eval $inhdr
16103 else
16104         i_machcthr="$undef"
16105 fi
16106
16107
16108
16109 : see if this is a math.h system
16110 set math.h i_math
16111 eval $inhdr
16112
16113 : see if this is a mntent.h system
16114 set mntent.h i_mntent
16115 eval $inhdr
16116
16117 : see if ndbm.h is available
16118 set ndbm.h t_ndbm
16119 eval $inhdr
16120
16121 case "$t_ndbm" in
16122 $undef)
16123     # Some Linux distributions such as RedHat 7.1 put the
16124     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16125     if $test -f /usr/include/gdbm/ndbm.h; then
16126         echo '<gdbm/ndbm.h> found.'
16127         ccflags="$ccflags -I/usr/include/gdbm"
16128         cppflags="$cppflags -I/usr/include/gdbm"
16129         t_ndbm=$define
16130     fi
16131     ;;
16132 esac
16133
16134 case "$t_ndbm" in
16135 $define)
16136         : see if dbm_open exists
16137         set dbm_open d_dbm_open
16138         eval $inlibc
16139         case "$d_dbm_open" in
16140         $undef)
16141                 t_ndbm="$undef"
16142                 echo "We won't be including <ndbm.h>"
16143                 ;;
16144         esac
16145         ;;
16146 esac
16147 val="$t_ndbm"
16148 set i_ndbm
16149 eval $setvar
16150
16151 : see if net/errno.h is available
16152 val=''
16153 set net/errno.h val
16154 eval $inhdr
16155
16156 : Unfortunately, it causes problems on some systems.  Arrgh.
16157 case "$val" in
16158 $define)
16159         cat > try.c <<'EOM'
16160 #include <stdio.h>
16161 #include <errno.h>
16162 #include <net/errno.h>
16163 int func()
16164 {
16165         return ENOTSOCK;
16166 }
16167 EOM
16168         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16169                 echo "We'll be including <net/errno.h>." >&4
16170         else
16171                 echo "We won't be including <net/errno.h>." >&4
16172                 val="$undef"
16173         fi
16174         $rm -f try.* try
16175         ;;
16176 esac
16177 set i_neterrno
16178 eval $setvar
16179
16180 : see if netinet/tcp.h is available
16181 set netinet/tcp.h i_netinettcp
16182 eval $inhdr
16183
16184 : see if this is a poll.h system
16185 set poll.h i_poll
16186 eval $inhdr
16187
16188 : see if this is a prot.h system
16189 set prot.h i_prot
16190 eval $inhdr
16191
16192 echo " "
16193 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16194 $cat <<'EOSH' > Cppsym.know
16195 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16196 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16197 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16198 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16199 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16200 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16201 bull c cadmus clipper CMU COFF COMPILER_VERSION
16202 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16203 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16204 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16205 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16206 GLIBC GLIBC_MINOR
16207 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16208 H3050R H3050RX hbullx20 hcx host_mips
16209 hp200 hp300 hp700 HP700 hp800 hp9000
16210 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16211 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16212 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16213 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16214 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16215 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16216 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16217 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16218 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16219 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16220 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16221 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16222 MATH_HAS_NO_SIDE_EFFECTS
16223 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16224 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16225 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16226 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16227 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16228 NetBSD news1500 news1700 news1800 news1900 news3700
16229 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16230 ns32016 ns32332 ns32k nsc32000
16231 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16232 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16233 pc532 pdp11 PGC PIC plexus PORTAR posix
16234 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16235 POSIX_C_SOURCE POSIX_SOURCE POWER
16236 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16237 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16238 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16239 sony sony_news sonyrisc sparc sparclite spectrum
16240 stardent stdc STDC_EXT stratos sun sun3 sun386
16241 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16242 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16243 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16244 sysV68 sysV88 Tek4132 Tek4300 titan
16245 TM3200 TM5400 TM5600
16246 tower tower32 tower32_200 tower32_600 tower32_700
16247 tower32_800 tower32_850 tss
16248 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16249 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16250 unix UNIX95 UNIX99 unixpc unos
16251 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16252 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16253 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16254 USGr4 USGr4_2
16255 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16256 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16257 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16258 z8000
16259 EOSH
16260 # Maybe put other stuff here too.
16261 cat <<EOSH >>Cppsym.know
16262 $osname
16263 EOSH
16264 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16265 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16266 $cat Cppsym.know > Cppsym.c
16267 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16268 $rm -f Cppsym.a Cppsym.b Cppsym.c
16269 cat <<EOSH > Cppsym
16270 $startsh
16271 if $test \$# -gt 0; then
16272     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16273     if $test -s Cppsym.got; then
16274         $rm -f Cppsym.got
16275         exit 0
16276     fi
16277     $rm -f Cppsym.got
16278     exit 1
16279 else
16280     $tr " " "$trnl" | ./Cppsym.try
16281     exit 0
16282 fi
16283 EOSH
16284 chmod +x Cppsym
16285 $eunicefix Cppsym
16286 cat <<EOSH > Cppsym.try
16287 $startsh
16288 cat <<'EOCP' > try.c
16289 #include <stdio.h>
16290 int main() {
16291 EOCP
16292 $awk \\
16293 EOSH
16294 cat <<'EOSH' >> Cppsym.try
16295 'length($1) > 0 {
16296     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
16297     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
16298     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
16299     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
16300 }'       >> try.c
16301 echo 'return 0;}' >> try.c
16302 EOSH
16303 cat <<EOSH >> Cppsym.try
16304 ccflags="$ccflags"
16305 case "$osname-$gccversion" in
16306 irix-) ccflags="\$ccflags -woff 1178" ;;
16307 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16308 esac
16309 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16310 EOSH
16311 chmod +x Cppsym.try
16312 $eunicefix Cppsym.try
16313 ./Cppsym < Cppsym.know > Cppsym.true
16314 : now check the C compiler for additional symbols
16315 postprocess_cc_v=''
16316 case "$osname" in
16317 aix) postprocess_cc_v="|$tr , ' '" ;;
16318 esac
16319 $cat >ccsym <<EOS
16320 $startsh
16321 $cat >tmp.c <<EOF
16322 extern int foo;
16323 EOF
16324 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16325 do
16326         case "\$i" in
16327         -D*) echo "\$i" | $sed 's/^-D//';;
16328         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16329         esac
16330 done
16331 $rm -f try.c
16332 EOS
16333 postprocess_cc_v=''
16334 chmod +x ccsym
16335 $eunicefix ccsym
16336 ./ccsym > ccsym1.raw
16337 if $test -s ccsym1.raw; then
16338        $sort ccsym1.raw | $uniq >ccsym.raw
16339 else
16340        mv ccsym1.raw ccsym.raw
16341 fi
16342
16343 $awk '/\=/ { print $0; next }
16344         { print $0"=1" }' ccsym.raw >ccsym.list
16345 $awk '/\=/ { print $0; next }
16346         { print $0"=1" }' Cppsym.true >ccsym.true
16347 $comm -13 ccsym.true ccsym.list >ccsym.own
16348 $comm -12 ccsym.true ccsym.list >ccsym.com
16349 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16350 also=''
16351 if $test -z ccsym.raw; then
16352         echo "Your C compiler doesn't seem to define any symbols!" >&4
16353         echo " "
16354         echo "However, your C preprocessor defines the following symbols:"
16355         $cat Cppsym.true
16356         ccsymbols=''
16357         cppsymbols=`$cat Cppsym.true`
16358         cppsymbols=`echo $cppsymbols`
16359         cppccsymbols="$cppsymbols"
16360 else
16361         if $test -s ccsym.com; then
16362                 echo "Your C compiler and pre-processor define these symbols:"
16363                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16364                 also='also '
16365                 symbols='ones'
16366                 cppccsymbols=`$cat ccsym.com`
16367                 cppccsymbols=`echo $cppccsymbols`
16368                 $test "$silent" || sleep 1
16369         fi
16370         if $test -s ccsym.cpp; then
16371                 $test "$also" && echo " "
16372                 echo "Your C pre-processor ${also}defines the following symbols:"
16373                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16374                 also='further '
16375                 cppsymbols=`$cat ccsym.cpp`
16376                 cppsymbols=`echo $cppsymbols`
16377                 $test "$silent" || sleep 1
16378         fi
16379         if $test -s ccsym.own; then
16380                 $test "$also" && echo " "
16381                 echo "Your C compiler ${also}defines the following cpp symbols:"
16382                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16383                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16384                 ccsymbols=`$cat ccsym.own`
16385                 ccsymbols=`echo $ccsymbols`
16386                 $test "$silent" || sleep 1
16387         fi
16388 fi
16389
16390 : see if this is a termio system
16391 val="$undef"
16392 val2="$undef"
16393 val3="$undef"
16394 if $test `./findhdr termios.h`; then
16395         set tcsetattr i_termios
16396         eval $inlibc
16397         val3="$i_termios"
16398 fi
16399 echo " "
16400 case "$val3" in
16401 "$define") echo "You have POSIX termios.h... good!" >&4;;
16402 *) if ./Cppsym pyr; then
16403                 case "`/bin/universe`" in
16404                 ucb) if $test `./findhdr sgtty.h`; then
16405                                 val2="$define"
16406                                 echo "<sgtty.h> found." >&4
16407                         else
16408                                 echo "System is pyramid with BSD universe."
16409                                 echo "<sgtty.h> not found--you could have problems." >&4
16410                         fi;;
16411                 *) if $test `./findhdr termio.h`; then
16412                                 val="$define"
16413                                 echo "<termio.h> found." >&4
16414                         else
16415                                 echo "System is pyramid with USG universe."
16416                                 echo "<termio.h> not found--you could have problems." >&4
16417                         fi;;
16418                 esac
16419         elif ./usg; then
16420                 if $test `./findhdr termio.h`; then
16421                         echo "<termio.h> found." >&4
16422                         val="$define"
16423                 elif $test `./findhdr sgtty.h`; then
16424                         echo "<sgtty.h> found." >&4
16425                         val2="$define"
16426                 else
16427 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16428                 fi
16429         else
16430                 if $test `./findhdr sgtty.h`; then
16431                         echo "<sgtty.h> found." >&4
16432                         val2="$define"
16433                 elif $test `./findhdr termio.h`; then
16434                         echo "<termio.h> found." >&4
16435                         val="$define"
16436                 else
16437 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16438                 fi
16439         fi;;
16440 esac
16441 set i_termio; eval $setvar
16442 val=$val2; set i_sgtty; eval $setvar
16443 val=$val3; set i_termios; eval $setvar
16444
16445 : see if this is a shadow.h system
16446 set shadow.h i_shadow
16447 eval $inhdr
16448
16449 : see if stddef is available
16450 set stddef.h i_stddef
16451 eval $inhdr
16452
16453 : see if this is a sunmath.h system
16454 set sunmath.h i_sunmath
16455 eval $inhdr
16456
16457 : see if sys/access.h is available
16458 set sys/access.h i_sysaccess
16459 eval $inhdr
16460
16461 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16462 set sys/filio.h i_sysfilio
16463 eval $inhdr
16464 echo " "
16465 if $test `./findhdr sys/ioctl.h`; then
16466         val="$define"
16467         echo '<sys/ioctl.h> found.' >&4
16468 else
16469         val="$undef"
16470         if $test $i_sysfilio = "$define"; then
16471             echo '<sys/ioctl.h> NOT found.' >&4
16472         else
16473                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16474                 $test $i_termio = "$define" && xxx="termio.h"
16475                 $test $i_termios = "$define" && xxx="termios.h"
16476 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16477         fi
16478 fi
16479 set i_sysioctl
16480 eval $setvar
16481
16482 : see if socket ioctl defs are in sys/sockio.h
16483 echo " "
16484 xxx=`./findhdr sys/sockio.h`
16485 if $test "$xxx"; then
16486         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16487                 val="$define"
16488                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16489         else
16490                 val="$undef"
16491                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16492         fi
16493 else
16494         val="$undef"
16495         $cat <<EOM
16496 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16497 EOM
16498 fi
16499 set i_syssockio
16500 eval $setvar
16501
16502
16503 : see if this is a syslog.h system
16504 set syslog.h i_syslog
16505 eval $inhdr
16506
16507
16508 : see if this is a sys/mode.h system
16509 set sys/mode.h i_sysmode
16510 eval $inhdr
16511
16512 : see if sys/resource.h has to be included
16513 set sys/resource.h i_sysresrc
16514 eval $inhdr
16515
16516 : see if sys/security.h is available
16517 set sys/security.h i_syssecrt
16518 eval $inhdr
16519
16520 : see if this is a sys/statvfs.h system
16521 set sys/statvfs.h i_sysstatvfs
16522 eval $inhdr
16523
16524 : see if this is a sys/un.h system
16525 set sys/un.h i_sysun
16526 eval $inhdr
16527
16528
16529 : see if this is a sys/utsname.h system
16530 set sys/utsname.h i_sysutsname
16531 eval $inhdr
16532
16533 : see if this is a syswait system
16534 set sys/wait.h i_syswait
16535 eval $inhdr
16536
16537 : see if this is a ustat.h system
16538 set ustat.h i_ustat
16539 eval $inhdr
16540
16541 : see if this is an utime system
16542 set utime.h i_utime
16543 eval $inhdr
16544
16545 : see if this is a values.h system
16546 set values.h i_values
16547 eval $inhdr
16548
16549 : see if this is a vfork system
16550 case "$d_vfork" in
16551 "$define")
16552         set vfork.h i_vfork
16553         eval $inhdr
16554         ;;
16555 *)
16556         i_vfork="$undef"
16557         ;;
16558 esac
16559
16560 : see if gdbm.h is available
16561 set gdbm.h t_gdbm
16562 eval $inhdr
16563 case "$t_gdbm" in
16564 $define)
16565         : see if gdbm_open exists
16566         set gdbm_open d_gdbm_open
16567         eval $inlibc
16568         case "$d_gdbm_open" in
16569         $undef)
16570                 t_gdbm="$undef"
16571                 echo "We won't be including <gdbm.h>"
16572                 ;;
16573         esac
16574         ;;
16575 esac
16576 val="$t_gdbm"
16577 set i_gdbm
16578 eval $setvar
16579
16580 echo " "
16581 echo "Looking for extensions..." >&4
16582 : If we are using the old config.sh, known_extensions may contain
16583 : old or inaccurate or duplicate values.
16584 known_extensions=''
16585 nonxs_extensions=''
16586 : We do not use find because it might not be available.
16587 : We do not just use MANIFEST because the user may have dropped
16588 : some additional extensions into the source tree and expect them
16589 : to be built.
16590
16591 : Function to recursively find available extensions, ignoring DynaLoader
16592 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16593 find_extensions='
16594     for xxx in *; do
16595        case "$xxx" in
16596            DynaLoader|dynaload) ;;
16597            *)
16598            if $test -f $xxx/$xxx.xs; then
16599                known_extensions="$known_extensions $1$xxx";
16600            elif $test -f $xxx/Makefile.PL; then
16601                nonxs_extensions="$nonxs_extensions $1$xxx";
16602            else
16603                if $test -d $xxx -a $# -lt 10; then
16604                    set $1$xxx/ $*;
16605                    cd "$xxx";
16606                    eval $find_extensions;
16607                    cd ..;
16608                    shift;
16609                fi;
16610            fi
16611            ;;
16612        esac;
16613     done'
16614 tdir=`pwd`
16615 cd "$rsrc/ext"
16616 set X
16617 shift
16618 eval $find_extensions
16619 # Special case:  Add in threads/shared since it is not picked up by the
16620 # recursive find above (and adding in general recursive finding breaks
16621 # SDBM_File/sdbm).  A.D.  10/25/2001.
16622 known_extensions="$known_extensions threads/shared"
16623 set X $nonxs_extensions
16624 shift
16625 nonxs_extensions="$*"
16626 set X $known_extensions
16627 shift
16628 known_extensions="$*"
16629 cd "$tdir"
16630
16631 : Now see which are supported on this system.
16632 avail_ext=''
16633 for xxx in $known_extensions ; do
16634         case "$xxx" in
16635         DB_File|db_file)
16636                 case "$i_db" in
16637                 $define) avail_ext="$avail_ext $xxx" ;;
16638                 esac
16639                 ;;
16640         GDBM_File|gdbm_fil)
16641                 case "$i_gdbm" in 
16642                 $define) avail_ext="$avail_ext $xxx" ;;
16643                 esac
16644                 ;;
16645         I18N/Langinfo|i18n_lan)
16646                 case "$i_langinfo$d_nl_langinfo" in 
16647                 $define$define) avail_ext="$avail_ext $xxx" ;;
16648                 esac
16649                 ;;
16650         NDBM_File|ndbm_fil)
16651                 case "$i_ndbm" in
16652                 $define)
16653                     case "$osname-$use64bitint" in
16654                     cygwin-*|hpux-define)
16655                         case "$libs" in
16656                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16657                         esac
16658                         ;;
16659                     *) avail_ext="$avail_ext $xxx" ;;
16660                     esac
16661                     ;;
16662                 esac
16663                 ;;
16664         ODBM_File|odbm_fil) 
16665                 case "${i_dbm}${i_rpcsvcdbm}" in
16666                 *"${define}"*)
16667                     case "$osname-$use64bitint" in
16668                     cygwin-*|hpux-define)
16669                         case "$libs" in
16670                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16671                         esac
16672                         ;;
16673                     *) avail_ext="$avail_ext $xxx" ;;
16674                     esac
16675                     ;;
16676                 esac
16677                 ;;
16678         POSIX|posix)
16679                 case "$useposix" in
16680                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16681                 esac
16682                 ;;
16683         Opcode|opcode)
16684                 case "$useopcode" in
16685                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16686                 esac
16687                 ;;
16688         Socket|socket)
16689                 case "$d_socket" in 
16690                 true|$define|y)
16691                     case "$osname" in
16692                     beos) ;; # not unless BONE
16693                     *) avail_ext="$avail_ext $xxx" ;;
16694                     esac
16695                     ;;
16696                 esac
16697                 ;;
16698         Sys/Syslog|sys/syslog)
16699                 : XXX syslog requires socket
16700                 case "$d_socket" in 
16701                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16702                 esac
16703                 ;;
16704         Thread|thread)
16705                 case "$usethreads" in
16706                 true|$define|y)
16707                         case "$useithreads" in
16708                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16709                         esac
16710                 esac
16711                 ;;
16712         threads|threads/shared)
16713                 case "$usethreads" in
16714                 true|$define|y)
16715                         case "$useithreads" in
16716                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16717                         esac
16718                 esac
16719                 ;;
16720         IPC/SysV|ipc/sysv)
16721                 : XXX Do we need a useipcsysv variable here
16722                 case "${d_msg}${d_sem}${d_shm}" in 
16723                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16724                 esac
16725                 ;;
16726         *)      avail_ext="$avail_ext $xxx"
16727                 ;;
16728         esac
16729 done
16730
16731 set X $avail_ext
16732 shift
16733 avail_ext="$*"
16734
16735 : Now see which nonxs extensions are supported on this system.
16736 : For now assume all are.
16737 nonxs_ext=''
16738 for xxx in $nonxs_extensions ; do
16739         case "$xxx" in
16740         *)      nonxs_ext="$nonxs_ext $xxx"
16741                 ;;
16742         esac
16743 done
16744
16745 set X $nonxs_ext
16746 shift
16747 nonxs_ext="$*"
16748
16749 case $usedl in
16750 $define)
16751         $cat <<EOM
16752 A number of extensions are supplied with $package.  You may choose to
16753 compile these extensions for dynamic loading (the default), compile
16754 them into the $package executable (static loading), or not include
16755 them at all.  Answer "none" to include no extensions.
16756 Note that DynaLoader is always built and need not be mentioned here.
16757
16758 EOM
16759         case "$dynamic_ext" in
16760         '') dflt="$avail_ext" ;;
16761         *)      dflt="$dynamic_ext"
16762                 # Perhaps we are reusing an old out-of-date config.sh.
16763                 case "$hint" in
16764                 previous)
16765                         if test X"$dynamic_ext" != X"$avail_ext"; then
16766                                 $cat <<EOM
16767 NOTICE:  Your previous config.sh list may be incorrect. 
16768 The extensions now available to you are 
16769         ${avail_ext}
16770 but the default list from your previous config.sh is
16771         ${dynamic_ext} 
16772
16773 EOM
16774                         fi
16775                         ;;
16776                 esac
16777                 ;;
16778         esac
16779         case "$dflt" in
16780         '')     dflt=none;;
16781         esac
16782         rp="What extensions do you wish to load dynamically?"
16783         . ./myread
16784         case "$ans" in
16785         none) dynamic_ext=' ' ;;
16786         *) dynamic_ext="$ans" ;;
16787         esac
16788
16789         case "$static_ext" in
16790         '')
16791                 : Exclude those already listed in dynamic linking
16792                 dflt=''
16793                 for xxx in $avail_ext; do
16794                         case " $dynamic_ext " in
16795                         *" $xxx "*) ;;
16796                         *) dflt="$dflt $xxx" ;;
16797                         esac
16798                 done
16799                 set X $dflt
16800                 shift
16801                 dflt="$*"
16802                 ;;
16803         *)  dflt="$static_ext" 
16804                 ;;
16805         esac
16806
16807         case "$dflt" in
16808         '')     dflt=none;;
16809         esac
16810         rp="What extensions do you wish to load statically?"
16811         . ./myread
16812         case "$ans" in
16813         none) static_ext=' ' ;;
16814         *) static_ext="$ans" ;;
16815         esac
16816         ;;
16817 *)
16818         $cat <<EOM
16819 A number of extensions are supplied with $package.  Answer "none" 
16820 to include no extensions. 
16821 Note that DynaLoader is always built and need not be mentioned here.
16822
16823 EOM
16824         case "$static_ext" in
16825         '') dflt="$avail_ext" ;;
16826         *)      dflt="$static_ext"
16827                 # Perhaps we are reusing an old out-of-date config.sh.
16828                 case "$hint" in
16829                 previous)
16830                         if test X"$static_ext" != X"$avail_ext"; then
16831                                 $cat <<EOM
16832 NOTICE:  Your previous config.sh list may be incorrect. 
16833 The extensions now available to you are 
16834         ${avail_ext}
16835 but the default list from your previous config.sh is
16836         ${static_ext} 
16837
16838 EOM
16839                         fi
16840                         ;;
16841                 esac
16842                 ;;
16843         esac
16844         : Exclude those that are not xs extensions
16845         case "$dflt" in
16846         '')     dflt=none;;
16847         esac
16848         rp="What extensions do you wish to include?"
16849         . ./myread
16850         case "$ans" in
16851         none) static_ext=' ' ;;
16852         *) static_ext="$ans" ;;
16853         esac
16854         ;;
16855 esac
16856
16857 set X $dynamic_ext $static_ext $nonxs_ext
16858 shift
16859 extensions="$*"
16860
16861 : Remove libraries needed only for extensions
16862 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16863 : The exception is SunOS 4.x, which needs them.
16864 case "${osname}X${osvers}" in
16865 sunos*X4*)
16866     perllibs="$libs"
16867     ;;
16868 *) case "$usedl" in
16869     $define|true|[yY]*)
16870             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16871             shift
16872             perllibs="$*"
16873             ;;
16874     *)  perllibs="$libs"
16875             ;;
16876     esac
16877     ;;
16878 esac
16879
16880 : Remove build directory name from cppstdin so it can be used from
16881 : either the present location or the final installed location.
16882 echo " "
16883 : Get out of the UU directory to get correct path name.
16884 cd ..
16885 case "$cppstdin" in
16886 `pwd`/cppstdin)
16887         echo "Stripping down cppstdin path name"
16888         cppstdin=cppstdin
16889         ;;
16890 esac
16891 cd UU
16892
16893 : end of configuration questions
16894 echo " "
16895 echo "End of configuration questions."
16896 echo " "
16897
16898 : back to where it started
16899 if test -d ../UU; then
16900         cd ..
16901 fi
16902
16903 : configuration may be patched via a 'config.arch' file
16904 if $test -f config.arch; then
16905         echo "I see a config.arch file, loading it."
16906         . ./config.arch
16907 fi
16908
16909 : configuration may be patched via a 'config.over' file
16910 if $test -f config.over; then
16911         echo " "
16912         dflt=y
16913         rp='I see a config.over file.  Do you wish to load it?'
16914         . UU/myread
16915         case "$ans" in
16916         n*) echo "OK, I'll ignore it.";;
16917         *)      . ./config.over
16918                 echo "Configuration override changes have been loaded."
16919                 ;;
16920         esac
16921 fi
16922
16923 : in case they want portability, strip down executable paths
16924 case "$d_portable" in
16925 "$define")
16926         echo " "
16927         echo "Stripping down executable paths..." >&4
16928         for file in $loclist $trylist; do
16929                 eval temp=\$$file
16930                 eval $file=`basename $temp`
16931         done
16932         ;;
16933 esac
16934
16935 : create config.sh file
16936 echo " "
16937 echo "Creating config.sh..." >&4
16938 $spitshell <<EOT >config.sh
16939 $startsh
16940 #
16941 # This file was produced by running the Configure script. It holds all the
16942 # definitions figured out by Configure. Should you modify one of these values,
16943 # do not forget to propagate your changes by running "Configure -der". You may
16944 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16945 #
16946
16947 # Package name      : $package
16948 # Source directory  : $src
16949 # Configuration time: $cf_time
16950 # Configured by     : $cf_by
16951 # Target system     : $myuname
16952
16953 Author='$Author'
16954 Date='$Date'
16955 Header='$Header'
16956 Id='$Id'
16957 Locker='$Locker'
16958 Log='$Log'
16959 Mcc='$Mcc'
16960 RCSfile='$RCSfile'
16961 Revision='$Revision'
16962 Source='$Source'
16963 State='$State'
16964 _a='$_a'
16965 _exe='$_exe'
16966 _o='$_o'
16967 afs='$afs'
16968 afsroot='$afsroot'
16969 alignbytes='$alignbytes'
16970 ansi2knr='$ansi2knr'
16971 aphostname='$aphostname'
16972 api_revision='$api_revision'
16973 api_subversion='$api_subversion'
16974 api_version='$api_version'
16975 api_versionstring='$api_versionstring'
16976 ar='$ar'
16977 archlib='$archlib'
16978 archlibexp='$archlibexp'
16979 archname64='$archname64'
16980 archname='$archname'
16981 archobjs='$archobjs'
16982 awk='$awk'
16983 baserev='$baserev'
16984 bash='$bash'
16985 bin='$bin'
16986 bincompat5005='$bincompat5005'
16987 binexp='$binexp'
16988 bison='$bison'
16989 byacc='$byacc'
16990 byteorder='$byteorder'
16991 c='$c'
16992 castflags='$castflags'
16993 cat='$cat'
16994 cc='$cc'
16995 cccdlflags='$cccdlflags'
16996 ccdlflags='$ccdlflags'
16997 ccflags='$ccflags'
16998 ccflags_uselargefiles='$ccflags_uselargefiles'
16999 ccname='$ccname'
17000 ccsymbols='$ccsymbols'
17001 ccversion='$ccversion'
17002 cf_by='$cf_by'
17003 cf_email='$cf_email'
17004 cf_time='$cf_time'
17005 charsize='$charsize'
17006 chgrp='$chgrp'
17007 chmod='$chmod'
17008 chown='$chown'
17009 clocktype='$clocktype'
17010 comm='$comm'
17011 compress='$compress'
17012 contains='$contains'
17013 cp='$cp'
17014 cpio='$cpio'
17015 cpp='$cpp'
17016 cpp_stuff='$cpp_stuff'
17017 cppccsymbols='$cppccsymbols'
17018 cppflags='$cppflags'
17019 cpplast='$cpplast'
17020 cppminus='$cppminus'
17021 cpprun='$cpprun'
17022 cppstdin='$cppstdin'
17023 cppsymbols='$cppsymbols'
17024 cryptlib='$cryptlib'
17025 csh='$csh'
17026 d_Gconvert='$d_Gconvert'
17027 d_PRIEUldbl='$d_PRIEUldbl'
17028 d_PRIFUldbl='$d_PRIFUldbl'
17029 d_PRIGUldbl='$d_PRIGUldbl'
17030 d_PRIXU64='$d_PRIXU64'
17031 d_PRId64='$d_PRId64'
17032 d_PRIeldbl='$d_PRIeldbl'
17033 d_PRIfldbl='$d_PRIfldbl'
17034 d_PRIgldbl='$d_PRIgldbl'
17035 d_PRIi64='$d_PRIi64'
17036 d_PRIo64='$d_PRIo64'
17037 d_PRIu64='$d_PRIu64'
17038 d_PRIx64='$d_PRIx64'
17039 d_SCNfldbl='$d_SCNfldbl'
17040 d__fwalk='$d__fwalk'
17041 d_access='$d_access'
17042 d_accessx='$d_accessx'
17043 d_alarm='$d_alarm'
17044 d_archlib='$d_archlib'
17045 d_atolf='$d_atolf'
17046 d_atoll='$d_atoll'
17047 d_attribut='$d_attribut'
17048 d_bcmp='$d_bcmp'
17049 d_bcopy='$d_bcopy'
17050 d_bincompat5005='$d_bincompat5005'
17051 d_bsd='$d_bsd'
17052 d_bsdgetpgrp='$d_bsdgetpgrp'
17053 d_bsdsetpgrp='$d_bsdsetpgrp'
17054 d_bzero='$d_bzero'
17055 d_casti32='$d_casti32'
17056 d_castneg='$d_castneg'
17057 d_charvspr='$d_charvspr'
17058 d_chown='$d_chown'
17059 d_chroot='$d_chroot'
17060 d_chsize='$d_chsize'
17061 d_class='$d_class'
17062 d_closedir='$d_closedir'
17063 d_cmsghdr_s='$d_cmsghdr_s'
17064 d_const='$d_const'
17065 d_crypt='$d_crypt'
17066 d_csh='$d_csh'
17067 d_cuserid='$d_cuserid'
17068 d_dbl_dig='$d_dbl_dig'
17069 d_dbminitproto='$d_dbminitproto'
17070 d_difftime='$d_difftime'
17071 d_dirfd='$d_dirfd'
17072 d_dirnamlen='$d_dirnamlen'
17073 d_dlerror='$d_dlerror'
17074 d_dlopen='$d_dlopen'
17075 d_dlsymun='$d_dlsymun'
17076 d_dosuid='$d_dosuid'
17077 d_drand48proto='$d_drand48proto'
17078 d_dup2='$d_dup2'
17079 d_eaccess='$d_eaccess'
17080 d_endgrent='$d_endgrent'
17081 d_endhent='$d_endhent'
17082 d_endnent='$d_endnent'
17083 d_endpent='$d_endpent'
17084 d_endpwent='$d_endpwent'
17085 d_endsent='$d_endsent'
17086 d_eofnblk='$d_eofnblk'
17087 d_eunice='$d_eunice'
17088 d_fchdir='$d_fchdir'
17089 d_fchmod='$d_fchmod'
17090 d_fchown='$d_fchown'
17091 d_fcntl='$d_fcntl'
17092 d_fcntl_can_lock='$d_fcntl_can_lock'
17093 d_fd_macros='$d_fd_macros'
17094 d_fd_set='$d_fd_set'
17095 d_fds_bits='$d_fds_bits'
17096 d_fgetpos='$d_fgetpos'
17097 d_finite='$d_finite'
17098 d_finitel='$d_finitel'
17099 d_flexfnam='$d_flexfnam'
17100 d_flock='$d_flock'
17101 d_flockproto='$d_flockproto'
17102 d_fork='$d_fork'
17103 d_fp_class='$d_fp_class'
17104 d_fpathconf='$d_fpathconf'
17105 d_fpclass='$d_fpclass'
17106 d_fpclassify='$d_fpclassify'
17107 d_fpclassl='$d_fpclassl'
17108 d_fpos64_t='$d_fpos64_t'
17109 d_frexpl='$d_frexpl'
17110 d_fs_data_s='$d_fs_data_s'
17111 d_fseeko='$d_fseeko'
17112 d_fsetpos='$d_fsetpos'
17113 d_fstatfs='$d_fstatfs'
17114 d_fstatvfs='$d_fstatvfs'
17115 d_fsync='$d_fsync'
17116 d_ftello='$d_ftello'
17117 d_ftime='$d_ftime'
17118 d_getcwd='$d_getcwd'
17119 d_getespwnam='$d_getespwnam'
17120 d_getfsstat='$d_getfsstat'
17121 d_getgrent='$d_getgrent'
17122 d_getgrps='$d_getgrps'
17123 d_gethbyaddr='$d_gethbyaddr'
17124 d_gethbyname='$d_gethbyname'
17125 d_gethent='$d_gethent'
17126 d_gethname='$d_gethname'
17127 d_gethostprotos='$d_gethostprotos'
17128 d_getitimer='$d_getitimer'
17129 d_getlogin='$d_getlogin'
17130 d_getmnt='$d_getmnt'
17131 d_getmntent='$d_getmntent'
17132 d_getnbyaddr='$d_getnbyaddr'
17133 d_getnbyname='$d_getnbyname'
17134 d_getnent='$d_getnent'
17135 d_getnetprotos='$d_getnetprotos'
17136 d_getpagsz='$d_getpagsz'
17137 d_getpbyname='$d_getpbyname'
17138 d_getpbynumber='$d_getpbynumber'
17139 d_getpent='$d_getpent'
17140 d_getpgid='$d_getpgid'
17141 d_getpgrp2='$d_getpgrp2'
17142 d_getpgrp='$d_getpgrp'
17143 d_getppid='$d_getppid'
17144 d_getprior='$d_getprior'
17145 d_getprotoprotos='$d_getprotoprotos'
17146 d_getprpwnam='$d_getprpwnam'
17147 d_getpwent='$d_getpwent'
17148 d_getsbyname='$d_getsbyname'
17149 d_getsbyport='$d_getsbyport'
17150 d_getsent='$d_getsent'
17151 d_getservprotos='$d_getservprotos'
17152 d_getspnam='$d_getspnam'
17153 d_gettimeod='$d_gettimeod'
17154 d_gnulibc='$d_gnulibc'
17155 d_grpasswd='$d_grpasswd'
17156 d_hasmntopt='$d_hasmntopt'
17157 d_htonl='$d_htonl'
17158 d_index='$d_index'
17159 d_inetaton='$d_inetaton'
17160 d_int64_t='$d_int64_t'
17161 d_isascii='$d_isascii'
17162 d_isfinite='$d_isfinite'
17163 d_isinf='$d_isinf'
17164 d_isnan='$d_isnan'
17165 d_isnanl='$d_isnanl'
17166 d_killpg='$d_killpg'
17167 d_lchown='$d_lchown'
17168 d_ldbl_dig='$d_ldbl_dig'
17169 d_link='$d_link'
17170 d_locconv='$d_locconv'
17171 d_lockf='$d_lockf'
17172 d_longdbl='$d_longdbl'
17173 d_longlong='$d_longlong'
17174 d_lseekproto='$d_lseekproto'
17175 d_lstat='$d_lstat'
17176 d_madvise='$d_madvise'
17177 d_mblen='$d_mblen'
17178 d_mbstowcs='$d_mbstowcs'
17179 d_mbtowc='$d_mbtowc'
17180 d_memchr='$d_memchr'
17181 d_memcmp='$d_memcmp'
17182 d_memcpy='$d_memcpy'
17183 d_memmove='$d_memmove'
17184 d_memset='$d_memset'
17185 d_mkdir='$d_mkdir'
17186 d_mkdtemp='$d_mkdtemp'
17187 d_mkfifo='$d_mkfifo'
17188 d_mkstemp='$d_mkstemp'
17189 d_mkstemps='$d_mkstemps'
17190 d_mktime='$d_mktime'
17191 d_mmap='$d_mmap'
17192 d_modfl='$d_modfl'
17193 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17194 d_mprotect='$d_mprotect'
17195 d_msg='$d_msg'
17196 d_msg_ctrunc='$d_msg_ctrunc'
17197 d_msg_dontroute='$d_msg_dontroute'
17198 d_msg_oob='$d_msg_oob'
17199 d_msg_peek='$d_msg_peek'
17200 d_msg_proxy='$d_msg_proxy'
17201 d_msgctl='$d_msgctl'
17202 d_msgget='$d_msgget'
17203 d_msghdr_s='$d_msghdr_s'
17204 d_msgrcv='$d_msgrcv'
17205 d_msgsnd='$d_msgsnd'
17206 d_msync='$d_msync'
17207 d_munmap='$d_munmap'
17208 d_mymalloc='$d_mymalloc'
17209 d_nice='$d_nice'
17210 d_nl_langinfo='$d_nl_langinfo'
17211 d_nv_preserves_uv='$d_nv_preserves_uv'
17212 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17213 d_off64_t='$d_off64_t'
17214 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17215 d_oldpthreads='$d_oldpthreads'
17216 d_oldsock='$d_oldsock'
17217 d_open3='$d_open3'
17218 d_pathconf='$d_pathconf'
17219 d_pause='$d_pause'
17220 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17221 d_phostname='$d_phostname'
17222 d_pipe='$d_pipe'
17223 d_poll='$d_poll'
17224 d_portable='$d_portable'
17225 d_procselfexe='$d_procselfexe'
17226 d_pthread_atfork='$d_pthread_atfork'
17227 d_pthread_yield='$d_pthread_yield'
17228 d_pwage='$d_pwage'
17229 d_pwchange='$d_pwchange'
17230 d_pwclass='$d_pwclass'
17231 d_pwcomment='$d_pwcomment'
17232 d_pwexpire='$d_pwexpire'
17233 d_pwgecos='$d_pwgecos'
17234 d_pwpasswd='$d_pwpasswd'
17235 d_pwquota='$d_pwquota'
17236 d_qgcvt='$d_qgcvt'
17237 d_quad='$d_quad'
17238 d_readdir='$d_readdir'
17239 d_readlink='$d_readlink'
17240 d_readv='$d_readv'
17241 d_recvmsg='$d_recvmsg'
17242 d_rename='$d_rename'
17243 d_rewinddir='$d_rewinddir'
17244 d_rmdir='$d_rmdir'
17245 d_safebcpy='$d_safebcpy'
17246 d_safemcpy='$d_safemcpy'
17247 d_sanemcmp='$d_sanemcmp'
17248 d_sbrkproto='$d_sbrkproto'
17249 d_sched_yield='$d_sched_yield'
17250 d_scm_rights='$d_scm_rights'
17251 d_seekdir='$d_seekdir'
17252 d_select='$d_select'
17253 d_sem='$d_sem'
17254 d_semctl='$d_semctl'
17255 d_semctl_semid_ds='$d_semctl_semid_ds'
17256 d_semctl_semun='$d_semctl_semun'
17257 d_semget='$d_semget'
17258 d_semop='$d_semop'
17259 d_sendmsg='$d_sendmsg'
17260 d_setegid='$d_setegid'
17261 d_seteuid='$d_seteuid'
17262 d_setgrent='$d_setgrent'
17263 d_setgrps='$d_setgrps'
17264 d_sethent='$d_sethent'
17265 d_setitimer='$d_setitimer'
17266 d_setlinebuf='$d_setlinebuf'
17267 d_setlocale='$d_setlocale'
17268 d_setnent='$d_setnent'
17269 d_setpent='$d_setpent'
17270 d_setpgid='$d_setpgid'
17271 d_setpgrp2='$d_setpgrp2'
17272 d_setpgrp='$d_setpgrp'
17273 d_setprior='$d_setprior'
17274 d_setproctitle='$d_setproctitle'
17275 d_setpwent='$d_setpwent'
17276 d_setregid='$d_setregid'
17277 d_setresgid='$d_setresgid'
17278 d_setresuid='$d_setresuid'
17279 d_setreuid='$d_setreuid'
17280 d_setrgid='$d_setrgid'
17281 d_setruid='$d_setruid'
17282 d_setsent='$d_setsent'
17283 d_setsid='$d_setsid'
17284 d_setvbuf='$d_setvbuf'
17285 d_sfio='$d_sfio'
17286 d_shm='$d_shm'
17287 d_shmat='$d_shmat'
17288 d_shmatprototype='$d_shmatprototype'
17289 d_shmctl='$d_shmctl'
17290 d_shmdt='$d_shmdt'
17291 d_shmget='$d_shmget'
17292 d_sigaction='$d_sigaction'
17293 d_sigprocmask='$d_sigprocmask'
17294 d_sigsetjmp='$d_sigsetjmp'
17295 d_sockatmark='$d_sockatmark'
17296 d_sockatmarkproto='$d_sockatmarkproto'
17297 d_socket='$d_socket'
17298 d_socklen_t='$d_socklen_t'
17299 d_sockpair='$d_sockpair'
17300 d_socks5_init='$d_socks5_init'
17301 d_sqrtl='$d_sqrtl'
17302 d_sresgproto='$d_sresgproto'
17303 d_sresuproto='$d_sresuproto'
17304 d_statblks='$d_statblks'
17305 d_statfs_f_flags='$d_statfs_f_flags'
17306 d_statfs_s='$d_statfs_s'
17307 d_statvfs='$d_statvfs'
17308 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17309 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17310 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17311 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17312 d_stdio_stream_array='$d_stdio_stream_array'
17313 d_stdiobase='$d_stdiobase'
17314 d_stdstdio='$d_stdstdio'
17315 d_strchr='$d_strchr'
17316 d_strcoll='$d_strcoll'
17317 d_strctcpy='$d_strctcpy'
17318 d_strerrm='$d_strerrm'
17319 d_strerror='$d_strerror'
17320 d_strftime='$d_strftime'
17321 d_strtod='$d_strtod'
17322 d_strtol='$d_strtol'
17323 d_strtold='$d_strtold'
17324 d_strtoll='$d_strtoll'
17325 d_strtoq='$d_strtoq'
17326 d_strtoul='$d_strtoul'
17327 d_strtoull='$d_strtoull'
17328 d_strtouq='$d_strtouq'
17329 d_strxfrm='$d_strxfrm'
17330 d_suidsafe='$d_suidsafe'
17331 d_symlink='$d_symlink'
17332 d_syscall='$d_syscall'
17333 d_syscallproto='$d_syscallproto'
17334 d_sysconf='$d_sysconf'
17335 d_sysernlst='$d_sysernlst'
17336 d_syserrlst='$d_syserrlst'
17337 d_system='$d_system'
17338 d_tcgetpgrp='$d_tcgetpgrp'
17339 d_tcsetpgrp='$d_tcsetpgrp'
17340 d_telldir='$d_telldir'
17341 d_telldirproto='$d_telldirproto'
17342 d_time='$d_time'
17343 d_times='$d_times'
17344 d_truncate='$d_truncate'
17345 d_tzname='$d_tzname'
17346 d_u32align='$d_u32align'
17347 d_ualarm='$d_ualarm'
17348 d_umask='$d_umask'
17349 d_uname='$d_uname'
17350 d_union_semun='$d_union_semun'
17351 d_unordered='$d_unordered'
17352 d_usleep='$d_usleep'
17353 d_usleepproto='$d_usleepproto'
17354 d_ustat='$d_ustat'
17355 d_vendorarch='$d_vendorarch'
17356 d_vendorbin='$d_vendorbin'
17357 d_vendorlib='$d_vendorlib'
17358 d_vfork='$d_vfork'
17359 d_void_closedir='$d_void_closedir'
17360 d_voidsig='$d_voidsig'
17361 d_voidtty='$d_voidtty'
17362 d_volatile='$d_volatile'
17363 d_vprintf='$d_vprintf'
17364 d_wait4='$d_wait4'
17365 d_waitpid='$d_waitpid'
17366 d_wcstombs='$d_wcstombs'
17367 d_wctomb='$d_wctomb'
17368 d_writev='$d_writev'
17369 d_xenix='$d_xenix'
17370 date='$date'
17371 db_hashtype='$db_hashtype'
17372 db_prefixtype='$db_prefixtype'
17373 db_version_major='$db_version_major'
17374 db_version_minor='$db_version_minor'
17375 db_version_patch='$db_version_patch'
17376 defvoidused='$defvoidused'
17377 direntrytype='$direntrytype'
17378 dlext='$dlext'
17379 dlsrc='$dlsrc'
17380 doublesize='$doublesize'
17381 drand01='$drand01'
17382 dynamic_ext='$dynamic_ext'
17383 eagain='$eagain'
17384 ebcdic='$ebcdic'
17385 echo='$echo'
17386 egrep='$egrep'
17387 emacs='$emacs'
17388 eunicefix='$eunicefix'
17389 exe_ext='$exe_ext'
17390 expr='$expr'
17391 extensions='$extensions'
17392 extras='$extras'
17393 fflushNULL='$fflushNULL'
17394 fflushall='$fflushall'
17395 find='$find'
17396 firstmakefile='$firstmakefile'
17397 flex='$flex'
17398 fpossize='$fpossize'
17399 fpostype='$fpostype'
17400 freetype='$freetype'
17401 from='$from'
17402 full_ar='$full_ar'
17403 full_csh='$full_csh'
17404 full_sed='$full_sed'
17405 gccosandvers='$gccosandvers'
17406 gccversion='$gccversion'
17407 gidformat='$gidformat'
17408 gidsign='$gidsign'
17409 gidsize='$gidsize'
17410 gidtype='$gidtype'
17411 glibpth='$glibpth'
17412 gmake='$gmake'
17413 grep='$grep'
17414 groupcat='$groupcat'
17415 groupstype='$groupstype'
17416 gzip='$gzip'
17417 h_fcntl='$h_fcntl'
17418 h_sysfile='$h_sysfile'
17419 hint='$hint'
17420 hostcat='$hostcat'
17421 i16size='$i16size'
17422 i16type='$i16type'
17423 i32size='$i32size'
17424 i32type='$i32type'
17425 i64size='$i64size'
17426 i64type='$i64type'
17427 i8size='$i8size'
17428 i8type='$i8type'
17429 i_arpainet='$i_arpainet'
17430 i_bsdioctl='$i_bsdioctl'
17431 i_db='$i_db'
17432 i_dbm='$i_dbm'
17433 i_dirent='$i_dirent'
17434 i_dld='$i_dld'
17435 i_dlfcn='$i_dlfcn'
17436 i_fcntl='$i_fcntl'
17437 i_float='$i_float'
17438 i_fp='$i_fp'
17439 i_fp_class='$i_fp_class'
17440 i_gdbm='$i_gdbm'
17441 i_grp='$i_grp'
17442 i_ieeefp='$i_ieeefp'
17443 i_inttypes='$i_inttypes'
17444 i_langinfo='$i_langinfo'
17445 i_libutil='$i_libutil'
17446 i_limits='$i_limits'
17447 i_locale='$i_locale'
17448 i_machcthr='$i_machcthr'
17449 i_malloc='$i_malloc'
17450 i_math='$i_math'
17451 i_memory='$i_memory'
17452 i_mntent='$i_mntent'
17453 i_ndbm='$i_ndbm'
17454 i_netdb='$i_netdb'
17455 i_neterrno='$i_neterrno'
17456 i_netinettcp='$i_netinettcp'
17457 i_niin='$i_niin'
17458 i_poll='$i_poll'
17459 i_prot='$i_prot'
17460 i_pthread='$i_pthread'
17461 i_pwd='$i_pwd'
17462 i_rpcsvcdbm='$i_rpcsvcdbm'
17463 i_sfio='$i_sfio'
17464 i_sgtty='$i_sgtty'
17465 i_shadow='$i_shadow'
17466 i_socks='$i_socks'
17467 i_stdarg='$i_stdarg'
17468 i_stddef='$i_stddef'
17469 i_stdlib='$i_stdlib'
17470 i_string='$i_string'
17471 i_sunmath='$i_sunmath'
17472 i_sysaccess='$i_sysaccess'
17473 i_sysdir='$i_sysdir'
17474 i_sysfile='$i_sysfile'
17475 i_sysfilio='$i_sysfilio'
17476 i_sysin='$i_sysin'
17477 i_sysioctl='$i_sysioctl'
17478 i_syslog='$i_syslog'
17479 i_sysmman='$i_sysmman'
17480 i_sysmode='$i_sysmode'
17481 i_sysmount='$i_sysmount'
17482 i_sysndir='$i_sysndir'
17483 i_sysparam='$i_sysparam'
17484 i_sysresrc='$i_sysresrc'
17485 i_syssecrt='$i_syssecrt'
17486 i_sysselct='$i_sysselct'
17487 i_syssockio='$i_syssockio'
17488 i_sysstat='$i_sysstat'
17489 i_sysstatfs='$i_sysstatfs'
17490 i_sysstatvfs='$i_sysstatvfs'
17491 i_systime='$i_systime'
17492 i_systimek='$i_systimek'
17493 i_systimes='$i_systimes'
17494 i_systypes='$i_systypes'
17495 i_sysuio='$i_sysuio'
17496 i_sysun='$i_sysun'
17497 i_sysutsname='$i_sysutsname'
17498 i_sysvfs='$i_sysvfs'
17499 i_syswait='$i_syswait'
17500 i_termio='$i_termio'
17501 i_termios='$i_termios'
17502 i_time='$i_time'
17503 i_unistd='$i_unistd'
17504 i_ustat='$i_ustat'
17505 i_utime='$i_utime'
17506 i_values='$i_values'
17507 i_varargs='$i_varargs'
17508 i_varhdr='$i_varhdr'
17509 i_vfork='$i_vfork'
17510 ignore_versioned_solibs='$ignore_versioned_solibs'
17511 inc_version_list='$inc_version_list'
17512 inc_version_list_init='$inc_version_list_init'
17513 incpath='$incpath'
17514 inews='$inews'
17515 installarchlib='$installarchlib'
17516 installbin='$installbin'
17517 installman1dir='$installman1dir'
17518 installman3dir='$installman3dir'
17519 installprefix='$installprefix'
17520 installprefixexp='$installprefixexp'
17521 installprivlib='$installprivlib'
17522 installscript='$installscript'
17523 installsitearch='$installsitearch'
17524 installsitebin='$installsitebin'
17525 installsitelib='$installsitelib'
17526 installstyle='$installstyle'
17527 installusrbinperl='$installusrbinperl'
17528 installvendorarch='$installvendorarch'
17529 installvendorbin='$installvendorbin'
17530 installvendorlib='$installvendorlib'
17531 intsize='$intsize'
17532 issymlink='$issymlink'
17533 ivdformat='$ivdformat'
17534 ivsize='$ivsize'
17535 ivtype='$ivtype'
17536 known_extensions='$known_extensions'
17537 ksh='$ksh'
17538 ld='$ld'
17539 lddlflags='$lddlflags'
17540 ldflags='$ldflags'
17541 ldflags_uselargefiles='$ldflags_uselargefiles'
17542 ldlibpthname='$ldlibpthname'
17543 less='$less'
17544 lib_ext='$lib_ext'
17545 libc='$libc'
17546 libperl='$libperl'
17547 libpth='$libpth'
17548 libs='$libs'
17549 libsdirs='$libsdirs'
17550 libsfiles='$libsfiles'
17551 libsfound='$libsfound'
17552 libspath='$libspath'
17553 libswanted='$libswanted'
17554 libswanted_uselargefiles='$libswanted_uselargefiles'
17555 line='$line'
17556 lint='$lint'
17557 lkflags='$lkflags'
17558 ln='$ln'
17559 lns='$lns'
17560 locincpth='$locincpth'
17561 loclibpth='$loclibpth'
17562 longdblsize='$longdblsize'
17563 longlongsize='$longlongsize'
17564 longsize='$longsize'
17565 lp='$lp'
17566 lpr='$lpr'
17567 ls='$ls'
17568 lseeksize='$lseeksize'
17569 lseektype='$lseektype'
17570 mail='$mail'
17571 mailx='$mailx'
17572 make='$make'
17573 make_set_make='$make_set_make'
17574 mallocobj='$mallocobj'
17575 mallocsrc='$mallocsrc'
17576 malloctype='$malloctype'
17577 man1dir='$man1dir'
17578 man1direxp='$man1direxp'
17579 man1ext='$man1ext'
17580 man3dir='$man3dir'
17581 man3direxp='$man3direxp'
17582 man3ext='$man3ext'
17583 mips_type='$mips_type'
17584 mkdir='$mkdir'
17585 mmaptype='$mmaptype'
17586 modetype='$modetype'
17587 more='$more'
17588 multiarch='$multiarch'
17589 mv='$mv'
17590 myarchname='$myarchname'
17591 mydomain='$mydomain'
17592 myhostname='$myhostname'
17593 myuname='$myuname'
17594 n='$n'
17595 need_va_copy='$need_va_copy'
17596 netdb_hlen_type='$netdb_hlen_type'
17597 netdb_host_type='$netdb_host_type'
17598 netdb_name_type='$netdb_name_type'
17599 netdb_net_type='$netdb_net_type'
17600 nm='$nm'
17601 nm_opt='$nm_opt'
17602 nm_so_opt='$nm_so_opt'
17603 nonxs_ext='$nonxs_ext'
17604 nroff='$nroff'
17605 nvEUformat='$nvEUformat'
17606 nvFUformat='$nvFUformat'
17607 nvGUformat='$nvGUformat'
17608 nveformat='$nveformat'
17609 nvfformat='$nvfformat'
17610 nvgformat='$nvgformat'
17611 nvsize='$nvsize'
17612 nvtype='$nvtype'
17613 o_nonblock='$o_nonblock'
17614 obj_ext='$obj_ext'
17615 old_pthread_create_joinable='$old_pthread_create_joinable'
17616 optimize='$optimize'
17617 orderlib='$orderlib'
17618 osname='$osname'
17619 osvers='$osvers'
17620 otherlibdirs='$otherlibdirs'
17621 package='$package'
17622 pager='$pager'
17623 passcat='$passcat'
17624 patchlevel='$patchlevel'
17625 path_sep='$path_sep'
17626 perl5='$perl5'
17627 perl='$perl'
17628 perl_patchlevel='$perl_patchlevel'
17629 perladmin='$perladmin'
17630 perllibs='$perllibs'
17631 perlpath='$perlpath'
17632 pg='$pg'
17633 phostname='$phostname'
17634 pidtype='$pidtype'
17635 plibpth='$plibpth'
17636 pm_apiversion='$pm_apiversion'
17637 pmake='$pmake'
17638 pr='$pr'
17639 prefix='$prefix'
17640 prefixexp='$prefixexp'
17641 privlib='$privlib'
17642 privlibexp='$privlibexp'
17643 procselfexe='$procselfexe'
17644 prototype='$prototype'
17645 ptrsize='$ptrsize'
17646 quadkind='$quadkind'
17647 quadtype='$quadtype'
17648 randbits='$randbits'
17649 randfunc='$randfunc'
17650 randseedtype='$randseedtype'
17651 ranlib='$ranlib'
17652 rd_nodata='$rd_nodata'
17653 revision='$revision'
17654 rm='$rm'
17655 rmail='$rmail'
17656 run='$run'
17657 runnm='$runnm'
17658 sPRIEUldbl='$sPRIEUldbl'
17659 sPRIFUldbl='$sPRIFUldbl'
17660 sPRIGUldbl='$sPRIGUldbl'
17661 sPRIXU64='$sPRIXU64'
17662 sPRId64='$sPRId64'
17663 sPRIeldbl='$sPRIeldbl'
17664 sPRIfldbl='$sPRIfldbl'
17665 sPRIgldbl='$sPRIgldbl'
17666 sPRIi64='$sPRIi64'
17667 sPRIo64='$sPRIo64'
17668 sPRIu64='$sPRIu64'
17669 sPRIx64='$sPRIx64'
17670 sSCNfldbl='$sSCNfldbl'
17671 sched_yield='$sched_yield'
17672 scriptdir='$scriptdir'
17673 scriptdirexp='$scriptdirexp'
17674 sed='$sed'
17675 seedfunc='$seedfunc'
17676 selectminbits='$selectminbits'
17677 selecttype='$selecttype'
17678 sendmail='$sendmail'
17679 sh='$sh'
17680 shar='$shar'
17681 sharpbang='$sharpbang'
17682 shmattype='$shmattype'
17683 shortsize='$shortsize'
17684 shrpenv='$shrpenv'
17685 shsharp='$shsharp'
17686 sig_count='$sig_count'
17687 sig_name='$sig_name'
17688 sig_name_init='$sig_name_init'
17689 sig_num='$sig_num'
17690 sig_num_init='$sig_num_init'
17691 sig_size='$sig_size'
17692 signal_t='$signal_t'
17693 sitearch='$sitearch'
17694 sitearchexp='$sitearchexp'
17695 sitebin='$sitebin'
17696 sitebinexp='$sitebinexp'
17697 sitelib='$sitelib'
17698 sitelib_stem='$sitelib_stem'
17699 sitelibexp='$sitelibexp'
17700 siteprefix='$siteprefix'
17701 siteprefixexp='$siteprefixexp'
17702 sizesize='$sizesize'
17703 sizetype='$sizetype'
17704 sleep='$sleep'
17705 smail='$smail'
17706 so='$so'
17707 sockethdr='$sockethdr'
17708 socketlib='$socketlib'
17709 socksizetype='$socksizetype'
17710 sort='$sort'
17711 spackage='$spackage'
17712 spitshell='$spitshell'
17713 src='$src'
17714 ssizetype='$ssizetype'
17715 startperl='$startperl'
17716 startsh='$startsh'
17717 static_ext='$static_ext'
17718 stdchar='$stdchar'
17719 stdio_base='$stdio_base'
17720 stdio_bufsiz='$stdio_bufsiz'
17721 stdio_cnt='$stdio_cnt'
17722 stdio_filbuf='$stdio_filbuf'
17723 stdio_ptr='$stdio_ptr'
17724 stdio_stream_array='$stdio_stream_array'
17725 strings='$strings'
17726 submit='$submit'
17727 subversion='$subversion'
17728 sysman='$sysman'
17729 tail='$tail'
17730 tar='$tar'
17731 targetarch='$targetarch'
17732 tbl='$tbl'
17733 tee='$tee'
17734 test='$test'
17735 timeincl='$timeincl'
17736 timetype='$timetype'
17737 to='$to'
17738 touch='$touch'
17739 tr='$tr'
17740 trnl='$trnl'
17741 troff='$troff'
17742 u16size='$u16size'
17743 u16type='$u16type'
17744 u32size='$u32size'
17745 u32type='$u32type'
17746 u64size='$u64size'
17747 u64type='$u64type'
17748 u8size='$u8size'
17749 u8type='$u8type'
17750 uidformat='$uidformat'
17751 uidsign='$uidsign'
17752 uidsize='$uidsize'
17753 uidtype='$uidtype'
17754 uname='$uname'
17755 uniq='$uniq'
17756 uquadtype='$uquadtype'
17757 use5005threads='$use5005threads'
17758 use64bitall='$use64bitall'
17759 use64bitint='$use64bitint'
17760 usecrosscompile='$usecrosscompile'
17761 usedl='$usedl'
17762 useithreads='$useithreads'
17763 uselargefiles='$uselargefiles'
17764 uselongdouble='$uselongdouble'
17765 usemorebits='$usemorebits'
17766 usemultiplicity='$usemultiplicity'
17767 usemymalloc='$usemymalloc'
17768 usenm='$usenm'
17769 useopcode='$useopcode'
17770 useperlio='$useperlio'
17771 useposix='$useposix'
17772 usereentrant='$usereentrant'
17773 usesfio='$usesfio'
17774 useshrplib='$useshrplib'
17775 usesocks='$usesocks'
17776 usethreads='$usethreads'
17777 usevendorprefix='$usevendorprefix'
17778 usevfork='$usevfork'
17779 usrinc='$usrinc'
17780 uuname='$uuname'
17781 uvXUformat='$uvXUformat'
17782 uvoformat='$uvoformat'
17783 uvsize='$uvsize'
17784 uvtype='$uvtype'
17785 uvuformat='$uvuformat'
17786 uvxformat='$uvxformat'
17787 vendorarch='$vendorarch'
17788 vendorarchexp='$vendorarchexp'
17789 vendorbin='$vendorbin'
17790 vendorbinexp='$vendorbinexp'
17791 vendorlib='$vendorlib'
17792 vendorlib_stem='$vendorlib_stem'
17793 vendorlibexp='$vendorlibexp'
17794 vendorprefix='$vendorprefix'
17795 vendorprefixexp='$vendorprefixexp'
17796 version='$version'
17797 version_patchlevel_string='$version_patchlevel_string'
17798 versiononly='$versiononly'
17799 vi='$vi'
17800 voidflags='$voidflags'
17801 xlibpth='$xlibpth'
17802 xs_apiversion='$xs_apiversion'
17803 yacc='$yacc'
17804 yaccflags='$yaccflags'
17805 zcat='$zcat'
17806 zip='$zip'
17807 EOT
17808
17809 : Add in command line options if available
17810 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17811
17812 : add special variables
17813 $test -f $src/patchlevel.h && \
17814 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17815 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17816 echo "PERL_CONFIG_SH=true" >>config.sh
17817
17818 : propagate old symbols
17819 if $test -f UU/config.sh; then
17820         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17821         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17822         $sort | $uniq -u >UU/oldsyms
17823         set X `cat UU/oldsyms`
17824         shift
17825         case $# in
17826         0) ;;
17827         *)
17828                 cat <<EOM
17829 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17830 EOM
17831                 echo "# Variables propagated from previous config.sh file." >>config.sh
17832                 for sym in `cat UU/oldsyms`; do
17833                         echo "    Propagating $hint variable "'$'"$sym..."
17834                         eval 'tmp="$'"${sym}"'"'
17835                         echo "$tmp" | \
17836                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17837                 done
17838                 ;;
17839         esac
17840 fi
17841
17842 : Finish up by extracting the .SH files
17843 case "$alldone" in
17844 exit)
17845         $rm -rf UU
17846         echo "Extraction done."
17847         exit 0
17848         ;;
17849 cont)
17850         ;;
17851 '')
17852         dflt=''
17853         nostick=true
17854         $cat <<EOM
17855
17856 If you'd like to make any changes to the config.sh file before I begin
17857 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17858
17859 EOM
17860         rp="Press return or use a shell escape to edit config.sh:"
17861         . UU/myread
17862         nostick=''
17863         case "$ans" in
17864         '') ;;
17865         *) : in case they cannot read
17866                 sh 1>&4 -c "$ans";;
17867         esac
17868         ;;
17869 esac
17870
17871 : if this fails, just run all the .SH files by hand
17872 . ./config.sh
17873
17874 echo " "
17875 exec 1>&4
17876 pwd=`pwd`
17877 . ./UU/extract
17878 cd "$pwd"
17879
17880 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17881         dflt=y
17882         case "$silent" in
17883         true) ;;
17884         *)
17885                 $cat <<EOM
17886
17887 Now you need to generate make dependencies by running "$make depend".
17888 You might prefer to run it in background: "$make depend > makedepend.out &"
17889 It can take a while, so you might not want to run it right now.
17890
17891 EOM
17892                 ;;
17893         esac
17894         rp="Run $make depend now?"
17895         . UU/myread
17896         case "$ans" in
17897         y*)
17898                 $make depend && echo "Now you must run '$make'."
17899                 ;;
17900         *)
17901                 echo "You must run '$make depend' then '$make'."
17902                 ;;
17903         esac
17904 elif test -f [Mm]akefile; then
17905         echo " "
17906         echo "Now you must run a $make."
17907 else
17908         echo "Configure done."
17909 fi
17910
17911 if $test -f Policy.sh; then
17912     $cat <<EOM
17913
17914 If you compile $package on a different machine or from a different object
17915 directory, copy the Policy.sh file from this object directory to the
17916 new one before you run Configure -- this will help you with most of
17917 the policy defaults.
17918
17919 EOM
17920 fi
17921 if $test -f config.msg; then
17922     echo "Hmm.  I also noted the following information while running:"
17923     echo " "
17924     $cat config.msg >&4
17925     $rm -f config.msg
17926 fi
17927 $rm -f kit*isdone ark*isdone
17928 $rm -rf UU
17929
17930 : End of Configure
17931