The Configure change to go with #14604.
[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  8 22:04:29 EET 2002 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 i_systime=''
760 i_systimek=''
761 i_time=''
762 timeincl=''
763 i_unistd=''
764 i_ustat=''
765 i_utime=''
766 i_values=''
767 i_stdarg=''
768 i_varargs=''
769 i_varhdr=''
770 i_vfork=''
771 inc_version_list=''
772 inc_version_list_init=''
773 installprefix=''
774 installprefixexp=''
775 installstyle=''
776 installusrbinperl=''
777 intsize=''
778 longsize=''
779 shortsize=''
780 issymlink=''
781 libc=''
782 ldlibpthname=''
783 libperl=''
784 shrpenv=''
785 useshrplib=''
786 glibpth=''
787 libpth=''
788 loclibpth=''
789 plibpth=''
790 xlibpth=''
791 ignore_versioned_solibs=''
792 libs=''
793 libsdirs=''
794 libsfiles=''
795 libsfound=''
796 libspath=''
797 lns=''
798 d_PRIEUldbl=''
799 d_PRIFUldbl=''
800 d_PRIGUldbl=''
801 d_PRIeldbl=''
802 d_PRIfldbl=''
803 d_PRIgldbl=''
804 d_SCNfldbl=''
805 sPRIEUldbl=''
806 sPRIFUldbl=''
807 sPRIGUldbl=''
808 sPRIeldbl=''
809 sPRIfldbl=''
810 sPRIgldbl=''
811 sSCNfldbl=''
812 lseeksize=''
813 lseektype=''
814 make_set_make=''
815 d_mymalloc=''
816 freetype=''
817 mallocobj=''
818 mallocsrc=''
819 malloctype=''
820 usemymalloc=''
821 installman1dir=''
822 man1dir=''
823 man1direxp=''
824 man1ext=''
825 installman3dir=''
826 man3dir=''
827 man3direxp=''
828 man3ext=''
829 modetype=''
830 multiarch=''
831 mydomain=''
832 myhostname=''
833 phostname=''
834 c=''
835 n=''
836 d_eofnblk=''
837 eagain=''
838 o_nonblock=''
839 rd_nodata=''
840 need_va_copy=''
841 netdb_hlen_type=''
842 netdb_host_type=''
843 netdb_name_type=''
844 netdb_net_type=''
845 groupcat=''
846 hostcat=''
847 passcat=''
848 orderlib=''
849 ranlib=''
850 d_perl_otherlibdirs=''
851 otherlibdirs=''
852 package=''
853 spackage=''
854 pager=''
855 api_revision=''
856 api_subversion=''
857 api_version=''
858 api_versionstring=''
859 patchlevel=''
860 perl_patchlevel=''
861 revision=''
862 subversion=''
863 version=''
864 version_patchlevel_string=''
865 perl5=''
866 perladmin=''
867 perlpath=''
868 d_nv_preserves_uv=''
869 d_nv_preserves_uv_bits=''
870 i16size=''
871 i16type=''
872 i32size=''
873 i32type=''
874 i64size=''
875 i64type=''
876 i8size=''
877 i8type=''
878 ivsize=''
879 ivtype=''
880 nvsize=''
881 nvtype=''
882 u16size=''
883 u16type=''
884 u32size=''
885 u32type=''
886 u64size=''
887 u64type=''
888 u8size=''
889 u8type=''
890 uvsize=''
891 uvtype=''
892 ivdformat=''
893 nvEUformat=''
894 nvFUformat=''
895 nvGUformat=''
896 nveformat=''
897 nvfformat=''
898 nvgformat=''
899 uvXUformat=''
900 uvoformat=''
901 uvuformat=''
902 uvxformat=''
903 pidtype=''
904 prefix=''
905 prefixexp=''
906 installprivlib=''
907 privlib=''
908 privlibexp=''
909 prototype=''
910 ptrsize=''
911 d_PRIXU64=''
912 d_PRId64=''
913 d_PRIi64=''
914 d_PRIo64=''
915 d_PRIu64=''
916 d_PRIx64=''
917 sPRIXU64=''
918 sPRId64=''
919 sPRIi64=''
920 sPRIo64=''
921 sPRIu64=''
922 sPRIx64=''
923 d_quad=''
924 quadkind=''
925 quadtype=''
926 uquadtype=''
927 drand01=''
928 randbits=''
929 randfunc=''
930 randseedtype=''
931 seedfunc=''
932 installscript=''
933 scriptdir=''
934 scriptdirexp=''
935 selectminbits=''
936 selecttype=''
937 sh=''
938 sig_count=''
939 sig_name=''
940 sig_name_init=''
941 sig_num=''
942 sig_num_init=''
943 sig_size=''
944 installsitearch=''
945 sitearch=''
946 sitearchexp=''
947 installsitebin=''
948 sitebin=''
949 sitebinexp=''
950 installsitelib=''
951 sitelib=''
952 sitelib_stem=''
953 sitelibexp=''
954 siteprefix=''
955 siteprefixexp=''
956 sizesize=''
957 sizetype=''
958 so=''
959 socksizetype=''
960 sharpbang=''
961 shsharp=''
962 spitshell=''
963 src=''
964 ssizetype=''
965 startperl=''
966 startsh=''
967 stdchar=''
968 d_stdio_stream_array=''
969 stdio_stream_array=''
970 sysman=''
971 trnl=''
972 uidformat=''
973 uidsign=''
974 uidsize=''
975 uidtype=''
976 archname64=''
977 use64bitall=''
978 use64bitint=''
979 ccflags_uselargefiles=''
980 ldflags_uselargefiles=''
981 libswanted_uselargefiles=''
982 uselargefiles=''
983 uselongdouble=''
984 usemorebits=''
985 usemultiplicity=''
986 nm_opt=''
987 nm_so_opt=''
988 runnm=''
989 usenm=''
990 useperlio=''
991 usesocks=''
992 d_oldpthreads=''
993 use5005threads=''
994 useithreads=''
995 usereentrant=''
996 usethreads=''
997 incpath=''
998 mips_type=''
999 usrinc=''
1000 d_vendorarch=''
1001 installvendorarch=''
1002 vendorarch=''
1003 vendorarchexp=''
1004 d_vendorbin=''
1005 installvendorbin=''
1006 vendorbin=''
1007 vendorbinexp=''
1008 d_vendorlib=''
1009 installvendorlib=''
1010 vendorlib=''
1011 vendorlib_stem=''
1012 vendorlibexp=''
1013 usevendorprefix=''
1014 vendorprefix=''
1015 vendorprefixexp=''
1016 versiononly=''
1017 defvoidused=''
1018 voidflags=''
1019 pm_apiversion=''
1020 xs_apiversion=''
1021 yacc=''
1022 yaccflags=''
1023 CONFIG=''
1024
1025 define='define'
1026 undef='undef'
1027 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1028 rmlist=''
1029
1030 : We must find out about Eunice early
1031 eunicefix=':'
1032 if test -f /etc/unixtovms; then
1033         eunicefix=/etc/unixtovms
1034 fi
1035 if test -f /etc/unixtovms.exe; then
1036         eunicefix=/etc/unixtovms.exe
1037 fi
1038
1039 : Set executable suffix now -- needed before hints available
1040 : maybe Stratus VOS
1041 if test -f "/system/gnu_library/bin/ar.pm"; then
1042     _exe=".pm"
1043 fi
1044 : maybe dos djgpp
1045 if test -n "$DJGPP"; then
1046     _exe=".exe"
1047 fi
1048
1049 i_whoami=''
1050 ccname=''
1051 ccversion=''
1052 perllibs=''
1053 : set useposix=false in your hint file to disable the POSIX extension.
1054 useposix=true
1055 : set useopcode=false in your hint file to disable the Opcode extension.
1056 useopcode=true
1057 : Trailing extension.  Override this in a hint file, if needed.
1058 : Extra object files, if any, needed on this platform.
1059 archobjs=''
1060 archname=''
1061 : Possible local include directories to search.
1062 : Set locincpth to "" in a hint file to defeat local include searches.
1063 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1064 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1065 :
1066 : no include file wanted by default
1067 inclwanted=''
1068
1069 groupstype=''
1070 libnames=''
1071 : change the next line if compiling for Xenix/286 on Xenix/386
1072 xlibpth='/usr/lib/386 /lib/386'
1073 : Possible local library directories to search.
1074 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1075 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1076
1077 : general looking path for locating libraries
1078 glibpth="/lib /usr/lib $xlibpth"
1079 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1080 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1081 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1082
1083 : Private path used by Configure to find libraries.  Its value
1084 : is prepended to libpth. This variable takes care of special
1085 : machines, like the mips.  Usually, it should be empty.
1086 plibpth=''
1087
1088 : default library list
1089 libswanted=''
1090 : some systems want to use only the non-versioned libso:s
1091 ignore_versioned_solibs=''
1092 archname64=''
1093 ccflags_uselargefiles=''
1094 ldflags_uselargefiles=''
1095 libswanted_uselargefiles=''
1096 : set usemultiplicity on the Configure command line to enable multiplicity.
1097 : set usesocks on the Configure command line to enable socks.
1098 : set usethreads on the Configure command line to enable threads.
1099 usereentrant='undef'
1100 : full support for void wanted by default
1101 defvoidused=15
1102
1103 : List of libraries we want.
1104 : If anyone needs -lnet, put it in a hint file.
1105 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1106 libswanted="$libswanted dld ld sun m c cposix posix"
1107 libswanted="$libswanted ndir dir crypt sec"
1108 libswanted="$libswanted ucb bsd BSD PW x util"
1109 : We probably want to search /usr/shlib before most other libraries.
1110 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1111 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1112 glibpth="/usr/shlib $glibpth"
1113 : Do not use vfork unless overridden by a hint file.
1114 usevfork=false
1115
1116 : Find the basic shell for Bourne shell scripts
1117 case "$sh" in
1118 '')
1119         case "$SYSTYPE" in
1120         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1121         *) xxx='/bin/sh';;
1122         esac
1123         if test -f "$xxx"; then
1124                 sh="$xxx"
1125         else
1126                 : Build up a list and do a single loop so we can 'break' out.
1127                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1128                 for xxx in sh bash ksh pdksh ash; do
1129                         for p in $pth; do
1130                                 try="$try ${p}/${xxx}"
1131                         done
1132                 done
1133                 for xxx in $try; do
1134                         if test -f "$xxx"; then
1135                                 sh="$xxx";
1136                                 break
1137                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1138                                 sh="$xxx";
1139                                 break
1140                         elif test -f "$xxx.exe"; then
1141                                 sh="$xxx";
1142                                 break
1143                         fi
1144                 done
1145         fi
1146         ;;
1147 esac
1148
1149 case "$sh" in
1150 '')     cat >&2 <<EOM
1151 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1152
1153 Usually it's in /bin/sh.  How did you even get this far?
1154 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1155 we'll try to straighten this all out.
1156 EOM
1157         exit 1
1158         ;;
1159 esac
1160
1161 : see if sh knows # comments
1162 if `$sh -c '#' >/dev/null 2>&1`; then
1163         shsharp=true
1164         spitshell=cat
1165         xcat=/bin/cat
1166         test -f $xcat$_exe || xcat=/usr/bin/cat
1167         if test ! -f $xcat$_exe; then
1168                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1169                         if test -f $p/cat$_exe; then
1170                                 xcat=$p/cat
1171                                 break
1172                         fi
1173                 done
1174                 if test ! -f $xcat$_exe; then
1175                         echo "Can't find cat anywhere!"
1176                         exit 1
1177                 fi
1178         fi
1179         echo "#!$xcat" >sharp
1180         $eunicefix sharp
1181         chmod +x sharp
1182         ./sharp > today
1183         if test -s today; then
1184                 sharpbang='#!'
1185         else
1186                 echo "#! $xcat" > sharp
1187                 $eunicefix sharp
1188                 chmod +x sharp
1189                 ./sharp > today
1190                 if test -s today; then
1191                         sharpbang='#! '
1192                 else
1193                         sharpbang=': use '
1194                 fi
1195         fi
1196 else
1197         echo " "
1198         echo "Your $sh doesn't grok # comments--I will strip them later on."
1199         shsharp=false
1200         cd ..
1201         echo "exec grep -v '^[  ]*#'" >spitshell
1202         chmod +x spitshell
1203         $eunicefix spitshell
1204         spitshell=`pwd`/spitshell
1205         cd UU
1206         echo "I presume that if # doesn't work, #! won't work either!"
1207         sharpbang=': use '
1208 fi
1209 rm -f sharp today
1210
1211 : figure out how to guarantee sh startup
1212 case "$startsh" in
1213 '') startsh=${sharpbang}${sh} ;;
1214 *)
1215 esac
1216 cat >sharp <<EOSS
1217 $startsh
1218 set abc
1219 test "$?abc" != 1
1220 EOSS
1221
1222 chmod +x sharp
1223 $eunicefix sharp
1224 if ./sharp; then
1225         : echo "Yup, it does."
1226 else
1227         echo "Hmm... '$startsh' does not guarantee sh startup..."
1228         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1229 fi
1230 rm -f sharp
1231
1232
1233 : Save command line options in file UU/cmdline.opt for later use in
1234 : generating config.sh.
1235 cat > cmdline.opt <<EOSH
1236 # Configure command line arguments.
1237 config_arg0='$0'
1238 config_args='$*'
1239 config_argc=$#
1240 EOSH
1241 argn=1
1242 args_exp=''
1243 args_sep=''
1244 for arg in "$@"; do
1245         cat >>cmdline.opt <<EOSH
1246 config_arg$argn='$arg'
1247 EOSH
1248         # Extreme backslashitis: replace each ' by '"'"'
1249         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1250 $arg
1251 EOC
1252         arg_exp=`cat cmdl.opt`
1253         args_exp="$args_exp$args_sep'$arg_exp'"
1254         argn=`expr $argn + 1`
1255         args_sep=' '
1256 done
1257 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1258 # used by ./hints/os2.sh
1259 rm -f cmdl.opt
1260
1261 : produce awk script to parse command line options
1262 cat >options.awk <<'EOF'
1263 BEGIN {
1264         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1265
1266         len = length(optstr);
1267         for (i = 1; i <= len; i++) {
1268                 c = substr(optstr, i, 1);
1269                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1270                 if (a == ":") {
1271                         arg[c] = 1;
1272                         i++;
1273                 }
1274                 opt[c] = 1;
1275         }
1276 }
1277 {
1278         expect = 0;
1279         str = $0;
1280         if (substr(str, 1, 1) != "-") {
1281                 printf("'%s'\n", str);
1282                 next;
1283         }
1284         len = length($0);
1285         for (i = 2; i <= len; i++) {
1286                 c = substr(str, i, 1);
1287                 if (!opt[c]) {
1288                         printf("-%s\n", substr(str, i));
1289                         next;
1290                 }
1291                 printf("-%s\n", c);
1292                 if (arg[c]) {
1293                         if (i < len)
1294                                 printf("'%s'\n", substr(str, i + 1));
1295                         else
1296                                 expect = 1;
1297                         next;
1298                 }
1299         }
1300 }
1301 END {
1302         if (expect)
1303                 print "?";
1304 }
1305 EOF
1306
1307 : process the command line options
1308 set X `for arg in "$@"; do echo "X$arg"; done |
1309         sed -e s/X// | awk -f options.awk`
1310 eval "set $*"
1311 shift
1312 rm -f options.awk
1313
1314 : set up default values
1315 fastread=''
1316 reuseval=false
1317 config_sh=''
1318 alldone=''
1319 error=''
1320 silent=''
1321 extractsh=''
1322 override=''
1323 knowitall=''
1324 rm -f optdef.sh posthint.sh
1325 cat >optdef.sh <<EOS
1326 $startsh
1327 EOS
1328
1329
1330 : option parsing
1331 while test $# -gt 0; do
1332         case "$1" in
1333         -d) shift; fastread=yes;;
1334         -e) shift; alldone=cont;;
1335         -f)
1336                 shift
1337                 cd ..
1338                 if test -r "$1"; then
1339                         config_sh="$1"
1340                 else
1341                         echo "$me: cannot read config file $1." >&2
1342                         error=true
1343                 fi
1344                 cd UU
1345                 shift;;
1346         -h) shift; error=true;;
1347         -r) shift; reuseval=true;;
1348         -s) shift; silent=true; realsilent=true;;
1349         -E) shift; alldone=exit;;
1350         -K) shift; knowitall=true;;
1351         -O) shift; override=true;;
1352         -S) shift; silent=true; extractsh=true;;
1353         -D)
1354                 shift
1355                 case "$1" in
1356                 *=)
1357                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1358                         echo "$me: ignoring -D $1" >&2
1359                         ;;
1360                 *=*) echo "$1" | \
1361                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1362                 *) echo "$1='define'" >> optdef.sh;;
1363                 esac
1364                 shift
1365                 ;;
1366         -U)
1367                 shift
1368                 case "$1" in
1369                 *=) echo "$1" >> optdef.sh;;
1370                 *=*)
1371                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1372                         echo "$me: ignoring -U $1" >&2
1373                         ;;
1374                 *) echo "$1='undef'" >> optdef.sh;;
1375                 esac
1376                 shift
1377                 ;;
1378         -A)
1379             shift
1380             xxx=''
1381             yyy="$1"
1382             zzz=''
1383             uuu=undef
1384             case "$yyy" in
1385             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1386                  case "$zzz" in
1387                  *:*) zzz='' ;;
1388                  *)   xxx=append
1389                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1390                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1391                  esac
1392                  ;;
1393             esac
1394             case "$xxx" in
1395             '')  case "$yyy" in
1396                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1397                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1398                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1399                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1400                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1401                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1402                  esac
1403                  ;;       
1404             esac
1405             case "$xxx" in
1406             append)
1407                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1408             clear)
1409                 echo "$yyy=''"                  >> posthint.sh ;;
1410             define)
1411                 case "$zzz" in
1412                 '') zzz=define ;;
1413                 esac
1414                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1415             eval)
1416                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1417             prepend)
1418                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1419             undef)
1420                 case "$zzz" in
1421                 '') zzz="$uuu" ;;
1422                 esac
1423                 echo "$yyy=$zzz"                >> posthint.sh ;;
1424             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1425             esac
1426             shift
1427             ;;
1428         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1429             exit 0;;
1430         --) break;;
1431         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1432         *) break;;
1433         esac
1434 done
1435
1436 case "$error" in
1437 true)
1438         cat >&2 <<EOM
1439 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1440                  [-U symbol] [-U symbol=] [-A command:symbol...]
1441   -d : use defaults for all answers.
1442   -e : go on without questioning past the production of config.sh.
1443   -f : specify an alternate default configuration file.
1444   -h : print this help message and exit (with an error status).
1445   -r : reuse C symbols value if possible (skips costly nm extraction).
1446   -s : silent mode, only echoes questions and essential information.
1447   -D : define symbol to have some value:
1448          -D symbol         symbol gets the value 'define'
1449          -D symbol=value   symbol gets the value 'value'
1450   -E : stop at the end of questions, after having produced config.sh.
1451   -K : do not use unless you know what you are doing.
1452   -O : let -D and -U override definitions from loaded configuration file.
1453   -S : perform variable substitutions on all .SH files (can mix with -f)
1454   -U : undefine symbol:
1455          -U symbol    symbol gets the value 'undef'
1456          -U symbol=   symbol gets completely empty
1457   -A : manipulate symbol after the platform specific hints have been applied:
1458          -A symbol=value                append " "value to symbol
1459          -A append:symbol=value         append value to symbol
1460          -A define:symbol=value         define symbol to have value
1461          -A clear:symbol                define symbol to be ''
1462          -A define:symbol               define symbol to be 'define'
1463          -A eval:symbol=value           define symbol to be eval of value
1464          -A prepend:symbol=value        prepend value to symbol
1465          -A undef:symbol                define symbol to be 'undef'
1466          -A undef:symbol=               define symbol to be ''
1467   -V : print version number and exit (with a zero status).
1468 EOM
1469         exit 1
1470         ;;
1471 esac
1472
1473 : Sanity checks
1474 case "$fastread$alldone" in
1475 yescont|yesexit) ;;
1476 *)
1477         case "$extractsh" in
1478         true) ;;
1479         *)
1480                 if test ! -t 0; then
1481                         echo "Say 'sh Configure', not 'sh <Configure'"
1482                         exit 1
1483                 fi
1484                 ;;
1485         esac
1486         ;;
1487 esac
1488
1489 exec 4>&1
1490 case "$silent" in
1491 true) exec 1>/dev/null;;
1492 esac
1493
1494 : run the defines and the undefines, if any, but leave the file out there...
1495 touch optdef.sh
1496 . ./optdef.sh
1497 : create the posthint manipulation script and leave the file out there...
1498 touch posthint.sh
1499
1500 : set package name
1501 package=perl5
1502 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1503 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1504 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1505 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1506 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1507 esac
1508
1509 : Some greps do not return status, grrr.
1510 echo "grimblepritz" >grimble
1511 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1512         contains=contains
1513 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1514         contains=grep
1515 else
1516         contains=contains
1517 fi
1518 rm -f grimble
1519 : the following should work in any shell
1520 case "$contains" in
1521 contains*)
1522         echo " "
1523         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1524         cat >contains <<'EOSS'
1525 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1526 EOSS
1527 chmod +x contains
1528 esac
1529
1530 : Find the path to the source tree
1531 case "$src" in
1532 '') case "$0" in
1533     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1534          case "$src" in
1535          /*)    ;;
1536          .)     ;;
1537          *)     src=`cd ../$src && pwd` ;;
1538          esac
1539          ;;
1540     *)   src='.';;
1541     esac;;
1542 esac
1543 case "$src" in
1544 '')     src=/
1545         rsrc=/
1546         ;;
1547 /*) rsrc="$src";;
1548 *) rsrc="../$src";;
1549 esac
1550 if test -f $rsrc/Configure && \
1551         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1552 then
1553    : found it, so we are ok.
1554 else
1555         rsrc=''
1556         for src in . .. ../.. ../../.. ../../../..; do
1557                 if test -f ../$src/Configure && \
1558                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1559                 then
1560                         rsrc=../$src
1561                         break
1562                 fi
1563         done
1564 fi
1565 case "$rsrc" in
1566 '')
1567         cat <<EOM >&4
1568
1569 Sorry, I can't seem to locate the source dir for $package.  Please start
1570 Configure with an explicit path -- i.e. /some/path/Configure.
1571
1572 EOM
1573         exit 1
1574         ;;
1575 ../.)   rsrc='..';;
1576 *)
1577         echo " "
1578         echo "Sources for $package found in \"$src\"." >&4
1579         ;;
1580 esac
1581
1582 : script used to extract .SH files with variable substitutions
1583 cat >extract <<'EOS'
1584 PERL_CONFIG_SH=true
1585 echo "Doing variable substitutions on .SH files..."
1586 if test -f MANIFEST; then
1587         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1588 else
1589         echo "(Looking for .SH files under the source directory.)"
1590         set x `(cd "$src"; find . -name "*.SH" -print)`
1591 fi
1592 shift
1593 case $# in
1594 0) set x `(cd "$src"; echo *.SH)`; shift;;
1595 esac
1596 if test ! -f "$src/$1"; then
1597         shift
1598 fi
1599 mkdir_p='
1600 name=$1;
1601 create="";
1602 while test $name; do
1603         if test ! -d "$name"; then
1604                 create="$name $create";
1605                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1606                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1607         else
1608                 name="";
1609         fi;
1610 done;
1611 for file in $create; do
1612         mkdir $file;
1613 done
1614 '
1615 for file in $*; do
1616         case "$src" in
1617         ".")
1618                 case "$file" in
1619                 */*)
1620                         dir=`expr X$file : 'X\(.*\)/'`
1621                         file=`expr X$file : 'X.*/\(.*\)'`
1622                         (cd "$dir" && . ./$file)
1623                         ;;
1624                 *)
1625                         . ./$file
1626                         ;;
1627                 esac
1628                 ;;
1629         *)
1630                 case "$file" in
1631                 */*)
1632                         dir=`expr X$file : 'X\(.*\)/'`
1633                         file=`expr X$file : 'X.*/\(.*\)'`
1634                         (set x $dir; shift; eval $mkdir_p)
1635                         sh <"$src/$dir/$file"
1636                         ;;
1637                 *)
1638                         sh <"$src/$file"
1639                         ;;
1640                 esac
1641                 ;;
1642         esac
1643 done
1644 if test -f "$src/config_h.SH"; then
1645         if test ! -f config.h; then
1646         : oops, they left it out of MANIFEST, probably, so do it anyway.
1647         . "$src/config_h.SH"
1648         fi
1649 fi
1650 EOS
1651
1652 : extract files and exit if asked to do so
1653 case "$extractsh" in
1654 true)
1655         case "$realsilent" in
1656         true) ;;
1657         *) exec 1>&4;;
1658         esac
1659         case "$config_sh" in
1660         '') config_sh='config.sh';;
1661         esac
1662         echo " "
1663         echo "Fetching answers from $config_sh..."
1664         cd ..
1665         . $config_sh
1666         test "$override" && . ./optdef.sh
1667         echo " "
1668         . UU/extract
1669         rm -rf UU
1670         echo "Extraction done."
1671         exit 0
1672         ;;
1673 esac
1674
1675 : Eunice requires " " instead of "", can you believe it
1676 echo " "
1677 : Here we go...
1678 echo "Beginning of configuration questions for $package."
1679
1680 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1681
1682 : first determine how to suppress newline on echo command
1683 echo " "
1684 echo "Checking echo to see how to suppress newlines..."
1685 (echo "hi there\c" ; echo " ") >.echotmp
1686 if $contains c .echotmp >/dev/null 2>&1 ; then
1687         echo "...using -n."
1688         n='-n'
1689         c=''
1690 else
1691         cat <<'EOM'
1692 ...using \c
1693 EOM
1694         n=''
1695         c='\c'
1696 fi
1697 echo $n "The star should be here-->$c"
1698 echo '*'
1699 rm -f .echotmp
1700
1701 : Now test for existence of everything in MANIFEST
1702 echo " "
1703 if test -f "$rsrc/MANIFEST"; then
1704         echo "First let's make sure your kit is complete.  Checking..." >&4
1705         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | split -50
1706         rm -f missing
1707         tmppwd=`pwd`
1708         for filelist in x??; do
1709                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1710         done
1711         if test -s missing; then
1712                 cat missing >&4
1713                 cat >&4 <<'EOM'
1714
1715 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1716
1717 You have the option of continuing the configuration process, despite the
1718 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1719 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1720 and contact the author (perlbug@perl.org).
1721
1722 EOM
1723                 echo $n "Continue? [n] $c" >&4
1724                 read ans
1725                 case "$ans" in
1726                 y*)
1727                         echo "Continuing..." >&4
1728                         rm -f missing
1729                         ;;
1730                 *)
1731                         echo "ABORTING..." >&4
1732                         kill $$
1733                         ;;
1734                 esac
1735         else
1736                 echo "Looks good..."
1737         fi
1738 else
1739         echo "There is no MANIFEST file.  I hope your kit is complete !"
1740 fi
1741 rm -f missing x??
1742
1743 echo " "
1744 : Find the appropriate value for a newline for tr
1745 if test -n "$DJGPP"; then
1746        trnl='\012'
1747 fi
1748 if test X"$trnl" = X; then
1749         case "`echo foo|tr '\n' x 2>/dev/null`" in
1750         foox) trnl='\n' ;;
1751         esac
1752 fi
1753 if test X"$trnl" = X; then
1754         case "`echo foo|tr '\012' x 2>/dev/null`" in
1755         foox) trnl='\012' ;;
1756         esac
1757 fi
1758 if test X"$trnl" = X; then
1759         cat <<EOM >&2
1760
1761 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1762
1763 EOM
1764         exit 1
1765 fi
1766
1767 : compute the number of columns on the terminal for proper question formatting
1768 case "$COLUMNS" in
1769 '') COLUMNS='80';;
1770 esac
1771
1772 : set up the echo used in my read
1773 myecho="case \"\$xxxm\" in
1774 '') echo $n \"\$rp $c\" >&4;;
1775 *) case \"\$rp\" in
1776         '') echo $n \"[\$xxxm] $c\";;
1777         *)
1778                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1779                         echo \"\$rp\" >&4
1780                         echo $n \"[\$xxxm] $c\" >&4
1781                 else
1782                         echo $n \"\$rp [\$xxxm] $c\" >&4
1783                 fi
1784                 ;;
1785         esac;;
1786 esac"
1787
1788 : now set up to do reads with possible shell escape and default assignment
1789 cat <<EOSC >myread
1790 $startsh
1791 xxxm=\$dflt
1792 $myecho
1793 ans='!'
1794 case "\$fastread" in
1795 yes) case "\$dflt" in
1796         '') ;;
1797         *) ans='';
1798                 case "\$silent-\$rp" in
1799                 true-) ;;
1800                 *) echo " " >&4;;
1801                 esac;;
1802         esac;;
1803 *) case "\$silent" in
1804         true) case "\$rp" in
1805                 '') ans='';;
1806                 esac;;
1807         esac;;
1808 esac
1809 while expr "X\$ans" : "X!" >/dev/null; do
1810         read answ
1811         set x \$xxxm
1812         shift
1813         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1814         case  "\$answ" in
1815         "!")
1816                 sh 1>&4
1817                 echo " "
1818                 $myecho
1819                 ;;
1820         !*)
1821                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1822                 shift
1823                 sh 1>&4 -c "\$*"
1824                 echo " "
1825                 $myecho
1826                 ;;
1827         "\$ans")
1828                 case "\$ans" in
1829                 \\&*)
1830                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1831                         shift
1832                         case "\$1" in
1833                         -d)
1834                                 fastread=yes
1835                                 echo "(OK, I'll run with -d after this question.)" >&4
1836                                 ;;
1837                         -*)
1838                                 echo "*** Sorry, \$1 not supported yet." >&4
1839                                 ;;
1840                         esac
1841                         $myecho
1842                         ans=!
1843                         ;;
1844                 esac;;
1845         *)
1846                 case "\$aok" in
1847                 y)
1848                         echo "*** Substitution done -- please confirm."
1849                         xxxm="\$ans"
1850                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1851                         xxxm="\$ans"
1852                         ans=!
1853                         ;;
1854                 *)
1855                         echo "*** Error -- try again."
1856                         ans=!
1857                         ;;
1858                 esac
1859                 $myecho
1860                 ;;
1861         esac
1862         case "\$ans\$xxxm\$nostick" in
1863         '')
1864                 ans=!
1865                 $myecho
1866                 ;;
1867         esac
1868 done
1869 case "\$ans" in
1870 '') ans="\$xxxm";;
1871 esac
1872 EOSC
1873
1874 : create .config dir to save info across Configure sessions
1875 test -d ../.config || mkdir ../.config
1876 cat >../.config/README <<EOF
1877 This directory created by Configure to save information that should
1878 persist across sessions for $package.
1879
1880 You may safely delete it if you wish.
1881 EOF
1882
1883 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1884 case "$usedevel" in
1885 $define|true|[yY]*) ;;
1886 *) case "$xversion" in
1887    *[13579])
1888         cat >&4 <<EOH
1889 *** WHOA THERE!!! ***
1890
1891     This is an UNSTABLE DEVELOPMENT release.
1892     The version of this $package distribution is $xversion, that is, odd,
1893     (as opposed to even) and that signifies a development release.
1894     If you want a maintenance release, you want an even-numbered version.
1895
1896     Do ***NOT*** install this into production use.
1897     Data corruption and crashes are possible.
1898
1899     It is most seriously suggested that you do not continue any further
1900     unless you want to help in developing and debugging Perl.
1901
1902     If you *still* want to build perl, you can answer 'y' now,
1903     or pass -Dusedevel to Configure.
1904
1905 EOH
1906         rp='Do you really want to continue?'
1907         dflt='n'
1908         . ./myread
1909         case "$ans" in
1910         [yY]) echo >&4 "Okay, continuing."
1911               usedevel="$define" ;;
1912         *) echo >&4 "Okay, bye."
1913            exit 1
1914            ;;
1915         esac
1916         ;;
1917     esac
1918     ;;
1919 esac
1920 case "$usedevel" in
1921 $define|true|[yY]*)
1922         case "$versiononly" in
1923         '') versiononly="$define" ;;
1924         esac
1925         case "$installusrbinperl" in
1926         '') installusrbinperl="$undef" ;;
1927         esac
1928         ;;
1929 esac
1930
1931 : general instructions
1932 needman=true
1933 firsttime=true
1934 user=`(logname) 2>/dev/null`
1935 case "$user" in
1936 '') user=`whoami 2>&1`;;
1937 esac
1938 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1939         firsttime=false
1940         echo " "
1941         rp='Would you like to see the instructions?'
1942         dflt=n
1943         . ./myread
1944         case "$ans" in
1945         [yY]*) ;;
1946         *) needman=false;;
1947         esac
1948 fi
1949 if $needman; then
1950         cat <<EOH
1951
1952 This installation shell script will examine your system and ask you questions
1953 to determine how the perl5 package should be installed. If you get
1954 stuck on a question, you may use a ! shell escape to start a subshell or
1955 execute a command.  Many of the questions will have default answers in square
1956 brackets; typing carriage return will give you the default.
1957
1958 On some of the questions which ask for file or directory names you are allowed
1959 to use the ~name construct to specify the login directory belonging to "name",
1960 even if you don't have a shell which knows about that.  Questions where this is
1961 allowed will be marked "(~name ok)".
1962
1963 EOH
1964         rp=''
1965         dflt='Type carriage return to continue'
1966         . ./myread
1967         cat <<'EOH'
1968
1969 The prompter used in this script allows you to use shell variables and
1970 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1971 in the default answer, as if the default line was a set of arguments given to a
1972 script shell.  This means you may also use $* to repeat the whole default line,
1973 so you do not have to re-type everything to add something to the default.
1974
1975 Everytime there is a substitution, you will have to confirm.  If there is an
1976 error (e.g. an unmatched backtick), the default answer will remain unchanged
1977 and you will be prompted again.
1978
1979 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1980 the questions and use the computed defaults (or the previous answers if there
1981 was already a config.sh file). Type 'Configure -h' for a list of options.
1982 You may also start interactively and then answer '& -d' at any prompt to turn
1983 on the non-interactive behaviour for the remainder of the execution.
1984
1985 EOH
1986         . ./myread
1987         cat <<EOH
1988
1989 Much effort has been expended to ensure that this shell script will run on any
1990 Unix system.  If despite that it blows up on yours, your best bet is to edit
1991 Configure and run it again.  If you can't run Configure for some reason,
1992 you'll have to generate a config.sh file by hand.  Whatever problems you
1993 have, let me (perlbug@perl.org) know how I blew it.
1994
1995 This installation script affects things in two ways:
1996
1997 1) it may do direct variable substitutions on some of the files included
1998    in this kit.
1999 2) it builds a config.h file for inclusion in C programs.  You may edit
2000    any of these files as the need arises after running this script.
2001
2002 If you make a mistake on a question, there is no easy way to back up to it
2003 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2004 files.  Configure will offer to let you do this before it runs the SH files.
2005
2006 EOH
2007         dflt='Type carriage return to continue'
2008         . ./myread
2009         case "$firsttime" in
2010         true) echo $user >>../.config/instruct;;
2011         esac
2012 fi
2013
2014 : find out where common programs are
2015 echo " "
2016 echo "Locating common programs..." >&4
2017 cat <<EOSC >loc
2018 $startsh
2019 case \$# in
2020 0) exit 1;;
2021 esac
2022 thing=\$1
2023 shift
2024 dflt=\$1
2025 shift
2026 for dir in \$*; do
2027         case "\$thing" in
2028         .)
2029         if test -d \$dir/\$thing; then
2030                 echo \$dir
2031                 exit 0
2032         fi
2033         ;;
2034         *)
2035         for thisthing in \$dir/\$thing; do
2036                 : just loop through to pick last item
2037         done
2038         if test -f \$thisthing; then
2039                 echo \$thisthing
2040                 exit 0
2041         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2042                 echo \$thisthing
2043                 exit 0
2044         elif test -f \$dir/\$thing.exe; then
2045                 if test -n "$DJGPP"; then
2046                         echo \$dir/\$thing.exe
2047                 else
2048                         : on Eunice apparently
2049                         echo \$dir/\$thing
2050                 fi
2051                 exit 0
2052         fi
2053         ;;
2054         esac
2055 done
2056 echo \$dflt
2057 exit 1
2058 EOSC
2059 chmod +x loc
2060 $eunicefix loc
2061 loclist="
2062 awk
2063 cat
2064 chmod
2065 comm
2066 cp
2067 echo
2068 expr
2069 grep
2070 ls
2071 mkdir
2072 rm
2073 sed
2074 sort
2075 touch
2076 tr
2077 uniq
2078 "
2079 trylist="
2080 Mcc
2081 ar
2082 bison
2083 byacc
2084 cpp
2085 csh
2086 date
2087 egrep
2088 gmake
2089 gzip
2090 less
2091 ln
2092 make
2093 more
2094 nm
2095 nroff
2096 pg
2097 test
2098 uname
2099 zip
2100 "
2101 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2102 pth="$pth /lib /usr/lib"
2103 for file in $loclist; do
2104         eval xxx=\$$file
2105         case "$xxx" in
2106         /*|?:[\\/]*)
2107                 if test -f "$xxx"; then
2108                         : ok
2109                 else
2110                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2111                         xxx=`./loc $file $file $pth`
2112                 fi
2113                 ;;
2114         '') xxx=`./loc $file $file $pth`;;
2115         *) xxx=`./loc $xxx $xxx $pth`;;
2116         esac
2117         eval $file=$xxx$_exe
2118         eval _$file=$xxx
2119         case "$xxx" in
2120         /*)
2121                 echo $file is in $xxx.
2122                 ;;
2123         ?:[\\/]*)
2124                 echo $file is in $xxx.
2125                 ;;
2126         *)
2127                 echo "I don't know where '$file' is, and my life depends on it." >&4
2128                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2129                 exit 1
2130                 ;;
2131         esac
2132 done
2133 echo " "
2134 echo "Don't worry if any of the following aren't found..."
2135 say=offhand
2136 for file in $trylist; do
2137         eval xxx=\$$file
2138         case "$xxx" in
2139         /*|?:[\\/]*)
2140                 if test -f "$xxx"; then
2141                         : ok
2142                 else
2143                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2144                         xxx=`./loc $file $file $pth`
2145                 fi
2146                 ;;
2147         '') xxx=`./loc $file $file $pth`;;
2148         *) xxx=`./loc $xxx $xxx $pth`;;
2149         esac
2150         eval $file=$xxx$_exe
2151         eval _$file=$xxx
2152         case "$xxx" in
2153         /*)
2154                 echo $file is in $xxx.
2155                 ;;
2156         ?:[\\/]*)
2157                 echo $file is in $xxx.
2158                 ;;
2159         *)
2160                 echo "I don't see $file out there, $say."
2161                 say=either
2162                 ;;
2163         esac
2164 done
2165 case "$egrep" in
2166 egrep)
2167         echo "Substituting grep for egrep."
2168         egrep=$grep
2169         _egrep=$grep
2170         ;;
2171 esac
2172 case "$ln" in
2173 ln)
2174         echo "Substituting cp for ln."
2175         ln=$cp
2176         _ln=$cp
2177         ;;
2178 esac
2179 case "$make" in
2180 make)   
2181         case "$gmake" in
2182         gmake)
2183         echo "I can't find make or gmake, and my life depends on it." >&4
2184         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2185         exit 1
2186         ;;
2187         esac
2188         ;;
2189 esac    
2190 case "$gmake" in
2191 gmake)  ;;
2192 *)      # We can't have osname yet.
2193         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2194                 # Assume that gmake, if found, is definitely GNU make
2195                 # and prefer it over the system make.
2196                 echo "Substituting gmake for make."
2197                 make=$gmake
2198                 _make=$gmake
2199         fi
2200         ;;
2201 esac
2202 case "$test" in
2203 test)
2204         echo "Hopefully test is built into your sh."
2205         ;;
2206 *)
2207         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2208                 echo "Using the test built into your sh."
2209                 test=test
2210                 _test=test
2211         fi
2212         ;;
2213 esac
2214 case "$echo" in
2215 echo)
2216         echo "Hopefully echo is built into your sh."
2217         ;;
2218 '') ;;
2219 *)
2220         echo " "
2221 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2222         $echo $n "hi there$c" >foo1
2223         echo $n "hi there$c" >foo2
2224         if cmp foo1 foo2 >/dev/null 2>&1; then
2225                 echo "They are compatible.  In fact, they may be identical."
2226         else
2227                 case "$n" in
2228                 '-n') n='' c='\c';;
2229                 *) n='-n' c='';;
2230                 esac
2231                 cat <<FOO
2232 They are not compatible!  You are probably running ksh on a non-USG system.
2233 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2234 have echo built in and we may have to run some Bourne shell scripts.  That
2235 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2236
2237 FOO
2238                 $echo $n "The star should be here-->$c"
2239                 $echo "*"
2240         fi
2241         $rm -f foo1 foo2
2242         ;;
2243 esac
2244
2245 cat <<EOS >checkcc
2246 $startsh
2247 EOS
2248 cat <<'EOSC' >>checkcc
2249 case "$cc" in
2250 '') ;;
2251 *)  $rm -f try try.*
2252     $cat >try.c <<EOM
2253 int main(int argc, char *argv[]) {
2254   return 0;
2255 }
2256 EOM
2257     if $cc -o try $ccflags $ldflags try.c; then
2258        :
2259     else
2260         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2261         despair=yes
2262         trygcc=yes
2263         case "$cc" in
2264         *gcc*) trygcc=no ;;
2265         esac
2266         case "`$cc -v -c try.c 2>&1`" in
2267         *gcc*) trygcc=no ;;
2268         esac
2269         if $test X"$trygcc" = Xyes; then
2270             if gcc -o try -c try.c; then
2271                 echo " "
2272                 echo "You seem to have a working gcc, though." >&4
2273                 rp="Would you like to use it?"
2274                 dflt=y
2275                 if $test -f myread; then
2276                     . ./myread
2277                 else
2278                     if $test -f UU/myread; then
2279                         . ./UU/myread
2280                     else
2281                         echo "Cannot find myread, sorry.  Aborting." >&2
2282                         exit 1
2283                     fi
2284                 fi  
2285                 case "$ans" in
2286                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2287                 esac
2288             fi
2289         fi
2290         if $test X"$despair" = Xyes; then
2291             $cat >&4 <<EOM
2292 You need to find a working C compiler.
2293 Either (purchase and) install the C compiler supplied by your OS vendor,
2294 or for a free C compiler try http://gcc.gnu.org/
2295 I cannot continue any further, aborting.
2296 EOM
2297             exit 1
2298         fi
2299     fi
2300     $rm -f try try.*
2301     ;;
2302 esac
2303 EOSC
2304
2305 : determine whether symbolic links are supported
2306 echo " "
2307 $touch blurfl
2308 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2309         echo "Symbolic links are supported." >&4
2310         lns="$ln -s"
2311 else
2312         echo "Symbolic links are NOT supported." >&4
2313         lns="$ln"
2314 fi
2315 $rm -f blurfl sym
2316
2317 : determine whether symbolic links are supported
2318 echo " "
2319 case "$lns" in
2320 *"ln -s")
2321         echo "Checking how to test for symbolic links..." >&4
2322         $lns blurfl sym
2323         if $test "X$issymlink" = X; then
2324                 case "$newsh" in
2325                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2326                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2327                 esac
2328                 if test $? = 0; then
2329                         issymlink="test -h"
2330                 else
2331                         echo "Your builtin 'test -h' may be broken." >&4
2332                         case "$test" in
2333                         /*)     ;;
2334                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2335                                 for p in $pth
2336                                 do
2337                                         if test -f "$p/$test"; then
2338                                                 test="$p/$test"
2339                                                 break
2340                                         fi
2341                                 done
2342                                 ;;
2343                         esac
2344                         case "$test" in
2345                         /*)
2346                                 echo "Trying external '$test -h'." >&4
2347                                 issymlink="$test -h"
2348                                 if $test ! -h sym >/dev/null 2>&1; then
2349                                         echo "External '$test -h' is broken, too." >&4
2350                                         issymlink=''
2351                                 fi
2352                                 ;;
2353                         *)      issymlink='' ;;
2354                         esac
2355                 fi              
2356         fi
2357         if $test "X$issymlink" = X; then
2358                 if $test -L sym 2>/dev/null; then
2359                         issymlink="$test -L"
2360                         echo "The builtin '$test -L' worked." >&4
2361                 fi
2362         fi
2363         if $test "X$issymlink" != X; then
2364                 echo "You can test for symbolic links with '$issymlink'." >&4
2365         else
2366                 echo "I do not know how you can test for symbolic links." >&4
2367         fi
2368         $rm -f blurfl sym
2369         ;;
2370 *)      echo "No symbolic links, so not testing for their testing..." >&4
2371         ;;
2372 esac
2373 echo " "
2374
2375
2376 case "$mksymlinks" in
2377 $define|true|[yY]*)
2378         case "$src" in
2379         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2380                 exit 1
2381                 ;;
2382         *)      case "$lns:$issymlink" in
2383                 *"ln -s:"*"test -"?)
2384                         echo "Creating the symbolic links..." >&4
2385                         echo "(First creating the subdirectories...)" >&4
2386                         cd ..
2387                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2388                                 read directory
2389                                 test -z "$directory" && break
2390                                 mkdir -p $directory
2391                         done
2392                         # Sanity check 1.
2393                         if test ! -d t/base; then
2394                                 echo "Failed to create the subdirectories.  Aborting." >&4
2395                                 exit 1
2396                         fi
2397                         echo "(Then creating the symlinks...)" >&4
2398                         awk '{print $1}' $src/MANIFEST | while true; do
2399                                 read filename
2400                                 test -z "$filename" && break
2401                                 if test -f $filename; then
2402                                         if $issymlink $filename; then
2403                                                 rm -f $filename
2404                                         fi
2405                                 fi
2406                                 if test -f $filename; then
2407                                         echo "$filename already exists, not symlinking."
2408                                 else
2409                                         ln -s $src/$filename $filename
2410                                 fi
2411                         done
2412                         # Sanity check 2.
2413                         if test ! -f t/base/lex.t; then
2414                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2415                                 exit 1
2416                         fi
2417                         cd UU
2418                         ;;
2419                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2420                         ;;
2421                 esac
2422                 ;;
2423         esac
2424         ;;
2425 esac
2426
2427
2428 case "$usecrosscompile" in
2429 $define|true|[yY]*)
2430         $echo "Cross-compiling..."
2431         croak=''
2432         case "$cc" in
2433         *-*-gcc) # A cross-compiling gcc, probably.
2434             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2435             ar=$targetarch-ar
2436             # leave out ld, choosing it is more complex
2437             nm=$targetarch-nm
2438             ranlib=$targetarch-ranlib
2439             $echo 'extern int foo;' > try.c
2440             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2441             shift
2442             if $test $# -gt 0; then
2443                 incpth="$incpth $*"
2444                 incpth="`$echo $incpth|$sed 's/^ //'`"
2445                 echo "Guessing incpth '$incpth'." >&4
2446                 for i in $*; do
2447                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2448                     if $test -d $j; then
2449                         libpth="$libpth $j"
2450                     fi
2451                 done   
2452                 libpth="`$echo $libpth|$sed 's/^ //'`"
2453                 echo "Guessing libpth '$libpth'." >&4
2454             fi
2455             $rm -f try.c
2456             ;;
2457         esac
2458         case "$targetarch" in
2459         '') echo "Targetarch not defined." >&4; croak=y ;;
2460         *)  echo "Using targetarch $targetarch." >&4 ;;
2461         esac
2462         case "$incpth" in
2463         '') echo "Incpth not defined." >&4; croak=y ;;
2464         *)  echo "Using incpth '$incpth'." >&4 ;;
2465         esac
2466         case "$libpth" in
2467         '') echo "Libpth not defined." >&4; croak=y ;;
2468         *)  echo "Using libpth '$libpth'." >&4 ;;
2469         esac
2470         case "$usrinc" in
2471         '') for i in $incpth; do
2472                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2473                     usrinc=$i
2474                     echo "Guessing usrinc $usrinc." >&4
2475                     break
2476                 fi
2477             done
2478             case "$usrinc" in
2479             '') echo "Usrinc not defined." >&4; croak=y ;;
2480             esac
2481             ;;
2482         *)  echo "Using usrinc $usrinc." >&4 ;;
2483         esac
2484         case "$targethost" in
2485         '') echo "Targethost not defined." >&4; croak=y ;;
2486         *)  echo "Using targethost $targethost." >&4
2487         esac
2488         locincpth=' '
2489         loclibpth=' '
2490         case "$croak" in
2491         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2492         esac
2493         case "$src" in
2494         /*) run=$src/Cross/run
2495             targetmkdir=$src/Cross/mkdir
2496             to=$src/Cross/to
2497             from=$src/Cross/from
2498             ;;
2499         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2500             run=$pwd/Cross/run
2501             targetmkdir=$pwd/Cross/mkdir
2502             to=$pwd/Cross/to
2503             from=$pwd/Cross/from
2504             ;;
2505         esac
2506         case "$targetrun" in
2507         '') targetrun=ssh ;;
2508         esac
2509         case "$targetto" in
2510         '') targetto=scp ;;
2511         esac
2512         case "$targetfrom" in
2513         '') targetfrom=scp ;;
2514         esac
2515         run=$run-$targetrun
2516         to=$to-$targetto
2517         from=$from-$targetfrom
2518         case "$targetdir" in
2519         '')  targetdir=/tmp
2520              echo "Guessing targetdir $targetdir." >&4
2521              ;;
2522         esac
2523         case "$targetuser" in
2524         '')  targetuser=root
2525              echo "Guessing targetuser $targetuser." >&4
2526              ;;
2527         esac
2528         case "$targetfrom" in
2529         scp)    q=-q ;;
2530         *)      q='' ;;
2531         esac
2532         case "$targetrun" in
2533         ssh|rsh)
2534             cat >$run <<EOF
2535 #!/bin/sh
2536 case "\$1" in
2537 -cwd)
2538   shift
2539   cwd=\$1
2540   shift
2541   ;;
2542 esac
2543 case "\$cwd" in
2544 '') cwd=$targetdir ;;
2545 esac
2546 exe=\$1
2547 shift
2548 if $test ! -f \$exe.xok; then
2549   $to \$exe
2550   $touch \$exe.xok
2551 fi
2552 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2553 EOF
2554             ;;
2555         *)  echo "Unknown targetrun '$targetrun'" >&4
2556             exit 1
2557             ;;
2558         esac
2559         case "$targetmkdir" in
2560         */Cross/mkdir)
2561             cat >$targetmkdir <<EOF
2562 #!/bin/sh
2563 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2564 EOF
2565             $chmod a+rx $targetmkdir
2566             ;;
2567         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2568             exit 1
2569             ;;
2570         esac
2571         case "$targetto" in
2572         scp|rcp)
2573             cat >$to <<EOF
2574 #!/bin/sh
2575 for f in \$@
2576 do
2577   case "\$f" in
2578   /*)
2579     $targetmkdir \`dirname \$f\`
2580     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2581     ;;
2582   *)
2583     $targetmkdir $targetdir/\`dirname \$f\`
2584     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2585     ;;
2586   esac
2587 done
2588 exit 0
2589 EOF
2590             ;;
2591         cp) cat >$to <<EOF
2592 #!/bin/sh
2593 for f in \$@
2594 do
2595   case "\$f" in
2596   /*)
2597     $mkdir -p $targetdir/\`dirname \$f\`
2598     $cp \$f $targetdir/\$f || exit 1
2599     ;;
2600   *)
2601     $targetmkdir $targetdir/\`dirname \$f\`
2602     $cp \$f $targetdir/\$f || exit 1
2603     ;;
2604   esac
2605 done
2606 exit 0
2607 EOF
2608             ;;
2609         *)  echo "Unknown targetto '$targetto'" >&4
2610             exit 1
2611             ;;
2612         esac
2613         case "$targetfrom" in
2614         scp|rcp)
2615           cat >$from <<EOF
2616 #!/bin/sh
2617 for f in \$@
2618 do
2619   $rm -f \$f
2620   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2621 done
2622 exit 0
2623 EOF
2624             ;;
2625         cp) cat >$from <<EOF
2626 #!/bin/sh
2627 for f in \$@
2628 do
2629   $rm -f \$f
2630   cp $targetdir/\$f . || exit 1
2631 done
2632 exit 0
2633 EOF
2634             ;;
2635         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2636             exit 1
2637             ;;
2638         esac
2639         if $test ! -f $run; then
2640             echo "Target 'run' script '$run' not found." >&4
2641         else
2642             $chmod a+rx $run
2643         fi
2644         if $test ! -f $to; then
2645             echo "Target 'to' script '$to' not found." >&4
2646         else
2647             $chmod a+rx $to
2648         fi
2649         if $test ! -f $from; then
2650             echo "Target 'from' script '$from' not found." >&4
2651         else
2652             $chmod a+rx $from
2653         fi
2654         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2655             exit 1
2656         fi
2657         cat >&4 <<EOF
2658 Using '$run' for remote execution,
2659 and '$from' and '$to'
2660 for remote file transfer.
2661 EOF
2662         ;;
2663 *)      run=''
2664         to=:
2665         from=:
2666         usecrosscompile='undef'
2667         targetarch=''
2668         ;;
2669 esac
2670
2671 : see whether [:lower:] and [:upper:] are supported character classes
2672 echo " "
2673 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2674 ABYZ)
2675         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2676         up='[:upper:]'
2677         low='[:lower:]'
2678         ;;
2679 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2680         # (0xc9 and 0xd1), therefore that is a nice testing point.
2681         if test "X$up" = X -o "X$low" = X; then
2682             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2683             ij) up='[A-Z]'
2684                 low='[a-z]'
2685                 ;;
2686             esac
2687         fi
2688         if test "X$up" = X -o "X$low" = X; then
2689             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2690             ij) up='A-Z'
2691                 low='a-z'
2692                 ;;
2693             esac
2694         fi
2695         if test "X$up" = X -o "X$low" = X; then
2696             case "`echo IJ | od -x 2>/dev/null`" in
2697             *C9D1*|*c9d1*)
2698                 echo "Hey, this might be EBCDIC." >&4
2699                 if test "X$up" = X -o "X$low" = X; then
2700                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2701                     ij) up='[A-IJ-RS-Z]'
2702                         low='[a-ij-rs-z]'
2703                         ;;
2704                     esac
2705                 fi
2706                 if test "X$up" = X -o "X$low" = X; then
2707                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2708                     ij) up='A-IJ-RS-Z'
2709                         low='a-ij-rs-z'
2710                         ;;
2711                     esac
2712                 fi
2713                 ;;
2714             esac
2715         fi
2716 esac
2717 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2718 ij)
2719     echo "Using $up and $low to convert case." >&4
2720     ;;
2721 *)
2722     echo "I don't know how to translate letters from upper to lower case." >&4
2723     echo "Your tr is not acting any way I know of." >&4
2724     exit 1
2725     ;;
2726 esac
2727 : set up the translation script tr, must be called with ./tr of course
2728 cat >tr <<EOSC
2729 $startsh
2730 case "\$1\$2" in
2731 '[A-Z][a-z]') exec $tr '$up' '$low';;
2732 '[a-z][A-Z]') exec $tr '$low' '$up';;
2733 esac
2734 exec $tr "\$@"
2735 EOSC
2736 chmod +x tr
2737 $eunicefix tr
2738
2739 : Try to determine whether config.sh was made on this system
2740 case "$config_sh" in
2741 '')
2742 myuname=`$uname -a 2>/dev/null`
2743 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2744 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2745 # because the A-Z/a-z are not consecutive.
2746 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2747         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2748 newmyuname="$myuname"
2749 dflt=n
2750 case "$knowitall" in
2751 '')
2752         if test -f ../config.sh; then
2753                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2754                         eval "`grep myuname= ../config.sh`"
2755                 fi
2756                 if test "X$myuname" = "X$newmyuname"; then
2757                         dflt=y
2758                 fi
2759         fi
2760         ;;
2761 *) dflt=y;;
2762 esac
2763
2764 : Get old answers from old config file if Configure was run on the
2765 : same system, otherwise use the hints.
2766 hint=default
2767 cd ..
2768 if test -f config.sh; then
2769         echo " "
2770         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2771         . UU/myread
2772         case "$ans" in
2773         n*|N*) echo "OK, I'll ignore it."
2774                 mv config.sh config.sh.old
2775                 myuname="$newmyuname"
2776                 ;;
2777         *)  echo "Fetching default answers from your old config.sh file..." >&4
2778                 tmp_n="$n"
2779                 tmp_c="$c"
2780                 tmp_sh="$sh"
2781                 . ./config.sh
2782                 cp config.sh UU
2783                 n="$tmp_n"
2784                 c="$tmp_c"
2785                 : Older versions did not always set $sh.  Catch re-use of such
2786                 : an old config.sh.
2787                 case "$sh" in
2788                 '') sh="$tmp_sh" ;;
2789                 esac
2790                 hint=previous
2791                 ;;
2792         esac
2793 fi
2794 . ./UU/checkcc
2795 if test ! -f config.sh; then
2796         $cat <<EOM
2797
2798 First time through, eh?  I have some defaults handy for some systems
2799 that need some extra help getting the Configure answers right:
2800
2801 EOM
2802         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2803         dflt=''
2804         : Half the following guesses are probably wrong... If you have better
2805         : tests or hints, please send them to perlbug@perl.org
2806         : The metaconfig authors would also appreciate a copy...
2807         $test -f /irix && osname=irix
2808         $test -f /xenix && osname=sco_xenix
2809         $test -f /dynix && osname=dynix
2810         $test -f /dnix && osname=dnix
2811         $test -f /lynx.os && osname=lynxos
2812         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2813         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2814         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2815         $test -f /bin/mips && /bin/mips && osname=mips
2816         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2817                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2818         $test -d /usr/apollo/bin && osname=apollo
2819         $test -f /etc/saf/_sactab && osname=svr4
2820         $test -d /usr/include/minix && osname=minix
2821         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2822         if $test -d /MachTen -o -d /MachTen_Folder; then
2823                 osname=machten
2824                 if $test -x /sbin/version; then
2825                         osvers=`/sbin/version | $awk '{print $2}' |
2826                         $sed -e 's/[A-Za-z]$//'`
2827                 elif $test -x /usr/etc/version; then
2828                         osvers=`/usr/etc/version | $awk '{print $2}' |
2829                         $sed -e 's/[A-Za-z]$//'`
2830                 else
2831                         osvers="$2.$3"
2832                 fi
2833         fi
2834
2835         $test -f /sys/posix.dll &&
2836                 $test -f /usr/bin/what &&
2837                 set X `/usr/bin/what /sys/posix.dll` &&
2838                 $test "$3" = UWIN &&
2839                 osname=uwin &&
2840                 osvers="$5"
2841
2842         if $test -f $uname; then
2843                 set X $myuname
2844                 shift
2845
2846                 case "$5" in
2847                 fps*) osname=fps ;;
2848                 mips*)
2849                         case "$4" in
2850                         umips) osname=umips ;;
2851                         *) osname=mips ;;
2852                         esac;;
2853                 [23]100) osname=mips ;;
2854                 next*) osname=next ;;
2855                 i386*)
2856                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2857                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2858                                 osname='sco'
2859                                 osvers=$tmp
2860                         elif $test -f /etc/kconfig; then
2861                                 osname=isc
2862                                 if test "$lns" = "$ln -s"; then
2863                                         osvers=4
2864                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2865                                         osvers=3
2866                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2867                                         osvers=2
2868                                 fi
2869                         fi
2870                         tmp=''
2871                         ;;
2872                 pc*)
2873                         if test -n "$DJGPP"; then
2874                                 osname=dos
2875                                 osvers=djgpp
2876                         fi
2877                         ;;
2878                 esac
2879
2880                 case "$1" in
2881                 aix) osname=aix
2882                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2883                         case "$tmp" in
2884                         'not found') osvers="$4"."$3" ;;
2885                         '<3240'|'<>3240') osvers=3.2.0 ;;
2886                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2887                         '=3250'|'>3250') osvers=3.2.5 ;;
2888                         *) osvers=$tmp;;
2889                         esac
2890                         ;;
2891                 bsd386) osname=bsd386
2892                         osvers=`$uname -r`
2893                         ;;
2894                 cygwin*) osname=cygwin
2895                         osvers="$3"
2896                         ;;
2897                 *dc.osx) osname=dcosx
2898                         osvers="$3"
2899                         ;;
2900                 dnix) osname=dnix
2901                         osvers="$3"
2902                         ;;
2903                 domainos) osname=apollo
2904                         osvers="$3"
2905                         ;;
2906                 dgux) osname=dgux 
2907                         osvers="$3"
2908                         ;;
2909                 dynixptx*) osname=dynixptx
2910                         osvers=`echo "$4"|sed 's/^v//'`
2911                         ;;
2912                 freebsd) osname=freebsd 
2913                         osvers="$3" ;;
2914                 genix) osname=genix ;;
2915                 hp*) osname=hpux 
2916                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2917                         ;;
2918                 irix*) osname=irix
2919                         case "$3" in
2920                         4*) osvers=4 ;;
2921                         5*) osvers=5 ;;
2922                         *)      osvers="$3" ;;
2923                         esac
2924                         ;;
2925                 linux) osname=linux
2926                         case "$3" in
2927                         *)      osvers="$3" ;;
2928                         esac
2929                         ;;
2930                 MiNT) osname=mint
2931                         ;;
2932                 netbsd*) osname=netbsd
2933                         osvers="$3"
2934                         ;;
2935                 news-os) osvers="$3"
2936                         case "$3" in
2937                         4*) osname=newsos4 ;;
2938                         *) osname=newsos ;;
2939                         esac
2940                         ;;
2941                 next*) osname=next ;;
2942                 nonstop-ux) osname=nonstopux ;;
2943                 POSIX-BC | posix-bc ) osname=posix-bc
2944                         osvers="$3"
2945                         ;;
2946                 powerux | power_ux | powermax_os | powermaxos | \
2947                 powerunix | power_unix) osname=powerux
2948                         osvers="$3"
2949                         ;;
2950                 qnx) osname=qnx
2951                         osvers="$4"
2952                         ;;
2953                 solaris) osname=solaris
2954                         case "$3" in
2955                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2956                         *)      osvers="$3" ;;
2957                         esac
2958                         ;;
2959                 sunos) osname=sunos
2960                         case "$3" in
2961                         5*) osname=solaris
2962                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2963                         *)      osvers="$3" ;;
2964                         esac
2965                         ;;
2966                 titanos) osname=titanos
2967                         case "$3" in
2968                         1*) osvers=1 ;;
2969                         2*) osvers=2 ;;
2970                         3*) osvers=3 ;;
2971                         4*) osvers=4 ;;
2972                         *)      osvers="$3" ;;
2973                         esac
2974                         ;;
2975                 ultrix) osname=ultrix
2976                         osvers="$3"
2977                         ;;
2978                 osf1|mls+)      case "$5" in
2979                                 alpha)
2980                                         osname=dec_osf
2981                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2982                                         case "$osvers" in
2983                                         [1-9].[0-9]*) ;;
2984                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2985                                         esac
2986                                         ;;
2987                         hp*)    osname=hp_osf1  ;;
2988                         mips)   osname=mips_osf1 ;;
2989                         esac
2990                         ;;
2991                 unixware) osname=svr5
2992                         osvers="$4"
2993                         ;;
2994                 uts)    osname=uts
2995                         osvers="$3"
2996                         ;;
2997                 vos) osvers="$3"
2998                         ;;
2999                 $2) case "$osname" in
3000                         *isc*) ;;
3001                         *freebsd*) ;;
3002                         svr*)
3003                                 : svr4.x or possibly later
3004                                 case "svr$3" in 
3005                                 ${osname}*)
3006                                         osname=svr$3
3007                                         osvers=$4
3008                                         ;;
3009                                 esac
3010                                 case "$osname" in
3011                                 svr4.0)
3012                                         : Check for ESIX
3013                                         if test -f /stand/boot ; then
3014                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3015                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3016                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3017                                                         if test -n "$isesix"; then
3018                                                                 osname=esix4
3019                                                         fi
3020                                                 fi
3021                                         fi
3022                                         ;;
3023                                 esac
3024                                 ;;
3025                         *)      if test -f /etc/systemid; then
3026                                         osname=sco
3027                                         set `echo $3 | $sed 's/\./ /g'` $4
3028                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3029                                                 osvers=$1.$2.$3
3030                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3031                                                 osvers=$1.$2
3032                                         elif $test -f $src/hints/sco_$1.sh; then
3033                                                 osvers=$1
3034                                         fi
3035                                 else
3036                                         case "$osname" in
3037                                         '') : Still unknown.  Probably a generic Sys V.
3038                                                 osname="sysv"
3039                                                 osvers="$3"
3040                                                 ;;
3041                                         esac
3042                                 fi
3043                                 ;;
3044                         esac
3045                         ;;
3046                 *)      case "$osname" in
3047                         '') : Still unknown.  Probably a generic BSD.
3048                                 osname="$1"
3049                                 osvers="$3"
3050                                 ;;
3051                         esac
3052                         ;;
3053                 esac
3054         else
3055                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3056                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3057                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3058                                 osname=news_os
3059                         fi
3060                         $rm -f UU/kernel.what
3061                 elif test -d c:/.; then
3062                         set X $myuname
3063                         osname=os2
3064                         osvers="$5"
3065                 fi
3066         fi
3067         
3068         case "$targetarch" in
3069         '') ;;
3070         *)  hostarch=$osname
3071             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3072             osvers=''
3073             ;;
3074         esac
3075
3076         : Now look for a hint file osname_osvers, unless one has been
3077         : specified already.
3078         case "$hintfile" in
3079         ''|' ')
3080                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3081                 : Also try without trailing minor version numbers.
3082                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3083                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3084                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3085                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3086                 case "$file" in
3087                 '') dflt=none ;;
3088                 *)  case "$osvers" in
3089                         '') dflt=$file
3090                                 ;;
3091                         *)  if $test -f $src/hints/$file.sh ; then
3092                                         dflt=$file
3093                                 elif $test -f $src/hints/$xfile.sh ; then
3094                                         dflt=$xfile
3095                                 elif $test -f $src/hints/$xxfile.sh ; then
3096                                         dflt=$xxfile
3097                                 elif $test -f $src/hints/$xxxfile.sh ; then
3098                                         dflt=$xxxfile
3099                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3100                                         dflt=$xxxxfile
3101                                 elif $test -f "$src/hints/${osname}.sh" ; then
3102                                         dflt="${osname}"
3103                                 else
3104                                         dflt=none
3105                                 fi
3106                                 ;;
3107                         esac
3108                         ;;
3109                 esac
3110                 if $test -f Policy.sh ; then
3111                         case "$dflt" in
3112                         *Policy*) ;;
3113                         none) dflt="Policy" ;;
3114                         *) dflt="Policy $dflt" ;;
3115                         esac
3116                 fi
3117                 ;;
3118         *)
3119                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3120                 ;;
3121         esac
3122
3123         if $test -f Policy.sh ; then
3124                 $cat <<EOM
3125
3126 There's also a Policy hint file available, which should make the
3127 site-specific (policy) questions easier to answer.
3128 EOM
3129
3130         fi
3131
3132         $cat <<EOM
3133
3134 You may give one or more space-separated answers, or "none" if appropriate.
3135 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3136 is a good thing.  DO NOT give a wrong version or a wrong OS.
3137
3138 EOM
3139
3140         rp="Which of these apply, if any?"
3141         . UU/myread
3142         tans=$ans
3143         for file in $tans; do
3144                 if $test X$file = XPolicy -a -f Policy.sh; then
3145                         . Policy.sh
3146                         $cat Policy.sh >> UU/config.sh
3147                 elif $test -f $src/hints/$file.sh; then
3148                         . $src/hints/$file.sh
3149                         $cat $src/hints/$file.sh >> UU/config.sh
3150                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3151                         : nothing
3152                 else
3153                         : Give one chance to correct a possible typo.
3154                         echo "$file.sh does not exist"
3155                         dflt=$file
3156                         rp="hint to use instead?"
3157                         . UU/myread
3158                         for file in $ans; do
3159                                 if $test -f "$src/hints/$file.sh"; then
3160                                         . $src/hints/$file.sh
3161                                         $cat $src/hints/$file.sh >> UU/config.sh
3162                                 elif $test X$ans = X -o X$ans = Xnone ; then
3163                                         : nothing
3164                                 else
3165                                         echo "$file.sh does not exist -- ignored."
3166                                 fi
3167                         done
3168                 fi
3169         done
3170
3171         hint=recommended
3172         : Remember our hint file for later.
3173         if $test -f "$src/hints/$file.sh" ; then
3174                 hintfile="$file"
3175         else
3176                 hintfile=''
3177         fi
3178 fi
3179 cd UU
3180 ;;
3181 *)
3182         echo " "
3183         echo "Fetching default answers from $config_sh..." >&4
3184         tmp_n="$n"
3185         tmp_c="$c"
3186         cd ..
3187         cp $config_sh config.sh 2>/dev/null
3188         chmod +w config.sh
3189         . ./config.sh
3190         cd UU
3191         cp ../config.sh .
3192         n="$tmp_n"
3193         c="$tmp_c"
3194         hint=previous
3195         ;;
3196 esac
3197 test "$override" && . ./optdef.sh
3198
3199 : Restore computed paths
3200 for file in $loclist $trylist; do
3201         eval $file="\$_$file"
3202 done
3203
3204 cat << EOM
3205
3206 Configure uses the operating system name and version to set some defaults.
3207 The default value is probably right if the name rings a bell. Otherwise,
3208 since spelling matters for me, either accept the default or answer "none"
3209 to leave it blank.
3210
3211 EOM
3212 case "$osname" in
3213         ''|' ')
3214                 case "$hintfile" in
3215                 ''|' '|none) dflt=none ;;
3216                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3217                 esac
3218                 ;;
3219         *) dflt="$osname" ;;
3220 esac
3221 rp="Operating system name?"
3222 . ./myread
3223 case "$ans" in
3224 none)  osname='' ;;
3225 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3226 esac
3227 echo " "
3228 case "$osvers" in
3229         ''|' ')
3230                 case "$hintfile" in
3231                 ''|' '|none) dflt=none ;;
3232                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3233                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3234                         case "$dflt" in
3235                         ''|' ') dflt=none ;;
3236                         esac
3237                         ;;
3238                 esac
3239                 ;;
3240         *) dflt="$osvers" ;;
3241 esac
3242 rp="Operating system version?"
3243 . ./myread
3244 case "$ans" in
3245 none)  osvers='' ;;
3246 *) osvers="$ans" ;;
3247 esac
3248
3249
3250 . ./posthint.sh
3251
3252 : who configured the system
3253 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3254 cf_by=`(logname) 2>/dev/null`
3255 case "$cf_by" in
3256 "")
3257         cf_by=`(whoami) 2>/dev/null`
3258         case "$cf_by" in
3259         "") cf_by=unknown ;;
3260         esac ;;
3261 esac
3262
3263 : set up the script used to warn in case of inconsistency
3264 cat <<EOS >whoa
3265 $startsh
3266 EOS
3267 cat <<'EOSC' >>whoa
3268 dflt=y
3269 echo " "
3270 echo "*** WHOA THERE!!! ***" >&4
3271 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3272 rp="    Keep the $hint value?"
3273 . ./myread
3274 case "$ans" in
3275 y) td=$was; tu=$was;;
3276 esac
3277 EOSC
3278
3279 : function used to set $1 to $val
3280 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3281 case "$val$was" in
3282 $define$undef) . ./whoa; eval "$var=\$td";;
3283 $undef$define) . ./whoa; eval "$var=\$tu";;
3284 *) eval "$var=$val";;
3285 esac'
3286
3287 case "$usethreads" in
3288 $define|true|[yY]*)     dflt='y';;
3289 *) dflt='n';;
3290 esac
3291 cat <<EOM
3292
3293 Perl can be built to take advantage of threads on some systems.
3294 To do so, Configure can be run with -Dusethreads.
3295
3296 Note that threading is a highly experimental feature, and
3297 some known race conditions still remain.  If you choose to try
3298 it, be very sure to not actually deploy it for production
3299 purposes.  README.threads has more details, and is required
3300 reading if you enable threads.
3301
3302 If this doesn't make any sense to you, just accept the default '$dflt'.
3303 EOM
3304 rp='Build a threading Perl?'
3305 . ./myread
3306 case "$ans" in
3307 y|Y)    val="$define" ;;
3308 *)      val="$undef" ;;
3309 esac
3310 set usethreads
3311 eval $setvar
3312
3313 case "$usethreads" in
3314 $define)
3315         $cat <<EOM
3316
3317 As of 5.5.640, Perl has two different internal threading implementations,
3318 the 5.005 version (5005threads) and an interpreter-based version
3319 (ithreads) that has one interpreter per thread.  Both are very 
3320 experimental.  This arrangement exists to help developers work out
3321 which one is better.
3322
3323 If you're a casual user, you probably don't want interpreter-threads
3324 at this time.  But if you do, the 'threads' module allows their use,
3325 and the 'Thread' module offers an interface to both 5005threads and
3326 ithreads (whichever has been configured).
3327 EOM
3328         : Default to ithreads unless overridden on command line or with
3329         : old config.sh
3330         dflt='y'
3331         case "$use5005threads" in
3332                 $define|true|[yY]*) dflt='n';;
3333         esac
3334         case "$useithreads" in
3335                 $undef|false|[nN]*) dflt='n';;
3336         esac
3337         rp='Use interpreter-based ithreads?'
3338         . ./myread
3339         case "$ans" in
3340         y|Y)    val="$define" ;;
3341         *)      val="$undef" ;;
3342         esac
3343         set useithreads
3344         eval $setvar
3345         : Now set use5005threads to the opposite value.
3346         case "$useithreads" in
3347         $define) val="$undef" ;;
3348         *) val="$define" ;;
3349         esac
3350         set use5005threads
3351         eval $setvar
3352         ;;
3353 *)
3354         useithreads="$undef"
3355         use5005threads="$undef"
3356         ;;
3357 esac
3358
3359 case "$useithreads$use5005threads" in
3360 "$define$define")
3361         $cat >&4 <<EOM
3362
3363 You cannot have both the ithreads and the 5.005 threads enabled
3364 at the same time.  Disabling the 5.005 threads since they are
3365 much less stable than the ithreads.
3366
3367 EOM
3368         use5005threads="$undef"
3369         ;;
3370 esac
3371
3372 case "$d_oldpthreads" in
3373 '')     : Configure tests would be welcome here.  For now, assume undef.
3374         val="$undef" ;;
3375 *)      val="$d_oldpthreads" ;;
3376 esac
3377 set d_oldpthreads
3378 eval $setvar
3379
3380
3381 case "$usethreads" in
3382 "$define"|true|[yY]*)
3383 : Look for a hint-file generated 'call-back-unit'.  If the
3384 : user has specified that a threading perl is to be built,
3385 : we may need to set or change some other defaults.
3386         if $test -f usethreads.cbu; then
3387                 echo "Your platform has some specific hints for threaded builds, using them..."
3388                 . ./usethreads.cbu
3389         else
3390                 $cat <<EOM
3391 (Your platform doesn't have any specific hints for threaded builds.
3392  Assuming POSIX threads, then.)
3393 EOM
3394         fi
3395         ;;
3396 esac
3397
3398 cat <<EOM
3399
3400 Perl can be built so that multiple Perl interpreters can coexist
3401 within the same Perl executable.
3402 EOM
3403
3404 case "$useithreads" in
3405 $define)
3406         cat <<EOM
3407 This multiple interpreter support is required for interpreter-based threads.
3408 EOM
3409         val="$define"
3410         ;;
3411 *)      case "$usemultiplicity" in
3412         $define|true|[yY]*)     dflt='y';;
3413         *) dflt='n';;
3414         esac
3415         echo " "
3416         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3417         rp='Build Perl for multiplicity?'
3418         . ./myread
3419         case "$ans" in
3420         y|Y)    val="$define" ;;
3421         *)      val="$undef" ;;
3422         esac
3423         ;;
3424 esac
3425 set usemultiplicity
3426 eval $setvar
3427
3428
3429 case "$usemorebits" in
3430 "$define"|true|[yY]*)
3431         use64bitint="$define"
3432         uselongdouble="$define"
3433         usemorebits="$define"
3434         ;;
3435 *)      usemorebits="$undef"
3436         ;;
3437 esac
3438
3439 : make some quick guesses about what we are up against
3440 echo " "
3441 $echo $n "Hmm...  $c"
3442 echo exit 1 >bsd
3443 echo exit 1 >usg
3444 echo exit 1 >v7
3445 echo exit 1 >osf1
3446 echo exit 1 >eunice
3447 echo exit 1 >xenix
3448 echo exit 1 >venix
3449 echo exit 1 >os2
3450 d_bsd="$undef"
3451 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3452 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3453 then
3454         echo "Looks kind of like an OSF/1 system, but we'll see..."
3455         echo exit 0 >osf1
3456 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3457         xxx=`./loc addbib blurfl $pth`
3458         if $test -f $xxx; then
3459         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3460                 echo exit 0 >bsd
3461                 echo exit 0 >usg
3462         else
3463                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3464                         echo "Looks kind of like an extended USG system, but we'll see..."
3465                 else
3466                         echo "Looks kind of like a USG system, but we'll see..."
3467                 fi
3468                 echo exit 0 >usg
3469         fi
3470 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3471         echo "Looks kind of like a BSD system, but we'll see..."
3472         d_bsd="$define"
3473         echo exit 0 >bsd
3474 else
3475         echo "Looks kind of like a Version 7 system, but we'll see..."
3476         echo exit 0 >v7
3477 fi
3478 case "$eunicefix" in
3479 *unixtovms*)
3480         $cat <<'EOI'
3481 There is, however, a strange, musty smell in the air that reminds me of
3482 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3483 EOI
3484         echo exit 0 >eunice
3485         d_eunice="$define"
3486 : it so happens the Eunice I know will not run shell scripts in Unix format
3487         ;;
3488 *)
3489         echo " "
3490         echo "Congratulations.  You aren't running Eunice."
3491         d_eunice="$undef"
3492         ;;
3493 esac
3494 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3495 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3496 : semicolon as a patch separator
3497 case "$p_" in
3498 :) ;;
3499 *)
3500         $cat <<'EOI'
3501 I have the feeling something is not exactly right, however...don't tell me...
3502 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3503 (Or you may be running DOS with DJGPP.)
3504 EOI
3505         echo exit 0 >os2
3506         ;;
3507 esac
3508 if test -f /xenix; then
3509         echo "Actually, this looks more like a XENIX system..."
3510         echo exit 0 >xenix
3511         d_xenix="$define"
3512 else
3513         echo " "
3514         echo "It's not Xenix..."
3515         d_xenix="$undef"
3516 fi
3517 chmod +x xenix
3518 $eunicefix xenix
3519 if test -f /venix; then
3520         echo "Actually, this looks more like a VENIX system..."
3521         echo exit 0 >venix
3522 else
3523         echo " "
3524         if ./xenix; then
3525                 : null
3526         else
3527                 echo "Nor is it Venix..."
3528         fi
3529 fi
3530 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3531 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3532 $rm -f foo
3533
3534 case "$cc" in
3535 '') dflt=cc;;
3536 *) dflt="$cc";;
3537 esac
3538 rp="Use which C compiler?"
3539 . ./myread
3540 cc="$ans"
3541 : Look for a hint-file generated 'call-back-unit'.  Now that the
3542 : user has specified the compiler, we may need to set or change some
3543 : other defaults.
3544 if $test -f cc.cbu; then
3545     . ./cc.cbu
3546 fi
3547 . ./checkcc
3548
3549 echo " "
3550 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3551 $cat >try.c <<EOM
3552 #include <stdio.h>
3553 int main() {
3554 #ifdef __GNUC__
3555 #ifdef __VERSION__
3556         printf("%s\n", __VERSION__);
3557 #else
3558         printf("%s\n", "1");
3559 #endif
3560 #endif
3561         exit(0);
3562 }
3563 EOM
3564 if $cc -o try $ccflags $ldflags try.c; then
3565         gccversion=`$run ./try`
3566         case "$gccversion" in
3567         '') echo "You are not using GNU cc." ;;
3568         *)  echo "You are using GNU cc $gccversion."
3569             ccname=gcc  
3570             ;;
3571         esac
3572 else
3573         echo " "
3574         echo "*** WHOA THERE!!! ***" >&4
3575         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3576         case "$knowitall" in
3577         '')
3578         echo "    You'd better start hunting for one and let me know about it." >&4
3579                 exit 1
3580                 ;;
3581         esac
3582 fi
3583 $rm -f try try.*
3584 case "$gccversion" in
3585 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3586 esac
3587 case "$gccversion" in
3588 '') gccosandvers='' ;;
3589 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3590    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3591    gccshortvers=''
3592    case "$gccosandvers" in
3593    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3594    $osname$osvers) ;; # looking good
3595    $osname*) cat <<EOM >&4
3596
3597 *** WHOA THERE!!! ***
3598
3599     Your gcc has not been compiled for the exact release of
3600     your operating system ($gccosandvers versus $osname$osvers).
3601
3602     In general it is a good idea to keep gcc synchronized with
3603     the operating system because otherwise serious problems
3604     may ensue when trying to compile software, like Perl.
3605
3606     I'm trying to be optimistic here, though, and will continue.
3607     If later during the configuration and build icky compilation
3608     problems appear (headerfile conflicts being the most common
3609     manifestation), I suggest reinstalling the gcc to match
3610     your operating system release.
3611
3612 EOM
3613       ;;
3614    *) gccosandvers='' ;; # failed to parse, better be silent
3615    esac
3616    ;;
3617 esac
3618 case "$ccname" in
3619 '') ccname="$cc" ;;
3620 esac
3621
3622
3623 : decide how portable to be.  Allow command line overrides.
3624 case "$d_portable" in
3625 "$undef") ;;
3626 *)      d_portable="$define" ;;
3627 esac
3628
3629 : set up shell script to do ~ expansion
3630 cat >filexp <<EOSS
3631 $startsh
3632 : expand filename
3633 case "\$1" in
3634  ~/*|~)
3635         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3636         ;;
3637  ~*)
3638         if $test -f /bin/csh; then
3639                 /bin/csh -f -c "glob \$1"
3640                 failed=\$?
3641                 echo ""
3642                 exit \$failed
3643         else
3644                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3645                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3646                 if $test ! -d "\$dir"; then
3647                         me=\`basename \$0\`
3648                         echo "\$me: can't locate home directory for: \$name" >&2
3649                         exit 1
3650                 fi
3651                 case "\$1" in
3652                 */*)
3653                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3654                         ;;
3655                 *)
3656                         echo \$dir
3657                         ;;
3658                 esac
3659         fi
3660         ;;
3661 *)
3662         echo \$1
3663         ;;
3664 esac
3665 EOSS
3666 chmod +x filexp
3667 $eunicefix filexp
3668
3669 : now set up to get a file name
3670 cat <<EOS >getfile
3671 $startsh
3672 EOS
3673 cat <<'EOSC' >>getfile
3674 tilde=''
3675 fullpath=''
3676 already=''
3677 skip=''
3678 none_ok=''
3679 exp_file=''
3680 nopath_ok=''
3681 orig_rp="$rp"
3682 orig_dflt="$dflt"
3683 case "$gfpth" in
3684 '') gfpth='.' ;;
3685 esac
3686
3687 case "$fn" in
3688 *\(*)
3689         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3690         fn=`echo $fn | sed 's/(.*)//'`
3691         ;;
3692 esac
3693
3694 case "$fn" in
3695 *:*)
3696         loc_file=`expr $fn : '.*:\(.*\)'`
3697         fn=`expr $fn : '\(.*\):.*'`
3698         ;;
3699 esac
3700
3701 case "$fn" in
3702 *~*) tilde=true;;
3703 esac
3704 case "$fn" in
3705 */*) fullpath=true;;
3706 esac
3707 case "$fn" in
3708 *+*) skip=true;;
3709 esac
3710 case "$fn" in
3711 *n*) none_ok=true;;
3712 esac
3713 case "$fn" in
3714 *e*) exp_file=true;;
3715 esac
3716 case "$fn" in
3717 *p*) nopath_ok=true;;
3718 esac
3719
3720 case "$fn" in
3721 *f*) type='File';;
3722 *d*) type='Directory';;
3723 *l*) type='Locate';;
3724 esac
3725
3726 what="$type"
3727 case "$what" in
3728 Locate) what='File';;
3729 esac
3730
3731 case "$exp_file" in
3732 '')
3733         case "$d_portable" in
3734         "$define") ;;
3735         *) exp_file=true;;
3736         esac
3737         ;;
3738 esac
3739
3740 cd ..
3741 while test "$type"; do
3742         redo=''
3743         rp="$orig_rp"
3744         dflt="$orig_dflt"
3745         case "$tilde" in
3746         true) rp="$rp (~name ok)";;
3747         esac
3748         . UU/myread
3749         if test -f UU/getfile.ok && \
3750                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3751         then
3752                 value="$ans"
3753                 ansexp="$ans"
3754                 break
3755         fi
3756         case "$ans" in
3757         none)
3758                 value=''
3759                 ansexp=''
3760                 case "$none_ok" in
3761                 true) type='';;
3762                 esac
3763                 ;;
3764         *)
3765                 case "$tilde" in
3766                 '') value="$ans"
3767                         ansexp="$ans";;
3768                 *)
3769                         value=`UU/filexp $ans`
3770                         case $? in
3771                         0)
3772                                 if test "$ans" != "$value"; then
3773                                         echo "(That expands to $value on this system.)"
3774                                 fi
3775                                 ;;
3776                         *) value="$ans";;
3777                         esac
3778                         ansexp="$value"
3779                         case "$exp_file" in
3780                         '') value="$ans";;
3781                         esac
3782                         ;;
3783                 esac
3784                 case "$fullpath" in
3785                 true)
3786                         case "$ansexp" in
3787                         /*) value="$ansexp" ;;
3788                         [a-zA-Z]:/*) value="$ansexp" ;;
3789                         *)
3790                                 redo=true
3791                                 case "$already" in
3792                                 true)
3793                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3794                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3795                                         ;;
3796                                 *)
3797                                 echo "Please give a full path name, starting with slash." >&4
3798                                         case "$tilde" in
3799                                         true)
3800                                 echo "Note that using ~name is ok provided it expands well." >&4
3801                                                 already=true
3802                                                 ;;
3803                                         esac
3804                                 esac
3805                                 ;;
3806                         esac
3807                         ;;
3808                 esac
3809                 case "$redo" in
3810                 '')
3811                         case "$type" in
3812                         File)
3813                                 for fp in $gfpth; do
3814                                         if test "X$fp" = X.; then
3815                                             pf="$ansexp"
3816                                         else    
3817                                             pf="$fp/$ansexp"
3818                                         fi
3819                                         if test -f "$pf"; then
3820                                                 type=''
3821                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3822                                         then
3823                                                 echo "($value is not a plain file, but that's ok.)"
3824                                                 type=''
3825                                         fi
3826                                         if test X"$type" = X; then
3827                                             value="$pf"
3828                                             break
3829                                         fi
3830                                 done
3831                                 ;;
3832                         Directory)
3833                                 for fp in $gfpth; do
3834                                         if test "X$fp" = X.; then
3835                                             dir="$ans"
3836                                             direxp="$ansexp"
3837                                         else    
3838                                             dir="$fp/$ansexp"
3839                                             direxp="$fp/$ansexp"
3840                                         fi
3841                                         if test -d "$direxp"; then
3842                                                 type=''
3843                                                 value="$dir"
3844                                                 break
3845                                         fi
3846                                 done
3847                                 ;;
3848                         Locate)
3849                                 if test -d "$ansexp"; then
3850                                         echo "(Looking for $loc_file in directory $value.)"
3851                                         value="$value/$loc_file"
3852                                         ansexp="$ansexp/$loc_file"
3853                                 fi
3854                                 if test -f "$ansexp"; then
3855                                         type=''
3856                                 fi
3857                                 case "$nopath_ok" in
3858                                 true)   case "$value" in
3859                                         */*) ;;
3860                                         *)      echo "Assuming $value will be in people's path."
3861                                                 type=''
3862                                                 ;;
3863                                         esac
3864                                         ;;
3865                                 esac
3866                                 ;;
3867                         esac
3868
3869                         case "$skip" in
3870                         true) type='';
3871                         esac
3872
3873                         case "$type" in
3874                         '') ;;
3875                         *)
3876                                 if test "$fastread" = yes; then
3877                                         dflt=y
3878                                 else
3879                                         dflt=n
3880                                 fi
3881                                 rp="$what $value doesn't exist.  Use that name anyway?"
3882                                 . UU/myread
3883                                 dflt=''
3884                                 case "$ans" in
3885                                 y*) type='';;
3886                                 *) echo " ";;
3887                                 esac
3888                                 ;;
3889                         esac
3890                         ;;
3891                 esac
3892                 ;;
3893         esac
3894 done
3895 cd UU
3896 ans="$value"
3897 rp="$orig_rp"
3898 dflt="$orig_dflt"
3899 rm -f getfile.ok
3900 test "X$gfpthkeep" != Xy && gfpth=""
3901 EOSC
3902
3903 : What should the include directory be ?
3904 echo " "
3905 $echo $n "Hmm...  $c"
3906 dflt='/usr/include'
3907 incpath=''
3908 mips_type=''
3909 if $test -f /bin/mips && /bin/mips; then
3910         echo "Looks like a MIPS system..."
3911         $cat >usr.c <<'EOCP'
3912 #ifdef SYSTYPE_BSD43
3913 /bsd43
3914 #endif
3915 EOCP
3916         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3917                 dflt='/bsd43/usr/include'
3918                 incpath='/bsd43'
3919                 mips_type='BSD 4.3'
3920         else
3921                 mips_type='System V'
3922         fi
3923         $rm -f usr.c usr.out
3924         echo "and you're compiling with the $mips_type compiler and libraries."
3925         xxx_prompt=y
3926         echo "exit 0" >mips
3927 else
3928         echo "Doesn't look like a MIPS system."
3929         xxx_prompt=n
3930         echo "exit 1" >mips
3931 fi
3932 chmod +x mips
3933 $eunicefix mips
3934 case "$usrinc" in
3935 '') ;;
3936 *) dflt="$usrinc";;
3937 esac
3938 case "$xxx_prompt" in
3939 y)      fn=d/
3940         echo " "
3941         rp='Where are the include files you want to use?'
3942         . ./getfile
3943         usrinc="$ans"
3944         ;;
3945 *)      usrinc="$dflt"
3946         ;;
3947 esac
3948
3949 : see how we invoke the C preprocessor
3950 echo " "
3951 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3952 cat <<'EOT' >testcpp.c
3953 #define ABC abc
3954 #define XYZ xyz
3955 ABC.XYZ
3956 EOT
3957 cd ..
3958 if test ! -f cppstdin; then
3959         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3960                 # AIX cc -E doesn't show the absolute headerfile
3961                 # locations but we'll cheat by using the -M flag.
3962                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3963         else
3964                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3965         fi
3966 else
3967         echo "Keeping your $hint cppstdin wrapper."
3968 fi
3969 chmod 755 cppstdin
3970 wrapper=`pwd`/cppstdin
3971 ok='false'
3972 cd UU
3973
3974 if $test "X$cppstdin" != "X" && \
3975         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3976         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3977 then
3978         echo "You used to use $cppstdin $cppminus so we'll use that again."
3979         case "$cpprun" in
3980         '') echo "But let's see if we can live without a wrapper..." ;;
3981         *)
3982                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3983                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3984                 then
3985                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3986                         ok='true'
3987                 else
3988                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3989                 fi
3990                 ;;
3991         esac
3992 else
3993         case "$cppstdin" in
3994         '') ;;
3995         *)
3996                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3997                 ;;
3998         esac
3999 fi
4000
4001 if $ok; then
4002         : nothing
4003 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4004         $cc -E <testcpp.c >testcpp.out 2>&1; \
4005         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4006         echo "Yup, it does."
4007         x_cpp="$cc -E"
4008         x_minus='';
4009 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4010         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4011         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4012         echo "Yup, it does."
4013         x_cpp="$cc -E"
4014         x_minus='-';
4015 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4016         $cc -P <testcpp.c >testcpp.out 2>&1; \
4017         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4018         echo "Yipee, that works!"
4019         x_cpp="$cc -P"
4020         x_minus='';
4021 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4022         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4023         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4024         echo "At long last!"
4025         x_cpp="$cc -P"
4026         x_minus='-';
4027 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4028         $cpp <testcpp.c >testcpp.out 2>&1; \
4029         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4030         echo "It works!"
4031         x_cpp="$cpp"
4032         x_minus='';
4033 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4034         $cpp - <testcpp.c >testcpp.out 2>&1; \
4035         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4036         echo "Hooray, it works!  I was beginning to wonder."
4037         x_cpp="$cpp"
4038         x_minus='-';
4039 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4040         $wrapper <testcpp.c >testcpp.out 2>&1; \
4041         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4042         x_cpp="$wrapper"
4043         x_minus=''
4044         echo "Eureka!"
4045 else
4046         dflt=''
4047         rp="No dice.  I can't find a C preprocessor.  Name one:"
4048         . ./myread
4049         x_cpp="$ans"
4050         x_minus=''
4051         $x_cpp <testcpp.c >testcpp.out 2>&1
4052         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4053                 echo "OK, that will do." >&4
4054         else
4055 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4056                 exit 1
4057         fi
4058 fi
4059
4060 case "$ok" in
4061 false)
4062         cppstdin="$x_cpp"
4063         cppminus="$x_minus"
4064         cpprun="$x_cpp"
4065         cpplast="$x_minus"
4066         set X $x_cpp
4067         shift
4068         case "$1" in
4069         "$cpp")
4070                 echo "Perhaps can we force $cc -E using a wrapper..."
4071                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4072                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4073                 then
4074                         echo "Yup, we can."
4075                         cppstdin="$wrapper"
4076                         cppminus='';
4077                 else
4078                         echo "Nope, we'll have to live without it..."
4079                 fi
4080                 ;;
4081         esac
4082         case "$cpprun" in
4083         "$wrapper")
4084                 cpprun=''
4085                 cpplast=''
4086                 ;;
4087         esac
4088         ;;
4089 esac
4090
4091 case "$cppstdin" in
4092 "$wrapper"|'cppstdin') ;;
4093 *) $rm -f $wrapper;;
4094 esac
4095 $rm -f testcpp.c testcpp.out
4096
4097 : Set private lib path
4098 case "$plibpth" in
4099 '') if ./mips; then
4100                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4101         fi;;
4102 esac
4103 case "$libpth" in
4104 ' ') dlist='';;
4105 '') dlist="$loclibpth $plibpth $glibpth";;
4106 *) dlist="$libpth";;
4107 esac
4108
4109 : Now check and see which directories actually exist, avoiding duplicates
4110 libpth=''
4111 for xxx in $dlist
4112 do
4113     if $test -d $xxx; then
4114                 case " $libpth " in
4115                 *" $xxx "*) ;;
4116                 *) libpth="$libpth $xxx";;
4117                 esac
4118     fi
4119 done
4120 $cat <<'EOM'
4121
4122 Some systems have incompatible or broken versions of libraries.  Among
4123 the directories listed in the question below, please remove any you
4124 know not to be holding relevant libraries, and add any that are needed.
4125 Say "none" for none.
4126
4127 EOM
4128 case "$libpth" in
4129 '') dflt='none';;
4130 *)
4131         set X $libpth
4132         shift
4133         dflt=${1+"$@"}
4134         ;;
4135 esac
4136 rp="Directories to use for library searches?"
4137 . ./myread
4138 case "$ans" in
4139 none) libpth=' ';;
4140 *) libpth="$ans";;
4141 esac
4142
4143 : compute shared library extension
4144 case "$so" in
4145 '')
4146         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4147                 dflt='sl'
4148         else
4149                 dflt='so'
4150         fi
4151         ;;
4152 *) dflt="$so";;
4153 esac
4154 $cat <<EOM
4155
4156 On some systems, shared libraries may be available.  Answer 'none' if
4157 you want to suppress searching of shared libraries for the remainder
4158 of this configuration.
4159
4160 EOM
4161 rp='What is the file extension used for shared libraries?'
4162 . ./myread
4163 so="$ans"
4164
4165 : Define several unixisms.
4166 : Hints files or command line option can be used to override them.
4167 : The convoluted testing is in case hints files set either the old
4168 : or the new name.
4169 case "$_exe" in
4170 '')     case "$exe_ext" in
4171         '')     ;;
4172         *)      _exe="$exe_ext" ;;
4173         esac
4174         ;;
4175 esac
4176 case "$_a" in
4177 '')     case "$lib_ext" in
4178     '') _a='.a';;
4179         *)      _a="$lib_ext" ;;
4180         esac
4181         ;;
4182 esac
4183 case "$_o" in
4184 '') case "$obj_ext" in
4185         '')     _o='.o';;
4186         *)      _o="$obj_ext";;
4187         esac
4188         ;;
4189 esac
4190 case "$p_" in
4191 '') case "$path_sep" in
4192         '')     p_=':';;
4193         *)      p_="$path_sep";;
4194         esac
4195         ;;
4196 esac
4197 exe_ext=$_exe
4198 lib_ext=$_a
4199 obj_ext=$_o
4200 path_sep=$p_
4201
4202 : Which makefile gets called first.  This is used by make depend.
4203 case "$firstmakefile" in
4204 '') firstmakefile='makefile';;
4205 esac
4206
4207 case "$usesocks" in
4208 $define|true|[yY]*)     dflt='y';;
4209 *) dflt='n';;
4210 esac
4211 cat <<EOM
4212
4213 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4214 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4215 to use the PerlIO abstraction layer, this will be implicitly selected.
4216
4217 If this doesn't make any sense to you, just accept the default '$dflt'.
4218 EOM
4219 rp='Build Perl for SOCKS?'
4220 . ./myread
4221 case "$ans" in
4222 y|Y)    val="$define" ;;     
4223 *)      val="$undef" ;;
4224 esac
4225 set usesocks
4226 eval $setvar
4227
4228 case "$usesocks" in
4229 $define|true|[yY]*) useperlio="$define";;
4230 esac
4231
4232 : Looking for optional libraries
4233 echo " "
4234 echo "Checking for optional libraries..." >&4
4235 case "$libs" in
4236 ' '|'') dflt='';;
4237 *) dflt="$libs";;
4238 esac
4239 case "$libswanted" in
4240 '') libswanted='c_s';;
4241 esac
4242 case "$usesocks" in
4243 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4244 esac
4245 libsfound=''
4246 libsfiles=''
4247 libsdirs=''
4248 libspath=''
4249 for thisdir in $libpth $xlibpth; do
4250   test -d $thisdir && libspath="$libspath $thisdir"
4251 done
4252 for thislib in $libswanted; do
4253         for thisdir in $libspath; do
4254             xxx=''
4255             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4256                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4257                 $test -f "$xxx" && eval $libscheck
4258                 $test -f "$xxx" && libstyle=shared
4259             fi
4260             if test ! -f "$xxx"; then
4261                 xxx=$thisdir/lib$thislib.$so
4262                 $test -f "$xxx" && eval $libscheck
4263                 $test -f "$xxx" && libstyle=shared
4264             fi  
4265             if test ! -f "$xxx"; then
4266                 xxx=$thisdir/lib$thislib$_a
4267                 $test -f "$xxx" && eval $libscheck
4268                 $test -f "$xxx" && libstyle=static
4269             fi
4270             if test ! -f "$xxx"; then
4271                 xxx=$thisdir/$thislib$_a
4272                 $test -f "$xxx" && eval $libscheck
4273                 $test -f "$xxx" && libstyle=static
4274             fi
4275             if test ! -f "$xxx"; then
4276                 xxx=$thisdir/lib${thislib}_s$_a
4277                 $test -f "$xxx" && eval $libscheck
4278                 $test -f "$xxx" && libstyle=static
4279                 $test -f "$xxx" && thislib=${thislib}_s
4280             fi
4281             if test ! -f "$xxx"; then
4282                 xxx=$thisdir/Slib$thislib$_a
4283                 $test -f "$xxx" && eval $libscheck
4284                 $test -f "$xxx" && libstyle=static
4285             fi
4286             if $test -f "$xxx"; then
4287                 case "$libstyle" in
4288                 shared) echo "Found -l$thislib (shared)." ;;
4289                 static) echo "Found -l$thislib." ;;
4290                 *)      echo "Found -l$thislib ($libstyle)." ;;
4291                 esac
4292                 case " $dflt " in
4293                 *"-l$thislib "*);;
4294                 *) dflt="$dflt -l$thislib"
4295                    libsfound="$libsfound $xxx"
4296                    yyy=`basename $xxx`
4297                    libsfiles="$libsfiles $yyy"
4298                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4299                    case " $libsdirs " in
4300                    *" $yyy "*) ;;
4301                    *) libsdirs="$libsdirs $yyy" ;;
4302                    esac
4303                    ;;
4304                 esac
4305                 break
4306             fi  
4307         done
4308         if $test ! -f "$xxx"; then
4309             echo "No -l$thislib."
4310         fi
4311 done
4312 set X $dflt
4313 shift
4314 dflt="$*"
4315 case "$libs" in
4316 '') dflt="$dflt";;
4317 *) dflt="$libs";;
4318 esac
4319 case "$dflt" in
4320 ' '|'') dflt='none';;
4321 esac
4322
4323 $cat <<EOM
4324
4325 In order to compile $package on your machine, a number of libraries
4326 are usually needed.  Include any other special libraries here as well.
4327 Say "none" for none.  The default list is almost always right.
4328 EOM
4329
4330 echo " "
4331 rp="What libraries to use?"
4332 . ./myread
4333 case "$ans" in
4334 none) libs=' ';;
4335 *) libs="$ans";;
4336 esac
4337
4338 : determine optimization, if desired, or use for debug flag also
4339 case "$optimize" in
4340 ' '|$undef) dflt='none';;
4341 '') dflt='-O';;
4342 *) dflt="$optimize";;
4343 esac
4344 $cat <<EOH
4345
4346 By default, $package compiles with the -O flag to use the optimizer.
4347 Alternately, you might want to use the symbolic debugger, which uses
4348 the -g flag (on traditional Unix systems).  Either flag can be
4349 specified here.  To use neither flag, specify the word "none".
4350
4351 EOH
4352 rp="What optimizer/debugger flag should be used?"
4353 . ./myread
4354 optimize="$ans"
4355 case "$optimize" in
4356 'none') optimize=" ";;
4357 esac
4358
4359 dflt=''
4360 : We will not override a previous value, but we might want to
4361 : augment a hint file
4362 case "$hint" in
4363 default|recommended)
4364         case "$gccversion" in
4365         1*) dflt='-fpcc-struct-return' ;;
4366         esac
4367         case "$optimize" in
4368         *-g*) dflt="$dflt -DDEBUGGING";;
4369         esac
4370         case "$gccversion" in
4371         2*) if test -d /etc/conf/kconfig.d &&
4372                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4373                 then
4374                         dflt="$dflt -posix"
4375                 fi
4376                 ;;
4377         esac
4378         case "$gccversion" in
4379         1*) ;;
4380         2.[0-8]*) ;;
4381         ?*)     echo " "
4382                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4383                 echo 'int main(void) { return 0; }' > gcctest.c
4384                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4385                         echo "Yes, it does." 2>&1
4386                         case "$ccflags" in
4387                         *strict-aliasing*) 
4388                                 echo "Leaving current flags $ccflags alone." 2>&1
4389                                 ;;
4390                         *) dflt="$dflt -fno-strict-aliasing" ;;
4391                         esac
4392                 else
4393                         echo "Nope, it doesn't, but that's ok." 2>&1
4394                 fi
4395                 ;;
4396         esac
4397         ;;
4398 esac
4399
4400 case "$mips_type" in
4401 *BSD*|'') inclwanted="$locincpth $usrinc";;
4402 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4403 esac
4404 for thisincl in $inclwanted; do
4405         if $test -d $thisincl; then
4406                 if $test x$thisincl != x$usrinc; then
4407                         case "$dflt" in
4408                         *" -I$thisincl "*);;
4409                         *) dflt="$dflt -I$thisincl ";;
4410                         esac
4411                 fi
4412         fi
4413 done
4414
4415 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4416         xxx=true;
4417 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4418         xxx=true;
4419 else
4420         xxx=false;
4421 fi;
4422 if $xxx; then
4423         case "$dflt" in
4424         *$2*);;
4425         *) dflt="$dflt -D$2";;
4426         esac;
4427 fi'
4428
4429 set signal.h LANGUAGE_C; eval $inctest
4430
4431 case "$usesocks" in
4432 $define)
4433         ccflags="$ccflags -DSOCKS"
4434         ;;
4435 esac
4436
4437 case "$hint" in
4438 default|recommended) dflt="$ccflags $dflt" ;;
4439 *) dflt="$ccflags";;
4440 esac
4441
4442 case "$dflt" in
4443 ''|' ') dflt=none;;
4444 esac
4445
4446 $cat <<EOH
4447
4448 Your C compiler may want other flags.  For this question you should include
4449 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4450 but you should NOT include libraries or ld flags like -lwhatever.  If you
4451 want $package to honor its debug switch, you should include -DDEBUGGING here.
4452 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4453
4454 To use no flags, specify the word "none".
4455
4456 EOH
4457 set X $dflt
4458 shift
4459 dflt=${1+"$@"}
4460 rp="Any additional cc flags?"
4461 . ./myread
4462 case "$ans" in
4463 none) ccflags='';;
4464 *) ccflags="$ans";;
4465 esac
4466
4467 : the following weeds options from ccflags that are of no interest to cpp
4468 case "$cppflags" in
4469 '') cppflags="$ccflags" ;;
4470 *)  cppflags="$cppflags $ccflags" ;;
4471 esac
4472 case "$gccversion" in
4473 1*) cppflags="$cppflags -D__GNUC__"
4474 esac
4475 case "$mips_type" in
4476 '');;
4477 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4478 esac
4479 case "$cppflags" in
4480 '');;
4481 *)
4482         echo " "
4483         echo "Let me guess what the preprocessor flags are..." >&4
4484         set X $cppflags
4485         shift
4486         cppflags=''
4487         $cat >cpp.c <<'EOM'
4488 #define BLURFL foo
4489
4490 BLURFL xx LFRULB
4491 EOM
4492         previous=''
4493         for flag in $*
4494         do
4495                 case "$flag" in
4496                 -*) ftry="$flag";;
4497                 *) ftry="$previous $flag";;
4498                 esac
4499                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4500                         >cpp1.out 2>/dev/null && \
4501                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4502                         >cpp2.out 2>/dev/null && \
4503                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4504                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4505                 then
4506                         cppflags="$cppflags $ftry"
4507                         previous=''
4508                 else
4509                         previous="$flag"
4510                 fi
4511         done
4512         set X $cppflags
4513         shift
4514         cppflags=${1+"$@"}
4515         case "$cppflags" in
4516         *-*)  echo "They appear to be: $cppflags";;
4517         esac
4518         $rm -f cpp.c cpp?.out
4519         ;;
4520 esac
4521
4522 : flags used in final linking phase
4523 case "$ldflags" in
4524 '') if ./venix; then
4525                 dflt='-i -z'
4526         else
4527                 dflt=''
4528         fi
4529         case "$ccflags" in
4530         *-posix*) dflt="$dflt -posix" ;;
4531         esac
4532         ;;
4533 *) dflt="$ldflags";;
4534 esac
4535
4536 : Try to guess additional flags to pick up local libraries.
4537 for thislibdir in $libpth; do
4538         case " $loclibpth " in
4539         *" $thislibdir "*)
4540                 case "$dflt " in 
4541                 *"-L$thislibdir "*) ;;
4542                 *)  dflt="$dflt -L$thislibdir" ;;
4543                 esac
4544                 ;;
4545         esac
4546 done
4547
4548 case "$dflt" in
4549 '') dflt='none' ;;
4550 esac
4551
4552 $cat <<EOH
4553
4554 Your C linker may need flags.  For this question you should
4555 include -L/whatever and any other flags used by the C linker, but you
4556 should NOT include libraries like -lwhatever.
4557
4558 Make sure you include the appropriate -L/path flags if your C linker
4559 does not normally search all of the directories you specified above,
4560 namely
4561         $libpth
4562 To use no flags, specify the word "none".
4563
4564 EOH
4565
4566 rp="Any additional ld flags (NOT including libraries)?"
4567 . ./myread
4568 case "$ans" in
4569 none) ldflags='';;
4570 *) ldflags="$ans";;
4571 esac
4572 rmlist="$rmlist pdp11"
4573
4574 : coherency check
4575 echo " "
4576 echo "Checking your choice of C compiler and flags for coherency..." >&4
4577 $cat > try.c <<'EOF'
4578 #include <stdio.h>
4579 int main() { printf("Ok\n"); exit(0); }
4580 EOF
4581 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4582 shift
4583 $cat >try.msg <<'EOM'
4584 I've tried to compile and run the following simple program:
4585
4586 EOM
4587 $cat try.c >> try.msg
4588
4589 $cat >> try.msg <<EOM
4590
4591 I used the command:
4592
4593         $*
4594         $run ./try
4595
4596 and I got the following output:
4597
4598 EOM
4599 dflt=y
4600 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4601         if $sh -c "$run ./try" >>try.msg 2>&1; then
4602                 xxx=`$run ./try`
4603                 case "$xxx" in
4604                 "Ok") dflt=n ;;
4605                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4606                         case " $libs " in
4607                         *" -lsfio "*)
4608                                 cat >> try.msg <<'EOQS'
4609 If $libs contains -lsfio, and sfio is mis-configured, then it
4610 sometimes (apparently) runs and exits with a 0 status, but with no
4611 output!  It may have to do with sfio's use of _exit vs. exit.
4612
4613 EOQS
4614                                 rp="You have a big problem.  Shall I abort Configure"
4615                                 dflt=y
4616                                 ;;
4617                         esac
4618                         ;;
4619                 esac
4620         else
4621                 echo "The program compiled OK, but exited with status $?." >>try.msg
4622                 rp="You have a problem.  Shall I abort Configure"
4623                 dflt=y
4624         fi
4625 else
4626         echo "I can't compile the test program." >>try.msg
4627         rp="You have a BIG problem.  Shall I abort Configure"
4628         dflt=y
4629 fi
4630 case "$dflt" in
4631 y)
4632         $cat try.msg >&4
4633         case "$knowitall" in
4634         '')
4635                 echo "(The supplied flags or libraries might be incorrect.)"
4636                 ;;
4637         *) dflt=n;;
4638         esac
4639         echo " "
4640         . ./myread
4641         case "$ans" in
4642         n*|N*) ;;
4643         *)      echo "Ok.  Stopping Configure." >&4
4644                 exit 1
4645                 ;;
4646         esac
4647         ;;
4648 n) echo "OK, that should do.";;
4649 esac
4650 $rm -f try try.* core
4651
4652 : define a shorthand compile call
4653 compile='
4654 mc_file=$1;
4655 shift;
4656 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4657 : define a shorthand compile call for compilations that should be ok.
4658 compile_ok='
4659 mc_file=$1;
4660 shift;
4661 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4662
4663 : check for lengths of integral types
4664 echo " "
4665 case "$intsize" in
4666 '')
4667         echo "Checking to see how big your integers are..." >&4
4668         $cat >try.c <<'EOCP'
4669 #include <stdio.h>
4670 int main()
4671 {
4672         printf("intsize=%d;\n", (int)sizeof(int));
4673         printf("longsize=%d;\n", (int)sizeof(long));
4674         printf("shortsize=%d;\n", (int)sizeof(short));
4675         exit(0);
4676 }
4677 EOCP
4678         set try
4679         if eval $compile_ok && $run ./try > /dev/null; then
4680                 eval `$run ./try`
4681                 echo "Your integers are $intsize bytes long."
4682                 echo "Your long integers are $longsize bytes long."
4683                 echo "Your short integers are $shortsize bytes long."
4684         else
4685                 $cat >&4 <<EOM
4686 !
4687 Help! I can't compile and run the intsize test program: please enlighten me!
4688 (This is probably a misconfiguration in your system or libraries, and
4689 you really ought to fix it.  Still, I'll try anyway.)
4690 !
4691 EOM
4692                 dflt=4
4693                 rp="What is the size of an integer (in bytes)?"
4694                 . ./myread
4695                 intsize="$ans"
4696                 dflt=$intsize
4697                 rp="What is the size of a long integer (in bytes)?"
4698                 . ./myread
4699                 longsize="$ans"
4700                 dflt=2
4701                 rp="What is the size of a short integer (in bytes)?"
4702                 . ./myread
4703                 shortsize="$ans"
4704         fi
4705         ;;
4706 esac
4707 $rm -f try try.*
4708
4709 : check for void type
4710 echo " "
4711 echo "Checking to see how well your C compiler groks the void type..." >&4
4712 case "$voidflags" in
4713 '')
4714         $cat >try.c <<'EOCP'
4715 #if TRY & 1
4716 void sub() {
4717 #else
4718 sub() {
4719 #endif
4720         extern void moo();      /* function returning void */
4721         void (*goo)();          /* ptr to func returning void */
4722 #if TRY & 8
4723         void *hue;              /* generic ptr */
4724 #endif
4725 #if TRY & 2
4726         void (*foo[10])();
4727 #endif
4728
4729 #if TRY & 4
4730         if(goo == moo) {
4731                 exit(0);
4732         }
4733 #endif
4734         exit(0);
4735 }
4736 int main() { sub(); }
4737 EOCP
4738         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4739                 voidflags=$defvoidused
4740         echo "Good.  It appears to support void to the level $package wants.">&4
4741                 if $contains warning .out >/dev/null 2>&1; then
4742                         echo "However, you might get some warnings that look like this:"
4743                         $cat .out
4744                 fi
4745         else
4746 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4747                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4748                         echo "It supports 1..."
4749                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4750                                 echo "It also supports 2..."
4751                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4752                                         voidflags=7
4753                                         echo "And it supports 4 but not 8 definitely."
4754                                 else
4755                                         echo "It doesn't support 4..."
4756                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4757                                                 voidflags=11
4758                                                 echo "But it supports 8."
4759                                         else
4760                                                 voidflags=3
4761                                                 echo "Neither does it support 8."
4762                                         fi
4763                                 fi
4764                         else
4765                                 echo "It does not support 2..."
4766                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4767                                         voidflags=13
4768                                         echo "But it supports 4 and 8."
4769                                 else
4770                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4771                                                 voidflags=5
4772                                                 echo "And it supports 4 but has not heard about 8."
4773                                         else
4774                                                 echo "However it supports 8 but not 4."
4775                                         fi
4776                                 fi
4777                         fi
4778                 else
4779                         echo "There is no support at all for void."
4780                         voidflags=0
4781                 fi
4782         fi
4783 esac
4784 case "$voidflags" in
4785 "$defvoidused") ;;
4786 *)      $cat >&4 <<'EOM'
4787   Support flag bits are:
4788     1: basic void declarations.
4789     2: arrays of pointers to functions returning void.
4790     4: operations between pointers to and addresses of void functions.
4791     8: generic void pointers.
4792 EOM
4793         dflt="$voidflags";
4794         rp="Your void support flags add up to what?"
4795         . ./myread
4796         voidflags="$ans"
4797         ;;
4798 esac
4799 $rm -f try.* .out
4800
4801 : check for length of pointer
4802 echo " "
4803 case "$ptrsize" in
4804 '')
4805         echo "Checking to see how big your pointers are..." >&4
4806         if test "$voidflags" -gt 7; then
4807                 echo '#define VOID_PTR char *' > try.c
4808         else
4809                 echo '#define VOID_PTR void *' > try.c
4810         fi
4811         $cat >>try.c <<'EOCP'
4812 #include <stdio.h>
4813 int main()
4814 {
4815     printf("%d\n", (int)sizeof(VOID_PTR));
4816     exit(0);
4817 }
4818 EOCP
4819         set try
4820         if eval $compile_ok; then
4821                 ptrsize=`$run ./try`
4822                 echo "Your pointers are $ptrsize bytes long."
4823         else
4824                 dflt='4'
4825                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4826                 rp="What is the size of a pointer (in bytes)?"
4827                 . ./myread
4828                 ptrsize="$ans"
4829         fi
4830         ;;
4831 esac
4832 $rm -f try.c try
4833
4834 : check for long long
4835 echo " "
4836 echo "Checking to see if you have long long..." >&4
4837 echo 'int main() { long long x = 7; return 0; }' > try.c
4838 set try
4839 if eval $compile; then
4840         val="$define"
4841         echo "You have long long."
4842 else
4843         val="$undef"
4844         echo "You do not have long long."
4845 fi
4846 $rm try.*
4847 set d_longlong
4848 eval $setvar
4849
4850 : check for length of long long
4851 case "${d_longlong}${longlongsize}" in
4852 $define)
4853         echo " "
4854         echo "Checking to see how big your long longs are..." >&4
4855         $cat >try.c <<'EOCP'
4856 #include <stdio.h>
4857 int main()
4858 {
4859     printf("%d\n", (int)sizeof(long long));
4860     return(0);
4861 }
4862 EOCP
4863         set try
4864         if eval $compile_ok; then
4865                 longlongsize=`$run ./try`
4866                 echo "Your long longs are $longlongsize bytes long."
4867         else
4868                 dflt='8'
4869                 echo " "
4870                 echo "(I can't seem to compile the test program.  Guessing...)"
4871                 rp="What is the size of a long long (in bytes)?"
4872                 . ./myread
4873                 longlongsize="$ans"
4874         fi
4875         if $test "X$longsize" = "X$longlongsize"; then
4876                 echo "(That isn't any different from an ordinary long.)"
4877         fi      
4878         ;;
4879 esac
4880 $rm -f try.* try
4881
4882 : determine filename position in cpp output
4883 echo " "
4884 echo "Computing filename position in cpp output for #include directives..." >&4
4885 case "$osname" in
4886 vos) testaccess=-e ;;
4887 *)   testaccess=-r ;;
4888 esac
4889 echo '#include <stdio.h>' > foo.c
4890 $cat >fieldn <<EOF
4891 $startsh
4892 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4893 $grep '^[       ]*#.*stdio\.h' | \
4894 while read cline; do
4895         pos=1
4896         set \$cline
4897         while $test \$# -gt 0; do
4898                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4899                         echo "\$pos"
4900                         exit 0
4901                 fi
4902                 shift
4903                 pos=\`expr \$pos + 1\`
4904         done
4905 done
4906 EOF
4907 chmod +x fieldn
4908 fieldn=`./fieldn`
4909 $rm -f foo.c fieldn
4910 case $fieldn in
4911 '') pos='???';;
4912 1) pos=first;;
4913 2) pos=second;;
4914 3) pos=third;;
4915 *) pos="${fieldn}th";;
4916 esac
4917 echo "Your cpp writes the filename in the $pos field of the line."
4918
4919 case "$osname" in
4920 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4921 *)   cppfilter='' ;;
4922 esac
4923 : locate header file
4924 $cat >findhdr <<EOF
4925 $startsh
4926 wanted=\$1
4927 name=''
4928 for usrincdir in $usrinc
4929 do
4930         if test -f \$usrincdir/\$wanted; then
4931                 echo "\$usrincdir/\$wanted"
4932                 exit 0
4933         fi
4934 done
4935 awkprg='{ print \$$fieldn }'
4936 echo "#include <\$wanted>" > foo\$\$.c
4937 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4938 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4939 while read cline; do
4940         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4941         case "\$name" in
4942         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4943         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4944         *) exit 2;;
4945         esac;
4946 done;
4947 #
4948 # status = 0: grep returned 0 lines, case statement not executed
4949 # status = 1: headerfile found
4950 # status = 2: while loop executed, no headerfile found
4951 #
4952 status=\$?
4953 $rm -f foo\$\$.c;
4954 if test \$status -eq 1; then
4955         exit 0;
4956 fi
4957 exit 1
4958 EOF
4959 chmod +x findhdr
4960
4961 : define an alternate in-header-list? function
4962 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4963 cont=true; xxf="echo \"<\$1> found.\" >&4";
4964 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4965 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4966 esac;
4967 case $# in 4) instead=instead;; *) instead="at last";; esac;
4968 while $test "$cont"; do
4969         xxx=`./findhdr $1`
4970         var=$2; eval "was=\$$2";
4971         if $test "$xxx" && $test -r "$xxx";
4972         then eval $xxf;
4973         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4974                 cont="";
4975         else eval $xxnf;
4976         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4977         set $yyy; shift; shift; yyy=$@;
4978         case $# in 0) cont="";;
4979         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4980                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4981         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4982                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4983         esac;
4984 done;
4985 while $test "$yyy";
4986 do set $yyy; var=$2; eval "was=\$$2";
4987         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4988         set $yyy; shift; shift; yyy=$@;
4989 done'
4990
4991 : see if inttypes.h is available
4992 : we want a real compile instead of Inhdr because some systems
4993 : have an inttypes.h which includes non-existent headers
4994 echo " "
4995 $cat >try.c <<EOCP
4996 #include <inttypes.h>
4997 int main() {
4998         static int32_t foo32 = 0x12345678;
4999 }
5000 EOCP
5001 set try
5002 if eval $compile; then
5003         echo "<inttypes.h> found." >&4
5004         val="$define"
5005 else
5006         echo "<inttypes.h> NOT found." >&4
5007         val="$undef"
5008 fi
5009 $rm -f try.c try
5010 set i_inttypes
5011 eval $setvar
5012
5013 : check for int64_t
5014 echo " "
5015 echo "Checking to see if you have int64_t..." >&4
5016 $cat >try.c <<EOCP
5017 #include <sys/types.h>
5018 #$i_inttypes I_INTTYPES
5019 #ifdef I_INTTYPES
5020 #include <inttypes.h>
5021 #endif
5022 int main() { int64_t x = 7; }
5023 EOCP
5024 set try
5025 if eval $compile; then
5026         val="$define"
5027         echo "You have int64_t."
5028 else
5029         val="$undef"
5030         echo "You do not have int64_t."
5031 fi
5032 $rm -f try try.*
5033 set d_int64_t
5034 eval $setvar
5035
5036
5037 echo " "
5038 echo "Checking which 64-bit integer type we could use..." >&4
5039
5040 case "$intsize" in
5041 8) val=int
5042    set quadtype
5043    eval $setvar
5044    val='"unsigned int"'
5045    set uquadtype
5046    eval $setvar
5047    quadkind=1
5048    ;;
5049 *) case "$longsize" in
5050    8) val=long
5051       set quadtype
5052       eval $setvar
5053       val='"unsigned long"'
5054       set uquadtype
5055       eval $setvar
5056       quadkind=2
5057       ;;
5058    *) case "$d_longlong:$longlongsize" in
5059       define:8)
5060         val='"long long"'
5061         set quadtype
5062         eval $setvar
5063         val='"unsigned long long"'
5064         set uquadtype
5065         eval $setvar
5066         quadkind=3
5067         ;;
5068       *) case "$d_int64_t" in
5069          define)
5070            val=int64_t
5071            set quadtype
5072            eval $setvar
5073            val=uint64_t
5074            set uquadtype
5075            eval $setvar
5076            quadkind=4
5077            ;;
5078          esac
5079          ;;
5080       esac
5081       ;;
5082    esac
5083    ;;
5084 esac
5085
5086 case "$quadtype" in
5087 '')     echo "Alas, no 64-bit integer types in sight." >&4
5088         d_quad="$undef"
5089         ;;
5090 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5091         d_quad="$define"
5092         ;;
5093 esac
5094
5095
5096 case "$uselonglong" in
5097 "$define"|true|[yY]*)
5098         cat <<EOM >&4
5099
5100 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5101 EOM
5102         use64bitint="$define"
5103         ;;
5104 esac                          
5105 case "$use64bits" in
5106 "$define"|true|[yY]*)
5107         cat <<EOM >&4
5108
5109 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5110 EOM
5111         use64bitint="$define"
5112         ;;
5113 esac                          
5114 case "$use64bitints" in
5115 "$define"|true|[yY]*)
5116         cat <<EOM >&4
5117
5118 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5119 EOM
5120         use64bitint="$define"
5121         ;;
5122 esac                          
5123 case "$use64bitsint" in
5124 "$define"|true|[yY]*)
5125         cat <<EOM >&4
5126
5127 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5128 EOM
5129         use64bitint="$define"
5130         ;;
5131 esac                          
5132 case "$uselonglongs" in
5133 "$define"|true|[yY]*)
5134         cat <<EOM >&4
5135
5136 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5137 EOM
5138         use64bitint="$define"
5139         ;;
5140 esac                          
5141 case "$use64bitsall" in
5142 "$define"|true|[yY]*)
5143         cat <<EOM >&4
5144
5145 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5146 EOM
5147         use64bitall="$define"
5148         ;;
5149 esac                          
5150
5151 case "$ccflags" in
5152 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5153 esac
5154 case "$use64bitall" in
5155 "$define"|true|[yY]*) use64bitint="$define" ;;
5156 esac
5157
5158 case "$longsize" in
5159 8) cat <<EOM
5160
5161 You have natively 64-bit long integers.
5162 EOM
5163    val="$define"
5164    ;;
5165 *) case "$use64bitint" in
5166    "$define"|true|[yY]*) dflt='y';;
5167    *) dflt='n';;
5168    esac
5169    case "$d_quad" in
5170    "$define") ;;
5171    *) dflt='n' ;;
5172    esac
5173    cat <<EOM
5174
5175 Perl can be built to take advantage of 64-bit integer types
5176 on some systems.  To do so, Configure can be run with -Duse64bitint.
5177 Choosing this option will most probably introduce binary incompatibilities.
5178
5179 If this doesn't make any sense to you, just accept the default '$dflt'.
5180 (The default has been chosen based on your configuration.)
5181 EOM
5182    rp='Try to use 64-bit integers, if available?'
5183    . ./myread
5184    case "$ans" in
5185    [yY]*) val="$define" ;;
5186    *)     val="$undef"  ;;
5187    esac
5188    ;;
5189 esac
5190 set use64bitint
5191 eval $setvar
5192
5193 case "$use64bitall" in
5194 "$define"|true|[yY]*) dflt='y' ;;
5195 *) case "$longsize" in
5196    8) dflt='y' ;;
5197    *) dflt='n' ;;
5198    esac
5199    ;;
5200 esac    
5201 cat <<EOM
5202
5203 You may also choose to try maximal 64-bitness.  It means using as much
5204 64-bitness as possible on the platform.  This in turn means even more
5205 binary incompatibilities.  On the other hand, your platform may not
5206 have any more 64-bitness available than what you already have chosen.
5207
5208 If this doesn't make any sense to you, just accept the default '$dflt'.
5209 (The default has been chosen based on your configuration.)
5210 EOM
5211 rp='Try to use maximal 64-bit support, if available?'
5212 . ./myread
5213 case "$ans" in
5214 [yY]*) val="$define" ;;
5215 *)     val="$undef"  ;;
5216 esac
5217 set use64bitall
5218 eval $setvar
5219 case "$use64bitall" in
5220 "$define")
5221         case "$use64bitint" in
5222         "$undef")
5223                 cat <<EOM
5224
5225 Since you have chosen a maximally 64-bit build, I'm also turning on
5226 the use of 64-bit integers.
5227 EOM
5228                 use64bitint="$define" ;;
5229         esac
5230         ;;
5231 esac
5232
5233 case "$use64bitall" in
5234 "$define"|true|[yY]*)
5235         case "$ptrsize" in
5236         4)      cat <<EOM >&4
5237
5238 *** You have chosen a maximally 64-bit build, but your pointers
5239 *** are only 4 bytes wide, disabling maximal 64-bitness.
5240
5241 EOM
5242                 use64bitall="$undef"
5243                 case "$use64bitint" in
5244                 "$define"|true|[yY]*) ;;
5245                 *)      cat <<EOM >&4
5246
5247 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5248
5249 EOM
5250                         use64bitint="$define"
5251                         ;;
5252                 esac
5253                 ;;
5254         esac
5255         ;;
5256 esac
5257
5258 case "$use64bitint" in
5259 "$define"|true|[yY]*)
5260 : Look for a hint-file generated 'call-back-unit'.  If the
5261 : user has specified that a 64-bit perl is to be built,
5262 : we may need to set or change some other defaults.
5263         if $test -f use64bitint.cbu; then
5264                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5265                 . ./use64bitint.cbu
5266         fi
5267         case "$longsize" in
5268         4) case "$archname64" in
5269            '') archname64=64int ;;
5270            esac
5271            ;;
5272         esac
5273         ;;
5274 esac
5275
5276 case "$use64bitall" in
5277 "$define"|true|[yY]*)
5278 : Look for a hint-file generated 'call-back-unit'.  If the
5279 : user has specified that a maximally 64-bit perl is to be built,
5280 : we may need to set or change some other defaults.
5281         if $test -f use64bitall.cbu; then
5282                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5283                 . ./use64bitall.cbu
5284         fi
5285         case "$longsize" in
5286         4) case "$archname64" in
5287            ''|64int) archname64=64all ;;
5288            esac
5289            ;;
5290         esac
5291         ;;
5292 esac
5293
5294 echo " "
5295 echo "Checking for GNU C Library..." >&4
5296 cat >try.c <<EOM
5297 #include <stdio.h>
5298 int main()
5299 {
5300 #ifdef __GLIBC__
5301     exit(0);
5302 #else
5303     exit(1);
5304 #endif
5305 }
5306 EOM
5307 set try
5308 if eval $compile_ok && $run ./try; then
5309         val="$define"
5310         echo "You are using the GNU C Library"
5311 else
5312         val="$undef"
5313         echo "You are not using the GNU C Library"
5314 fi
5315 $rm -f try try.*
5316 set d_gnulibc
5317 eval $setvar
5318
5319 : see if nm is to be used to determine whether a symbol is defined or not
5320 case "$usenm" in
5321 '')
5322         dflt=''
5323         case "$d_gnulibc" in
5324         "$define")
5325                 echo " "
5326                 echo "nm probably won't work on the GNU C Library." >&4
5327                 dflt=n
5328                 ;;
5329         esac
5330         case "$dflt" in
5331         '') 
5332                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5333                         echo " "
5334                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5335                         echo "'nm' won't be sufficient on this sytem." >&4
5336                         dflt=n
5337                 fi
5338                 ;;
5339         esac
5340         case "$dflt" in
5341         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5342                 if $test $dflt -gt 20; then
5343                         dflt=y
5344                 else
5345                         dflt=n
5346                 fi
5347                 ;;
5348         esac
5349         ;;
5350 *)
5351         case "$usenm" in
5352         true|$define) dflt=y;;
5353         *) dflt=n;;
5354         esac
5355         ;;
5356 esac
5357 $cat <<EOM
5358
5359 I can use $nm to extract the symbols from your C libraries. This
5360 is a time consuming task which may generate huge output on the disk (up
5361 to 3 megabytes) but that should make the symbols extraction faster. The
5362 alternative is to skip the 'nm' extraction part and to compile a small
5363 test program instead to determine whether each symbol is present. If
5364 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5365 this may be the best solution.
5366
5367 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5368
5369 EOM
5370 rp="Shall I use $nm to extract C symbols from the libraries?"
5371 . ./myread
5372 case "$ans" in
5373 [Nn]*) usenm=false;;
5374 *) usenm=true;;
5375 esac
5376
5377 runnm=$usenm
5378 case "$reuseval" in
5379 true) runnm=false;;
5380 esac
5381
5382 : nm options which may be necessary
5383 case "$nm_opt" in
5384 '') if $test -f /mach_boot; then
5385                 nm_opt=''       # Mach
5386         elif $test -d /usr/ccs/lib; then
5387                 nm_opt='-p'     # Solaris (and SunOS?)
5388         elif $test -f /dgux; then
5389                 nm_opt='-p'     # DG-UX
5390         elif $test -f /lib64/rld; then
5391                 nm_opt='-p'     # 64-bit Irix
5392         else
5393                 nm_opt=''
5394         fi;;
5395 esac
5396
5397 : nm options which may be necessary for shared libraries but illegal
5398 : for archive libraries.  Thank you, Linux.
5399 case "$nm_so_opt" in
5400 '')     case "$myuname" in
5401         *linux*)
5402                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5403                         nm_so_opt='--dynamic'
5404                 fi
5405                 ;;
5406         esac
5407         ;;
5408 esac
5409
5410 case "$runnm" in
5411 true)
5412 : get list of predefined functions in a handy place
5413 echo " "
5414 case "$libc" in
5415 '') libc=unknown
5416         case "$libs" in
5417         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5418         esac
5419         ;;
5420 esac
5421 case "$libs" in
5422 '') ;;
5423 *)  for thislib in $libs; do
5424         case "$thislib" in
5425         -lc|-lc_s)
5426                 : Handle C library specially below.
5427                 ;;
5428         -l*)
5429                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5430                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5431                         :
5432                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5433                         :
5434                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5435                         :
5436                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5437                         :
5438                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5439                         :
5440                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5441                         :
5442                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5443                         :
5444                 else
5445                         try=''
5446                 fi
5447                 libnames="$libnames $try"
5448                 ;;
5449         *) libnames="$libnames $thislib" ;;
5450         esac
5451         done
5452         ;;
5453 esac
5454 xxx=normal
5455 case "$libc" in
5456 unknown)
5457         set /lib/libc.$so
5458         for xxx in $libpth; do
5459                 $test -r $1 || set $xxx/libc.$so
5460                 : The messy sed command sorts on library version numbers.
5461                 $test -r $1 || \
5462                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5463                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5464                                 h
5465                                 s/[0-9][0-9]*/0000&/g
5466                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5467                                 G
5468                                 s/\n/ /' | \
5469                          $sort | $sed -e 's/^.* //'`
5470                 eval set \$$#
5471         done
5472         $test -r $1 || set /usr/ccs/lib/libc.$so
5473         $test -r $1 || set /lib/libsys_s$_a
5474         ;;
5475 *)
5476         set blurfl
5477         ;;
5478 esac
5479 if $test -r "$1"; then
5480         echo "Your (shared) C library seems to be in $1."
5481         libc="$1"
5482 elif $test -r /lib/libc && $test -r /lib/clib; then
5483         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5484         xxx=apollo
5485         libc='/lib/clib /lib/libc'
5486         if $test -r /lib/syslib; then
5487                 echo "(Your math library is in /lib/syslib.)"
5488                 libc="$libc /lib/syslib"
5489         fi
5490 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5491         echo "Your C library seems to be in $libc, as you said before."
5492 elif $test -r $incpath/usr/lib/libc$_a; then
5493         libc=$incpath/usr/lib/libc$_a;
5494         echo "Your C library seems to be in $libc.  That's fine."
5495 elif $test -r /lib/libc$_a; then
5496         libc=/lib/libc$_a;
5497         echo "Your C library seems to be in $libc.  You're normal."
5498 else
5499         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5500                 :
5501         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5502                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5503         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5504                 :
5505         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5506                 :
5507         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5508                 :
5509         else
5510                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5511         fi
5512         if $test -r "$tans"; then
5513                 echo "Your C library seems to be in $tans, of all places."
5514                 libc=$tans
5515         else
5516                 libc='blurfl'
5517         fi
5518 fi
5519 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5520         dflt="$libc"
5521         cat <<EOM
5522
5523 If the guess above is wrong (which it might be if you're using a strange
5524 compiler, or your machine supports multiple models), you can override it here.
5525
5526 EOM
5527 else
5528         dflt=''
5529         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5530         cat >&4 <<EOM
5531 I can't seem to find your C library.  I've looked in the following places:
5532
5533 EOM
5534         $sed 's/^/      /' libpath
5535         cat <<EOM
5536
5537 None of these seems to contain your C library. I need to get its name...
5538
5539 EOM
5540 fi
5541 fn=f
5542 rp='Where is your C library?'
5543 . ./getfile
5544 libc="$ans"
5545
5546 echo " "
5547 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5548 set X `cat libnames`
5549 shift
5550 xxx=files
5551 case $# in 1) xxx=file; esac
5552 echo "Extracting names from the following $xxx for later perusal:" >&4
5553 echo " "
5554 $sed 's/^/      /' libnames >&4
5555 echo " "
5556 $echo $n "This may take a while...$c" >&4
5557
5558 for file in $*; do
5559         case $file in
5560         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5561         *) $nm $nm_opt $file 2>/dev/null;;
5562         esac
5563 done >libc.tmp
5564
5565 $echo $n ".$c"
5566 $grep fprintf libc.tmp > libc.ptf
5567 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5568 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5569 xxx='[ADTSIW]'
5570 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5571         eval $xscan;\
5572         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5573                 eval $xrun
5574 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5575         eval $xscan;\
5576         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5577                 eval $xrun
5578 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5579         eval $xscan;\
5580         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5581                 eval $xrun
5582 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5583         eval $xscan;\
5584         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5585                 eval $xrun
5586 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5587         eval $xscan;\
5588         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5589                 eval $xrun
5590 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5591         eval $xscan;\
5592         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5593                 eval $xrun
5594 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5595                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5596         eval $xscan;\
5597         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5598                 eval $xrun
5599 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5600         eval $xscan;\
5601         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5602                 eval $xrun
5603 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5604         eval $xscan;\
5605         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5606                 eval $xrun
5607 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5608         eval $xscan;\
5609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5610                 eval $xrun
5611 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5612         eval $xscan;\
5613         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5614                 eval $xrun
5615 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5616         eval $xscan;\
5617         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5618                 eval $xrun
5619 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5620         eval $xscan;\
5621         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5622                 eval $xrun
5623 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5624         eval $xscan;\
5625         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5626                 eval $xrun
5627 else
5628         $nm -p $* 2>/dev/null >libc.tmp
5629         $grep fprintf libc.tmp > libc.ptf
5630         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5631                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5632         then
5633                 nm_opt='-p'
5634                 eval $xrun
5635         else
5636                 echo " "
5637                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5638                 com=''
5639                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5640                         for thisname in $libnames $libc; do
5641                                 $ar t $thisname >>libc.tmp
5642                         done
5643                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5644                         echo "Ok." >&4
5645                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5646                         # Repeat libc to extract forwarders to DLL entries too
5647                         for thisname in $libnames $libc; do
5648                                 $ar tv $thisname >>libc.tmp
5649                                 # Revision 50 of EMX has bug in $ar.
5650                                 # it will not extract forwarders to DLL entries
5651                                 # Use emximp which will extract exactly them.
5652                                 emximp -o tmp.imp $thisname \
5653                                     2>/dev/null && \
5654                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5655                                     < tmp.imp >>libc.tmp
5656                                 $rm tmp.imp
5657                         done
5658                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5659                         echo "Ok." >&4
5660                 else
5661                         echo "$ar didn't seem to work right." >&4
5662                         echo "Maybe this is a Cray...trying bld instead..." >&4
5663                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5664                         then
5665                                 for thisname in $libnames; do
5666                                         bld t $libnames | \
5667                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5668                                         $ar t $thisname >>libc.tmp
5669                                 done
5670                                 echo "Ok." >&4
5671                         else
5672                                 echo "That didn't work either.  Giving up." >&4
5673                                 exit 1
5674                         fi
5675                 fi
5676         fi
5677 fi
5678 nm_extract="$com"
5679 if $test -f /lib/syscalls.exp; then
5680         echo " "
5681         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5682         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5683 fi
5684 ;;
5685 esac
5686 $rm -f libnames libpath
5687
5688 : is a C symbol defined?
5689 csym='tlook=$1;
5690 case "$3" in
5691 -v) tf=libc.tmp; tc=""; tdc="";;
5692 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5693 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5694 esac;
5695 tx=yes;
5696 case "$reuseval-$4" in
5697 true-) ;;
5698 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5699 esac;
5700 case "$tx" in
5701 yes)
5702         case "$runnm" in
5703         true)
5704                 if $contains $tlook $tf >/dev/null 2>&1;
5705                 then tval=true;
5706                 else tval=false;
5707                 fi;;
5708         *)
5709                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5710                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5711                 then tval=true;
5712                 else tval=false;
5713                 fi;
5714                 $rm -f t t.c;;
5715         esac;;
5716 *)
5717         case "$tval" in
5718         $define) tval=true;;
5719         *) tval=false;;
5720         esac;;
5721 esac;
5722 eval "$2=$tval"'
5723
5724 : define an is-in-libc? function
5725 inlibc='echo " "; td=$define; tu=$undef;
5726 sym=$1; var=$2; eval "was=\$$2";
5727 tx=yes;
5728 case "$reuseval$was" in
5729 true) ;;
5730 true*) tx=no;;
5731 esac;
5732 case "$tx" in
5733 yes)
5734         set $sym tres -f;
5735         eval $csym;
5736         case "$tres" in
5737         true)
5738                 echo "$sym() found." >&4;
5739                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5740         *)
5741                 echo "$sym() NOT found." >&4;
5742                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5743         esac;;
5744 *)
5745         case "$was" in
5746         $define) echo "$sym() found." >&4;;
5747         *) echo "$sym() NOT found." >&4;;
5748         esac;;
5749 esac'
5750
5751 : see if sqrtl exists
5752 set sqrtl d_sqrtl
5753 eval $inlibc
5754
5755 : check for length of double
5756 echo " "
5757 case "$doublesize" in
5758 '')
5759         echo "Checking to see how big your double precision numbers are..." >&4
5760         $cat >try.c <<'EOCP'
5761 #include <stdio.h>
5762 int main()
5763 {
5764     printf("%d\n", (int)sizeof(double));
5765     exit(0);
5766 }
5767 EOCP
5768         set try
5769         if eval $compile_ok; then
5770                 doublesize=`$run ./try`
5771                 echo "Your double is $doublesize bytes long."
5772         else
5773                 dflt='8'
5774                 echo "(I can't seem to compile the test program.  Guessing...)"
5775                 rp="What is the size of a double precision number (in bytes)?"
5776                 . ./myread
5777                 doublesize="$ans"
5778         fi
5779         ;;
5780 esac
5781 $rm -f try.c try
5782
5783 : check for long doubles
5784 echo " "
5785 echo "Checking to see if you have long double..." >&4
5786 echo 'int main() { long double x = 7.0; }' > try.c
5787 set try
5788 if eval $compile; then
5789         val="$define"
5790         echo "You have long double."
5791 else
5792         val="$undef"
5793         echo "You do not have long double."
5794 fi
5795 $rm try.*
5796 set d_longdbl
5797 eval $setvar
5798
5799 : check for length of long double
5800 case "${d_longdbl}${longdblsize}" in
5801 $define)
5802         echo " "
5803         echo "Checking to see how big your long doubles are..." >&4
5804         $cat >try.c <<'EOCP'
5805 #include <stdio.h>
5806 int main()
5807 {
5808         printf("%d\n", sizeof(long double));
5809 }
5810 EOCP
5811         set try
5812         set try
5813         if eval $compile; then
5814                 longdblsize=`$run ./try`
5815                 echo "Your long doubles are $longdblsize bytes long."
5816         else
5817                 dflt='8'
5818                 echo " "
5819                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5820                 rp="What is the size of a long double (in bytes)?"
5821                 . ./myread
5822                 longdblsize="$ans"
5823         fi
5824         if $test "X$doublesize" = "X$longdblsize"; then
5825                 echo "(That isn't any different from an ordinary double.)"
5826         fi      
5827         ;;
5828 esac
5829 $rm -f try.* try
5830
5831 echo " "
5832
5833 if $test X"$d_longdbl" = X"$define"; then
5834
5835 echo "Checking how to print long doubles..." >&4
5836
5837 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5838         $cat >try.c <<'EOCP'
5839 #include <sys/types.h>
5840 #include <stdio.h>
5841 int main() {
5842   double d = 123.456;
5843   printf("%.3f\n", d);
5844 }
5845 EOCP
5846         set try
5847         if eval $compile; then
5848                 yyy=`$run ./try`
5849                 case "$yyy" in
5850                 123.456)
5851                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5852                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5853                         echo "We will use %f."
5854                         ;;
5855                 esac
5856         fi
5857 fi
5858
5859 if $test X"$sPRIfldbl" = X; then
5860         $cat >try.c <<'EOCP'
5861 #include <sys/types.h>
5862 #include <stdio.h>
5863 int main() {
5864   long double d = 123.456;
5865   printf("%.3Lf\n", d);
5866 }
5867 EOCP
5868         set try
5869         if eval $compile; then
5870                 yyy=`$run ./try`
5871                 case "$yyy" in
5872                 123.456)
5873                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5874                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5875                         echo "We will use %Lf."
5876                         ;;
5877                 esac
5878         fi
5879 fi
5880
5881 if $test X"$sPRIfldbl" = X; then
5882         $cat >try.c <<'EOCP'
5883 #include <sys/types.h>
5884 #include <stdio.h>
5885 int main() {
5886   long double d = 123.456;
5887   printf("%.3llf\n", d);
5888 }
5889 EOCP
5890         set try
5891         if eval $compile; then
5892                 yyy=`$run ./try`
5893                 case "$yyy" in
5894                 123.456)
5895                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5896                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5897                         echo "We will use %llf."
5898                         ;;
5899                 esac
5900         fi
5901 fi
5902
5903 if $test X"$sPRIfldbl" = X; then
5904         $cat >try.c <<'EOCP'
5905 #include <sys/types.h>
5906 #include <stdio.h>
5907 int main() {
5908   long double d = 123.456;
5909   printf("%.3lf\n", d);
5910 }
5911 EOCP
5912         set try
5913         if eval $compile; then
5914                 yyy=`$run ./try`
5915                 case "$yyy" in
5916                 123.456)
5917                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5918                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5919                         echo "We will use %lf."
5920                         ;;
5921                 esac
5922         fi
5923 fi
5924
5925 if $test X"$sPRIfldbl" = X; then
5926         echo "Cannot figure out how to print long doubles." >&4
5927 else
5928         sSCNfldbl=$sPRIfldbl    # expect consistency
5929 fi
5930
5931 $rm -f try try.*
5932
5933 fi # d_longdbl
5934
5935 case "$sPRIfldbl" in
5936 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5937         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5938         d_SCNfldbl="$undef";
5939         ;;
5940 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5941         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5942         d_SCNfldbl="$define";
5943         ;;
5944 esac
5945
5946 : see if modfl exists
5947 set modfl d_modfl
5948 eval $inlibc
5949
5950 d_modfl_pow32_bug="$undef"
5951
5952 case "$d_longdbl$d_modfl" in
5953 $define$define)
5954         $cat <<EOM
5955 Checking to see whether your modfl() is okay for large values...
5956 EOM
5957 $cat >try.c <<EOCP
5958 #include <math.h> 
5959 #include <stdio.h>
5960 int main() {
5961     long double nv = 4294967303.15;
5962     long double v, w;
5963     v = modfl(nv, &w);         
5964 #ifdef __GLIBC__
5965     printf("glibc");
5966 #endif
5967     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
5968     return 0;
5969 }
5970 EOCP
5971         case "$osname:$gccversion" in
5972         aix:)   saveccflags="$ccflags"
5973                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
5974         esac
5975         set try
5976         if eval $compile; then
5977                 foo=`$run ./try`
5978                 case "$foo" in
5979                 *" 4294967303.150000 1.150000 4294967302.000000")
5980                         echo >&4 "Your modfl() is broken for large values."
5981                         d_modfl_pow32_bug="$define"
5982                         case "$foo" in
5983                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
5984                         ;;
5985                         esac
5986                         ;;
5987                 *" 4294967303.150000 0.150000 4294967303.000000")
5988                         echo >&4 "Your modfl() seems okay for large values."
5989                         ;;
5990                 *)      echo >&4 "I don't understand your modfl() at all."
5991                         d_modfl="$undef"
5992                         ;;
5993                 esac
5994                 $rm -f try.* try core core.try.*
5995         else
5996                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
5997                 d_modfl="$undef"
5998         fi
5999         case "$osname:$gccversion" in
6000         aix:)   ccflags="$saveccflags" ;; # restore
6001         esac
6002         ;;
6003 esac
6004
6005 case "$ccflags" in
6006 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6007 esac
6008
6009 case "$uselongdouble" in
6010 $define|true|[yY]*)     dflt='y';;
6011 *) dflt='n';;
6012 esac
6013 cat <<EOM
6014
6015 Perl can be built to take advantage of long doubles which
6016 (if available) may give more accuracy and range for floating point numbers.
6017
6018 If this doesn't make any sense to you, just accept the default '$dflt'.
6019 EOM
6020 rp='Try to use long doubles if available?'
6021 . ./myread
6022 case "$ans" in
6023 y|Y)    val="$define"   ;;
6024 *)      val="$undef"    ;;
6025 esac
6026 set uselongdouble
6027 eval $setvar
6028
6029 case "$uselongdouble" in
6030 true|[yY]*) uselongdouble="$define" ;;
6031 esac
6032
6033 case "$uselongdouble" in
6034 $define)
6035 : Look for a hint-file generated 'call-back-unit'.  If the
6036 : user has specified that long doubles should be used,
6037 : we may need to set or change some other defaults.
6038         if $test -f uselongdouble.cbu; then
6039                 echo "Your platform has some specific hints for long doubles, using them..."
6040                 . ./uselongdouble.cbu
6041         else
6042                 $cat <<EOM
6043 (Your platform doesn't have any specific hints for long doubles.)
6044 EOM
6045         fi
6046         ;;
6047 esac
6048
6049 message=X
6050 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6051 $define:$define:$define)
6052         : You have both
6053         ;;
6054 $define:$define:$undef)
6055         message="I could not find modfl"
6056         ;;
6057 $define:$undef:$define)
6058         message="I could not find sqrtl"
6059         ;;
6060 $define:$undef:$undef)
6061         message="I found neither sqrtl nor modfl"
6062         ;;
6063 esac
6064
6065 if $test "$message" != X; then
6066         $cat <<EOM >&4
6067
6068 *** You requested the use of long doubles but you do not seem to have
6069 *** the mathematic functions for long doubles.
6070 *** ($message)
6071 *** I'm disabling the use of long doubles.
6072
6073 EOM
6074
6075         uselongdouble=$undef
6076 fi
6077
6078 case "$useperlio" in
6079 $define|true|[yY]*|'')  dflt='y';;
6080 *) dflt='n';;
6081 esac
6082 cat <<EOM
6083
6084 Previous version of $package used the standard IO mechanisms as
6085 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6086 alternate IO mechanisms via the PerlIO abstraction layer, but the
6087 stdio mechanism is still available if needed.  The abstraction layer
6088 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6089 Using PerlIO with sfio may cause problems with some extension modules.
6090
6091 If this doesn't make any sense to you, just accept the default '$dflt'.
6092 EOM
6093 rp='Use the PerlIO abstraction layer?'
6094 . ./myread
6095 case "$ans" in
6096 y|Y) 
6097         val="$define"
6098         ;;
6099 *)      
6100         echo "Ok, doing things the stdio way."
6101         val="$undef"
6102         ;;
6103 esac
6104 set useperlio
6105 eval $setvar 
6106
6107 case "$usesocks" in
6108 $define|true|[yY]*)
6109         case "$useperlio" in
6110         $define|true|[yY]*) ;;
6111         *)      cat >&4 <<EOM
6112
6113 You are using the SOCKS proxy protocol library which means that you
6114 should also use the PerlIO layer.  You may be headed for trouble.
6115
6116 EOM
6117                 ;;
6118         esac
6119         ;;
6120 esac
6121
6122         
6123 : determine the architecture name
6124 echo " "
6125 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6126         tarch=`arch`"-$osname"
6127 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6128         if uname -m > tmparch 2>&1 ; then
6129                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6130                         -e 's/$/'"-$osname/" tmparch`
6131         else
6132                 tarch="$osname"
6133         fi
6134         $rm -f tmparch
6135 else
6136         tarch="$osname"
6137 fi
6138 case "$myarchname" in
6139 ''|"$tarch") ;;
6140 *)
6141         echo "(Your architecture name used to be $myarchname.)"
6142         archname=''
6143         ;;
6144 esac
6145 case "$targetarch" in
6146 '') ;;
6147 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6148 esac
6149 myarchname="$tarch"
6150 case "$archname" in
6151 '') dflt="$tarch";;
6152 *) dflt="$archname";;
6153 esac
6154 rp='What is your architecture name'
6155 . ./myread
6156 archname="$ans"
6157 case "$usethreads" in
6158 $define)
6159         echo "Threads selected." >&4
6160         case "$archname" in
6161         *-thread*) echo "...and architecture name already has -thread." >&4
6162                 ;;
6163         *)      archname="$archname-thread"
6164                 echo "...setting architecture name to $archname." >&4
6165                 ;;
6166         esac
6167         ;;
6168 esac
6169 case "$usemultiplicity" in
6170 $define)
6171         echo "Multiplicity selected." >&4
6172         case "$archname" in
6173         *-multi*) echo "...and architecture name already has -multi." >&4
6174                 ;;
6175         *)      archname="$archname-multi"
6176                 echo "...setting architecture name to $archname." >&4
6177                 ;;
6178         esac
6179         ;;
6180 esac
6181 case "$use64bitint$use64bitall" in
6182 *"$define"*)
6183         case "$archname64" in
6184         '')
6185                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6186                 ;;
6187         *)
6188                 case "$use64bitint" in
6189                 "$define") echo "64 bit integers selected." >&4 ;;
6190                 esac
6191                 case "$use64bitall" in
6192                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6193                 esac
6194                 case "$archname" in
6195                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6196                         ;;
6197                 *)      archname="$archname-$archname64"
6198                         echo "...setting architecture name to $archname." >&4
6199                         ;;
6200                 esac
6201                 ;;
6202         esac
6203 esac
6204 case "$uselongdouble" in
6205 $define)
6206         echo "Long doubles selected." >&4
6207         case "$longdblsize" in
6208         $doublesize)
6209                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6210                 ;;
6211         *)
6212                 case "$archname" in
6213                 *-ld*) echo "...and architecture name already has -ld." >&4
6214                         ;;
6215                 *)      archname="$archname-ld"
6216                         echo "...setting architecture name to $archname." >&4
6217                         ;;
6218                 esac
6219                 ;;
6220         esac
6221         ;;
6222 esac
6223 case "$useperlio" in
6224 $define)
6225         echo "Perlio selected." >&4
6226         ;;
6227 *)
6228         echo "Perlio not selected, using stdio." >&4
6229         case "$archname" in
6230         *-stdio*) echo "...and architecture name already has -stdio." >&4
6231                 ;;
6232         *)      archname="$archname-stdio"
6233                 echo "...setting architecture name to $archname." >&4
6234                 ;;
6235         esac
6236         ;;
6237 esac
6238
6239 : determine root of directory hierarchy where package will be installed.
6240 case "$prefix" in
6241 '')
6242         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6243         ;;
6244 *)
6245         dflt="$prefix"
6246         ;;
6247 esac
6248 $cat <<EOM
6249
6250 By default, $package will be installed in $dflt/bin, manual pages
6251 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6252 installation directories. Typically this is something like /usr/local.
6253 If you wish to have binaries under /usr/bin but other parts of the
6254 installation under /usr/local, that's ok: you will be prompted
6255 separately for each of the installation directories, the prefix being
6256 only used to set the defaults.
6257
6258 EOM
6259 fn=d~
6260 rp='Installation prefix to use?'
6261 . ./getfile
6262 oldprefix=''
6263 case "$prefix" in
6264 '') ;;
6265 *)
6266         case "$ans" in
6267         "$prefix") ;;
6268         *) oldprefix="$prefix";;
6269         esac
6270         ;;
6271 esac
6272 prefix="$ans"
6273 prefixexp="$ansexp"
6274
6275 case "$afsroot" in
6276 '')     afsroot=/afs ;;
6277 *)      afsroot=$afsroot ;;
6278 esac
6279
6280 : is AFS running?
6281 echo " "
6282 case "$afs" in
6283 $define|true)   afs=true ;;
6284 $undef|false)   afs=false ;;
6285 *)      if test -d $afsroot; then
6286                 afs=true
6287         else
6288                 afs=false
6289         fi
6290         ;;
6291 esac
6292 if $afs; then
6293         echo "AFS may be running... I'll be extra cautious then..." >&4
6294 else
6295         echo "AFS does not seem to be running..." >&4
6296 fi
6297
6298 : determine installation prefix for where package is to be installed.
6299 if $afs; then 
6300 $cat <<EOM
6301
6302 Since you are running AFS, I need to distinguish the directory in which
6303 files will reside from the directory in which they are installed (and from
6304 which they are presumably copied to the former directory by occult means).
6305
6306 EOM
6307         case "$installprefix" in
6308         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6309         *) dflt="$installprefix";;
6310         esac
6311 else
6312 $cat <<EOM
6313
6314 In some special cases, particularly when building $package for distribution,
6315 it is convenient to distinguish between the directory in which files should 
6316 be installed from the directory ($prefix) in which they 
6317 will eventually reside.  For most users, these two directories are the same.
6318
6319 EOM
6320         case "$installprefix" in
6321         '') dflt=$prefix ;;
6322         *) dflt=$installprefix;;
6323         esac
6324 fi
6325 fn=d~
6326 rp='What installation prefix should I use for installing files?'
6327 . ./getfile
6328 installprefix="$ans"
6329 installprefixexp="$ansexp"
6330
6331 : set the prefixit variable, to compute a suitable default value
6332 prefixit='case "$3" in
6333 ""|none)
6334         case "$oldprefix" in
6335         "") eval "$1=\"\$$2\"";;
6336         *)
6337                 case "$3" in
6338                 "") eval "$1=";;
6339                 none)
6340                         eval "tp=\"\$$2\"";
6341                         case "$tp" in
6342                         ""|" ") eval "$1=\"\$$2\"";;
6343                         *) eval "$1=";;
6344                         esac;;
6345                 esac;;
6346         esac;;
6347 *)
6348         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6349         case "$tp" in
6350         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6351         /*-$oldprefix/*|\~*-$oldprefix/*)
6352                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6353         *) eval "$1=\"\$$2\"";;
6354         esac;;
6355 esac'
6356
6357 : get the patchlevel
6358 echo " "
6359 echo "Getting the current patchlevel..." >&4
6360 if $test -r $rsrc/patchlevel.h;then
6361         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6362         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6363         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6364         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6365         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6366         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6367        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6368 else
6369         revision=0
6370         patchlevel=0
6371         subversion=0
6372         api_revision=0
6373         api_version=0
6374         api_subversion=0
6375         perl_patchlevel=0
6376         $echo "(You do not have patchlevel.h.  Eek.)"
6377 fi
6378 if $test -r $rsrc/.patch ; then  
6379         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6380                 perl_patchlevel=`cat $rsrc/.patch`
6381         fi
6382 fi
6383 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6384 version_patchlevel_string="version $patchlevel subversion $subversion"
6385 case "$perl_patchlevel" in
6386 0|'') ;;
6387 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6388 esac
6389
6390 $echo "(You have $package $version_patchlevel_string.)"
6391
6392 case "$osname" in
6393 dos|vms)
6394         : XXX Should be a Configure test for double-dots in filenames.
6395         version=`echo $revision $patchlevel $subversion | \
6396                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6397         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6398                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6399         ;;
6400 *)
6401         version=`echo $revision $patchlevel $subversion | \
6402                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6403         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6404                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6405         ;;
6406 esac
6407 : Special case the 5.005_xx maintenance series, which used 5.005
6408 : without any subversion label as a subdirectory in $sitelib
6409 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6410         api_versionstring='5.005'
6411 fi
6412
6413 : determine installation style
6414 : For now, try to deduce it from prefix unless it is already set.
6415 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6416 case "$installstyle" in
6417 '')     case "$prefix" in
6418                 *perl*) dflt='lib';;
6419                 *) dflt='lib/perl5' ;;
6420         esac
6421         ;;
6422 *)      dflt="$installstyle" ;;
6423 esac
6424 : Probably not worth prompting for this since we prompt for all
6425 : the directories individually, and the prompt would be too long and
6426 : confusing anyway.
6427 installstyle=$dflt
6428
6429 : determine where private library files go
6430 : Usual default is /usr/local/lib/perl5/$version.
6431 : Also allow things like /opt/perl/lib/$version, since 
6432 : /opt/perl/lib/perl5... would be redundant.
6433 : The default "style" setting is made in installstyle.U
6434 case "$installstyle" in
6435 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6436 *)       set dflt privlib lib/$version ;;
6437 esac
6438 eval $prefixit
6439 $cat <<EOM
6440
6441 There are some auxiliary files for $package that need to be put into a
6442 private library directory that is accessible by everyone.
6443
6444 EOM
6445 fn=d~+
6446 rp='Pathname where the private library files will reside?'
6447 . ./getfile
6448 privlib="$ans"
6449 privlibexp="$ansexp"
6450 : Change installation prefix, if necessary.
6451 if $test X"$prefix" != X"$installprefix"; then
6452         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6453 else
6454         installprivlib="$privlibexp"
6455 fi
6456
6457 : set the prefixup variable, to restore leading tilda escape
6458 prefixup='case "$prefixexp" in
6459 "$prefix") ;;
6460 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6461 esac'
6462
6463 : determine where public architecture dependent libraries go
6464 set archlib archlib
6465 eval $prefixit
6466 : privlib default is /usr/local/lib/$package/$version
6467 : archlib default is /usr/local/lib/$package/$version/$archname
6468 : privlib may have an optional trailing /share.
6469 tdflt=`echo $privlib | $sed 's,/share$,,'`
6470 tdflt=$tdflt/$archname
6471 case "$archlib" in
6472 '')     dflt=$tdflt
6473         ;;
6474 *)      dflt="$archlib"
6475     ;;
6476 esac
6477 $cat <<EOM
6478
6479 $spackage contains architecture-dependent library files.  If you are
6480 sharing libraries in a heterogeneous environment, you might store
6481 these files in a separate location.  Otherwise, you can just include
6482 them with the rest of the public library files.
6483
6484 EOM
6485 fn=d+~
6486 rp='Where do you want to put the public architecture-dependent libraries?'
6487 . ./getfile
6488 archlib="$ans"
6489 archlibexp="$ansexp"
6490 if $test X"$archlib" = X"$privlib"; then
6491         d_archlib="$undef"
6492 else
6493         d_archlib="$define"
6494 fi
6495 : Change installation prefix, if necessary.
6496 if $test X"$prefix" != X"$installprefix"; then
6497         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6498 else
6499         installarchlib="$archlibexp"
6500 fi
6501
6502
6503 : Binary compatibility with 5.005 is not possible for builds
6504 : with advanced features
6505 case "$usethreads$usemultiplicity" in
6506 *define*)
6507         bincompat5005="$undef"
6508         d_bincompat5005="$undef"
6509         ;;
6510 *)      $cat <<EOM
6511
6512 This version of Perl can be compiled for binary compatibility with 5.005.
6513 If you decide to do so, you will be able to continue using most of the
6514 extensions that were compiled for Perl 5.005.
6515
6516 EOM
6517         case "$bincompat5005$d_bincompat5005" in
6518         *"$undef"*) dflt=n ;;
6519         *) dflt=y ;;
6520         esac
6521         rp='Binary compatibility with Perl 5.005?'
6522         . ./myread
6523         case "$ans" in
6524         y*) val="$define" ;;
6525         *)  val="$undef" ;;
6526         esac
6527         set d_bincompat5005
6528         eval $setvar
6529         case "$d_bincompat5005" in
6530         "$define")
6531                 bincompat5005="$define"
6532                 ;;
6533         *)      bincompat5005="$undef"
6534                 d_bincompat5005="$undef"
6535                 ;;
6536         esac
6537         ;;
6538 esac
6539
6540
6541 : see if setuid scripts can be secure
6542 $cat <<EOM
6543
6544 Some kernels have a bug that prevents setuid #! scripts from being
6545 secure.  Some sites have disabled setuid #! scripts because of this.
6546
6547 First let's decide if your kernel supports secure setuid #! scripts.
6548 (If setuid #! scripts would be secure but have been disabled anyway,
6549 don't say that they are secure if asked.)
6550
6551 EOM
6552
6553 val="$undef"
6554 if $test -d /dev/fd; then
6555         echo "#!$ls" >reflect
6556         chmod +x,u+s reflect
6557         ./reflect >flect 2>&1
6558         if $contains "/dev/fd" flect >/dev/null; then
6559                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6560                 val="$define"
6561         else
6562                 $cat <<EOM
6563 If you are not sure if they are secure, I can check but I'll need a
6564 username and password different from the one you are using right now.
6565 If you don't have such a username or don't want me to test, simply
6566 enter 'none'.
6567
6568 EOM
6569                 rp='Other username to test security of setuid scripts with?'
6570                 dflt='none'
6571                 . ./myread
6572                 case "$ans" in
6573                 n|none)
6574                         case "$d_suidsafe" in
6575                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6576                                 dflt=n;;
6577                         "$undef")
6578                                 echo "Well, the $hint value is *not* secure." >&4
6579                                 dflt=n;;
6580                         *)      echo "Well, the $hint value *is* secure." >&4
6581                                 dflt=y;;
6582                         esac
6583                         ;;
6584                 *)
6585                         $rm -f reflect flect
6586                         echo "#!$ls" >reflect
6587                         chmod +x,u+s reflect
6588                         echo >flect
6589                         chmod a+w flect
6590                         echo '"su" will (probably) prompt you for '"$ans's password."
6591                         su $ans -c './reflect >flect'
6592                         if $contains "/dev/fd" flect >/dev/null; then
6593                                 echo "Okay, it looks like setuid scripts are secure." >&4
6594                                 dflt=y
6595                         else
6596                                 echo "I don't think setuid scripts are secure." >&4
6597                                 dflt=n
6598                         fi
6599                         ;;
6600                 esac
6601                 rp='Does your kernel have *secure* setuid scripts?'
6602                 . ./myread
6603                 case "$ans" in
6604                 [yY]*)  val="$define";;
6605                 *)      val="$undef";;
6606                 esac
6607         fi
6608 else
6609         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6610         echo "(That's for file descriptors, not floppy disks.)"
6611         val="$undef"
6612 fi
6613 set d_suidsafe
6614 eval $setvar
6615
6616 $rm -f reflect flect
6617
6618 : now see if they want to do setuid emulation
6619 echo " "
6620 val="$undef"
6621 case "$d_suidsafe" in
6622 "$define")
6623         val="$undef"
6624         echo "No need to emulate SUID scripts since they are secure here." >&4
6625         ;;
6626 *)
6627         $cat <<EOM
6628 Some systems have disabled setuid scripts, especially systems where
6629 setuid scripts cannot be secure.  On systems where setuid scripts have
6630 been disabled, the setuid/setgid bits on scripts are currently
6631 useless.  It is possible for $package to detect those bits and emulate
6632 setuid/setgid in a secure fashion.  This emulation will only work if
6633 setuid scripts have been disabled in your kernel.
6634
6635 EOM
6636         case "$d_dosuid" in
6637         "$define") dflt=y ;;
6638         *) dflt=n ;;
6639         esac
6640         rp="Do you want to do setuid/setgid emulation?"
6641         . ./myread
6642         case "$ans" in
6643         [yY]*)  val="$define";;
6644         *)      val="$undef";;
6645         esac
6646         ;;
6647 esac
6648 set d_dosuid
6649 eval $setvar
6650
6651 : see if this is a malloc.h system
6652 set malloc.h i_malloc
6653 eval $inhdr
6654
6655 : see if stdlib is available
6656 set stdlib.h i_stdlib
6657 eval $inhdr
6658
6659 : determine which malloc to compile in
6660 echo " "
6661 case "$usemymalloc" in
6662 [yY]*|true|$define)     dflt='y' ;;
6663 [nN]*|false|$undef)     dflt='n' ;;
6664 *)      case "$ptrsize" in
6665         4) dflt='y' ;;
6666         *) dflt='n' ;;
6667         esac
6668         ;;
6669 esac
6670 rp="Do you wish to attempt to use the malloc that comes with $package?"
6671 . ./myread
6672 usemymalloc="$ans"
6673 case "$ans" in
6674 y*|true)
6675         usemymalloc='y'
6676         mallocsrc='malloc.c'
6677         mallocobj="malloc$_o"
6678         d_mymalloc="$define"
6679         case "$libs" in
6680         *-lmalloc*)
6681                 : Remove malloc from list of libraries to use
6682                 echo "Removing unneeded -lmalloc from library list" >&4
6683                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6684                 shift
6685                 libs="$*"
6686                 echo "libs = $libs" >&4
6687                 ;;
6688         esac
6689         ;;
6690 *)
6691         usemymalloc='n'
6692         mallocsrc=''
6693         mallocobj=''
6694         d_mymalloc="$undef"
6695         ;;
6696 esac
6697
6698 : compute the return types of malloc and free
6699 echo " "
6700 $cat >malloc.c <<END
6701 #$i_malloc I_MALLOC
6702 #$i_stdlib I_STDLIB
6703 #include <stdio.h>
6704 #include <sys/types.h>
6705 #ifdef I_MALLOC
6706 #include <malloc.h>
6707 #endif
6708 #ifdef I_STDLIB
6709 #include <stdlib.h>
6710 #endif
6711 #ifdef TRY_MALLOC
6712 void *malloc();
6713 #endif
6714 #ifdef TRY_FREE
6715 void free();
6716 #endif
6717 END
6718 case "$malloctype" in
6719 '')
6720         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6721                 malloctype='void *'
6722         else
6723                 malloctype='char *'
6724         fi
6725         ;;
6726 esac
6727 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6728
6729 case "$freetype" in
6730 '')
6731         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6732                 freetype='void'
6733         else
6734                 freetype='int'
6735         fi
6736         ;;
6737 esac
6738 echo "Your system uses $freetype free(), it would seem." >&4
6739 $rm -f malloc.[co]
6740 $cat <<EOM
6741
6742 After $package is installed, you may wish to install various
6743 add-on modules and utilities.  Typically, these add-ons will
6744 be installed under $prefix with the rest
6745 of this package.  However, you may wish to install such add-ons
6746 elsewhere under a different prefix.
6747
6748 If you do not wish to put everything under a single prefix, that's
6749 ok.  You will be prompted for the individual locations; this siteprefix
6750 is only used to suggest the defaults.
6751
6752 The default should be fine for most people.
6753
6754 EOM
6755 fn=d~+
6756 rp='Installation prefix to use for add-on modules and utilities?'
6757 : XXX Here might be another good place for an installstyle setting.
6758 case "$siteprefix" in
6759 '') dflt=$prefix ;;
6760 *)  dflt=$siteprefix ;;
6761 esac
6762 . ./getfile
6763 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6764 oldsiteprefix=''
6765 case "$siteprefix" in
6766 '') ;;
6767 *)      case "$ans" in
6768         "$prefix") ;;
6769         *) oldsiteprefix="$prefix";;
6770         esac
6771         ;;
6772 esac
6773 siteprefix="$ans"
6774 siteprefixexp="$ansexp"
6775
6776 : determine where site specific libraries go.
6777 : Usual default is /usr/local/lib/perl5/site_perl/$version
6778 : The default "style" setting is made in installstyle.U
6779 : XXX No longer works with Prefixit stuff.
6780 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6781 case "$sitelib" in
6782 '') case "$installstyle" in
6783         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6784         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6785         esac
6786         ;;
6787 *)      dflt="$sitelib"
6788         ;;
6789 esac
6790 $cat <<EOM
6791
6792 The installation process will create a directory for
6793 site-specific extensions and modules.  Most users find it convenient
6794 to place all site-specific files in this directory rather than in the
6795 main distribution directory.
6796
6797 EOM
6798 fn=d~+
6799 rp='Pathname for the site-specific library files?'
6800 . ./getfile
6801 sitelib="$ans"
6802 sitelibexp="$ansexp"
6803 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6804 : Change installation prefix, if necessary.
6805 if $test X"$prefix" != X"$installprefix"; then
6806         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6807 else
6808         installsitelib="$sitelibexp"
6809 fi
6810
6811 : determine where site specific architecture-dependent libraries go.
6812 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6813 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6814 : sitelib may have an optional trailing /share.
6815 case "$sitearch" in
6816 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6817         dflt="$dflt/$archname"
6818         ;;
6819 *)      dflt="$sitearch"
6820         ;;
6821 esac
6822 set sitearch sitearch none
6823 eval $prefixit
6824 $cat <<EOM
6825
6826 The installation process will also create a directory for
6827 architecture-dependent site-specific extensions and modules.
6828
6829 EOM
6830 fn=d~+
6831 rp='Pathname for the site-specific architecture-dependent library files?'
6832 . ./getfile
6833 sitearch="$ans"
6834 sitearchexp="$ansexp"
6835 : Change installation prefix, if necessary.
6836 if $test X"$prefix" != X"$installprefix"; then
6837         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6838 else
6839         installsitearch="$sitearchexp"
6840 fi
6841
6842 $cat <<EOM
6843
6844 The installation process will also create a directory for
6845 vendor-supplied add-ons.  Vendors who supply perl with their system
6846 may find it convenient to place all vendor-supplied files in this
6847 directory rather than in the main distribution directory.  This will
6848 ease upgrades between binary-compatible maintenance versions of perl.
6849
6850 Of course you may also use these directories in whatever way you see
6851 fit.  For example, you might use them to access modules shared over a
6852 company-wide network.
6853
6854 The default answer should be fine for most people.
6855 This causes further questions about vendor add-ons to be skipped
6856 and no vendor-specific directories will be configured for perl.
6857
6858 EOM
6859 rp='Do you want to configure vendor-specific add-on directories?'
6860 case "$usevendorprefix" in
6861 define|true|[yY]*) dflt=y ;;
6862 *)      : User may have set vendorprefix directly on Configure command line.
6863         case "$vendorprefix" in
6864         ''|' ') dflt=n ;;
6865         *)      dflt=y ;;
6866         esac
6867         ;;
6868 esac
6869 . ./myread
6870 case "$ans" in
6871 [yY]*)  fn=d~+
6872         rp='Installation prefix to use for vendor-supplied add-ons?'
6873         case "$vendorprefix" in
6874         '') dflt='' ;;
6875         *)  dflt=$vendorprefix ;;
6876         esac
6877         . ./getfile
6878         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6879         oldvendorprefix=''
6880         case "$vendorprefix" in
6881         '') ;;
6882         *)      case "$ans" in
6883                 "$prefix") ;;
6884                 *) oldvendorprefix="$prefix";;
6885                 esac
6886                 ;;
6887         esac
6888         usevendorprefix="$define"
6889         vendorprefix="$ans"
6890         vendorprefixexp="$ansexp"
6891         ;;
6892 *)      usevendorprefix="$undef"
6893         vendorprefix=''
6894         vendorprefixexp=''
6895         ;;
6896 esac
6897
6898 case "$vendorprefix" in
6899 '')     d_vendorlib="$undef"
6900         vendorlib=''
6901         vendorlibexp=''
6902         ;;
6903 *)      d_vendorlib="$define"
6904         : determine where vendor-supplied modules go.
6905         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6906         case "$vendorlib" in
6907         '')
6908                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6909                 case "$installstyle" in
6910                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6911                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6912                 esac
6913                 ;;
6914         *)      dflt="$vendorlib"
6915                 ;;
6916         esac
6917         fn=d~+
6918         rp='Pathname for the vendor-supplied library files?'
6919         . ./getfile
6920         vendorlib="$ans"
6921         vendorlibexp="$ansexp"
6922         ;;
6923 esac
6924 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6925 : Change installation prefix, if necessary.
6926 if $test X"$prefix" != X"$installprefix"; then
6927         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6928 else
6929         installvendorlib="$vendorlibexp"
6930 fi
6931
6932 case "$vendorprefix" in
6933 '')     d_vendorarch="$undef"
6934         vendorarch=''
6935         vendorarchexp=''
6936         ;;
6937 *)      d_vendorarch="$define"
6938         : determine where vendor-supplied architecture-dependent libraries go.
6939         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6940         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6941         : vendorlib may have an optional trailing /share.
6942         case "$vendorarch" in
6943         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6944                 dflt="$dflt/$archname"
6945                 ;;
6946         *)      dflt="$vendorarch" ;;
6947         esac
6948         fn=d~+
6949         rp='Pathname for vendor-supplied architecture-dependent files?'
6950         . ./getfile
6951         vendorarch="$ans"
6952         vendorarchexp="$ansexp"
6953         ;;
6954 esac
6955 : Change installation prefix, if necessary.
6956 if $test X"$prefix" != X"$installprefix"; then
6957         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6958 else
6959         installvendorarch="$vendorarchexp"
6960 fi
6961
6962 : Final catch-all directories to search
6963 $cat <<EOM
6964
6965 Lastly, you can have perl look in other directories for extensions and
6966 modules in addition to those already specified.
6967 These directories will be searched after 
6968         $sitearch 
6969         $sitelib 
6970 EOM
6971 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6972 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6973 echo ' '
6974 case "$otherlibdirs" in
6975 ''|' ') dflt='none' ;;
6976 *)      dflt="$otherlibdirs" ;;
6977 esac
6978 $cat <<EOM
6979 Enter a colon-separated set of extra paths to include in perl's @INC
6980 search path, or enter 'none' for no extra paths.
6981
6982 EOM
6983
6984 rp='Colon-separated list of additional directories for perl to search?'
6985 . ./myread
6986 case "$ans" in
6987 ' '|''|none)    otherlibdirs=' ' ;;     
6988 *)      otherlibdirs="$ans" ;;
6989 esac
6990 case "$otherlibdirs" in
6991 ' ') val=$undef ;;
6992 *)      val=$define ;;
6993 esac
6994 set d_perl_otherlibdirs
6995 eval $setvar
6996
6997 : Cruising for prototypes
6998 echo " "
6999 echo "Checking out function prototypes..." >&4
7000 $cat >prototype.c <<'EOCP'
7001 int main(int argc, char *argv[]) {
7002         exit(0);}
7003 EOCP
7004 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
7005         echo "Your C compiler appears to support function prototypes."
7006         val="$define"
7007 else
7008         echo "Your C compiler doesn't seem to understand function prototypes."
7009         val="$undef"
7010 fi
7011 set prototype
7012 eval $setvar
7013 $rm -f prototype*
7014
7015 case "$prototype" in
7016 "$define") ;;
7017 *)      ansi2knr='ansi2knr'
7018         echo " "
7019         cat <<EOM >&4
7020
7021 $me:  FATAL ERROR:
7022 This version of $package can only be compiled by a compiler that 
7023 understands function prototypes.  Unfortunately, your C compiler 
7024         $cc $ccflags
7025 doesn't seem to understand them.  Sorry about that.
7026
7027 If GNU cc is available for your system, perhaps you could try that instead.  
7028
7029 Eventually, we hope to support building Perl with pre-ANSI compilers.
7030 If you would like to help in that effort, please contact <perlbug@perl.org>.
7031
7032 Aborting Configure now.
7033 EOM
7034         exit 2
7035         ;;
7036 esac
7037
7038 : determine where public executables go
7039 echo " "
7040 set dflt bin bin
7041 eval $prefixit
7042 fn=d~
7043 rp='Pathname where the public executables will reside?'
7044 . ./getfile
7045 if $test "X$ansexp" != "X$binexp"; then
7046         installbin=''
7047 fi
7048 bin="$ans"
7049 binexp="$ansexp"
7050 : Change installation prefix, if necessary.
7051 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7052 if $test X"$prefix" != X"$installprefix"; then
7053         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7054 else
7055         installbin="$binexp"
7056 fi
7057
7058 echo " "
7059 case "$extras" in
7060 '') dflt='n';;
7061 *) dflt='y';;
7062 esac
7063 cat <<EOM
7064 Perl can be built with extra modules or bundles of modules which
7065 will be fetched from the CPAN and installed alongside Perl.
7066
7067 Notice that you will need access to the CPAN; either via the Internet,
7068 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7069 be asked later to configure the CPAN.pm module which will in turn do
7070 the installation of the rest of the extra modules or bundles.)
7071
7072 Notice also that if the modules require any external software such as
7073 libraries and headers (the libz library and the zlib.h header for the
7074 Compress::Zlib module, for example) you MUST have any such software
7075 already installed, this configuration process will NOT install such
7076 things for you.
7077
7078 If this doesn't make any sense to you, just accept the default '$dflt'.
7079 EOM
7080 rp='Install any extra modules (y or n)?'
7081 . ./myread
7082 case "$ans" in
7083 y|Y)
7084         cat <<EOM
7085
7086 Please list any extra modules or bundles to be installed from CPAN,
7087 with spaces between the names.  The names can be in any format the
7088 'install' command of CPAN.pm will understand.  (Answer 'none',
7089 without the quotes, to install no extra modules or bundles.)
7090 EOM
7091         rp='Extras?'
7092         dflt="$extras"
7093         . ./myread
7094         extras="$ans"
7095 esac
7096 case "$extras" in
7097 ''|'none')
7098         val=''
7099         $rm -f ../extras.lst
7100         ;;
7101 *)      echo "(Saving the list of extras for later...)"
7102         echo "$extras" > ../extras.lst
7103         val="'$extras'"
7104         ;;
7105 esac
7106 set extras
7107 eval $setvar
7108 echo " "
7109
7110 : Find perl5.005 or later.
7111 echo "Looking for a previously installed perl5.005 or later... "
7112 case "$perl5" in
7113 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7114                 : Check if this perl is recent and can load a simple module
7115                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7116                         perl5=$tdir/perl
7117                         break;
7118                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7119                         perl5=$tdir/perl5
7120                         break;
7121                 fi
7122         done
7123         ;;
7124 *)      perl5="$perl5"
7125         ;;
7126 esac
7127 case "$perl5" in
7128 '')     echo "None found.  That's ok.";;
7129 *)      echo "Using $perl5." ;;
7130 esac
7131
7132 : Determine list of previous versions to include in @INC
7133 $cat > getverlist <<EOPL
7134 #!$perl5 -w
7135 use File::Basename;
7136 \$api_versionstring = "$api_versionstring";
7137 \$version = "$version";
7138 \$stem = "$sitelib_stem";
7139 \$archname = "$archname";
7140 EOPL
7141         $cat >> getverlist <<'EOPL'
7142 # Can't have leading @ because metaconfig interprets it as a command!
7143 ;@inc_version_list=();
7144 # XXX Redo to do opendir/readdir? 
7145 if (-d $stem) {
7146     chdir($stem);
7147     ;@candidates = glob("5.*");
7148 }
7149 else {
7150     ;@candidates = ();
7151 }
7152
7153 # XXX ToDo:  These comparisons must be reworked when two-digit
7154 # subversions come along, so that 5.7.10 compares as greater than
7155 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7156 # widespread that we can use the built-in version vectors rather
7157 # than reinventing them here.  For 5.6.0, however, we must
7158 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7159 foreach $d (@candidates) {
7160     if ($d lt $version) {
7161         if ($d ge $api_versionstring) {
7162             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7163         }
7164         elsif ($d ge "5.005") {
7165             unshift(@inc_version_list, grep { -d } $d);
7166         }
7167     }
7168     else {
7169         # Skip newer version.  I.e. don't look in
7170         # 5.7.0 if we're installing 5.6.1.
7171     }
7172 }
7173
7174 if (@inc_version_list) {
7175     print join(' ', @inc_version_list);
7176 }
7177 else {
7178     # Blank space to preserve value for next Configure run.
7179     print " ";
7180 }
7181 EOPL
7182 chmod +x getverlist
7183 case "$inc_version_list" in
7184 '')     if test -x "$perl5$exe_ext"; then
7185                 dflt=`$perl5 getverlist`
7186         else
7187                 dflt='none'
7188         fi
7189         ;;
7190 $undef) dflt='none' ;;
7191 *)  eval dflt=\"$inc_version_list\" ;;
7192 esac
7193 case "$dflt" in
7194 ''|' ') dflt=none ;;
7195 esac
7196 case "$dflt" in
7197 5.005) case "$bincompat5005" in
7198        $define|true|[yY]*) ;;
7199        *) dflt=none ;;
7200        esac
7201        ;;
7202 esac
7203 $cat <<'EOM'
7204
7205 In order to ease the process of upgrading, this version of perl 
7206 can be configured to use modules built and installed with earlier 
7207 versions of perl that were installed under $prefix.  Specify here
7208 the list of earlier versions that this version of perl should check.
7209 If Configure detected no earlier versions of perl installed under
7210 $prefix, then the list will be empty.  Answer 'none' to tell perl
7211 to not search earlier versions.
7212
7213 The default should almost always be sensible, so if you're not sure,
7214 just accept the default.
7215 EOM
7216
7217 rp='List of earlier versions to include in @INC?'
7218 . ./myread
7219 case "$ans" in
7220 [Nn]one|''|' ') inc_version_list=' ' ;;
7221 *) inc_version_list="$ans" ;;
7222 esac
7223 case "$inc_version_list" in
7224 ''|' ') 
7225         inc_version_list_init='0';;
7226 *)      inc_version_list_init=`echo $inc_version_list |
7227                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7228         ;;
7229 esac
7230 $rm -f getverlist
7231
7232 : determine whether to install perl also as /usr/bin/perl
7233
7234 echo " "
7235 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7236         $cat <<EOM
7237 Many scripts expect perl to be installed as /usr/bin/perl.
7238 I can install the perl you are about to compile also as /usr/bin/perl
7239 (in addition to $installbin/perl).
7240 EOM
7241         case "$installusrbinperl" in
7242         "$undef"|[nN]*) dflt='n';;
7243         *)              dflt='y';;
7244         esac
7245         rp="Do you want to install perl as /usr/bin/perl?"
7246         . ./myread
7247         case "$ans" in
7248         [yY]*)  val="$define";;
7249         *)      val="$undef" ;;
7250         esac
7251 else
7252         val="$undef"
7253 fi
7254 set installusrbinperl
7255 eval $setvar
7256
7257 : see if dld is available
7258 set dld.h i_dld
7259 eval $inhdr
7260
7261 : see if dlopen exists
7262 xxx_runnm="$runnm"
7263 runnm=false
7264 set dlopen d_dlopen
7265 eval $inlibc
7266 runnm="$xxx_runnm"
7267
7268 : determine which dynamic loading, if any, to compile in
7269 echo " "
7270 dldir="ext/DynaLoader"
7271 case "$usedl" in
7272 $define|y|true)
7273         dflt='y'
7274         usedl="$define"
7275         ;;
7276 $undef|n|false)
7277         dflt='n'
7278         usedl="$undef"
7279         ;;
7280 *) 
7281         dflt='n'
7282         case "$d_dlopen" in
7283             $define) dflt='y' ;;
7284         esac
7285         case "$i_dld" in
7286             $define) dflt='y' ;;
7287         esac
7288         : Does a dl_xxx.xs file exist for this operating system
7289         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7290         ;;
7291 esac
7292 rp="Do you wish to use dynamic loading?"
7293 . ./myread
7294 usedl="$ans"
7295 case "$ans" in
7296 y*) usedl="$define"
7297         case "$dlsrc" in
7298         '')
7299                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7300                         dflt="$dldir/dl_${osname}.xs"
7301                 elif $test "$d_dlopen" = "$define" ; then
7302                         dflt="$dldir/dl_dlopen.xs"
7303                 elif $test "$i_dld" = "$define" ; then
7304                         dflt="$dldir/dl_dld.xs"
7305                 else
7306                         dflt=''
7307                 fi
7308                 ;;
7309         *)      dflt="$dldir/$dlsrc"
7310                 ;;
7311         esac
7312     echo "The following dynamic loading files are available:"
7313         : Can not go over to $dldir because getfile has path hard-coded in.
7314         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7315         rp="Source file to use for dynamic loading"
7316         fn="fne"
7317         gfpth="$src"
7318         . ./getfile
7319         usedl="$define"
7320         : emulate basename
7321         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7322
7323         $cat << EOM
7324
7325 Some systems may require passing special flags to $cc -c to
7326 compile modules that will be used to create a shared library.
7327 To use no flags, say "none".
7328
7329 EOM
7330     case "$cccdlflags" in
7331     '') case "$gccversion" in
7332                 '') case "$osname" in
7333                         hpux)   dflt='+z' ;;
7334                         next)   dflt='none' ;;
7335                         irix*)  dflt='-KPIC' ;;
7336                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7337                         sunos)  dflt='-pic' ;;
7338                         *)      dflt='none' ;;
7339                     esac
7340                         ;;
7341                 *)  case "$osname" in
7342                         darwin) dflt='none' ;;
7343                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7344                         *)      dflt='-fpic' ;;
7345                     esac ;;
7346             esac ;;
7347         ' ') dflt='none' ;;
7348     *)  dflt="$cccdlflags" ;;
7349     esac
7350     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7351     . ./myread
7352     case "$ans" in
7353     none) cccdlflags=' ' ;;
7354     *) cccdlflags="$ans" ;;
7355     esac
7356
7357     cat << EOM
7358
7359 Some systems use ld to create libraries that can be dynamically loaded,
7360 while other systems (such as those using ELF) use $cc.
7361
7362 EOM
7363         case "$ld" in
7364         '')     $cat >try.c <<'EOM'
7365 /* Test for whether ELF binaries are produced */
7366 #include <fcntl.h>
7367 #include <stdlib.h>
7368 int main() {
7369         char b[4];
7370         int i = open("a.out",O_RDONLY);
7371         if(i == -1) 
7372                 exit(1); /* fail */
7373         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7374                 exit(0); /* succeed (yes, it's ELF) */
7375         else
7376                 exit(1); /* fail */
7377 }
7378 EOM
7379                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7380                         cat <<EOM
7381 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7382 EOM
7383                         dflt="$cc"
7384                 else
7385                         echo "I'll use ld to build dynamic libraries."
7386                         dflt='ld'
7387                 fi
7388                 rm -f try.c a.out
7389                 ;;
7390         *)      dflt="$ld"
7391                 ;;
7392         esac
7393
7394     rp="What command should be used to create dynamic libraries?"
7395     . ./myread
7396         ld="$ans"
7397
7398     cat << EOM
7399
7400 Some systems may require passing special flags to $ld to create a
7401 library that can be dynamically loaded.  If your ld flags include
7402 -L/other/path options to locate libraries outside your loader's normal
7403 search path, you may need to specify those -L options here as well.  To
7404 use no flags, say "none".
7405
7406 EOM
7407     case "$lddlflags" in
7408     '') case "$osname" in
7409                         beos) dflt='-nostart' ;;
7410                         hpux) dflt='-b';
7411                               case "$gccversion" in
7412                               '') dflt="$dflt +vnocompatwarnings" ;;
7413                               esac
7414                               ;;        
7415                         linux|irix*)    dflt='-shared' ;;
7416                         next)  dflt='none' ;;
7417                         solaris) dflt='-G' ;;
7418                         sunos) dflt='-assert nodefinitions' ;;
7419                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7420                 *)     dflt='none' ;;
7421                         esac
7422                         ;;
7423     *) dflt="$lddlflags" ;;
7424     esac
7425
7426         : Try to guess additional flags to pick up local libraries.
7427         : Be careful not to append to a plain 'none'
7428         case "$dflt" in
7429         none) dflt='' ;;
7430         esac
7431         for thisflag in $ldflags; do
7432                 case "$thisflag" in
7433                 -L*|-R*|-Wl,-R*)
7434                         case " $dflt " in
7435                         *" $thisflag "*) ;;
7436                         *) dflt="$dflt $thisflag" ;;
7437                         esac
7438                         ;;
7439                 esac
7440         done
7441
7442         case "$dflt" in
7443         ''|' ') dflt='none' ;;
7444         esac
7445
7446     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7447     . ./myread
7448     case "$ans" in
7449     none) lddlflags=' ' ;;
7450     *) lddlflags="$ans" ;;
7451     esac
7452
7453         cat <<EOM
7454
7455 Some systems may require passing special flags to $cc to indicate that
7456 the resulting executable will use dynamic linking.  To use no flags,
7457 say "none".
7458
7459 EOM
7460     case "$ccdlflags" in
7461     '') case "$osname" in
7462                 hpux)   dflt='-Wl,-E' ;;
7463                 linux)  dflt='-rdynamic' ;;
7464                 next)   dflt='none' ;;
7465                 sunos)  dflt='none' ;;
7466                 *)      dflt='none' ;;
7467             esac ;;
7468     ' ')  dflt='none' ;;
7469     *)  dflt="$ccdlflags" ;;
7470     esac
7471     rp="Any special flags to pass to $cc to use dynamic linking?"
7472     . ./myread
7473     case "$ans" in
7474     none) ccdlflags=' ' ;;
7475     *) ccdlflags="$ans" ;;
7476     esac
7477     ;;
7478 *)  usedl="$undef"
7479         ld='ld'
7480     dlsrc='dl_none.xs'
7481     lddlflags=''
7482     ccdlflags=''
7483     ;;
7484 esac
7485
7486 also=''
7487 case "$usedl" in
7488 $undef)
7489         # No dynamic loading being used, so don't bother even to prompt.
7490         useshrplib='false'
7491         ;;
7492 *)      case "$useshrplib" in
7493         '')     case "$osname" in
7494                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7495                         dflt=y
7496                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7497                         ;;
7498                 next*)
7499                         case "$osvers" in
7500                         4*)     dflt=y
7501                                 also='Building a shared libperl is needed for MAB support.'
7502                                 ;;
7503                         *)      dflt=n
7504                                 ;;
7505                         esac
7506                         ;;
7507                 *)      dflt=n
7508                         ;;
7509                 esac
7510                 ;;
7511         $define|true|[Yy]*)
7512                 dflt=y
7513                 ;;
7514         *)      dflt=n
7515                 ;;
7516         esac
7517         $cat << EOM
7518
7519 The perl executable is normally obtained by linking perlmain.c with
7520 libperl${_a}, any static extensions (usually just DynaLoader), and
7521 any other libraries needed on this system (such as -lm, etc.).  Since
7522 your system supports dynamic loading, it is probably possible to build
7523 a shared libperl.$so.  If you will have more than one executable linked
7524 to libperl.$so, this will significantly reduce the size of each
7525 executable, but it may have a noticeable affect on performance.  The
7526 default is probably sensible for your system.
7527 $also
7528
7529 EOM
7530         rp="Build a shared libperl.$so (y/n)"
7531         . ./myread
7532         case "$ans" in
7533         true|$define|[Yy]*)
7534                 useshrplib='true'  ;;
7535         *)      useshrplib='false' ;;
7536         esac
7537         ;;
7538 esac
7539
7540 case "$useshrplib" in
7541 true)
7542         case "$libperl" in
7543         '')
7544                 # Figure out a good name for libperl.so.  Since it gets stored in
7545                 # a version-specific architecture-dependent library, the version
7546                 # number isn't really that important, except for making cc/ld happy.
7547                 #
7548                 # A name such as libperl.so.3.1
7549                 majmin="libperl.$so.$patchlevel.$subversion"
7550                 # A name such as libperl.so.301
7551                 majonly=`echo $patchlevel $subversion |
7552                         $awk '{printf "%d%02d", $1, $2}'`
7553                 majonly=libperl.$so.$majonly
7554                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7555                 # rely on figuring it out from the naming of libc.
7556                 case "${osname}${osvers}" in
7557                 next4*)
7558                         dflt=libperl.5.$so
7559                         # XXX How handle the --version stuff for MAB?
7560                         ;;
7561                 linux*)  # ld won't link with a bare -lperl otherwise.
7562                         dflt=libperl.$so
7563                         ;;
7564                 cygwin*) # ld links against an importlib
7565                         dflt=libperl$lib_ext
7566                         ;;
7567                 *)      # Try to guess based on whether libc has major.minor.
7568                         case "$libc" in
7569                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7570                         *libc.$so.[0-9]*) dflt=$majonly ;;
7571                         *)      dflt=libperl.$so ;;
7572                         esac
7573                         ;;
7574                 esac
7575                 ;;
7576         *)      dflt=$libperl
7577                 ;;
7578         esac
7579         cat << EOM
7580
7581 I need to select a good name for the shared libperl.  If your system uses
7582 library names with major and minor numbers, then you might want something
7583 like $majmin.  Alternatively, if your system uses a single version
7584 number for shared libraries, then you might want to use $majonly.
7585 Or, your system might be quite happy with a simple libperl.$so.
7586
7587 Since the shared libperl will get installed into a version-specific
7588 architecture-dependent directory, the version number of the shared perl
7589 library probably isn't important, so the default should be o.k.
7590
7591 EOM
7592         rp='What name do you want to give to the shared libperl?'
7593         . ./myread
7594         libperl=$ans
7595         echo "Ok, I'll use $libperl"
7596         ;;
7597 *)
7598         libperl="libperl${_a}"
7599         ;;
7600 esac
7601
7602 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7603 case "$shrpdir" in
7604 '') ;;
7605 *)      $cat >&4 <<EOM
7606 WARNING:  Use of the shrpdir variable for the installation location of
7607 the shared $libperl is not supported.  It was never documented and
7608 will not work in this version.  Let me (perlbug@perl.org)
7609 know of any problems this may cause.
7610
7611 EOM
7612         case "$shrpdir" in
7613         "$archlibexp/CORE")
7614                 $cat >&4 <<EOM
7615 But your current setting of $shrpdir is
7616 the default anyway, so it's harmless.
7617 EOM
7618                 ;;
7619         *)
7620                 $cat >&4 <<EOM
7621 Further, your current attempted setting of $shrpdir
7622 conflicts with the value of $archlibexp/CORE
7623 that installperl will use.
7624 EOM
7625                 ;;
7626         esac
7627         ;;
7628 esac
7629
7630 # How will the perl executable find the installed shared $libperl?
7631 # Add $xxx to ccdlflags.
7632 # If we can't figure out a command-line option, use $shrpenv to
7633 # set env LD_RUN_PATH.  The main perl makefile uses this.
7634 shrpdir=$archlibexp/CORE
7635 xxx=''
7636 tmp_shrpenv=''
7637 if "$useshrplib"; then
7638     case "$osname" in 
7639         aix)
7640                 # We'll set it in Makefile.SH...
7641                 ;;
7642         solaris)
7643                 xxx="-R $shrpdir"
7644                 ;;
7645         freebsd|netbsd)
7646                 xxx="-Wl,-R$shrpdir"
7647                 ;;
7648         bsdos|linux|irix*|dec_osf)
7649                 xxx="-Wl,-rpath,$shrpdir"
7650                 ;;
7651         next)
7652                 # next doesn't like the default...
7653                 ;;
7654         beos)
7655                 # beos doesn't like the default, either.
7656                 ;;
7657         hpux*)
7658                 # hpux doesn't like the default, either.
7659                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7660                 ;;
7661         *)
7662                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7663                 ;;
7664         esac
7665         case "$xxx" in
7666         '') ;;
7667         *)      
7668                 # Only add $xxx if it isn't already in ccdlflags.
7669                 case " $ccdlflags " in
7670                 *" $xxx "*)     ;;
7671                 *)      ccdlflags="$ccdlflags $xxx"
7672                         cat <<EOM >&4
7673
7674 Adding $xxx to the flags
7675 passed to $ld so that the perl executable will find the 
7676 installed shared $libperl.
7677
7678 EOM
7679                         ;;
7680                 esac
7681                 ;;
7682         esac
7683 fi
7684 # Fix ccdlflags in AIX for building external extensions.
7685 # (For building Perl itself bare -bE:perl.exp is needed,
7686 #  Makefile.SH takes care of this.)
7687 case "$osname" in
7688 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7689 esac
7690 # Respect a hint or command-line value.
7691 case "$shrpenv" in
7692 '') shrpenv="$tmp_shrpenv" ;;
7693 esac
7694 case "$ldlibpthname" in
7695 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7696 none)   ldlibpthname='' ;;
7697 esac
7698
7699 : determine where manual pages are on this system
7700 echo " "
7701 case "$sysman" in
7702 '') 
7703         syspath='/usr/share/man/man1 /usr/man/man1'
7704         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7705         syspath="$syspath /usr/man/u_man/man1"
7706         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7707         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7708         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7709         sysman=`./loc . /usr/man/man1 $syspath`
7710         ;;
7711 esac
7712 if $test -d "$sysman"; then
7713         echo "System manual is in $sysman." >&4
7714 else
7715         echo "Could not find manual pages in source form." >&4
7716 fi
7717
7718 : determine where manual pages go
7719 set man1dir man1dir none
7720 eval $prefixit
7721 $cat <<EOM
7722
7723 $spackage has manual pages available in source form.
7724 EOM
7725 case "$nroff" in
7726 nroff)
7727         echo "However, you don't have nroff, so they're probably useless to you."
7728         case "$man1dir" in
7729         '') man1dir="none";;
7730         esac;;
7731 esac
7732 echo "If you don't want the manual sources installed, answer 'none'."
7733 case "$man1dir" in
7734 ' ') dflt=none
7735         ;;
7736 '')
7737         lookpath="$prefixexp/share/man/man1"
7738         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7739         lookpath="$lookpath $prefixexp/man/p_man/man1"
7740         lookpath="$lookpath $prefixexp/man/u_man/man1"
7741         lookpath="$lookpath $prefixexp/man/man.1"
7742         case "$sysman" in
7743         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7744         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7745         esac
7746         set dflt
7747         eval $prefixup
7748         ;;
7749 *)  dflt="$man1dir"
7750         ;;
7751 esac
7752 echo " "
7753 fn=dn+~
7754 rp="Where do the main $spackage manual pages (source) go?"
7755 . ./getfile
7756 if $test "X$man1direxp" != "X$ansexp"; then
7757         installman1dir=''
7758 fi
7759 man1dir="$ans"
7760 man1direxp="$ansexp"
7761 case "$man1dir" in
7762 '')     man1dir=' '
7763         installman1dir='';;
7764 esac
7765
7766 : Change installation prefix, if necessary.
7767 if $test X"$prefix" != X"$installprefix"; then
7768         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7769 else
7770         installman1dir="$man1direxp"
7771 fi
7772
7773 : What suffix to use on installed man pages
7774
7775 case "$man1dir" in
7776 ' ')
7777         man1ext='0'
7778         ;;
7779 *)
7780         rp="What suffix should be used for the main $spackage man pages?"
7781         case "$man1ext" in
7782         '')     case "$man1dir" in
7783                 *1)  dflt=1 ;;
7784                 *1p) dflt=1p ;;
7785                 *1pm) dflt=1pm ;;
7786                 *l) dflt=l;;
7787                 *n) dflt=n;;
7788                 *o) dflt=o;;
7789                 *p) dflt=p;;
7790                 *C) dflt=C;;
7791                 *L) dflt=L;;
7792                 *L1) dflt=L1;;
7793                 *) dflt=1;;
7794                 esac
7795                 ;;
7796         *)      dflt="$man1ext";;
7797         esac
7798         . ./myread
7799         man1ext="$ans"
7800         ;;
7801 esac
7802
7803 : see if we can have long filenames
7804 echo " "
7805 first=123456789abcdef
7806 $rm -f $first
7807 if (echo hi >$first) 2>/dev/null; then
7808         if $test -f 123456789abcde; then
7809                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7810                 val="$undef"
7811         else
7812                 echo 'You can have filenames longer than 14 characters.'>&4
7813                 val="$define"
7814         fi
7815 else
7816         $cat <<'EOM'
7817 You can't have filenames longer than 14 chars.
7818 You can't even think about them!
7819 EOM
7820         val="$undef"
7821 fi 
7822 set d_flexfnam
7823 eval $setvar
7824 $rm -rf 123456789abcde*
7825
7826 : determine where library module manual pages go
7827 set man3dir man3dir none
7828 eval $prefixit
7829 $cat <<EOM
7830
7831 $spackage has manual pages for many of the library modules.
7832 EOM
7833
7834 case "$nroff" in
7835 nroff)
7836         $cat <<'EOM'
7837 However, you don't have nroff, so they're probably useless to you.
7838 EOM
7839         case "$man3dir" in
7840         '') man3dir="none";;
7841         esac;;
7842 esac
7843
7844 case "$d_flexfnam" in
7845 undef)
7846         $cat <<'EOM'
7847 However, your system can't handle the long file names like File::Basename.3. 
7848 EOM
7849         case "$man3dir" in
7850         '') man3dir="none";;
7851         esac;;
7852 esac
7853
7854 echo "If you don't want the manual sources installed, answer 'none'."
7855 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7856 case "$man3dir" in
7857 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7858         if $test -d "$privlib/man/man3"; then
7859                 cat <<EOM >&4
7860
7861 WARNING:  Previous versions of perl installed man3 pages into
7862 $privlib/man/man3.  This version will suggest a 
7863 new default of $dflt.  
7864 EOM
7865                 tdflt=$dflt
7866                 dflt='n'
7867                 rp='Do you wish to preserve the old behavior?(y/n)'
7868                 . ./myread
7869                 case "$ans" in
7870                 y*) dflt="$privlib/man/man3" ;;
7871                 *)  dflt=$tdflt ;;
7872                 esac
7873     fi
7874         ;;
7875 *)      dflt="$man3dir" ;;
7876 esac
7877 case "$dflt" in
7878 ' ') dflt=none ;;
7879 esac
7880 echo " "
7881 fn=dn+~
7882 rp="Where do the $package library man pages (source) go?"
7883 . ./getfile
7884 man3dir="$ans"
7885 man3direxp="$ansexp"
7886 case "$man3dir" in
7887 '')     man3dir=' '
7888         installman3dir='';;
7889 esac
7890
7891 : Change installation prefix, if necessary.
7892 if $test X"$prefix" != X"$installprefix"; then
7893         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7894 else
7895         installman3dir="$man3direxp"
7896 fi
7897
7898 : What suffix to use on installed man pages
7899 case "$man3dir" in
7900 ' ')
7901         man3ext='0'
7902         ;;
7903 *)
7904         rp="What suffix should be used for the $package library man pages?"
7905         case "$man3ext" in
7906         '')     case "$man3dir" in
7907                 *3)  dflt=3 ;;
7908                 *3p) dflt=3p ;;
7909                 *3pm) dflt=3pm ;;
7910                 *l) dflt=l;;
7911                 *n) dflt=n;;
7912                 *o) dflt=o;;
7913                 *p) dflt=p;;
7914                 *C) dflt=C;;
7915                 *L) dflt=L;;
7916                 *L3) dflt=L3;;
7917                 *) dflt=3;;
7918                 esac
7919                 ;;
7920         *)      dflt="$man3ext";;
7921         esac
7922         . ./myread
7923         man3ext="$ans"
7924         ;;
7925 esac
7926
7927 : see if we have to deal with yellow pages, now NIS.
7928 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7929         if $test -f /usr/etc/nibindd; then
7930                 echo " "
7931                 echo "I'm fairly confident you're on a NeXT."
7932                 echo " "
7933                 rp='Do you get the hosts file via NetInfo?'
7934                 dflt=y
7935                 case "$hostcat" in
7936                 nidump*) ;;
7937                 '') ;;
7938                 *) dflt=n;;
7939                 esac
7940                 . ./myread
7941                 case "$ans" in
7942                 y*) hostcat='nidump hosts .';;
7943                 *)      case "$hostcat" in
7944                         nidump*) hostcat='';;
7945                         esac
7946                         ;;
7947                 esac
7948         fi
7949         case "$hostcat" in
7950         nidump*) ;;
7951         *)
7952                 case "$hostcat" in
7953                 *ypcat*) dflt=y;;
7954                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7955                                 dflt=y
7956                         else
7957                                 dflt=n
7958                         fi;;
7959                 *) dflt=n;;
7960                 esac
7961                 echo " "
7962                 rp='Are you getting the hosts file via yellow pages?'
7963                 . ./myread
7964                 case "$ans" in
7965                 y*) hostcat='ypcat hosts';;
7966                 *) hostcat='cat /etc/hosts';;
7967                 esac
7968                 ;;
7969         esac
7970 fi
7971 case "$hostcat" in
7972 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7973 esac
7974 case "$groupcat" in
7975 '') test -f /etc/group && groupcat='cat /etc/group';;
7976 esac
7977 case "$passcat" in
7978 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7979 esac
7980
7981 : now get the host name
7982 echo " "
7983 echo "Figuring out host name..." >&4
7984 case "$myhostname" in
7985 '') cont=true
7986         echo 'Maybe "hostname" will work...'
7987         if tans=`sh -c hostname 2>&1` ; then
7988                 myhostname=$tans
7989                 phostname=hostname
7990                 cont=''
7991         fi
7992         ;;
7993 *) cont='';;
7994 esac
7995 if $test "$cont"; then
7996         if ./xenix; then
7997                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7998                 if tans=`cat /etc/systemid 2>&1` ; then
7999                         myhostname=$tans
8000                         phostname='cat /etc/systemid'
8001                         echo "Whadyaknow.  Xenix always was a bit strange..."
8002                         cont=''
8003                 fi
8004         elif $test -r /etc/systemid; then
8005                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8006         fi
8007 fi
8008 if $test "$cont"; then
8009         echo 'No, maybe "uuname -l" will work...'
8010         if tans=`sh -c 'uuname -l' 2>&1` ; then
8011                 myhostname=$tans
8012                 phostname='uuname -l'
8013         else
8014                 echo 'Strange.  Maybe "uname -n" will work...'
8015                 if tans=`sh -c 'uname -n' 2>&1` ; then
8016                         myhostname=$tans
8017                         phostname='uname -n'
8018                 else
8019                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8020                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8021                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8022                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8023                         else
8024                                 case "$myhostname" in
8025                                 '') echo "Does this machine have an identity crisis or something?"
8026                                         phostname='';;
8027                                 *)
8028                                         echo "Well, you said $myhostname before..."
8029                                         phostname='echo $myhostname';;
8030                                 esac
8031                         fi
8032                 fi
8033         fi
8034 fi
8035 case "$myhostname" in
8036 '') myhostname=noname ;;
8037 esac
8038 : you do not want to know about this
8039 set $myhostname
8040 myhostname=$1
8041
8042 : verify guess
8043 if $test "$myhostname" ; then
8044         dflt=y
8045         rp='Your host name appears to be "'$myhostname'".'" Right?"
8046         . ./myread
8047         case "$ans" in
8048         y*) ;;
8049         *) myhostname='';;
8050         esac
8051 fi
8052
8053 : bad guess or no guess
8054 while $test "X$myhostname" = X ; do
8055         dflt=''
8056         rp="Please type the (one word) name of your host:"
8057         . ./myread
8058         myhostname="$ans"
8059 done
8060
8061 : translate upper to lower if necessary
8062 case "$myhostname" in
8063 *[A-Z]*)
8064         echo "(Normalizing case in your host name)"
8065         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8066         ;;
8067 esac
8068
8069 case "$myhostname" in
8070 *.*)
8071         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8072         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8073         echo "(Trimming domain name from host name--host name is now $myhostname)"
8074         ;;
8075 *) case "$mydomain" in
8076         '')
8077                 {
8078                         test "X$hostcat" = "Xypcat hosts" &&
8079                         ypmatch "$myhostname" hosts 2>/dev/null |\
8080                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8081                         $test -s hosts
8082                 } || {
8083                         test "X$hostcat" != "X" &&
8084                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8085                                         /[       ]$myhostname[  . ]/p" > hosts
8086                 }
8087                 tmp_re="[       . ]"
8088                 if $test -f hosts; then
8089                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8090                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8091                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8092                                 hosts | $sort | $uniq | \
8093                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8094                         case `$echo X$dflt` in
8095                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8096                                 dflt=.
8097                                 ;;
8098                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8099                                 ;;
8100                         esac
8101                 else
8102                         echo "(I cannot locate a hosts database anywhere)"
8103                         dflt=.
8104                 fi
8105                 case "$dflt" in
8106                 .)
8107                         tans=`./loc resolv.conf X /etc /usr/etc`
8108                         if $test -f "$tans"; then
8109                                 echo "(Attempting domain name extraction from $tans)"
8110                                 dflt=.`$sed -n -e 's/   / /g' \
8111                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8112                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8113                                 case "$dflt" in
8114                                 .) dflt=.`$sed -n -e 's/        / /g' \
8115                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8116                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8117                                         ;;
8118                                 esac
8119                         fi
8120                         ;;
8121                 esac
8122                 case "$dflt" in
8123                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8124                         dflt=.`sh -c domainname 2>/dev/null`
8125                         case "$dflt" in
8126                         '') dflt='.';;
8127                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8128                         esac
8129                         ;;
8130                 esac
8131                 case "$dflt$osname" in
8132                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8133                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8134                         ;;
8135                 esac
8136                 case "$dflt" in
8137                 .) echo "(Lost all hope -- silly guess then)"
8138                         dflt='.nonet'
8139                         ;;
8140                 esac
8141                 $rm -f hosts
8142                 ;;
8143         *) dflt="$mydomain";;
8144         esac;;
8145 esac
8146 echo " "
8147 rp="What is your domain name?"
8148 . ./myread
8149 tans="$ans"
8150 case "$ans" in
8151 '') ;;
8152 .*) ;;
8153 *) tans=".$tans";;
8154 esac
8155 mydomain="$tans"
8156
8157 : translate upper to lower if necessary
8158 case "$mydomain" in
8159 *[A-Z]*)
8160         echo "(Normalizing case in your domain name)"
8161         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8162         ;;
8163 esac
8164
8165 : a little sanity check here
8166 case "$phostname" in
8167 '') ;;
8168 *)
8169         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8170         $myhostname$mydomain|$myhostname) ;;
8171         *)
8172                 case "$phostname" in
8173                 sed*)
8174                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8175                         ;;
8176                 *)
8177                         echo "(That doesn't agree with your $phostname command, by the way.)"
8178                         ;;
8179                 esac
8180         ;;
8181         esac
8182         ;;
8183 esac
8184
8185 $cat <<EOM
8186
8187 I need to get your e-mail address in Internet format if possible, i.e.
8188 something like user@host.domain. Please answer accurately since I have
8189 no easy means to double check it. The default value provided below
8190 is most probably close to reality but may not be valid from outside
8191 your organization...
8192
8193 EOM
8194 cont=x
8195 while test "$cont"; do
8196         case "$cf_email" in
8197         '') dflt="$cf_by@$myhostname$mydomain";;
8198         *) dflt="$cf_email";;
8199         esac
8200         rp='What is your e-mail address?'
8201         . ./myread
8202         cf_email="$ans"
8203         case "$cf_email" in
8204         *@*.*) cont='' ;;
8205         *)
8206                 rp='Address does not look like an Internet one.  Use it anyway?'
8207                 case "$fastread" in
8208                 yes) dflt=y ;;
8209                 *) dflt=n ;;
8210                 esac
8211                 . ./myread
8212                 case "$ans" in
8213                 y*) cont='' ;;
8214                 *) echo " " ;;
8215                 esac
8216                 ;;
8217         esac
8218 done
8219
8220 $cat <<EOM
8221
8222 If you or somebody else will be maintaining perl at your site, please
8223 fill in the correct e-mail address here so that they may be contacted
8224 if necessary. Currently, the "perlbug" program included with perl
8225 will send mail to this address in addition to perlbug@perl.org. You may
8226 enter "none" for no administrator.
8227
8228 EOM
8229 case "$perladmin" in
8230 '') dflt="$cf_email";;
8231 *) dflt="$perladmin";;
8232 esac
8233 rp='Perl administrator e-mail address'
8234 . ./myread
8235 perladmin="$ans"
8236
8237 : determine whether to only install version-specific parts.
8238 echo " "
8239 $cat <<EOM
8240 Do you want to install only the version-specific parts of the perl
8241 distribution?  Usually you do *not* want to do this.
8242 EOM
8243 case "$versiononly" in
8244 "$define"|[Yy]*|true) dflt='y' ;;
8245 *) dflt='n';
8246 esac
8247 rp="Do you want to install only the version-specific parts of perl?"
8248 . ./myread
8249 case "$ans" in
8250 [yY]*)  val="$define";;
8251 *)      val="$undef" ;;
8252 esac
8253 set versiononly
8254 eval $setvar
8255
8256 : figure out how to guarantee perl startup
8257 case "$startperl" in
8258 '')
8259         case "$sharpbang" in
8260         *!)
8261                 $cat <<EOH
8262
8263 I can use the #! construct to start perl on your system. This will
8264 make startup of perl scripts faster, but may cause problems if you
8265 want to share those scripts and perl is not in a standard place
8266 ($binexp/perl) on all your platforms. The alternative is to force
8267 a shell by starting the script with a single ':' character.
8268
8269 EOH
8270                 case "$versiononly" in
8271                 "$define")      dflt="$binexp/perl$version";;  
8272                 *)              dflt="$binexp/perl";;
8273                 esac
8274                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8275                 . ./myread
8276                 case "$ans" in
8277                 none)   startperl=": # use perl";;
8278                 *)      startperl="#!$ans"
8279                         if $test 30 -lt `echo "$ans" | wc -c`; then
8280                                 $cat >&4 <<EOM
8281
8282 WARNING:  Some systems limit the #! command to 32 characters.
8283 If you experience difficulty running Perl scripts with #!, try
8284 installing Perl in a directory with a shorter pathname.
8285
8286 EOM
8287                         fi ;;
8288                 esac
8289                 ;;
8290         *) startperl=": # use perl"
8291                 ;;
8292         esac
8293         ;;
8294 esac
8295 echo "I'll use $startperl to start perl scripts."
8296
8297 : figure best path for perl in scripts
8298 case "$perlpath" in
8299 '')
8300         case "$versiononly" in
8301         "$define")      perlpath="$binexp/perl$version";;
8302         *)              perlpath="$binexp/perl";;
8303         esac
8304         case "$startperl" in
8305         *!*) ;;
8306         *)
8307                 $cat <<EOH
8308
8309 I will use the "eval 'exec'" idiom to start Perl on your system.
8310 I can use the full path of your Perl binary for this purpose, but
8311 doing so may cause problems if you want to share those scripts and
8312 Perl is not always in a standard place ($binexp/perl).
8313
8314 EOH
8315                 dflt="$binexp/perl"
8316                 rp="What path shall I use in \"eval 'exec'\"?"
8317                 . ./myread
8318                 perlpath="$ans"
8319                 ;;
8320         esac
8321         ;;
8322 esac
8323 case "$startperl" in
8324 *!*)    ;;
8325 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8326 esac
8327
8328 : determine where public executable scripts go
8329 set scriptdir scriptdir
8330 eval $prefixit
8331 case "$scriptdir" in
8332 '')
8333         dflt="$bin"
8334         : guess some guesses
8335         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8336         $test -d /usr/share/bin     && dflt=/usr/share/bin
8337         $test -d /usr/local/script  && dflt=/usr/local/script
8338         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8339         $test -d $prefixexp/script  && dflt=$prefixexp/script
8340         set dflt
8341         eval $prefixup
8342         ;;
8343 *)  dflt="$scriptdir"
8344         ;;
8345 esac
8346 $cat <<EOM
8347  
8348 Some installations have a separate directory just for executable scripts so
8349 that they can mount it across multiple architectures but keep the scripts in
8350 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8351 Or you might just lump your scripts in with all your other executables.
8352  
8353 EOM
8354 fn=d~
8355 rp='Where do you keep publicly executable scripts?'
8356 . ./getfile
8357 if $test "X$ansexp" != "X$scriptdirexp"; then
8358         installscript=''
8359 fi
8360 scriptdir="$ans"
8361 scriptdirexp="$ansexp"
8362 : Change installation prefix, if necessary.
8363 if $test X"$prefix" != X"$installprefix"; then
8364         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8365 else
8366         installscript="$scriptdirexp"
8367 fi
8368
8369 : determine where add-on public executables go
8370 case "$sitebin" in
8371 '')     dflt=$siteprefix/bin ;;
8372 *)      dflt=$sitebin ;;
8373 esac
8374 fn=d~
8375 rp='Pathname where the add-on public executables should be installed?'
8376 . ./getfile
8377 sitebin="$ans"
8378 sitebinexp="$ansexp"
8379 : Change installation prefix, if necessary.
8380 if $test X"$prefix" != X"$installprefix"; then
8381         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8382 else
8383         installsitebin="$sitebinexp"
8384 fi
8385
8386 : define an is-a-typedef? function
8387 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8388 case "$inclist" in
8389 "") inclist="sys/types.h";;
8390 esac;
8391 eval "varval=\$$var";
8392 case "$varval" in
8393 "")
8394         $rm -f temp.c;
8395         for inc in $inclist; do
8396                 echo "#include <$inc>" >>temp.c;
8397         done;
8398         echo "#ifdef $type" >> temp.c;
8399         echo "printf(\"We have $type\");" >> temp.c;
8400         echo "#endif" >> temp.c;
8401         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8402         if $contains $type temp.E >/dev/null 2>&1; then
8403                 eval "$var=\$type";
8404         else
8405                 eval "$var=\$def";
8406         fi;
8407         $rm -f temp.?;;
8408 *) eval "$var=\$varval";;
8409 esac'
8410
8411 : define an is-a-typedef? function that prompts if the type is not available.
8412 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8413 case "$inclist" in
8414 "") inclist="sys/types.h";;
8415 esac;
8416 eval "varval=\$$var";
8417 case "$varval" in
8418 "")
8419         $rm -f temp.c;
8420         for inc in $inclist; do
8421                 echo "#include <$inc>" >>temp.c;
8422         done;
8423         echo "#ifdef $type" >> temp.c;
8424         echo "printf(\"We have $type\");" >> temp.c;
8425         echo "#endif" >> temp.c;
8426         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8427         echo " " ;
8428         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8429         if $contains $type temp.E >/dev/null 2>&1; then
8430                 echo "$type found." >&4;
8431                 eval "$var=\$type";
8432         else
8433                 echo "$type NOT found." >&4;
8434                 dflt="$def";
8435                 . ./myread ;
8436                 eval "$var=\$ans";
8437         fi;
8438         $rm -f temp.?;;
8439 *) eval "$var=\$varval";;
8440 esac'
8441
8442 : see what type lseek is declared as in the kernel
8443 rp="What is the type used for lseek's offset on this system?"
8444 set off_t lseektype long stdio.h sys/types.h
8445 eval $typedef_ask
8446
8447 echo " "
8448 echo "Checking to see how big your file offsets are..." >&4
8449 $cat >try.c <<EOCP
8450 #include <sys/types.h>
8451 #include <stdio.h>
8452 int main()
8453 {
8454     printf("%d\n", (int)sizeof($lseektype));
8455     return(0); 
8456 }
8457 EOCP
8458 set try
8459 if eval $compile_ok; then
8460         lseeksize=`$run ./try`
8461         echo "Your file offsets are $lseeksize bytes long."
8462 else
8463         dflt=$longsize
8464         echo " "
8465         echo "(I can't seem to compile the test program.  Guessing...)"
8466         rp="What is the size of your file offsets (in bytes)?"
8467         . ./myread
8468         lseeksize="$ans"
8469 fi
8470 $rm -f try.c try
8471
8472 : see what type file positions are declared as in the library
8473 rp="What is the type for file position used by fsetpos()?"
8474 set fpos_t fpostype long stdio.h sys/types.h
8475 eval $typedef_ask
8476
8477 echo " "
8478 case "$fpostype" in
8479 *_t) zzz="$fpostype"    ;;
8480 *)   zzz="fpos_t"       ;;
8481 esac
8482 echo "Checking the size of $zzz..." >&4 
8483 cat > try.c <<EOCP
8484 #include <sys/types.h>
8485 #include <stdio.h>
8486 int main() {
8487     printf("%d\n", (int)sizeof($fpostype));
8488     exit(0);
8489 }
8490 EOCP
8491 set try
8492 if eval $compile_ok; then
8493         yyy=`$run ./try`
8494         case "$yyy" in
8495         '')     fpossize=4
8496                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8497                 ;;
8498         *)      fpossize=$yyy
8499                 echo "Your $zzz is $fpossize bytes long."
8500                 ;;
8501         esac
8502 else
8503         dflt="$longsize"
8504         echo " " >&4
8505         echo "(I can't compile the test program.  Guessing...)" >&4
8506         rp="What is the size of your file positions (in bytes)?"
8507         . ./myread
8508         fpossize="$ans"
8509 fi
8510
8511
8512
8513 # Backward compatibility (uselfs is deprecated).
8514 case "$uselfs" in
8515 "$define"|true|[yY]*)
8516         cat <<EOM >&4
8517
8518 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8519 EOM
8520         uselargefiles="$define"
8521         ;;
8522 esac                          
8523
8524 case "$lseeksize:$fpossize" in
8525 8:8) cat <<EOM
8526
8527 You can have files larger than 2 gigabytes.
8528 EOM
8529    val="$define" ;;
8530 *)    case "$uselargefiles" in
8531    "$undef"|false|[nN]*) dflt='n' ;;
8532    *)   dflt='y' ;;
8533    esac
8534    cat <<EOM
8535
8536 Perl can be built to understand large files (files larger than 2 gigabytes)
8537 on some systems.  To do so, Configure can be run with -Duselargefiles.
8538
8539 If this doesn't make any sense to you, just accept the default '$dflt'.
8540 EOM
8541    rp='Try to understand large files, if available?'
8542    . ./myread
8543    case "$ans" in
8544    y|Y)         val="$define" ;;
8545    *)           val="$undef"  ;;
8546    esac
8547    ;;
8548 esac
8549 set uselargefiles
8550 eval $setvar
8551 case "$uselargefiles" in
8552 "$define")
8553 : Look for a hint-file generated 'call-back-unit'.  If the
8554 : user has specified that a large files perl is to be built,
8555 : we may need to set or change some other defaults.
8556         if $test -f uselargefiles.cbu; then
8557                 echo "Your platform has some specific hints for large file builds, using them..."
8558                 . ./uselargefiles.cbu
8559                 echo " "
8560                 echo "Rechecking to see how big your file offsets are..." >&4
8561                 $cat >try.c <<EOCP
8562 #include <sys/types.h>
8563 #include <stdio.h>
8564 int main()
8565 {
8566     printf("%d\n", (int)sizeof($lseektype));
8567     return(0); 
8568 }
8569 EOCP
8570                 set try
8571                 if eval $compile_ok; then
8572                         lseeksize=`$run ./try`
8573                         $echo "Your file offsets are now $lseeksize bytes long."
8574                 else
8575                         dflt="$lseeksize"
8576                         echo " "
8577                         echo "(I can't seem to compile the test program.  Guessing...)"
8578                         rp="What is the size of your file offsets (in bytes)?"
8579                         . ./myread
8580                         lseeksize="$ans"
8581                 fi
8582                 case "$fpostype" in
8583                 *_t) zzz="$fpostype"    ;;
8584                 *)   zzz="fpos_t"       ;;
8585                 esac
8586                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8587                 $cat > try.c <<EOCP
8588 #include <sys/types.h>
8589 #include <stdio.h>
8590 int main() {
8591     printf("%d\n", (int)sizeof($fpostype));
8592     exit(0);
8593 }
8594 EOCP
8595                 set try
8596                 if eval $compile_ok; then
8597                         yyy=`$run ./try`
8598                         dflt="$lseeksize"
8599                         case "$yyy" in
8600                         '')     echo " "
8601                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8602                                 ;;
8603                         *)      fpossize=$yyy
8604                                 echo " $fpossize bytes." >&4
8605                                 ;;
8606                         esac
8607                 else
8608                         dflt="$fpossize"
8609                         echo " "
8610                         echo "(I can't compile the test program.  Guessing...)" >&4
8611                         rp="What is the size of your file positions (in bytes)?"
8612                         . ./myread
8613                         fpossize="$ans"
8614                 fi
8615                 $rm -f try.c try
8616         fi
8617         ;;
8618 esac
8619
8620 case "$vendorprefix" in
8621 '')     d_vendorbin="$undef"
8622         vendorbin=''
8623         vendorbinexp=''
8624         ;;
8625 *)      d_vendorbin="$define"
8626         : determine where vendor-supplied executables go.
8627         case "$vendorbin" in
8628         '') dflt=$vendorprefix/bin ;;
8629         *)      dflt="$vendorbin" ;;
8630         esac
8631         fn=d~+
8632         rp='Pathname for the vendor-supplied executables directory?'
8633         . ./getfile
8634         vendorbin="$ans"
8635         vendorbinexp="$ansexp"
8636         ;;
8637 esac
8638 : Change installation prefix, if necessary.
8639 if $test X"$prefix" != X"$installprefix"; then
8640         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8641 else
8642         installvendorbin="$vendorbinexp"
8643 fi
8644
8645 : see if qgcvt exists
8646 set qgcvt d_qgcvt
8647 eval $inlibc
8648
8649 : Check how to convert floats to strings.
8650 echo " "
8651 echo "Checking for an efficient way to convert floats to strings."
8652 echo " " > try.c
8653 case "$uselongdouble" in
8654 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8655 esac
8656 case "$d_longdbl" in
8657 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8658 esac
8659 case "$d_PRIgldbl" in
8660 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8661 esac
8662 $cat >>try.c <<EOP
8663 #ifdef TRY_gconvert
8664 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8665 char *myname = "gconvert";
8666 #endif
8667 #ifdef TRY_gcvt
8668 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8669 char *myname = "gcvt";
8670 #endif
8671 #ifdef TRY_qgcvt
8672 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8673 char *myname = "qgcvt";
8674 #define DOUBLETYPE long double
8675 #endif
8676 #ifdef TRY_sprintf
8677 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8678 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8679 #else
8680 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8681 #endif
8682 char *myname = "sprintf";
8683 #endif
8684
8685 #ifndef DOUBLETYPE
8686 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8687 #define DOUBLETYPE long double
8688 #else
8689 #define DOUBLETYPE double
8690 #endif
8691 #endif
8692
8693 #include <stdio.h>
8694
8695 #define I_STDLIB $i_stdlib
8696 #ifdef I_STDLIB
8697 #include <stdlib.h>
8698 #endif
8699
8700 int
8701 checkit(expect, got)
8702 char *expect;
8703 char *got;
8704 {
8705     if (strcmp(expect, got)) {
8706                 printf("%s oddity:  Expected %s, got %s\n",
8707                         myname, expect, got);
8708                 exit(1);
8709         }
8710 }
8711
8712 int main()
8713
8714         char buf[64]; 
8715         buf[63] = '\0';
8716
8717         /* This must be 1st test on (which?) platform */
8718         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8719         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8720         checkit("0.1", buf);
8721
8722         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8723         checkit("1", buf);
8724
8725         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8726         checkit("1.1", buf);
8727
8728         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8729         checkit("1.01", buf);
8730
8731         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8732         checkit("1.001", buf);
8733
8734         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8735         checkit("1.0001", buf);
8736
8737         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8738         checkit("1.00001", buf);
8739
8740         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8741         checkit("1.000001", buf);
8742
8743         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8744         checkit("0", buf);
8745
8746         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8747         checkit("-1", buf);
8748
8749         /* Some Linux gcvt's give 1.e+5 here. */
8750         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8751         checkit("100000", buf);
8752         
8753         /* Some Linux gcvt's give -1.e+5 here. */
8754         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8755         checkit("-100000", buf);
8756
8757         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8758         checkit("123.456", buf);
8759
8760         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8761         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8762         if (strlen(buf) > 5)
8763             checkit("1e+030", buf); /* for Microsoft */
8764         else
8765             checkit("1e+30", buf);
8766
8767         exit(0);
8768 }
8769 EOP
8770 case "$d_Gconvert" in
8771 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8772 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8773 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8774 *) xxx_list='gconvert gcvt sprintf' ;;
8775 esac
8776
8777 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8778 "$define$define$define")
8779     # for long doubles prefer first qgcvt, then sprintf
8780     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8781     xxx_list="sprintf $xxx_list"
8782     case "$d_qgcvt" in
8783     "$define") xxx_list="qgcvt $xxx_list" ;;
8784     esac
8785     ;;
8786 esac
8787
8788 for xxx_convert in $xxx_list; do
8789         echo "Trying $xxx_convert..."
8790         $rm -f try try$_o
8791         set try -DTRY_$xxx_convert
8792         if eval $compile; then
8793                 echo "$xxx_convert() found." >&4
8794                 if $run ./try; then
8795                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8796                         break;
8797                 else
8798                         echo "...But $xxx_convert didn't work as I expected."
8799                 fi
8800         else
8801                 echo "$xxx_convert NOT found." >&4
8802         fi
8803 done
8804         
8805 case "$xxx_convert" in
8806 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8807 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8808 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8809 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8810    "$define$define$define")
8811       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8812    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8813    esac
8814    ;;  
8815 esac
8816
8817 : see if _fwalk exists
8818 set fwalk d__fwalk
8819 eval $inlibc
8820
8821 : Initialize h_fcntl
8822 h_fcntl=false
8823
8824 : Initialize h_sysfile
8825 h_sysfile=false
8826
8827 : access call always available on UNIX
8828 set access d_access
8829 eval $inlibc
8830
8831 : locate the flags for 'access()'
8832 case "$d_access" in
8833 "$define")
8834         echo " "
8835         $cat >access.c <<'EOCP'
8836 #include <sys/types.h>
8837 #ifdef I_FCNTL
8838 #include <fcntl.h>
8839 #endif
8840 #ifdef I_SYS_FILE
8841 #include <sys/file.h>
8842 #endif
8843 #ifdef I_UNISTD
8844 #include <unistd.h>
8845 #endif
8846 int main() {
8847         exit(R_OK);
8848 }
8849 EOCP
8850         : check sys/file.h first, no particular reason here
8851         if $test `./findhdr sys/file.h` && \
8852                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8853                 h_sysfile=true;
8854                 echo "<sys/file.h> defines the *_OK access constants." >&4
8855         elif $test `./findhdr fcntl.h` && \
8856                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8857                 h_fcntl=true;
8858                 echo "<fcntl.h> defines the *_OK access constants." >&4
8859         elif $test `./findhdr unistd.h` && \
8860                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8861                 echo "<unistd.h> defines the *_OK access constants." >&4
8862         else
8863                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8864         fi
8865         ;;
8866 esac
8867 $rm -f access*
8868
8869 : see if accessx exists
8870 set accessx d_accessx
8871 eval $inlibc
8872
8873 : see if alarm exists
8874 set alarm d_alarm
8875 eval $inlibc
8876
8877 : see if atolf exists
8878 set atolf d_atolf
8879 eval $inlibc
8880
8881 : see if atoll exists
8882 set atoll d_atoll
8883 eval $inlibc
8884
8885 : Look for GNU-cc style attribute checking
8886 echo " "
8887 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8888 $cat >attrib.c <<'EOCP'
8889 #include <stdio.h>
8890 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8891 EOCP
8892 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8893         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8894                 echo "Your C compiler doesn't fully support __attribute__."
8895                 val="$undef"
8896         else
8897                 echo "Your C compiler supports __attribute__."
8898                 val="$define"
8899         fi
8900 else
8901         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8902         val="$undef"
8903 fi
8904 set d_attribut
8905 eval $setvar
8906 $rm -f attrib*
8907
8908 : see if bcmp exists
8909 set bcmp d_bcmp
8910 eval $inlibc
8911
8912 : see if bcopy exists
8913 set bcopy d_bcopy
8914 eval $inlibc
8915
8916 : see if this is a unistd.h system
8917 set unistd.h i_unistd
8918 eval $inhdr
8919
8920 : see if getpgrp exists
8921 set getpgrp d_getpgrp
8922 eval $inlibc
8923
8924 case "$d_getpgrp" in
8925 "$define")
8926         echo " "
8927         echo "Checking to see which flavor of getpgrp is in use..."
8928         $cat >try.c <<EOP
8929 #$i_unistd I_UNISTD
8930 #include <sys/types.h>
8931 #ifdef I_UNISTD
8932 #  include <unistd.h>
8933 #endif
8934 int main()
8935 {
8936         if (getuid() == 0) {
8937                 printf("(I see you are running Configure as super-user...)\n");
8938                 setuid(1);
8939         }
8940 #ifdef TRY_BSD_PGRP
8941         if (getpgrp(1) == 0)
8942                 exit(0);
8943 #else
8944         if (getpgrp() > 0)
8945                 exit(0);
8946 #endif
8947         exit(1);
8948 }
8949 EOP
8950         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8951                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8952                 val="$define"
8953         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8954                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8955                 val="$undef"
8956         else
8957                 echo "I can't seem to compile and run the test program."
8958                 if ./usg; then
8959                         xxx="a USG one, i.e. you use getpgrp()."
8960                 else
8961                         # SVR4 systems can appear rather BSD-ish.
8962                         case "$i_unistd" in
8963                         $undef)
8964                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8965                                 val="$define"
8966                                 ;;
8967                         $define)
8968                                 xxx="probably a USG one, i.e. you use getpgrp()."
8969                                 val="$undef"
8970                                 ;;
8971                         esac
8972                 fi
8973                 echo "Assuming your getpgrp is $xxx" >&4
8974         fi
8975         ;;
8976 *) val="$undef";;
8977 esac
8978 set d_bsdgetpgrp
8979 eval $setvar
8980 $rm -f try try.*
8981
8982 : see if setpgrp exists
8983 set setpgrp d_setpgrp
8984 eval $inlibc
8985
8986 case "$d_setpgrp" in
8987 "$define")
8988         echo " "
8989         echo "Checking to see which flavor of setpgrp is in use..."
8990         $cat >try.c <<EOP
8991 #$i_unistd I_UNISTD
8992 #include <sys/types.h>
8993 #ifdef I_UNISTD
8994 #  include <unistd.h>
8995 #endif
8996 int main()
8997 {
8998         if (getuid() == 0) {
8999                 printf("(I see you are running Configure as super-user...)\n");
9000                 setuid(1);
9001         }
9002 #ifdef TRY_BSD_PGRP
9003         if (-1 == setpgrp(1, 1))
9004                 exit(0);
9005 #else
9006         if (setpgrp() != -1)
9007                 exit(0);
9008 #endif
9009         exit(1);
9010 }
9011 EOP
9012         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9013                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9014                 val="$define"
9015         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9016                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9017                 val="$undef"
9018         else
9019                 echo "(I can't seem to compile and run the test program.)"
9020                 if ./usg; then
9021                         xxx="a USG one, i.e. you use setpgrp()."
9022                 else
9023                         # SVR4 systems can appear rather BSD-ish.
9024                         case "$i_unistd" in
9025                         $undef)
9026                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9027                                 val="$define"
9028                                 ;;
9029                         $define)
9030                                 xxx="probably a USG one, i.e. you use setpgrp()."
9031                                 val="$undef"
9032                                 ;;
9033                         esac
9034                 fi
9035                 echo "Assuming your setpgrp is $xxx" >&4
9036         fi
9037         ;;
9038 *) val="$undef";;
9039 esac
9040 set d_bsdsetpgrp
9041 eval $setvar
9042 $rm -f try try.*
9043 : see if bzero exists
9044 set bzero d_bzero
9045 eval $inlibc
9046
9047 : see if signal is declared as pointer to function returning int or void
9048 echo " "
9049 xxx=`./findhdr signal.h`
9050 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9051 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9052         echo "You have int (*signal())() instead of void." >&4
9053         val="$undef"
9054 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9055         echo "You have void (*signal())()." >&4
9056         val="$define"
9057 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9058         echo "You have int (*signal())() instead of void." >&4
9059         val="$undef"
9060 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9061         echo "You have void (*signal())()." >&4
9062         val="$define"
9063 else
9064         case "$d_voidsig" in
9065         '')
9066         echo "I can't determine whether signal handler returns void or int..." >&4
9067                 dflt=void
9068                 rp="What type does your signal handler return?"
9069                 . ./myread
9070                 case "$ans" in
9071                 v*) val="$define";;
9072                 *) val="$undef";;
9073                 esac;;
9074         "$define")
9075                 echo "As you already told me, signal handler returns void." >&4
9076                 val="$define"
9077                 ;;
9078         *)      echo "As you already told me, signal handler returns int." >&4
9079                 val="$undef"
9080                 ;;
9081         esac
9082 fi
9083 set d_voidsig
9084 eval $setvar
9085 case "$d_voidsig" in
9086 "$define") signal_t="void";;
9087 *) signal_t="int";;
9088 esac
9089 $rm -f $$.tmp
9090
9091 : check for ability to cast large floats to 32-bit ints.
9092 echo " "
9093 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9094 if $test "$intsize" -ge 4; then
9095         xxx=int
9096 else
9097         xxx=long
9098 fi
9099 $cat >try.c <<EOCP
9100 #include <stdio.h>
9101 #include <sys/types.h>
9102 #include <signal.h>
9103 $signal_t blech(s) int s; { exit(3); }
9104 int main()
9105 {
9106         $xxx i32;
9107         double f, g;
9108         int result = 0;
9109         char str[16];
9110         signal(SIGFPE, blech);
9111
9112         /* Don't let compiler optimize the test away.  Store the number 
9113            in a writable string for gcc to pass to sscanf under HP/UX.
9114         */
9115         sprintf(str, "2147483647");
9116         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9117         g = 10 * f;
9118         i32  = ($xxx) g;
9119
9120         /* x86 processors will probably give 0x8000 0000, which is a
9121        sign change.  We don't want that.  We want to mimic SPARC
9122            behavior here, which is to preserve the sign and give
9123            back 0x7fff ffff.
9124         */
9125         if (i32 != ($xxx) f)
9126                 result |= 1;
9127         exit(result);
9128 }
9129 EOCP
9130 set try
9131 if eval $compile_ok; then
9132         $run ./try
9133         yyy=$?
9134 else
9135         echo "(I can't seem to compile the test program--assuming it can't)"
9136         yyy=1
9137 fi
9138 case "$yyy" in
9139 0)      val="$define"
9140         echo "Yup, it can."
9141         ;;
9142 *)      val="$undef"
9143         echo "Nope, it can't."
9144         ;;
9145 esac
9146 set d_casti32
9147 eval $setvar
9148 $rm -f try try.*
9149
9150 : check for ability to cast negative floats to unsigned
9151 echo " "
9152 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9153 $cat >try.c <<EOCP
9154 #include <stdio.h>
9155 #include <sys/types.h>
9156 #include <signal.h>
9157 $signal_t blech(s) int s; { exit(7); }
9158 $signal_t blech_in_list(s) int s; { exit(4); }
9159 unsigned long dummy_long(p) unsigned long p; { return p; }
9160 unsigned int dummy_int(p) unsigned int p; { return p; }
9161 unsigned short dummy_short(p) unsigned short p; { return p; }
9162 int main()
9163 {
9164         double f;
9165         unsigned long along;
9166         unsigned int aint;
9167         unsigned short ashort;
9168         int result = 0;
9169         char str[16];
9170         
9171         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9172            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9173            optimized the whole file away
9174         */
9175         /* Store the number in a writable string for gcc to pass to 
9176            sscanf under HP/UX.
9177         */
9178         sprintf(str, "-123");
9179         sscanf(str, "%lf", &f);  /* f = -123.; */
9180
9181         signal(SIGFPE, blech);
9182         along = (unsigned long)f;
9183         aint = (unsigned int)f;
9184         ashort = (unsigned short)f;
9185         if (along != (unsigned long)-123)
9186                 result |= 1;
9187         if (aint != (unsigned int)-123)
9188                 result |= 1;
9189         if (ashort != (unsigned short)-123)
9190                 result |= 1;
9191         sprintf(str, "1073741824.");
9192         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9193         f = f + f;
9194         along = 0;
9195         along = (unsigned long)f;
9196         if (along != 0x80000000)
9197                 result |= 2;
9198         f -= 1.;
9199         along = 0;
9200         along = (unsigned long)f;
9201         if (along != 0x7fffffff)
9202                 result |= 1;
9203         f += 2.;
9204         along = 0;
9205         along = (unsigned long)f;
9206         if (along != 0x80000001)
9207                 result |= 2;
9208         if (result)
9209                 exit(result);
9210         signal(SIGFPE, blech_in_list);
9211         sprintf(str, "123.");
9212         sscanf(str, "%lf", &f);  /* f = 123.; */
9213         along = dummy_long((unsigned long)f);
9214         aint = dummy_int((unsigned int)f);
9215         ashort = dummy_short((unsigned short)f);
9216         if (along != (unsigned long)123)
9217                 result |= 4;
9218         if (aint != (unsigned int)123)
9219                 result |= 4;
9220         if (ashort != (unsigned short)123)
9221                 result |= 4;
9222         exit(result);
9223
9224 }
9225 EOCP
9226 set try
9227 if eval $compile_ok; then
9228         $run ./try
9229         castflags=$?
9230 else
9231         echo "(I can't seem to compile the test program--assuming it can't)"
9232         castflags=7
9233 fi
9234 case "$castflags" in
9235 0)      val="$define"
9236         echo "Yup, it can."
9237         ;;
9238 *)      val="$undef"
9239         echo "Nope, it can't."
9240         ;;
9241 esac
9242 set d_castneg
9243 eval $setvar
9244 $rm -f try.*
9245
9246 : see if vprintf exists
9247 echo " "
9248 if set vprintf val -f d_vprintf; eval $csym; $val; then
9249         echo 'vprintf() found.' >&4
9250         val="$define"
9251         $cat >try.c <<'EOF'
9252 #include <varargs.h>
9253
9254 int main() { xxx("foo"); }
9255
9256 xxx(va_alist)
9257 va_dcl
9258 {
9259         va_list args;
9260         char buf[10];
9261
9262         va_start(args);
9263         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9264 }
9265 EOF
9266         set try
9267         if eval $compile && $run ./try; then
9268                 echo "Your vsprintf() returns (int)." >&4
9269                 val2="$undef"
9270         else
9271                 echo "Your vsprintf() returns (char*)." >&4
9272                 val2="$define"
9273         fi
9274 else
9275         echo 'vprintf() NOT found.' >&4
9276                 val="$undef"
9277                 val2="$undef"
9278 fi
9279 $rm -f try try.*
9280 set d_vprintf
9281 eval $setvar
9282 val=$val2
9283 set d_charvspr
9284 eval $setvar
9285
9286 : see if chown exists
9287 set chown d_chown
9288 eval $inlibc
9289
9290 : see if chroot exists
9291 set chroot d_chroot
9292 eval $inlibc
9293
9294 : see if chsize exists
9295 set chsize d_chsize
9296 eval $inlibc
9297
9298 : see if class exists
9299 set class d_class
9300 eval $inlibc
9301
9302 hasstruct='varname=$1; struct=$2; shift; shift;
9303 while $test $# -ge 2; do
9304         case "$1" in
9305         $define) echo "#include <$2>";;
9306         esac ;
9307     shift 2;
9308 done > try.c;
9309 echo "int main () { struct $struct foo; }" >> try.c;
9310 set try;
9311 if eval $compile; then
9312         val="$define";
9313 else
9314         val="$undef";
9315 fi;
9316 set $varname;
9317 eval $setvar;
9318 $rm -f try.c try.o'
9319
9320 : see if sys/types.h has to be included
9321 set sys/types.h i_systypes
9322 eval $inhdr
9323
9324 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9325 while $test $# -ge 2; do
9326         case "$1" in
9327         $define) echo "#include <$2>";;
9328         esac ;
9329     shift 2;
9330 done > try.c;
9331 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9332 set try;
9333 if eval $compile; then
9334         val="$define";
9335 else
9336         val="$undef";
9337 fi;
9338 set $varname;
9339 eval $setvar;
9340 $rm -f try.c try.o'
9341
9342 socketlib=''
9343 sockethdr=''
9344 : see whether socket exists
9345 echo " "
9346 $echo $n "Hmm... $c" >&4
9347 if set socket val -f d_socket; eval $csym; $val; then
9348         echo "Looks like you have Berkeley networking support." >&4
9349         d_socket="$define"
9350         if set setsockopt val -f; eval $csym; $val; then
9351                 d_oldsock="$undef"
9352         else
9353                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9354                 d_oldsock="$define"
9355         fi
9356 else
9357         if $contains socklib libc.list >/dev/null 2>&1; then
9358                 echo "Looks like you have Berkeley networking support." >&4
9359                 d_socket="$define"
9360                 : we will have to assume that it supports the 4.2 BSD interface
9361                 d_oldsock="$undef"
9362         else
9363                 echo "You don't have Berkeley networking in libc$_a..." >&4
9364                 if test "X$d_socket" = "X$define"; then
9365                    echo "...but you seem to believe that you have sockets." >&4
9366                 else
9367                         for net in net socket
9368                         do
9369                                 if test -f /usr/lib/lib$net$_a; then
9370                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9371                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9372                                         if $contains socket libc.list >/dev/null 2>&1; then
9373                                                 d_socket="$define"
9374                                                 socketlib="-l$net"
9375                                                 case "$net" in
9376                                                 net)
9377                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9378                                                         sockethdr="-I/usr/netinclude"
9379                                                         ;;
9380                                                 esac
9381                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9382                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9383                                                         d_oldsock="$undef"
9384                                                 else
9385                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9386                                                         d_oldsock="$define"
9387                                                 fi
9388                                                 break
9389                                         fi
9390                                 fi
9391                         done
9392                         if test "X$d_socket" != "X$define"; then
9393                            echo "or anywhere else I see." >&4
9394                            d_socket="$undef"
9395                            d_oldsock="$undef"
9396                         fi
9397                 fi
9398         fi
9399 fi
9400
9401 : see if socketpair exists
9402 set socketpair d_sockpair
9403 eval $inlibc
9404
9405
9406 echo " "
9407 echo "Checking the availability of certain socket constants..." >&4
9408 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9409         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9410         $cat >try.c <<EOF
9411 #include <sys/types.h>
9412 #include <sys/socket.h>
9413 int main() {
9414     int i = $ENUM;
9415 }
9416 EOF
9417         val="$undef"
9418         set try; if eval $compile; then
9419                 val="$define"
9420         fi
9421         set d_${enum}; eval $setvar
9422         $rm -f try.c try
9423 done
9424
9425 : see if this is a sys/uio.h system
9426 set sys/uio.h i_sysuio
9427 eval $inhdr
9428
9429
9430 echo " "
9431 echo "Checking to see if your system supports struct cmsghdr..." >&4
9432 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9433 eval $hasstruct
9434 case "$d_cmsghdr_s" in
9435 "$define")      echo "Yes, it does."   ;;
9436 *)              echo "No, it doesn't." ;;
9437 esac
9438
9439
9440 : check for const keyword
9441 echo " "
9442 echo 'Checking to see if your C compiler knows about "const"...' >&4
9443 $cat >const.c <<'EOCP'
9444 typedef struct spug { int drokk; } spug;
9445 int main()
9446 {
9447         const char *foo;
9448         const spug y;
9449 }
9450 EOCP
9451 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9452         val="$define"
9453         echo "Yup, it does."
9454 else
9455         val="$undef"
9456         echo "Nope, it doesn't."
9457 fi
9458 set d_const
9459 eval $setvar
9460
9461 : see if crypt exists
9462 echo " "
9463 set crypt d_crypt
9464 eval $inlibc
9465 case "$d_crypt" in
9466 $define) cryptlib='' ;;
9467 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9468                 echo 'crypt() found.' >&4
9469                 val="$define"
9470                 cryptlib=''
9471         else
9472                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9473                 if $test -z "$cryptlib"; then
9474                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9475                 else
9476                         cryptlib=-lcrypt
9477                 fi
9478                 if $test -z "$cryptlib"; then
9479                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9480                 else
9481                         cryptlib=-lcrypt
9482                 fi
9483                 if $test -z "$cryptlib"; then
9484                         cryptlib=`./loc libcrypt$_a "" $libpth`
9485                 else
9486                         cryptlib=-lcrypt
9487                 fi
9488                 if $test -z "$cryptlib"; then
9489                         echo 'crypt() NOT found.' >&4
9490                         val="$undef"
9491                 else
9492                         val="$define"
9493                 fi
9494         fi
9495         set d_crypt
9496         eval $setvar
9497         ;;
9498 esac
9499
9500 : get csh whereabouts
9501 case "$csh" in
9502 'csh') val="$undef" ;;
9503 *) val="$define" ;;
9504 esac
9505 set d_csh
9506 eval $setvar
9507 : Respect a hint or command line value for full_csh.
9508 case "$full_csh" in
9509 '') full_csh=$csh ;;
9510 esac
9511
9512 : see if cuserid exists
9513 set cuserid d_cuserid
9514 eval $inlibc
9515
9516 : see if this is a limits.h system
9517 set limits.h i_limits
9518 eval $inhdr
9519
9520 : see if this is a float.h system
9521 set float.h i_float
9522 eval $inhdr
9523
9524 : See if number of significant digits in a double precision number is known
9525 echo " "
9526 $cat >dbl_dig.c <<EOM
9527 #$i_limits I_LIMITS
9528 #$i_float I_FLOAT
9529 #ifdef I_LIMITS
9530 #include <limits.h>
9531 #endif
9532 #ifdef I_FLOAT
9533 #include <float.h>
9534 #endif
9535 #ifdef DBL_DIG
9536 printf("Contains DBL_DIG");
9537 #endif
9538 EOM
9539 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9540 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9541         echo "DBL_DIG found." >&4
9542         val="$define"
9543 else
9544         echo "DBL_DIG NOT found." >&4
9545         val="$undef"
9546 fi
9547 $rm -f dbl_dig.?
9548 set d_dbl_dig
9549 eval $setvar
9550
9551 hasproto='varname=$1; func=$2; shift; shift;
9552 while $test $# -ge 2; do
9553         case "$1" in
9554         $define) echo "#include <$2>";;
9555         esac ;
9556     shift 2;
9557 done > try.c;
9558 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9559 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9560         echo "$func() prototype found.";
9561         val="$define";
9562 else
9563         echo "$func() prototype NOT found.";
9564         val="$undef";
9565 fi;
9566 set $varname;
9567 eval $setvar;
9568 $rm -f try.c tryout.c'
9569
9570 : see if dbm.h is available
9571 : see if dbmclose exists
9572 set dbmclose d_dbmclose
9573 eval $inlibc
9574
9575 case "$d_dbmclose" in
9576 $define)
9577         set dbm.h i_dbm
9578         eval $inhdr
9579         case "$i_dbm" in
9580         $define)
9581                 val="$undef"
9582                 set i_rpcsvcdbm
9583                 eval $setvar
9584                 ;;
9585         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9586                 eval $inhdr
9587                 ;;
9588         esac
9589         ;;
9590 *)      echo "We won't be including <dbm.h>"
9591         val="$undef"
9592         set i_dbm
9593         eval $setvar
9594         val="$undef"
9595         set i_rpcsvcdbm
9596         eval $setvar
9597         ;;
9598 esac
9599
9600 : see if prototype for dbminit is available
9601 echo " "
9602 set d_dbminitproto dbminit $i_dbm dbm.h
9603 eval $hasproto
9604
9605 : see if difftime exists
9606 set difftime d_difftime
9607 eval $inlibc
9608
9609 : see if this is a dirent system
9610 echo " "
9611 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9612         val="$define"
9613         echo "<dirent.h> found." >&4
9614 else
9615         val="$undef"
9616         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9617                 echo "<sys/dir.h> found." >&4
9618                 echo " "
9619         else
9620                 xinc=`./findhdr sys/ndir.h`
9621         fi
9622         echo "<dirent.h> NOT found." >&4
9623 fi
9624 set i_dirent
9625 eval $setvar
9626
9627 : Look for type of directory structure.
9628 echo " "
9629 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9630
9631 case "$direntrytype" in
9632 ''|' ')
9633         case "$i_dirent" in
9634         $define) guess1='struct dirent' ;;
9635         *) guess1='struct direct'  ;;
9636         esac
9637         ;;
9638 *)      guess1="$direntrytype"
9639         ;;
9640 esac
9641
9642 case "$guess1" in
9643 'struct dirent') guess2='struct direct' ;;
9644 *) guess2='struct dirent' ;;
9645 esac
9646                 
9647 if $contains "$guess1" try.c >/dev/null 2>&1; then
9648         direntrytype="$guess1"
9649         echo "Your directory entries are $direntrytype." >&4
9650 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9651         direntrytype="$guess2"
9652         echo "Your directory entries seem to be $direntrytype." >&4
9653 else
9654         echo "I don't recognize your system's directory entries." >&4
9655         rp="What type is used for directory entries on this system?"
9656         dflt="$guess1"
9657         . ./myread
9658         direntrytype="$ans"
9659 fi
9660 $rm -f try.c
9661
9662
9663 : see if the directory entry stores field length
9664 echo " "
9665 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9666 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9667         echo "Good, your directory entry keeps length information in d_namlen." >&4
9668         val="$define"
9669 else
9670         echo "Your directory entry does not know about the d_namlen field." >&4
9671         val="$undef"
9672 fi
9673 set d_dirnamlen
9674 eval $setvar
9675 $rm -f try.c
9676
9677 : see if this is an sysdir system
9678 set sys/dir.h i_sysdir
9679 eval $inhdr
9680
9681 : see if this is an sysndir system
9682 set sys/ndir.h i_sysndir
9683 eval $inhdr
9684
9685 : Look for dirfd
9686 echo " "
9687 $cat >dirfd.c <<EOM
9688 #include <stdio.h>
9689 #$i_dirent I_DIRENT             /**/
9690 #$i_sysdir I_SYS_DIR            /**/
9691 #$i_sysndir I_SYS_NDIR          /**/
9692 #$i_systypes I_SYS_TYPES        /**/
9693 #if defined(I_SYS_TYPES)
9694 #include <sys/types.h>
9695 #endif
9696 #if defined(I_DIRENT)
9697 #include <dirent.h>
9698 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9699 #include <sys/dir.h>
9700 #endif
9701 #else
9702 #ifdef I_SYS_NDIR
9703 #include <sys/ndir.h>
9704 #else
9705 #ifdef I_SYS_DIR
9706 #ifdef hp9000s500
9707 #include <ndir.h>       /* may be wrong in the future */
9708 #else
9709 #include <sys/dir.h>
9710 #endif
9711 #endif
9712 #endif
9713 #endif 
9714 int main() {
9715         DIR *dirp = opendir(".");
9716         if (dirfd(dirp) >= 0)
9717                 exit(0);
9718         else
9719                 exit(1);
9720 }
9721 EOM
9722 set dirfd
9723 if eval $compile; then
9724         val="$define"
9725 fi
9726 case "$val" in
9727 $define)        echo "dirfd() found." >&4       ;;
9728 *)              echo "dirfd() NOT found." >&4   ;;
9729 esac
9730 set d_dirfd
9731 eval $setvar
9732 $rm -f dirfd*
9733
9734 : see if dlerror exists
9735 xxx_runnm="$runnm"
9736 runnm=false
9737 set dlerror d_dlerror
9738 eval $inlibc
9739 runnm="$xxx_runnm"
9740
9741 : see if dlfcn is available
9742 set dlfcn.h i_dlfcn
9743 eval $inhdr
9744
9745 case "$usedl" in
9746 $define|y|true)
9747         $cat << EOM
9748
9749 On a few systems, the dynamically loaded modules that perl generates and uses
9750 will need a different extension than shared libs. The default will probably
9751 be appropriate.
9752
9753 EOM
9754         case "$dlext" in
9755         '')     dflt="$so" ;;
9756         *)      dflt="$dlext" ;;
9757         esac
9758         rp='What is the extension of dynamically loaded modules'
9759         . ./myread
9760         dlext="$ans"
9761         ;;
9762 *)
9763         dlext="none"
9764         ;;
9765 esac
9766
9767 : Check if dlsym need a leading underscore
9768 echo " "
9769 val="$undef"
9770
9771 case "$dlsrc" in
9772 dl_dlopen.xs)
9773         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9774         $cat >dyna.c <<'EOM'
9775 fred () { }
9776 EOM
9777
9778 $cat >fred.c<<EOM
9779
9780 #include <stdio.h>
9781 #$i_dlfcn I_DLFCN
9782 #ifdef I_DLFCN
9783 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9784 #else
9785 #include <sys/types.h>
9786 #include <nlist.h>
9787 #include <link.h>
9788 #endif
9789
9790 extern int fred() ;
9791
9792 int main()
9793 {
9794     void * handle ;
9795     void * symbol ;
9796 #ifndef RTLD_LAZY
9797     int mode = 1 ;
9798 #else
9799     int mode = RTLD_LAZY ;
9800 #endif
9801     handle = dlopen("./dyna.$dlext", mode) ;
9802     if (handle == NULL) {
9803         printf ("1\n") ;
9804         fflush (stdout) ;
9805         exit(0);
9806     }
9807     symbol = dlsym(handle, "fred") ;
9808     if (symbol == NULL) {
9809         /* try putting a leading underscore */
9810         symbol = dlsym(handle, "_fred") ;
9811         if (symbol == NULL) {
9812             printf ("2\n") ;
9813             fflush (stdout) ;
9814             exit(0);
9815         }
9816         printf ("3\n") ;
9817     }
9818     else
9819         printf ("4\n") ;
9820     fflush (stdout) ;
9821     exit(0);
9822 }
9823 EOM
9824         : Call the object file tmp-dyna.o in case dlext=o.
9825         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9826                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9827                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9828                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9829                 xxx=`$run ./fred`
9830                 case $xxx in
9831                 1)      echo "Test program failed using dlopen." >&4
9832                         echo "Perhaps you should not use dynamic loading." >&4;;
9833                 2)      echo "Test program failed using dlsym." >&4
9834                         echo "Perhaps you should not use dynamic loading." >&4;;
9835                 3)      echo "dlsym needs a leading underscore" >&4
9836                         val="$define" ;;
9837                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9838                 esac
9839         else
9840                 echo "I can't compile and run the test program." >&4
9841                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9842         fi
9843         ;;
9844 esac
9845                 
9846 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9847
9848 set d_dlsymun
9849 eval $setvar
9850
9851 : see if prototype for drand48 is available
9852 echo " "
9853 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9854 eval $hasproto
9855
9856 : see if dup2 exists
9857 set dup2 d_dup2
9858 eval $inlibc
9859
9860 : see if eaccess exists
9861 set eaccess d_eaccess
9862 eval $inlibc
9863
9864 : see if endgrent exists
9865 set endgrent d_endgrent
9866 eval $inlibc
9867
9868 : see if endhostent exists
9869 set endhostent d_endhent
9870 eval $inlibc
9871
9872 : see if endnetent exists
9873 set endnetent d_endnent
9874 eval $inlibc
9875
9876 : see if endprotoent exists
9877 set endprotoent d_endpent
9878 eval $inlibc
9879
9880 : see if endpwent exists
9881 set endpwent d_endpwent
9882 eval $inlibc
9883
9884 : see if endservent exists
9885 set endservent d_endsent
9886 eval $inlibc
9887
9888 : Locate the flags for 'open()'
9889 echo " "
9890 $cat >try.c <<'EOCP'
9891 #include <sys/types.h>
9892 #ifdef I_FCNTL
9893 #include <fcntl.h>
9894 #endif
9895 #ifdef I_SYS_FILE
9896 #include <sys/file.h>
9897 #endif
9898 int main() {
9899         if(O_RDONLY);
9900 #ifdef O_TRUNC
9901         exit(0);
9902 #else
9903         exit(1);
9904 #endif
9905 }
9906 EOCP
9907 : check sys/file.h first to get FREAD on Sun
9908 if $test `./findhdr sys/file.h` && \
9909                 set try -DI_SYS_FILE && eval $compile; then
9910         h_sysfile=true;
9911         echo "<sys/file.h> defines the O_* constants..." >&4
9912         if $run ./try; then
9913                 echo "and you have the 3 argument form of open()." >&4
9914                 val="$define"
9915         else
9916                 echo "but not the 3 argument form of open().  Oh, well." >&4
9917                 val="$undef"
9918         fi
9919 elif $test `./findhdr fcntl.h` && \
9920                 set try -DI_FCNTL && eval $compile; then
9921         h_fcntl=true;
9922         echo "<fcntl.h> defines the O_* constants..." >&4
9923         if $run ./try; then
9924                 echo "and you have the 3 argument form of open()." >&4
9925                 val="$define"
9926         else
9927                 echo "but not the 3 argument form of open().  Oh, well." >&4
9928                 val="$undef"
9929         fi
9930 else
9931         val="$undef"
9932         echo "I can't find the O_* constant definitions!  You got problems." >&4
9933 fi
9934 set d_open3
9935 eval $setvar
9936 $rm -f try try.*
9937
9938 : see which of string.h or strings.h is needed
9939 echo " "
9940 strings=`./findhdr string.h`
9941 if $test "$strings" && $test -r "$strings"; then
9942         echo "Using <string.h> instead of <strings.h>." >&4
9943         val="$define"
9944 else
9945         val="$undef"
9946         strings=`./findhdr strings.h`
9947         if $test "$strings" && $test -r "$strings"; then
9948                 echo "Using <strings.h> instead of <string.h>." >&4
9949         else
9950                 echo "No string header found -- You'll surely have problems." >&4
9951         fi
9952 fi
9953 set i_string
9954 eval $setvar
9955 case "$i_string" in
9956 "$undef") strings=`./findhdr strings.h`;;
9957 *)        strings=`./findhdr string.h`;;
9958 esac
9959
9960 : see if this is a sys/file.h system
9961 val=''
9962 set sys/file.h val
9963 eval $inhdr
9964
9965 : do we need to include sys/file.h ?
9966 case "$val" in
9967 "$define")
9968         echo " "
9969         if $h_sysfile; then
9970                 val="$define"
9971                 echo "We'll be including <sys/file.h>." >&4
9972         else
9973                 val="$undef"
9974                 echo "We won't be including <sys/file.h>." >&4
9975         fi
9976         ;;
9977 *)
9978         h_sysfile=false
9979         ;;
9980 esac
9981 set i_sysfile
9982 eval $setvar
9983
9984 : see if fcntl.h is there
9985 val=''
9986 set fcntl.h val
9987 eval $inhdr
9988
9989 : see if we can include fcntl.h
9990 case "$val" in
9991 "$define")
9992         echo " "
9993         if $h_fcntl; then
9994                 val="$define"
9995                 echo "We'll be including <fcntl.h>." >&4
9996         else
9997                 val="$undef"
9998                 if $h_sysfile; then
9999         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
10000                 else
10001                         echo "We won't be including <fcntl.h>." >&4
10002                 fi
10003         fi
10004         ;;
10005 *)
10006         h_fcntl=false
10007         val="$undef"
10008         ;;
10009 esac
10010 set i_fcntl
10011 eval $setvar
10012
10013 : check for non-blocking I/O stuff
10014 case "$h_sysfile" in
10015 true) echo "#include <sys/file.h>" > head.c;;
10016 *)
10017        case "$h_fcntl" in
10018        true) echo "#include <fcntl.h>" > head.c;;
10019        *) echo "#include <sys/fcntl.h>" > head.c;;
10020        esac
10021        ;;
10022 esac
10023 echo " "
10024 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10025 case "$o_nonblock" in
10026 '')
10027         $cat head.c > try.c
10028         $cat >>try.c <<EOCP
10029 #include <stdio.h>
10030 #include <stdlib.h>
10031 #$i_fcntl I_FCNTL
10032 #ifdef I_FCNTL
10033 #include <fcntl.h>
10034 #endif
10035 int main() {
10036 #ifdef O_NONBLOCK
10037         printf("O_NONBLOCK\n");
10038         exit(0);
10039 #endif
10040 #ifdef O_NDELAY
10041         printf("O_NDELAY\n");
10042         exit(0);
10043 #endif
10044 #ifdef FNDELAY
10045         printf("FNDELAY\n");
10046         exit(0);
10047 #endif
10048         exit(0);
10049 }
10050 EOCP
10051         set try
10052         if eval $compile_ok; then
10053                 o_nonblock=`$run ./try`
10054                 case "$o_nonblock" in
10055                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10056                 *) echo "Seems like we can use $o_nonblock.";;
10057                 esac
10058         else
10059                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10060         fi
10061         ;;
10062 *) echo "Using $hint value $o_nonblock.";;
10063 esac
10064 $rm -f try try.* .out core
10065
10066 echo " "
10067 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10068 case "$eagain" in
10069 '')
10070         $cat head.c > try.c
10071         $cat >>try.c <<EOCP
10072 #include <errno.h>
10073 #include <sys/types.h>
10074 #include <signal.h>
10075 #include <stdio.h> 
10076 #include <stdlib.h> 
10077 #$i_fcntl I_FCNTL
10078 #ifdef I_FCNTL
10079 #include <fcntl.h>
10080 #endif
10081 #define MY_O_NONBLOCK $o_nonblock
10082 #ifndef errno  /* XXX need better Configure test */
10083 extern int errno;
10084 #endif
10085 #$i_unistd I_UNISTD
10086 #ifdef I_UNISTD
10087 #include <unistd.h>
10088 #endif
10089 #$i_string I_STRING
10090 #ifdef I_STRING
10091 #include <string.h>
10092 #else
10093 #include <strings.h>
10094 #endif
10095 $signal_t blech(x) int x; { exit(3); }
10096 EOCP
10097         $cat >> try.c <<'EOCP'
10098 int main()
10099 {
10100         int pd[2];
10101         int pu[2];
10102         char buf[1];
10103         char string[100];
10104
10105         pipe(pd);       /* Down: child -> parent */
10106         pipe(pu);       /* Up: parent -> child */
10107         if (0 != fork()) {
10108                 int ret;
10109                 close(pd[1]);   /* Parent reads from pd[0] */
10110                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10111 #ifdef F_SETFL
10112                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10113                         exit(1);
10114 #else
10115                 exit(4);
10116 #endif
10117                 signal(SIGALRM, blech);
10118                 alarm(5);
10119                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10120                         exit(2);
10121                 sprintf(string, "%d\n", ret);
10122                 write(2, string, strlen(string));
10123                 alarm(0);
10124 #ifdef EAGAIN
10125                 if (errno == EAGAIN) {
10126                         printf("EAGAIN\n");
10127                         goto ok;
10128                 }
10129 #endif
10130 #ifdef EWOULDBLOCK
10131                 if (errno == EWOULDBLOCK)
10132                         printf("EWOULDBLOCK\n");
10133 #endif
10134         ok:
10135                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10136                 sleep(2);                               /* Give it time to close our pipe */
10137                 alarm(5);
10138                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10139                 alarm(0);
10140                 sprintf(string, "%d\n", ret);
10141                 write(4, string, strlen(string));
10142                 exit(0);
10143         }
10144
10145         close(pd[0]);                   /* We write to pd[1] */
10146         close(pu[1]);                   /* We read from pu[0] */
10147         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10148         close(pd[1]);                   /* Pipe pd is now fully closed! */
10149         exit(0);                                /* Bye bye, thank you for playing! */
10150 }
10151 EOCP
10152         set try
10153         if eval $compile_ok; then
10154                 echo "$startsh" >mtry
10155                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10156                 chmod +x mtry
10157                 ./mtry >/dev/null 2>&1
10158                 case $? in
10159                 0) eagain=`$cat try.out`;;
10160                 1) echo "Could not perform non-blocking setting!";;
10161                 2) echo "I did a successful read() for something that was not there!";;
10162                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10163                 4) echo "Could not find F_SETFL!";;
10164                 *) echo "Something terribly wrong happened during testing.";;
10165                 esac
10166                 rd_nodata=`$cat try.ret`
10167                 echo "A read() system call with no data present returns $rd_nodata."
10168                 case "$rd_nodata" in
10169                 0|-1) ;;
10170                 *)
10171                         echo "(That's peculiar, fixing that to be -1.)"
10172                         rd_nodata=-1
10173                         ;;
10174                 esac
10175                 case "$eagain" in
10176                 '')
10177                         echo "Forcing errno EAGAIN on read() with no data available."
10178                         eagain=EAGAIN
10179                         ;;
10180                 *)
10181                         echo "Your read() sets errno to $eagain when no data is available."
10182                         ;;
10183                 esac
10184                 status=`$cat try.err`
10185                 case "$status" in
10186                 0) echo "And it correctly returns 0 to signal EOF.";;
10187                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10188                 *) echo "However, your read() returns '$status' on EOF??";;
10189                 esac
10190                 val="$define"
10191                 if test "$status" = "$rd_nodata"; then
10192                         echo "WARNING: you can't distinguish between EOF and no data!"
10193                         val="$undef"
10194                 fi
10195         else
10196                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10197                 eagain=EAGAIN
10198         fi
10199         set d_eofnblk
10200         eval $setvar
10201         ;;
10202 *)
10203         echo "Using $hint value $eagain."
10204         echo "Your read() returns $rd_nodata when no data is present."
10205         case "$d_eofnblk" in
10206         "$define") echo "And you can see EOF because read() returns 0.";;
10207         "$undef") echo "But you can't see EOF status from read() returned value.";;
10208         *)
10209                 echo "(Assuming you can't see EOF status from read anyway.)"
10210                 d_eofnblk=$undef
10211                 ;;
10212         esac
10213         ;;
10214 esac
10215 $rm -f try try.* .out core head.c mtry
10216
10217 : see if fchdir exists
10218 set fchdir d_fchdir
10219 eval $inlibc
10220
10221 : see if fchmod exists
10222 set fchmod d_fchmod
10223 eval $inlibc
10224
10225 : see if fchown exists
10226 set fchown d_fchown
10227 eval $inlibc
10228
10229 : see if this is an fcntl system
10230 set fcntl d_fcntl
10231 eval $inlibc
10232
10233 echo " "
10234 : See if fcntl-based locking works.
10235 $cat >try.c <<EOCP
10236 #include <stdlib.h>
10237 #include <unistd.h>
10238 #include <fcntl.h>
10239 #include <signal.h>
10240 $signal_t blech(x) int x; { exit(3); }
10241 int main() {
10242 #if defined(F_SETLK) && defined(F_SETLKW)
10243      struct flock flock;
10244      int retval, fd;
10245      fd = open("try.c", O_RDONLY);
10246      flock.l_type = F_RDLCK;
10247      flock.l_whence = SEEK_SET;
10248      flock.l_start = flock.l_len = 0;
10249      signal(SIGALRM, blech);
10250      alarm(10);
10251      retval = fcntl(fd, F_SETLK, &flock);
10252      close(fd);
10253      (retval < 0 ? exit(2) : exit(0));
10254 #else
10255      exit(2);
10256 #endif
10257 }
10258 EOCP
10259 echo "Checking if fcntl-based file locking works... "
10260 case "$d_fcntl" in
10261 "$define")
10262         set try
10263         if eval $compile_ok; then
10264                 if $run ./try; then
10265                         echo "Yes, it seems to work."
10266                         val="$define"
10267                 else
10268                         echo "Nope, it didn't work."
10269                         val="$undef"
10270                         case "$?" in
10271                         3) $cat >&4 <<EOM
10272 ***
10273 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10274 *** This is (almost) impossible.
10275 *** If your NFS lock daemons are not feeling well, something like
10276 *** this may happen, please investigate.  Cannot continue, aborting.
10277 ***
10278 EOM
10279                                 exit 1
10280                                 ;;
10281                         esac
10282                 fi
10283         else
10284                 echo "I'm unable to compile the test program, so I'll assume not."
10285                 val="$undef"
10286         fi
10287         ;;
10288 *) val="$undef";
10289         echo "Nope, since you don't even have fcntl()."
10290         ;;
10291 esac
10292 set d_fcntl_can_lock
10293 eval $setvar
10294 $rm -f try*
10295
10296
10297 : see if sys/select.h has to be included
10298 set sys/select.h i_sysselct
10299 eval $inhdr
10300
10301 : see if we should include time.h, sys/time.h, or both
10302 echo " "
10303 if test "X$timeincl" = X; then
10304         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10305         $echo $n "I'm now running the test program...$c"
10306         $cat >try.c <<'EOCP'
10307 #include <sys/types.h>
10308 #ifdef I_TIME
10309 #include <time.h>
10310 #endif
10311 #ifdef I_SYSTIME
10312 #ifdef SYSTIMEKERNEL
10313 #define KERNEL
10314 #endif
10315 #include <sys/time.h>
10316 #endif
10317 #ifdef I_SYSSELECT
10318 #include <sys/select.h>
10319 #endif
10320 int main()
10321 {
10322         struct tm foo;
10323 #ifdef S_TIMEVAL
10324         struct timeval bar;
10325 #endif
10326 #ifdef S_TIMEZONE
10327         struct timezone tzp;
10328 #endif
10329         if (foo.tm_sec == foo.tm_sec)
10330                 exit(0);
10331 #ifdef S_TIMEVAL
10332         if (bar.tv_sec == bar.tv_sec)
10333                 exit(0);
10334 #endif
10335         exit(1);
10336 }
10337 EOCP
10338         flags=''
10339         for s_timezone in '-DS_TIMEZONE' ''; do
10340         sysselect=''
10341         for s_timeval in '-DS_TIMEVAL' ''; do
10342         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10343         for i_time in '' '-DI_TIME'; do
10344         for i_systime in '-DI_SYSTIME' ''; do
10345                 case "$flags" in
10346                 '') $echo $n ".$c"
10347                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10348                         if eval $compile; then
10349                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10350                                 shift
10351                                 flags="$*"
10352                                 echo " "
10353                                 $echo $n "Succeeded with $flags$c"
10354                         fi
10355                         ;;
10356                 esac
10357         done
10358         done
10359         done
10360         done
10361         done
10362         timeincl=''
10363         echo " "
10364         case "$flags" in
10365         *SYSTIMEKERNEL*) i_systimek="$define"
10366                 timeincl=`./findhdr sys/time.h`
10367                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10368         *) i_systimek="$undef";;
10369         esac
10370         case "$flags" in
10371         *I_TIME*) i_time="$define"
10372                 timeincl=`./findhdr time.h`" $timeincl"
10373                 echo "We'll include <time.h>." >&4;;
10374         *) i_time="$undef";;
10375         esac
10376         case "$flags" in
10377         *I_SYSTIME*) i_systime="$define"
10378                 timeincl=`./findhdr sys/time.h`" $timeincl"
10379                 echo "We'll include <sys/time.h>." >&4;;
10380         *) i_systime="$undef";;
10381         esac
10382         $rm -f try.c try
10383 fi
10384
10385 : check for fd_set items
10386 $cat <<EOM
10387
10388 Checking to see how well your C compiler handles fd_set and friends ...
10389 EOM
10390 $cat >try.c <<EOCP
10391 #$i_systime I_SYS_TIME
10392 #$i_sysselct I_SYS_SELECT
10393 #$d_socket HAS_SOCKET
10394 #include <sys/types.h>
10395 #ifdef HAS_SOCKET
10396 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10397 #endif
10398 #ifdef I_SYS_TIME
10399 #include <sys/time.h>
10400 #endif
10401 #ifdef I_SYS_SELECT
10402 #include <sys/select.h>
10403 #endif
10404 int main() {
10405         fd_set fds;
10406
10407 #ifdef TRYBITS
10408         if(fds.fds_bits);
10409 #endif
10410
10411 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10412         exit(0);
10413 #else
10414         exit(1);
10415 #endif
10416 }
10417 EOCP
10418 set try -DTRYBITS
10419 if eval $compile; then
10420         d_fds_bits="$define"
10421         d_fd_set="$define"
10422         echo "Well, your system knows about the normal fd_set typedef..." >&4
10423         if $run ./try; then
10424                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10425                 d_fd_macros="$define"
10426         else
10427                 $cat >&4 <<'EOM'
10428 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10429 EOM
10430                 d_fd_macros="$undef"
10431         fi
10432 else
10433         $cat <<'EOM'
10434 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10435 EOM
10436         set try
10437         if eval $compile; then
10438                 d_fds_bits="$undef"
10439                 d_fd_set="$define"
10440                 echo "Well, your system has some sort of fd_set available..." >&4
10441                 if $run ./try; then
10442                         echo "and you have the normal fd_set macros." >&4
10443                         d_fd_macros="$define"
10444                 else
10445                         $cat <<'EOM'
10446 but not the normal fd_set macros!  Gross!  More work for me...
10447 EOM
10448                         d_fd_macros="$undef"
10449                 fi
10450         else
10451         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10452                 d_fd_set="$undef"
10453                 d_fds_bits="$undef"
10454                 d_fd_macros="$undef"
10455         fi
10456 fi
10457 $rm -f try try.*
10458
10459 : see if fgetpos exists
10460 set fgetpos d_fgetpos
10461 eval $inlibc
10462
10463 : see if finite exists
10464 set finite d_finite
10465 eval $inlibc
10466
10467 : see if finitel exists
10468 set finitel d_finitel
10469 eval $inlibc
10470
10471 : see if flock exists
10472 set flock d_flock
10473 eval $inlibc
10474
10475 : see if prototype for flock is available
10476 echo " "
10477 set d_flockproto flock $i_sysfile sys/file.h
10478 eval $hasproto
10479
10480 : see if fork exists
10481 set fork d_fork
10482 eval $inlibc
10483
10484 : see if fp_class exists
10485 set fp_class d_fp_class
10486 eval $inlibc
10487
10488 : see if pathconf exists
10489 set pathconf d_pathconf
10490 eval $inlibc
10491
10492 : see if fpathconf exists
10493 set fpathconf d_fpathconf
10494 eval $inlibc
10495
10496 : see if fpclass exists
10497 set fpclass d_fpclass
10498 eval $inlibc
10499
10500 : see if fpclassify exists
10501 set fpclassify d_fpclassify
10502 eval $inlibc
10503
10504 : see if fpclassl exists
10505 set fpclassl d_fpclassl
10506 eval $inlibc
10507
10508
10509 : check for fpos64_t
10510 echo " "
10511 echo "Checking to see if you have fpos64_t..." >&4
10512 $cat >try.c <<EOCP
10513 #include <stdio.h>
10514 int main() { fpos64_t x = 7; }
10515 EOCP
10516 set try
10517 if eval $compile; then
10518         val="$define"
10519         echo "You have fpos64_t."
10520 else
10521         val="$undef"
10522         echo "You do not have fpos64_t."
10523         case "$fpossize" in
10524         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10525         esac
10526 fi
10527 $rm -f try.* try
10528 set d_fpos64_t
10529 eval $setvar
10530
10531 : see if frexpl exists
10532 set frexpl d_frexpl
10533 eval $inlibc
10534
10535 : see if this is a sys/param system
10536 set sys/param.h i_sysparam
10537 eval $inhdr
10538
10539 : see if this is a sys/mount.h system
10540 set sys/mount.h i_sysmount
10541 eval $inhdr
10542
10543
10544 echo " "
10545 echo "Checking to see if your system supports struct fs_data..." >&4
10546 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10547 eval $hasstruct
10548 case "$d_fs_data_s" in
10549 "$define")      echo "Yes, it does."   ;;
10550 *)              echo "No, it doesn't." ;;
10551 esac
10552
10553 : see if fseeko exists
10554 set fseeko d_fseeko
10555 eval $inlibc
10556 case "$longsize" in
10557 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10558 esac
10559
10560 : see if fsetpos exists
10561 set fsetpos d_fsetpos
10562 eval $inlibc
10563
10564
10565 : see if fstatfs exists
10566 set fstatfs d_fstatfs
10567 eval $inlibc
10568
10569
10570 : see if statvfs exists
10571 set statvfs d_statvfs
10572 eval $inlibc
10573
10574 : see if fstatvfs exists
10575 set fstatvfs d_fstatvfs
10576 eval $inlibc
10577
10578
10579 : see if fsync exists
10580 set fsync d_fsync
10581 eval $inlibc
10582
10583 : see if ftello exists
10584 set ftello d_ftello
10585 eval $inlibc
10586 case "$longsize" in
10587 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10588 esac
10589
10590 : see if getcwd exists
10591 set getcwd d_getcwd
10592 eval $inlibc
10593
10594 : see if getespwnam exists
10595 set getespwnam d_getespwnam
10596 eval $inlibc
10597
10598
10599 : see if getfsstat exists
10600 set getfsstat d_getfsstat
10601 eval $inlibc
10602
10603 : see if getgrent exists
10604 set getgrent d_getgrent
10605 eval $inlibc
10606
10607 : see if gethostbyaddr exists
10608 set gethostbyaddr d_gethbyaddr
10609 eval $inlibc
10610
10611 : see if gethostbyname exists
10612 set gethostbyname d_gethbyname
10613 eval $inlibc
10614
10615 : see if gethostent exists
10616 set gethostent d_gethent
10617 eval $inlibc
10618
10619 : see how we will look up host name
10620 echo " "
10621 call=''
10622 if set gethostname val -f d_gethname; eval $csym; $val; then
10623         echo 'gethostname() found.' >&4
10624         d_gethname="$define"
10625         call=gethostname
10626 fi
10627 if set uname val -f d_uname; eval $csym; $val; then
10628         if ./xenix; then
10629                 $cat <<'EOM'
10630 uname() was found, but you're running xenix, and older versions of xenix
10631 have a broken uname(). If you don't really know whether your xenix is old
10632 enough to have a broken system call, use the default answer.
10633
10634 EOM
10635                 dflt=y
10636                 case "$d_uname" in
10637                 "$define") dflt=n;;
10638                 esac
10639                 rp='Is your uname() broken?'
10640                 . ./myread
10641                 case "$ans" in
10642                 n*) d_uname="$define"; call=uname;;
10643                 esac
10644         else
10645                 echo 'uname() found.' >&4
10646                 d_uname="$define"
10647                 case "$call" in
10648                 '') call=uname ;;
10649                 esac
10650         fi
10651 fi
10652 case "$d_gethname" in
10653 '') d_gethname="$undef";;
10654 esac
10655 case "$d_uname" in
10656 '') d_uname="$undef";;
10657 esac
10658 case "$d_uname$d_gethname" in
10659 *define*)
10660         dflt=n
10661         cat <<EOM
10662  
10663 Every now and then someone has a $call() that lies about the hostname
10664 but can't be fixed for political or economic reasons.  If you wish, I can
10665 pretend $call() isn't there and maybe compute hostname at run-time
10666 thanks to the '$phostname' command.
10667
10668 EOM
10669         rp="Shall I ignore $call() from now on?"
10670         . ./myread
10671         case "$ans" in
10672         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10673         esac;;
10674 esac
10675 case "$phostname" in
10676 '') aphostname='';;
10677 *) case "$aphostname" in
10678         /*) ;;
10679         *) set X $phostname
10680                 shift
10681                 file=$1
10682                 shift
10683                 file=`./loc $file $file $pth`
10684                 aphostname=`echo $file $*`
10685                 ;;
10686         esac
10687         ;;
10688 esac
10689 case "$d_uname$d_gethname" in
10690 *define*) ;;
10691 *)
10692         case "$phostname" in
10693         '')
10694                 echo "There will be no way for $package to get your hostname." >&4;;
10695         *)
10696         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10697                 ;;
10698         esac;;
10699 esac
10700 case "$d_phostname" in
10701 '') d_phostname="$undef";;
10702 esac
10703
10704 : see if this is a netdb.h system
10705 set netdb.h i_netdb
10706 eval $inhdr
10707
10708 : see if prototypes for various gethostxxx netdb.h functions are available
10709 echo " "
10710 set d_gethostprotos gethostent $i_netdb netdb.h
10711 eval $hasproto
10712
10713 : see if getitimer exists
10714 set getitimer d_getitimer
10715 eval $inlibc
10716
10717 : see if getlogin exists
10718 set getlogin d_getlogin
10719 eval $inlibc
10720
10721 : see if getmnt exists
10722 set getmnt d_getmnt
10723 eval $inlibc
10724
10725 : see if getmntent exists
10726 set getmntent d_getmntent
10727 eval $inlibc
10728
10729 : see if getnetbyaddr exists
10730 set getnetbyaddr d_getnbyaddr
10731 eval $inlibc
10732
10733 : see if getnetbyname exists
10734 set getnetbyname d_getnbyname
10735 eval $inlibc
10736
10737 : see if getnetent exists
10738 set getnetent d_getnent
10739 eval $inlibc
10740
10741 : see if prototypes for various getnetxxx netdb.h functions are available
10742 echo " "
10743 set d_getnetprotos getnetent $i_netdb netdb.h
10744 eval $hasproto
10745
10746 : see if getpagesize exists
10747 set getpagesize d_getpagsz
10748 eval $inlibc
10749
10750
10751 : see if getprotobyname exists
10752 set getprotobyname d_getpbyname
10753 eval $inlibc
10754
10755 : see if getprotobynumber exists
10756 set getprotobynumber d_getpbynumber
10757 eval $inlibc
10758
10759 : see if getprotoent exists
10760 set getprotoent d_getpent
10761 eval $inlibc
10762
10763 : see if getpgid exists
10764 set getpgid d_getpgid
10765 eval $inlibc
10766
10767 : see if getpgrp2 exists
10768 set getpgrp2 d_getpgrp2
10769 eval $inlibc
10770
10771 : see if getppid exists
10772 set getppid d_getppid
10773 eval $inlibc
10774
10775 : see if getpriority exists
10776 set getpriority d_getprior
10777 eval $inlibc
10778
10779 : see if prototypes for various getprotoxxx netdb.h functions are available
10780 echo " "
10781 set d_getprotoprotos getprotoent $i_netdb netdb.h
10782 eval $hasproto
10783
10784 : see if getprpwnam exists
10785 set getprpwnam d_getprpwnam
10786 eval $inlibc
10787
10788 : see if getpwent exists
10789 set getpwent d_getpwent
10790 eval $inlibc
10791
10792
10793 : see if getservbyname exists
10794 set getservbyname d_getsbyname
10795 eval $inlibc
10796
10797 : see if getservbyport exists
10798 set getservbyport d_getsbyport
10799 eval $inlibc
10800
10801 : see if getservent exists
10802 set getservent d_getsent
10803 eval $inlibc
10804
10805 : see if prototypes for various getservxxx netdb.h functions are available
10806 echo " "
10807 set d_getservprotos getservent $i_netdb netdb.h
10808 eval $hasproto
10809
10810 : see if getspnam exists
10811 set getspnam d_getspnam
10812 eval $inlibc
10813
10814 : see if gettimeofday or ftime exists
10815 set gettimeofday d_gettimeod
10816 eval $inlibc
10817 case "$d_gettimeod" in
10818 "$undef")
10819         set ftime d_ftime 
10820         eval $inlibc
10821         ;;
10822 *)
10823         val="$undef"; set d_ftime; eval $setvar
10824         ;;
10825 esac
10826 case "$d_gettimeod$d_ftime" in
10827 "$undef$undef")
10828         echo " "
10829         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10830         ;;
10831 esac
10832
10833 : see if this is an grp system
10834 set grp.h i_grp
10835 eval $inhdr
10836
10837 case "$i_grp" in
10838 $define)
10839         xxx=`./findhdr grp.h`
10840         $cppstdin $cppflags $cppminus < $xxx >$$.h
10841
10842         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10843                 val="$define"
10844         else
10845                 val="$undef"
10846         fi
10847         set d_grpasswd
10848         eval $setvar
10849
10850         $rm -f $$.h
10851         ;;
10852 *)
10853         val="$undef";
10854         set d_grpasswd; eval $setvar
10855         ;;
10856 esac
10857
10858 : see if hasmntopt exists
10859 set hasmntopt d_hasmntopt
10860 eval $inlibc
10861
10862 : see if this is a netinet/in.h or sys/in.h system
10863 set netinet/in.h i_niin sys/in.h i_sysin
10864 eval $inhdr
10865
10866 : see if arpa/inet.h has to be included
10867 set arpa/inet.h i_arpainet
10868 eval $inhdr
10869
10870 : see if htonl --and friends-- exists
10871 val=''
10872 set htonl val
10873 eval $inlibc
10874
10875 : Maybe they are macros.
10876 case "$val" in
10877 $undef)
10878         $cat >htonl.c <<EOM
10879 #include <stdio.h>
10880 #include <sys/types.h>
10881 #$i_niin I_NETINET_IN
10882 #$i_sysin I_SYS_IN
10883 #$i_arpainet I_ARPA_INET
10884 #ifdef I_NETINET_IN
10885 #include <netinet/in.h>
10886 #endif
10887 #ifdef I_SYS_IN
10888 #include <sys/in.h>
10889 #endif
10890 #ifdef I_ARPA_INET
10891 #include <arpa/inet.h>
10892 #endif
10893 #ifdef htonl
10894 printf("Defined as a macro.");
10895 #endif
10896 EOM
10897         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10898         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10899                 val="$define"
10900                 echo "But it seems to be defined as a macro." >&4
10901         fi
10902         $rm -f htonl.?
10903         ;;
10904 esac
10905 set d_htonl
10906 eval $setvar
10907
10908 : index or strchr
10909 echo " "
10910 if set index val -f; eval $csym; $val; then
10911         if set strchr val -f d_strchr; eval $csym; $val; then
10912                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10913                         val="$define"
10914                         vali="$undef"
10915                         echo "strchr() found." >&4
10916                 else
10917                         val="$undef"
10918                         vali="$define"
10919                         echo "index() found." >&4
10920                 fi
10921         else
10922                 val="$undef"
10923                 vali="$define"
10924                 echo "index() found." >&4
10925         fi
10926 else
10927         if set strchr val -f d_strchr; eval $csym; $val; then
10928                 val="$define"
10929                 vali="$undef"
10930                 echo "strchr() found." >&4
10931         else
10932                 echo "No index() or strchr() found!" >&4
10933                 val="$undef"
10934                 vali="$undef"
10935         fi
10936 fi
10937 set d_strchr; eval $setvar
10938 val="$vali"
10939 set d_index; eval $setvar
10940
10941 : check whether inet_aton exists
10942 set inet_aton d_inetaton
10943 eval $inlibc
10944
10945 : Look for isascii
10946 echo " "
10947 $cat >isascii.c <<'EOCP'
10948 #include <stdio.h>
10949 #include <ctype.h>
10950 int main() {
10951         int c = 'A';
10952         if (isascii(c))
10953                 exit(0);
10954         else
10955                 exit(1);
10956 }
10957 EOCP
10958 set isascii
10959 if eval $compile; then
10960         echo "isascii() found." >&4
10961         val="$define"
10962 else
10963         echo "isascii() NOT found." >&4
10964         val="$undef"
10965 fi
10966 set d_isascii
10967 eval $setvar
10968 $rm -f isascii*
10969
10970 : see if isfinite exists
10971 set isfinite d_isfinite
10972 eval $inlibc
10973
10974 : see if isinf exists
10975 set isinf d_isinf
10976 eval $inlibc
10977
10978 : see if isnan exists
10979 set isnan d_isnan
10980 eval $inlibc
10981
10982 : see if isnanl exists
10983 set isnanl d_isnanl
10984 eval $inlibc
10985
10986 : see if killpg exists
10987 set killpg d_killpg
10988 eval $inlibc
10989
10990 : see if lchown exists
10991 echo " "
10992 $cat > try.c <<'EOCP'
10993 /* System header to define __stub macros and hopefully few prototypes,
10994     which can conflict with char lchown(); below.  */
10995 #include <assert.h>
10996 /* Override any gcc2 internal prototype to avoid an error.  */
10997 /* We use char because int might match the return type of a gcc2
10998    builtin and then its argument prototype would still apply.  */
10999 char lchown();
11000 int main() {
11001     /*  The GNU C library defines this for functions which it implements
11002         to always fail with ENOSYS.  Some functions are actually named
11003         something starting with __ and the normal name is an alias.  */
11004 #if defined (__stub_lchown) || defined (__stub___lchown)
11005 choke me
11006 #else
11007 lchown();
11008 #endif
11009 ; return 0; }
11010 EOCP
11011 set try
11012 if eval $compile; then
11013     $echo "lchown() found." >&4
11014     val="$define"
11015 else
11016     $echo "lchown() NOT found." >&4
11017     val="$undef"
11018 fi
11019 set d_lchown
11020 eval $setvar
11021
11022 : See if number of significant digits in a double precision number is known
11023 echo " "
11024 $cat >ldbl_dig.c <<EOM
11025 #$i_limits I_LIMITS
11026 #$i_float I_FLOAT
11027 #ifdef I_LIMITS
11028 #include <limits.h>
11029 #endif
11030 #ifdef I_FLOAT
11031 #include <float.h>
11032 #endif
11033 #ifdef LDBL_DIG
11034 printf("Contains LDBL_DIG");
11035 #endif
11036 EOM
11037 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11038 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11039         echo "LDBL_DIG found." >&4
11040         val="$define"
11041 else
11042         echo "LDBL_DIG NOT found." >&4
11043         val="$undef"
11044 fi
11045 $rm -f ldbl_dig.?
11046 set d_ldbl_dig
11047 eval $setvar
11048
11049 : see if link exists
11050 set link d_link
11051 eval $inlibc
11052
11053 : see if localeconv exists
11054 set localeconv d_locconv
11055 eval $inlibc
11056
11057 : see if lockf exists
11058 set lockf d_lockf
11059 eval $inlibc
11060
11061 : see if prototype for lseek is available
11062 echo " "
11063 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11064 eval $hasproto
11065
11066 : see if lstat exists
11067 set lstat d_lstat
11068 eval $inlibc
11069
11070 : see if madvise exists
11071 set madvise d_madvise
11072 eval $inlibc
11073
11074 : see if mblen exists
11075 set mblen d_mblen
11076 eval $inlibc
11077
11078 : see if mbstowcs exists
11079 set mbstowcs d_mbstowcs
11080 eval $inlibc
11081
11082 : see if mbtowc exists
11083 set mbtowc d_mbtowc
11084 eval $inlibc
11085
11086 : see if memchr exists
11087 set memchr d_memchr
11088 eval $inlibc
11089
11090 : see if memcmp exists
11091 set memcmp d_memcmp
11092 eval $inlibc
11093
11094 : see if memcpy exists
11095 set memcpy d_memcpy
11096 eval $inlibc
11097
11098 : see if memmove exists
11099 set memmove d_memmove
11100 eval $inlibc
11101
11102 : see if memset exists
11103 set memset d_memset
11104 eval $inlibc
11105
11106 : see if mkdir exists
11107 set mkdir d_mkdir
11108 eval $inlibc
11109
11110 : see if mkdtemp exists
11111 set mkdtemp d_mkdtemp
11112 eval $inlibc
11113
11114 : see if mkfifo exists
11115 set mkfifo d_mkfifo
11116 eval $inlibc
11117
11118 : see if mkstemp exists
11119 set mkstemp d_mkstemp
11120 eval $inlibc
11121
11122 : see if mkstemps exists
11123 set mkstemps d_mkstemps
11124 eval $inlibc
11125
11126 : see if mktime exists
11127 set mktime d_mktime
11128 eval $inlibc
11129
11130 : see if this is a sys/mman.h system
11131 set sys/mman.h i_sysmman
11132 eval $inhdr
11133
11134 : see if mmap exists
11135 set mmap d_mmap
11136 eval $inlibc
11137 : see what shmat returns
11138 : default to something harmless
11139 mmaptype='void *'
11140 case "$i_sysmman$d_mmap" in
11141 "$define$define")
11142         $cat >mmap.c <<'END'
11143 #include <sys/mman.h>
11144 void *mmap();
11145 END
11146         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11147                 mmaptype='void *'
11148         else
11149                 mmaptype='caddr_t'
11150         fi
11151         echo "and it returns ($mmaptype)." >&4
11152         ;;
11153 esac
11154
11155
11156
11157 : see if mprotect exists
11158 set mprotect d_mprotect
11159 eval $inlibc
11160
11161 : see if msgctl exists
11162 set msgctl d_msgctl
11163 eval $inlibc
11164
11165 : see if msgget exists
11166 set msgget d_msgget
11167 eval $inlibc
11168
11169 : see if msgsnd exists
11170 set msgsnd d_msgsnd
11171 eval $inlibc
11172
11173 : see if msgrcv exists
11174 set msgrcv d_msgrcv
11175 eval $inlibc
11176
11177 : see how much of the 'msg*(2)' library is present.
11178 h_msg=true
11179 echo " "
11180 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11181 *"$undef"*) h_msg=false;;
11182 esac
11183 case "$osname" in
11184 freebsd)
11185     case "`ipcs 2>&1`" in
11186     "SVID messages"*"not configured"*)
11187         echo "Your $osname does not have the msg*(2) configured." >&4
11188         h_msg=false
11189         val="$undef"
11190         set msgctl d_msgctl
11191         eval $setvar
11192         set msgget d_msgget
11193         eval $setvar
11194         set msgsnd d_msgsnd
11195         eval $setvar
11196         set msgrcv d_msgrcv
11197         eval $setvar
11198         ;;
11199     esac
11200     ;;
11201 esac
11202 : we could also check for sys/ipc.h ...
11203 if $h_msg && $test `./findhdr sys/msg.h`; then
11204         echo "You have the full msg*(2) library." >&4
11205         val="$define"
11206 else
11207         echo "You don't have the full msg*(2) library." >&4
11208         val="$undef"
11209 fi
11210 set d_msg
11211 eval $setvar
11212
11213
11214 echo " "
11215 echo "Checking to see if your system supports struct msghdr..." >&4
11216 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11217 eval $hasstruct
11218 case "$d_msghdr_s" in
11219 "$define")      echo "Yes, it does."   ;;
11220 *)              echo "No, it doesn't." ;;
11221 esac
11222
11223
11224 : see if msync exists
11225 set msync d_msync
11226 eval $inlibc
11227
11228 : see if munmap exists
11229 set munmap d_munmap
11230 eval $inlibc
11231
11232 : see if nice exists
11233 set nice d_nice
11234 eval $inlibc
11235
11236 : see if this is a langinfo.h system
11237 set langinfo.h i_langinfo
11238 eval $inhdr
11239
11240 : see if nl_langinfo exists
11241 set nl_langinfo d_nl_langinfo
11242 eval $inlibc
11243
11244 : check for length of character
11245 echo " "
11246 case "$charsize" in
11247 '')
11248         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11249         $cat >try.c <<'EOCP'
11250 #include <stdio.h>
11251 int main()
11252 {
11253     printf("%d\n", (int)sizeof(char));
11254     exit(0);
11255 }
11256 EOCP
11257         set try
11258         if eval $compile_ok; then
11259                 dflt=`$run ./try`
11260         else
11261                 dflt='1'
11262                 echo "(I can't seem to compile the test program.  Guessing...)"
11263         fi
11264         ;;
11265 *)
11266         dflt="$charsize"
11267         ;;
11268 esac
11269 rp="What is the size of a character (in bytes)?"
11270 . ./myread
11271 charsize="$ans"
11272 $rm -f try.c try
11273
11274 : check for volatile keyword
11275 echo " "
11276 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11277 $cat >try.c <<'EOCP'
11278 int main()
11279 {
11280         typedef struct _goo_struct goo_struct;
11281         goo_struct * volatile goo = ((goo_struct *)0);
11282         struct _goo_struct {
11283                 long long_int;
11284                 int reg_int;
11285                 char char_var;
11286         };
11287         typedef unsigned short foo_t;
11288         char *volatile foo;
11289         volatile int bar;
11290         volatile foo_t blech;
11291         foo = foo;
11292 }
11293 EOCP
11294 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11295         val="$define"
11296         echo "Yup, it does."
11297 else
11298         val="$undef"
11299         echo "Nope, it doesn't."
11300 fi
11301 set d_volatile
11302 eval $setvar
11303 $rm -f try.*
11304
11305
11306 echo " "
11307 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11308
11309 case "$use64bitint:$d_quad:$quadtype" in
11310 define:define:?*)
11311         ivtype="$quadtype"
11312         uvtype="$uquadtype"
11313         ivsize=8
11314         uvsize=8
11315         ;;
11316 *)      ivtype="long"
11317         uvtype="unsigned long"
11318         ivsize=$longsize
11319         uvsize=$longsize
11320         ;;
11321 esac
11322
11323 case "$uselongdouble:$d_longdbl" in
11324 define:define)
11325         nvtype="long double"
11326         nvsize=$longdblsize
11327         ;;
11328 *)      nvtype=double
11329         nvsize=$doublesize
11330         ;;
11331 esac
11332
11333 $echo "(IV will be "$ivtype", $ivsize bytes)"
11334 $echo "(UV will be "$uvtype", $uvsize bytes)"
11335 $echo "(NV will be "$nvtype", $nvsize bytes)"
11336
11337 $cat >try.c <<EOCP
11338 #$i_inttypes I_INTTYPES
11339 #ifdef I_INTTYPES
11340 #include <inttypes.h>
11341 #endif
11342 #include <stdio.h>
11343 int main() {
11344 #ifdef INT8
11345    int8_t i =  INT8_MAX;
11346   uint8_t u = UINT8_MAX;
11347   printf("int8_t\n");
11348 #endif
11349 #ifdef INT16
11350    int16_t i =  INT16_MAX;
11351   uint16_t i = UINT16_MAX;
11352   printf("int16_t\n");
11353 #endif
11354 #ifdef INT32
11355    int32_t i =  INT32_MAX;
11356   uint32_t u = UINT32_MAX;
11357   printf("int32_t\n");
11358 #endif
11359 }
11360 EOCP
11361
11362 case "$i8type" in
11363 '')     case "$charsize" in
11364         1)      i8type=char
11365                 u8type="unsigned char"
11366                 i8size=$charsize
11367                 u8size=$charsize
11368                 ;;
11369         esac
11370         ;;
11371 esac
11372 case "$i8type" in
11373 '')     set try -DINT8
11374         if eval $compile; then
11375                 case "`$run ./try`" in
11376                 int8_t) i8type=int8_t
11377                         u8type=uint8_t
11378                         i8size=1
11379                         u8size=1
11380                         ;;
11381                 esac
11382         fi
11383         ;;
11384 esac
11385 case "$i8type" in
11386 '')     if $test $charsize -ge 1; then
11387                 i8type=char
11388                 u8type="unsigned char"
11389                 i8size=$charsize
11390                 u8size=$charsize
11391         fi
11392         ;;
11393 esac
11394
11395 case "$i16type" in
11396 '')     case "$shortsize" in
11397         2)      i16type=short
11398                 u16type="unsigned short"
11399                 i16size=$shortsize
11400                 u16size=$shortsize
11401                 ;;
11402         esac
11403         ;;
11404 esac
11405 case "$i16type" in
11406 '')     set try -DINT16
11407         if eval $compile; then
11408                 case "`$run ./try`" in
11409                 int16_t)
11410                         i16type=int16_t
11411                         u16type=uint16_t
11412                         i16size=2
11413                         u16size=2
11414                         ;;
11415                 esac
11416         fi
11417         ;;
11418 esac
11419 case "$i16type" in
11420 '')     if $test $shortsize -ge 2; then
11421                 i16type=short
11422                 u16type="unsigned short"
11423                 i16size=$shortsize
11424                 u16size=$shortsize
11425         fi
11426         ;;
11427 esac
11428
11429 case "$i32type" in
11430 '')     case "$longsize" in
11431         4)      i32type=long
11432                 u32type="unsigned long"
11433                 i32size=$longsize
11434                 u32size=$longsize
11435                 ;;
11436         *)      case "$intsize" in
11437                 4)      i32type=int
11438                         u32type="unsigned int"
11439                         i32size=$intsize
11440                         u32size=$intsize
11441                         ;;
11442                 esac
11443                 ;;
11444         esac
11445         ;;
11446 esac
11447 case "$i32type" in
11448 '')     set try -DINT32
11449         if eval $compile; then
11450                 case "`$run ./try`" in
11451                 int32_t)
11452                         i32type=int32_t
11453                         u32type=uint32_t
11454                         i32size=4
11455                         u32size=4
11456                         ;;
11457                 esac
11458         fi
11459         ;;
11460 esac
11461 case "$i32type" in
11462 '')     if $test $intsize -ge 4; then
11463                 i32type=int
11464                 u32type="unsigned int"
11465                 i32size=$intsize
11466                 u32size=$intsize
11467         fi
11468         ;;
11469 esac
11470
11471 case "$i64type" in
11472 '')     case "$d_quad:$quadtype" in
11473         define:?*)
11474                 i64type="$quadtype"
11475                 u64type="$uquadtype"
11476                 i64size=8
11477                 u64size=8
11478                 ;;
11479         esac
11480         ;;
11481 esac
11482
11483 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11484 : volatile so that the compiler has to store it out to memory.
11485 if test X"$d_volatile" = X"$define"; then
11486         volatile=volatile
11487 fi
11488 $cat <<EOP >try.c
11489 #include <stdio.h>
11490 #include <sys/types.h>
11491 #include <signal.h>
11492 #ifdef SIGFPE
11493 $volatile int bletched = 0;
11494 $signal_t blech(s) int s; { bletched = 1; }
11495 #endif
11496 int main() {
11497     $uvtype u = 0;
11498     $nvtype d;
11499     int     n = 8 * $uvsize;
11500     int     i;
11501 #ifdef SIGFPE
11502     signal(SIGFPE, blech);
11503 #endif
11504
11505     for (i = 0; i < n; i++) {
11506       u = u << 1 | ($uvtype)1;
11507       d = ($nvtype)u;
11508       if (($uvtype)d != u)
11509         break;
11510       if (d <= 0)
11511         break;
11512       d = ($nvtype)(u - 1);
11513       if (($uvtype)d != (u - 1))
11514         break;
11515 #ifdef SIGFPE
11516       if (bletched) {
11517         break;
11518 #endif
11519       } 
11520     }
11521     printf("%d\n", ((i == n) ? -n : i));
11522     exit(0);
11523 }
11524 EOP
11525 set try
11526
11527 d_nv_preserves_uv="$undef"
11528 if eval $compile; then
11529         d_nv_preserves_uv_bits="`$run ./try`"
11530 fi
11531 case "$d_nv_preserves_uv_bits" in
11532 \-[1-9]*)       
11533         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11534         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11535         d_nv_preserves_uv="$define"
11536         ;;
11537 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11538         d_nv_preserves_uv="$undef" ;;
11539 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11540         d_nv_preserves_uv_bits="$undef" ;;
11541 esac
11542
11543 $rm -f try.* try
11544
11545
11546 : check for off64_t
11547 echo " "
11548 echo "Checking to see if you have off64_t..." >&4
11549 $cat >try.c <<EOCP
11550 #include <sys/types.h>
11551 #include <unistd.h>
11552 int main() { off64_t x = 7; }
11553 EOCP
11554 set try
11555 if eval $compile; then
11556         val="$define"
11557         echo "You have off64_t."
11558 else
11559         val="$undef"
11560         echo "You do not have off64_t."
11561         case "$lseeksize" in
11562         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11563         esac
11564 fi
11565 $rm -f try.* try
11566 set d_off64_t
11567 eval $setvar
11568
11569 : see if POSIX threads are available
11570 set pthread.h i_pthread
11571 eval $inhdr
11572
11573
11574
11575
11576 : how to create joinable pthreads
11577 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11578         echo " "
11579         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11580         $cat >try.c <<'EOCP'
11581 #include <pthread.h>
11582 int main() {
11583     int detachstate = JOINABLE;
11584 }
11585 EOCP
11586         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11587         if eval $compile; then
11588                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11589                 val="$undef" # Yes, undef.
11590                 set d_old_pthread_create_joinable
11591                 eval $setvar
11592                 val=""
11593                 set old_pthread_create_joinable
11594                 eval $setvar
11595         else
11596                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11597                 if eval $compile; then
11598                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11599                         val="$define"
11600                         set d_old_pthread_create_joinable
11601                         eval $setvar
11602                         val=PTHREAD_CREATE_UNDETACHED
11603                         set old_pthread_create_joinable
11604                         eval $setvar
11605                 else            
11606                         set try -DJOINABLE=__UNDETACHED
11607                         if eval $compile; then
11608                                 echo "You seem to use __UNDETACHED." >&4
11609                                 val="$define"
11610                                 set d_old_pthread_create_joinable
11611                                 eval $setvar
11612                                 val=__UNDETACHED
11613                                 set old_pthread_create_joinable
11614                                 eval $setvar
11615                         else
11616                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11617                                 val="$define"
11618                                 set d_old_pthread_create_joinable
11619                                 eval $setvar
11620                                 val=0
11621                                 set old_pthread_create_joinable
11622                                 eval $setvar
11623                         fi
11624                 fi
11625         fi
11626         $rm -f try try.*
11627 else
11628     d_old_pthread_create_joinable="$undef"
11629     old_pthread_create_joinable=""
11630 fi
11631
11632 : see if pause exists
11633 set pause d_pause
11634 eval $inlibc
11635
11636 : see if pipe exists
11637 set pipe d_pipe
11638 eval $inlibc
11639
11640 : see if poll exists
11641 set poll d_poll
11642 eval $inlibc
11643
11644 : see if readlink exists
11645 set readlink d_readlink
11646 eval $inlibc
11647
11648 echo " "
11649 procselfexe=''
11650 val="$undef"
11651 case "$d_readlink" in
11652 "$define")
11653         if $issymlink /proc/self/exe ; then
11654                 $ls -l /proc/self/exe > reflect
11655                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11656                         echo "You have Linux-like /proc/self/exe."
11657                         procselfexe='"/proc/self/exe"'
11658                         val="$define"
11659                 fi
11660         fi
11661         if $issymlink /proc/curproc/file ; then
11662                 $ls -l /proc/curproc/file > reflect
11663                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11664                         echo "You have BSD-like /proc/curproc/file."
11665                         procselfexe='"/proc/curproc/file"'
11666                         val="$define"
11667                 fi
11668         fi
11669         ;;
11670 esac
11671 $rm -f reflect
11672 set d_procselfexe
11673 eval $setvar
11674
11675 : see if pthread_atfork exists
11676 set pthread_atfork d_pthread_atfork
11677 eval $inlibc
11678
11679
11680 : see whether the various POSIXish _yields exist
11681 $cat >try.c <<EOP
11682 #include <pthread.h>
11683 #include <stdio.h>
11684 int main() {
11685 #ifdef SCHED_YIELD
11686         sched_yield();
11687 #else
11688 #ifdef PTHREAD_YIELD
11689         pthread_yield();
11690 #else
11691 #ifdef PTHREAD_YIELD_NULL
11692         pthread_yield(NULL);
11693 #endif
11694 #endif
11695 #endif
11696 }
11697 EOP
11698 : see if sched_yield exists
11699 set try -DSCHED_YIELD
11700 if eval $compile; then
11701     val="$define"
11702     sched_yield='sched_yield()'
11703 else
11704     val="$undef"
11705 fi
11706 case "$usethreads" in
11707 $define)
11708         case "$val" in
11709         $define) echo 'sched_yield() found.' >&4        ;;
11710         *)       echo 'sched_yield() NOT found.' >&4    ;;
11711         esac
11712 esac
11713 set d_sched_yield
11714 eval $setvar
11715
11716 : see if pthread_yield exists
11717 set try -DPTHREAD_YIELD
11718 if eval $compile; then
11719     val="$define"
11720     case "$sched_yield" in
11721     '') sched_yield='pthread_yield()' ;;
11722     esac
11723 else
11724     set try -DPTHREAD_YIELD_NULL
11725     if eval $compile; then
11726         val="$define"
11727         case "$sched_yield" in
11728         '') sched_yield='pthread_yield(NULL)' ;;
11729         esac
11730     else
11731         val="$undef"
11732     fi
11733 fi
11734 case "$usethreads" in
11735 $define)
11736         case "$val" in
11737         $define) echo 'pthread_yield() found.' >&4      ;;
11738         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11739         esac
11740         ;;
11741 esac
11742 set d_pthread_yield
11743 eval $setvar
11744
11745 case "$sched_yield" in
11746 '') sched_yield=undef ;;
11747 esac
11748
11749 $rm -f try try.*
11750
11751 : see if this is a pwd.h system
11752 set pwd.h i_pwd
11753 eval $inhdr
11754
11755 case "$i_pwd" in
11756 $define)
11757         xxx=`./findhdr pwd.h`
11758         $cppstdin $cppflags $cppminus < $xxx >$$.h
11759
11760         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11761                 val="$define"
11762         else
11763                 val="$undef"
11764         fi
11765         set d_pwquota
11766         eval $setvar
11767
11768         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11769                 val="$define"
11770         else
11771                 val="$undef"
11772         fi
11773         set d_pwage
11774         eval $setvar
11775
11776         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11777                 val="$define"
11778         else
11779                 val="$undef"
11780         fi
11781         set d_pwchange
11782         eval $setvar
11783
11784         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11785                 val="$define"
11786         else
11787                 val="$undef"
11788         fi
11789         set d_pwclass
11790         eval $setvar
11791
11792         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11793                 val="$define"
11794         else
11795                 val="$undef"
11796         fi
11797         set d_pwexpire
11798         eval $setvar
11799
11800         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11801                 val="$define"
11802         else
11803                 val="$undef"
11804         fi
11805         set d_pwcomment
11806         eval $setvar
11807
11808         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11809                 val="$define"
11810         else
11811                 val="$undef"
11812         fi
11813         set d_pwgecos
11814         eval $setvar
11815
11816         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11817                 val="$define"
11818         else
11819                 val="$undef"
11820         fi
11821         set d_pwpasswd
11822         eval $setvar
11823
11824         $rm -f $$.h
11825         ;;
11826 *)
11827         val="$undef"; 
11828         set d_pwquota; eval $setvar
11829         set d_pwage; eval $setvar
11830         set d_pwchange; eval $setvar
11831         set d_pwclass; eval $setvar
11832         set d_pwexpire; eval $setvar
11833         set d_pwcomment; eval $setvar
11834         set d_pwgecos; eval $setvar
11835         set d_pwpasswd; eval $setvar
11836         ;;
11837 esac
11838
11839 : see if readdir and friends exist
11840 set readdir d_readdir
11841 eval $inlibc
11842 set seekdir d_seekdir
11843 eval $inlibc
11844 set telldir d_telldir
11845 eval $inlibc
11846 set rewinddir d_rewinddir
11847 eval $inlibc
11848
11849 : see if readv exists
11850 set readv d_readv
11851 eval $inlibc
11852
11853 : see if recvmsg exists
11854 set recvmsg d_recvmsg
11855 eval $inlibc
11856
11857 : see if rename exists
11858 set rename d_rename
11859 eval $inlibc
11860
11861 : see if rmdir exists
11862 set rmdir d_rmdir
11863 eval $inlibc
11864
11865 : see if memory.h is available.
11866 val=''
11867 set memory.h val
11868 eval $inhdr
11869
11870 : See if it conflicts with string.h
11871 case "$val" in
11872 $define)
11873         case "$strings" in
11874         '') ;;
11875         *)
11876                 $cppstdin $cppflags $cppminus < $strings > mem.h
11877                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11878                         echo " "
11879                         echo "We won't be including <memory.h>."
11880                         val="$undef"
11881                 fi
11882                 $rm -f mem.h
11883                 ;;
11884         esac
11885 esac
11886 set i_memory
11887 eval $setvar
11888
11889 : can bcopy handle overlapping blocks?
11890 echo " "
11891 val="$undef"
11892 case "$d_memmove" in
11893 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11894 *)      case "$d_bcopy" in
11895         "$define")
11896                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11897                 $cat >try.c <<EOCP
11898 #$i_memory I_MEMORY
11899 #$i_stdlib I_STDLIB
11900 #$i_string I_STRING
11901 #$i_unistd I_UNISTD
11902 EOCP
11903         $cat >>try.c <<'EOCP'
11904 #include <stdio.h>
11905 #ifdef I_MEMORY
11906 #  include <memory.h>
11907 #endif
11908 #ifdef I_STDLIB
11909 #  include <stdlib.h>
11910 #endif
11911 #ifdef I_STRING
11912 #  include <string.h>
11913 #else
11914 #  include <strings.h>
11915 #endif
11916 #ifdef I_UNISTD
11917 #  include <unistd.h>  /* Needed for NetBSD */
11918 #endif
11919 int main()
11920 {
11921 char buf[128], abc[128];
11922 char *b;
11923 int len;
11924 int off;
11925 int align;
11926
11927 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11928    try to store the string in read-only memory. */
11929 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11930
11931 for (align = 7; align >= 0; align--) {
11932         for (len = 36; len; len--) {
11933                 b = buf+align;
11934                 bcopy(abc, b, len);
11935                 for (off = 1; off <= len; off++) {
11936                         bcopy(b, b+off, len);
11937                         bcopy(b+off, b, len);
11938                         if (bcmp(b, abc, len))
11939                                 exit(1);
11940                 }
11941         }
11942 }
11943 exit(0);
11944 }
11945 EOCP
11946                 set try
11947                 if eval $compile_ok; then
11948                         if ./try 2>/dev/null; then
11949                                 echo "Yes, it can."
11950                                 val="$define"
11951                         else
11952                                 echo "It can't, sorry."
11953                         fi
11954                 else
11955                         echo "(I can't compile the test program, so we'll assume not...)"
11956                 fi
11957                 ;;
11958         esac
11959         $rm -f try.* try core
11960         ;;
11961 esac
11962 set d_safebcpy
11963 eval $setvar
11964
11965 : can memcpy handle overlapping blocks?
11966 echo " "
11967 val="$undef"
11968 case "$d_memmove" in
11969 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11970 *)      case "$d_memcpy" in
11971         "$define")
11972                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11973                 $cat >try.c <<EOCP
11974 #$i_memory I_MEMORY
11975 #$i_stdlib I_STDLIB
11976 #$i_string I_STRING
11977 #$i_unistd I_UNISTD
11978 EOCP
11979         $cat >>try.c <<'EOCP'
11980 #include <stdio.h>
11981 #ifdef I_MEMORY
11982 #  include <memory.h>
11983 #endif
11984 #ifdef I_STDLIB
11985 #  include <stdlib.h>
11986 #endif
11987 #ifdef I_STRING
11988 #  include <string.h>
11989 #else
11990 #  include <strings.h>
11991 #endif
11992 #ifdef I_UNISTD
11993 #  include <unistd.h>  /* Needed for NetBSD */
11994 #endif
11995 int main()
11996 {
11997 char buf[128], abc[128];
11998 char *b;
11999 int len;
12000 int off;
12001 int align;
12002
12003 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12004    try to store the string in read-only memory. */
12005 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
12006
12007 for (align = 7; align >= 0; align--) {
12008         for (len = 36; len; len--) {
12009                 b = buf+align;
12010                 memcpy(b, abc, len);
12011                 for (off = 1; off <= len; off++) {
12012                         memcpy(b+off, b, len);
12013                         memcpy(b, b+off, len);
12014                         if (memcmp(b, abc, len))
12015                                 exit(1);
12016                 }
12017         }
12018 }
12019 exit(0);
12020 }
12021 EOCP
12022                 set try
12023                 if eval $compile_ok; then
12024                         if ./try 2>/dev/null; then
12025                                 echo "Yes, it can."
12026                                 val="$define"
12027                         else
12028                                 echo "It can't, sorry."
12029                         fi
12030                 else
12031                         echo "(I can't compile the test program, so we'll assume not...)"
12032                 fi
12033                 ;;
12034         esac
12035         $rm -f try.* try core
12036         ;;
12037 esac
12038 set d_safemcpy
12039 eval $setvar
12040
12041 : can memcmp be trusted to compare relative magnitude?
12042 val="$undef"
12043 case "$d_memcmp" in
12044 "$define")
12045         echo " "
12046         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12047         $cat >try.c <<EOCP
12048 #$i_memory I_MEMORY
12049 #$i_stdlib I_STDLIB
12050 #$i_string I_STRING
12051 #$i_unistd I_UNISTD
12052 EOCP
12053         $cat >>try.c <<'EOCP'
12054 #include <stdio.h>
12055 #ifdef I_MEMORY
12056 #  include <memory.h>
12057 #endif
12058 #ifdef I_STDLIB
12059 #  include <stdlib.h>
12060 #endif
12061 #ifdef I_STRING
12062 #  include <string.h>
12063 #else
12064 #  include <strings.h>
12065 #endif
12066 #ifdef I_UNISTD
12067 #  include <unistd.h>  /* Needed for NetBSD */
12068 #endif
12069 int main()
12070 {
12071 char a = -1;
12072 char b = 0;
12073 if ((a < b) && memcmp(&a, &b, 1) < 0)
12074         exit(1);
12075 exit(0);
12076 }
12077 EOCP
12078         set try
12079         if eval $compile_ok; then
12080                 if $run ./try 2>/dev/null; then
12081                         echo "Yes, it can."
12082                         val="$define"
12083                 else
12084                         echo "No, it can't (it uses signed chars)."
12085                 fi
12086         else
12087                 echo "(I can't compile the test program, so we'll assume not...)"
12088         fi
12089         ;;
12090 esac
12091 $rm -f try.* try core
12092 set d_sanemcmp
12093 eval $setvar
12094
12095 : see if prototype for sbrk is available
12096 echo " "
12097 set d_sbrkproto sbrk $i_unistd unistd.h
12098 eval $hasproto
12099
12100 : see if select exists
12101 set select d_select
12102 eval $inlibc
12103
12104 : see if semctl exists
12105 set semctl d_semctl
12106 eval $inlibc
12107
12108 : see if semget exists
12109 set semget d_semget
12110 eval $inlibc
12111
12112 : see if semop exists
12113 set semop d_semop
12114 eval $inlibc
12115
12116 : see how much of the 'sem*(2)' library is present.
12117 h_sem=true
12118 echo " "
12119 case "$d_semctl$d_semget$d_semop" in
12120 *"$undef"*) h_sem=false;;
12121 esac
12122 case "$osname" in
12123 freebsd)
12124     case "`ipcs 2>&1`" in
12125     "SVID messages"*"not configured"*)
12126         echo "Your $osname does not have the sem*(2) configured." >&4
12127         h_sem=false
12128         val="$undef"
12129         set semctl d_semctl
12130         eval $setvar
12131         set semget d_semget
12132         eval $setvar
12133         set semop d_semop
12134         eval $setvar
12135         ;;
12136     esac
12137     ;;
12138 esac
12139 : we could also check for sys/ipc.h ...
12140 if $h_sem && $test `./findhdr sys/sem.h`; then
12141         echo "You have the full sem*(2) library." >&4
12142         val="$define"
12143 else
12144         echo "You don't have the full sem*(2) library." >&4
12145         val="$undef"
12146 fi
12147 set d_sem
12148 eval $setvar
12149
12150 : see whether sys/sem.h defines union semun
12151 echo " "
12152 $cat > try.c <<'END'
12153 #include <sys/types.h>
12154 #include <sys/ipc.h>
12155 #include <sys/sem.h>
12156 int main () { union semun semun; semun.buf = 0; }
12157 END
12158 set try
12159 if eval $compile; then
12160     echo "You have union semun in <sys/sem.h>." >&4
12161     val="$define"
12162 else
12163     echo "You do not have union semun in <sys/sem.h>." >&4
12164     val="$undef"
12165 fi
12166 $rm -f try try.c try.h
12167 set d_union_semun
12168 eval $setvar
12169
12170 : see how to do semctl IPC_STAT
12171 case "$d_sem" in
12172 $define)
12173     : see whether semctl IPC_STAT can use union semun
12174     echo " "
12175     $cat > try.h <<END
12176 #ifndef S_IRUSR
12177 #   ifdef S_IREAD
12178 #       define S_IRUSR S_IREAD
12179 #       define S_IWUSR S_IWRITE
12180 #       define S_IXUSR S_IEXEC
12181 #   else
12182 #       define S_IRUSR 0400
12183 #       define S_IWUSR 0200
12184 #       define S_IXUSR 0100
12185 #   endif
12186 #   define S_IRGRP (S_IRUSR>>3)
12187 #   define S_IWGRP (S_IWUSR>>3)
12188 #   define S_IXGRP (S_IXUSR>>3)
12189 #   define S_IROTH (S_IRUSR>>6)
12190 #   define S_IWOTH (S_IWUSR>>6)
12191 #   define S_IXOTH (S_IXUSR>>6)
12192 #endif
12193 #ifndef S_IRWXU
12194 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12195 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12196 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12197 #endif
12198 END
12199
12200     $cat > try.c <<END
12201 #include <sys/types.h>
12202 #include <sys/ipc.h>
12203 #include <sys/sem.h>
12204 #include <sys/stat.h>
12205 #include <stdio.h>
12206 #include <errno.h>
12207 #include "try.h"
12208 #ifndef errno
12209 extern int errno;
12210 #endif
12211 #$d_union_semun HAS_UNION_SEMUN
12212 int main() {
12213     union semun
12214 #ifndef HAS_UNION_SEMUN
12215     {
12216         int val;
12217         struct semid_ds *buf;
12218         unsigned short *array;
12219     }
12220 #endif
12221     arg;
12222     int sem, st;
12223
12224 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12225     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12226     if (sem > -1) {
12227         struct semid_ds argbuf;
12228         arg.buf = &argbuf;
12229 #       ifdef IPC_STAT
12230         st = semctl(sem, 0, IPC_STAT, arg);
12231         if (st == 0)
12232             printf("semun\n");
12233         else
12234 #       endif /* IPC_STAT */
12235             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12236 #       ifdef IPC_RMID
12237         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12238 #       endif /* IPC_RMID */
12239             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12240     } else
12241 #endif /* IPC_PRIVATE && ... */
12242         printf("semget failed: errno = %d\n", errno);
12243   return 0;
12244 }
12245 END
12246     val="$undef"
12247     set try
12248     if eval $compile; then
12249         xxx=`$run ./try`
12250         case "$xxx" in
12251         semun) val="$define" ;;
12252         esac
12253     fi
12254     $rm -f try try.c
12255     set d_semctl_semun
12256     eval $setvar
12257     case "$d_semctl_semun" in
12258     $define)
12259         echo "You can use union semun for semctl IPC_STAT." >&4
12260         also='also'
12261         ;;
12262     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12263         also=''
12264         ;;
12265     esac
12266
12267     : see whether semctl IPC_STAT can use struct semid_ds pointer
12268     $cat > try.c <<'END'
12269 #include <sys/types.h>
12270 #include <sys/ipc.h>
12271 #include <sys/sem.h>
12272 #include <sys/stat.h>
12273 #include "try.h"
12274 #include <stdio.h>
12275 #include <errno.h>
12276 #ifndef errno
12277 extern int errno;
12278 #endif
12279 int main() {
12280     struct semid_ds arg;
12281     int sem, st;
12282
12283 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12284     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12285     if (sem > -1) {
12286 #       ifdef IPC_STAT
12287         st = semctl(sem, 0, IPC_STAT, &arg);
12288         if (st == 0)
12289             printf("semid_ds\n");
12290         else
12291 #       endif /* IPC_STAT */
12292             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12293 #       ifdef IPC_RMID
12294         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12295 #       endif /* IPC_RMID */
12296             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12297     } else
12298 #endif /* IPC_PRIVATE && ... */
12299         printf("semget failed: errno = %d\n", errno);
12300
12301     return 0;
12302 }
12303 END
12304     val="$undef"
12305     set try
12306     if eval $compile; then
12307         xxx=`$run ./try`
12308         case "$xxx" in
12309         semid_ds) val="$define" ;;
12310         esac
12311     fi
12312     $rm -f try try.c
12313     set d_semctl_semid_ds
12314     eval $setvar
12315     case "$d_semctl_semid_ds" in
12316     $define)
12317         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12318         ;;
12319     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12320         ;;
12321     esac
12322     $rm -f try.h
12323     ;;
12324 *)  val="$undef"
12325
12326     # We do not have the full sem*(2) library, so assume we can not
12327     # use either.
12328
12329     set d_semctl_semun
12330     eval $setvar
12331
12332     set d_semctl_semid_ds
12333     eval $setvar
12334     ;;
12335 esac
12336
12337 : see if sendmsg exists
12338 set sendmsg d_sendmsg
12339 eval $inlibc
12340
12341 : see if setegid exists
12342 set setegid d_setegid
12343 eval $inlibc
12344
12345 : see if seteuid exists
12346 set seteuid d_seteuid
12347 eval $inlibc
12348
12349 : see if setgrent exists
12350 set setgrent d_setgrent
12351 eval $inlibc
12352
12353 : see if sethostent exists
12354 set sethostent d_sethent
12355 eval $inlibc
12356
12357 : see if setitimer exists
12358 set setitimer d_setitimer
12359 eval $inlibc
12360
12361 : see if setlinebuf exists
12362 set setlinebuf d_setlinebuf
12363 eval $inlibc
12364
12365 : see if setlocale exists
12366 set setlocale d_setlocale
12367 eval $inlibc
12368
12369 : see if setnetent exists
12370 set setnetent d_setnent
12371 eval $inlibc
12372
12373 : see if setprotoent exists
12374 set setprotoent d_setpent
12375 eval $inlibc
12376
12377 : see if setpgid exists
12378 set setpgid d_setpgid
12379 eval $inlibc
12380
12381 : see if setpgrp2 exists
12382 set setpgrp2 d_setpgrp2
12383 eval $inlibc
12384
12385 : see if setpriority exists
12386 set setpriority d_setprior
12387 eval $inlibc
12388
12389 : see if setproctitle exists
12390 set setproctitle d_setproctitle
12391 eval $inlibc
12392
12393 : see if setpwent exists
12394 set setpwent d_setpwent
12395 eval $inlibc
12396
12397 : see if setregid exists
12398 set setregid d_setregid
12399 eval $inlibc
12400 set setresgid d_setresgid
12401 eval $inlibc
12402
12403 : see if setreuid exists
12404 set setreuid d_setreuid
12405 eval $inlibc
12406 set setresuid d_setresuid
12407 eval $inlibc
12408
12409 : see if setrgid exists
12410 set setrgid d_setrgid
12411 eval $inlibc
12412
12413 : see if setruid exists
12414 set setruid d_setruid
12415 eval $inlibc
12416
12417 : see if setservent exists
12418 set setservent d_setsent
12419 eval $inlibc
12420
12421 : see if setsid exists
12422 set setsid d_setsid
12423 eval $inlibc
12424
12425 : see if setvbuf exists
12426 set setvbuf d_setvbuf
12427 eval $inlibc
12428
12429 : see if sfio.h is available
12430 set sfio.h i_sfio
12431 eval $inhdr
12432
12433
12434 : see if sfio library is available
12435 case "$i_sfio" in
12436 $define)
12437         val=''
12438         set sfreserve val
12439         eval $inlibc
12440         ;;
12441 *)
12442         val="$undef"
12443         ;;
12444 esac
12445 : Ok, but do we want to use it.
12446 case "$val" in
12447 $define)
12448         case "$usesfio" in
12449         true|$define|[yY]*) dflt='y';;
12450         *) dflt='n';;
12451         esac
12452         echo "$package can use the sfio library, but it is experimental."
12453         case "$useperlio" in
12454         "$undef")
12455             echo "For sfio also the PerlIO abstraction layer is needed."
12456             echo "Earlier you said you wouldn't want that."
12457             ;;
12458         esac
12459         rp="You seem to have sfio available, do you want to try using it?"
12460         . ./myread
12461         case "$ans" in
12462         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12463                 useperlio="$define"
12464                 val="$define"
12465                 ;;
12466         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12467                 val="$undef"
12468                 ;;
12469         esac
12470         ;;
12471 *)      case "$usesfio" in
12472         true|$define|[yY]*)
12473                 echo "Sorry, cannot find sfio on this machine." >&4
12474                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12475                 val="$undef"
12476                 ;;
12477         esac
12478         ;;
12479 esac
12480 set d_sfio
12481 eval $setvar
12482 case "$d_sfio" in
12483 $define) usesfio='true';;
12484 *) usesfio='false';;
12485 esac
12486 case "$d_sfio" in
12487 $define) ;;
12488 *)      : Remove sfio from list of libraries to use
12489         case "$libs" in
12490         *-lsfio*)
12491                 echo "Removing unneeded -lsfio from library list" >&4
12492                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12493                 shift
12494                 libs="$*"
12495                 echo "libs = $libs" >&4
12496                 ;;
12497         esac
12498 ;;
12499 esac
12500
12501
12502 : see if shmctl exists
12503 set shmctl d_shmctl
12504 eval $inlibc
12505
12506 : see if shmget exists
12507 set shmget d_shmget
12508 eval $inlibc
12509
12510 : see if shmat exists
12511 set shmat d_shmat
12512 eval $inlibc
12513 : see what shmat returns
12514 case "$d_shmat" in
12515 "$define")
12516         $cat >shmat.c <<'END'
12517 #include <sys/shm.h>
12518 void *shmat();
12519 END
12520         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12521                 shmattype='void *'
12522         else
12523                 shmattype='char *'
12524         fi
12525         echo "and it returns ($shmattype)." >&4
12526         : see if a prototype for shmat is available
12527         xxx=`./findhdr sys/shm.h`
12528         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12529         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12530                 val="$define"
12531         else
12532                 val="$undef"
12533         fi
12534         $rm -f shmat.[co]
12535         ;;
12536 *)
12537         val="$undef"
12538         ;;
12539 esac
12540 set d_shmatprototype
12541 eval $setvar
12542
12543 : see if shmdt exists
12544 set shmdt d_shmdt
12545 eval $inlibc
12546
12547 : see how much of the 'shm*(2)' library is present.
12548 h_shm=true
12549 echo " "
12550 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12551 *"$undef"*) h_shm=false;;
12552 esac
12553 case "$osname" in
12554 freebsd)
12555     case "`ipcs 2>&1`" in
12556     "SVID shared memory"*"not configured"*)
12557         echo "Your $osname does not have the shm*(2) configured." >&4
12558         h_shm=false
12559         val="$undef"
12560         set shmctl d_shmctl
12561         evat $setvar
12562         set shmget d_shmget
12563         evat $setvar
12564         set shmat d_shmat
12565         evat $setvar
12566         set shmdt d_shmdt
12567         evat $setvar
12568         ;;
12569     esac
12570     ;;
12571 esac
12572 : we could also check for sys/ipc.h ...
12573 if $h_shm && $test `./findhdr sys/shm.h`; then
12574         echo "You have the full shm*(2) library." >&4
12575         val="$define"
12576 else
12577         echo "You don't have the full shm*(2) library." >&4
12578         val="$undef"
12579 fi
12580 set d_shm
12581 eval $setvar
12582
12583 echo " "
12584 : see if we have sigaction
12585 if set sigaction val -f d_sigaction; eval $csym; $val; then
12586         echo 'sigaction() found.' >&4
12587         $cat > try.c <<'EOP'
12588 #include <stdio.h>
12589 #include <sys/types.h>
12590 #include <signal.h>
12591 int main()
12592 {
12593     struct sigaction act, oact;
12594     act.sa_flags = 0;
12595     oact.sa_handler = 0;
12596     /* so that act and oact are used */
12597     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12598 }
12599 EOP
12600         set try
12601         if eval $compile_ok; then
12602                 val="$define"
12603         else
12604                 echo "But you don't seem to have a useable struct sigaction." >&4
12605                 val="$undef"
12606         fi
12607 else
12608         echo 'sigaction NOT found.' >&4
12609         val="$undef"
12610 fi
12611 set d_sigaction; eval $setvar
12612 $rm -f try try$_o try.c
12613
12614 : see if sigprocmask exists
12615 set sigprocmask d_sigprocmask
12616 eval $inlibc
12617
12618 : see if sigsetjmp exists
12619 echo " "
12620 case "$d_sigsetjmp" in
12621 '')
12622         $cat >try.c <<'EOP'
12623 #include <setjmp.h>
12624 sigjmp_buf env;
12625 int set = 1;
12626 int main()
12627 {
12628         if (sigsetjmp(env,1))
12629                 exit(set);
12630         set = 0;
12631         siglongjmp(env, 1);
12632         exit(1);
12633 }
12634 EOP
12635         set try
12636         if eval $compile; then
12637                 if $run ./try >/dev/null 2>&1; then
12638                         echo "POSIX sigsetjmp found." >&4
12639                         val="$define"
12640                 else
12641                         $cat >&4 <<EOM
12642 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12643 I'll ignore them.
12644 EOM
12645                         val="$undef"
12646                 fi
12647         else
12648                 echo "sigsetjmp not found." >&4
12649                 val="$undef"
12650         fi
12651         ;;
12652 *) val="$d_sigsetjmp"
12653         case "$d_sigsetjmp" in
12654         $define) echo "POSIX sigsetjmp found." >&4;;
12655         $undef) echo "sigsetjmp not found." >&4;;
12656         esac
12657         ;;
12658 esac
12659 set d_sigsetjmp
12660 eval $setvar
12661 $rm -f try.c try
12662
12663 : see if sockatmark exists
12664 set sockatmark d_sockatmark
12665 eval $inlibc
12666
12667 : see if prototype for sockatmark is available
12668 echo " "
12669 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12670 eval $hasproto
12671
12672 : see if socks5_init exists
12673 set socks5_init d_socks5_init
12674 eval $inlibc
12675
12676 : see if prototype for setresgid is available
12677 echo " "
12678 set d_sresgproto setresgid $i_unistd unistd.h
12679 eval $hasproto
12680
12681 : see if prototype for setresuid is available
12682 echo " "
12683 set d_sresuproto setresuid $i_unistd unistd.h
12684 eval $hasproto
12685
12686 : see if sys/stat.h is available
12687 set sys/stat.h i_sysstat
12688 eval $inhdr
12689
12690
12691 : see if stat knows about block sizes
12692 echo " "
12693 echo "Checking to see if your struct stat has st_blocks field..." >&4
12694 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12695 eval $hasfield
12696
12697
12698 : see if this is a sys/vfs.h system
12699 set sys/vfs.h i_sysvfs
12700 eval $inhdr
12701
12702
12703 : see if this is a sys/statfs.h system
12704 set sys/statfs.h i_sysstatfs
12705 eval $inhdr
12706
12707
12708 echo " "
12709 echo "Checking to see if your system supports struct statfs..." >&4
12710 set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
12711 eval $hasstruct
12712 case "$d_statfs_s" in
12713 "$define")      echo "Yes, it does."   ;;
12714 *)              echo "No, it doesn't." ;;
12715 esac
12716
12717
12718
12719 : see if struct statfs knows about f_flags
12720 case "$d_statfs_s" in
12721 define) 
12722         echo " "
12723         echo "Checking to see if your struct statfs has f_flags field..." >&4
12724         set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
12725         eval $hasfield
12726         ;;
12727 *)      val="$undef"
12728         set d_statfs_f_flags
12729         eval $setvar
12730         ;;
12731 esac
12732 case "$d_statfs_f_flags" in
12733 "$define")      echo "Yes, it does."   ;;
12734 *)              echo "No, it doesn't." ;;
12735 esac
12736
12737 : see if _ptr and _cnt from stdio act std
12738 echo " "
12739
12740 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12741         echo "(Looks like you have stdio.h from BSD.)"
12742         case "$stdio_ptr" in
12743         '') stdio_ptr='((fp)->_p)'
12744                 ptr_lval=$define
12745                 ;;
12746         *)      ptr_lval=$d_stdio_ptr_lval;;
12747         esac
12748         case "$stdio_cnt" in
12749         '') stdio_cnt='((fp)->_r)'
12750                 cnt_lval=$define
12751                 ;;
12752         *)      cnt_lval=$d_stdio_cnt_lval;;
12753         esac
12754         case "$stdio_base" in
12755         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12756         esac
12757         case "$stdio_bufsiz" in
12758         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12759         esac
12760 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12761         echo "(Looks like you have stdio.h from Linux.)"
12762         case "$stdio_ptr" in
12763         '') stdio_ptr='((fp)->_IO_read_ptr)'
12764                 ptr_lval=$define
12765                 ;;
12766         *)      ptr_lval=$d_stdio_ptr_lval;;
12767         esac
12768         case "$stdio_cnt" in
12769         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12770                 cnt_lval=$undef
12771                 ;;
12772         *)      cnt_lval=$d_stdio_cnt_lval;;
12773         esac
12774         case "$stdio_base" in
12775         '') stdio_base='((fp)->_IO_read_base)';;
12776         esac
12777         case "$stdio_bufsiz" in
12778         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12779         esac
12780 else
12781         case "$stdio_ptr" in
12782         '') stdio_ptr='((fp)->_ptr)'
12783                 ptr_lval=$define
12784                 ;;
12785         *)      ptr_lval=$d_stdio_ptr_lval;;
12786         esac
12787         case "$stdio_cnt" in
12788         '') stdio_cnt='((fp)->_cnt)'
12789                 cnt_lval=$define
12790                 ;;
12791         *)      cnt_lval=$d_stdio_cnt_lval;;
12792         esac
12793         case "$stdio_base" in
12794         '') stdio_base='((fp)->_base)';;
12795         esac
12796         case "$stdio_bufsiz" in
12797         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12798         esac
12799 fi
12800
12801 : test whether _ptr and _cnt really work
12802 echo "Checking how std your stdio is..." >&4
12803 $cat >try.c <<EOP
12804 #include <stdio.h>
12805 #define FILE_ptr(fp)    $stdio_ptr
12806 #define FILE_cnt(fp)    $stdio_cnt
12807 int main() {
12808         FILE *fp = fopen("try.c", "r");
12809         char c = getc(fp);
12810         if (
12811                 18 <= FILE_cnt(fp) &&
12812                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12813         )
12814                 exit(0);
12815         exit(1);
12816 }
12817 EOP
12818 val="$undef"
12819 set try
12820 if eval $compile && $to try.c; then
12821         if $run ./try; then
12822                 echo "Your stdio acts pretty std."
12823                 val="$define"
12824         else
12825                 echo "Your stdio isn't very std."
12826         fi
12827 else
12828         echo "Your stdio doesn't appear very std."
12829 fi
12830 $rm -f try.c try
12831 set d_stdstdio
12832 eval $setvar
12833
12834 : Can _ptr be used as an lvalue?
12835 case "$d_stdstdio$ptr_lval" in
12836 $define$define) val=$define ;;
12837 *) val=$undef ;;
12838 esac
12839 set d_stdio_ptr_lval
12840 eval $setvar
12841
12842 : Can _cnt be used as an lvalue?
12843 case "$d_stdstdio$cnt_lval" in
12844 $define$define) val=$define ;;
12845 *) val=$undef ;;
12846 esac
12847 set d_stdio_cnt_lval
12848 eval $setvar
12849
12850
12851 : test whether setting _ptr sets _cnt as a side effect
12852 d_stdio_ptr_lval_sets_cnt="$undef"
12853 d_stdio_ptr_lval_nochange_cnt="$undef"
12854 case "$d_stdio_ptr_lval$d_stdstdio" in
12855 $define$define)
12856         echo "Checking to see what happens if we set the stdio ptr..." >&4
12857 $cat >try.c <<EOP
12858 #include <stdio.h>
12859 /* Can we scream? */
12860 /* Eat dust sed :-) */
12861 /* In the buffer space, no one can hear you scream. */
12862 #define FILE_ptr(fp)    $stdio_ptr
12863 #define FILE_cnt(fp)    $stdio_cnt
12864 #include <sys/types.h>
12865 int main() {
12866         FILE *fp = fopen("try.c", "r");
12867         int c;
12868         char *ptr;
12869         size_t cnt;
12870         if (!fp) {
12871             puts("Fail even to read");
12872             exit(1);
12873         }
12874         c = getc(fp); /* Read away the first # */
12875         if (c == EOF) {
12876             puts("Fail even to read");
12877             exit(1);
12878         }
12879         if (!(
12880                 18 <= FILE_cnt(fp) &&
12881                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12882         )) {
12883                 puts("Fail even to read");
12884                 exit (1);
12885         }
12886         ptr = (char*) FILE_ptr(fp);
12887         cnt = (size_t)FILE_cnt(fp);
12888
12889         FILE_ptr(fp) += 42;
12890
12891         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12892                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12893                 exit (1);
12894         }
12895         if (FILE_cnt(fp) <= 20) {
12896                 printf ("Fail (<20 chars to test)");
12897                 exit (1);
12898         }
12899         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12900                 puts("Fail compare");
12901                 exit (1);
12902         }
12903         if (cnt == FILE_cnt(fp)) {
12904                 puts("Pass_unchanged");
12905                 exit (0);
12906         }       
12907         if (FILE_cnt(fp) == (cnt - 42)) {
12908                 puts("Pass_changed");
12909                 exit (0);
12910         }
12911         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12912         return 1;
12913
12914 }
12915 EOP
12916         set try
12917         if eval $compile && $to try.c; then
12918                 case `$run ./try` in
12919                 Pass_changed)
12920                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12921                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12922                 Pass_unchanged)
12923                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12924                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12925                 Fail*)
12926                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12927                 *)
12928                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12929         esac
12930         else
12931                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12932         fi
12933         $rm -f try.c try
12934         ;;
12935 esac
12936
12937 : see if _base is also standard
12938 val="$undef"
12939 case "$d_stdstdio" in
12940 $define)
12941         $cat >try.c <<EOP
12942 #include <stdio.h>
12943 #define FILE_base(fp)   $stdio_base
12944 #define FILE_bufsiz(fp) $stdio_bufsiz
12945 int main() {
12946         FILE *fp = fopen("try.c", "r");
12947         char c = getc(fp);
12948         if (
12949                 19 <= FILE_bufsiz(fp) &&
12950                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12951         )
12952                 exit(0);
12953         exit(1);
12954 }
12955 EOP
12956         set try
12957         if eval $compile && $to try.c; then
12958                 if $run ./try; then
12959                         echo "And its _base field acts std."
12960                         val="$define"
12961                 else
12962                         echo "But its _base field isn't std."
12963                 fi
12964         else
12965                 echo "However, it seems to be lacking the _base field."
12966         fi
12967         $rm -f try.c try
12968         ;;
12969 esac
12970 set d_stdiobase
12971 eval $setvar
12972
12973 $cat >&4 <<EOM
12974 Checking how to access stdio streams by file descriptor number...
12975 EOM
12976 case "$stdio_stream_array" in
12977 '')     $cat >try.c <<EOCP
12978 #include <stdio.h>
12979 int main() {
12980   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12981     printf("yes\n");
12982 }
12983 EOCP
12984         for s in _iob __iob __sF
12985         do
12986                 set try -DSTDIO_STREAM_ARRAY=$s
12987                 if eval $compile; then
12988                         case "`$run ./try`" in
12989                         yes)    stdio_stream_array=$s; break ;;
12990                         esac
12991                 fi
12992         done
12993         $rm -f try.* try$exe_ext
12994 esac
12995 case "$stdio_stream_array" in
12996 '')     $cat >&4 <<EOM
12997 I can't figure out how to access stdio streams by file descriptor number.
12998 EOM
12999         d_stdio_stream_array="$undef"
13000         ;;
13001 *)      $cat >&4 <<EOM
13002 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
13003 EOM
13004         d_stdio_stream_array="$define"
13005         ;;
13006 esac
13007
13008 : see if strcoll exists
13009 set strcoll d_strcoll
13010 eval $inlibc
13011
13012 : check for structure copying
13013 echo " "
13014 echo "Checking to see if your C compiler can copy structs..." >&4
13015 $cat >try.c <<'EOCP'
13016 int main()
13017 {
13018         struct blurfl {
13019                 int dyick;
13020         } foo, bar;
13021
13022         foo = bar;
13023 }
13024 EOCP
13025 if $cc -c try.c >/dev/null 2>&1 ; then
13026         val="$define"
13027         echo "Yup, it can."
13028 else
13029         val="$undef"
13030         echo "Nope, it can't."
13031 fi
13032 set d_strctcpy
13033 eval $setvar
13034 $rm -f try.*
13035
13036 : see if strerror and/or sys_errlist[] exist
13037 echo " "
13038 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13039     if set strerror val -f d_strerror; eval $csym; $val; then
13040                 echo 'strerror() found.' >&4
13041                 d_strerror="$define"
13042                 d_strerrm='strerror(e)'
13043                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13044                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13045                         d_syserrlst="$define"
13046                 else
13047                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13048                         d_syserrlst="$undef"
13049                 fi
13050     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13051                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13052                 echo 'strerror() found in string header.' >&4
13053                 d_strerror="$define"
13054                 d_strerrm='strerror(e)'
13055                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13056                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13057                                 d_syserrlst="$define"
13058                 else
13059                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13060                         d_syserrlst="$undef"
13061                 fi
13062     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13063                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13064                 d_strerror="$undef"
13065                 d_syserrlst="$define"
13066                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13067     else
13068                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13069                 d_strerror="$undef"
13070                 d_syserrlst="$undef"
13071                 d_strerrm='"unknown"'
13072     fi
13073 fi
13074
13075 : see if strftime exists
13076 set strftime d_strftime
13077 eval $inlibc
13078
13079 : see if strtod exists
13080 set strtod d_strtod
13081 eval $inlibc
13082
13083 : see if strtol exists
13084 set strtol d_strtol
13085 eval $inlibc
13086
13087 : see if strtold exists
13088 set strtold d_strtold
13089 eval $inlibc
13090
13091 : see if strtoll exists
13092 set strtoll d_strtoll
13093 eval $inlibc
13094
13095 case "$d_longlong-$d_strtoll" in
13096 "$define-$define")
13097         $cat <<EOM
13098 Checking whether your strtoll() works okay...
13099 EOM
13100         $cat >try.c <<'EOCP'
13101 #include <errno.h>
13102 #ifdef __hpux
13103 #define strtoll __strtoll
13104 #endif
13105 #ifdef __EMX__
13106 #define strtoll _strtoll
13107 #endif
13108 #include <stdio.h>
13109 extern long long int strtoll(char *s, char **, int); 
13110 static int bad = 0;
13111 int check(char *s, long long ell, int een) {
13112         long long gll;
13113         errno = 0;
13114         gll = strtoll(s, 0, 10);
13115         if (!((gll == ell) && (errno == een)))
13116                 bad++;
13117 }
13118 int main() {
13119         check(" 1",                                      1LL, 0);
13120         check(" 0",                                      0LL, 0);
13121         check("-1",                                     -1LL, 0);
13122         check("-9223372036854775808", -9223372036854775808LL, 0);
13123         check("-9223372036854775808", -9223372036854775808LL, 0);
13124         check(" 9223372036854775807",  9223372036854775807LL, 0);
13125         check("-9223372036854775808", -9223372036854775808LL, 0);
13126         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13127         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13128         if (!bad)
13129                 printf("ok\n");
13130 }
13131 EOCP
13132         set try
13133         if eval $compile; then
13134                 yyy=`$run ./try`
13135                 case "$yyy" in
13136                 ok) echo "Your strtoll() seems to be working okay." ;;
13137                 *) cat <<EOM >&4
13138 Your strtoll() doesn't seem to be working okay.
13139 EOM
13140                    d_strtoll="$undef"
13141                    ;;
13142                 esac
13143         else
13144                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13145                 d_strtoll="$undef"
13146         fi
13147         ;;
13148 esac
13149
13150 : see if strtoq exists
13151 set strtoq d_strtoq
13152 eval $inlibc
13153
13154 : see if strtoul exists
13155 set strtoul d_strtoul
13156 eval $inlibc
13157
13158 case "$d_strtoul" in
13159 "$define")
13160         $cat <<EOM
13161 Checking whether your strtoul() works okay...
13162 EOM
13163         $cat >try.c <<'EOCP'
13164 #include <errno.h>
13165 #include <stdio.h>
13166 extern unsigned long int strtoul(char *s, char **, int); 
13167 static int bad = 0;
13168 void check(char *s, unsigned long eul, int een) {
13169         unsigned long gul;
13170         errno = 0;
13171         gul = strtoul(s, 0, 10);
13172         if (!((gul == eul) && (errno == een)))
13173                 bad++;
13174 }
13175 int main() {
13176         check(" 1", 1L, 0);
13177         check(" 0", 0L, 0);
13178 EOCP
13179         case "$longsize" in
13180         8)
13181             $cat >>try.c <<'EOCP'
13182         check("18446744073709551615", 18446744073709551615UL, 0);
13183         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13184 #if 0 /* strtoul() for /^-/ strings is undefined. */
13185         check("-1", 18446744073709551615UL, 0);
13186         check("-18446744073709551614", 2, 0);
13187         check("-18446744073709551615", 1, 0);
13188         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13189         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13190 #endif
13191 EOCP
13192                 ;;
13193         4)
13194                     $cat >>try.c <<'EOCP'
13195         check("4294967295", 4294967295UL, 0);
13196         check("4294967296", 4294967295UL, ERANGE);
13197 #if 0 /* strtoul() for /^-/ strings is undefined. */
13198         check("-1", 4294967295UL, 0);
13199         check("-4294967294", 2, 0);
13200         check("-4294967295", 1, 0);
13201         check("-4294967296", 4294967295UL, ERANGE);
13202         check("-4294967297", 4294967295UL, ERANGE);
13203 #endif
13204 EOCP
13205                 ;;
13206         *)
13207 : Should we write these tests to be more portable by sprintf-ing
13208 : ~0 and then manipulating that char string as input for strtol?
13209                 ;;
13210         esac
13211         $cat >>try.c <<'EOCP'
13212         if (!bad)
13213                 printf("ok\n");
13214         return 0;
13215 }
13216 EOCP
13217         set try
13218         if eval $compile; then
13219                 case "`$run ./try`" in
13220                 ok) echo "Your strtoul() seems to be working okay." ;;
13221                 *) cat <<EOM >&4
13222 Your strtoul() doesn't seem to be working okay.
13223 EOM
13224                    d_strtoul="$undef"
13225                    ;;
13226                 esac
13227         fi
13228         ;;
13229 esac
13230
13231 : see if strtoull exists
13232 set strtoull d_strtoull
13233 eval $inlibc
13234
13235 case "$d_longlong-$d_strtoull" in
13236 "$define-$define")
13237         $cat <<EOM
13238 Checking whether your strtoull() works okay...
13239 EOM
13240         $cat >try.c <<'EOCP'
13241 #include <errno.h>
13242 #ifdef __hpux
13243 #define strtoull __strtoull
13244 #endif
13245 #include <stdio.h>
13246 extern unsigned long long int strtoull(char *s, char **, int); 
13247 static int bad = 0;
13248 int check(char *s, long long eull, int een) {
13249         long long gull;
13250         errno = 0;
13251         gull = strtoull(s, 0, 10);
13252         if (!((gull == eull) && (errno == een)))
13253                 bad++;
13254 }
13255 int main() {
13256         check(" 1",                                        1LL, 0);
13257         check(" 0",                                        0LL, 0);
13258         check("18446744073709551615",  18446744073709551615ULL, 0);
13259         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13260 #if 0 /* strtoull() for /^-/ strings is undefined. */
13261         check("-1",                    18446744073709551615ULL, 0);
13262         check("-18446744073709551614",                     2LL, 0);
13263         check("-18446744073709551615",                     1LL, 0);
13264         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13265         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13266 #endif
13267         if (!bad)
13268                 printf("ok\n");
13269 }
13270 EOCP
13271         set try
13272         if eval $compile; then
13273                 case "`$run ./try`" in
13274                 ok) echo "Your strtoull() seems to be working okay." ;;
13275                 *) cat <<EOM >&4
13276 Your strtoull() doesn't seem to be working okay.
13277 EOM
13278                    d_strtoull="$undef"
13279                    ;;
13280                 esac
13281         fi
13282         ;;
13283 esac
13284
13285 : see if strtouq exists
13286 set strtouq d_strtouq
13287 eval $inlibc
13288
13289 case "$d_strtouq" in
13290 "$define")
13291         $cat <<EOM
13292 Checking whether your strtouq() works okay...
13293 EOM
13294         $cat >try.c <<'EOCP'
13295 #include <errno.h>
13296 #include <stdio.h>
13297 extern unsigned long long int strtouq(char *s, char **, int); 
13298 static int bad = 0;
13299 void check(char *s, unsigned long long eull, int een) {
13300         unsigned long long gull;
13301         errno = 0;
13302         gull = strtouq(s, 0, 10);
13303         if (!((gull == eull) && (errno == een)))
13304                 bad++;
13305 }
13306 int main() {
13307         check(" 1",                                        1LL, 0);
13308         check(" 0",                                        0LL, 0);
13309         check("18446744073709551615",  18446744073709551615ULL, 0);
13310         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13311 #if 0 /* strtouq() for /^-/ strings is undefined. */
13312         check("-1",                    18446744073709551615ULL, 0);
13313         check("-18446744073709551614",                     2LL, 0);
13314         check("-18446744073709551615",                     1LL, 0);
13315         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13316         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13317 #endif
13318         if (!bad)
13319                 printf("ok\n");
13320         return 0;
13321 }
13322 EOCP
13323         set try
13324         if eval $compile; then
13325                 case "`$run ./try`" in
13326                 ok) echo "Your strtouq() seems to be working okay." ;;
13327                 *) cat <<EOM >&4
13328 Your strtouq() doesn't seem to be working okay.
13329 EOM
13330                    d_strtouq="$undef"
13331                    ;;
13332                 esac
13333         fi
13334         ;;
13335 esac
13336
13337 : see if strxfrm exists
13338 set strxfrm d_strxfrm
13339 eval $inlibc
13340
13341 : see if symlink exists
13342 set symlink d_symlink
13343 eval $inlibc
13344
13345 : see if syscall exists
13346 set syscall d_syscall
13347 eval $inlibc
13348
13349 : see if prototype for syscall is available
13350 echo " "
13351 set d_syscallproto syscall $i_unistd unistd.h
13352 eval $hasproto
13353
13354 : see if sysconf exists
13355 set sysconf d_sysconf
13356 eval $inlibc
13357
13358 : see if system exists
13359 set system d_system
13360 eval $inlibc
13361
13362 : see if tcgetpgrp exists
13363 set tcgetpgrp d_tcgetpgrp
13364 eval $inlibc
13365
13366 : see if tcsetpgrp exists
13367 set tcsetpgrp d_tcsetpgrp
13368 eval $inlibc
13369
13370 : see if prototype for telldir is available
13371 echo " "
13372 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13373 eval $hasproto
13374
13375 : see if this is a sys/times.h system
13376 set sys/times.h i_systimes
13377 eval $inhdr
13378
13379 : see if times exists
13380 echo " "
13381 if set times val -f d_times; eval $csym; $val; then
13382         echo 'times() found.' >&4
13383         d_times="$define"
13384         inc=''
13385         case "$i_systimes" in
13386         "$define") inc='sys/times.h';;
13387         esac
13388         rp="What is the type returned by times() on this system?"
13389         set clock_t clocktype long stdio.h sys/types.h $inc
13390         eval $typedef_ask
13391 else
13392         echo 'times() NOT found, hope that will do.' >&4
13393         d_times="$undef"
13394         clocktype='int'
13395 fi
13396
13397 : see if truncate exists
13398 set truncate d_truncate
13399 eval $inlibc
13400
13401 : see if tzname[] exists
13402 echo " "
13403 if set tzname val -a d_tzname; eval $csym; $val; then
13404         val="$define"
13405         echo 'tzname[] found.' >&4
13406 else
13407         val="$undef"
13408         echo 'tzname[] NOT found.' >&4
13409 fi
13410 set d_tzname
13411 eval $setvar
13412
13413 case "$osname" in
13414 next|rhapsody|darwin) multiarch="$define" ;;
13415 esac
13416 case "$multiarch" in
13417 ''|[nN]*) multiarch="$undef" ;;
13418 esac
13419
13420 : check for ordering of bytes in a long
13421 echo " "
13422 case "$usecrosscompile$multiarch" in
13423 *$define*)
13424         $cat <<EOM
13425 You seem to be either cross-compiling or doing a multiarchitecture build,
13426 skipping the byteorder check.
13427
13428 EOM
13429         byteorder='ffff'
13430         ;;
13431 *)
13432         case "$byteorder" in
13433         '')
13434                 $cat <<'EOM'
13435 In the following, larger digits indicate more significance.  A big-endian
13436 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13437 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13438 machines may have weird orders like 3412.  A Cray will report 87654321,
13439 an Alpha will report 12345678. If the test program works the default is
13440 probably right.
13441 I'm now running the test program...
13442 EOM
13443                 $cat >try.c <<'EOCP'
13444 #include <stdio.h>
13445 int main()
13446 {
13447         int i;
13448         union {
13449                 unsigned long l;
13450                 char c[sizeof(long)];
13451         } u;
13452
13453         if (sizeof(long) > 4)
13454                 u.l = (0x08070605L << 32) | 0x04030201L;
13455         else
13456                 u.l = 0x04030201L;
13457         for (i = 0; i < sizeof(long); i++)
13458                 printf("%c", u.c[i]+'0');
13459         printf("\n");
13460         exit(0);
13461 }
13462 EOCP
13463                 xxx_prompt=y
13464                 set try
13465                 if eval $compile && ./try > /dev/null; then
13466                         dflt=`$run ./try`
13467                         case "$dflt" in
13468                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13469                                 echo "(The test program ran ok.)"
13470                                 echo "byteorder=$dflt"
13471                                 xxx_prompt=n
13472                         ;;
13473                         ????|????????) echo "(The test program ran ok.)" ;;
13474                         *) echo "(The test program didn't run right for some reason.)" ;;
13475                         esac
13476                 else
13477                         dflt='4321'
13478                         cat <<'EOM'
13479 (I can't seem to compile the test program.  Guessing big-endian...)
13480 EOM
13481                 fi
13482                 case "$xxx_prompt" in
13483                 y)
13484                         rp="What is the order of bytes in a long?"
13485                         . ./myread
13486                         byteorder="$ans"
13487                         ;;
13488                 *)      byteorder=$dflt
13489                         ;;
13490                 esac
13491                 ;;
13492         esac
13493         $rm -f try.c try
13494         ;;
13495 esac
13496
13497
13498 $cat <<EOM
13499
13500 Checking to see whether you can access character data unalignedly...
13501 EOM
13502 case "$d_u32align" in
13503 '')   $cat >try.c <<EOCP
13504 #include <stdio.h>
13505 #define U32 $u32type
13506 #define BYTEORDER 0x$byteorder
13507 #define U8 $u8type
13508 #include <signal.h>
13509 #ifdef SIGBUS
13510 $signal_t bletch(s) int s; { exit(4); }
13511 #endif
13512 int main() {
13513 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13514     U8 *buf = (U8*)"\0\0\0\1\0\0\0\0";
13515     U32 *up;
13516     int i;
13517
13518     if (sizeof(U32) != 4) {
13519         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13520         exit(1);
13521     }
13522
13523     fflush(stdout);
13524
13525 #ifdef SIGBUS
13526     signal(SIGBUS, bletch);
13527 #endif
13528
13529     for (i = 0; i < 4; i++) {
13530         up = (U32*)(buf + i);
13531         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13532                (*up == 1 << (8*(3-i)))  /* little-endian */
13533               )
13534            )
13535         {
13536             printf("read failed (%x)\n", *up);
13537             exit(2);
13538         }
13539     }
13540
13541     /* write test */
13542     for (i = 0; i < 4; i++) {
13543         up = (U32*)(buf + i);
13544         *up = 0xBeef;
13545         if (*up != 0xBeef) {
13546             printf("write failed (%x)\n", *up);
13547             exit(3);
13548         }
13549     }
13550
13551     exit(0);
13552 #else
13553     printf("1\n");
13554     exit(1);
13555 #endif
13556     return 0;
13557 }
13558 EOCP
13559 set try
13560 if eval $compile_ok; then
13561         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13562         $run ./try 2>&1 >/dev/null
13563         case "$?" in
13564         0)      cat >&4 <<EOM
13565 You can access character data pretty unalignedly.
13566 EOM
13567                 d_u32align="$undef"
13568                 ;;
13569         *)      cat >&4 <<EOM
13570 It seems that you must access character data in an aligned manner.
13571 EOM
13572                 d_u32align="$define"
13573                 ;;
13574         esac
13575 else
13576         rp='Can you access character data at unaligned addresses?'
13577         dflt='n'
13578         . ./myread
13579         case "$ans" in
13580         [yY]*)  d_u32align="$undef"  ;;
13581         *)      d_u32align="$define" ;;
13582         esac
13583 fi
13584 $rm -f core core.try.* try.core
13585 ;;
13586 esac
13587
13588 : see if ualarm exists
13589 set ualarm d_ualarm
13590 eval $inlibc
13591
13592 : see if umask exists
13593 set umask d_umask
13594 eval $inlibc
13595
13596 : see if unordered exists
13597 set unordered d_unordered
13598 eval $inlibc
13599
13600 : see if usleep exists
13601 set usleep d_usleep
13602 eval $inlibc
13603
13604 : see if prototype for usleep is available
13605 echo " "
13606 set d_usleepproto usleep $i_unistd unistd.h
13607 eval $hasproto
13608
13609 : see if ustat exists
13610 set ustat d_ustat
13611 eval $inlibc
13612
13613 : backward compatibility for d_hvfork
13614 if test X$d_hvfork != X; then
13615         d_vfork="$d_hvfork"
13616         d_hvfork=''
13617 fi
13618 : see if there is a vfork
13619 val=''
13620 set vfork val
13621 eval $inlibc
13622
13623 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13624 : perl on Solaris 2.x, and probably elsewhere.
13625 case "$val" in
13626 $define)
13627         echo " "
13628         case "$usevfork" in
13629         false) dflt='n';;
13630         *) dflt='y';;
13631         esac
13632         cat <<'EOM'
13633  
13634 Perl can only use a vfork() that doesn't suffer from strict
13635 restrictions on calling functions or modifying global data in
13636 the child.  For example, glibc-2.1 contains such a vfork()
13637 that is unsuitable.  If your system provides a proper fork()
13638 call, chances are that you do NOT want perl to use vfork().
13639
13640 EOM
13641         rp="Do you still want to use vfork()?"
13642         . ./myread
13643         case "$ans" in
13644         y|Y) ;;
13645         *)
13646                 echo "Ok, we won't use vfork()."
13647                 val="$undef"
13648                 ;;
13649         esac
13650         ;;
13651 esac
13652 set d_vfork
13653 eval $setvar
13654 case "$d_vfork" in
13655 $define) usevfork='true';;
13656 *) usevfork='false';;
13657 esac
13658
13659 : see if closedir exists
13660 set closedir d_closedir
13661 eval $inlibc
13662
13663 case "$d_closedir" in
13664 "$define")
13665         echo " "
13666         echo "Checking whether closedir() returns a status..." >&4
13667         cat > try.c <<EOM
13668 #$i_dirent I_DIRENT             /**/
13669 #$i_sysdir I_SYS_DIR            /**/
13670 #$i_sysndir I_SYS_NDIR          /**/
13671 #$i_systypes I_SYS_TYPES        /**/
13672
13673 #if defined(I_SYS_TYPES)
13674 #include <sys/types.h>
13675 #endif
13676 #if defined(I_DIRENT)
13677 #include <dirent.h>
13678 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13679 #include <sys/dir.h>
13680 #endif
13681 #else
13682 #ifdef I_SYS_NDIR
13683 #include <sys/ndir.h>
13684 #else
13685 #ifdef I_SYS_DIR
13686 #ifdef hp9000s500
13687 #include <ndir.h>       /* may be wrong in the future */
13688 #else
13689 #include <sys/dir.h>
13690 #endif
13691 #endif
13692 #endif
13693 #endif 
13694 int main() { return closedir(opendir(".")); }
13695 EOM
13696         set try
13697         if eval $compile_ok; then
13698                 if $run ./try > /dev/null 2>&1 ; then
13699                         echo "Yes, it does."
13700                         val="$undef"
13701                 else
13702                         echo "No, it doesn't."
13703                         val="$define"
13704                 fi
13705         else
13706                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13707                 val="$define"
13708         fi
13709         ;;
13710 *)
13711         val="$undef";
13712         ;;
13713 esac
13714 set d_void_closedir
13715 eval $setvar
13716 $rm -f try try.*
13717 : see if there is a wait4
13718 set wait4 d_wait4
13719 eval $inlibc
13720
13721 : see if waitpid exists
13722 set waitpid d_waitpid
13723 eval $inlibc
13724
13725 : see if wcstombs exists
13726 set wcstombs d_wcstombs
13727 eval $inlibc
13728
13729 : see if wctomb exists
13730 set wctomb d_wctomb
13731 eval $inlibc
13732
13733 : see if writev exists
13734 set writev d_writev
13735 eval $inlibc
13736
13737 : preserve RCS keywords in files with variable substitution, grrr
13738 Date='$Date'
13739 Id='$Id'
13740 Log='$Log'
13741 RCSfile='$RCSfile'
13742 Revision='$Revision'
13743
13744 : check for alignment requirements
13745 echo " "
13746 case "$usecrosscompile$multiarch" in
13747 *$define*)
13748         $cat <<EOM
13749 You seem to be either cross-compiling or doing a multiarchitecture build,
13750 skipping the memory alignment check.
13751
13752 EOM
13753         case "$alignbytes" in
13754         '') alignbytes=8 ;;
13755         esac
13756         ;;
13757 *)
13758         case "$alignbytes" in
13759         '') echo "Checking alignment constraints..." >&4
13760                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13761                         $cat >try.c <<'EOCP'
13762 typedef long double NV;
13763 EOCP
13764                 else
13765                         $cat >try.c <<'EOCP'
13766 typedef double NV;
13767 EOCP
13768                 fi
13769                 $cat >>try.c <<'EOCP'
13770 #include <stdio.h>
13771 struct foobar {
13772         char foo;
13773         NV bar;
13774 } try_algn;
13775 int main()
13776 {
13777     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13778     return(0);
13779 }
13780 EOCP
13781                 set try
13782                 if eval $compile_ok; then
13783                         dflt=`$run ./try`
13784                 else
13785                         dflt='8'
13786                         echo "(I can't seem to compile the test program...)"
13787                 fi
13788                 ;;
13789         *) dflt="$alignbytes"
13790                 ;;
13791         esac
13792         rp="Doubles must be aligned on a how-many-byte boundary?"
13793         . ./myread
13794         alignbytes="$ans"
13795         $rm -f try.c try
13796         ;;
13797 esac
13798
13799
13800 : set the base revision
13801 baserev=5.0
13802
13803 : how do we catenate cpp tokens here?
13804 echo " "
13805 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13806 $cat >cpp_stuff.c <<'EOCP'
13807 #define RCAT(a,b)a/**/b
13808 #define ACAT(a,b)a ## b
13809 RCAT(Rei,ser)
13810 ACAT(Cir,cus)
13811 EOCP
13812 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13813 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13814         echo "Oh!  Smells like ANSI's been here." >&4
13815         echo "We can catify or stringify, separately or together!"
13816         cpp_stuff=42
13817 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13818         echo "Ah, yes!  The good old days!" >&4
13819         echo "However, in the good old days we don't know how to stringify and"
13820         echo "catify at the same time."
13821         cpp_stuff=1
13822 else
13823         $cat >&4 <<EOM
13824 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13825 to have to edit the values of CAT[2-5] in config.h...
13826 EOM
13827         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13828 fi
13829 $rm -f cpp_stuff.*
13830
13831 : see if this is a db.h system
13832 set db.h i_db
13833 eval $inhdr
13834
13835 case "$i_db" in
13836 $define)
13837         : Check db version.
13838         echo " "
13839         echo "Checking Berkeley DB version ..." >&4
13840         $cat >try.c <<EOCP
13841 #$d_const HASCONST
13842 #ifndef HASCONST
13843 #define const
13844 #endif
13845 #include <sys/types.h>
13846 #include <stdio.h>
13847 #include <db.h>
13848 int main(int argc, char *argv[])
13849 {
13850 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13851     int Major, Minor, Patch ;
13852     unsigned long Version ;
13853     (void)db_version(&Major, &Minor, &Patch) ;
13854     if (argc == 2) {
13855         printf("%d %d %d %d %d %d\n",
13856                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13857                Major, Minor, Patch);
13858         exit(0);
13859     }
13860     printf("You have Berkeley DB Version 2 or greater.\n");
13861
13862     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13863                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13864     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13865                 Major, Minor, Patch) ;
13866
13867     /* check that db.h & libdb are compatible */
13868     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13869         printf("db.h and libdb are incompatible.\n") ;
13870         exit(3);        
13871     }
13872
13873     printf("db.h and libdb are compatible.\n") ;
13874
13875     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13876                 + DB_VERSION_PATCH ;
13877
13878     /* needs to be >= 2.3.4 */
13879     if (Version < 2003004) {
13880     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13881         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13882         exit(2);        
13883     }
13884
13885     exit(0);
13886 #else
13887 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13888     if (argc == 2) {
13889         printf("1 0 0\n");
13890         exit(0);
13891     }
13892     printf("You have Berkeley DB Version 1.\n");
13893     exit(0);    /* DB version < 2: the coast is clear. */
13894 #else
13895     exit(1);    /* <db.h> not Berkeley DB? */
13896 #endif
13897 #endif
13898 }
13899 EOCP
13900         set try
13901         if eval $compile_ok && $run ./try; then
13902                 echo 'Looks OK.' >&4
13903                 set `$run ./try 1`
13904                 db_version_major=$1
13905                 db_version_minor=$2
13906                 db_version_patch=$3
13907         else
13908                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13909                 i_db=$undef
13910                 case " $libs " in
13911                 *"-ldb "*)
13912                         : Remove db from list of libraries to use
13913                         echo "Removing unusable -ldb from library list" >&4
13914                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13915                         shift
13916                         libs="$*"
13917                         echo "libs = $libs" >&4
13918                         ;;
13919                 esac
13920         fi
13921         $rm -f try.*
13922         ;;
13923 esac
13924
13925 case "$i_db" in
13926 define)
13927         : Check the return type needed for hash 
13928         echo " "
13929         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13930         $cat >try.c <<EOCP
13931 #$d_const HASCONST
13932 #ifndef HASCONST
13933 #define const
13934 #endif
13935 #include <sys/types.h>
13936 #include <db.h>
13937
13938 #ifndef DB_VERSION_MAJOR
13939 u_int32_t hash_cb (ptr, size)
13940 const void *ptr;
13941 size_t size;
13942 {
13943 }
13944 HASHINFO info;
13945 int main()
13946 {
13947         info.hash = hash_cb;
13948 }
13949 #endif
13950 EOCP
13951         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13952                 if $contains warning try.out >>/dev/null 2>&1 ; then
13953                         db_hashtype='int'
13954                 else
13955                         db_hashtype='u_int32_t'
13956                 fi
13957         else
13958                 : XXX Maybe we should just give up here.
13959                 db_hashtype=u_int32_t
13960                 $cat try.out >&4
13961                 echo "Help:  I can't seem to compile the db test program." >&4
13962                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13963         fi
13964         $rm -f try.*
13965         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13966         ;;
13967 *)      db_hashtype=u_int32_t
13968         ;;
13969 esac
13970 case "$i_db" in
13971 define)
13972         : Check the return type needed for prefix 
13973         echo " "
13974         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13975         cat >try.c <<EOCP
13976 #$d_const HASCONST
13977 #ifndef HASCONST
13978 #define const
13979 #endif
13980 #include <sys/types.h>
13981 #include <db.h>
13982
13983 #ifndef DB_VERSION_MAJOR
13984 size_t prefix_cb (key1, key2)
13985 const DBT *key1;
13986 const DBT *key2;
13987 {
13988 }
13989 BTREEINFO info;
13990 int main()
13991 {
13992         info.prefix = prefix_cb;
13993 }
13994 #endif
13995 EOCP
13996         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13997                 if $contains warning try.out >>/dev/null 2>&1 ; then
13998                         db_prefixtype='int'
13999                 else
14000                         db_prefixtype='size_t'
14001                 fi
14002         else
14003                 db_prefixtype='size_t'
14004                 : XXX Maybe we should just give up here.
14005                 $cat try.out >&4
14006                 echo "Help:  I can't seem to compile the db test program." >&4
14007                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
14008         fi
14009         $rm -f try.*
14010         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
14011         ;;
14012 *)      db_prefixtype='size_t'
14013         ;;
14014 esac
14015
14016
14017 : How can we generate normalized random numbers ?
14018 echo " "
14019 echo "Looking for a random number function..." >&4
14020 case "$randfunc" in
14021 '')
14022         if set drand48 val -f; eval $csym; $val; then
14023                 dflt="drand48"
14024                 echo "Good, found drand48()." >&4
14025         elif set random val -f; eval $csym; $val; then
14026                 dflt="random"
14027                 echo "OK, found random()." >&4
14028         else
14029                 dflt="rand"
14030                 echo "Yick, looks like I have to use rand()." >&4
14031         fi
14032         echo " "
14033         ;;
14034 *)
14035         dflt="$randfunc"
14036         ;;
14037 esac
14038 cont=true
14039
14040 case "$ccflags" in
14041 *-Dmy_rand=*|*-Dmy_srand=*)
14042         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14043         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14044         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14045         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14046         ;;
14047 esac
14048
14049 while $test "$cont"; do
14050         rp="Use which function to generate random numbers?"
14051         . ./myread
14052         if $test "$ans" = "$dflt"; then
14053                 : null
14054         else
14055                 randbits=''
14056         fi
14057         randfunc="$ans"
14058         if set $ans val -f; eval $csym; $val; then
14059                 cont=''
14060         else
14061                 dflt=y
14062                 rp="I cannot find function $ans. Use that name anyway?"
14063                 . ./myread
14064                 dflt=rand
14065                 case "$ans" in
14066                         [yY]*) cont='';;
14067                 esac
14068         fi
14069         case "$cont" in
14070         '')
14071                 case "$randfunc" in
14072                 drand48)
14073                         drand01="drand48()"
14074                         seedfunc="srand48"
14075                         randbits=48
14076                         randseedtype=long
14077                         ;;
14078                 rand|random)
14079                         case "$randbits" in
14080                         '')
14081 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14082                                 $cat >try.c <<EOCP
14083 #$i_unistd I_UNISTD
14084 #$i_stdlib I_STDLIB
14085 #include <stdio.h>
14086 #ifdef I_UNISTD
14087 #  include <unistd.h>
14088 #endif
14089 #ifdef I_STDLIB
14090 #  include <stdlib.h>
14091 #endif
14092 int main()
14093 {
14094         register int i;
14095         register unsigned long tmp;
14096         register unsigned long max = 0L;
14097
14098         for (i = 1000; i; i--) {
14099                 tmp = (unsigned long) $randfunc();
14100                 if (tmp > max) max = tmp;
14101         }
14102         for (i = 0; max; i++)
14103                 max /= 2;
14104         printf("%d\n",i);
14105 }
14106 EOCP
14107                                 set try
14108                                 if eval $compile_ok; then
14109                                         dflt=`try`
14110                                 else
14111                                         dflt='?'
14112                                         echo "(I can't seem to compile the test program...)"
14113                                 fi
14114                                 ;;
14115                         *)
14116                                 dflt="$randbits"
14117                                 ;;
14118                         esac
14119                         rp="How many bits does your $randfunc() function produce?"
14120                         . ./myread
14121                         randbits="$ans"
14122                         $rm -f try.c try
14123                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14124                         seedfunc="s$randfunc"
14125                         randseedtype=unsigned
14126                         ;;
14127                 *)
14128                         dflt="31"
14129                         rp="How many bits does your $randfunc() function produce?"
14130                         . ./myread
14131                         randbits="$ans"
14132                         seedfunc="s$randfunc"
14133                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14134                         if set $seedfunc val -f; eval $csym; $val; then
14135                                 echo "(Using $seedfunc() to seed random generator)"
14136                         else
14137                                 echo "(Warning: no $seedfunc() to seed random generator)"
14138                                 seedfunc=rand
14139                         fi
14140                         randseedtype=unsigned
14141                         ;;
14142                 esac
14143                 ;;
14144         esac
14145 done
14146
14147 echo " "
14148 echo "Determining whether or not we are on an EBCDIC system..." >&4
14149 $cat >try.c <<'EOM'
14150 int main()
14151 {
14152   if ('M'==0xd4) return 0;
14153   return 1;
14154 }
14155 EOM
14156
14157 val=$undef
14158 set try
14159 if eval $compile_ok; then
14160         if $run ./try; then
14161                 echo "You seem to speak EBCDIC." >&4
14162                 val="$define"
14163         else
14164                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14165         fi
14166 else
14167         echo "I'm unable to compile the test program." >&4
14168         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14169 fi
14170 $rm -f try try.*
14171 set ebcdic
14172 eval $setvar
14173
14174 echo " "
14175 $cat >&4 <<EOM
14176 Checking how to flush all pending stdio output...
14177 EOM
14178 # I only know how to find the first 32 possibly open files on SunOS.
14179 # See also hints/sunos_4_1.sh and util.c  --AD
14180 case "$osname" in
14181 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14182 esac
14183 $cat >>try.c <<EOCP
14184 #include <stdio.h>
14185 #$i_unistd I_UNISTD
14186 #ifdef I_UNISTD
14187 # include <unistd.h>
14188 #endif
14189 #$d_sysconf HAS_SYSCONF
14190 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14191 #ifdef HAS_STDIO_STREAM_ARRAY
14192 # define STDIO_STREAM_ARRAY $stdio_stream_array
14193 #endif
14194 int main() {
14195   FILE* p;
14196   unlink("try.out");
14197   p = fopen("try.out", "w");
14198 #ifdef TRY_FPUTC
14199   fputc('x', p);
14200 #else
14201 # ifdef TRY_FPRINTF
14202   fprintf(p, "x");
14203 # endif
14204 #endif
14205 #ifdef TRY_FFLUSH_NULL
14206   fflush(NULL);
14207 #endif
14208 #ifdef TRY_FFLUSH_ALL
14209   {
14210     long open_max = -1;
14211 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14212     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14213 # else
14214 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14215     open_max = sysconf(_SC_OPEN_MAX);
14216 #  else
14217 #   ifdef FOPEN_MAX
14218     open_max = FOPEN_MAX;
14219 #   else
14220 #    ifdef OPEN_MAX
14221     open_max = OPEN_MAX;
14222 #    else
14223 #     ifdef _NFILE
14224     open_max = _NFILE;
14225 #     endif
14226 #    endif
14227 #   endif
14228 #  endif
14229 # endif 
14230 # ifdef HAS_STDIO_STREAM_ARRAY
14231     if (open_max > 0) {
14232       long i;
14233       for (i = 0; i < open_max; i++)
14234             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14235                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14236                 STDIO_STREAM_ARRAY[i]._flag)
14237                 fflush(&STDIO_STREAM_ARRAY[i]);
14238     }   
14239   }
14240 # endif
14241 #endif
14242   _exit(42);
14243 }
14244 EOCP
14245 : first we have to find out how _not_ to flush
14246 $to try.c
14247 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14248     output=''
14249     set try -DTRY_FPUTC
14250     if eval $compile; then
14251             $run ./try 2>/dev/null
14252             code="$?"
14253             $from try.out
14254             if $test ! -s try.out -a "X$code" = X42; then
14255                 output=-DTRY_FPUTC
14256             fi
14257     fi
14258     case "$output" in
14259     '')
14260             set try -DTRY_FPRINTF
14261             if eval $compile; then
14262                     $run ./try 2>/dev/null
14263                     code="$?"
14264                     $from try.out
14265                     if $test ! -s try.out -a "X$code" = X42; then
14266                         output=-DTRY_FPRINTF
14267                     fi
14268             fi
14269         ;;
14270     esac
14271 fi
14272 : check for fflush NULL behaviour
14273 case "$fflushNULL" in
14274 '')     set try -DTRY_FFLUSH_NULL $output
14275         if eval $compile; then
14276                 $run ./try 2>/dev/null
14277                 code="$?"
14278                 $from try.out
14279                 if $test -s try.out -a "X$code" = X42; then
14280                         fflushNULL="`$cat try.out`"
14281                 else
14282                         if $test "X$code" != X42; then
14283                                 $cat >&4 <<EOM
14284 (If this test failed, don't worry, we'll try another method shortly.)
14285 EOM
14286                         fi
14287                 fi
14288         fi
14289         $rm -f core try.core core.try.*
14290         case "$fflushNULL" in
14291         x)      $cat >&4 <<EOM
14292 Your fflush(NULL) works okay for output streams.
14293 Let's see if it clobbers input pipes...
14294 EOM
14295 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14296 # bug that improperly flushes the input end of pipes.  So we avoid the
14297 # autoflush on fork/system/exec support for now. :-(
14298 $cat >tryp.c <<EOCP
14299 #include <stdio.h>
14300 int
14301 main(int argc, char **argv)
14302 {
14303     char buf[1024];
14304     int i;
14305     char *bp = buf;
14306     while (1) {
14307         while ((i = getc(stdin)) != -1
14308                && (*bp++ = i) != '\n'
14309                && bp < &buf[1024])
14310         /* DO NOTHING */ ;
14311         *bp = '\0';
14312         fprintf(stdout, "%s", buf);
14313         fflush(NULL);
14314         if (i == -1)
14315             return 0;
14316         bp = buf;
14317     }
14318 }
14319 EOCP
14320                 fflushNULL="$define"
14321                 set tryp
14322                 if eval $compile; then
14323                     $rm -f tryp.out
14324                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14325                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14326                        $cat >&4 <<EOM
14327 fflush(NULL) seems to behave okay with input streams.
14328 EOM
14329                         fflushNULL="$define"
14330                     else
14331                         $cat >&4 <<EOM
14332 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14333 EOM
14334                         fflushNULL="$undef"
14335                     fi
14336                 fi
14337                 $rm -f core tryp.c tryp.core core.tryp.*
14338                 ;;
14339         '')     $cat >&4 <<EOM
14340 Your fflush(NULL) isn't working (contrary to ANSI C).
14341 EOM
14342                 fflushNULL="$undef"
14343                 ;;
14344         *)      $cat >&4 <<EOM
14345 Cannot figure out whether your fflush(NULL) works or not.
14346 I'm assuming it doesn't (contrary to ANSI C).
14347 EOM
14348                 fflushNULL="$undef"
14349                 ;;
14350         esac
14351         ;;
14352 $define|true|[yY]*)
14353         fflushNULL="$define"
14354         ;;
14355 *)
14356         fflushNULL="$undef"
14357         ;;
14358 esac
14359 : check explicit looping only if NULL did not work, and if the pipe
14360 : bug does not show up on an explicit flush too
14361 case "$fflushNULL" in
14362 "$undef")
14363         $cat >tryp.c <<EOCP
14364 #include <stdio.h>
14365 int
14366 main(int argc, char **argv)
14367 {
14368     char buf[1024];
14369     int i;
14370     char *bp = buf;
14371     while (1) {
14372         while ((i = getc(stdin)) != -1
14373                && (*bp++ = i) != '\n'
14374                && bp < &buf[1024])
14375         /* DO NOTHING */ ;
14376         *bp = '\0';
14377         fprintf(stdout, "%s", buf);
14378         fflush(stdin);
14379         if (i == -1)
14380             return 0;
14381         bp = buf;
14382     }
14383 }
14384 EOCP
14385         set tryp
14386         if eval $compile; then
14387             $rm -f tryp.out
14388             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14389             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14390                $cat >&4 <<EOM
14391 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14392 EOM
14393                 : now check for fflushall behaviour
14394                 case "$fflushall" in
14395                 '')     set try -DTRY_FFLUSH_ALL $output
14396                         if eval $compile; then
14397                                 $cat >&4 <<EOM
14398 (Now testing the other method--but note that this also may fail.)
14399 EOM
14400                                 $run ./try 2>/dev/null
14401                                 code=$?
14402                                 $from try.out
14403                                 if $test -s try.out -a "X$code" = X42; then
14404                                         fflushall="`$cat try.out`"
14405                                 fi
14406                         fi
14407                         $rm -f core try.core core.try.*
14408                         case "$fflushall" in
14409                         x)      $cat >&4 <<EOM
14410 Whew. Flushing explicitly all the stdio streams works.
14411 EOM
14412                                 fflushall="$define"
14413                                 ;;
14414                         '')     $cat >&4 <<EOM
14415 Sigh. Flushing explicitly all the stdio streams doesn't work.
14416 EOM
14417                                 fflushall="$undef"
14418                                 ;;
14419                         *)      $cat >&4 <<EOM
14420 Cannot figure out whether flushing stdio streams explicitly works or not.
14421 I'm assuming it doesn't.
14422 EOM
14423                                 fflushall="$undef"
14424                                 ;;
14425                         esac
14426                         ;;
14427                 "$define"|true|[yY]*)
14428                         fflushall="$define"
14429                         ;;
14430                 *)
14431                         fflushall="$undef"
14432                         ;;
14433                 esac
14434             else
14435                 $cat >&4 <<EOM
14436 All is futile.  Even fflush(stdin) clobbers input pipes!
14437 EOM
14438                 fflushall="$undef"
14439             fi
14440         else
14441             fflushall="$undef"
14442         fi
14443         $rm -f core tryp.c tryp.core core.tryp.*
14444         ;;
14445 *)      fflushall="$undef"
14446         ;;
14447 esac
14448
14449 case "$fflushNULL$fflushall" in
14450 undefundef)
14451         $cat <<EOM
14452 OK, I give up.  I cannot figure out how to flush pending stdio output.
14453 We won't be flushing handles at all before fork/exec/popen.
14454 EOM
14455         ;;
14456 esac
14457 $rm -f try.* try$exe_ext
14458
14459 : Store the full pathname to the ar program for use in the C program
14460 : Respect a hint or command line value for full_ar.
14461 case "$full_ar" in
14462 '') full_ar=$ar ;;
14463 esac
14464
14465 : Store the full pathname to the sed program for use in the C program
14466 full_sed=$sed
14467
14468 : see what type gids are declared as in the kernel
14469 echo " "
14470 echo "Looking for the type for group ids returned by getgid()."
14471 set gid_t gidtype xxx stdio.h sys/types.h
14472 eval $typedef
14473 case "$gidtype" in
14474 xxx)
14475         xxx=`./findhdr sys/user.h`
14476         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14477         case $1 in
14478         unsigned) dflt="$1 $2" ;;
14479         *) dflt="$1" ;;
14480         esac
14481         ;;
14482 *) dflt="$gidtype";;
14483 esac
14484 case "$gidtype" in
14485 gid_t) echo "gid_t found." ;;
14486 *)      rp="What is the type for group ids returned by getgid()?"
14487         . ./myread
14488         gidtype="$ans"
14489         ;;
14490 esac
14491
14492 echo " "
14493 case "$gidtype" in
14494 *_t) zzz="$gidtype"     ;;
14495 *)   zzz="gid"          ;;
14496 esac
14497 echo "Checking the size of $zzz..." >&4 
14498 cat > try.c <<EOCP
14499 #include <sys/types.h>
14500 #include <stdio.h>
14501 int main() {
14502     printf("%d\n", (int)sizeof($gidtype));
14503     exit(0);
14504 }
14505 EOCP
14506 set try
14507 if eval $compile_ok; then
14508         yyy=`$run ./try`
14509         case "$yyy" in
14510         '')     gidsize=4
14511                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14512                 ;;
14513         *)      gidsize=$yyy
14514                 echo "Your $zzz is $gidsize bytes long."
14515                 ;;
14516         esac
14517 else
14518         gidsize=4
14519         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14520 fi
14521
14522
14523 echo " "
14524 case "$gidtype" in
14525 *_t) zzz="$gidtype"     ;;
14526 *)   zzz="gid"          ;;
14527 esac
14528 echo "Checking the sign of $zzz..." >&4 
14529 cat > try.c <<EOCP
14530 #include <sys/types.h>
14531 #include <stdio.h>
14532 int main() {
14533         $gidtype foo = -1;
14534         if (foo < 0)
14535                 printf("-1\n");
14536         else
14537                 printf("1\n");
14538 }
14539 EOCP
14540 set try
14541 if eval $compile; then
14542         yyy=`$run ./try`
14543         case "$yyy" in
14544         '')     gidsign=1
14545                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14546                 ;;
14547         *)      gidsign=$yyy
14548                 case "$gidsign" in
14549                  1) echo "Your $zzz is unsigned." ;;
14550                 -1) echo "Your $zzz is signed."   ;;
14551                 esac
14552                 ;;
14553         esac
14554 else
14555         gidsign=1
14556         echo "(I can't compile the test program--guessing unsigned.)" >&4
14557 fi
14558
14559
14560 echo " "
14561
14562 if $test X"$quadtype" != X; then
14563
14564 echo "Checking how to print 64-bit integers..." >&4
14565
14566 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14567         $cat >try.c <<'EOCP'
14568 #include <sys/types.h>
14569 #include <stdio.h>
14570 int main() {
14571   int q = 12345678901;
14572   printf("%ld\n", q);
14573 }
14574 EOCP
14575         set try
14576         if eval $compile; then
14577                 yyy=`$run ./try`
14578                 case "$yyy" in
14579                 12345678901)
14580                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14581                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14582                         echo "We will use %d."
14583                         ;;
14584                 esac
14585         fi
14586 fi
14587
14588 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14589         $cat >try.c <<'EOCP'
14590 #include <sys/types.h>
14591 #include <stdio.h>
14592 int main() {
14593   long q = 12345678901;
14594   printf("%ld\n", q);
14595 }
14596 EOCP
14597         set try
14598         if eval $compile; then
14599                 yyy=`$run ./try`
14600                 case "$yyy" in
14601                 12345678901)
14602                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14603                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14604                         echo "We will use %ld."
14605                         ;;
14606                 esac
14607         fi
14608 fi
14609
14610 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14611         $cat >try.c <<'EOCP'
14612 #include <sys/types.h>
14613 #include <inttypes.h>
14614 #include <stdio.h>
14615 int main() {
14616   int64_t q = 12345678901;
14617   printf("%" PRId64 "\n", q);
14618 }
14619 EOCP
14620         set try
14621         if eval $compile; then
14622                 yyy=`$run ./try`
14623                 case "$yyy" in
14624                 12345678901)
14625                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14626                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14627                         echo "We will use the C9X style."
14628                         ;;
14629                 esac
14630         fi
14631 fi
14632
14633 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14634         $cat >try.c <<EOCP
14635 #include <sys/types.h>
14636 #include <stdio.h>
14637 int main() {
14638   $quadtype q = 12345678901;
14639   printf("%Ld\n", q);
14640 }
14641 EOCP
14642         set try
14643         if eval $compile; then
14644                 yyy=`$run ./try`
14645                 case "$yyy" in
14646                 12345678901)
14647                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14648                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14649                         echo "We will use %Ld."
14650                         ;;
14651                 esac
14652         fi
14653 fi
14654
14655 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14656         $cat >try.c <<'EOCP'
14657 #include <sys/types.h>
14658 #include <stdio.h>
14659 int main() {
14660   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14661   printf("%lld\n", q);
14662 }
14663 EOCP
14664         set try
14665         if eval $compile; then
14666                 yyy=`$run ./try`
14667                 case "$yyy" in
14668                 12345678901)
14669                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14670                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14671                         echo "We will use the %lld style."
14672                         ;;
14673                 esac
14674         fi
14675 fi
14676
14677 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14678         $cat >try.c <<EOCP
14679 #include <sys/types.h>
14680 #include <stdio.h>
14681 int main() {
14682   $quadtype q = 12345678901;
14683   printf("%qd\n", q);
14684 }
14685 EOCP
14686         set try
14687         if eval $compile; then
14688                 yyy=`$run ./try`
14689                 case "$yyy" in
14690                 12345678901)
14691                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14692                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14693                         echo "We will use %qd."
14694                         ;;
14695                 esac
14696         fi
14697 fi
14698
14699 if $test X"$sPRId64" = X; then
14700         echo "Cannot figure out how to print 64-bit integers." >&4
14701 fi
14702
14703 $rm -f try try.*
14704
14705 fi
14706
14707 case "$sPRId64" in
14708 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14709         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14710         ;;
14711 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14712         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14713         ;;
14714 esac
14715
14716
14717 echo " "
14718 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14719
14720 if $test X"$ivsize" = X8; then
14721         ivdformat="$sPRId64"
14722         uvuformat="$sPRIu64"
14723         uvoformat="$sPRIo64"
14724         uvxformat="$sPRIx64"
14725         uvXUformat="$sPRIXU64"
14726 else
14727         if $test X"$ivsize" = X"$longsize"; then
14728                 ivdformat='"ld"'
14729                 uvuformat='"lu"'
14730                 uvoformat='"lo"'
14731                 uvxformat='"lx"'
14732                 uvXUformat='"lX"'
14733         else
14734                 if $test X"$ivsize" = X"$intsize"; then
14735                         ivdformat='"d"'
14736                         uvuformat='"u"'
14737                         uvoformat='"o"'
14738                         uvxformat='"x"'
14739                         uvXUformat='"X"'
14740                 else
14741                         : far out
14742                         if $test X"$ivsize" = X"$shortsize"; then
14743                                 ivdformat='"hd"'
14744                                 uvuformat='"hu"'
14745                                 uvoformat='"ho"'
14746                                 uvxformat='"hx"'
14747                                 uvXUformat='"hX"'
14748                         fi
14749                 fi
14750         fi
14751 fi
14752
14753 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14754         nveformat="$sPRIeldbl"
14755         nvfformat="$sPRIfldbl"
14756         nvgformat="$sPRIgldbl"
14757         nvEUformat="$sPRIEUldbl"
14758         nvFUformat="$sPRIFUldbl"
14759         nvGUformat="$sPRIGUldbl"
14760 else
14761         nveformat='"e"'
14762         nvfformat='"f"'
14763         nvgformat='"g"'
14764         nvEUformat='"E"'
14765         nvFUformat='"F"'
14766         nvGUformat='"G"'
14767 fi
14768
14769 case "$ivdformat" in
14770 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14771     exit 1
14772     ;;
14773 esac
14774
14775
14776 echo " "
14777 $echo "Checking the format string to be used for gids..." >&4
14778
14779 case "$gidsign" in
14780 -1)     if $test X"$gidsize" = X"$ivsize"; then
14781                 gidformat="$ivdformat"
14782         else
14783                 if $test X"$gidsize" = X"$longsize"; then
14784                         gidformat='"ld"'
14785                 else
14786                         if $test X"$gidsize" = X"$intsize"; then
14787                                 gidformat='"d"'
14788                         else
14789                                 if $test X"$gidsize" = X"$shortsize"; then
14790                                         gidformat='"hd"'
14791                                 fi
14792                         fi
14793                 fi
14794         fi
14795         ;;
14796 *)      if $test X"$gidsize" = X"$uvsize"; then
14797                 gidformat="$uvuformat"
14798         else
14799                 if $test X"$gidsize" = X"$longsize"; then
14800                         gidformat='"lu"'
14801                 else
14802                         if $test X"$gidsize" = X"$intsize"; then
14803                                 gidformat='"u"'
14804                         else
14805                                 if $test X"$gidsize" = X"$shortsize"; then
14806                                         gidformat='"hu"'
14807                                 fi
14808                         fi
14809                 fi
14810         fi
14811         ;;
14812 esac
14813
14814 : see if getgroups exists
14815 set getgroups d_getgrps
14816 eval $inlibc
14817
14818 : see if setgroups exists
14819 set setgroups d_setgrps
14820 eval $inlibc
14821
14822
14823 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14824 echo " "
14825 case "$d_getgrps$d_setgrps" in
14826 *define*)
14827         case "$groupstype" in
14828         '') dflt="$gidtype" ;;
14829         *)  dflt="$groupstype" ;;
14830         esac
14831         $cat <<EOM
14832 What type of pointer is the second argument to getgroups() and setgroups()?
14833 Usually this is the same as group ids, $gidtype, but not always.
14834
14835 EOM
14836         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14837         . ./myread
14838         groupstype="$ans"
14839         ;;
14840 *)  groupstype="$gidtype";;
14841 esac
14842
14843 echo " "
14844 echo "Checking if your $make program sets \$(MAKE)..." >&4
14845 case "$make_set_make" in
14846 '')
14847         $sed 's/^X //' > testmake.mak << 'EOF'
14848 Xall:
14849 X       @echo 'maketemp="$(MAKE)"'
14850 EOF
14851         case "`$make -f testmake.mak 2>/dev/null`" in
14852         *maketemp=*) make_set_make='#' ;;
14853         *)      make_set_make="MAKE=$make" ;;
14854         esac
14855         $rm -f testmake.mak
14856         ;;
14857 esac
14858 case "$make_set_make" in
14859 '#') echo "Yup, it does.";;
14860 *) echo "Nope, it doesn't.";;
14861 esac
14862
14863 : see what type is used for mode_t
14864 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14865 set mode_t modetype int stdio.h sys/types.h
14866 eval $typedef_ask
14867
14868 : see if stdarg is available
14869 echo " "
14870 if $test `./findhdr stdarg.h`; then
14871         echo "<stdarg.h> found." >&4
14872         valstd="$define"
14873 else
14874         echo "<stdarg.h> NOT found." >&4
14875         valstd="$undef"
14876 fi
14877
14878 : see if varags is available
14879 echo " "
14880 if $test `./findhdr varargs.h`; then
14881         echo "<varargs.h> found." >&4
14882 else
14883         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14884 fi
14885
14886 : set up the varargs testing programs
14887 $cat > varargs.c <<EOP
14888 #ifdef I_STDARG
14889 #include <stdarg.h>
14890 #endif
14891 #ifdef I_VARARGS
14892 #include <varargs.h>
14893 #endif
14894
14895 #ifdef I_STDARG
14896 int f(char *p, ...)
14897 #else
14898 int f(va_alist)
14899 va_dcl
14900 #endif
14901 {
14902         va_list ap;
14903 #ifndef I_STDARG
14904         char *p;
14905 #endif
14906 #ifdef I_STDARG
14907         va_start(ap,p);
14908 #else
14909         va_start(ap);
14910         p = va_arg(ap, char *);
14911 #endif
14912         va_end(ap);
14913 }
14914 EOP
14915 $cat > varargs <<EOP
14916 $startsh
14917 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14918         echo "true"
14919 else
14920         echo "false"
14921 fi
14922 $rm -f varargs$_o
14923 EOP
14924 chmod +x varargs
14925
14926 : now check which varargs header should be included
14927 echo " "
14928 i_varhdr=''
14929 case "$valstd" in
14930 "$define")
14931         if `./varargs I_STDARG`; then
14932                 val='stdarg.h'
14933         elif `./varargs I_VARARGS`; then
14934                 val='varargs.h'
14935         fi
14936         ;;
14937 *)
14938         if `./varargs I_VARARGS`; then
14939                 val='varargs.h'
14940         fi
14941         ;;
14942 esac
14943 case "$val" in
14944 '')
14945 echo "I could not find the definition for va_dcl... You have problems..." >&4
14946         val="$undef"; set i_stdarg; eval $setvar
14947         val="$undef"; set i_varargs; eval $setvar
14948         ;;
14949 *) 
14950         set i_varhdr
14951         eval $setvar
14952         case "$i_varhdr" in
14953         stdarg.h)
14954                 val="$define"; set i_stdarg; eval $setvar
14955                 val="$undef"; set i_varargs; eval $setvar
14956                 ;;
14957         varargs.h)
14958                 val="$undef"; set i_stdarg; eval $setvar
14959                 val="$define"; set i_varargs; eval $setvar
14960                 ;;
14961         esac
14962         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14963 esac
14964 $rm -f varargs*
14965
14966 : see if we need va_copy
14967 echo " "
14968 case "$i_stdarg" in
14969 "$define")
14970         $cat >try.c <<EOCP
14971 #include <stdarg.h>
14972 #include <stdio.h>
14973 #$i_stdlib I_STDLIB
14974 #ifdef I_STDLIB
14975 #include <stdlib.h>
14976 #endif
14977 #include <signal.h>
14978
14979 int
14980 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14981 {
14982   return vfprintf(f, fmt, *valp);
14983 }
14984  
14985 int    
14986 myvfprintf(FILE *f, const  char *fmt, va_list val)
14987 {
14988   return ivfprintf(f, fmt, &val);
14989 }
14990       
14991 int
14992 myprintf(char *fmt, ...) 
14993 {
14994   va_list val;
14995   va_start(val, fmt);
14996   return myvfprintf(stdout, fmt, val); 
14997 }         
14998
14999 int
15000 main(int ac, char **av)
15001 {
15002   signal(SIGSEGV, exit);
15003
15004   myprintf("%s%cs all right, then\n", "that", '\'');                            
15005   exit(0);      
15006 }
15007 EOCP
15008         set try
15009         if eval $compile && $run ./try 2>&1 >/dev/null; then
15010                 case "`$run ./try`" in
15011                 "that's all right, then")
15012                         okay=yes
15013                         ;;
15014                 esac
15015         fi
15016         case "$okay" in
15017         yes)    echo "It seems that you don't need va_copy()." >&4
15018                 need_va_copy="$undef"
15019                 ;;
15020         *)      echo "It seems that va_copy() or similar will be needed." >&4
15021                 need_va_copy="$define"
15022                 ;;
15023         esac
15024         $rm -f try.* core core.* *.core *.core.*
15025         ;;
15026 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15027         ;;
15028 esac
15029
15030 : define a fucntion to check prototypes
15031 $cat > protochk <<EOSH
15032 $startsh
15033 cc="$cc"
15034 optimize="$optimize"
15035 ccflags="$ccflags"
15036 prototype="$prototype"
15037 define="$define"
15038 rm=$rm
15039 EOSH
15040
15041 $cat >> protochk <<'EOSH'
15042
15043 $rm -f try.c
15044 foo="$1"
15045 shift
15046 while test $# -ge 2; do
15047         case "$1" in
15048                 $define) echo "#include <$2>" >> try.c ;;
15049                 literal) echo "$2" >> try.c ;;
15050         esac
15051     shift 2
15052 done
15053 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15054 cat >> try.c <<'EOCP'
15055 #ifdef CAN_PROTOTYPE
15056 #define _(args) args
15057 #else
15058 #define _(args) ()
15059 #endif
15060 EOCP
15061 echo "$foo" >> try.c
15062 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15063 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15064 status=$?
15065 $rm -f try.[co]
15066 exit $status
15067 EOSH
15068 chmod +x protochk
15069 $eunicefix protochk
15070
15071 : see what type is used for size_t
15072 rp="What is the type used for the length parameter for string functions?"
15073 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15074 eval $typedef_ask
15075
15076 : check for type of arguments to gethostbyaddr. 
15077 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15078         case "$d_gethbyaddr" in
15079         $define)
15080                 $cat <<EOM
15081
15082 Checking to see what type of arguments are accepted by gethostbyaddr().
15083 EOM
15084                 hdrs="$define sys/types.h
15085                         $d_socket sys/socket.h 
15086                         $i_niin netinet/in.h 
15087                         $i_netdb netdb.h
15088                         $i_unistd unistd.h"
15089                 : The first arg can 'char *' or 'void *'
15090                 : The second arg is some of integral type
15091                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15092                         for yyy in size_t long int; do
15093                                 case "$netdb_host_type" in
15094                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15095                                         if ./protochk "$try" $hdrs; then
15096                                                 echo "Your system accepts $xxx for the first arg."
15097                                                 echo "...and $yyy for the second arg."
15098                                                 netdb_host_type="$xxx"
15099                                                 netdb_hlen_type="$yyy"
15100                                         fi
15101                                         ;;
15102                                 esac
15103                         done
15104                 done
15105                 : In case none of those worked, prompt the user.
15106                 case "$netdb_host_type" in
15107                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15108                         dflt='char *'
15109                         . ./myread
15110                         netdb_host_type=$ans
15111                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15112                         dflt="$sizetype"
15113                         . ./myread
15114                         netdb_hlen_type=$ans
15115                         ;;
15116                 esac
15117                 ;;
15118         *)      : no gethostbyaddr, so pick harmless defaults
15119                 netdb_host_type='char *'
15120                 netdb_hlen_type="$sizetype"
15121                 ;;
15122         esac
15123         # Remove the "const" if needed. -- but then we'll have a 
15124         # prototype clash!
15125         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15126 fi
15127
15128 : check for type of argument to gethostbyname. 
15129 if test "X$netdb_name_type" = X ; then
15130         case "$d_gethbyname" in
15131         $define)
15132                 $cat <<EOM
15133
15134 Checking to see what type of argument is accepted by gethostbyname().
15135 EOM
15136                 hdrs="$define sys/types.h
15137                         $d_socket sys/socket.h 
15138                         $i_niin netinet/in.h 
15139                         $i_netdb netdb.h
15140                         $i_unistd unistd.h"
15141                 for xxx in "const char *" "char *"; do
15142                         case "$netdb_name_type" in
15143                         '')     try="extern struct hostent *gethostbyname($xxx);"
15144                                 if ./protochk "$try" $hdrs; then
15145                                         echo "Your system accepts $xxx."
15146                                         netdb_name_type="$xxx"
15147                                 fi
15148                                 ;;
15149                         esac
15150                 done
15151                 : In case none of those worked, prompt the user.
15152                 case "$netdb_name_type" in
15153                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15154                         dflt='char *'
15155                         . ./myread
15156                         netdb_name_type=$ans
15157                         ;;
15158                 esac
15159                 ;;
15160         *)      : no gethostbyname, so pick harmless default
15161                 netdb_name_type='char *'
15162                 ;;
15163         esac
15164 fi
15165
15166 : check for type of 1st argument to getnetbyaddr. 
15167 if test "X$netdb_net_type" = X ; then
15168         case "$d_getnbyaddr" in
15169         $define)
15170                 $cat <<EOM
15171
15172 Checking to see what type of 1st argument is accepted by getnetbyaddr().
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 in_addr_t "unsigned long" long "unsigned int" int; do
15180                         case "$netdb_net_type" in
15181                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15182                                 if ./protochk "$try" $hdrs; then
15183                                         echo "Your system accepts $xxx."
15184                                         netdb_net_type="$xxx"
15185                                 fi
15186                                 ;;
15187                         esac
15188                 done
15189                 : In case none of those worked, prompt the user.
15190                 case "$netdb_net_type" in
15191                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15192                         dflt='long'
15193                         . ./myread
15194                         netdb_net_type=$ans
15195                         ;;
15196                 esac
15197                 ;;
15198         *)      : no getnetbyaddr, so pick harmless default
15199                 netdb_net_type='long'
15200                 ;;
15201         esac
15202 fi
15203 : locate the preferred pager for this system
15204 case "$pager" in
15205 '')
15206         dflt=''
15207         case "$pg" in
15208         /*) dflt=$pg;;
15209         [a-zA-Z]:/*) dflt=$pg;;
15210         esac
15211         case "$more" in
15212         /*) dflt=$more;;
15213         [a-zA-Z]:/*) dflt=$more;;
15214         esac
15215         case "$less" in
15216         /*) dflt=$less;;
15217         [a-zA-Z]:/*) dflt=$less;;
15218         esac
15219         case "$dflt" in
15220         '') dflt=/usr/ucb/more;;
15221         esac
15222         ;;
15223 *) dflt="$pager";;
15224 esac
15225 echo " "
15226 fn=f/
15227 rp='What pager is used on your system?'
15228 . ./getfile
15229 pager="$ans"
15230
15231 : see what type pids are declared as in the kernel
15232 rp="What is the type of process ids on this system?"
15233 set pid_t pidtype int stdio.h sys/types.h
15234 eval $typedef_ask
15235
15236 : Find earliest binary compatible site_perl subdirectory perl can use.
15237 case "$bincompat5005" in
15238 "$define") xs_apiversion='5.005' ;;
15239 *) xs_apiversion=$version ;;   # The current site_perl version.
15240 esac
15241 : Find earliest pure perl site_perl subdirectory perl can use.
15242 : The versioned directories started at 5.005.
15243 pm_apiversion='5.005'
15244
15245 : see if ar generates random libraries by itself
15246 echo " "
15247 echo "Checking how to generate random libraries on your machine..." >&4
15248 echo 'int bar1() { return bar2(); }' > bar1.c
15249 echo 'int bar2() { return 2; }' > bar2.c
15250 $cat > foo.c <<'EOP'
15251 int main() { printf("%d\n", bar1()); exit(0); }
15252 EOP
15253 $cc $ccflags -c bar1.c >/dev/null 2>&1
15254 $cc $ccflags -c bar2.c >/dev/null 2>&1
15255 $cc $ccflags -c foo.c >/dev/null 2>&1
15256 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15257 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15258         $run ./foobar >/dev/null 2>&1; then
15259         echo "$ar appears to generate random libraries itself."
15260         orderlib=false
15261         ranlib=":"
15262 elif $ar ts bar$_a >/dev/null 2>&1 &&
15263         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15264         $run ./foobar >/dev/null 2>&1; then
15265                 echo "a table of contents needs to be added with '$ar ts'."
15266                 orderlib=false
15267                 ranlib="$ar ts"
15268 else
15269         case "$ranlib" in
15270         :) ranlib='';;
15271         '')
15272                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15273                 $test -f $ranlib || ranlib=''
15274                 ;;
15275         esac
15276         if $test -n "$ranlib"; then
15277                 echo "your system has '$ranlib'; we'll use that."
15278                 orderlib=false
15279         else
15280                 echo "your system doesn't seem to support random libraries"
15281                 echo "so we'll use lorder and tsort to order the libraries."
15282                 orderlib=true
15283                 ranlib=":"
15284         fi
15285 fi
15286 $rm -f foo* bar* 
15287
15288 : check for type of arguments to select. 
15289 case "$selecttype" in
15290 '') case "$d_select" in
15291         $define)
15292                 echo " "
15293                 $cat <<EOM
15294 Checking to see what type of arguments are accepted by select().
15295 EOM
15296                 hdrs="$define sys/types.h
15297                         $i_systime sys/time.h 
15298                         $i_sysselct sys/select.h
15299                         $d_socket sys/socket.h"
15300                 : The first arg can be int, unsigned, or size_t
15301                 : The last arg may or may not be 'const'
15302                 val=''
15303                 : void pointer has been seen but using that
15304                 : breaks the selectminbits test
15305                 for xxx in 'fd_set *' 'int *'; do
15306                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15307                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15308                                         case "$val" in
15309                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15310                                                 if ./protochk "$try" $hdrs; then
15311                                                         echo "Your system accepts $xxx."
15312                                                         val="$xxx"
15313                                                 fi
15314                                                 ;;
15315                                         esac
15316                                 done
15317                         done
15318                 done
15319                 case "$val" in
15320                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15321                         case "$d_fd_set" in
15322                                 $define) dflt="fd_set *" ;;
15323                                 *)              dflt="int *" ;;
15324                         esac
15325                         . ./myread
15326                         val=$ans
15327                         ;;
15328                 esac
15329                 selecttype="$val"
15330                 ;;
15331         *)      : no select, so pick a harmless default
15332                 selecttype='int *'
15333                 ;;
15334         esac
15335         ;;
15336 esac
15337
15338 : check for the select 'width'
15339 case "$selectminbits" in
15340 '') case "$d_select" in
15341         $define)
15342                 $cat <<EOM
15343
15344 Checking to see on how many bits at a time your select() operates...
15345 EOM
15346                 $cat >try.c <<EOCP
15347 #include <sys/types.h>
15348 #$i_time I_TIME
15349 #$i_systime I_SYS_TIME
15350 #$i_systimek I_SYS_TIME_KERNEL
15351 #ifdef I_TIME
15352 #   include <time.h>
15353 #endif
15354 #ifdef I_SYS_TIME
15355 #   ifdef I_SYS_TIME_KERNEL
15356 #       define KERNEL
15357 #   endif
15358 #   include <sys/time.h>
15359 #   ifdef I_SYS_TIME_KERNEL
15360 #       undef KERNEL
15361 #   endif
15362 #endif
15363 #$i_sysselct I_SYS_SELECT
15364 #ifdef I_SYS_SELECT
15365 #include <sys/select.h>
15366 #endif
15367 #$d_socket HAS_SOCKET
15368 #ifdef HAS_SOCKET
15369 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15370 #endif
15371 #include <stdio.h>
15372 $selecttype b;
15373 #define S sizeof(*(b))
15374 #define MINBITS 64
15375 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15376 #define NBITS  (NBYTES * 8)
15377 int main() {
15378     char s[NBYTES];
15379     struct timeval t;
15380     int i;
15381     FILE* fp;
15382     int fd;
15383
15384     fclose(stdin);
15385     fp = fopen("try.c", "r");
15386     if (fp == 0)
15387       exit(1);
15388     fd = fileno(fp);
15389     if (fd < 0)
15390       exit(2);
15391     b = ($selecttype)s;
15392     for (i = 0; i < NBITS; i++)
15393         FD_SET(i, b);
15394     t.tv_sec  = 0;
15395     t.tv_usec = 0;
15396     select(fd + 1, b, 0, 0, &t);
15397     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15398     printf("%d\n", i + 1);
15399     return 0;
15400 }
15401 EOCP
15402                 set try
15403                 if eval $compile_ok; then
15404                         selectminbits=`$run ./try`
15405                         case "$selectminbits" in
15406                         '')     cat >&4 <<EOM
15407 Cannot figure out on how many bits at a time your select() operates.
15408 I'll play safe and guess it is 32 bits.
15409 EOM
15410                                 selectminbits=32
15411                                 bits="32 bits"
15412                                 ;;
15413                         1)      bits="1 bit" ;;
15414                         *)      bits="$selectminbits bits" ;;
15415                         esac
15416                         echo "Your select() operates on $bits at a time." >&4
15417                 else
15418                         rp='What is the minimum number of bits your select() operates on?'
15419                         case "$byteorder" in
15420                         1234|12345678)  dflt=32 ;;
15421                         *)              dflt=1  ;;
15422                         esac
15423                         . ./myread
15424                         val=$ans
15425                         selectminbits="$val"
15426                 fi
15427                 $rm -f try.* try
15428                 ;;
15429         *)      : no select, so pick a harmless default
15430                 selectminbits='32'
15431                 ;;
15432         esac
15433         ;;
15434 esac
15435
15436 : Trace out the files included by signal.h, then look for SIGxxx names.
15437 : Remove SIGARRAYSIZE used by HPUX.
15438 : Remove SIGSTKSIZE used by Linux.
15439 : Remove SIGSTKSZ used by Posix.
15440 : Remove SIGTYP void lines used by OS2.
15441 : Some cpps, like os390, dont give the file name anywhere
15442 if [ "X$fieldn" = X ]; then
15443         : Just make some guesses.  We check them later.
15444         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15445 else
15446         xxx=`echo '#include <signal.h>' |
15447         $cppstdin $cppminus $cppflags 2>/dev/null |
15448         $grep '^[       ]*#.*include' | 
15449         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15450 fi
15451 : Check this list of files to be sure we have parsed the cpp output ok.
15452 : This will also avoid potentially non-existent files, such 
15453 : as ../foo/bar.h
15454 xxxfiles=''
15455 for xx in $xxx /dev/null ; do
15456         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15457 done
15458 : If we have found no files, at least try signal.h
15459 case "$xxxfiles" in
15460 '')     xxxfiles=`./findhdr signal.h` ;;
15461 esac
15462 xxx=`awk '
15463 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15464         print substr($2, 4, 20)
15465 }
15466 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15467         print substr($3, 4, 20)
15468 }' $xxxfiles`
15469 : Append some common names just in case the awk scan failed.
15470 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15471 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15472 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15473 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15474 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15475
15476 : generate a few handy files for later
15477 $cat > signal.c <<'EOCP'
15478 #include <sys/types.h>
15479 #include <signal.h>
15480 #include <stdio.h>
15481 int main() {
15482
15483 /* Strange style to avoid deeply-nested #if/#else/#endif */
15484 #ifndef NSIG
15485 #  ifdef _NSIG
15486 #    define NSIG (_NSIG)
15487 #  endif
15488 #endif
15489
15490 #ifndef NSIG
15491 #  ifdef SIGMAX
15492 #    define NSIG (SIGMAX+1)
15493 #  endif
15494 #endif
15495
15496 #ifndef NSIG
15497 #  ifdef SIG_MAX
15498 #    define NSIG (SIG_MAX+1)
15499 #  endif
15500 #endif
15501
15502 #ifndef NSIG
15503 #  ifdef MAXSIG
15504 #    define NSIG (MAXSIG+1)
15505 #  endif
15506 #endif
15507
15508 #ifndef NSIG
15509 #  ifdef MAX_SIG
15510 #    define NSIG (MAX_SIG+1)
15511 #  endif
15512 #endif
15513
15514 #ifndef NSIG
15515 #  ifdef SIGARRAYSIZE
15516 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15517 #  endif
15518 #endif
15519
15520 #ifndef NSIG
15521 #  ifdef _sys_nsig
15522 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15523 #  endif
15524 #endif
15525
15526 /* Default to some arbitrary number that's big enough to get most
15527    of the common signals.
15528 */
15529 #ifndef NSIG
15530 #    define NSIG 50
15531 #endif
15532
15533 printf("NSIG %d\n", NSIG);
15534
15535 #ifndef JUST_NSIG
15536
15537 EOCP
15538
15539 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15540 {
15541         printf "#ifdef SIG"; printf $1; printf "\n"
15542         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15543         printf $1; printf ");\n"
15544         printf "#endif\n"
15545 }
15546 END {
15547         printf "#endif /* JUST_NSIG */\n";
15548         printf "exit(0);\n}\n";
15549 }
15550 ' >>signal.c
15551 $cat >signal.awk <<'EOP'
15552 BEGIN { ndups = 0 }
15553 $1 ~ /^NSIG$/ { nsig = $2 }
15554 ($1 !~ /^NSIG$/) && (NF == 2) {
15555     if ($2 > maxsig) { maxsig = $2 }
15556     if (sig_name[$2]) {
15557         dup_name[ndups] = $1
15558         dup_num[ndups] = $2
15559         ndups++ 
15560     }
15561     else {
15562         sig_name[$2] = $1
15563         sig_num[$2] = $2
15564     }
15565 }
15566 END { 
15567     if (nsig == 0) {
15568         nsig = maxsig + 1
15569     }
15570     printf("NSIG %d\n", nsig);
15571     for (n = 1; n < nsig; n++) {
15572         if (sig_name[n]) {
15573             printf("%s %d\n", sig_name[n], sig_num[n])
15574         }
15575         else {
15576             printf("NUM%d %d\n", n, n) 
15577         }
15578     }
15579     for (n = 0; n < ndups; n++) {
15580         printf("%s %d\n", dup_name[n], dup_num[n])
15581     }
15582 }
15583 EOP
15584 $cat >signal_cmd <<EOS
15585 $startsh
15586 if $test -s signal.lst; then
15587     echo "Using your existing signal.lst file"
15588         exit 0
15589 fi
15590 xxx="$xxx"
15591 EOS
15592 $cat >>signal_cmd <<'EOS'
15593
15594 set signal
15595 if eval $compile_ok; then
15596         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15597 else
15598         echo "(I can't seem be able to compile the whole test program)" >&4
15599         echo "(I'll try it in little pieces.)" >&4
15600         set signal -DJUST_NSIG
15601         if eval $compile_ok; then
15602                 $run ./signal$_exe > signal.nsg
15603                 $cat signal.nsg
15604         else
15605                 echo "I can't seem to figure out how many signals you have." >&4
15606                 echo "Guessing 50." >&4
15607                 echo 'NSIG 50' > signal.nsg
15608         fi
15609         : Now look at all the signal names, one at a time.
15610         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15611                 $cat > signal.c <<EOCP
15612 #include <sys/types.h>
15613 #include <signal.h>
15614 #include <stdio.h>
15615 int main() {
15616 printf("$xx %d\n", SIG${xx});
15617 return 0;
15618 }
15619 EOCP
15620                 set signal
15621                 if eval $compile; then
15622                         echo "SIG${xx} found."
15623                         $run ./signal$_exe  >> signal.ls1
15624                 else
15625                         echo "SIG${xx} NOT found."
15626                 fi
15627         done
15628         if $test -s signal.ls1; then
15629                 $cat signal.nsg signal.ls1 |
15630                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15631         fi
15632
15633 fi
15634 if $test -s signal.lst; then
15635         :
15636 else
15637         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15638         echo 'kill -l' >signal
15639         set X `csh -f <signal`
15640         $rm -f signal
15641         shift
15642         case $# in
15643         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15644         esac
15645         echo $@ | $tr ' ' $trnl | \
15646             $awk '{ printf "%s %d\n", $1, ++s; }
15647                   END { printf "NSIG %d\n", ++s }' >signal.lst
15648 fi
15649 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15650 EOS
15651 chmod a+x signal_cmd
15652 $eunicefix signal_cmd
15653
15654 : generate list of signal names
15655 echo " "
15656 case "$sig_name_init" in
15657 '') doinit=yes ;;
15658 *)  case "$sig_num_init" in
15659     ''|*,*) doinit=yes ;;
15660     esac ;;
15661 esac
15662 case "$doinit" in
15663 yes)
15664         echo "Generating a list of signal names and numbers..." >&4
15665         . ./signal_cmd
15666         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15667         sig_name=`$awk 'BEGIN { printf "ZERO " }
15668                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15669         sig_num=`$awk  'BEGIN { printf "0 " }
15670                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15671         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15672                              !/^NSIG/   { printf "\"%s\", ", $1 }
15673                              END        { printf "0\n" }' signal.lst`
15674         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15675                              !/^NSIG/   { printf "%d, ", $2}
15676                              END        { printf "0\n"}' signal.lst`
15677         ;;
15678 esac
15679 echo "The following $sig_count signals are available:"
15680 echo " "
15681 echo $sig_name | $awk \
15682 'BEGIN { linelen = 0 }
15683 {
15684         for (i = 1; i <= NF; i++) {
15685                 name = "SIG" $i " "
15686                 linelen = linelen + length(name)
15687                 if (linelen > 70) {
15688                         printf "\n"
15689                         linelen = length(name)
15690                 }
15691                 printf "%s", name
15692         }
15693         printf "\n"
15694 }'
15695 sig_size=`echo $sig_name | awk '{print NF}'`
15696 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15697
15698 echo " "
15699 case "$sizetype" in
15700 *_t) zzz="$sizetype"    ;;
15701 *)   zzz="filesize"     ;;
15702 esac
15703 echo "Checking the size of $zzz..." >&4 
15704 cat > try.c <<EOCP
15705 #include <sys/types.h>
15706 #include <stdio.h>
15707 int main() {
15708     printf("%d\n", (int)sizeof($sizetype));
15709     exit(0);
15710 }
15711 EOCP
15712 set try
15713 if eval $compile_ok; then
15714         yyy=`$run ./try`
15715         case "$yyy" in
15716         '')     sizesize=4
15717                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15718                 ;;
15719         *)      sizesize=$yyy
15720                 echo "Your $zzz size is $sizesize bytes."
15721                 ;;
15722         esac
15723 else
15724         sizesize=4
15725         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15726 fi
15727
15728
15729 : check for socklen_t
15730 echo " "
15731 echo "Checking to see if you have socklen_t..." >&4
15732 $cat >try.c <<EOCP
15733 #include <sys/types.h>
15734 #$d_socket HAS_SOCKET
15735 #ifdef HAS_SOCKET
15736 #include <sys/socket.h>
15737 #endif
15738 int main() { socklen_t x = 16; }
15739 EOCP
15740 set try
15741 if eval $compile; then
15742         val="$define"
15743         echo "You have socklen_t."
15744 else
15745         val="$undef"
15746         echo "You do not have socklen_t."
15747         case "$sizetype" in
15748         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15749         esac
15750 fi
15751 $rm -f try try.*
15752 set d_socklen_t
15753 eval $setvar
15754
15755 : see if this is a socks.h system
15756 set socks.h i_socks
15757 eval $inhdr
15758
15759 : check for type of the size argument to socket calls
15760 case "$d_socket" in
15761 "$define")
15762         $cat <<EOM
15763
15764 Checking to see what type is the last argument of accept().
15765 EOM
15766         yyy=''
15767         case "$d_socklen_t" in
15768         "$define") yyy="$yyy socklen_t"
15769         esac
15770         yyy="$yyy $sizetype int long unsigned"
15771         for xxx in $yyy; do
15772                 case "$socksizetype" in
15773                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15774                         case "$usesocks" in
15775                         "$define")
15776                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15777                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15778                                         socksizetype="$xxx"
15779                                 fi
15780                                 ;;
15781                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15782                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15783                                         socksizetype="$xxx"
15784                                 fi
15785                                 ;;
15786                         esac
15787                         ;;
15788                 esac
15789         done
15790 : In case none of those worked, prompt the user.
15791         case "$socksizetype" in
15792         '')     rp='What is the type for socket address structure sizes?'
15793                 dflt='int'
15794                 . ./myread
15795                 socksizetype=$ans
15796                 ;;
15797         esac
15798         ;;
15799 *)      : no sockets, so pick relatively harmless default
15800         socksizetype='int'
15801         ;;
15802 esac
15803
15804 : see what type is used for signed size_t
15805 set ssize_t ssizetype int stdio.h sys/types.h
15806 eval $typedef
15807 dflt="$ssizetype"
15808 $cat > try.c <<EOM
15809 #include <stdio.h>
15810 #include <sys/types.h>
15811 #define Size_t $sizetype
15812 #define SSize_t $dflt
15813 int main()
15814 {
15815         if (sizeof(Size_t) == sizeof(SSize_t))
15816                 printf("$dflt\n");
15817         else if (sizeof(Size_t) == sizeof(int))
15818                 printf("int\n");
15819         else 
15820                 printf("long\n");
15821         exit(0);
15822 }
15823 EOM
15824 echo " "
15825 set try
15826 if eval $compile_ok && $run ./try > /dev/null; then
15827         ssizetype=`$run ./try`
15828         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15829 else
15830         $cat >&4 <<EOM
15831 Help! I can't compile and run the ssize_t test program: please enlighten me!
15832 (This is probably a misconfiguration in your system or libraries, and
15833 you really ought to fix it.  Still, I'll try anyway.)
15834
15835 I need a type that is the same size as $sizetype, but is guaranteed to
15836 be signed.  Common values are ssize_t, int and long.
15837
15838 EOM
15839         rp="What signed type is the same size as $sizetype?"
15840         . ./myread
15841         ssizetype="$ans"
15842 fi
15843 $rm -f try try.*
15844
15845 : see what type of char stdio uses.
15846 echo " "
15847 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15848 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15849         echo "Your stdio uses unsigned chars." >&4
15850         stdchar="unsigned char"
15851 else
15852         echo "Your stdio uses signed chars." >&4
15853         stdchar="char"
15854 fi
15855 $rm -f stdioh
15856
15857
15858
15859 : see if time exists
15860 echo " "
15861 if test "X$d_time" = X -o X"$timetype" = X; then
15862     if set time val -f d_time; eval $csym; $val; then
15863                 echo 'time() found.' >&4
15864                 val="$define"
15865                 rp="What is the type returned by time() on this system?"
15866                 set time_t timetype long stdio.h sys/types.h
15867                 eval $typedef_ask
15868     else
15869                 echo 'time() not found, hope that will do.' >&4
15870                 val="$undef"
15871                 timetype='int';
15872     fi
15873     set d_time
15874     eval $setvar
15875 fi
15876
15877 : see what type uids are declared as in the kernel
15878 echo " "
15879 echo "Looking for the type for user ids returned by getuid()."
15880 set uid_t uidtype xxx stdio.h sys/types.h
15881 eval $typedef
15882 case "$uidtype" in
15883 xxx)
15884         xxx=`./findhdr sys/user.h`
15885         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15886         case $1 in
15887         unsigned) dflt="$1 $2" ;;
15888         *) dflt="$1" ;;
15889         esac
15890         ;;
15891 *) dflt="$uidtype";;
15892 esac
15893 case "$uidtype" in
15894 uid_t)  echo "uid_t found." ;;
15895 *)      rp="What is the type for user ids returned by getuid()?"
15896         . ./myread
15897         uidtype="$ans"
15898         ;;
15899 esac
15900
15901 echo " "
15902 case "$uidtype" in
15903 *_t) zzz="$uidtype"     ;;
15904 *)   zzz="uid"          ;;
15905 esac
15906 echo "Checking the size of $zzz..." >&4 
15907 cat > try.c <<EOCP
15908 #include <sys/types.h>
15909 #include <stdio.h>
15910 int main() {
15911     printf("%d\n", (int)sizeof($uidtype));
15912     exit(0);
15913 }
15914 EOCP
15915 set try
15916 if eval $compile_ok; then
15917         yyy=`$run ./try`
15918         case "$yyy" in
15919         '')     uidsize=4
15920                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15921                 ;;
15922         *)      uidsize=$yyy
15923                 echo "Your $zzz is $uidsize bytes long."
15924                 ;;
15925         esac
15926 else
15927         uidsize=4
15928         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15929 fi
15930
15931 echo " "
15932 case "$uidtype" in
15933 *_t) zzz="$uidtype"     ;;
15934 *)   zzz="uid"          ;;
15935 esac
15936 echo "Checking the sign of $zzz..." >&4
15937 cat > try.c <<EOCP
15938 #include <sys/types.h>
15939 #include <stdio.h>
15940 int main() {
15941         $uidtype foo = -1;
15942         if (foo < 0)
15943                 printf("-1\n");
15944         else
15945                 printf("1\n");
15946 }
15947 EOCP
15948 set try
15949 if eval $compile; then
15950         yyy=`$run ./try`
15951         case "$yyy" in
15952         '')     uidsign=1
15953                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15954                 ;;
15955         *)      uidsign=$yyy
15956                 case "$uidsign" in
15957                  1) echo "Your $zzz is unsigned." ;;
15958                 -1) echo "Your $zzz is signed."   ;;
15959                 esac
15960                 ;;
15961         esac
15962 else
15963         uidsign=1
15964         echo "(I can't compile the test program--guessing unsigned.)" >&4
15965 fi
15966
15967
15968
15969 echo " "
15970 $echo "Checking the format string to be used for uids..." >&4
15971
15972 case "$uidsign" in
15973 -1)     if $test X"$uidsize" = X"$ivsize"; then
15974                 uidformat="$ivdformat"
15975         else
15976                 if $test X"$uidsize" = X"$longsize"; then
15977                         uidformat='"ld"'
15978                 else
15979                         if $test X"$uidsize" = X"$intsize"; then
15980                                 uidformat='"d"'
15981                         else
15982                                 if $test X"$uidsize" = X"$shortsize"; then
15983                                         uidformat='"hd"'
15984                                 fi
15985                         fi
15986                 fi
15987         fi
15988         ;;
15989 *)      if $test X"$uidsize" = X"$uvsize"; then
15990                 uidformat="$uvuformat"
15991         else
15992                 if $test X"$uidsize" = X"$longsize"; then
15993                         uidformat='"lu"'
15994                 else
15995                         if $test X"$uidsize" = X"$intsize"; then
15996                                 uidformat='"u"'
15997                         else
15998                                 if $test X"$uidsize" = X"$shortsize"; then
15999                                         uidformat='"hu"'
16000                                 fi
16001                         fi
16002                 fi
16003         fi
16004         ;;
16005 esac
16006
16007 : determine compiler compiler
16008 case "$yacc" in
16009 '')
16010         dflt=yacc;;
16011 *)
16012         dflt="$yacc";;
16013 esac
16014 echo " "
16015 comp='yacc'
16016 if $test -f "$byacc$_exe"; then
16017         dflt="$byacc"
16018         comp="byacc or $comp"
16019 fi
16020 if $test -f "$bison$_exe"; then
16021         comp="$comp or bison -y"
16022 fi
16023 rp="Which compiler compiler ($comp) shall I use?"
16024 . ./myread
16025 yacc="$ans"
16026 case "$yacc" in
16027 *bis*)
16028         case "$yacc" in
16029         *-y*) ;;
16030         *)
16031                 yacc="$yacc -y"
16032                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16033                 ;;
16034         esac
16035         ;;
16036 esac
16037
16038 : see if this is a fp.h system
16039 set fp.h i_fp
16040 eval $inhdr
16041
16042 : see if this is a fp_class.h system
16043 set fp_class.h i_fp_class
16044 eval $inhdr
16045
16046 : see if this is a ieeefp.h system
16047 case "$i_ieeefp" in
16048 '' ) set ieeefp.h i_ieeefp
16049      eval $inhdr
16050      ;;
16051 esac
16052
16053 : see if this is a libutil.h system
16054 set libutil.h i_libutil
16055 eval $inhdr
16056
16057 : see if locale.h is available
16058 set locale.h i_locale
16059 eval $inhdr
16060
16061 : see if mach cthreads are available
16062 if test "X$usethreads" = "X$define"; then
16063         set mach/cthreads.h i_machcthr
16064         eval $inhdr
16065 else
16066         i_machcthr="$undef"
16067 fi
16068
16069
16070
16071 : see if this is a math.h system
16072 set math.h i_math
16073 eval $inhdr
16074
16075 : see if this is a mntent.h system
16076 set mntent.h i_mntent
16077 eval $inhdr
16078
16079 : see if ndbm.h is available
16080 set ndbm.h t_ndbm
16081 eval $inhdr
16082
16083 case "$t_ndbm" in
16084 $undef)
16085     # Some Linux distributions such as RedHat 7.1 put the
16086     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16087     if $test -f /usr/include/gdbm/ndbm.h; then
16088         echo '<gdbm/ndbm.h> found.'
16089         ccflags="$ccflags -I/usr/include/gdbm"
16090         cppflags="$cppflags -I/usr/include/gdbm"
16091         t_ndbm=$define
16092     fi
16093     ;;
16094 esac
16095
16096 case "$t_ndbm" in
16097 $define)
16098         : see if dbm_open exists
16099         set dbm_open d_dbm_open
16100         eval $inlibc
16101         case "$d_dbm_open" in
16102         $undef)
16103                 t_ndbm="$undef"
16104                 echo "We won't be including <ndbm.h>"
16105                 ;;
16106         esac
16107         ;;
16108 esac
16109 val="$t_ndbm"
16110 set i_ndbm
16111 eval $setvar
16112
16113 : see if net/errno.h is available
16114 val=''
16115 set net/errno.h val
16116 eval $inhdr
16117
16118 : Unfortunately, it causes problems on some systems.  Arrgh.
16119 case "$val" in
16120 $define)
16121         cat > try.c <<'EOM'
16122 #include <stdio.h>
16123 #include <errno.h>
16124 #include <net/errno.h>
16125 int func()
16126 {
16127         return ENOTSOCK;
16128 }
16129 EOM
16130         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16131                 echo "We'll be including <net/errno.h>." >&4
16132         else
16133                 echo "We won't be including <net/errno.h>." >&4
16134                 val="$undef"
16135         fi
16136         $rm -f try.* try
16137         ;;
16138 esac
16139 set i_neterrno
16140 eval $setvar
16141
16142 : see if netinet/tcp.h is available
16143 set netinet/tcp.h i_netinettcp
16144 eval $inhdr
16145
16146 : see if this is a poll.h system
16147 set poll.h i_poll
16148 eval $inhdr
16149
16150 : see if this is a prot.h system
16151 set prot.h i_prot
16152 eval $inhdr
16153
16154 echo " "
16155 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16156 $cat <<'EOSH' > Cppsym.know
16157 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16158 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16159 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16160 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16161 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16162 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16163 bull c cadmus clipper CMU COFF COMPILER_VERSION
16164 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16165 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16166 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16167 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16168 GLIBC GLIBC_MINOR
16169 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16170 H3050R H3050RX hbullx20 hcx host_mips
16171 hp200 hp300 hp700 HP700 hp800 hp9000
16172 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16173 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16174 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16175 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16176 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16177 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16178 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16179 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16180 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16181 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16182 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16183 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16184 MATH_HAS_NO_SIDE_EFFECTS
16185 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16186 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16187 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16188 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16189 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16190 NetBSD news1500 news1700 news1800 news1900 news3700
16191 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16192 ns32016 ns32332 ns32k nsc32000
16193 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16194 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16195 pc532 pdp11 PGC PIC plexus PORTAR posix
16196 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16197 POSIX_C_SOURCE POSIX_SOURCE POWER
16198 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16199 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16200 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16201 sony sony_news sonyrisc sparc sparclite spectrum
16202 stardent stdc STDC_EXT stratos sun sun3 sun386
16203 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16204 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16205 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16206 sysV68 sysV88 Tek4132 Tek4300 titan
16207 TM3200 TM5400 TM5600
16208 tower tower32 tower32_200 tower32_600 tower32_700
16209 tower32_800 tower32_850 tss
16210 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16211 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16212 unix UNIX95 UNIX99 unixpc unos
16213 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16214 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16215 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16216 USGr4 USGr4_2
16217 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16218 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16219 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16220 z8000
16221 EOSH
16222 # Maybe put other stuff here too.
16223 cat <<EOSH >>Cppsym.know
16224 $osname
16225 EOSH
16226 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16227 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16228 $cat Cppsym.know > Cppsym.c
16229 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16230 $rm -f Cppsym.a Cppsym.b Cppsym.c
16231 cat <<EOSH > Cppsym
16232 $startsh
16233 if $test \$# -gt 0; then
16234     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16235     if $test -s Cppsym.got; then
16236         $rm -f Cppsym.got
16237         exit 0
16238     fi
16239     $rm -f Cppsym.got
16240     exit 1
16241 else
16242     $tr " " "$trnl" | ./Cppsym.try
16243     exit 0
16244 fi
16245 EOSH
16246 chmod +x Cppsym
16247 $eunicefix Cppsym
16248 cat <<EOSH > Cppsym.try
16249 $startsh
16250 cat <<'EOCP' > try.c
16251 #include <stdio.h>
16252 int main() {
16253 EOCP
16254 $awk \\
16255 EOSH
16256 cat <<'EOSH' >> Cppsym.try
16257 'length($1) > 0 {
16258     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
16259     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
16260     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
16261     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
16262 }'       >> try.c
16263 echo 'return 0;}' >> try.c
16264 EOSH
16265 cat <<EOSH >> Cppsym.try
16266 ccflags="$ccflags"
16267 case "$osname-$gccversion" in
16268 irix-) ccflags="\$ccflags -woff 1178" ;;
16269 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16270 esac
16271 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16272 EOSH
16273 chmod +x Cppsym.try
16274 $eunicefix Cppsym.try
16275 ./Cppsym < Cppsym.know > Cppsym.true
16276 : now check the C compiler for additional symbols
16277 postprocess_cc_v=''
16278 case "$osname" in
16279 aix) postprocess_cc_v="|$tr , ' '" ;;
16280 esac
16281 $cat >ccsym <<EOS
16282 $startsh
16283 $cat >tmp.c <<EOF
16284 extern int foo;
16285 EOF
16286 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16287 do
16288         case "\$i" in
16289         -D*) echo "\$i" | $sed 's/^-D//';;
16290         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16291         esac
16292 done
16293 $rm -f try.c
16294 EOS
16295 postprocess_cc_v=''
16296 chmod +x ccsym
16297 $eunicefix ccsym
16298 ./ccsym > ccsym1.raw
16299 if $test -s ccsym1.raw; then
16300        $sort ccsym1.raw | $uniq >ccsym.raw
16301 else
16302        mv ccsym1.raw ccsym.raw
16303 fi
16304
16305 $awk '/\=/ { print $0; next }
16306         { print $0"=1" }' ccsym.raw >ccsym.list
16307 $awk '/\=/ { print $0; next }
16308         { print $0"=1" }' Cppsym.true >ccsym.true
16309 $comm -13 ccsym.true ccsym.list >ccsym.own
16310 $comm -12 ccsym.true ccsym.list >ccsym.com
16311 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16312 also=''
16313 if $test -z ccsym.raw; then
16314         echo "Your C compiler doesn't seem to define any symbols!" >&4
16315         echo " "
16316         echo "However, your C preprocessor defines the following symbols:"
16317         $cat Cppsym.true
16318         ccsymbols=''
16319         cppsymbols=`$cat Cppsym.true`
16320         cppsymbols=`echo $cppsymbols`
16321         cppccsymbols="$cppsymbols"
16322 else
16323         if $test -s ccsym.com; then
16324                 echo "Your C compiler and pre-processor define these symbols:"
16325                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16326                 also='also '
16327                 symbols='ones'
16328                 cppccsymbols=`$cat ccsym.com`
16329                 cppccsymbols=`echo $cppccsymbols`
16330                 $test "$silent" || sleep 1
16331         fi
16332         if $test -s ccsym.cpp; then
16333                 $test "$also" && echo " "
16334                 echo "Your C pre-processor ${also}defines the following symbols:"
16335                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16336                 also='further '
16337                 cppsymbols=`$cat ccsym.cpp`
16338                 cppsymbols=`echo $cppsymbols`
16339                 $test "$silent" || sleep 1
16340         fi
16341         if $test -s ccsym.own; then
16342                 $test "$also" && echo " "
16343                 echo "Your C compiler ${also}defines the following cpp symbols:"
16344                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16345                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16346                 ccsymbols=`$cat ccsym.own`
16347                 ccsymbols=`echo $ccsymbols`
16348                 $test "$silent" || sleep 1
16349         fi
16350 fi
16351
16352 : see if this is a termio system
16353 val="$undef"
16354 val2="$undef"
16355 val3="$undef"
16356 if $test `./findhdr termios.h`; then
16357         set tcsetattr i_termios
16358         eval $inlibc
16359         val3="$i_termios"
16360 fi
16361 echo " "
16362 case "$val3" in
16363 "$define") echo "You have POSIX termios.h... good!" >&4;;
16364 *) if ./Cppsym pyr; then
16365                 case "`/bin/universe`" in
16366                 ucb) if $test `./findhdr sgtty.h`; then
16367                                 val2="$define"
16368                                 echo "<sgtty.h> found." >&4
16369                         else
16370                                 echo "System is pyramid with BSD universe."
16371                                 echo "<sgtty.h> not found--you could have problems." >&4
16372                         fi;;
16373                 *) if $test `./findhdr termio.h`; then
16374                                 val="$define"
16375                                 echo "<termio.h> found." >&4
16376                         else
16377                                 echo "System is pyramid with USG universe."
16378                                 echo "<termio.h> not found--you could have problems." >&4
16379                         fi;;
16380                 esac
16381         elif ./usg; then
16382                 if $test `./findhdr termio.h`; then
16383                         echo "<termio.h> found." >&4
16384                         val="$define"
16385                 elif $test `./findhdr sgtty.h`; then
16386                         echo "<sgtty.h> found." >&4
16387                         val2="$define"
16388                 else
16389 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16390                 fi
16391         else
16392                 if $test `./findhdr sgtty.h`; then
16393                         echo "<sgtty.h> found." >&4
16394                         val2="$define"
16395                 elif $test `./findhdr termio.h`; then
16396                         echo "<termio.h> found." >&4
16397                         val="$define"
16398                 else
16399 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16400                 fi
16401         fi;;
16402 esac
16403 set i_termio; eval $setvar
16404 val=$val2; set i_sgtty; eval $setvar
16405 val=$val3; set i_termios; eval $setvar
16406
16407 : see if this is a shadow.h system
16408 set shadow.h i_shadow
16409 eval $inhdr
16410
16411 : see if stddef is available
16412 set stddef.h i_stddef
16413 eval $inhdr
16414
16415 : see if this is a sunmath.h system
16416 set sunmath.h i_sunmath
16417 eval $inhdr
16418
16419 : see if sys/access.h is available
16420 set sys/access.h i_sysaccess
16421 eval $inhdr
16422
16423 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16424 set sys/filio.h i_sysfilio
16425 eval $inhdr
16426 echo " "
16427 if $test `./findhdr sys/ioctl.h`; then
16428         val="$define"
16429         echo '<sys/ioctl.h> found.' >&4
16430 else
16431         val="$undef"
16432         if $test $i_sysfilio = "$define"; then
16433             echo '<sys/ioctl.h> NOT found.' >&4
16434         else
16435                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16436                 $test $i_termio = "$define" && xxx="termio.h"
16437                 $test $i_termios = "$define" && xxx="termios.h"
16438 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16439         fi
16440 fi
16441 set i_sysioctl
16442 eval $setvar
16443
16444 : see if socket ioctl defs are in sys/sockio.h
16445 echo " "
16446 xxx=`./findhdr sys/sockio.h`
16447 if $test "$xxx"; then
16448         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16449                 val="$define"
16450                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16451         else
16452                 val="$undef"
16453                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16454         fi
16455 else
16456         val="$undef"
16457         $cat <<EOM
16458 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16459 EOM
16460 fi
16461 set i_syssockio
16462 eval $setvar
16463
16464
16465 : see if this is a syslog.h system
16466 set syslog.h i_syslog
16467 eval $inhdr
16468
16469
16470 : see if this is a sys/mode.h system
16471 set sys/mode.h i_sysmode
16472 eval $inhdr
16473
16474 : see if sys/resource.h has to be included
16475 set sys/resource.h i_sysresrc
16476 eval $inhdr
16477
16478 : see if sys/security.h is available
16479 set sys/security.h i_syssecrt
16480 eval $inhdr
16481
16482 : see if this is a sys/statvfs.h system
16483 set sys/statvfs.h i_sysstatvfs
16484 eval $inhdr
16485
16486 : see if this is a sys/un.h system
16487 set sys/un.h i_sysun
16488 eval $inhdr
16489
16490
16491 : see if this is a sys/utsname.h system
16492 set sys/utsname.h i_sysutsname
16493 eval $inhdr
16494
16495 : see if this is a syswait system
16496 set sys/wait.h i_syswait
16497 eval $inhdr
16498
16499 : see if this is a ustat.h system
16500 set ustat.h i_ustat
16501 eval $inhdr
16502
16503 : see if this is an utime system
16504 set utime.h i_utime
16505 eval $inhdr
16506
16507 : see if this is a values.h system
16508 set values.h i_values
16509 eval $inhdr
16510
16511 : see if this is a vfork system
16512 case "$d_vfork" in
16513 "$define")
16514         set vfork.h i_vfork
16515         eval $inhdr
16516         ;;
16517 *)
16518         i_vfork="$undef"
16519         ;;
16520 esac
16521
16522 : see if gdbm.h is available
16523 set gdbm.h t_gdbm
16524 eval $inhdr
16525 case "$t_gdbm" in
16526 $define)
16527         : see if gdbm_open exists
16528         set gdbm_open d_gdbm_open
16529         eval $inlibc
16530         case "$d_gdbm_open" in
16531         $undef)
16532                 t_gdbm="$undef"
16533                 echo "We won't be including <gdbm.h>"
16534                 ;;
16535         esac
16536         ;;
16537 esac
16538 val="$t_gdbm"
16539 set i_gdbm
16540 eval $setvar
16541
16542 echo " "
16543 echo "Looking for extensions..." >&4
16544 : If we are using the old config.sh, known_extensions may contain
16545 : old or inaccurate or duplicate values.
16546 known_extensions=''
16547 nonxs_extensions=''
16548 : We do not use find because it might not be available.
16549 : We do not just use MANIFEST because the user may have dropped
16550 : some additional extensions into the source tree and expect them
16551 : to be built.
16552
16553 : Function to recursively find available extensions, ignoring DynaLoader
16554 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16555 find_extensions='
16556     for xxx in *; do
16557        case "$xxx" in
16558            DynaLoader|dynaload) ;;
16559            *)
16560            if $test -f $xxx/$xxx.xs; then
16561                known_extensions="$known_extensions $1$xxx";
16562            elif $test -f $xxx/Makefile.PL; then
16563                nonxs_extensions="$nonxs_extensions $1$xxx";
16564            else
16565                if $test -d $xxx -a $# -lt 10; then
16566                    set $1$xxx/ $*;
16567                    cd "$xxx";
16568                    eval $find_extensions;
16569                    cd ..;
16570                    shift;
16571                fi;
16572            fi
16573            ;;
16574        esac;
16575     done'
16576 tdir=`pwd`
16577 cd "$rsrc/ext"
16578 set X
16579 shift
16580 eval $find_extensions
16581 # Special case:  Add in threads/shared since it is not picked up by the
16582 # recursive find above (and adding in general recursive finding breaks
16583 # SDBM_File/sdbm).  A.D.  10/25/2001.
16584 known_extensions="$known_extensions threads/shared"
16585 set X $nonxs_extensions
16586 shift
16587 nonxs_extensions="$*"
16588 set X $known_extensions
16589 shift
16590 known_extensions="$*"
16591 cd "$tdir"
16592
16593 : Now see which are supported on this system.
16594 avail_ext=''
16595 for xxx in $known_extensions ; do
16596         case "$xxx" in
16597         DB_File|db_file)
16598                 case "$i_db" in
16599                 $define) avail_ext="$avail_ext $xxx" ;;
16600                 esac
16601                 ;;
16602         GDBM_File|gdbm_fil)
16603                 case "$i_gdbm" in 
16604                 $define) avail_ext="$avail_ext $xxx" ;;
16605                 esac
16606                 ;;
16607         I18N/Langinfo|i18n_lan)
16608                 case "$i_langinfo$d_nl_langinfo" in 
16609                 $define$define) avail_ext="$avail_ext $xxx" ;;
16610                 esac
16611                 ;;
16612         NDBM_File|ndbm_fil)
16613                 case "$i_ndbm" in
16614                 $define)
16615                     case "$osname-$use64bitint" in
16616                     cygwin-*|hpux-define)
16617                         case "$libs" in
16618                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16619                         esac
16620                         ;;
16621                     *) avail_ext="$avail_ext $xxx" ;;
16622                     esac
16623                     ;;
16624                 esac
16625                 ;;
16626         ODBM_File|odbm_fil) 
16627                 case "${i_dbm}${i_rpcsvcdbm}" in
16628                 *"${define}"*)
16629                     case "$osname-$use64bitint" in
16630                     cygwin-*|hpux-define)
16631                         case "$libs" in
16632                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16633                         esac
16634                         ;;
16635                     *) avail_ext="$avail_ext $xxx" ;;
16636                     esac
16637                     ;;
16638                 esac
16639                 ;;
16640         POSIX|posix)
16641                 case "$useposix" in
16642                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16643                 esac
16644                 ;;
16645         Opcode|opcode)
16646                 case "$useopcode" in
16647                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16648                 esac
16649                 ;;
16650         Socket|socket)
16651                 case "$d_socket" in 
16652                 true|$define|y)
16653                     case "$osname" in
16654                     beos) ;; # not unless BONE
16655                     *) avail_ext="$avail_ext $xxx" ;;
16656                     esac
16657                     ;;
16658                 esac
16659                 ;;
16660         Sys/Syslog|sys/syslog)
16661                 : XXX syslog requires socket
16662                 case "$d_socket" in 
16663                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16664                 esac
16665                 ;;
16666         Thread|thread)
16667                 case "$usethreads" in
16668                 true|$define|y)
16669                         case "$useithreads" in
16670                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16671                         esac
16672                 esac
16673                 ;;
16674         threads|threads/shared)
16675                 case "$usethreads" in
16676                 true|$define|y)
16677                         case "$useithreads" in
16678                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16679                         esac
16680                 esac
16681                 ;;
16682         IPC/SysV|ipc/sysv)
16683                 : XXX Do we need a useipcsysv variable here
16684                 case "${d_msg}${d_sem}${d_shm}" in 
16685                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16686                 esac
16687                 ;;
16688         *)      avail_ext="$avail_ext $xxx"
16689                 ;;
16690         esac
16691 done
16692
16693 set X $avail_ext
16694 shift
16695 avail_ext="$*"
16696
16697 : Now see which nonxs extensions are supported on this system.
16698 : For now assume all are.
16699 nonxs_ext=''
16700 for xxx in $nonxs_extensions ; do
16701         case "$xxx" in
16702         *)      nonxs_ext="$nonxs_ext $xxx"
16703                 ;;
16704         esac
16705 done
16706
16707 set X $nonxs_ext
16708 shift
16709 nonxs_ext="$*"
16710
16711 case $usedl in
16712 $define)
16713         $cat <<EOM
16714 A number of extensions are supplied with $package.  You may choose to
16715 compile these extensions for dynamic loading (the default), compile
16716 them into the $package executable (static loading), or not include
16717 them at all.  Answer "none" to include no extensions.
16718 Note that DynaLoader is always built and need not be mentioned here.
16719
16720 EOM
16721         case "$dynamic_ext" in
16722         '') dflt="$avail_ext" ;;
16723         *)      dflt="$dynamic_ext"
16724                 # Perhaps we are reusing an old out-of-date config.sh.
16725                 case "$hint" in
16726                 previous)
16727                         if test X"$dynamic_ext" != X"$avail_ext"; then
16728                                 $cat <<EOM
16729 NOTICE:  Your previous config.sh list may be incorrect. 
16730 The extensions now available to you are 
16731         ${avail_ext}
16732 but the default list from your previous config.sh is
16733         ${dynamic_ext} 
16734
16735 EOM
16736                         fi
16737                         ;;
16738                 esac
16739                 ;;
16740         esac
16741         case "$dflt" in
16742         '')     dflt=none;;
16743         esac
16744         rp="What extensions do you wish to load dynamically?"
16745         . ./myread
16746         case "$ans" in
16747         none) dynamic_ext=' ' ;;
16748         *) dynamic_ext="$ans" ;;
16749         esac
16750
16751         case "$static_ext" in
16752         '')
16753                 : Exclude those already listed in dynamic linking
16754                 dflt=''
16755                 for xxx in $avail_ext; do
16756                         case " $dynamic_ext " in
16757                         *" $xxx "*) ;;
16758                         *) dflt="$dflt $xxx" ;;
16759                         esac
16760                 done
16761                 set X $dflt
16762                 shift
16763                 dflt="$*"
16764                 ;;
16765         *)  dflt="$static_ext" 
16766                 ;;
16767         esac
16768
16769         case "$dflt" in
16770         '')     dflt=none;;
16771         esac
16772         rp="What extensions do you wish to load statically?"
16773         . ./myread
16774         case "$ans" in
16775         none) static_ext=' ' ;;
16776         *) static_ext="$ans" ;;
16777         esac
16778         ;;
16779 *)
16780         $cat <<EOM
16781 A number of extensions are supplied with $package.  Answer "none" 
16782 to include no extensions. 
16783 Note that DynaLoader is always built and need not be mentioned here.
16784
16785 EOM
16786         case "$static_ext" in
16787         '') dflt="$avail_ext" ;;
16788         *)      dflt="$static_ext"
16789                 # Perhaps we are reusing an old out-of-date config.sh.
16790                 case "$hint" in
16791                 previous)
16792                         if test X"$static_ext" != X"$avail_ext"; then
16793                                 $cat <<EOM
16794 NOTICE:  Your previous config.sh list may be incorrect. 
16795 The extensions now available to you are 
16796         ${avail_ext}
16797 but the default list from your previous config.sh is
16798         ${static_ext} 
16799
16800 EOM
16801                         fi
16802                         ;;
16803                 esac
16804                 ;;
16805         esac
16806         : Exclude those that are not xs extensions
16807         case "$dflt" in
16808         '')     dflt=none;;
16809         esac
16810         rp="What extensions do you wish to include?"
16811         . ./myread
16812         case "$ans" in
16813         none) static_ext=' ' ;;
16814         *) static_ext="$ans" ;;
16815         esac
16816         ;;
16817 esac
16818
16819 set X $dynamic_ext $static_ext $nonxs_ext
16820 shift
16821 extensions="$*"
16822
16823 : Remove libraries needed only for extensions
16824 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16825 : The exception is SunOS 4.x, which needs them.
16826 case "${osname}X${osvers}" in
16827 sunos*X4*)
16828     perllibs="$libs"
16829     ;;
16830 *) case "$usedl" in
16831     $define|true|[yY]*)
16832             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16833             shift
16834             perllibs="$*"
16835             ;;
16836     *)  perllibs="$libs"
16837             ;;
16838     esac
16839     ;;
16840 esac
16841
16842 : Remove build directory name from cppstdin so it can be used from
16843 : either the present location or the final installed location.
16844 echo " "
16845 : Get out of the UU directory to get correct path name.
16846 cd ..
16847 case "$cppstdin" in
16848 `pwd`/cppstdin)
16849         echo "Stripping down cppstdin path name"
16850         cppstdin=cppstdin
16851         ;;
16852 esac
16853 cd UU
16854
16855 : end of configuration questions
16856 echo " "
16857 echo "End of configuration questions."
16858 echo " "
16859
16860 : back to where it started
16861 if test -d ../UU; then
16862         cd ..
16863 fi
16864
16865 : configuration may be patched via a 'config.arch' file
16866 if $test -f config.arch; then
16867         echo "I see a config.arch file, loading it."
16868         . ./config.arch
16869 fi
16870
16871 : configuration may be patched via a 'config.over' file
16872 if $test -f config.over; then
16873         echo " "
16874         dflt=y
16875         rp='I see a config.over file.  Do you wish to load it?'
16876         . UU/myread
16877         case "$ans" in
16878         n*) echo "OK, I'll ignore it.";;
16879         *)      . ./config.over
16880                 echo "Configuration override changes have been loaded."
16881                 ;;
16882         esac
16883 fi
16884
16885 : in case they want portability, strip down executable paths
16886 case "$d_portable" in
16887 "$define")
16888         echo " "
16889         echo "Stripping down executable paths..." >&4
16890         for file in $loclist $trylist; do
16891                 eval temp=\$$file
16892                 eval $file=`basename $temp`
16893         done
16894         ;;
16895 esac
16896
16897 : create config.sh file
16898 echo " "
16899 echo "Creating config.sh..." >&4
16900 $spitshell <<EOT >config.sh
16901 $startsh
16902 #
16903 # This file was produced by running the Configure script. It holds all the
16904 # definitions figured out by Configure. Should you modify one of these values,
16905 # do not forget to propagate your changes by running "Configure -der". You may
16906 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16907 #
16908
16909 # Package name      : $package
16910 # Source directory  : $src
16911 # Configuration time: $cf_time
16912 # Configured by     : $cf_by
16913 # Target system     : $myuname
16914
16915 Author='$Author'
16916 Date='$Date'
16917 Header='$Header'
16918 Id='$Id'
16919 Locker='$Locker'
16920 Log='$Log'
16921 Mcc='$Mcc'
16922 RCSfile='$RCSfile'
16923 Revision='$Revision'
16924 Source='$Source'
16925 State='$State'
16926 _a='$_a'
16927 _exe='$_exe'
16928 _o='$_o'
16929 afs='$afs'
16930 afsroot='$afsroot'
16931 alignbytes='$alignbytes'
16932 ansi2knr='$ansi2knr'
16933 aphostname='$aphostname'
16934 api_revision='$api_revision'
16935 api_subversion='$api_subversion'
16936 api_version='$api_version'
16937 api_versionstring='$api_versionstring'
16938 ar='$ar'
16939 archlib='$archlib'
16940 archlibexp='$archlibexp'
16941 archname64='$archname64'
16942 archname='$archname'
16943 archobjs='$archobjs'
16944 awk='$awk'
16945 baserev='$baserev'
16946 bash='$bash'
16947 bin='$bin'
16948 bincompat5005='$bincompat5005'
16949 binexp='$binexp'
16950 bison='$bison'
16951 byacc='$byacc'
16952 byteorder='$byteorder'
16953 c='$c'
16954 castflags='$castflags'
16955 cat='$cat'
16956 cc='$cc'
16957 cccdlflags='$cccdlflags'
16958 ccdlflags='$ccdlflags'
16959 ccflags='$ccflags'
16960 ccflags_uselargefiles='$ccflags_uselargefiles'
16961 ccname='$ccname'
16962 ccsymbols='$ccsymbols'
16963 ccversion='$ccversion'
16964 cf_by='$cf_by'
16965 cf_email='$cf_email'
16966 cf_time='$cf_time'
16967 charsize='$charsize'
16968 chgrp='$chgrp'
16969 chmod='$chmod'
16970 chown='$chown'
16971 clocktype='$clocktype'
16972 comm='$comm'
16973 compress='$compress'
16974 contains='$contains'
16975 cp='$cp'
16976 cpio='$cpio'
16977 cpp='$cpp'
16978 cpp_stuff='$cpp_stuff'
16979 cppccsymbols='$cppccsymbols'
16980 cppflags='$cppflags'
16981 cpplast='$cpplast'
16982 cppminus='$cppminus'
16983 cpprun='$cpprun'
16984 cppstdin='$cppstdin'
16985 cppsymbols='$cppsymbols'
16986 cryptlib='$cryptlib'
16987 csh='$csh'
16988 d_Gconvert='$d_Gconvert'
16989 d_PRIEUldbl='$d_PRIEUldbl'
16990 d_PRIFUldbl='$d_PRIFUldbl'
16991 d_PRIGUldbl='$d_PRIGUldbl'
16992 d_PRIXU64='$d_PRIXU64'
16993 d_PRId64='$d_PRId64'
16994 d_PRIeldbl='$d_PRIeldbl'
16995 d_PRIfldbl='$d_PRIfldbl'
16996 d_PRIgldbl='$d_PRIgldbl'
16997 d_PRIi64='$d_PRIi64'
16998 d_PRIo64='$d_PRIo64'
16999 d_PRIu64='$d_PRIu64'
17000 d_PRIx64='$d_PRIx64'
17001 d_SCNfldbl='$d_SCNfldbl'
17002 d__fwalk='$d__fwalk'
17003 d_access='$d_access'
17004 d_accessx='$d_accessx'
17005 d_alarm='$d_alarm'
17006 d_archlib='$d_archlib'
17007 d_atolf='$d_atolf'
17008 d_atoll='$d_atoll'
17009 d_attribut='$d_attribut'
17010 d_bcmp='$d_bcmp'
17011 d_bcopy='$d_bcopy'
17012 d_bincompat5005='$d_bincompat5005'
17013 d_bsd='$d_bsd'
17014 d_bsdgetpgrp='$d_bsdgetpgrp'
17015 d_bsdsetpgrp='$d_bsdsetpgrp'
17016 d_bzero='$d_bzero'
17017 d_casti32='$d_casti32'
17018 d_castneg='$d_castneg'
17019 d_charvspr='$d_charvspr'
17020 d_chown='$d_chown'
17021 d_chroot='$d_chroot'
17022 d_chsize='$d_chsize'
17023 d_class='$d_class'
17024 d_closedir='$d_closedir'
17025 d_cmsghdr_s='$d_cmsghdr_s'
17026 d_const='$d_const'
17027 d_crypt='$d_crypt'
17028 d_csh='$d_csh'
17029 d_cuserid='$d_cuserid'
17030 d_dbl_dig='$d_dbl_dig'
17031 d_dbminitproto='$d_dbminitproto'
17032 d_difftime='$d_difftime'
17033 d_dirfd='$d_dirfd'
17034 d_dirnamlen='$d_dirnamlen'
17035 d_dlerror='$d_dlerror'
17036 d_dlopen='$d_dlopen'
17037 d_dlsymun='$d_dlsymun'
17038 d_dosuid='$d_dosuid'
17039 d_drand48proto='$d_drand48proto'
17040 d_dup2='$d_dup2'
17041 d_eaccess='$d_eaccess'
17042 d_endgrent='$d_endgrent'
17043 d_endhent='$d_endhent'
17044 d_endnent='$d_endnent'
17045 d_endpent='$d_endpent'
17046 d_endpwent='$d_endpwent'
17047 d_endsent='$d_endsent'
17048 d_eofnblk='$d_eofnblk'
17049 d_eunice='$d_eunice'
17050 d_fchdir='$d_fchdir'
17051 d_fchmod='$d_fchmod'
17052 d_fchown='$d_fchown'
17053 d_fcntl='$d_fcntl'
17054 d_fcntl_can_lock='$d_fcntl_can_lock'
17055 d_fd_macros='$d_fd_macros'
17056 d_fd_set='$d_fd_set'
17057 d_fds_bits='$d_fds_bits'
17058 d_fgetpos='$d_fgetpos'
17059 d_finite='$d_finite'
17060 d_finitel='$d_finitel'
17061 d_flexfnam='$d_flexfnam'
17062 d_flock='$d_flock'
17063 d_flockproto='$d_flockproto'
17064 d_fork='$d_fork'
17065 d_fp_class='$d_fp_class'
17066 d_fpathconf='$d_fpathconf'
17067 d_fpclass='$d_fpclass'
17068 d_fpclassify='$d_fpclassify'
17069 d_fpclassl='$d_fpclassl'
17070 d_fpos64_t='$d_fpos64_t'
17071 d_frexpl='$d_frexpl'
17072 d_fs_data_s='$d_fs_data_s'
17073 d_fseeko='$d_fseeko'
17074 d_fsetpos='$d_fsetpos'
17075 d_fstatfs='$d_fstatfs'
17076 d_fstatvfs='$d_fstatvfs'
17077 d_fsync='$d_fsync'
17078 d_ftello='$d_ftello'
17079 d_ftime='$d_ftime'
17080 d_getcwd='$d_getcwd'
17081 d_getespwnam='$d_getespwnam'
17082 d_getfsstat='$d_getfsstat'
17083 d_getgrent='$d_getgrent'
17084 d_getgrps='$d_getgrps'
17085 d_gethbyaddr='$d_gethbyaddr'
17086 d_gethbyname='$d_gethbyname'
17087 d_gethent='$d_gethent'
17088 d_gethname='$d_gethname'
17089 d_gethostprotos='$d_gethostprotos'
17090 d_getitimer='$d_getitimer'
17091 d_getlogin='$d_getlogin'
17092 d_getmnt='$d_getmnt'
17093 d_getmntent='$d_getmntent'
17094 d_getnbyaddr='$d_getnbyaddr'
17095 d_getnbyname='$d_getnbyname'
17096 d_getnent='$d_getnent'
17097 d_getnetprotos='$d_getnetprotos'
17098 d_getpagsz='$d_getpagsz'
17099 d_getpbyname='$d_getpbyname'
17100 d_getpbynumber='$d_getpbynumber'
17101 d_getpent='$d_getpent'
17102 d_getpgid='$d_getpgid'
17103 d_getpgrp2='$d_getpgrp2'
17104 d_getpgrp='$d_getpgrp'
17105 d_getppid='$d_getppid'
17106 d_getprior='$d_getprior'
17107 d_getprotoprotos='$d_getprotoprotos'
17108 d_getprpwnam='$d_getprpwnam'
17109 d_getpwent='$d_getpwent'
17110 d_getsbyname='$d_getsbyname'
17111 d_getsbyport='$d_getsbyport'
17112 d_getsent='$d_getsent'
17113 d_getservprotos='$d_getservprotos'
17114 d_getspnam='$d_getspnam'
17115 d_gettimeod='$d_gettimeod'
17116 d_gnulibc='$d_gnulibc'
17117 d_grpasswd='$d_grpasswd'
17118 d_hasmntopt='$d_hasmntopt'
17119 d_htonl='$d_htonl'
17120 d_index='$d_index'
17121 d_inetaton='$d_inetaton'
17122 d_int64_t='$d_int64_t'
17123 d_isascii='$d_isascii'
17124 d_isfinite='$d_isfinite'
17125 d_isinf='$d_isinf'
17126 d_isnan='$d_isnan'
17127 d_isnanl='$d_isnanl'
17128 d_killpg='$d_killpg'
17129 d_lchown='$d_lchown'
17130 d_ldbl_dig='$d_ldbl_dig'
17131 d_link='$d_link'
17132 d_locconv='$d_locconv'
17133 d_lockf='$d_lockf'
17134 d_longdbl='$d_longdbl'
17135 d_longlong='$d_longlong'
17136 d_lseekproto='$d_lseekproto'
17137 d_lstat='$d_lstat'
17138 d_madvise='$d_madvise'
17139 d_mblen='$d_mblen'
17140 d_mbstowcs='$d_mbstowcs'
17141 d_mbtowc='$d_mbtowc'
17142 d_memchr='$d_memchr'
17143 d_memcmp='$d_memcmp'
17144 d_memcpy='$d_memcpy'
17145 d_memmove='$d_memmove'
17146 d_memset='$d_memset'
17147 d_mkdir='$d_mkdir'
17148 d_mkdtemp='$d_mkdtemp'
17149 d_mkfifo='$d_mkfifo'
17150 d_mkstemp='$d_mkstemp'
17151 d_mkstemps='$d_mkstemps'
17152 d_mktime='$d_mktime'
17153 d_mmap='$d_mmap'
17154 d_modfl='$d_modfl'
17155 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17156 d_mprotect='$d_mprotect'
17157 d_msg='$d_msg'
17158 d_msg_ctrunc='$d_msg_ctrunc'
17159 d_msg_dontroute='$d_msg_dontroute'
17160 d_msg_oob='$d_msg_oob'
17161 d_msg_peek='$d_msg_peek'
17162 d_msg_proxy='$d_msg_proxy'
17163 d_msgctl='$d_msgctl'
17164 d_msgget='$d_msgget'
17165 d_msghdr_s='$d_msghdr_s'
17166 d_msgrcv='$d_msgrcv'
17167 d_msgsnd='$d_msgsnd'
17168 d_msync='$d_msync'
17169 d_munmap='$d_munmap'
17170 d_mymalloc='$d_mymalloc'
17171 d_nice='$d_nice'
17172 d_nl_langinfo='$d_nl_langinfo'
17173 d_nv_preserves_uv='$d_nv_preserves_uv'
17174 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17175 d_off64_t='$d_off64_t'
17176 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17177 d_oldpthreads='$d_oldpthreads'
17178 d_oldsock='$d_oldsock'
17179 d_open3='$d_open3'
17180 d_pathconf='$d_pathconf'
17181 d_pause='$d_pause'
17182 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17183 d_phostname='$d_phostname'
17184 d_pipe='$d_pipe'
17185 d_poll='$d_poll'
17186 d_portable='$d_portable'
17187 d_procselfexe='$d_procselfexe'
17188 d_pthread_atfork='$d_pthread_atfork'
17189 d_pthread_yield='$d_pthread_yield'
17190 d_pwage='$d_pwage'
17191 d_pwchange='$d_pwchange'
17192 d_pwclass='$d_pwclass'
17193 d_pwcomment='$d_pwcomment'
17194 d_pwexpire='$d_pwexpire'
17195 d_pwgecos='$d_pwgecos'
17196 d_pwpasswd='$d_pwpasswd'
17197 d_pwquota='$d_pwquota'
17198 d_qgcvt='$d_qgcvt'
17199 d_quad='$d_quad'
17200 d_readdir='$d_readdir'
17201 d_readlink='$d_readlink'
17202 d_readv='$d_readv'
17203 d_recvmsg='$d_recvmsg'
17204 d_rename='$d_rename'
17205 d_rewinddir='$d_rewinddir'
17206 d_rmdir='$d_rmdir'
17207 d_safebcpy='$d_safebcpy'
17208 d_safemcpy='$d_safemcpy'
17209 d_sanemcmp='$d_sanemcmp'
17210 d_sbrkproto='$d_sbrkproto'
17211 d_sched_yield='$d_sched_yield'
17212 d_scm_rights='$d_scm_rights'
17213 d_seekdir='$d_seekdir'
17214 d_select='$d_select'
17215 d_sem='$d_sem'
17216 d_semctl='$d_semctl'
17217 d_semctl_semid_ds='$d_semctl_semid_ds'
17218 d_semctl_semun='$d_semctl_semun'
17219 d_semget='$d_semget'
17220 d_semop='$d_semop'
17221 d_sendmsg='$d_sendmsg'
17222 d_setegid='$d_setegid'
17223 d_seteuid='$d_seteuid'
17224 d_setgrent='$d_setgrent'
17225 d_setgrps='$d_setgrps'
17226 d_sethent='$d_sethent'
17227 d_setitimer='$d_setitimer'
17228 d_setlinebuf='$d_setlinebuf'
17229 d_setlocale='$d_setlocale'
17230 d_setnent='$d_setnent'
17231 d_setpent='$d_setpent'
17232 d_setpgid='$d_setpgid'
17233 d_setpgrp2='$d_setpgrp2'
17234 d_setpgrp='$d_setpgrp'
17235 d_setprior='$d_setprior'
17236 d_setproctitle='$d_setproctitle'
17237 d_setpwent='$d_setpwent'
17238 d_setregid='$d_setregid'
17239 d_setresgid='$d_setresgid'
17240 d_setresuid='$d_setresuid'
17241 d_setreuid='$d_setreuid'
17242 d_setrgid='$d_setrgid'
17243 d_setruid='$d_setruid'
17244 d_setsent='$d_setsent'
17245 d_setsid='$d_setsid'
17246 d_setvbuf='$d_setvbuf'
17247 d_sfio='$d_sfio'
17248 d_shm='$d_shm'
17249 d_shmat='$d_shmat'
17250 d_shmatprototype='$d_shmatprototype'
17251 d_shmctl='$d_shmctl'
17252 d_shmdt='$d_shmdt'
17253 d_shmget='$d_shmget'
17254 d_sigaction='$d_sigaction'
17255 d_sigprocmask='$d_sigprocmask'
17256 d_sigsetjmp='$d_sigsetjmp'
17257 d_sockatmark='$d_sockatmark'
17258 d_sockatmarkproto='$d_sockatmarkproto'
17259 d_socket='$d_socket'
17260 d_socklen_t='$d_socklen_t'
17261 d_sockpair='$d_sockpair'
17262 d_socks5_init='$d_socks5_init'
17263 d_sqrtl='$d_sqrtl'
17264 d_sresgproto='$d_sresgproto'
17265 d_sresuproto='$d_sresuproto'
17266 d_statblks='$d_statblks'
17267 d_statfs_f_flags='$d_statfs_f_flags'
17268 d_statfs_s='$d_statfs_s'
17269 d_statvfs='$d_statvfs'
17270 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17271 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17272 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17273 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17274 d_stdio_stream_array='$d_stdio_stream_array'
17275 d_stdiobase='$d_stdiobase'
17276 d_stdstdio='$d_stdstdio'
17277 d_strchr='$d_strchr'
17278 d_strcoll='$d_strcoll'
17279 d_strctcpy='$d_strctcpy'
17280 d_strerrm='$d_strerrm'
17281 d_strerror='$d_strerror'
17282 d_strftime='$d_strftime'
17283 d_strtod='$d_strtod'
17284 d_strtol='$d_strtol'
17285 d_strtold='$d_strtold'
17286 d_strtoll='$d_strtoll'
17287 d_strtoq='$d_strtoq'
17288 d_strtoul='$d_strtoul'
17289 d_strtoull='$d_strtoull'
17290 d_strtouq='$d_strtouq'
17291 d_strxfrm='$d_strxfrm'
17292 d_suidsafe='$d_suidsafe'
17293 d_symlink='$d_symlink'
17294 d_syscall='$d_syscall'
17295 d_syscallproto='$d_syscallproto'
17296 d_sysconf='$d_sysconf'
17297 d_sysernlst='$d_sysernlst'
17298 d_syserrlst='$d_syserrlst'
17299 d_system='$d_system'
17300 d_tcgetpgrp='$d_tcgetpgrp'
17301 d_tcsetpgrp='$d_tcsetpgrp'
17302 d_telldir='$d_telldir'
17303 d_telldirproto='$d_telldirproto'
17304 d_time='$d_time'
17305 d_times='$d_times'
17306 d_truncate='$d_truncate'
17307 d_tzname='$d_tzname'
17308 d_u32align='$d_u32align'
17309 d_ualarm='$d_ualarm'
17310 d_umask='$d_umask'
17311 d_uname='$d_uname'
17312 d_union_semun='$d_union_semun'
17313 d_unordered='$d_unordered'
17314 d_usleep='$d_usleep'
17315 d_usleepproto='$d_usleepproto'
17316 d_ustat='$d_ustat'
17317 d_vendorarch='$d_vendorarch'
17318 d_vendorbin='$d_vendorbin'
17319 d_vendorlib='$d_vendorlib'
17320 d_vfork='$d_vfork'
17321 d_void_closedir='$d_void_closedir'
17322 d_voidsig='$d_voidsig'
17323 d_voidtty='$d_voidtty'
17324 d_volatile='$d_volatile'
17325 d_vprintf='$d_vprintf'
17326 d_wait4='$d_wait4'
17327 d_waitpid='$d_waitpid'
17328 d_wcstombs='$d_wcstombs'
17329 d_wctomb='$d_wctomb'
17330 d_writev='$d_writev'
17331 d_xenix='$d_xenix'
17332 date='$date'
17333 db_hashtype='$db_hashtype'
17334 db_prefixtype='$db_prefixtype'
17335 db_version_major='$db_version_major'
17336 db_version_minor='$db_version_minor'
17337 db_version_patch='$db_version_patch'
17338 defvoidused='$defvoidused'
17339 direntrytype='$direntrytype'
17340 dlext='$dlext'
17341 dlsrc='$dlsrc'
17342 doublesize='$doublesize'
17343 drand01='$drand01'
17344 dynamic_ext='$dynamic_ext'
17345 eagain='$eagain'
17346 ebcdic='$ebcdic'
17347 echo='$echo'
17348 egrep='$egrep'
17349 emacs='$emacs'
17350 eunicefix='$eunicefix'
17351 exe_ext='$exe_ext'
17352 expr='$expr'
17353 extensions='$extensions'
17354 extras='$extras'
17355 fflushNULL='$fflushNULL'
17356 fflushall='$fflushall'
17357 find='$find'
17358 firstmakefile='$firstmakefile'
17359 flex='$flex'
17360 fpossize='$fpossize'
17361 fpostype='$fpostype'
17362 freetype='$freetype'
17363 from='$from'
17364 full_ar='$full_ar'
17365 full_csh='$full_csh'
17366 full_sed='$full_sed'
17367 gccosandvers='$gccosandvers'
17368 gccversion='$gccversion'
17369 gidformat='$gidformat'
17370 gidsign='$gidsign'
17371 gidsize='$gidsize'
17372 gidtype='$gidtype'
17373 glibpth='$glibpth'
17374 gmake='$gmake'
17375 grep='$grep'
17376 groupcat='$groupcat'
17377 groupstype='$groupstype'
17378 gzip='$gzip'
17379 h_fcntl='$h_fcntl'
17380 h_sysfile='$h_sysfile'
17381 hint='$hint'
17382 hostcat='$hostcat'
17383 i16size='$i16size'
17384 i16type='$i16type'
17385 i32size='$i32size'
17386 i32type='$i32type'
17387 i64size='$i64size'
17388 i64type='$i64type'
17389 i8size='$i8size'
17390 i8type='$i8type'
17391 i_arpainet='$i_arpainet'
17392 i_bsdioctl='$i_bsdioctl'
17393 i_db='$i_db'
17394 i_dbm='$i_dbm'
17395 i_dirent='$i_dirent'
17396 i_dld='$i_dld'
17397 i_dlfcn='$i_dlfcn'
17398 i_fcntl='$i_fcntl'
17399 i_float='$i_float'
17400 i_fp='$i_fp'
17401 i_fp_class='$i_fp_class'
17402 i_gdbm='$i_gdbm'
17403 i_grp='$i_grp'
17404 i_ieeefp='$i_ieeefp'
17405 i_inttypes='$i_inttypes'
17406 i_langinfo='$i_langinfo'
17407 i_libutil='$i_libutil'
17408 i_limits='$i_limits'
17409 i_locale='$i_locale'
17410 i_machcthr='$i_machcthr'
17411 i_malloc='$i_malloc'
17412 i_math='$i_math'
17413 i_memory='$i_memory'
17414 i_mntent='$i_mntent'
17415 i_ndbm='$i_ndbm'
17416 i_netdb='$i_netdb'
17417 i_neterrno='$i_neterrno'
17418 i_netinettcp='$i_netinettcp'
17419 i_niin='$i_niin'
17420 i_poll='$i_poll'
17421 i_prot='$i_prot'
17422 i_pthread='$i_pthread'
17423 i_pwd='$i_pwd'
17424 i_rpcsvcdbm='$i_rpcsvcdbm'
17425 i_sfio='$i_sfio'
17426 i_sgtty='$i_sgtty'
17427 i_shadow='$i_shadow'
17428 i_socks='$i_socks'
17429 i_stdarg='$i_stdarg'
17430 i_stddef='$i_stddef'
17431 i_stdlib='$i_stdlib'
17432 i_string='$i_string'
17433 i_sunmath='$i_sunmath'
17434 i_sysaccess='$i_sysaccess'
17435 i_sysdir='$i_sysdir'
17436 i_sysfile='$i_sysfile'
17437 i_sysfilio='$i_sysfilio'
17438 i_sysin='$i_sysin'
17439 i_sysioctl='$i_sysioctl'
17440 i_syslog='$i_syslog'
17441 i_sysmman='$i_sysmman'
17442 i_sysmode='$i_sysmode'
17443 i_sysmount='$i_sysmount'
17444 i_sysndir='$i_sysndir'
17445 i_sysparam='$i_sysparam'
17446 i_sysresrc='$i_sysresrc'
17447 i_syssecrt='$i_syssecrt'
17448 i_sysselct='$i_sysselct'
17449 i_syssockio='$i_syssockio'
17450 i_sysstat='$i_sysstat'
17451 i_sysstatfs='$i_sysstatfs'
17452 i_sysstatvfs='$i_sysstatvfs'
17453 i_systime='$i_systime'
17454 i_systimek='$i_systimek'
17455 i_systimes='$i_systimes'
17456 i_systypes='$i_systypes'
17457 i_sysuio='$i_sysuio'
17458 i_sysun='$i_sysun'
17459 i_sysutsname='$i_sysutsname'
17460 i_sysvfs='$i_sysvfs'
17461 i_syswait='$i_syswait'
17462 i_termio='$i_termio'
17463 i_termios='$i_termios'
17464 i_time='$i_time'
17465 i_unistd='$i_unistd'
17466 i_ustat='$i_ustat'
17467 i_utime='$i_utime'
17468 i_values='$i_values'
17469 i_varargs='$i_varargs'
17470 i_varhdr='$i_varhdr'
17471 i_vfork='$i_vfork'
17472 ignore_versioned_solibs='$ignore_versioned_solibs'
17473 inc_version_list='$inc_version_list'
17474 inc_version_list_init='$inc_version_list_init'
17475 incpath='$incpath'
17476 inews='$inews'
17477 installarchlib='$installarchlib'
17478 installbin='$installbin'
17479 installman1dir='$installman1dir'
17480 installman3dir='$installman3dir'
17481 installprefix='$installprefix'
17482 installprefixexp='$installprefixexp'
17483 installprivlib='$installprivlib'
17484 installscript='$installscript'
17485 installsitearch='$installsitearch'
17486 installsitebin='$installsitebin'
17487 installsitelib='$installsitelib'
17488 installstyle='$installstyle'
17489 installusrbinperl='$installusrbinperl'
17490 installvendorarch='$installvendorarch'
17491 installvendorbin='$installvendorbin'
17492 installvendorlib='$installvendorlib'
17493 intsize='$intsize'
17494 issymlink='$issymlink'
17495 ivdformat='$ivdformat'
17496 ivsize='$ivsize'
17497 ivtype='$ivtype'
17498 known_extensions='$known_extensions'
17499 ksh='$ksh'
17500 ld='$ld'
17501 lddlflags='$lddlflags'
17502 ldflags='$ldflags'
17503 ldflags_uselargefiles='$ldflags_uselargefiles'
17504 ldlibpthname='$ldlibpthname'
17505 less='$less'
17506 lib_ext='$lib_ext'
17507 libc='$libc'
17508 libperl='$libperl'
17509 libpth='$libpth'
17510 libs='$libs'
17511 libsdirs='$libsdirs'
17512 libsfiles='$libsfiles'
17513 libsfound='$libsfound'
17514 libspath='$libspath'
17515 libswanted='$libswanted'
17516 libswanted_uselargefiles='$libswanted_uselargefiles'
17517 line='$line'
17518 lint='$lint'
17519 lkflags='$lkflags'
17520 ln='$ln'
17521 lns='$lns'
17522 locincpth='$locincpth'
17523 loclibpth='$loclibpth'
17524 longdblsize='$longdblsize'
17525 longlongsize='$longlongsize'
17526 longsize='$longsize'
17527 lp='$lp'
17528 lpr='$lpr'
17529 ls='$ls'
17530 lseeksize='$lseeksize'
17531 lseektype='$lseektype'
17532 mail='$mail'
17533 mailx='$mailx'
17534 make='$make'
17535 make_set_make='$make_set_make'
17536 mallocobj='$mallocobj'
17537 mallocsrc='$mallocsrc'
17538 malloctype='$malloctype'
17539 man1dir='$man1dir'
17540 man1direxp='$man1direxp'
17541 man1ext='$man1ext'
17542 man3dir='$man3dir'
17543 man3direxp='$man3direxp'
17544 man3ext='$man3ext'
17545 mips_type='$mips_type'
17546 mkdir='$mkdir'
17547 mmaptype='$mmaptype'
17548 modetype='$modetype'
17549 more='$more'
17550 multiarch='$multiarch'
17551 mv='$mv'
17552 myarchname='$myarchname'
17553 mydomain='$mydomain'
17554 myhostname='$myhostname'
17555 myuname='$myuname'
17556 n='$n'
17557 need_va_copy='$need_va_copy'
17558 netdb_hlen_type='$netdb_hlen_type'
17559 netdb_host_type='$netdb_host_type'
17560 netdb_name_type='$netdb_name_type'
17561 netdb_net_type='$netdb_net_type'
17562 nm='$nm'
17563 nm_opt='$nm_opt'
17564 nm_so_opt='$nm_so_opt'
17565 nonxs_ext='$nonxs_ext'
17566 nroff='$nroff'
17567 nvEUformat='$nvEUformat'
17568 nvFUformat='$nvFUformat'
17569 nvGUformat='$nvGUformat'
17570 nveformat='$nveformat'
17571 nvfformat='$nvfformat'
17572 nvgformat='$nvgformat'
17573 nvsize='$nvsize'
17574 nvtype='$nvtype'
17575 o_nonblock='$o_nonblock'
17576 obj_ext='$obj_ext'
17577 old_pthread_create_joinable='$old_pthread_create_joinable'
17578 optimize='$optimize'
17579 orderlib='$orderlib'
17580 osname='$osname'
17581 osvers='$osvers'
17582 otherlibdirs='$otherlibdirs'
17583 package='$package'
17584 pager='$pager'
17585 passcat='$passcat'
17586 patchlevel='$patchlevel'
17587 path_sep='$path_sep'
17588 perl5='$perl5'
17589 perl='$perl'
17590 perl_patchlevel='$perl_patchlevel'
17591 perladmin='$perladmin'
17592 perllibs='$perllibs'
17593 perlpath='$perlpath'
17594 pg='$pg'
17595 phostname='$phostname'
17596 pidtype='$pidtype'
17597 plibpth='$plibpth'
17598 pm_apiversion='$pm_apiversion'
17599 pmake='$pmake'
17600 pr='$pr'
17601 prefix='$prefix'
17602 prefixexp='$prefixexp'
17603 privlib='$privlib'
17604 privlibexp='$privlibexp'
17605 procselfexe='$procselfexe'
17606 prototype='$prototype'
17607 ptrsize='$ptrsize'
17608 quadkind='$quadkind'
17609 quadtype='$quadtype'
17610 randbits='$randbits'
17611 randfunc='$randfunc'
17612 randseedtype='$randseedtype'
17613 ranlib='$ranlib'
17614 rd_nodata='$rd_nodata'
17615 revision='$revision'
17616 rm='$rm'
17617 rmail='$rmail'
17618 run='$run'
17619 runnm='$runnm'
17620 sPRIEUldbl='$sPRIEUldbl'
17621 sPRIFUldbl='$sPRIFUldbl'
17622 sPRIGUldbl='$sPRIGUldbl'
17623 sPRIXU64='$sPRIXU64'
17624 sPRId64='$sPRId64'
17625 sPRIeldbl='$sPRIeldbl'
17626 sPRIfldbl='$sPRIfldbl'
17627 sPRIgldbl='$sPRIgldbl'
17628 sPRIi64='$sPRIi64'
17629 sPRIo64='$sPRIo64'
17630 sPRIu64='$sPRIu64'
17631 sPRIx64='$sPRIx64'
17632 sSCNfldbl='$sSCNfldbl'
17633 sched_yield='$sched_yield'
17634 scriptdir='$scriptdir'
17635 scriptdirexp='$scriptdirexp'
17636 sed='$sed'
17637 seedfunc='$seedfunc'
17638 selectminbits='$selectminbits'
17639 selecttype='$selecttype'
17640 sendmail='$sendmail'
17641 sh='$sh'
17642 shar='$shar'
17643 sharpbang='$sharpbang'
17644 shmattype='$shmattype'
17645 shortsize='$shortsize'
17646 shrpenv='$shrpenv'
17647 shsharp='$shsharp'
17648 sig_count='$sig_count'
17649 sig_name='$sig_name'
17650 sig_name_init='$sig_name_init'
17651 sig_num='$sig_num'
17652 sig_num_init='$sig_num_init'
17653 sig_size='$sig_size'
17654 signal_t='$signal_t'
17655 sitearch='$sitearch'
17656 sitearchexp='$sitearchexp'
17657 sitebin='$sitebin'
17658 sitebinexp='$sitebinexp'
17659 sitelib='$sitelib'
17660 sitelib_stem='$sitelib_stem'
17661 sitelibexp='$sitelibexp'
17662 siteprefix='$siteprefix'
17663 siteprefixexp='$siteprefixexp'
17664 sizesize='$sizesize'
17665 sizetype='$sizetype'
17666 sleep='$sleep'
17667 smail='$smail'
17668 so='$so'
17669 sockethdr='$sockethdr'
17670 socketlib='$socketlib'
17671 socksizetype='$socksizetype'
17672 sort='$sort'
17673 spackage='$spackage'
17674 spitshell='$spitshell'
17675 src='$src'
17676 ssizetype='$ssizetype'
17677 startperl='$startperl'
17678 startsh='$startsh'
17679 static_ext='$static_ext'
17680 stdchar='$stdchar'
17681 stdio_base='$stdio_base'
17682 stdio_bufsiz='$stdio_bufsiz'
17683 stdio_cnt='$stdio_cnt'
17684 stdio_filbuf='$stdio_filbuf'
17685 stdio_ptr='$stdio_ptr'
17686 stdio_stream_array='$stdio_stream_array'
17687 strings='$strings'
17688 submit='$submit'
17689 subversion='$subversion'
17690 sysman='$sysman'
17691 tail='$tail'
17692 tar='$tar'
17693 targetarch='$targetarch'
17694 tbl='$tbl'
17695 tee='$tee'
17696 test='$test'
17697 timeincl='$timeincl'
17698 timetype='$timetype'
17699 to='$to'
17700 touch='$touch'
17701 tr='$tr'
17702 trnl='$trnl'
17703 troff='$troff'
17704 u16size='$u16size'
17705 u16type='$u16type'
17706 u32size='$u32size'
17707 u32type='$u32type'
17708 u64size='$u64size'
17709 u64type='$u64type'
17710 u8size='$u8size'
17711 u8type='$u8type'
17712 uidformat='$uidformat'
17713 uidsign='$uidsign'
17714 uidsize='$uidsize'
17715 uidtype='$uidtype'
17716 uname='$uname'
17717 uniq='$uniq'
17718 uquadtype='$uquadtype'
17719 use5005threads='$use5005threads'
17720 use64bitall='$use64bitall'
17721 use64bitint='$use64bitint'
17722 usecrosscompile='$usecrosscompile'
17723 usedl='$usedl'
17724 useithreads='$useithreads'
17725 uselargefiles='$uselargefiles'
17726 uselongdouble='$uselongdouble'
17727 usemorebits='$usemorebits'
17728 usemultiplicity='$usemultiplicity'
17729 usemymalloc='$usemymalloc'
17730 usenm='$usenm'
17731 useopcode='$useopcode'
17732 useperlio='$useperlio'
17733 useposix='$useposix'
17734 usereentrant='$usereentrant'
17735 usesfio='$usesfio'
17736 useshrplib='$useshrplib'
17737 usesocks='$usesocks'
17738 usethreads='$usethreads'
17739 usevendorprefix='$usevendorprefix'
17740 usevfork='$usevfork'
17741 usrinc='$usrinc'
17742 uuname='$uuname'
17743 uvXUformat='$uvXUformat'
17744 uvoformat='$uvoformat'
17745 uvsize='$uvsize'
17746 uvtype='$uvtype'
17747 uvuformat='$uvuformat'
17748 uvxformat='$uvxformat'
17749 vendorarch='$vendorarch'
17750 vendorarchexp='$vendorarchexp'
17751 vendorbin='$vendorbin'
17752 vendorbinexp='$vendorbinexp'
17753 vendorlib='$vendorlib'
17754 vendorlib_stem='$vendorlib_stem'
17755 vendorlibexp='$vendorlibexp'
17756 vendorprefix='$vendorprefix'
17757 vendorprefixexp='$vendorprefixexp'
17758 version='$version'
17759 version_patchlevel_string='$version_patchlevel_string'
17760 versiononly='$versiononly'
17761 vi='$vi'
17762 voidflags='$voidflags'
17763 xlibpth='$xlibpth'
17764 xs_apiversion='$xs_apiversion'
17765 yacc='$yacc'
17766 yaccflags='$yaccflags'
17767 zcat='$zcat'
17768 zip='$zip'
17769 EOT
17770
17771 : Add in command line options if available
17772 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17773
17774 : add special variables
17775 $test -f $src/patchlevel.h && \
17776 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17777 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17778 echo "PERL_CONFIG_SH=true" >>config.sh
17779
17780 : propagate old symbols
17781 if $test -f UU/config.sh; then
17782         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17783         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17784         $sort | $uniq -u >UU/oldsyms
17785         set X `cat UU/oldsyms`
17786         shift
17787         case $# in
17788         0) ;;
17789         *)
17790                 cat <<EOM
17791 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17792 EOM
17793                 echo "# Variables propagated from previous config.sh file." >>config.sh
17794                 for sym in `cat UU/oldsyms`; do
17795                         echo "    Propagating $hint variable "'$'"$sym..."
17796                         eval 'tmp="$'"${sym}"'"'
17797                         echo "$tmp" | \
17798                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17799                 done
17800                 ;;
17801         esac
17802 fi
17803
17804 : Finish up by extracting the .SH files
17805 case "$alldone" in
17806 exit)
17807         $rm -rf UU
17808         echo "Extraction done."
17809         exit 0
17810         ;;
17811 cont)
17812         ;;
17813 '')
17814         dflt=''
17815         nostick=true
17816         $cat <<EOM
17817
17818 If you'd like to make any changes to the config.sh file before I begin
17819 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17820
17821 EOM
17822         rp="Press return or use a shell escape to edit config.sh:"
17823         . UU/myread
17824         nostick=''
17825         case "$ans" in
17826         '') ;;
17827         *) : in case they cannot read
17828                 sh 1>&4 -c "$ans";;
17829         esac
17830         ;;
17831 esac
17832
17833 : if this fails, just run all the .SH files by hand
17834 . ./config.sh
17835
17836 echo " "
17837 exec 1>&4
17838 pwd=`pwd`
17839 . ./UU/extract
17840 cd "$pwd"
17841
17842 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17843         dflt=y
17844         case "$silent" in
17845         true) ;;
17846         *)
17847                 $cat <<EOM
17848
17849 Now you need to generate make dependencies by running "$make depend".
17850 You might prefer to run it in background: "$make depend > makedepend.out &"
17851 It can take a while, so you might not want to run it right now.
17852
17853 EOM
17854                 ;;
17855         esac
17856         rp="Run $make depend now?"
17857         . UU/myread
17858         case "$ans" in
17859         y*)
17860                 $make depend && echo "Now you must run '$make'."
17861                 ;;
17862         *)
17863                 echo "You must run '$make depend' then '$make'."
17864                 ;;
17865         esac
17866 elif test -f [Mm]akefile; then
17867         echo " "
17868         echo "Now you must run a $make."
17869 else
17870         echo "Configure done."
17871 fi
17872
17873 if $test -f Policy.sh; then
17874     $cat <<EOM
17875
17876 If you compile $package on a different machine or from a different object
17877 directory, copy the Policy.sh file from this object directory to the
17878 new one before you run Configure -- this will help you with most of
17879 the policy defaults.
17880
17881 EOM
17882 fi
17883 if $test -f config.msg; then
17884     echo "Hmm.  I also noted the following information while running:"
17885     echo " "
17886     $cat config.msg >&4
17887     $rm -f config.msg
17888 fi
17889 $rm -f kit*isdone ark*isdone
17890 $rm -rf UU
17891
17892 : End of Configure
17893